[SCM] xboard PKG branch, master, updated. debian/4.4.0.beta1-1-6-g6ced2a4

Clint Adams schizo at debian.org
Sat Sep 19 03:06:47 UTC 2009


The following commit has been merged in the master branch:
commit 67001843edc54be5bcb69c3bb04d106b61b0e47f
Author: Clint Adams <schizo at debian.org>
Date:   Fri Sep 18 22:51:42 2009 -0400

    Imported Upstream version 4.4.0

diff --git a/AUTHORS b/AUTHORS
index b24e950..b1d150c 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,4 +1,5 @@
 Contributions of xboard and WinBoard authors by file
+(get files names via git log --pretty=oneline --name-only --author=<AUTHORNAME>  v4.2.7..HEAD  |sort |uniq)
 
 0. Files covered
 
@@ -7,11 +8,14 @@ group are included in the WinBoard source distribution but not in the
 xboard distribution.  All are part of the joint xboard/WinBoard source
 base and are covered by the same copyrights and licensing terms.
 
+AUTHORS
+autogen.sh
 backend.c
 backend.h
 backendz.h
 bitmaps/*
 book.c
+ChangeLog
 childio.c
 childio.h
 cmail.in
@@ -19,17 +23,21 @@ cmail.man
 common.h
 config.h.in
 configure.ac
+COPYING
+COPYRIGHT
 engine-intf.txt
 FAQ.html
 frontend.h
 gamelist.c
 gettext.h
 ics-parsing.txt
+INSTALL
 lists.c
 lists.h
 Makefile.am
 moves.c
 moves.h
+NEWS
 parser.h
 parser.l
 pgntags.c
@@ -51,7 +59,6 @@ xgamelist.h
 xhistory.c
 xhistory.h
 xoptions.c
-xoptions.h
 zic2xpm.c
 zic2xpm.man
 zippy.c
@@ -59,14 +66,19 @@ zippy.h
 zippy.README
 
 winboard/bitmaps/*
+winboard/COMPILING
 winboard/config.h
+winboard/defaults.h
+winboard/help/*
 winboard/help.c
 winboard/help.h
 winboard/jaws.c
-winboard/jaws.h
-winboard/jaws.rc
+winboard/makefile.gcc
+winboard/makefile.ms
 winboard/parser.c
 winboard/resource.h
+winboard/shogibitmaps/*
+winboard/WB4Jaws.dev
 winboard/wclipbrd.c
 winboard/wclipbrd.h
 winboard/wedittags.c
@@ -83,15 +95,13 @@ winboard/winboard.rtf (compiles to winboard.hlp)
 winboard/wlayout.c
 winboard/woptions.c
 winboard/woptions.h
+winboard/wsettings.c
 winboard/wsnap.c
 winboard/wsnap.h
 winboard/wsockerr.c
 winboard/wsockerr.h
 
 
-bitmaps/*
-bitmaps.xchess/*
-
 1. Wayne Christopher
 
 Wrote from scratch (I believe) bitmaps.xchess/*80*.bm.  Other bitmaps
@@ -194,8 +204,9 @@ mkinstalldirs, moves.c, moves.h, parser.c, parser.h, parser.l,
 pg_key.c, pgntags.c, pg_show.c, pixmaps/*, pxboard, README, READ_ME,
 readme_HGM.txt, shiphtml, shogibitmaps/*, texi2man, ToDo, uci.c,
 winboard/bitmaps/*, winboard/config.h, winboard/cygwin.mak,
-winboard/defaults.h, winboard/help.c, winboard/jaws.c,
-winboard/jaws.h, winboard/jaws.rc, winboard/parser.c,
+winboard/defaults.h, winboard/help.c, winboard/help/*,
+winboard/jaws.c, winboard/jaws.h, winboard/jaws.rc,
+winboard/makefile.gcc, winboard/makefile.ms, winboard/parser.c,
 winboard/readme.txt, winboard/resource.h, winboard/shogibitmaps/*,
 winboard/wclipbrd.c, winboard/wclipbrd.h, winboard/wedittags.c,
 winboard/wedittags.h, winboard/wengineo.c, winboard/wengineoutput.c,
@@ -204,47 +215,53 @@ winboard/whistory.c, winboard/winboard.c, winboard/winboard.h,
 winboard/winboard.htm, winboard/winboard.ini, winboard/winboard.rc,
 winboard/winboard.rtf, winboard/wlayout.c, winboard/woptions.c,
 winboard/woptions.h, winboard/wplugin.c, winboard/wplugin.h,
-winboard/wsnap.c, winboard/wsnap.h, xboard.c, xboard.h, xboard.texi,
-xedittags.c, xedittags.h, xengineoutput.c, xgamelist.c, xgamelist.h,
-xhistory.c, xhistory.h, xoptions.c, zippy.c, zippy.h, zippy.README
+winboard/wsettings.c, winboard/wsnap.c, winboard/wsnap.h, xboard.c,
+xboard.h, xboard.texi, xedittags.c, xedittags.h, xengineoutput.c,
+xgamelist.c, xgamelist.h, xhistory.c, xhistory.h, xoptions.c, zippy.c,
+zippy.h, zippy.README
 
+also: worked on the installer files (not in the tar-ball, but available via Savannah)
 
 12. Arun Persaud <arun AT nubati DOT net> 
  
-changes to: acconfig.h, aclocal.m4, AUTHORS, autogen.sh, backend.c,
-backend.h, backendz.h, bitmaps/*, book.c, ChangeLog, childio.c,
-childio.h, cmail.in, common.h, config.guess, config.h.in, configure,
-configure.ac, COPYING, COPYRIGHT, copyright.texi, engine-intf.html,
-FAQ.html, frontend.h, gamelist.c, gettext.h, .gitignore,
-ics-parsing.txt, INSTALL, lists.c, lists.h, Makefile.am, manual.html,
-mkinstalldirs, moves.c, moves.h, NEWS, parser.c, parser.h, parser.l,
-pg_key.c, pgntags.c, pg_show.c, pixmaps/pixmaps.h, po/de.po,
+changes to: acconfig.h, AUTHORS, autogen.sh, backend.c, backend.h,
+backendz.h, book.c, ChangeLog, childio.c, childio.h, cmail.in,
+common.h, config.h.in, configure.ac, COPYING, COPYRIGHT,
+copyright.texi, FAQ.html, frontend.h, gamelist.c, gettext.h,
+.gitignore, gpl.texinfo, ics-parsing.txt, INSTALL, install-sh,
+lists.c, lists.h, Makefile.am, moves.c, moves.h, NEWS, parser.c,
+parser.h, parser.l, pgntags.c, pixmaps/pixmaps.h, po/de.po,
 po/LINGUAS, po/Makefile.in.in, README, READ_ME, shogibitmaps/README,
 texi2man, ToDo, uci.c, uci/uci_protocol.txt,
 winboard/bitmaps/bitmaps.h, winboard/config.h, winboard/defaults.h,
-winboard/jaws.c, winboard/mingw32.mak, winboard/parser.c,
-winboard/readme.txt, winboard/READ_ME.txt,
-winboard/shogibitmaps/README, winboard/wclipbrd.c,
-winboard/wclipbrd.h, winboard/wedittags.c, winboard/wedittags.h,
-winboard/wengineo.c, winboard/wengineoutput.c, winboard/wevalgraph.c,
-winboard/wgamelist.c, winboard/wgamelist.h, winboard/whistory.c,
-winboard/winboard.c, winboard/winboard.h, winboard/WINBOARD.HLP,
-winboard/winboard.htm, winboard/winboard.rc, winboard/wlayout.c,
-winboard/woptions.c, winboard/woptions.h, winboard/wplugin.c,
-winboard/wplugin.h, winboard/wsnap.c, winboard/wsnap.h,
+winboard/jaws.c, winboard/parser.c, winboard/readme.txt,
+winboard/shogibitmaps/README, winboard/WB4Jaws.dev,
+winboard/wclipbrd.c, winboard/wclipbrd.h, winboard/wedittags.c,
+winboard/wedittags.h, winboard/wengineo.c, winboard/wengineoutput.c,
+winboard/wevalgraph.c, winboard/wgamelist.c, winboard/wgamelist.h,
+winboard/whistory.c, winboard/winboard.c, winboard/winboard.h,
+winboard/winboard.rc, winboard/wlayout.c, winboard/woptions.c,
+winboard/woptions.h, winboard/wsnap.c, winboard/wsnap.h,
 winboard/wsockerr.c, winboard/wsockerr.h, xboard.c, xboard.h,
-xboard.texi, xboard.texinfo.in, xedittags.c, xedittags.h,
-xengineoutput.c, xgamelist.c, xgamelist.h, xhistory.c, xhistory.h,
-xoptions.c, zic2xpm.c, zic2xpm.man, zippy.c, zippy.h, zippy.README
+xboard.texi, xedittags.c, xedittags.h, xengineoutput.c, xgamelist.c,
+xgamelist.h, xhistory.c, xhistory.h, xoptions.c, zic2xpm.c,
+zic2xpm.man, zippy.c, zippy.h, zippy.README
+
 
 13. Eric Mullins <emwine AT earthlink DOT net>
 
 Makefiles for different compilers for windows, several changes for
 those compilers
 
-change to: AUTHORS, backend.c, winboard/config.h, winboard/help.c,
-winboard/help.h, winboard/makefile.gcc, winboard/makefile.ms,
+change to: AUTHORS, backend.c, README, winboard/bcc32.cfg,
+winboard/borland.mak, winboard/COMPILING, winboard/config.h,
+winboard/cygwin.mak, winboard/help.c, winboard/help.h,
+winboard/jaws.c, winboard/makefile.gcc, winboard/makefile.ms,
+winboard/mingw32.mak, winboard/msvc7.mak, winboard/msvc.mak,
 winboard/resource.h, winboard/res/winboard.exe.manifest,
-winboard/wevalgraph.c, winboard/winboard.c, winboard/Winboard.dev,
-winboard/winboard.dsp, winboard/winboard.dsw, winboard/winboard.h,
-winboard/winboard.ini, winboard/winboard.rc, winboard/woptions.c
+winboard/WB4Jaws.dev, winboard/wevalgraph.c, winboard/winboard.c,
+winboard/Winboard.dev, winboard/winboard.dsp, winboard/winboard.dsw,
+winboard/winboard.h, winboard/winboard.ini, winboard/winboard.rc,
+winboard/woptions.c
+
+also: prepared installer files for winboard (not in the tar-ball, but available via Savannah)
\ No newline at end of file
diff --git a/ChangeLog b/ChangeLog
index af0c6fb..036967d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4786 +1,5031 @@
-ChangeLog for XBoard/WinBoard 
------------------------------
-
-(latest entries created by git log --no-merges --pretty="* %ai: %s%n %b" vnew vold)
-	
-* 2009-07-12 11:34:28 -0700: cleaned up some more copyright notices
- 
-* 2009-07-12 11:22:30 -0700: updated copyright to reflect A. Scotte as copyright holder
- need to mention him, since the paperwork won't be finished before the next release
-
-* 2009-07-12 10:56:29 -0700: updated patchlevel to "k"
- 
-* 2009-07-12 10:53:50 -0700: fixed autoconf problem with VERSION/PATCHLEVEL variables
- xboard used it's own version of PRODUCT, VERSION and PATCHLEVEL variables. Switched to PACKAGE_STRING provided by autoconf
-
-* 2009-07-12 10:29:46 -0700: cleaned up old CVS left overs
- removed $Id tags from all files
-
-* 2009-07-12 10:10:17 -0700: converted xhistory via dos2unix
- 
-* 2009-07-12 10:09:24 -0700: fixed crash in history window
- someone discovered that opening the move-history window in XBoard leads to
-an immediate crash. Turns out that renaming the menu item broke it! (The
-name of the item was apprently used elsewhere in the code to access it,
-for putting a check mark there.)
-
-* 2009-07-12 10:04:30 -0700: fix for Animation of castling moves in Chess960
- Animation of castling moves in Chess960 turned out to sometimes make the
-king disappear from the display. For the time being I patched this in
-xboard.c to suppress animation of FRC castling moves altogether. As FRC
-castlings internally are represented as KxR, the to-square does not make
-sense anyway, which made the animation look very weird even when it led
-not to a king disappearance act. And the Rook move of a castling is never
-animated.
-
-* 2009-07-11 22:44:53 -0600: Update GCC makefile to remove .obj targets.
- Dunno how they got in there, but they should be .o
-
-* 2009-07-11 22:42:41 -0600: Update makefile dependencies on help.c and help.h.
- 
-* 2009-07-11 22:36:59 -0600: Allow compiling with MSVC6.0 and 4.1
- Move prototypes into help.h, after making sure that DWORD_PTR is
-defined.  Include help.h from winboard.c and help.c so both files
-benefit from the definition.
-
-* 2009-07-11 18:26:16 -0700:  lists these accelerator keys in the menus for JAWS
- 
-* 2009-07-11 18:24:19 -0700: added shortcuts
- This patch allows the use of Ctrl+C and Ctrl+V for Copy Game and Paste even in I C S mode when the board has focus.
-
-* 2009-07-11 18:22:17 -0700: better handling of pasting a game without PGN tags
- patch in wclipbrd.h to make it smarter to decide between pasting a game or a position so it can handle games without PGN tags. If it doesn't parse as a FEN it is assumed to be a game.
-
-* 2009-07-11 18:20:56 -0700: fixed parser error for knight move
- The parser had a strange quirk: it recognized bd2 as a valid Knight move
-(Nb1-d2) while this SAN format should be reserved for Pawn moves only.
-
-* 2009-07-11 18:19:30 -0700:  fixed a few warnings in connection with the help patch (now warning free)
- 
-* 2009-07-11 18:13:50 -0700: some major re-assignment of accelerator keys in the JAWS
- 
-* 2009-07-11 16:54:53 -0600: several small fixes
- uptracked winboard.ini
-
-Cleanup: moved "Some definitions required..." from winboard.c to config.h,
-and combined some definitions from borland w/ MS.
-
-Changed internal HtmlHelp return type and 4th argument to facilitate various
-compilers.  These changes, while not strictly adhering to HtmlHelp() conventions,
-won't impact anything since the function modified is internal only.
-
-Modified HtmlHelp return values to integer to silence warnings.
-
-Added help.c to the project in makefile.gcc & makefile.ms.
-
-Fixed duplicate resource in winboard.rc.
-
-* 2009-07-09 22:08:15 -0700: added JAWS support; help files for Vista; bugfixes for winboard.c
- * JAWS support
-* help files should now work under Vista (the user has to have either a program to view old windows help files or to view html-files installed)
-* I fixed the tabbing between all windows that were added according to Tim's sugestions.
-* I added typing in of a move number in the move type-in dialog as a shortcut to going to that position by use of the < and > buttons. Mainly intended to ease life for the blind, but I think it can be generally useful. (Although the move-history dialog provides that functionality too, this is quicker if you don't happen to have it open.)
-* I added typing of a FEN in the move type-in dialog in Edit Position mode. (Which could not be used without mouse at all, and is defective in crazyhouse even with mouse, as there was no way to populate holdings.)
-
-* 2009-07-09 22:03:00 -0700: some bugfixes: ICS error handling
- * play a different sound for takebacks in ICS mode
-* pop up error messages for illegal moves for typed-in moves
-
-* 2009-07-09 21:50:41 -0700: removed no longer needed debug message
- 
-* 2009-07-09 21:48:23 -0700: fixed compile error from a previous change
- 
-* 2009-07-09 21:44:54 -0700: user selectable font in game list
- This makes the game list use the same (user selectable) font as the the move-history window.
-
-* 2009-06-30 21:27:34 -0700: fixed typos in xboard.texi documentation.
- 
-* 2009-06-30 21:16:59 -0700: updated the FAQ
- 
-* 2009-06-27 17:06:26 -0700: changed font in engine output window
- The engine-output window now uses the same font as the move-history window
-(which was selectable in the "Options  -> Fonts..." menu, while the other
-wasn't).
-
-* 2009-06-27 17:03:19 -0700: fixed some characters in xboard.texi
- It seems that copying manual sections from the RTF to th texi file did
-somehow mess up the double-quote characters, and changed them into some
-strange (unicode?) symbols.
-
-* 2009-06-27 16:56:36 -0700: two shogi related bugfixes
- I discovered a bug in the move generator for the Shogi Dragon King. I
-guess it went unnoticed so far because this is a promoted version of the
-Rook, which hardly occurs in games. (moves.c)
-
-There was also a problem with the piecesfix I sent you before; Shogi
-chosen as initial variant did use wrong piece symbols. (I had tested this
-on gothic, but there it happened to work for a different reason, unique to
-gothic.) This affects xboard.c.
-
-* 2009-06-27 16:54:04 -0700: small cleanup
- 
-* 2009-06-27 16:51:02 -0700: adds bitmaps for shogi promotions, and selects the bitmaps or pixmaps for the more rarely used piece types on a per-variant basis.
- 
-* 2009-06-27 16:44:36 -0700: adds new piece types in the promotion dialog and edit-position piece menu
- 
-* 2009-06-27 16:13:15 -0700: updated bitmaps files
- files for fairy pieces where missing, others had names that didn't work with autoloading.
-
-* 2009-06-27 16:06:35 -0700: fixed a bug concerning bitmaps
- 
-* 2009-06-27 15:53:45 -0700: give a default directory for bitmaps files (tiny change)
- this is also one of the debian patches, should be rewritten to use the correct install directory. No Author was given.
-
-* 2009-06-27 15:47:52 -0700: verbose_error_message_about_recognized_options (tiny change from Debian patches)
- 
-* 2009-06-27 15:45:14 -0700: add a visual low time warning (tiny change from Debian patches)
- 
-* 2009-06-24 23:31:52 -0700: dos 2 unix conversion of backend.c
- 
-* 2009-06-24 23:30:07 -0700: exchanged some sprintf with snprintf
- found in a patch for the debian system, extended it a bit to other sprintf's
-original patch included only 11 lines by Florian Ernst <florian at debian.org>
-
-* 2009-06-24 23:07:23 -0700: enabled a patch for default settings in winboard
- 
-* 2009-06-24 22:53:11 -0700: updated copyright notice
- 
-* 2009-06-24 22:52:20 -0700: patches a bug in chosing the initial board size on a virgin startup I introduced recently
- 
-* 2009-06-24 22:49:33 -0700: I put in testing for the winning condition in 3checks
- on a check it just goes through the entire game to subject every position on a check test, to see if there were two more.
-
-* 2009-06-24 22:47:01 -0700: updated copyright notice in docs
- 
-* 2009-06-24 22:41:40 -0700: added small patch from debian (tiny change)
- according to the debian patch tracker, this patch is by Florian Ernst <florian at debian.org>.
-It fixes whitespace issues in filename called from cmail.
-
-* 2009-06-24 22:33:13 -0700: converted dos2unix format for xboard.texi
- 
-* 2009-06-24 22:31:57 -0700: deleted two more files that don't need to be in git
- these files can be generated by autogen.sh
-
-* 2009-06-21 12:10:31 -0700: major overhaul of the -stickyWindows feature
- I did a major overhaul of the -stickyWindows feature. The game-list and ICS-interaction windows are now also sticky. I also added a form of stickiness when the main window is resized; edges of auxiliary windows sticking to the right or bottom side of the main window stay attached when the window resizes (due to nr of board squares or their size). The way the window coordinates are saved in the .ini file is now relative to the main window, and some dummy options are added to be able to recognize right- and bottom-edge sticking, and reconstruct that when WB starts up with another board size. Also added are volatile options to ensure there will be space for auxiliary windows above and left of the main window.
-
-* 2009-06-21 12:07:01 -0700: fixed long-algebraic form of drops
- The WB parser turned out not to understand the long-algebraic form of drops send by an ICS. (like B/@@-e4), so even with legality testing off I now use the SAN move for drops.
-
-* 2009-06-18 18:35:31 -0700: Refined stalemate adjudication in Suicide, some cleanup
- Refined stalemate adjudication in Suicide, which seems to be not always won
-for the stalemated side, but for the side with the smallest number of pieces.
-Cleaned up the adjudication code in the process. (backend.c moves.c, moves.h)
-Also includes a tiny change in the -autoKibitz format, as requested on
-Talkchess.
-
-* 2009-06-18 18:32:57 -0700: Enhancement of the way -autoLogo decides which logos to display
- 
-* 2009-06-16 00:06:59 -0700: bugfix and enhancement in autoKibitz mode
- changed the format of the autoKibitz: score/depth in stead of depth/score, as in PGN. I also supress the ICS time for the move now in the PGN if extended info is available.
-
-When enhancing the functionality of the autoKibitz command (using the
-opponent engine kibitz for the saved PGN) I discovered that the xengineoutput.c
-in our tree was obsolete, and contained a routine of which the arguments
-were no
-longer compatble with the call from backend.c, and caused segfaulting. I
-copied in
-the  corresponding routine in wengineo.c, which was compatible. That the
-compiler
-did not flag this is a sign of badly organized code, I suppose...
-
-The enhancement itself affected backend.c.
-
-* 2009-06-16 00:04:13 -0700: modified clock layout
- I altered the display of the clocks in the presence of engine logos; I used to
-stack them, but some inquiry on Talkchess sowed that people disliked the
-stacking. So now I display them next to each other again, but as 2-line-high
-fields to make room for te logos.
-
-* 2009-06-15 23:59:32 -0700: new zippy option zippyShortGame
- On request of Mike Adams I added a new zippy option, -zippyShortGame, to make life more difficult for abusers of abort and disconnect for cheating.
-
-* 2009-06-15 23:56:40 -0700: fixed some bugs in the animation of atomic captures
- 
-* 2009-06-13 15:27:26 -0700: some small bugfixes
- I had overlooked one place from which the FEN writer (of whicf I changed the argument types), which made WB crash if you copied a FEN (or PGN that cotained FEN) to the clipboard. I must have overlooked a warning during compile, or some depedency is not correct in the makefile. Anyway, wclipboard.c had to be changed.
-
-I also moved adjudication of some losing conditions to before tetsing for stalemate, (e.g. in atomic, if your king get destroyd you lose, even if you have no moves after that because it was your only piece.). this affects backend.c.
-
-I had used the same bits in the frule-modifier flags for indicating mandatory capture as was already used for indicating FRC-style castling. This led to frequent illegal move calls in FRC... (moves.h)
-
-* 2009-06-13 10:45:17 -0700: cleaned up HTML in FAQ.html -- still need to work on content
- 
-* 2009-06-13 09:36:26 -0700: added option for work-around for some FRC engines in regards to FRCFENs
- It suddenly occurred to me that I had promised on CCC to include an option to provide a work-around for the problem that some FRC engines do not understand FRC FENs (and thus do not play at all under WinBoard, as FRC always has to begin with sending the initial position).
-
-So I added the options -firstNeedsNoncompliantFEN, -secondNeedsNoncompliantFEN. This affects winboard.c and xboard.c, (for defining the option), common.h, backend.h, backend.c, (for implementing it), xboard.texi and winboard.rtf (decribing it). This option provides users with a means to always force the FEN castling field to KQkq (but can be used for many other work-arounds as well).
-
-* 2009-06-13 09:30:31 -0700: fixed bug with random calls
- There also seemed to be a bug with the shuffling of opening positions; I had changed the declaration of the position number from long long int to u64 to comply with MSVC, but this suppressed shuffling completely. I now changed it to int. I recently noted a problem with true randomizing anyway: this was based on srand(time()), but time() apparently did not change fast enough, so that starting several games in rapid succession (because the book line contained a 3-fold repetition) produced identical games. So I now seed the random once and for all during startup, based on the msec of the time mark, and removed the other calls to srand().
-
-* 2009-06-13 09:26:14 -0700: changed name for fairymax program in xboard.h
- 
-* 2009-06-13 09:25:07 -0700: removed my name from copyright message in help->about menu
- 
-* 2009-06-13 09:22:02 -0700: fixed -stickyWindows option
- I figured out why -stickyWindows was not working in XP and Vista
-(while it always worked under Win2K), and I think I found a fix for
-it that works under all Windows versions. (I tried XP and Win2K.)
-
-* 2009-06-13 09:20:38 -0700: Updated docs for Engine-Settings menu
- 
-* 2009-06-13 09:19:05 -0700: Awareness of winning conditions for atomic and giveaway variants; two bugfixes
- fixed bug in claim verification
-Bugfix on initial position of Great Shatranj
-
-* 2009-06-13 09:16:47 -0700: Legality testing (mandatory capture) in giveaway variants
- 
-* 2009-06-13 09:16:17 -0700: don't ignore winboard/parser.c
- 
-* 2009-06-13 09:12:15 -0700: Added new variant Twilight Chess
- 
-* 2009-06-13 09:08:57 -0700: some renaming and restructuring of WB menu items, to conform more to XBoard
- 
-* 2009-06-13 09:07:07 -0700: Fixed bug in atomic patch that interfered with non-atomic variants
- 
-* 2009-06-10 21:46:11 -0700: fixed different use of engine option compared to Polyglot
- it turns out the new Polyglot uses a sightly different version of the GUI->engine option command than the one I proposed (and implemented in XBoard; Michel sneaked in an '=' sign between the NAME and VALUE of the option, to allow for more unambiguous parsing.
-
-I guess in principle this is a good idea, so I adapted XBoard to Polyglot rather than the other way around. The result is that there are canges in xboard.c, and the documentation.
-
-I noticed that I unjustly had internationalized the option strings to be send to the engine in xoptions.c; this was of course nonsense, as this was WB protocol. So I undid that too.
-
-* 2009-06-10 21:37:47 -0700: add the already supported variants 3check and great (=Great Shatranj) to the New Variant... menu.
- 
-* 2009-06-10 21:32:22 -0700: animate explosions in variant atomic (if animate moves is on).
- 
-* 2009-06-10 21:30:19 -0700: fixed castling bug in variant twokings.
- 
-* 2009-06-10 21:22:36 -0700: fixed forteitary wins for special game variations
- feature that corrects forfeitary wins (e.g. on time) of a bare King to draws of course breaks proper operation in losers, suicide and giveaway
-
-* 2009-06-09 21:02:51 -0700: automatically test ini file extension for files from commandline option @filename
- The winboard.c is a patch that automatically tries indirection files on the
-command line (@filename type arguments) also with an extension .ini if the name itself
-did not match any existing file and contained no period. This saves the user typing the
-.ini all the time (which I started to find pretty annoying while working on the installer
-package).
-
-* 2009-06-08 15:23:58 -0700: added gamelisttag option to xboard
- also updated documentation.
-
-* 2009-06-08 15:20:00 -0700: updated RTF file for winboard
- 
-* 2009-06-06 09:12:48 -0700: fixed syntax error in texi file
- 
-* 2009-06-06 08:57:52 -0700: updated to patchlevel "j"
- 
-* 2009-06-06 09:00:25 -0700: fixed adjudicating probelm in Shantranj
- Refrain from adjudicating a draw based on insufficient mating material
-(except bare King vs bare King) in Shatranj (where in this case you can
-still win by baring the opponent's King).
-
-* 2009-06-06 08:55:17 -0700: updated documentation and FAQ
- 
-* 2009-06-04 22:52:31 -0700: source clean up. Fix compiler warning, removed unused variables, etc.
- 
-* 2009-06-04 20:43:29 -0700: adding support for different windows compiler
- Eric kindly provided us with some makefiles for different windows compiler and also fixed some issues that came up while using those compilers.
-
-* 2009-06-04 18:27:26 -0700: cleanup: got rid of a lot of files that are not needed for a new release
- lots of documentation was available in several places, old unused source files and not used graphics file were floating around in the tree. This should clean up most of it. No need to keep these files around, especially since we are using version control.
-
-* 2009-05-29 18:56:06 -0700: added the Action-menu items that allow the user to adjudicate ongoing games in Two-Machines mode.
- This was an already existing backend function from Winboard_x; I only had to create a menu item for it to be called. Due to an oversight I had forgotten to do that so far. (Logically, I should have done it in the 4.3.5 release, where I updated the XBoard menus to conform to the WinBoard menus.)
-
-I tested them, and they seem to work. (As expected.)
-
-* 2009-05-28 22:23:00 -0700: updated patchlevel to "i"
- 
-* 2009-05-28 22:19:08 -0700: small change to mousewheel support; two changes in window behaviour
- * Visible effects during resizing suppressed, bug in chosing new size fixed.
-* No longer reserves left and top margins next to main window on first popup.
-* built in some hysteresis into mousewheel support, ignorng the first event in any new
-direction to suppress effects from accidential mouse movement.
-
-* 2009-05-28 22:11:11 -0700: corrected 'animate dragging'
- I finally figured out how the 'animate dragging' works in XBoard,
-so that I could add code to do the unstacking of multiple pieces
-in the holdings, rather than always leaving an empty square while
-you drag them. (And then suddenly re-growing the remaining pieces
-as you make the drop.)  It does not look as fancy as in WinBoard
-yet, because the counts still only decrease when you release the
-piece, rather than when you lift it. But this is not nearly as
-disturbing as leaving empty holdings (if only temporarily) when
-you still have pieces there.
-
-* 2009-05-28 22:06:15 -0700: Added comand-line options -debugFile (as synonym for -nameOfDebugFile, as WinBoard also has these synonyms), and -engineDebugOutput (wich already existed in the backend).
- 
-* 2009-05-28 21:57:53 -0700: updated documentation for new release
- 
-* 2009-05-28 21:55:51 -0700: added Xiangqi perpetual-chase detection
- 
-* 2009-05-28 00:06:53 -0700: Updated all files to GPL version 3.
- 
-* 2009-05-28 00:03:32 -0700: converted two files from dos to unix format
- 
-* 2009-05-27 23:12:24 -0700: updated INSTALL, NEWS and other files for new release
- cleaned up a bit and updated some information in the text files.
-
-* 2009-05-07 21:48:23 -0700: winboard/config.h shouldn't be in .gitignore, only ./config.h
- 
-* 2009-05-07 21:47:37 -0700: bumped patchlevel to 0g
- 
-* 2009-05-07 21:46:02 -0700: corrected path in makefile
- 
-* 2009-05-07 21:45:48 -0700: updated rtf
- 
-* 2009-05-07 21:45:25 -0700: added firstOptions, secondOptions, noGUI, firstXBook, secondXBook
- 
-* 2009-05-07 21:44:03 -0700: handle promotion case for Shogi
- 
-* 2009-05-07 21:43:34 -0700: add note about RESULT command for GUI programmers
- 
-* 2009-05-07 21:42:37 -0700: small changes to book.c
-  added code for different board sizes
- added some debuginfo
- handle promotion of pieces
-
-* 2009-05-05 23:07:18 -0700: added a .gitignore file
- 
-* 2009-05-03 12:41:06 -0700: wrong line ending for Unix... ran dos2unix on both files
- 
-* 2009-05-02 13:51:50 -0700: fixed texinfo files, added windows help file, removed config.h from git
- texinfo.in is not needed anymore, since it only provided a version string, but this can be created automatically using autotools
-
-deleted config.h from version control, since it is automatically created.
-added winboard.hlp file (not sure if needed)
-
-* 2009-04-26 23:34:34 -0700: updated autoconf init file
- * renamed autoconf init file from configure.in to configure.ac
- * added bug-report email address to ac_init
- * replaced ac_output(...) with ac_config_files, ac_config_commands and ac_output
- * 2009-04-26 14:49:03 -0700: parser.c is generated by lex, so it shouldn't be tracked and also parcer.c shouldn't be in Makefile.am 
- * 2009-04-26 14:44:51 -0700: added book.c to Makefile.am 
- * 2009-04-26 13:49:15 -0700: use autoheader to create config.h.in
- no need to track this in git anymore
-
-* 2009-04-26 11:13:26 -0700: fixed autoheader warings, remove depreciated acconfig.h
- 
-* 2009-04-26 10:30:23 -0700: added a autogen.sh
- 
-* 2009-05-02 10:55:39 -0700: changes from H.G. Muller; version 4.3.16
- 
-* 2009-05-02 10:50:10 -0700: changes from H.G. Muller; version 4.3.15
- 
-* 2009-05-02 10:38:39 -0700: changes from H.G. Muller; version 4.3.14
- 
-* 2009-05-02 10:13:41 -0700: HGM fixed cygwin compile for winboard
- 
-* 2009-04-24 16:11:57 -0700: cross compilier working
- 
-* 2009-04-19 10:00:52 -0700: changes from H.G. Muller; version 4.3.13
- 
-* 2009-04-19 09:52:47 -0700: changes from H.G. Muller; version 4.3.12
- 
-* 2009-04-19 09:48:59 -0700: changes from H.G. Muller; version 4.3.8
- 
-* 2009-04-19 09:44:15 -0700: changes from H.G. Muller; version 4.3.7
- 
-* 2009-04-19 09:39:19 -0700: changes by H.G. Muller; version 4.3.4
- 
-* 2009-04-19 09:34:31 -0700: changes from H.G. Muller; version 4.3.2
- 
-* 2009-04-19 10:26:24 -0700: changes from H.G. Muller
- 
-* 2009-04-16 23:06:13 -0700: cleaned up the directory a bit. Removed winboard-dm-beta, merged the two Changelogs together
- 
-* 2009-04-16 14:12:48 -0700: changes from Alessandro Scotti from 20060129
- 
-* 2009-04-16 14:09:33 -0700: changes from Alessandro Scotti from 20060112
- 
-* 2009-04-16 14:04:02 -0700: changes from Alessandro Scotti from 20051231
- 
-* 2009-04-16 13:59:12 -0700: changes from Alessandro Scotti from 20051129
- 
-* 2009-04-16 13:53:41 -0700: changes from Alessandro Scotti from 20050322
- 
-* 2009-04-10 04:18:59 +0000: translated a handfull of strings and set the codeset to UTF-8 for the translations.
- 
-* 2009-03-18 03:20:50 +0000: Translation: added German po file (roughly 50% translated)
- 
-* 2009-03-01 04:23:54 +0000: fixed bug #22853: changed all .Xdefaults to .Xresources in xboard.texi
- 
-* 2009-03-01 02:43:43 +0000: fixed bug #25672, patch #6182 by adding DESTDIR support to Makefile.in
- 
-* 2009-03-01 02:33:26 +0000: fixed a warning message in the configure script
- 
-* 2009-02-28 22:58:57 +0000: fixed parser.l. Should fix bug #22812
- 
-* 2009-02-28 22:58:14 +0000: fixed parser.l. Should fix bug #22812
- 
-* 2009-02-28 22:55:30 +0000: added myself to the AUTHOR file
- 
-* 2007-06-15 04:26:57 +0000: Initial check-in of NSIS Winboard installer files.
- 
-* 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.
-
+ChangeLog for XBoard/WinBoard 
+-----------------------------
+
+(latest entries created by git log --no-merges --pretty="* %ai: %s%n %b" vnew vold)
+
+* 2009-09-05 09:44:21 -0700: updated AUTHORS and README files for release
+ 
+* 2009-09-05 08:52:09 -0700: fixed some typos
+ 
+* 2009-09-04 22:39:45 -0700: set castling rights after setting up a position
+ I was going through old WB forum posts, and I encountered a
+bug report for a bug that I never fixed: The castling rights should
+be properly set (actually: cleared) after setting up a position
+in Edit Position mode (as opposed to pasting a FEN).
+
+* 2009-09-03 23:11:18 -0700: removed install files from master
+ they now live in their own branch
+
+* 2009-09-03 22:30:18 -0700: updated polyglot protocol
+ I added a new option type "-reset" to the protocol for the new option feature.
+4.4.0 does not implement it yet, but Michel wants it for future Polyglots,
+and I think it is best to update the protocol in one big swoop. So I want to already
+include it in the specs now. (engine-intf.html)
+
+I made xboard's response to an unknown option type compliant with the new protocol specs.
+
+* 2009-09-03 22:28:50 -0700: fixed some typos
+ 
+* 2009-09-03 20:47:13 -0600: Updated project files for DevCpp and Visual Studio to add wsettings.c
+ 
+* 2009-09-03 20:46:33 -0600: Added newline at end of file to silence warning.
+ 
+* 2009-08-31 20:29:49 -0700: workaround for error message for missing pieces used in variants and initstring bugfix
+ error messages showed for non-existing pieces showed up for old user supplied pixmaps. Loading a pixmap of the king for
+ the missing pieces now.
+
+Another bad bug surfaced: the -initString argument does not work in any
+XBoard version! (Including 4.2.7b) The escape sequences for linefeed in
+the string are not understood: -initString "new\nrandom\n" actually sends
+the \ and n to the engine (which then does not recognize the line as a
+valid command)!
+
+So I also added a patch to expand escape sequences in the InitString and
+ComputerString command-line options.
+
+* 2009-08-31 20:27:24 -0700: updated installe script
+ I re-organized the doc files in the install, so they now all go in the
+WinBoard\doc folder
+(and none in the root). I so included the COPYING and COPYRIGHT files there.
+This required some updates of the links in some html files, and of the menu
+link
+to README.html in the install script. I also fixed an error with the
+current directory
+in the menu short-cuts of some engines (which started in the fonts folder, and
+could not find the opening book there...).
+
+* 2009-08-31 20:25:17 -0700: updated documentation
+ 
+* 2009-08-31 20:20:55 -0700: updated installer script
+ 
+* 2009-08-31 19:51:48 -0700: new help files for windows
+ 
+* 2009-08-25 20:41:29 -0700: updated installer
+ 
+* 2009-08-25 20:36:53 -0700: undid some previous changes
+ some files got mixed up
+
+* 2009-08-25 20:32:22 -0700: fixed small bug in wsetting
+ 
+* 2009-08-25 20:29:06 -0700: trigger a focus switch to ICS input field when typing
+ old behavior was that "." or "," triggered this, now every printable character  except 1-9 will trigger the focus switc
+h
+
+* 2009-08-25 20:26:20 -0700: bug in backend.c when receiving lines from ICS
+ A space was appended to every character received from an ICS in stead of just at line breaks.
+
+* 2009-08-24 23:47:48 -0700: fixed warning messages from compiler
+ 
+* 2009-08-23 14:24:38 -0700: fixed build on OS X
+ this seems to fix it. Bug reported by Louis Zulli who also did the testing.
+
+* 2009-08-23 11:54:28 -0700: OK, this is the beefed up version of the Polyglot info-string kludge, for WB and XB.
+ 
+* 2009-08-23 10:22:48 -0700: added missing X_LIBS references to Makefile.am
+ 
+* 2009-08-22 23:33:44 -0700: made the install script and executable
+ 
+* 2009-08-22 23:19:07 -0700: changed beta1 to beta2
+ 
+* 2009-08-22 23:14:11 -0700: fixed enable zippy in configure script and added some checks for OS X
+ make tried to compile zippy even when --disable-zippy was given. Also fixed a bug in xboard.c where #ifdef instead of #
+if was used to test for ZIPPY (it's either 0 or 1, so we need #if).
+
+Also added some special checks for OS X, not sure if these will do it, but it's a start;)
+
+* 2009-08-22 19:09:54 -0700: added configure summary to configure output, also cleaned up configure.ac a bit
+ used AS_HELP_STRING where possible
+
+* 2009-08-22 18:10:57 -0700: added check for malloc.h
+ this should fix a build error on OS X
+
+* 2009-08-22 17:47:44 -0700: A small cosmetic change in the size of buttons inside a groupbox of the Engine-Setup dialog
+.
+ 
+* 2009-08-22 17:32:14 -0700: make xboard usable with UCI engines
+ I made a small patch in xoptions.c (where the corresponding Engine Settings
+dialog was for XBoard), to make it at least usable for UCI engines: I now
+divide the options over upto 4 columns, if there are too many to fit into
+a single column. This seems to work. Still looks very ugly, but it is
+functional.
+
+* 2009-08-22 17:30:05 -0700: fix premove for winboard
+ This might fix the illusive premove problem. In 4.2.7 the code was not properly
+indented, and this led to an unbalanced braces error that I then fixed the
+wrong way.
+Click-click premoves did only work after clicking the toSquare twice. It
+might be
+that they actually did work after clicking it once, but that the highlights
+were not
+displayed (although set) for lack of a display refresh.
+
+* 2009-08-22 17:28:11 -0700: fixed bug for double saved games
+ This patch should solve the problem with doubly saved games when XBoard is
+closed.
+I calculate a cecksum of each saved game now (including move comments),
+and suppress saving if the checksum is not changed.
+
+* 2009-08-22 17:25:58 -0700: fixed xengineoutput.c, to keep the duplicated code identical to that of wengineo.c.
+ 
+* 2009-08-22 17:24:08 -0700: updated xboard.texi: added warning that pixmaps are not build for all variants
+ 
+* 2009-08-22 17:19:11 -0700: added a dialog for engine-specific option settings
+ 
+* 2009-08-22 17:09:58 -0700: updated some documentation
+ 
+* 2009-08-22 17:07:10 -0700: fixed several bugs in the backend and added some more polyglot support
+ * I added recognition for the new UCI3 option types that are recognized in the WB
+option features, to make sure this version is compatible with future Polyglots.
+Also fixed a bug that failed to strip an asterisk prefix from the first
+combo-box item.
+
+* I fixed the ICS-time-in-PGN bug.
+
+* I fixed a bug which caused a space to be missing when long lines broken up by
+an ICS were joined.
+
+* 2009-08-22 17:02:58 -0700: better polyglot support for engine ouput
+ I fixed the algorithm for clearing the Engine Output window to work better with
+the latest Polyglot, whight outputs UCI "info strings" amongst the thinking
+output.
+
+* 2009-08-22 16:23:32 -0600: Beginnings of installer for 4.4.0.  HGM asked me to forward the nsi file, but it seemed bes
+t to just add the installer tree to git even though it's not finished.  You must install NSIS then FontName-0.7.exe (inc
+luded in installer folder) then run build.bat in the same directory.
+ 
+* 2009-08-05 22:18:29 -0700: patch backend.c to make the -noGUI option also work in ICS mode.
+ 
+* 2009-08-01 13:09:49 -0700: temporary fix for pre-select
+ As a temporary kludge I replaced looking into the holdings for the piece type by figuring out which piece would belong 
+on the clicked holdings square. This is a non-trivial process, as it depends on which pieces participate in a certain va
+riant.
+
+* 2009-07-30 00:19:37 -0700: changed click-click moves
+ I got complaints about the way XBoard 4.4.0 handles click-click moves, in particular changing the selected piece after 
+selecting King (for which I suppressed interference with FRC castling in a rather brutal way). People tell me it is very
+ annoying that clicks sometimes don't work to select a piece. WinBoard uses refined logic in the back-end to handle this
+, but the XBoard front-end is not interfaced with that yet. (This would require a major rewrite of the mouse handler.)
+
+This temporary patch suppresses this behavior in all variants that do not support Fischer castling, and even there only 
+exhibit it for Rook-after-King selection (which will be interpreted as an attempt to enter a castling move as K x own R)
+.
+
+* 2009-07-26 08:43:35 -0700: option -adjudicateDrawMoves is not included in the XBoard list.
+ added it to the option list
+
+* 2009-07-21 20:23:23 -0700: converted files from dos to unix format
+ run dos2unix over a bunch of files
+
+* 2009-07-16 07:43:38 -0600: Stripped out unused VersionInfo
+ 
+* 2009-07-15 23:16:19 -0700: changed version to 4.4.0.beta1
+ 
+* 2009-07-15 23:12:37 -0700: updated INSTALL file to add ./autogen.sh
+ 
+* 2009-07-15 22:44:05 -0700: higher number of engine options possible now
+ I upped the number of options per engine from
+50 to 100, and the average number of characters per option from 10 to 20.
+
+* 2009-07-15 12:30:37 -0600: Fix of bad bug
+ 
+* 2009-07-14 23:41:36 -0600: Added version information to resources.
+ 
+* 2009-07-14 23:40:50 -0600: Added Jaws targets to IDE projects.
+ 
+* 2009-07-14 23:39:12 -0600: Final makefile adjustments and compiling instructions.
+ 
+* 2009-07-13 22:35:17 -0600: Cleaned up garbage left behind from my makefile update.
+ 
+* 2009-07-13 22:26:56 -0600: Updated cmdline makefiles to be able to produce JAWS binaries.
+ This breaks support for MSVC 4.x.  It may still be possible to
+use that compiler if you obtain the latest SDK from Microsoft.
+MSVC 6.0 still works, but I had to change the target windows
+version to 0x500 which causes warnings about building beta
+applications.  This is all due to the use of MENUBARINFO data
+type in the jaws binary.  You can reduce the WINVER to 0x0400
+safely if you are not building a JAWS binary, and MSVC 4.x
+will work fine.
+
+* 2009-07-13 22:26:10 -0600: Removed dependency on jfwapi.h
+ Allows anyone to compile a jaws compatible binary.
+
+* 2009-07-13 22:23:31 -0600: Fixed duplicate resource in winboard.rc
+ PLEASE remember to pull before commiting.  This is the 2nd
+time I've fixed this.  It's a waste of time to keep fixing
+the same problems.
+
+* 2009-07-13 19:36:58 -0700: resolved conflict between Xt and Xaw libraries
+ seems like we don't need to link against Xt.
+
+* 2009-07-13 19:33:57 -0700: help-menu was not un-grayed in the JAWS version, when it played with engines
+ 
+* 2009-07-13 19:29:53 -0700: integrated jaws into winboard
+ I integrated the JAWS patch now into WinBoard in such a way that the
+JAWS and standard version can use the same resource file. This new
+winboard.c contains the improved dialog layot of the JAWS version,
+but none of the menus and JAWS-specific acclerator keys. The latter
+are now generated at run time by code in jaw.s. As a result jaws.h
+could be cancelled, as there the JAWS-specific defines are no
+longer needed outside jaws.c (now the .rc does not use them), and
+is incorporated in it.
+
+* 2009-07-12 15:37:26 -0700: fixed problem in autoconf using Xaw3d
+ rewrote the section for Xaw3d in the autoconf file
+
+* 2009-07-12 15:29:28 -0600: Added Jaws support to GCC makefile
+ 
+* 2009-07-12 15:28:20 -0600: added help support: MSVC IDE and DevCpp IDE project files
+ 
+* 2009-07-12 15:26:49 -0600: Removed obsolete makefiles and support files.
+
+* 2009-07-12 12:33:26 -0700: updated AUTHORS with the help of git
+ use
+
+git log --pretty=oneline --name-only --author=AUTHORNAME v4.2.7..HEAD  |sort |uniq
+
+a bit of hand editing and a quick emacs macro later and you have a nice comma seperated list of all files changes by one
+ author between two commits.
+
+* 2009-07-12 12:31:47 -0700: updated Changelog using git log --no-merges --pretty="* %ai: %s%n %b" HEAD v4.2.7
+	
+* 2009-07-12 11:34:28 -0700: cleaned up some more copyright notices
+ 
+* 2009-07-12 11:22:30 -0700: updated copyright to reflect A. Scotte as copyright holder
+ need to mention him, since the paperwork won't be finished before the next release
+
+* 2009-07-12 10:56:29 -0700: updated patchlevel to "k"
+ 
+* 2009-07-12 10:53:50 -0700: fixed autoconf problem with VERSION/PATCHLEVEL variables
+ xboard used it's own version of PRODUCT, VERSION and PATCHLEVEL variables. Switched to PACKAGE_STRING provided by autoconf
+
+* 2009-07-12 10:29:46 -0700: cleaned up old CVS left overs
+ removed $Id tags from all files
+
+* 2009-07-12 10:10:17 -0700: converted xhistory via dos2unix
+ 
+* 2009-07-12 10:09:24 -0700: fixed crash in history window
+ someone discovered that opening the move-history window in XBoard leads to
+an immediate crash. Turns out that renaming the menu item broke it! (The
+name of the item was apprently used elsewhere in the code to access it,
+for putting a check mark there.)
+
+* 2009-07-12 10:04:30 -0700: fix for Animation of castling moves in Chess960
+ Animation of castling moves in Chess960 turned out to sometimes make the
+king disappear from the display. For the time being I patched this in
+xboard.c to suppress animation of FRC castling moves altogether. As FRC
+castlings internally are represented as KxR, the to-square does not make
+sense anyway, which made the animation look very weird even when it led
+not to a king disappearance act. And the Rook move of a castling is never
+animated.
+
+* 2009-07-11 22:44:53 -0600: Update GCC makefile to remove .obj targets.
+ Dunno how they got in there, but they should be .o
+
+* 2009-07-11 22:42:41 -0600: Update makefile dependencies on help.c and help.h.
+ 
+* 2009-07-11 22:36:59 -0600: Allow compiling with MSVC6.0 and 4.1
+ Move prototypes into help.h, after making sure that DWORD_PTR is
+defined.  Include help.h from winboard.c and help.c so both files
+benefit from the definition.
+
+* 2009-07-11 18:26:16 -0700:  lists these accelerator keys in the menus for JAWS
+ 
+* 2009-07-11 18:24:19 -0700: added shortcuts
+ This patch allows the use of Ctrl+C and Ctrl+V for Copy Game and Paste even in I C S mode when the board has focus.
+
+* 2009-07-11 18:22:17 -0700: better handling of pasting a game without PGN tags
+ patch in wclipbrd.h to make it smarter to decide between pasting a game or a position so it can handle games without PGN tags. If it doesn't parse as a FEN it is assumed to be a game.
+
+* 2009-07-11 18:20:56 -0700: fixed parser error for knight move
+ The parser had a strange quirk: it recognized bd2 as a valid Knight move
+(Nb1-d2) while this SAN format should be reserved for Pawn moves only.
+
+* 2009-07-11 18:19:30 -0700:  fixed a few warnings in connection with the help patch (now warning free)
+ 
+* 2009-07-11 18:13:50 -0700: some major re-assignment of accelerator keys in the JAWS
+ 
+* 2009-07-11 16:54:53 -0600: several small fixes
+ uptracked winboard.ini
+
+Cleanup: moved "Some definitions required..." from winboard.c to config.h,
+and combined some definitions from borland w/ MS.
+
+Changed internal HtmlHelp return type and 4th argument to facilitate various
+compilers.  These changes, while not strictly adhering to HtmlHelp() conventions,
+won't impact anything since the function modified is internal only.
+
+Modified HtmlHelp return values to integer to silence warnings.
+
+Added help.c to the project in makefile.gcc & makefile.ms.
+
+Fixed duplicate resource in winboard.rc.
+
+* 2009-07-09 22:08:15 -0700: added JAWS support; help files for Vista; bugfixes for winboard.c
+ * JAWS support
+* help files should now work under Vista (the user has to have either a program to view old windows help files or to view html-files installed)
+* I fixed the tabbing between all windows that were added according to Tim's sugestions.
+* I added typing in of a move number in the move type-in dialog as a shortcut to going to that position by use of the < and > buttons. Mainly intended to ease life for the blind, but I think it can be generally useful. (Although the move-history dialog provides that functionality too, this is quicker if you don't happen to have it open.)
+* I added typing of a FEN in the move type-in dialog in Edit Position mode. (Which could not be used without mouse at all, and is defective in crazyhouse even with mouse, as there was no way to populate holdings.)
+
+* 2009-07-09 22:03:00 -0700: some bugfixes: ICS error handling
+ * play a different sound for takebacks in ICS mode
+* pop up error messages for illegal moves for typed-in moves
+
+* 2009-07-09 21:50:41 -0700: removed no longer needed debug message
+ 
+* 2009-07-09 21:48:23 -0700: fixed compile error from a previous change
+ 
+* 2009-07-09 21:44:54 -0700: user selectable font in game list
+ This makes the game list use the same (user selectable) font as the the move-history window.
+
+* 2009-06-30 21:27:34 -0700: fixed typos in xboard.texi documentation.
+ 
+* 2009-06-30 21:16:59 -0700: updated the FAQ
+ 
+* 2009-06-27 17:06:26 -0700: changed font in engine output window
+ The engine-output window now uses the same font as the move-history window
+(which was selectable in the "Options  -> Fonts..." menu, while the other
+wasn't).
+
+* 2009-06-27 17:03:19 -0700: fixed some characters in xboard.texi
+ It seems that copying manual sections from the RTF to th texi file did
+somehow mess up the double-quote characters, and changed them into some
+strange (unicode?) symbols.
+
+* 2009-06-27 16:56:36 -0700: two shogi related bugfixes
+ I discovered a bug in the move generator for the Shogi Dragon King. I
+guess it went unnoticed so far because this is a promoted version of the
+Rook, which hardly occurs in games. (moves.c)
+
+There was also a problem with the piecesfix I sent you before; Shogi
+chosen as initial variant did use wrong piece symbols. (I had tested this
+on gothic, but there it happened to work for a different reason, unique to
+gothic.) This affects xboard.c.
+
+* 2009-06-27 16:54:04 -0700: small cleanup
+ 
+* 2009-06-27 16:51:02 -0700: adds bitmaps for shogi promotions, and selects the bitmaps or pixmaps for the more rarely used piece types on a per-variant basis.
+ 
+* 2009-06-27 16:44:36 -0700: adds new piece types in the promotion dialog and edit-position piece menu
+ 
+* 2009-06-27 16:13:15 -0700: updated bitmaps files
+ files for fairy pieces where missing, others had names that didn't work with autoloading.
+
+* 2009-06-27 16:06:35 -0700: fixed a bug concerning bitmaps
+ 
+* 2009-06-27 15:53:45 -0700: give a default directory for bitmaps files (tiny change)
+ this is also one of the debian patches, should be rewritten to use the correct install directory. No Author was given.
+
+* 2009-06-27 15:47:52 -0700: verbose_error_message_about_recognized_options (tiny change from Debian patches)
+ 
+* 2009-06-27 15:45:14 -0700: add a visual low time warning (tiny change from Debian patches)
+ 
+* 2009-06-24 23:31:52 -0700: dos 2 unix conversion of backend.c
+ 
+* 2009-06-24 23:30:07 -0700: exchanged some sprintf with snprintf
+ found in a patch for the debian system, extended it a bit to other sprintf's
+original patch included only 11 lines by Florian Ernst <florian at debian.org>
+
+* 2009-06-24 23:07:23 -0700: enabled a patch for default settings in winboard
+ 
+* 2009-06-24 22:53:11 -0700: updated copyright notice
+ 
+* 2009-06-24 22:52:20 -0700: patches a bug in chosing the initial board size on a virgin startup I introduced recently
+ 
+* 2009-06-24 22:49:33 -0700: I put in testing for the winning condition in 3checks
+ on a check it just goes through the entire game to subject every position on a check test, to see if there were two more.
+
+* 2009-06-24 22:47:01 -0700: updated copyright notice in docs
+ 
+* 2009-06-24 22:41:40 -0700: added small patch from debian (tiny change)
+ according to the debian patch tracker, this patch is by Florian Ernst <florian at debian.org>.
+It fixes whitespace issues in filename called from cmail.
+
+* 2009-06-24 22:33:13 -0700: converted dos2unix format for xboard.texi
+ 
+* 2009-06-24 22:31:57 -0700: deleted two more files that don't need to be in git
+ these files can be generated by autogen.sh
+
+* 2009-06-21 12:10:31 -0700: major overhaul of the -stickyWindows feature
+ I did a major overhaul of the -stickyWindows feature. The game-list and ICS-interaction windows are now also sticky. I also added a form of stickiness when the main window is resized; edges of auxiliary windows sticking to the right or bottom side of the main window stay attached when the window resizes (due to nr of board squares or their size). The way the window coordinates are saved in the .ini file is now relative to the main window, and some dummy options are added to be able to recognize right- and bottom-edge sticking, and reconstruct that when WB starts up with another board size. Also added are volatile options to ensure there will be space for auxiliary windows above and left of the main window.
+
+* 2009-06-21 12:07:01 -0700: fixed long-algebraic form of drops
+ The WB parser turned out not to understand the long-algebraic form of drops send by an ICS. (like B/@@-e4), so even with legality testing off I now use the SAN move for drops.
+
+* 2009-06-18 18:35:31 -0700: Refined stalemate adjudication in Suicide, some cleanup
+ Refined stalemate adjudication in Suicide, which seems to be not always won
+for the stalemated side, but for the side with the smallest number of pieces.
+Cleaned up the adjudication code in the process. (backend.c moves.c, moves.h)
+Also includes a tiny change in the -autoKibitz format, as requested on
+Talkchess.
+
+* 2009-06-18 18:32:57 -0700: Enhancement of the way -autoLogo decides which logos to display
+ 
+* 2009-06-16 00:06:59 -0700: bugfix and enhancement in autoKibitz mode
+ changed the format of the autoKibitz: score/depth in stead of depth/score, as in PGN. I also supress the ICS time for the move now in the PGN if extended info is available.
+
+When enhancing the functionality of the autoKibitz command (using the
+opponent engine kibitz for the saved PGN) I discovered that the xengineoutput.c
+in our tree was obsolete, and contained a routine of which the arguments
+were no
+longer compatble with the call from backend.c, and caused segfaulting. I
+copied in
+the  corresponding routine in wengineo.c, which was compatible. That the
+compiler
+did not flag this is a sign of badly organized code, I suppose...
+
+The enhancement itself affected backend.c.
+
+* 2009-06-16 00:04:13 -0700: modified clock layout
+ I altered the display of the clocks in the presence of engine logos; I used to
+stack them, but some inquiry on Talkchess sowed that people disliked the
+stacking. So now I display them next to each other again, but as 2-line-high
+fields to make room for te logos.
+
+* 2009-06-15 23:59:32 -0700: new zippy option zippyShortGame
+ On request of Mike Adams I added a new zippy option, -zippyShortGame, to make life more difficult for abusers of abort and disconnect for cheating.
+
+* 2009-06-15 23:56:40 -0700: fixed some bugs in the animation of atomic captures
+ 
+* 2009-06-13 15:27:26 -0700: some small bugfixes
+ I had overlooked one place from which the FEN writer (of whicf I changed the argument types), which made WB crash if you copied a FEN (or PGN that cotained FEN) to the clipboard. I must have overlooked a warning during compile, or some depedency is not correct in the makefile. Anyway, wclipboard.c had to be changed.
+
+I also moved adjudication of some losing conditions to before tetsing for stalemate, (e.g. in atomic, if your king get destroyd you lose, even if you have no moves after that because it was your only piece.). this affects backend.c.
+
+I had used the same bits in the frule-modifier flags for indicating mandatory capture as was already used for indicating FRC-style castling. This led to frequent illegal move calls in FRC... (moves.h)
+
+* 2009-06-13 10:45:17 -0700: cleaned up HTML in FAQ.html -- still need to work on content
+ 
+* 2009-06-13 09:36:26 -0700: added option for work-around for some FRC engines in regards to FRCFENs
+ It suddenly occurred to me that I had promised on CCC to include an option to provide a work-around for the problem that some FRC engines do not understand FRC FENs (and thus do not play at all under WinBoard, as FRC always has to begin with sending the initial position).
+
+So I added the options -firstNeedsNoncompliantFEN, -secondNeedsNoncompliantFEN. This affects winboard.c and xboard.c, (for defining the option), common.h, backend.h, backend.c, (for implementing it), xboard.texi and winboard.rtf (decribing it). This option provides users with a means to always force the FEN castling field to KQkq (but can be used for many other work-arounds as well).
+
+* 2009-06-13 09:30:31 -0700: fixed bug with random calls
+ There also seemed to be a bug with the shuffling of opening positions; I had changed the declaration of the position number from long long int to u64 to comply with MSVC, but this suppressed shuffling completely. I now changed it to int. I recently noted a problem with true randomizing anyway: this was based on srand(time()), but time() apparently did not change fast enough, so that starting several games in rapid succession (because the book line contained a 3-fold repetition) produced identical games. So I now seed the random once and for all during startup, based on the msec of the time mark, and removed the other calls to srand().
+
+* 2009-06-13 09:26:14 -0700: changed name for fairymax program in xboard.h
+ 
+* 2009-06-13 09:25:07 -0700: removed my name from copyright message in help->about menu
+ 
+* 2009-06-13 09:22:02 -0700: fixed -stickyWindows option
+ I figured out why -stickyWindows was not working in XP and Vista
+(while it always worked under Win2K), and I think I found a fix for
+it that works under all Windows versions. (I tried XP and Win2K.)
+
+* 2009-06-13 09:20:38 -0700: Updated docs for Engine-Settings menu
+ 
+* 2009-06-13 09:19:05 -0700: Awareness of winning conditions for atomic and giveaway variants; two bugfixes
+ fixed bug in claim verification
+Bugfix on initial position of Great Shatranj
+
+* 2009-06-13 09:16:47 -0700: Legality testing (mandatory capture) in giveaway variants
+ 
+* 2009-06-13 09:16:17 -0700: don't ignore winboard/parser.c
+ 
+* 2009-06-13 09:12:15 -0700: Added new variant Twilight Chess
+ 
+* 2009-06-13 09:08:57 -0700: some renaming and restructuring of WB menu items, to conform more to XBoard
+ 
+* 2009-06-13 09:07:07 -0700: Fixed bug in atomic patch that interfered with non-atomic variants
+ 
+* 2009-06-10 21:46:11 -0700: fixed different use of engine option compared to Polyglot
+ it turns out the new Polyglot uses a sightly different version of the GUI->engine option command than the one I proposed (and implemented in XBoard; Michel sneaked in an '=' sign between the NAME and VALUE of the option, to allow for more unambiguous parsing.
+
+I guess in principle this is a good idea, so I adapted XBoard to Polyglot rather than the other way around. The result is that there are canges in xboard.c, and the documentation.
+
+I noticed that I unjustly had internationalized the option strings to be send to the engine in xoptions.c; this was of course nonsense, as this was WB protocol. So I undid that too.
+
+* 2009-06-10 21:37:47 -0700: add the already supported variants 3check and great (=Great Shatranj) to the New Variant... menu.
+ 
+* 2009-06-10 21:32:22 -0700: animate explosions in variant atomic (if animate moves is on).
+ 
+* 2009-06-10 21:30:19 -0700: fixed castling bug in variant twokings.
+ 
+* 2009-06-10 21:22:36 -0700: fixed forteitary wins for special game variations
+ feature that corrects forfeitary wins (e.g. on time) of a bare King to draws of course breaks proper operation in losers, suicide and giveaway
+
+* 2009-06-09 21:02:51 -0700: automatically test ini file extension for files from commandline option @filename
+ The winboard.c is a patch that automatically tries indirection files on the
+command line (@filename type arguments) also with an extension .ini if the name itself
+did not match any existing file and contained no period. This saves the user typing the
+.ini all the time (which I started to find pretty annoying while working on the installer
+package).
+
+* 2009-06-08 15:23:58 -0700: added gamelisttag option to xboard
+ also updated documentation.
+
+* 2009-06-08 15:20:00 -0700: updated RTF file for winboard
+ 
+* 2009-06-06 09:12:48 -0700: fixed syntax error in texi file
+ 
+* 2009-06-06 08:57:52 -0700: updated to patchlevel "j"
+ 
+* 2009-06-06 09:00:25 -0700: fixed adjudicating probelm in Shantranj
+ Refrain from adjudicating a draw based on insufficient mating material
+(except bare King vs bare King) in Shatranj (where in this case you can
+still win by baring the opponent's King).
+
+* 2009-06-06 08:55:17 -0700: updated documentation and FAQ
+ 
+* 2009-06-04 22:52:31 -0700: source clean up. Fix compiler warning, removed unused variables, etc.
+ 
+* 2009-06-04 20:43:29 -0700: adding support for different windows compiler
+ Eric kindly provided us with some makefiles for different windows compiler and also fixed some issues that came up while using those compilers.
+
+* 2009-06-04 18:27:26 -0700: cleanup: got rid of a lot of files that are not needed for a new release
+ lots of documentation was available in several places, old unused source files and not used graphics file were floating around in the tree. This should clean up most of it. No need to keep these files around, especially since we are using version control.
+
+* 2009-05-29 18:56:06 -0700: added the Action-menu items that allow the user to adjudicate ongoing games in Two-Machines mode.
+ This was an already existing backend function from Winboard_x; I only had to create a menu item for it to be called. Due to an oversight I had forgotten to do that so far. (Logically, I should have done it in the 4.3.5 release, where I updated the XBoard menus to conform to the WinBoard menus.)
+
+I tested them, and they seem to work. (As expected.)
+
+* 2009-05-28 22:23:00 -0700: updated patchlevel to "i"
+ 
+* 2009-05-28 22:19:08 -0700: small change to mousewheel support; two changes in window behaviour
+ * Visible effects during resizing suppressed, bug in chosing new size fixed.
+* No longer reserves left and top margins next to main window on first popup.
+* built in some hysteresis into mousewheel support, ignorng the first event in any new
+direction to suppress effects from accidential mouse movement.
+
+* 2009-05-28 22:11:11 -0700: corrected 'animate dragging'
+ I finally figured out how the 'animate dragging' works in XBoard,
+so that I could add code to do the unstacking of multiple pieces
+in the holdings, rather than always leaving an empty square while
+you drag them. (And then suddenly re-growing the remaining pieces
+as you make the drop.)  It does not look as fancy as in WinBoard
+yet, because the counts still only decrease when you release the
+piece, rather than when you lift it. But this is not nearly as
+disturbing as leaving empty holdings (if only temporarily) when
+you still have pieces there.
+
+* 2009-05-28 22:06:15 -0700: Added comand-line options -debugFile (as synonym for -nameOfDebugFile, as WinBoard also has these synonyms), and -engineDebugOutput (wich already existed in the backend).
+ 
+* 2009-05-28 21:57:53 -0700: updated documentation for new release
+ 
+* 2009-05-28 21:55:51 -0700: added Xiangqi perpetual-chase detection
+ 
+* 2009-05-28 00:06:53 -0700: Updated all files to GPL version 3.
+ 
+* 2009-05-28 00:03:32 -0700: converted two files from dos to unix format
+ 
+* 2009-05-27 23:12:24 -0700: updated INSTALL, NEWS and other files for new release
+ cleaned up a bit and updated some information in the text files.
+
+* 2009-05-07 21:48:23 -0700: winboard/config.h shouldn't be in .gitignore, only ./config.h
+ 
+* 2009-05-07 21:47:37 -0700: bumped patchlevel to 0g
+ 
+* 2009-05-07 21:46:02 -0700: corrected path in makefile
+ 
+* 2009-05-07 21:45:48 -0700: updated rtf
+ 
+* 2009-05-07 21:45:25 -0700: added firstOptions, secondOptions, noGUI, firstXBook, secondXBook
+ 
+* 2009-05-07 21:44:03 -0700: handle promotion case for Shogi
+ 
+* 2009-05-07 21:43:34 -0700: add note about RESULT command for GUI programmers
+ 
+* 2009-05-07 21:42:37 -0700: small changes to book.c
+  added code for different board sizes
+ added some debuginfo
+ handle promotion of pieces
+
+* 2009-05-05 23:07:18 -0700: added a .gitignore file
+ 
+* 2009-05-03 12:41:06 -0700: wrong line ending for Unix... ran dos2unix on both files
+ 
+* 2009-05-02 13:51:50 -0700: fixed texinfo files, added windows help file, removed config.h from git
+ texinfo.in is not needed anymore, since it only provided a version string, but this can be created automatically using autotools
+
+deleted config.h from version control, since it is automatically created.
+added winboard.hlp file (not sure if needed)
+
+* 2009-04-26 23:34:34 -0700: updated autoconf init file
+ * renamed autoconf init file from configure.in to configure.ac
+ * added bug-report email address to ac_init
+ * replaced ac_output(...) with ac_config_files, ac_config_commands and ac_output
+ * 2009-04-26 14:49:03 -0700: parser.c is generated by lex, so it shouldn't be tracked and also parcer.c shouldn't be in Makefile.am 
+ * 2009-04-26 14:44:51 -0700: added book.c to Makefile.am 
+ * 2009-04-26 13:49:15 -0700: use autoheader to create config.h.in
+ no need to track this in git anymore
+
+* 2009-04-26 11:13:26 -0700: fixed autoheader warings, remove depreciated acconfig.h
+ 
+* 2009-04-26 10:30:23 -0700: added a autogen.sh
+ 
+* 2009-05-02 10:55:39 -0700: changes from H.G. Muller; version 4.3.16
+ 
+* 2009-05-02 10:50:10 -0700: changes from H.G. Muller; version 4.3.15
+ 
+* 2009-05-02 10:38:39 -0700: changes from H.G. Muller; version 4.3.14
+ 
+* 2009-05-02 10:13:41 -0700: HGM fixed cygwin compile for winboard
+ 
+* 2009-04-24 16:11:57 -0700: cross compilier working
+ 
+* 2009-04-19 10:00:52 -0700: changes from H.G. Muller; version 4.3.13
+ 
+* 2009-04-19 09:52:47 -0700: changes from H.G. Muller; version 4.3.12
+ 
+* 2009-04-19 09:48:59 -0700: changes from H.G. Muller; version 4.3.8
+ 
+* 2009-04-19 09:44:15 -0700: changes from H.G. Muller; version 4.3.7
+ 
+* 2009-04-19 09:39:19 -0700: changes by H.G. Muller; version 4.3.4
+ 
+* 2009-04-19 09:34:31 -0700: changes from H.G. Muller; version 4.3.2
+ 
+* 2009-04-19 10:26:24 -0700: changes from H.G. Muller
+ 
+* 2009-04-16 23:06:13 -0700: cleaned up the directory a bit. Removed winboard-dm-beta, merged the two Changelogs together
+ 
+* 2009-04-16 14:12:48 -0700: changes from Alessandro Scotti from 20060129
+ 
+* 2009-04-16 14:09:33 -0700: changes from Alessandro Scotti from 20060112
+ 
+* 2009-04-16 14:04:02 -0700: changes from Alessandro Scotti from 20051231
+ 
+* 2009-04-16 13:59:12 -0700: changes from Alessandro Scotti from 20051129
+ 
+* 2009-04-16 13:53:41 -0700: changes from Alessandro Scotti from 20050322
+ 
+* 2009-04-10 04:18:59 +0000: translated a handfull of strings and set the codeset to UTF-8 for the translations.
+ 
+* 2009-03-18 03:20:50 +0000: Translation: added German po file (roughly 50% translated)
+ 
+* 2009-03-01 04:23:54 +0000: fixed bug #22853: changed all .Xdefaults to .Xresources in xboard.texi
+ 
+* 2009-03-01 02:43:43 +0000: fixed bug #25672, patch #6182 by adding DESTDIR support to Makefile.in
+ 
+* 2009-03-01 02:33:26 +0000: fixed a warning message in the configure script
+ 
+* 2009-02-28 22:58:57 +0000: fixed parser.l. Should fix bug #22812
+ 
+* 2009-02-28 22:58:14 +0000: fixed parser.l. Should fix bug #22812
+ 
+* 2009-02-28 22:55:30 +0000: added myself to the AUTHOR file
+ 
+* 2007-06-15 04:26:57 +0000: Initial check-in of NSIS Winboard installer files.
+ 
+* 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/FAQ.html b/FAQ.html
index 8f5adee..1e37d79 100644
--- a/FAQ.html
+++ b/FAQ.html
@@ -83,7 +83,9 @@ to help update it.</i></p>
       <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 href="#tag-B.26">[B.26] How can I get rid of these silly logos that this new WinBoard displays above the board?</a></li>
+      <li><a href="#tag-B.27">[B.27] How can I install logos for other engines, Internet Chess Servers or Human users?</a></li>
+  </ul></li> 
   
   <li><a name="tag-C0" href="#tag-C">[C] XBoard and WinBoard, bugs and problems</a>
     <ul>
@@ -1099,6 +1101,60 @@ 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 />
+<h3><a name="tag-B.26">[B.26]
+  How can I get rid of these silly logos that this new WinBoard displays above the board?</a></h3>
+
+<p>WinBoard 4.4.0 has an option /autoLogo, which makes is search for bitmap files to display as logo, 
+in the engine directory or in the folder "logos".
+If you see logos without having asked for them, the settings in your winboard.ini file probably contains the line</p>
+<pre>/autoLogo=true</pre>
+<p>Just change that to /autoLogo=false.
+You can also achieve that by starting WinBoard through the startup dialog (from the start menu),
+and then tick "additional options" at the bottom,
+and type /autoLogo=false in the edit field, before pressing OK.
+If you then later select "Save Settings Now" from the Option menu,
+or when "Save Settings on Exit" is on, and you close WinBoard,
+this will automatically end up in your settings field.
+</p><p>
+When /autoLogo=false, logos will only be displayed if you explicitly ask for them,
+by running WinBoard with the option /firstLogo=FILENAME.bmp or /secondLogo=FILENAME.bmp.
+(Which will not be stored in the winboard.ini,
+but might of course be hidden somewhere in a settings file mentioned on the command line as @SETTINGSFILE.ini.)
+</p>
+
+<hr />
+<h3><a name="tag-B.27">[B.27]
+  How can I install logos for other engines, Internet Chess Servers or Human users?</a></h3>
+
+<p>With the option /autoLogo=true, (which is remembered in your settings file),
+WinBoard automatically looks into the engine folder 
+(specified by the /fd="..." or /sd="..." option), for a file called "logo.bmp". 
+If it is found, it is used as a logo for the engine when it plays.
+So all you have to do is put a logo.bmp file there.
+Popular logo formats are 100x50 and 130x65; many engine logos are available from
+<a href="http://www.geocities.com/davedahlem/my_logos.html">David Dahlem</a> or
+<a href="http://kirill-kryukov.com/chess/discussion-board/viewtopic.php?t=545&f=7">Graham Banks</a>
+</p><p>
+It is possible to overrule the /autoLogo by explicitly using a /firstLogo="FILENAME.bmp" 
+or /secondLogo="FILENAME.bmp" with the engine on the engine line in the startup dialog.
+This is useful for engines that run with an adapter like Polyglot,
+when you have only one polyglot on your system, used by many engines.
+E.g. for Fruit the engine line to be typed in or selected from the combo box is
+<pre>
+"polyglot fruit.ini" /firstLogo="D:\Engines\Fruit\logo.bmp" /fd="D:\Engines\Polyglot"
+</pre>
+This prevents WinBoard looking for the logo in the Polyglot folder.
+</p>
+For Internet Chess Servers and Human users the logos should be in the "logos"
+sub-folder of the folder where WinBoard is installed.
+With /autoLogo=true, WinBoard would look for a logo file in that folder with
+the same name as the ICS, suffixed with .bmp (e.g. freechess.org.bmp)
+or the Human username 
+(specified by the /userName="..." option or taken from the system), 
+suffixed by .bmp, e.g. administrator.bmp)
+</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
diff --git a/Makefile.am b/Makefile.am
index b72e3e5..d1e2c61 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,8 +1,15 @@
+
+if ZIPPY
+  ZPY = zippy.c
+else 
+  ZPY =
+endif 
+
 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
+xboard_SOURCES = backend.c lists.c pgntags.c xedittags.c xhistory.c $(ZPY) 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= -lm @XAW_LIBS@
+AM_CPPFLAGS=-DINFODIR='"$(infodir)"' @X_CFLAGS@
+AM_LDFLAGS= -lm @X_PRE_LIBS@ @XAW_LIBS@ @X_LIBS@ @X_EXTRA_LIBS@ 
 
 info_TEXINFOS = copyright.texi xboard.texi
 man6_MANS = xboard.man 
diff --git a/README b/README
index 41c83fb..f2246e9 100644
--- a/README
+++ b/README
@@ -1,72 +1,73 @@
-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 makefile.gcc
-
-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 makefile.ms
-
-
-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.
-
+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.
+
+    	./autogen.sh
+	./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 makefile.gcc
+
+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 makefile.ms
+
+
+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/backend.c b/backend.c
index ff989cd..90021ce 100644
--- a/backend.c
+++ b/backend.c
@@ -242,6 +242,7 @@ 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;
+int lastSavedGame; /* [HGM] save: ID of game */
 
 /* States for ics_getting_history */
 #define H_FALSE 0
@@ -2109,8 +2110,10 @@ read_from_ics(isr, closure, data, count, error)
 	    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[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++] = ' '; // replace by space (assumes ICS does not break lines within word)
+	    }
 	}
 
 	buf[buf_len] = NULLCHAR;
@@ -3824,7 +3827,7 @@ ParseBoard12(string)
 #endif
     }
 
-    if (moveNum > 0 && !gotPremove) {
+    if (moveNum > 0 && !gotPremove && !appData.noGUI) {
 	/* 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) {
@@ -3854,7 +3857,7 @@ ParseBoard12(string)
     
     /* Display opponents and material strengths */
     if (gameInfo.variant != VariantBughouse &&
-	gameInfo.variant != VariantCrazyhouse) {
+	gameInfo.variant != VariantCrazyhouse && !appData.noGUI) {
 	if (tinyLayout || smallLayout) {
 	    if(gameInfo.variant == VariantNormal)
 		sprintf(str, "%s(%d) %s(%d) {%d %d}", 
@@ -3882,7 +3885,7 @@ ParseBoard12(string)
 
    
     /* Display the board */
-    if (!pausing) {
+    if (!pausing && !appData.noGUI) {
       
       if (appData.premove)
 	  if (!gotPremove || 
@@ -5206,7 +5209,13 @@ if(appData.debugMode) fprintf(debugFP, "moveType 1 = %d, promochar = %x\n", move
     /* [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];
+	   if(appData.debugMode) fprintf(debugFP, "Drop move %d, curr=%d, x=%d,y=%d, p=%d\n", 
+		moveType, currentMove, fromX, fromY, boards[currentMove][fromY][fromX]);
+//         fromX = boards[currentMove][fromY][fromX];
+	   // holdings might not be sent yet in ICS play; we have to figure out which piece belongs here
+	   if(fromX == 0) fromY = BOARD_HEIGHT-1 - fromY; // black holdings upside-down
+	   fromX = fromX ? WhitePawn : BlackPawn; // first piece type in selected holdings
+	   while(PieceToChar(fromX) == '.' || PieceToNumber(fromX) != fromY && fromX != (int) EmptySquare) fromX++; 
          fromY = DROP_RANK;
     }
 
@@ -5638,12 +5647,12 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
 	  if(appData.autoKibitz && !appData.icsEngineAnalyze ) { /* [HGM] kibitz: send most-recent PV info to ICS */
 		char buf[3*MSG_SIZ];
 
-		sprintf(buf, "kibitz !!! %+.2f/%d (%.2f sec, %.0f nodes, %1.0f knps) PV=%s\n",
+		sprintf(buf, "kibitz !!! %+.2f/%d (%.2f sec, %u nodes, %1.0f knps) PV=%s\n",
 			programStats.score / 100.,
 			programStats.depth,
 			programStats.time / 100.,
-			u64ToDouble(programStats.nodes),
-			u64ToDouble(programStats.nodes) / (10*abs(programStats.time) + 1.),
+			(unsigned int)programStats.nodes,
+			(unsigned int)programStats.nodes / (10*abs(programStats.time) + 1.),
 			programStats.movelist);
 		SendToICS(buf);
 	  }
@@ -6117,6 +6126,10 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
 	cps->useSigint = FALSE;
 	cps->useSigterm = FALSE;
     }
+    if (strncmp(message, "feature ", 8) == 0) { // [HGM] moved forward to pre-empt non-compliant commands
+      ParseFeatures(message+8, cps);
+      return; // [HGM] This return was missing, causing option features to be recognized as non-compliant commands!
+    }
 
     /* [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.
@@ -6221,9 +6234,6 @@ FakeBookMove: // [HGM] book: we jump here to simulate machine moves after book h
 	    return;
 	}
     }
-    if (strncmp(message, "feature ", 8) == 0) {
-      ParseFeatures(message+8, cps);
-    }
     if (sscanf(message, "pong %d", &cps->lastPong) == 1) {
 	return;
     }
@@ -7710,6 +7720,28 @@ void UserAdjudicationEvent( int result )
 }
 
 
+// [HGM] save: calculate checksum of game to make games easily identifiable
+int StringCheckSum(char *s)
+{
+	int i = 0;
+	if(s==NULL) return 0;
+	while(*s) i = i*259 + *s++;
+	return i;
+}
+
+int GameCheckSum()
+{
+	int i, sum=0;
+	for(i=backwardMostMove; i<forwardMostMove; i++) {
+		sum += pvInfoList[i].depth;
+		sum += StringCheckSum(parseList[i]);
+		sum += StringCheckSum(commentList[i]);
+		sum *= 261;
+	}
+	if(i>1 && sum==0) sum++; // make sure never zero for non-empty game
+	return sum + StringCheckSum(commentList[i]);
+} // end of save patch
+
 void
 GameEnds(result, resultDetails, whosays)
      ChessMove result;
@@ -7859,7 +7891,9 @@ GameEnds(result, resultDetails, whosays)
 		DisplayMove(currentMove - 1);
     
 	    if (forwardMostMove != 0) {
-		if (gameMode != PlayFromGameFile && gameMode != EditGame) {
+		if (gameMode != PlayFromGameFile && gameMode != EditGame
+		    && lastSavedGame != GameCheckSum() // [HGM] save: suppress duplicates
+								) {
 		    if (*appData.saveGameFile != NULLCHAR) {
 			SaveGameToFile(appData.saveGameFile, TRUE);
 		    } else if (appData.autoSaveGames) {
@@ -8203,6 +8237,7 @@ Reset(redraw, init)
     DisplayTitle("");
     DisplayMessage("", "");
     HistorySet(parseList, backwardMostMove, forwardMostMove, currentMove-1);
+    lastSavedGame = 0; // [HGM] save: make sure next game counts as unsaved
 }
 
 void
@@ -9596,8 +9631,10 @@ SaveGamePGN(f)
 	linelen += numlen;
 
 	/* Get move */
-	strcpy(move_buffer, parseList[i]); // [HGM] pgn: print move via buffer, so it can be edited
+	strcpy(move_buffer, SavePart(parseList[i])); // [HGM] pgn: print move via buffer, so it can be edited
 	movelen = strlen(move_buffer); /* [HGM] pgn: line-break point before move */
+#if 0
+	// SavePart already does this!
         if( i >= 0 && appData.saveExtendedInfoInPGN && pvInfoList[i].depth > 0 ) {
 		int p = movelen - 1;
 		if(move_buffer[p] == ' ') p--;
@@ -9606,7 +9643,7 @@ SaveGamePGN(f)
 		    if(p && move_buffer[p-1] == ' ') move_buffer[movelen=p-1] = 0;
 		}
         }
-
+#endif
 	/* Print move */
 	blank = linelen > 0 && movelen > 0;
 	if (linelen + (blank ? 1 : 0) + movelen > PGN_MAX_LINE) {
@@ -9691,6 +9728,7 @@ SaveGamePGN(f)
     }
 
     fclose(f);
+    lastSavedGame = GameCheckSum(); // [HGM] save: remember ID of last saved game to prevent double saving
     return TRUE;
 }
 
@@ -9767,6 +9805,7 @@ SaveGame(f, dummy, dummy2)
      char *dummy2;
 {
     if (gameMode == EditPosition) EditPositionDone();
+    lastSavedGame = GameCheckSum(); // [HGM] save: remember ID of last saved game to prevent double saving
     if (appData.oldSaveStyle)
       return SaveGameOldStyle(f);
     else
@@ -10873,8 +10912,19 @@ ExitAnalyzeMode()
 void
 EditPositionDone()
 {
+    int king = gameInfo.variant == VariantKnightmate ? WhiteUnicorn : WhiteKing;
+
     startedFromSetupPosition = TRUE;
     InitChessProgram(&first, FALSE);
+    castlingRights[0][2] = castlingRights[0][5] = BOARD_WIDTH>>1;
+    if(boards[0][0][BOARD_WIDTH>>1] == king) {
+	castlingRights[0][1] = boards[0][0][BOARD_LEFT] == WhiteRook ? 0 : -1;
+	castlingRights[0][0] = boards[0][0][BOARD_RGHT-1] == WhiteRook ? BOARD_RGHT-1 : -1;
+    } else castlingRights[0][2] = -1;
+    if(boards[0][BOARD_HEIGHT-1][BOARD_WIDTH>>1] == WHITE_TO_BLACK king) {
+	castlingRights[0][4] = boards[0][BOARD_HEIGHT-1][BOARD_LEFT] == BlackRook ? 0 : -1;
+	castlingRights[0][3] = boards[0][BOARD_HEIGHT-1][BOARD_RGHT-1] == BlackRook ? BOARD_RGHT-1 : -1;
+    } else castlingRights[0][5] = -1;
     SendToProgram("force\n", &first);
     if (blackPlaysFirst) {
 	strcpy(moveList[0], "");
@@ -12376,9 +12426,27 @@ ParseOption(Option *opt, ChessProgramState *cps)
 	    opt->min = min;
 	    opt->max = max;
 	    opt->type = Spin;
-	} else if(p = strstr(opt->name, " -string ")) {
+	} else if((p = strstr(opt->name, " -slider "))) {
+	    // for now -slider is a synonym for -spin, to already provide compatibility with future polyglots
+	    if((n = sscanf(p, " -slider %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; // Slider;
+	} else if((p = strstr(opt->name, " -string "))) {
 	    opt->textValue = p+9;
 	    opt->type = TextBox;
+	} else if((p = strstr(opt->name, " -file "))) {
+	    // for now -file is a synonym for -string, to already provide compatibility with future polyglots
+	    opt->textValue = p+7;
+	    opt->type = TextBox; // FileName;
+	} else if((p = strstr(opt->name, " -path "))) {
+	    // for now -file is a synonym for -string, to already provide compatibility with future polyglots
+	    opt->textValue = p+7;
+	    opt->type = TextBox; // PathName;
 	} else if(p = strstr(opt->name, " -check ")) {
 	    if(sscanf(p, " -check %d", &def) < 1) return FALSE;
 	    opt->value = (def != 0);
@@ -12386,6 +12454,7 @@ ParseOption(Option *opt, ChessProgramState *cps)
 	} 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
+	    if(*q == '*') cps->comboList[cps->comboCnt-1]++;
 	    opt->value = n = 0;
 	    while(q = StrStr(q, " /// ")) {
 		n++; *q = 0;    // count choices, and null-terminate each of them
@@ -12491,7 +12560,11 @@ ParseFeatures(args, cps)
     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(!ParseOption(&(cps->option[cps->nrOptions++]), cps)) { // [HGM] options: add option feature
+	    sprintf(buf, "rejected option %s\n", cps->option[--cps->nrOptions].name);
+	    SendToProgram(buf, cps);
+	    continue;
+	}
 	if(cps->nrOptions >= MAX_OPTIONS) {
 	    cps->nrOptions--;
 	    sprintf(buf, "%s engine has too many options\n", cps->which);
diff --git a/backend.h b/backend.h
index a4a7acf..f02835f 100644
--- a/backend.h
+++ b/backend.h
@@ -1,370 +1,371 @@
-/*
- * backend.h -- Interface exported by XBoard back end
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard,
- * Massachusetts.
- *
- * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009 Free Software Foundation, Inc.
- *
- * Enhancements Copyright 2005 Alessandro Scotti
- *
- * 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 100
-    Option option[MAX_OPTIONS];
-    int comboCnt;
-    char *comboList[20*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 */
+/*
+ * backend.h -- Interface exported by XBoard back end
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.
+ *
+ * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
+ * 2007, 2008, 2009 Free Software Foundation, Inc.
+ *
+ * Enhancements Copyright 2005 Alessandro Scotti
+ *
+ * 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, FileName, PathName, Slider, Message } 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 200
+    Option option[MAX_OPTIONS];
+    int comboCnt;
+    char *comboList[20*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/configure.ac b/configure.ac
index 0ec602d..5f1497d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,404 +1,429 @@
-dnl| configure.in
-dnl|
-dnl| Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, 2007, 
-dnl| 2008, 2009 Free Software 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| define second argument as VERSION.PATCHLEVEL. e.g. 4.4.0j
-AC_INIT([xboard],[4.4.0.beta1],[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([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([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 $PACKAGE 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
-
-dnl | test if user wants ot use Xaw3d headers
-AC_ARG_WITH([Xaw3d],
-            [AS_HELP_STRING([--with-Xaw3d],
-                            [use Xaw3d instead of Xaw])],
-            [with_xaw3d=yes],
-            [with_xaw3d=no])
-
-XAW_LIBS=
-AS_IF([test "x$with_xaw3d" != xno],
-      [AC_CHECK_LIB([Xaw3d], 
-                    [XawTextReplace],
-                    [AC_SUBST([XAW_LIBS], 
-                              ["-lXaw3d"])
-                     AC_DEFINE([USE_XAW3D], [1],
-                               [Define if you want to use Xaw3d])],
-                    [AC_CHECK_HEADER(X11/Xaw/Dialog.h,xaw_headers="yes")
-		     AC_MSG_FAILURE(
-      		               [--with-Xaw3d was given, but test for Xaw3d failed])],
-			       [-lXaw])])
-if test "$with_xaw3d" == "no" ; then
-   XAW_LIBS="-lXaw"
-fi
-AC_SUBST(XAW_LIBS)
-
-dnl | end Xaw3d test
-
-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_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
+dnl| configure.in
+dnl|
+dnl| Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006, 2007, 
+dnl| 2008, 2009 Free Software 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| define second argument as VERSION.PATCHLEVEL. e.g. 4.4.0j
+AC_INIT([xboard],[4.4.0],[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([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([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 malloc.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 $PACKAGE 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
+
+dnl | test if user wants ot use Xaw3d headers
+AC_ARG_WITH([Xaw3d],
+            [AS_HELP_STRING([--with-Xaw3d],
+                            [use Xaw3d instead of Xaw])],
+            [with_xaw3d=yes],
+            [with_xaw3d=no])
+
+XAW_LIBS=
+AS_IF([test "x$with_xaw3d" != xno],
+      [AC_CHECK_LIB([Xaw3d], 
+                    [XawTextReplace],
+                    [AC_SUBST([XAW_LIBS], 
+                              ["-lXaw3d"])
+                     AC_DEFINE([USE_XAW3D], [1],
+                               [Define if you want to use Xaw3d])],
+                    [AC_CHECK_HEADER(X11/Xaw/Dialog.h,xaw_headers="yes")
+		     AC_MSG_FAILURE(
+      		               [--with-Xaw3d was given, but test for Xaw3d failed])],
+			       [-lXaw])])
+if test "$with_xaw3d" == "no" ; then
+   XAW_LIBS="-lXaw"
+fi
+AC_SUBST(XAW_LIBS)
+
+dnl | end Xaw3d test
+
+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
+  ;;
+
+dnl| add some libs for OS X
+  *-apple-* )
+    X_LIBS="$X_LIBS -lX11 -lXt"    
+  ;;
+esac
+
+AC_ARG_ENABLE(	[xpm],
+		[AS_HELP_STRING([--enable-xpm],[libXpm will be used if found (default)])],
+		[enable_xpm="$enableval"],
+		[enable_xpm="yes"])
+
+if test x"$enable_xpm" != "xno"; 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], 
+	       [AS_HELP_STRING([--enable-ptys],[force use of pseudo-ttys with child processes])],
+[if test "$enableval" = yes; then
+  USE_PTYS=1
+  enable_ptys="ptys"
+  AC_MSG_RESULT([ptys (user override)])
+fi
+if test "$enableval" = no; then
+  USE_PTYS=0
+  enable_ptys="pipes"
+  AC_MSG_RESULT([pipes (user override)])
+fi],
+[if test "$USE_PTYS" = 1; then
+  AC_MSG_RESULT(ptys)
+  enable_ptys="ptys"
+else
+  AC_MSG_RESULT(pipes)
+  enable_ptys="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], 
+	       [AS_HELP_STRING([--enable-zippy],[support interfacing a chess program to ICS (default)])],
+	       [], 
+	       [enable_zippy="yes"])
+
+if test x"$enable_zippy" != xno; then
+  AC_DEFINE(ZIPPY, 1,[should zippy be enabled])
+fi
+AM_CONDITIONAL([ZIPPY], [test x$enable_zippy != xno])
+
+
+AC_ARG_ENABLE(sigint, 
+[AS_HELP_STRING([--enable-sigint],[sending SIGINT (^C) wakes up GNU Chess (default)])],
+[if test "$enableval" = yes; then
+  AC_DEFINE(ATTENTION, 1)
+fi
+enable_sigint=$enableval
+],
+[enable_sigint="yes"
+AC_DEFINE(ATTENTION, 1)])
+
+
+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
+
+dnl
+dnl Output a summary
+dnl
+echo ""
+echo " Configurations summary:"
+echo ""
+echo "        prefix:          $prefix"
+echo ""
+echo "        Xaw3d:           $with_xaw3d"
+echo ""
+echo "        xpm:             $enable_xpm"
+echo "        ptys:            $enable_ptys"
+echo "        zippy:           $enable_zippy"
+echo "        sigint:          $enable_sigint"
diff --git a/engine-intf.html b/engine-intf.html
index 8b401ae..8ff98ce 100644
--- a/engine-intf.html
+++ b/engine-intf.html
@@ -6,13 +6,12 @@
 <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>
-Version 2; implemented in xboard/WinBoard 4.2.1 and later.<br>
+Version 2; implemented in xboard/WinBoard 4.2.1 and later. (Sept 3, 2009)<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>.
+Changes for WinBoard 4.4.xx are indicated in <font color=blue>blue</font>.
 <hr noshade size="2">
 
 <ul>
@@ -536,6 +535,8 @@ or by having no legal moves (ICC)</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><font color=blue>great</font>
+<td><font color=blue>Great Shatranj: sliders are replaced by corresponding short-range pieces on a 10x8 board</font>
 <tr align="left"><th>unknown<td>Unknown variant (not supported)
 </table>
 <p>
@@ -1211,6 +1212,10 @@ 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.
+<font color=blue>If the GUI rejects an option feature because of the
+syntax of the value, it should print the value string with the
+"rejected" command, e.g. "rejected option nonsense" in response
+to receiving feature option="nonsense".</font>
 </p>
 
 <p>
@@ -1452,14 +1457,19 @@ and will not send any "egtpath" commands to inform the engine about their wherea
 </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.
+so that the user can change the corresponding setting of the engine through the GUI interactively.
 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:
+Unlike other features, option features are accumulated by the GUI, 
+and the GUI must be able to add a new option to the list at any time,
+even after having received feature done=1.
+There are ten 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 -reset"
+<br>
 feature option="NAME -check VALUE"
 <br>
 feature option="NAME -string VALUE"
@@ -1468,11 +1478,34 @@ feature option="NAME -spin VALUE MIN MAX"
 <br>
 feature option="NAME -combo CHOICE1 /// CHOICE2 ..."
 <br>
+feature option="NAME -slider VALUE MIN MAX"
+<br>
+feature option="NAME -file VALUE"
+<br>
+feature option="NAME -path VALUE"
+<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 other words in capitals would be replaced by the current (default) setting of the option,
+(a character string for -string options, a decimal number for -spin and -check options,
+were the latter uses 1=checked, 0=unchecked),
 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.
+In the latter case, the current value will be preceded by an asterisk.
+The -file and -path options are similar to -string, but can be used to inform the GUI that
+the text represents a file name or folder name respectively, 
+so the GUI dialog could add the appropriate browse button to the text-edit field.
+Similarly, a -slider option is like a -spin, but the GUI might make a different
+graphical representation for it.
+A -save option is like a -button, and defines an immediate command to be sent by the engine.
+With -save the GUI will make sure all current option settings are flushed to the engine
+before it sends this command.
+A -reset option is like a -button, but use of it purges the list of options before sending 
+the corresponding option command to the engine.
+This enables the engine to completely redefine its options or their current settings,
+by sending a new set of option feature commands to the GUI, 
+terminated by feature done=1.
+(The effect of sending an option feature for an option with the same name as was defined before, 
+without first receiving a -reset option command, is undefined.)
 </font>
 
 <dt><font color=red>
@@ -1576,15 +1609,26 @@ Machines mode, and the PGN save file as required.
 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>
+or make draw-by-rule claims that are not yet valid in the current position
+(but will be after you move).
+For offering and claiming such draws, "offer draw" should be used.</font>
 <p>
+<font color=blue>
+Note that (in accordance with FIDE rules) only KK, KNK, KBK and KBKB with all bishops on the
+same color can be claimed as draws on the basis of insufficient mating material.
+The end-games KNNK, KBKN, KNKN and KBKB with unlike bishops do have mate positions,
+and cannot be claimed.
+Complex draws based on locked Pawn chains will not be recognized as draws by most interfaces,
+so do not claim in such positions, but just offer a draw or play on.
+</font>
+<p>
+<font color=blue>
 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.
+</font>
 </p>
 
 <dt><strong>resign</strong>
@@ -1593,6 +1637,8 @@ 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.
+<font color=blue>Note that many interfaces work more smoothly if you resign <em>before</em>
+you move.</font>
 <p>
 
 <dt><strong>offer draw</strong>
@@ -1604,7 +1650,7 @@ 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.
+in which case a refusal to play on implied by the RESULT command might 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
diff --git a/install-sh b/install-sh
old mode 100644
new mode 100755
diff --git a/parser.h b/parser.h
index abce968..c7b87e2 100644
--- a/parser.h
+++ b/parser.h
@@ -1,66 +1,66 @@
-/*
- * parser.h -- Interface to XBoard move parser
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard,
- * Massachusetts.
- *
- * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009 Free Software Foundation, Inc.
- *
- * Enhancements Copyright 2005 Alessandro Scotti
- *
- * 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];
+/*
+ * parser.h -- Interface to XBoard move parser
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.
+ *
+ * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
+ * 2007, 2008, 2009 Free Software Foundation, Inc.
+ *
+ * Enhancements Copyright 2005 Alessandro Scotti
+ *
+ * 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/uci.c b/uci.c
index f02507f..d0f76c4 100644
--- a/uci.c
+++ b/uci.c
@@ -24,7 +24,10 @@
  */
 #include <stdio.h>
 #include <stdlib.h>
-#include <malloc.h>
+
+#if HAVE_MALLOC_H
+  #include <malloc.h>
+#endif
 
 #ifdef WIN32
 // [HGM] this was probably a Windows-specific constant. Needs to be defined here now I
diff --git a/winboard/WB4Jaws.dev b/winboard/WB4Jaws.dev
index 281f06c..c91698b 100644
--- a/winboard/WB4Jaws.dev
+++ b/winboard/WB4Jaws.dev
@@ -1,7 +1,7 @@
 [Project]
 FileName=WB4Jaws.dev
 Name=Winboard
-UnitCount=22
+UnitCount=23
 Type=0
 Ver=1
 ObjFiles=
@@ -228,24 +228,6 @@ Priority=1000
 OverrideBuildCmd=0
 BuildCmd=
 
-[VersionInfo]
-Major=4
-Minor=4
-Release=0
-Build=0
-LanguageID=1033
-CharsetID=1252
-CompanyName=GNU Project
-FileVersion=4.4.0.beta1
-FileDescription=Winboard 32-bit GUI for chess (Includes support for JAWS screen reader)
-InternalName=winboard.exe
-LegalCopyright=GPLv3 Copyright © 2009
-LegalTrademarks=
-OriginalFilename=winboard.exe
-ProductName=Winboard
-ProductVersion=4.4.0.beta1
-AutoIncBuildNr=0
-
 [Unit21]
 FileName=..\zippy.c
 CompileCpp=0
@@ -266,3 +248,13 @@ Priority=1000
 OverrideBuildCmd=0
 BuildCmd=
 
+[Unit23]
+FileName=wsettings.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
diff --git a/winboard/Winboard.dev b/winboard/Winboard.dev
index 39b89f3..3b65063 100644
--- a/winboard/Winboard.dev
+++ b/winboard/Winboard.dev
@@ -1,7 +1,7 @@
 [Project]
 FileName=Winboard.dev
 Name=Winboard
-UnitCount=22
+UnitCount=23
 Type=0
 Ver=1
 ObjFiles=
@@ -248,3 +248,13 @@ Priority=1000
 OverrideBuildCmd=0
 BuildCmd=
 
+[Unit23]
+FileName=wsettings.c
+CompileCpp=0
+Folder=Winboard
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
diff --git a/winboard/config.h b/winboard/config.h
index c9e4209..099f415 100644
--- a/winboard/config.h
+++ b/winboard/config.h
@@ -46,13 +46,13 @@
 #define PACKAGE_NAME "WinBoard"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "WinBoard 4.4.0.beta1"
+#define PACKAGE_STRING "WinBoard 4.4.0"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "winboard"
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "4.4.0.beta1"
+#define PACKAGE_VERSION "4.4.0"
 
 #define PTY_ITERATION
 
diff --git a/winboard/help/contents.hhc b/winboard/help/contents.hhc
new file mode 100644
index 0000000..26885f3
--- /dev/null
+++ b/winboard/help/contents.hhc
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML>
+<HEAD>
+<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
+<!-- Sitemap 1.0 -->
+</HEAD><BODY>
+<OBJECT type="text/site properties">
+	<param name="Auto Generated" value="Yes">
+</OBJECT>
+<UL>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="WinBoard: Chessboard for Windows">
+		<param name="Local" value="html/01.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Menus">
+		<param name="Local" value="html/02.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Help Menu">
+		<param name="Local" value="html/08.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Buttons">
+		<param name="Local" value="html/10.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Command Line Options">
+		<param name="Local" value="html/11.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Initialization Files">
+		<param name="Local" value="html/19.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Installing Chess Engines">
+		<param name="Local" value="html/20.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Firewalls">
+		<param name="Local" value="html/21.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Limitations and Non-Limitations">
+		<param name="Local" value="html/22.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Authors and Contributors">
+		<param name="Local" value="html/23.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Name" value="Copyright">
+		<param name="Local" value="html/24.htm">
+		</OBJECT>
+</UL>
+</BODY></HTML>
diff --git a/winboard/help/html/01.htm b/winboard/help/html/01.htm
new file mode 100644
index 0000000..8609cb8
--- /dev/null
+++ b/winboard/help/html/01.htm
@@ -0,0 +1,73 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Contents</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<H1><A NAME="contents"></A><I>WinBoard</I>: Chessboard for Windows</H1>
+
+<P><B><font color="#008000">An updated description with the release of version 4.4.0.</font></B></P>
+
+<P><B><font color="#008000">“For the ultimate WinBoard Experience”</font></B></P>
+
+<P><font color="#ff0000">New features since WinBoard 4.2.7 that are implemented in Alessandro Scotti’s Winboard_x are highlighted in red.</font> <font color="#008000">New features in the WinBoard 4.3.xx series by H.G. Muller are highlighted in green,</font> <font color="#3333ff">that in the unified 4.4 series in blue.</font></P>
+
+
+
+<P><B><A NAME="description"></A>Description</B></P>
+
+<P><I>WinBoard</I> 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:
+
+<UL>
+	<LI><B><I>Chess engines</I></B> 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><font color="#008000">Fairy-Max</font></I> is supplied with WinBoard <font color="#008000">4.3.14,</font> and over 100 other free chess engines are available separately. Of these, Crafty is the most popular. See <A HREF="20.htm">Installing Chess Engines</A> for instructions on installing additional chess engines.<BR><BR></LI>
+
+	<LI><B><I>Chess servers</I> </B>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, <font color="#3333ff">analyze observed games with a chess program</font>, 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 information.<BR><BR></LI>
+
+	<LI><B><I>The Web</I></B> 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.</LI>
+</UL>
+
+
+
+<P><B><A NAME="gettingstarted"></A>Getting Started</B></P>
+
+<P>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.</P>
+
+<P>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 chess servers. More advanced users can <A HREF="16.htm#icsnames">customize</A> these lists or type in WinBoard <A HREF="11.htm">command line options</A> directly.</P>
+
+
+
+<P>After starting WinBoard, you can make <A NAME="move"></A>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 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 moves 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.</P>
+
+
+
+<P>When WinBoard<I> </I>is iconized, its <A NAME="icon"></A>icon is a white knight if it is White's turn to move, a black knight if it is Black's turn.</P>
+
+<P><B>Additional Information</B></P>
+
+<P><A HREF="02.htm">Menus</A></P>
+
+<P><A HREF="10.htm">Shortcut Buttons</A></P>
+
+<P><A HREF="11.htm">Command Line Options</A></P>
+
+<P><A HREF="19.htm">Initialization Files</A></P>
+
+<P><A HREF="20.htm">Installing Chess Engines</A></P>
+
+<P><A HREF="21.htm">Firewalls</A></P>
+
+<P><A HREF="22.htm">Limitations</A></P>
+
+<P><A HREF="23.htm">Authors</A></P>
+
+<P><A HREF="24.htm">Copyright</A></P>
+
+<P>Frequently Asked Questions</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/02.htm b/winboard/help/html/02.htm
new file mode 100644
index 0000000..2b1384a
--- /dev/null
+++ b/winboard/help/html/02.htm
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Menus</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="menus"></A>MENUS</B></P>
+
+<P><A HREF="03.htm">File Menu</A></P>
+
+<P><A HREF="04.htm">Mode Menu</A></P>
+
+<P><A HREF="05.htm">Action Menu</A></P>
+
+<P><A HREF="06.htm">Step Menu</A></P>
+
+<P><A HREF="07.htm">Options Menu</A></P>
+
+<P><A HREF="08.htm">Help Menu</A></P>
+
+<P><A HREF="09.htm">ICS Interaction Context Menu</A></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/03.htm b/winboard/help/html/03.htm
new file mode 100644
index 0000000..87b0c8a
--- /dev/null
+++ b/winboard/help/html/03.htm
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>File Menu</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="filemenu"></A>File Menu</B></P>
+
+
+
+<P><B><A NAME="newgame"></A><font color="#ff0000">New Game</font> <font color="#ff0000">(former</font> Reset<font color="#ff0000">)</font></B></P>
+
+<P>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>refresh </B>command. If you want to stop playing, observing, or examining a game on ICS, use an appropriate command from the <A HREF="05.htm">Action</A> menu, not <font color="#ff0000">New Game</font>.</P>
+
+
+
+<P><B><A NAME="newshufflegame"></A><font color="#008000">New Shuffle Game</font></B></P>
+
+<P><font color="#ff0000">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 chosen position will continue to be used on every subsequent “New Game”,</font> <font color="#008000">even if you are playing a variant that normally is not shuffled, until you select a new variant through the “New Variant…” menu.</font> <font color="#ff0000">If you enter “-1” for the position number,  new random number is drawn before every game.</font></P>
+
+<P><font color="#008000">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. In 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.</font></P>
+
+
+
+<P><B><A NAME="newvariant"></A><font color="#008000">New Variant</font></B></P>
+
+<P><font color="#008000">Select a new variant. There are controls to enter a board width, board height and holdings size, but normally you leave them at ‘-1’, 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 play 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.</font></P>
+
+<P><font color="#008000">The variant will remain in force until you select a new one; i.e. subsequent “New Game” 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.</font></P>
+
+
+
+<P><B><A NAME="loadgame"></A>Load Game</B></P>
+
+<P>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.</P>
+
+<P>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>P at f7</I> 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 (enclosed in parentheses) are treated as comments; WinBoard is not able to walk variation trees. The nonstandard PGN tag <CODE>[Variant "varname"]</CODE> functions similarly to the <A HREF="18.htm#variant">variant</A> command-line option, allowing games in certain chess variants to be loaded. There is also a heuristic to recognize chess variants from the <CODE>Event</CODE> tag, by looking for the strings that the Internet Chess Servers put there when saving variant ("wild") games.</P>
+
+
+
+<P><B><A NAME="loadnextgame"></A>Load Next Game</B></P>
+
+<P>Loads the next game from the last game record file you loaded.</P>
+
+
+
+<P><B><A NAME="loadpreviousgame"></A>Load Previous Game</B></P>
+
+<P>Loads the previous game from the last game record file you loaded. Not available if the last game was loaded from a pipe.</P>
+
+
+
+<P><B><A NAME="reloadsamegame"></A>Reload Same Game</B></P>
+
+<P>Reloads the last game you loaded. Not available if the last game was loaded from a pipe.</P>
+
+
+
+<P><B><A NAME="savegame"></A>Save Game</B></P>
+
+<P>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 <A HREF="15.htm#oldsavestyle">oldSaveStyle</A> option is True, in which case they are saved in an older format that is specific to WinBoard. Both formats are human-readable, and both can be read back by the Load Game command. Notation of the form <I>P at f7</I> is generated for piece-drops in bughouse games; this is a nonstandard extension to PGN.</P>
+
+
+
+<P><B><A NAME="copygametoclipboard"></A>Copy Game To Clipboard</B></P>
+
+<P>Copies the record of the current game to the Windows clipboard in PGN (portable game notation) format.</P>
+
+
+
+<P><B><A NAME="pastegamefromclipboard"></A>Paste Game From Clipboard</B></P>
+
+<P>Plays a game from the Windows clipboard. See <A HREF="#loadgame">Load Game</A> for a discussion of game file format and parser behavior.</P>
+
+
+
+<P><B><A NAME="loadposition"></A>Load Position</B></P>
+
+<P>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 <U>Save Position</U> command writes when <A HREF="15.htm#oldsavestyle">oldSaveStyle</A> is turned on. <font color="#008000">Note that many variants require an extension of the original FEN standard. WinBoard tries to be as universal as possible in understanding 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 the 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 bFEN). 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.</font></P>
+
+
+
+<P><B><A NAME="loadnextposition"></A>Load Next Position</B></P>
+
+<P>Loads the next position from the last position file you loaded.</P>
+
+
+
+<P><B><A NAME="loadpreviousposition"></A>Load Previous Position</B></P>
+
+<P>Loads the previous position from the last position file you loaded. Not available if the last position was loaded from a pipe.</P>
+
+
+
+<P><B><A NAME="reloadsameposition"></A>Reload Same Position</B></P>
+
+<P>Reloads the last position you loaded. Not available if the last position was loaded from a pipe.</P>
+
+
+
+<P><B><A NAME="saveposition"></A>Save Position</B></P>
+
+<P>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 <A HREF="15.htm#oldsavestyle">oldSaveStyle</A> option is True, in which case they are saved in an older, human-readable format that is specific to WinBoard<I>.</I> Both formats can be read back by the Load Position command; however, currently Load Position can load only the first position in a file.</P>
+
+
+
+<P><B><A NAME="save diagram"></A><font color="#008000">Save Diagram</font></B></P>
+
+<P><font color="#008000">Writes the current board display as a bitmap file. With this command you can use WinBoard as a diagram generator.</font></P>
+
+
+
+<P><B><A NAME="copypositiontoclipboard"></A>Copy Position To Clipboard</B></P>
+
+<P>Places a diagram of the current position (in Forsythe-Edwards notation) into the Windows clipboard.</P>
+
+
+
+<P><B><A NAME="pastepositionfromclipboard"></A>Paste Position From Clipboard</B></P>
+
+<P>Sets up a position from the Windows clipboard. Position must be in FEN (Forsythe-Edwards notation). Puts WinBoard into <A HREF="04.htm#editgame">Edit Game</A> mode if it was not there already.</P>
+
+
+
+<P><B><A NAME="exit"></A>Exit</B></P>
+
+<P>Exits from WinBoard.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/04.htm b/winboard/help/html/04.htm
new file mode 100644
index 0000000..f448732
--- /dev/null
+++ b/winboard/help/html/04.htm
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Mode Menu</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="modemenu"></A>Mode Menu</B></P>
+
+
+
+<P><B><A NAME="machinewhite"></A>Machine White</B></P>
+
+<P>Forces the chess engine to play white.</P>
+
+
+
+<P><B><A NAME="machineblack"></A>Machine Black</B></P>
+
+<P>Forces the chess engine to play black.</P>
+
+
+
+<P><B><A NAME="twomachines"></A>Two Machines</B></P>
+
+<P>Starts a game between two chess engines.</P>
+
+
+
+<P><B><A NAME="machine both"></A><font color="#008000">Machine Both</font></B></P>
+
+<P><font color="#008000">A single chess engine plays itself. Mainly 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).</font></P>
+
+
+
+<P><B><A NAME="analysismode"></A>Analysis Mode</B></P>
+
+<P>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. Crafty was the first engine to support this feature, but by now there are many others that support it as well.</P>
+
+<P><font color="#3333ff">From WinBoard 4.4 on this function can also be invoked in ‘zippy mode’, 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 adding 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.)</font></P>
+
+
+
+<P><B><A NAME="analyzefile"></A>Analyze File</B></P>
+
+<P>In this mode, you can load a game from a file, and the chess engine will analyze each 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.</P>
+
+
+
+<P><B><A NAME="icsclient"></A>ICS Client</B></P>
+
+<P>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.</P>
+
+<P>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 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 command. Press the right mouse button in the output area for a <A HREF="09.htm">context menu</A> of editing commands and ICS command shortcuts.</P>
+
+<P>Some useful ICS commands include <B>who</B> to see who is logged on, <B>games</B> to see what games are being played, <B>match</B> to challenge another player to a game, <B>observe</B> to observe an ongoing game, <B>examine</B> or <B>smoves</B> to review a recently completed game, and of course <B>help</B>. </P>
+
+<P>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 <A HREF="06.htm#forward">Forward</A> and <A HREF="06.htm#backward">Backward</A> or save them with <A HREF="03.htm#savegame">Save Game</A>.</P>
+
+<P>Some special ICS Client features are activated when you are in <B>examine</B> or <B>bsetup </B>mode on ICS. See the descriptions of the menu commands <A HREF="06.htm#forward">Forward</A>, <A HREF="06.htm#backward">Backward</A>, <A HREF="#pause">Pause</A>, and <A HREF="05.htm#stopexamining">Stop Examining</A> 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 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. 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.</P>
+
+<P>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>follow</B> or <B>pfollow</B> command in the new window.</P>
+
+
+
+<P><B><A NAME="editgame"></A>Edit Game</B></P>
+
+<P>Allows you to make moves for both Black and White, and to change moves after backing up with the <A HREF="06.htm#backward">Backward</A> 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.</P>
+
+<P>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 <A HREF="#machinewhite">Machine White</A>, <A HREF="#machineblack">Machine Black</A>, or <A HREF="#twomachines">Two Machines</A>.</P>
+
+<P>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>examine</B> command or start an ICS match against yourself.</P>
+
+
+
+<P><B><A NAME="editposition"></A>Edit Position</B></P>
+
+<P>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. <font color="#008000">The pop-up menu also contains options to ‘promote’ or ‘demote’ 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).</font></P>
+
+<P>Selecting Edit Position causes WinBoard<I> </I>to discard all remembered moves in the current game.</P>
+
+<P>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>examine</B> command, or start an ICS match against yourself. (See also <A HREF="#icsclient">ICS Client</A> above.)</P>
+
+
+
+<P><B><A NAME="show engine output"></A><font color="#ff0000">Show Engine Output</font></B></P>
+
+<P><font color="#ff0000">Open a new window dedicated to showing the thinking output of the engine(s), as controlled by “Show Thinking”.</font></P>
+
+
+
+<P><B><A NAME="show evaluation graph"></A><font color="#ff0000">Show Evaluation Graph</font></B></P>
+
+<P><font color="#ff0000">Open a new window dedicated to displaying a graph, representing the development of the engine score(s) from the current game over time. (Needs “show Thinking” to be enabled in order to work.</font></P>
+
+
+
+<P><B><A NAME="showgamelist"></A>Show Game List</B></P>
+
+<P>Shows or hides the list of games generated by the last <A HREF="03.htm#loadgame">Load Game</A> command.</P>
+
+
+
+<P><B><A NAME="show move history"></A><font color="#ff0000">Show Move History</font></B></P>
+
+<P><font color="#ff0000">Open a new window dedicated to showing the game currently in progress.</font></P>
+
+
+
+<P><B><A NAME="training"></A>Training</B></P>
+
+<P>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 <A HREF="06.htm#typeinmove">Type In Move</A> command). 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. </P>
+
+
+
+<P><B><A NAME="edittags"></A>Edit Tags</B></P>
+
+<P>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:</P>
+
+<PRE><CODE>
+&lt;tag-section&gt; ::= &lt;tag-pair&gt; &lt;tag-section&gt;
+                  &lt;empty&gt;
+&lt;tag-pair&gt;    ::= [ &lt;tag-name&gt; &lt;tag-value&gt; ]
+&lt;tag-name&gt;    ::= &lt;identifier&gt;
+&lt;tag-value&gt;   ::= &lt;string&gt;</CODE></PRE>
+
+<P>See the PGN Standard for full details. Here is an example:</P>
+
+<PRE><CODE>
+[Event "Portoroz Interzonal"]
+[Site "Portoroz, Yugoslavia"]
+[Date "1958.08.16"]
+[Round "8"]
+[White "Robert J. Fischer"]
+[Black "Bent Larsen"]
+[Result "1-0"]</CODE></PRE>
+
+<P>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 <CODE>"?"</CODE> (unknown value) or <CODE>"-"</CODE> (inapplicable value).</P>
+
+
+
+<P><B><A NAME="editcomment"></A>Edit Comment</B></P>
+
+<P>Adds or modifies a comment on the current position. Comments are saved by <A HREF="03.htm#savegame">Save Game</A> and are displayed by <A HREF="03.htm#loadgame">Load Game</A>, <A HREF="06.htm#forward">Forward</A>, and <A HREF="06.htm#backward">Backward</A>.</P>
+
+
+
+<P><B><A NAME="enterusername"></A><font color="#008000">Enter Username</font></B></P>
+
+<P><font color="#008000">Allows you to type the name of the human player, which will appear in the PGN header and in the window title.</font></P>
+
+
+
+<P><B><A NAME="pause"></A>Pause</B></P>
+
+<P>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>P</B> (or <B>C</B>) button is equivalent to selecting Pause.</P>
+
+<P>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 <A HREF="06.htm#forward">Forward</A>). This behavior is meant to simulate adjournment with a sealed move.</P>
+
+<P>If you select Pause while you are in <B>examine</B> 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.</P>
+
+<P>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 <A HREF="06.htm#forward">Forward</A>, or resume automatic loading by selecting Pause again.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/05.htm b/winboard/help/html/05.htm
new file mode 100644
index 0000000..4e04f9b
--- /dev/null
+++ b/winboard/help/html/05.htm
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Action Menu</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="actionmenu"></A>Action Menu</B></P>
+
+<P>Most of these commands are available in chess server mode only.</P>
+
+
+
+<P><B><A NAME="accept"></A>Accept</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="decline"></A>Decline</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="rematch"></A>Rematch</B></P>
+
+<P>Issues the ICS <B>rematch</B> command, which asks for another game against your last opponent with the same time control and rule set.</P>
+
+
+
+<P><B><A NAME="callflag"></A>Call Flag</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="draw"></A>Draw</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="adjourn"></A>Adjourn</B></P>
+
+<P>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>match</B> command.</P>
+
+
+
+<P><B><A NAME="abort"></A>Abort</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="resign"></A>Resign</B></P>
+
+<P>Resigns the game to your opponent.</P>
+
+
+
+<P><B><A NAME="stopobserving"></A>Stop Observing</B></P>
+
+<P>Ends your participation in observing a game, by issuing the ICS <B>unobserve</B> command.</P>
+
+
+
+<P><B><A NAME="stopexamining"></A>Stop Examining</B></P>
+
+<P>Ends your participation in observing a game, by issuing the ICS <B>unobserve</B> command.</P>
+
+
+
+<P><B><A NAME="adjudicatetowhite"></A><font color="#ff0000">Adjudicate To White</font></B></P>
+
+<P><font color="#ff0000">End the current game and stop participating engine. The result will appear in the PGN as a win for white.</font></P>
+
+
+
+<P><B><A NAME="adjudicatetoblack"></A><font color="#ff0000">Adjudicate To Black</font></B></P>
+
+<P><font color="#ff0000">Same as above, but game will appear as a win for black.</font></P>
+
+
+
+<P><B><A NAME="adjudicatedraw"></A><font color="#ff0000">Adjudicate Draw</font></B></P>
+
+<P><font color="#ff0000">Same as above, but game will appear as a draw.</font></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/06.htm b/winboard/help/html/06.htm
new file mode 100644
index 0000000..23b0a72
--- /dev/null
+++ b/winboard/help/html/06.htm
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Step Menu</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="stepmenu"></A>Step Menu</B></P>
+
+
+
+<P><B><A NAME="typeinmove"></A>Type In Move</B></P>
+
+<P>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.)</P>
+
+
+
+<P><B><A NAME="backward"></A>Backward</B></P>
+
+<P>Steps backward through a series of remembered moves. The <B>&lt;</B> button is equivalent to selecting Backward<font color="#3333ff">, as is turning the mouse wheel towards you</font>. 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 <A HREF="#retractmove">Retract Move</A> or <A HREF="04.htm#editgame">Edit Game</A> if you want to change past moves.</P>
+
+<P>If you are examining a game on the ICS, the behavior of Backward depends on whether WinBoard<I> </I>is in <A HREF="04.htm#pause">Pause</A> mode. If Pause mode is off, Backward issues the ICS command<B> backward</B>, 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.</P>
+
+
+
+<P><B><A NAME="forward"></A>Forward</B></P>
+
+<P>Steps forward through a series of remembered moves (undoing the effect of <A HREF="#backward">Backward</A>) or through a game file. The <B>&gt;</B> button is equivalent<font color="#3333ff">, as is turning the mouse wheel away from you</font>.</P>
+
+<P>If you are examining a game on the ICS, the behavior of Forward depends on whether WinBoard<I> </I>is in <A HREF="04.htm#pause">Pause</A> mode. If Pause mode is off, Forward issues the ICS command<B> forward</B>, 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.</P>
+
+
+
+<P><B><A NAME="backtostart"></A>Back to Start</B></P>
+
+<P>Jumps backward to the first remembered position in the game. The <B>&lt;&lt; </B>button is equivalent.</P>
+
+<P>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 <A HREF="#retractmove">Retract Move</A> or <A HREF="04.htm#editgame">Edit Game</A> if you want to change past moves; or use <A HREF="03.htm#newgame">New Game</A> to start a new game.</P>
+
+<P>If you are examining a game on the ICS, the behavior of Back to Start depends on whether WinBoard<I> </I>is in <A HREF="04.htm#pause">Pause</A> mode. If Pause mode is off, Backward issues the ICS command <B>backward 999999</B>, 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.</P>
+
+
+
+<P><B><A NAME="forwardtoend"></A>Forward to End</B></P>
+
+<P>Jumps forward to the last position in the game. The <B>&gt;&gt;</B> button is equivalent.</P>
+
+<P>If you are examining a game on the ICS, the behavior of Forward to End depends on whether WinBoard<I> </I>is in <A HREF="04.htm#pause">Pause</A> mode. If Pause mode is off, Forward to End issues the ICS command <B>forward 999999</B>, 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 the game was in when you paused.</P>
+
+
+
+<P><B><A NAME="revert"></A>Revert</B></P>
+
+<P>If you are examining a game on the ICS, issues the ICS command <B>revert</B>.</P>
+
+
+
+<P><B><A NAME="truncategame"></A>Truncate Game</B></P>
+
+<P>Discards all remembered moves of the game beyond the current position. Puts WinBoard into <A HREF="04.htm#editgame">Edit Game</A> mode if it was not there already.</P>
+
+
+
+<P><B><A NAME="movenow"></A>Move Now</B></P>
+
+<P>Forces the chess engine to move immediately. May not work with all chess engines.</P>
+
+
+
+<P><B><A NAME="retractmove"></A>Retract Move</B></P>
+
+<P>Retracts your last move.</P>
+
+<P>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 <A HREF="#movenow">Move Now</A> first.</P>
+
+<P>In ICS mode, Retract Move issues the command <B>takeback 1 </B>or <B>takeback 2</B>, depending on whether it is your opponent's move or yours.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/07.htm b/winboard/help/html/07.htm
new file mode 100644
index 0000000..7d848af
--- /dev/null
+++ b/winboard/help/html/07.htm
@@ -0,0 +1,401 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Options Menu</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="optionsmenu"></A>Options Menu</B></P>
+
+
+
+<P><B><A NAME="flipview"></A><U>Flip View</U></B></P>
+
+<P>Inverts your view of the chessboard.</P>
+
+<P>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 <A HREF="16.htm#flipviewoption">flipView</A> command line option.</P>
+
+
+
+<P><B><A NAME="swap clocks"></A><font color="#008000"><U>Swap Clocks</U></font></B></P>
+
+<P><font color="#008000">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 “Edit Game” mode. (Clicking the clocks in other modes is interpreted as claiming the flag.)</font></P>
+
+
+
+<P><B><U><A NAME="generaloptions"></A>General</U></B></P>
+
+
+
+<P><B><A NAME="alwaysontop"></A>Always On Top</B></P>
+
+<P>If this option is on, WinBoard sets its chessboard to be a <I>topmost</I> window, meaning that it always appears on top of all ordinary windows on the screen.</P>
+
+
+
+<P><B><A NAME="alwaysqueen"></A>Always Queen</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="animatedragging"></A>Animate Dragging</B></P>
+
+<P>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</P>
+
+<P>dragging a piece, but if Animate Moving is on, the move will be animated when it is complete.</P>
+
+
+
+<P><B><A NAME="animatemoving"></A>Animate Moving</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="autoflagcmd"></A>Auto Flag</B></P>
+
+<P>If this option is on and 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 insufficient mating material. On most chess servers, you can now do<B> set autoflag 1 </B>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.</P>
+
+
+
+<P><B><A NAME="autoflipview"></A>Auto Flip View</B></P>
+
+<P>If this 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.</P>
+
+
+
+<P><B><A NAME="autoraiseboard"></A>Auto Raise Board</B></P>
+
+<P>If this 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.</P>
+
+
+
+<P><B><A NAME="blindfoldcmd"></A>Blindfold</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="highlightdragging"></A>Highlight Dragging</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="extendedpgninfo"></A><font color="#ff0000">Extended PGN Info</font></B></P>
+
+<P><font color="#ff0000">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 “Show Thinking” is enabled. The recorded time is the time reported by the engine.</font></P>
+
+
+
+<P><B><A NAME="extrainfoinmovehistory"></A><font color="#ff0000">Extra Info In Move History</font></B></P>
+
+<P><font color="#ff0000">Same as above, but in move-history window.</font></P>
+
+
+
+<P><B><A NAME="highlightlastmove"></A>Highlight Last Move</B></P>
+
+<P>If Highlight Last Move is on, after a move is made, the starting and ending squares remain highlighted. In addition, after you use <A HREF="06.htm#backward">Backward</A> or <A HREF="06.htm#backtostart">Back to Start</A>, the starting and ending squares of the last move to be <I>unmade</I> are highlighted.</P>
+
+
+
+<P><B><A NAME="periodicupdatescmd"></A>Periodic Updates</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="pondernextmovecmd"></A>Ponder Next Move</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="popupexitmessagecmd"></A>Popup Exit Message</B></P>
+
+<P>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 <A HREF="15.htm#debugmode">debugMode</A> is on, however, the message will appear in the debug log.</P>
+
+
+
+<P><B><A NAME="popupmoveerrorscmd"></A>Popup Move Errors</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="showbuttonbarcmd"></A>Show Button Bar</B></P>
+
+<P>If Show Button Bar is on, WinBoard displays on-screen <A HREF="10.htm">buttons</A> to step forward, backward, or pause the game. If it is off, the buttons are hidden, making the message line wider.</P>
+
+
+
+<P><B><A NAME="showcoordscmd"></A>Show Coords</B></P>
+
+<P>If Show Coords is on, WinBoard displays algebraic coordinates along the board's left and bottom edges. </P>
+
+
+
+<P><B><A NAME="showthinkingcmd"></A>Show Thinking</B></P>
+
+<P>If this option is set, WinBoard displays the chess engine’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.</P>
+
+
+
+<P><B><A NAME="testlegalitycmd"></A>Test Legality</B></P>
+
+<P>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>d</B> file are generally supported with Test Legality on. <font color="#008000">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 legality 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.)</font></P>
+
+
+
+<P><B><A NAME="hidethinkingfromhuman"></A><font color="#ff0000">Hide Thinking From Human</font></B></P>
+
+<P><font color="#ff0000">An alternative to suppressing the Thinking Output in the display above the board by switching “Show Thinking” off, but doing it in a way that still allows the extended PGN info to be recorded.</font></P>
+
+
+
+<P><B><A NAME="highlightmovewitharrow"></A><font color="#ff0000">Highlight Move With Arrow</font></B></P>
+
+<P><font color="#ff0000">A big, fat arrow is drawn between the start and target field of the last move, so you cannot possibly miss it.</font></P>
+
+
+
+<P><B><U><A NAME="boardoptions"></A>Board</U></B></P>
+
+
+
+<P><B><A NAME="boardsizecmd"></A>Board Size</B></P>
+
+<P>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 system menu, but you can minimize or close them from the File menu.</P>
+
+<P>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.</P>
+
+<P><font color="#008000">Note that only sizes Bulky, 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 representation.</font></P>
+
+
+
+<P><B><A NAME="boardcolors"></A>Board Colors</B></P>
+
+<P>Lets you change the colors WinBoard is using to draw the board and pieces.</P>
+
+
+
+<P><B><A NAME="allwhite"></A><font color="#008000">All White</font></B></P>
+
+<P><font color="#008000">Uses the representation of the white pieces (a filled-in black outline) also for the black pieces (where you can fill them with another color 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.</font></P>
+
+
+
+<P><B><A NAME="flipblack"></A><font color="#008000">Flip Black</font></B></P>
+
+<P><font color="#008000">Displays the black pieces upside down (or the white pieces in “Flip View”). This is useful in Shogi, when you want to use the traditional Japanese representation of the pieces.</font></P>
+
+
+
+<P><B><font color="#ff0000"><U><A NAME="adjudications"></A>Adjudications</U></font></B></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="pondernextmove"></A>Ponder Next Move,<SUP> <A NAME="showthinking"></A></SUP>Show Thinking, <A NAME="hidethinkingfromhuman"></A>Hide Thinking from Human and <A NAME="periodicupdates"></A>Periodic Updates</B></font></P>
+
+<P><font color="#ff0000">Duplicates of the controls in the “General” option menu.</font></P>
+
+
+
+<P><B><A NAME="adjudicatedrawmoves"></A><font color="#ff0000">Adjudicate Draw Moves</font></B></P>
+
+<P><font color="#ff0000">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 “Two Machines” mode.</font></P>
+
+
+
+<P><B><A NAME="adjudicatelossthreshold"></A><font color="#ff0000">Adjudicate Loss Threshold</font></B></P>
+
+<P><font color="#ff0000">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.</font></P>
+
+
+
+<P><B><A NAME="verifyclaims"></A><font color="#008000">Verify Claims</font></B></P>
+
+<P><font color="#008000">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 “Test Legality” to be on in order to work.</font></P>
+
+
+
+<P><B><A NAME="detectmates"></A><font color="#008000">Detect Mates</font></B></P>
+
+<P><font color="#008000">Let WinBoard detect checkmate and stalemate, even before the engine gets the chance to claim it. Useful with buggy engines, that exit without a claim, or just hang. Needs “Test Legality” to be on in order to work.</font></P>
+
+
+
+<P><B><A NAME="drawifinsufficientmaterial"></A><font color="#008000">Draw If Insufficient Material</font></B></P>
+
+<P><font color="#008000">If this option is on, WinBoard will recognize KBKB positions with equally colored Bishops, KBK, KNK, and KK positions as draws, even before the engine can claim them. Needs “Test Legality” to be on in order to work.</font></P>
+
+
+
+<P><B><A NAME="adjudicatetrivialdraws"></A><font color="#008000">Adjudicate Trivial Draws</font></B></P>
+
+<P><font color="#008000">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 “Test Legality” to be on in order to work.</font></P>
+
+
+
+<P><B><A NAME="n-moverule"></A><font color="#008000">N-Move Rule</font></B></P>
+
+<P><font color="#008000">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 “Verify Claims”), 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.</font></P>
+
+
+
+<P><B><A NAME="n-foldrepetitionrule"></A><font color="#008000">N-Fold Repetition Rule</font></B></P>
+
+<P><font color="#008000">Here you can set the number of repetitions 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 “Verify Claims”) , 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!)</font></P>
+
+
+
+<P><B><font color="#ff0000"><U><A NAME="engine settings"></A>Engine Settings</U></font></B></P>
+
+
+
+<P><B><A NAME="polyglotdirectory"></A><font color="#ff0000">Polyglot Directory</font></B></P>
+
+<P><font color="#ff0000">If WinBoard knows where to find Polyglot, you can install UCI engines as if they were WinBoard engines, and WinBoard will automatically invoke Polyglot as an adapter to run them.</font></P>
+
+
+
+<P><B><A NAME="hashsize"></A><font color="#ff0000">Hash Size, <A NAME="egtbpath"></A>EGTB Path, <A NAME="egtbcachesize"></A>EGTB Cache Size, <A NAME="openingbook"></A>Opening Book, <A NAME="number of cpus"></A>Number of CPUs</B></font></P>
+
+<P><font color="#ff0000">These are options that UCI engines expect to be specified.</font> <font color="#3333ff">WinBoard 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 ‘memory’ command is the sum of the hash and EGTB cache sizes. The specified opening book, when enabled through the ‘Use Book’ 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.</font></P>
+
+
+
+<P><B><U><A NAME="icsoptions"></A>ICS</U></B></P>
+
+
+
+<P><B><A NAME="autocommentcmd"></A>Auto Comment</B></P>
+
+<P>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>say, tell, whisper, </B>and <B>kibitz</B>. Limitation: remarks that you type yourself are not </P>
+
+<P>recognized; WinBoard scans only the output from ICS, not the input you type to it.</P>
+
+
+
+<P><B><A NAME="autobscmd"></A>Auto Observe</B></P>
+
+<P>If Auto Observe is on and you add a player to your <B>gnotify</B> 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>follow <I>player</I></B> instead, and the server will automatically observe all of <B><I>player’s</I></B> games.</P>
+
+
+
+<P><B><A NAME="getmovelistcmd"></A>Get Move List</B></P>
+
+<P>If Get Move List is on, whenever WinBoard<I> </I>receives 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 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> </I>immediately fetches the current move list.</P>
+
+
+
+<P><B><A NAME="locallineediting"></A>Local Line Editing</B></P>
+
+<P>If Local Line Editing is <B>on</B>, 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 (“quote”); 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 (“send”).</P>
+
+<P>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.</P>
+
+<P>If Local Line Editing is <B>off</B>, 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.</P>
+
+<P>In both modes, if WinBoard<I>’s </I>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 <A HREF="14.htm#telnetprogram">telnetProgram</A>.</P>
+
+<P>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 <A HREF="22.htm">LIMITATIONS</A> below.</P>
+
+
+
+<P><B><A NAME="quietplaycmd"></A>Quiet Play</B></P>
+
+<P>If Quiet Play is on, WinBoard will automatically issue an ICS <B>set shout 0</B> command whenever you start a game and a <B>set shout 1</B> command whenever you finish one. Thus you will not be distracted by shouts from other ICS users while playing.</P>
+
+
+
+<P><B><A NAME="premovecmd"></A>Premove</B></P>
+
+<P>Premove allows you to play a move on the board before you have received your opponent’s move.  This move is highlighted on the board using the <A HREF="16.htm#premovehighlightcolor">Premove Highlight</A> color, and is sent to the ICS as soon as your opponent’s move is received. To cancel a premove, either click twice on the piece that was premoved or premove an illegal move.</P>
+
+<P>This group of controls allows you to set the following options: <A HREF="14.htm#premove">premove</A>, <A HREF="14.htm#premovewhite">premoveWhite</A>, <A HREF="14.htm#premovewhitetext">premoveWhiteText</A>, <A HREF="14.htm#premoveblack">premoveBlack</A>, <A HREF="14.htm#premoveblacktext">premoveBlackText</A>.</P>
+
+
+
+<P><B><A NAME="icsalarm"></A>ICS Alarm</B></P>
+
+<P>When <B>icsAlarm</B> is set to True, the <A HREF="16.htm#soundicsalarm">alarm sound</A> is played when your clock counts down to <A HREF="14.htm#icsalarmtime">icsAlarmTime</A> seconds.  For ICS games with time controls that include an increment, the alarm will sound each time the clock counts down to the <A HREF="14.htm#icsalarmtime">icsAlarmTime</A>.</P>
+
+
+
+<P><B><A NAME="icsinteractioncolors"></A>ICS Interaction Colors</B></P>
+
+<P>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 takeback), seek, and normal (all other messages).</P>
+
+
+
+<P><B><A NAME="fonts"></A><U>Fonts</U></B></P>
+
+<P>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 “Revert to Defaults” 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.</P>
+
+
+
+<P><B><A NAME="sounds"></A><U>Sounds</U></B></P>
+
+<P>Lets you change the sounds that WinBoard plays for various events.</P>
+
+
+
+<P><A NAME="movesound"></A>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>set bell 0</B> command to the ICS. Otherwise the ICS will send a bell character 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.</P>
+
+<P>The other sound events correspond directly to the types of messages that the <A HREF="#icsinteractioncolors">ICS Interaction Colors</A> option knows how to colorize.</P>
+
+
+
+<P><B><A NAME="sounds"></A><U>Game List</U></B></P>
+
+<P>Lets you select which information is displayed in the Game List window.</P>
+
+
+
+<P><B><A NAME="communications"></A><U>Communications</U></B></P>
+
+<P>Lets you change the communication port parameters when the <A HREF="14.htm#internetchessservercomport">internetChessServerComPort</A> option is in use.</P>
+
+
+
+<P><B><A NAME="loadgameoptns"></A><U>Load Game</U></B></P>
+
+<P>Lets you change options used while loading games (<A HREF="15.htm#timedelay">timeDelay</A> option).</P>
+
+
+
+<P><B><A NAME="savegameoptns"></A><U>Save Game</U></B></P>
+
+<P>Lets you change options used for saving games (<A HREF="15.htm#autosavegames">autoSaveGames</A>, <A HREF="15.htm#oldsavestyle">oldSaveStyle</A>, and <A HREF="15.htm#savegamefile">saveGameFile</A> options).</P>
+
+
+
+<P><B><A NAME="timecontrolcmd"></A><U>Time Control</U></B></P>
+
+<P>Lets you change the time control to be used in games against a chess engine. Two types of timing are available.</P>
+
+<P>With conventional chess clocks, each player begins with his clock set to the <A HREF="12.htm#timecontrol">timeControl</A> period. When both players have made <A HREF="12.htm#movespersession">movesPerSession</A> 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.</P>
+
+<P>With incremental clocks, each player is given an initial time allotment, and a <A HREF="12.htm#timeincrement">timeIncrement</A> 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.</P>
+
+
+
+<P><B><A NAME="savesettings"></A><U>Save Settings Now</U></B></P>
+
+<P>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 <A HREF="19.htm#settings">Settings</A> for the fine points.</P>
+
+
+
+<P><B><A NAME="savesettingsonexit"></A><U>Save Settings on Exit</U></B></P>
+
+<P>If this option is on, the current settings are automatically saved when WinBoard exits, as with Save Settings Now.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/08.htm b/winboard/help/html/08.htm
new file mode 100644
index 0000000..bcf3b5c
--- /dev/null
+++ b/winboard/help/html/08.htm
@@ -0,0 +1,51 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Help Menu</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="helpmenu"></A><SUP></SUP>Help Menu</B></P>
+
+
+
+<P><B><A NAME="helpcontents"></A>Help Contents</B></P>
+
+<P>Brings up this help file, starting at the Contents page.</P>
+
+
+
+<P><B><A NAME="searchhelp"></A>Help Index</B></P>
+
+<P>Brings up this help file, starting at the Index/Find dialog.</P>
+
+
+
+<P><B><A NAME="helphelp"></A>How to Use Help</B></P>
+
+<P>Brings up the standard help file that explains how to use Windows Help.</P>
+
+
+
+<P><B><A NAME="hint"></A>Hint</B></P>
+
+<P>Displays a move hint from the chess engine.</P>
+
+
+
+<P><B><A NAME="book"></A>Book</B></P>
+
+<P>Displays a list of possible moves from the chess engine’s opening book. 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 engine is out of its book or does not support the book command.</P>
+
+
+
+<P><B><A NAME="aboutwinboard"></A>About WinBoard</B></P>
+
+<P>Displays the WinBoard version number.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/09.htm b/winboard/help/html/09.htm
new file mode 100644
index 0000000..ee390e6
--- /dev/null
+++ b/winboard/help/html/09.htm
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>ICS Interaction Context Menu</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="icsinteractioncontextmenu"></A><SUP></SUP>ICS Interaction Context Menu</B></P>
+
+<P>To see 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>help</B> command on ICS to learn what these commands mean.</P>
+
+<P>You can customize the lower part of this menu (below the Paste option) by setting the <A HREF="16.htm#icsmenu">icsMenu</A> option. The easiest way to accomplish this is to edit your <A HREF="19.htm#settings">settings file</A> with Notepad or another plain text editor. Sorry, there is no graphical user interface for customizing the menu.</P>
+
+
+
+<P><B><A NAME="copyandpaste"></A>Copy and Paste</B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="copy"></A>Copy</B></P>
+
+<P>Copies the current selection to the clipboard.</P>
+
+
+
+<P><B><A NAME="paste"></A>Paste</B></P>
+
+<P>Pastes the clipboard contents to the input box.</P>
+
+
+
+<P><B><A NAME="who"></A>Who</B></P>
+
+<P>Sends the command “who”<B><I> </I></B>to ICS.</P>
+
+
+
+<P><B><A NAME="players"></A>Players</B></P>
+
+<P>Sends the command “players”<B><I> </I></B>to ICS.</P>
+
+
+
+<P><B><A NAME="games"></A>Games</B></P>
+
+<P>Sends the command “games”<B><I> </I></B>to ICS.</P>
+
+
+
+<P><B><A NAME="sought"></A>Sought</B></P>
+
+<P>Sends the command “sought”<B><I> </I></B>to ICS.</P>
+
+
+
+<P><B><A NAME="tell"></A>Tell (name)</B></P>
+
+<P>Inserts “tell <I>name </I>”<B><I> </I></B>into the input box. The string <I>name </I>is the current selection if it is not empty. Otherwise <I>name </I>is the word surrounding the mouse position, where a “word” is a string of letters, digits, or hyphens (-), such as an ICS user handle or game number.</P>
+
+
+
+<P><B><A NAME="message"></A>Message (name)</B></P>
+
+<P>Inserts “message <I>name </I>”<B><I> </I></B>into the input box, where <I>name</I> is as defined above.</P>
+
+
+
+<P><B><A NAME="finger"></A>Finger (name)</B></P>
+
+<P>Sends the command “finger <I>name</I>”<B><I> </I></B>to ICS, where <I>name</I> is as defined above. </P>
+
+
+
+<P><B><A NAME="vars"></A>Vars (name)</B></P>
+
+<P>Sends the command “vars <I>name</I>”<B><I> </I></B>to ICS, where <I>name</I> is as defined above. </P>
+
+
+
+<P><B><A NAME="observe"></A>Observe (name)</B></P>
+
+<P>Sends the command “observe <I>name</I>”<B><I> </I></B>to ICS, where <I>name</I> is as defined above. Here <I>name</I> can be either a user handle or a game number.</P>
+
+
+
+<P><B><A NAME="match"></A>Match (name)</B></P>
+
+<P>Sends the command “match <I>name</I>”<B><I> </I></B>to ICS, where <I>name</I> is as defined above. </P>
+
+
+
+<P><B><A NAME="play"></A>Play (name)</B></P>
+
+<P>Sends the command “play <I>name</I>”<B><I> </I></B>to ICS, where <I>name</I> is as defined above. Here <I>name</I> can be either a user handle or a seek ad number.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/10.htm b/winboard/help/html/10.htm
new file mode 100644
index 0000000..d333d20
--- /dev/null
+++ b/winboard/help/html/10.htm
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Buttons</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="buttons"></A>BUTTONS</B></P>
+
+
+
+<P><B>&lt;&lt;</B></P>
+
+<P>Same as <A HREF="06.htm#backtostart">Back to Start</A>.</P>
+
+
+
+<P><B>&lt;</B></P>
+
+<P>Same as <A HREF="06.htm#backward">Backward</A>.</P>
+
+
+
+<P><B>P</B></P>
+
+<P>Same as <A HREF="04.htm#pause">Pause</A>. The button label changes to <B>C</B> while WinBoard is pausing.</P>
+
+
+
+<P><B>&gt;</B></P>
+
+<P>Same as <A HREF="06.htm#forward">Forward</A>.</P>
+
+
+
+<P><B>&gt;&gt;</B></P>
+
+<P>Same as <A HREF="06.htm#forwardtoend">Forward to End</A>.</P>
+
+<P><font color="#3333ff">Note that using the mouse wheel has the same effect as using the &lt; or &gt; button.</font></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/11.htm b/winboard/help/html/11.htm
new file mode 100644
index 0000000..dcc4d4b
--- /dev/null
+++ b/winboard/help/html/11.htm
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Command Line Options</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="options"></A><SUP></SUP>COMMAND LINE OPTIONS</B></P>
+
+<P>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 <A HREF="19.htm#settings">settings file</A>, 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 <A HREF="07.htm#savesettings">Save Settings Now</A> or <A HREF="07.htm#savesettingsonexit">Save Settings on Exit</A>, so most people will not need to read this section.</P>
+
+<P>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>opt</I>, you can just give its short name preceded by a minus sign or slash (-<I>opt</I> or /<I>opt</I>); to turn one off, prefix the short name by an “x” or an extra minus sign (-x<I>opt</I> or /-<I>opt</I>). 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>opt</I> 23 or /<I>option</I>: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).</P>
+
+<P>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 options <A HREF="12.htm#cp">/cp</A>, <A HREF="14.htm#ics">/ics</A>, or <A HREF="18.htm#ncp">/ncp</A>.  If you give the /cp option, you must also give the <A HREF="12.htm#fcp">/fcp</A> and <A HREF="12.htm#scp">/scp</A> options. If you give the /ics option, you must also give the <A HREF="14.htm#icshost">/icshost</A> option.</P>
+
+<P><A HREF="12.htm">Chess Engine Options</A></P>
+
+<P><A HREF="13.htm">UCI Engine Support                  !NEW!</A></P>
+
+<P><A HREF="14.htm">Internet Chess Server Options</A></P>
+
+<P><A HREF="15.htm">Load and Save Options</A></P>
+
+<P><A HREF="16.htm">User Interface Options</A></P>
+
+<P><A HREF="17.htm">Adjudication Options                   !NEW!</A></P>
+
+<P><A HREF="18.htm">Other Options</A></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/12.htm b/winboard/help/html/12.htm
new file mode 100644
index 0000000..014f013
--- /dev/null
+++ b/winboard/help/html/12.htm
@@ -0,0 +1,221 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Chess Engine Options</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="chessengineoptions"></A>Chess Engine Options</B></P>
+
+
+
+<P><B><A NAME="cp"></A>/cp</B> or<B> /xcp</B>,<B> </B>or<B> <A NAME="chessprogram"></A>/chessProgram <I>true|false</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="tc"></A>/tc </B>or<B> <A NAME="timecontrol"></A>/timeControl <I>minutes[:seconds]</I></B></P>
+
+<P>Each player begins with his clock set to the timeControl period. Default: 5 minutes. The additional options movesPerSession and timeIncrement are mutually exclusive.</P>
+
+
+
+<P><B><A NAME="mps"></A>/mps </B>or<B> <A NAME="movespersession"></A>/movesPerSession <I>moves</I></B></P>
+
+<P>When both players have made movesPerSession moves, a new timeControl period is added to both clocks. Default: 40 moves.</P>
+
+
+
+<P><B><A NAME="inc"></A>/inc </B>or<B> <A NAME="timeincrement"></A>/timeIncrement <I>seconds</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="clock"></A>/clock </B>or <B>/xclock</B>, or<B> <A NAME="clockmode"></A>/clockMode <I>true|false</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="st"></A>/st </B>or<B> <A NAME="searchtime"></A>/searchTime <I>minutes[:seconds]</I></B></P>
+
+<P>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 control. Setting this option also sets clockMode to False.</P>
+
+
+
+<P><B><A NAME="sd"></A>/depth </B>or<B> <A NAME="searchdepth"></A>/searchDepth <I>number</I></B></P>
+
+<P>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 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.</P>
+
+
+
+<P><B><A NAME="firstnps"></A><font color="#008000">/firstNPS <I>number</I></font></B></P>
+
+
+
+<P><B><A NAME="secondnps"></A><font color="#008000">/secondNPS <I>number</I></font></B></P>
+
+<P><font color="#008000">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 <I>number</I>, 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>number</I> 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 WinBoard clock. 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). “Show Thinking” must be on for this option to work. Not many engines might support this yet!</font></P>
+
+
+
+<P><B><A NAME="firsttimeodds"></A><font color="#008000">/firstTimeOdds <I>factor</I></font></B></P>
+
+
+
+<P><B><A NAME="secondtimeodds"></A><font color="#008000">/secondTimeOdds <I>factor</I></font></B></P>
+
+<P><font color="#008000">Reduces the time given to the mentioned engine by the given <I>factor</I>. If pondering is off, the effect is indistinguishable from what would happen if the engine was running on a <I>factor</I> times slower machine.</font></P>
+
+
+
+<P><B><A NAME="timeoddsmode"></A><font color="#008000">/timeOddsMode <I>mode</I></font></B></P>
+
+<P><font color="#008000">This option determines how the case is handled when 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 normalized similarly. If mode=0, both play with reduced time.</font></P>
+
+
+
+<P><B><A NAME="ponder"></A>/ponder</B> or <B>/xponder</B>,<B> </B>or<B> <A NAME="pondernextmove"></A>/ponderNextMove <I>true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#pondernextmovecmd">Ponder Next Move</A> option. Default: True.</P>
+
+
+
+<P><B><A NAME="thinking"></A>/thinking</B> or <B>/xthinking</B>,<B> </B>or<B> <A NAME="showthinking"></A>/showThinking <I>true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#showthinkingcmd">Show Thinking</A> option. Default: False.</P>
+
+
+
+<P><B><A NAME="periodic"></A>/periodic </B>or <B>/xperiodic</B>, or<B> <A NAME="periodicupdates"></A>/periodicUpdates <I>true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#periodicupdatescmd">Periodic Updates</A> option. Default: True.</P>
+
+
+
+<P><B><A NAME="mg"></A>/mg </B>or<B> <A NAME="matchgames"></A>/matchGames <I>n</I></B></P>
+
+<P>Automatically runs an <I><B>n</B>-</I>game match between two chess engines, with alternating colors. If the <A HREF="15.htm#loadgamefile">loadGameFile</A> or <A HREF="15.htm#loadpositionfile">loadPositionFile</A> 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 <A HREF="15.htm#savegamefile">saveGameFile</A> option is set, a move record for the match will be appended to the specified file. If the <A HREF="15.htm#savepositionfile">savePositionFile</A> 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).</P>
+
+
+
+<P><B><A NAME="mm"></A>/mm </B>or <B>/xmm</B>, or<B> <A NAME="matchmode"></A>/matchMode <I>true|false</I></B></P>
+
+<P>Provided for backward compatibility. If true and matchGames=0, sets matchGames=1.</P>
+
+
+
+<P><B><A NAME="matchpause"></A><font color="#008000">/matchPause <I>number</I></font></B></P>
+
+<P><font color="#008000">Sets the length of the pause between games in match mode to <I>number</I> msec. Default value is 10000, i.e. 10 sec. (If this pause is too short, engines not implementing ‘ping’ 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.)</font></P>
+
+
+
+<P><B><A NAME="fd"></A>/fd </B>or<B> <A NAME="firstdirectory"></A>/firstDirectory <I>dir<BR>
+</I><A NAME="sd"></A>/sd </B>or<B> <A NAME="seconddirectory"></A>/secondDirectory <I>dir</I><SUP> </SUP><BR>
+<A NAME="fcp"></A>/fcp </B>or<B> <A NAME="firstchessprogram"></A>/firstChessProgram <I>command<BR>
+</I><A NAME="scp"></A>/scp </B>or<B> <A NAME="secondchessprogram"></A>/secondChessProgram <I>command</I><SUP> </SUP></B></P>
+
+<P>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.</P>
+
+<P>The <I>dir</I> 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>dir</I> is not an absolute pathname, it is interpreted relative to the directory from which WinBoard.exe itself was loaded. The <I>dir</I> argument is ignored if the chess engine is being run on a remote machine (see firstHost and secondHost below). The default value for <I>dir </I>"", meaning that the chess engine is expected to be installed in the same directory as WinBoard.</P>
+
+<P>The <I>command</I> 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>command</I> 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>command, </I>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, <CODE>QChess1.5.exe</CODE>), you must include the "<CODE>.exe</CODE>" extension; otherwise you can leave it out. The default value for <I>command</I> is "", which brings up the startup dialog to ask which engines you want.</P>
+
+<P>Examples:</P>
+
+<PRE><CODE>WinBoard /cp /fd="C:\Program Files\Crafty" /fcp=WCrafty-15.12.exe /scp=GNUChess
+WinBoard /cp /fd="C:\Miracle Games" /fcp='"Miracle Chess.exe" /wow' /scp=GNUChess</CODE></PRE>
+
+<P><font color="#008000">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 be 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 options 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 tournament, options hidden inside the engine command-line can contain ‘%s’ which will be replaced at the time the option is used by ‘first’ or ‘second’, as applicable.</font></P>
+
+<P><font color="#008000">Examples:</font></P>
+
+<font color="#008000"><PRE><CODE>WinBoard /cp /fd="C:\Engines\Crafty" /fcp=”WCrafty-15.12 WBopt /%sTimeOdds=2” /scp=GNUChess</CODE></PRE></font>
+
+<P><font color="#008000">Meaning that Crafty will have to play with half the time GNUChess will get.</font></P>
+
+<PRE></PRE>
+
+
+
+<P><B><A NAME="fh"></A>/fh </B>or<B> <A NAME="firsthost"></A>/firstHost <I>host<BR>
+</I><A NAME="sh"></A>/sh </B>or<B> <A NAME="secondhost"></A>/secondHost <I>host</I></B></P>
+
+<P>Hosts on which the chess engines are to run. The default for each is "localhost". If you specify another host, WinBoard<I> </I>uses <A HREF="18.htm#rsh">rsh</A> 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 include a "cd" command in the argument to /fcp or /scp.</P>
+
+
+
+<P><B><A NAME="initstring"></A>/firstInitString </B>or <B>/initString <I>string<BR>
+</I><A NAME="secondinitstring"></A>/secondInitString <I>string</I></B></P>
+
+<P>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 <A HREF="19.htm#settings">settings file</A>, and WinBoard will convert it to a newline.</P>
+
+<P>All chess engines require the "new" command to start a new game.</P>
+
+<P>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 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 documentation (gnuchess.txt) for details. Crafty ignores the "random" command; see its documentation for the commands it accepts.</P>
+
+
+
+<P><B><A NAME="initstring"></A>/firstComputerString <I>string<BR>
+</I><A NAME="secondinitstring"></A>/secondComputerString <I>string</I></B></P>
+
+<P>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 "".</P>
+
+<P><font color="#008000">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.</font></P>
+
+
+
+<P><B><A NAME="fb"></A>/fb </B>or <B>/xfb</B>, or<B> <A NAME="firstplaysblack"></A>/firstPlaysBlack <I>true|false</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="reuse"></A>/reuse<SUP> </SUP></B>or <B>/xreuse</B>, or <B><A NAME="reusefirst"></A>/reuseFirst<I> true|false<BR>
+</I><A NAME="reuse2"></A>/reuse2<SUP> </SUP></B>or <B>/xreuse2</B>, or <B><A NAME="reusesecond"></A>/reuseSecond<I> true|false</I></B></P>
+
+<P>If this option is True (the default), WinBoard<I> </I>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 properly when reused, such as versions of Crafty earlier than 12.0.</P>
+
+
+
+<P><B><A NAME="firstprotocolversion"></A>/firstProtocolVersion <I>ver<BR>
+</I><A NAME="secondprotocolversion"></A>/secondProtocolVersion <I>ver</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="firstscoreabs"></A><font color="#ff0000">/firstScoreAbs<I> true|false<BR>
+</I></font><A NAME="secondscoreabs"></A><font color="#ff0000">/secondScoreAbs<I> true|false</I></font></B></P>
+
+<P><font color="#ff0000">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-line, see under /fcp.</font></P>
+
+
+
+<P><B><A NAME="niceengines"></A><font color="#3333ff">/niceEngines<I> priority</I></font></B></P>
+
+<P><font color="#3333ff">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.</font></P>
+
+
+
+<P><B><A NAME="firstoptions"></A><font color="#3333ff">/firstOptions<I> string</font><BR>
+</I><A NAME="secondoptions"></A><font color="#3333ff">/secondOptions<I> string</I></font></B></P>
+
+<P><font color="#3333ff">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.</font></P>
+
+
+
+<P><B><A NAME="firstneedsnoncompliantfen"></A><font color="#3333ff">/firstNeedsNoncompliantFEN<I> string</font><BR>
+</I><A NAME="secondneedsnoncompliantfen"></A><font color="#3333ff">/secondNeedsNoncompliantFEN<I> string</I></font></B></P>
+
+<P><font color="#3333ff">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).</font></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/13.htm b/winboard/help/html/13.htm
new file mode 100644
index 0000000..eb1471f
--- /dev/null
+++ b/winboard/help/html/13.htm
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>UCI Engine Support</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="ucienginesupport"></A><font color="#ff0000">UCI Engine Support</font></B></P>
+
+
+
+<P><B><A NAME="fuci"></A><font color="#ff0000">/fUCI </B>or<B> <A NAME="firstisuci"></A>/firstIsUCI<I> true|false</I></font></B></P>
+
+
+
+<P><B><font color="#ff0000"><A NAME="suci"></A>/sUCI </B>or<B> <A NAME="secondisuci"></A>/secondIsUCI<I> true|false</I></B></font></P>
+
+<P><font color="#ff0000">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. WinBoard will then pass the other UCI options and engine name to Polyglot through a .ini temporary file ceated for the purpose.</font></P>
+
+
+
+<P><B><A NAME="polyglotdir"></A><font color="#ff0000">/PolyglotDir <I>filename</I></font></B></P>
+
+<P><font color="#ff0000">Gives the name of the folder in which Polyglot is installed.</font></P>
+
+
+
+<P><B><A NAME="usepolyglotbook"></A><font color="#ff0000">/usePolyglotBook <I>true|false</I></font></B></P>
+
+<P><font color="#ff0000">Specifies if the Polygot book should be used.</font></P>
+
+
+
+<P><B><A NAME="polyglotbook"></A><font color="#ff0000">/PolyglotBook <I>filename</I></font></B></P>
+
+<P><font color="#ff0000">Gives the filename of the opening book that Polyglot should use.</font></P>
+
+
+
+<P><B><A NAME="fnoownbookuci"></A><font color="#ff0000">/fNoOwnBookUCI </B>or<B> <A NAME="firstxbook"></A>/firstXBook </B>or<B> <A NAME="firsthasownbookuci"></A>/firstHasOwnBookUCI<I> true|false</I></font></B></P>
+
+
+
+<P><B><A NAME="snoownbookuci"></A><font color="#ff0000">/sNoOwnBookUCI </B>or<B> <A NAME="secondxbook"></A>/secondXBook </B>or<B> <A NAME="secondhasownbookuci"></A>/secondHasOwnBookUCI<I> true|false</I></B></font></P>
+
+<P><font color="#ff0000">Indicates if the mentioned engine lacks an opening book or not.</font> <font color="#3333ff">Engines that have an own opening book will not use the GUI book (as given by /polyglotBook) even if /usePolyglotBook is set to true.</font></P>
+
+
+
+<P><B><A NAME="defaulthashsize"></A><font color="#ff0000">/defaultHashSize <I>number</I></font></B></P>
+
+<P><font color="#ff0000">Sets the size of the hash table to <I>number</I> MegaBytes.</font></P>
+
+
+
+<P><B><A NAME="defaultcachesizeegtb"></A><font color="#ff0000">/defaultCacheSizeEGTB <I>number</I></font></B></P>
+
+<P><font color="#ff0000">Sets the size of the EGTB cache to <I>number</I> MegaBytes.</font></P>
+
+
+
+<P><B><A NAME="defaultpathegtb"></A><font color="#ff0000">/defaultPathEGTB <I>filename</I></font></B></P>
+
+<P><font color="#ff0000">Gives the name of the folder where the end-game tablebases are installed.</font></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/14.htm b/winboard/help/html/14.htm
new file mode 100644
index 0000000..5801ca8
--- /dev/null
+++ b/winboard/help/html/14.htm
@@ -0,0 +1,167 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Internet Chess Server Options</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="internetchessserveroptions"></A>Internet Chess Server Options</B></P>
+
+
+
+<P><B><A NAME="ics"></A>/ics </B>or <B>/xics</B>, or<B> <A NAME="internetchessservermode"></A>/internetChessServerMode<I> true|false</I></B></P>
+
+<P>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 <A HREF="04.htm#icsclient">ICS Client</A> Default: False.</P>
+
+<P>You can create a script file containing ICS commands that WinBoard will type in for you whenever you connect to the ICS. See <A HREF="#icslogon">ICS Logon</A>.</P>
+
+
+
+<P><B><A NAME="icshost"></A>/icshost </B>or<B> <A NAME="internetchessserverhost"></A>/internetChessServerHost <I>hostname</I></B></P>
+
+<P>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-addresses.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.</P>
+
+
+
+<P><B><A NAME="icsport"></A>/icsport </B>or<B> <A NAME="internetchessserverport"></A>/internetChessServerPort <I>portnumber</I></B></P>
+
+<P>The port number to use when connecting to a chess server in ICS mode. Default: 5000.</P>
+
+
+
+<P><B><A NAME="via"></A>/icshelper <I>program</I></B></P>
+
+
+
+<P>An external helper program used to communicate with the chess server. Typically <I>timestamp</I> for the ICC (chessclub.com) or <I>timeseal</I> for FICS (freechess.org, eics.daimi.aau.dk, etc.). This option is shorthand for “/useTelnet /telnetProgram <I>program</I>”<B>.</B></P>
+
+
+
+<P><B><A NAME="telnet"></A>/telnet</B> or <B>/xtelnet</B>,<B> </B>or<B> <A NAME="usetelnet"></A>/useTelnet<I> true|false</I></B></P>
+
+<P>This option is poorly named; it should be called <B>/useHelper</B>. 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.</P>
+
+
+
+<P><B><A NAME="gateway"></A>/gateway <I>hostname</I></B></P>
+
+<P>If this option is set to a host name, WinBoard uses <A HREF="18.htm#rsh">rsh</A> 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 <A HREF="21.htm">FIREWALLS</A> section below for an explanation of when this option is useful.</P>
+
+
+
+<P><B><A NAME="telnetprogram"></A>/telnetProgram <I>program</I></B></P>
+
+<P>This option is poorly named; it should be called <B>/helperProgram</B>. 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 internetChessServer as the first argument and the value of internetChessServerPort as the second argument on its command line.</P>
+
+
+
+<P><B><A NAME="icscom"></A>/icscom </B>or<B> <A NAME="internetchessservercomport"></A>/internetChessServerComPort <I>name</I></B></P>
+
+<P>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 Internet access through another machine by dialing in using a modem or by connecting directly to a serial terminal port. Example:</P>
+
+<PRE><CODE>WinBoard /ics /icscom:com1</CODE></PRE>
+
+<P>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 <A HREF="07.htm#locallineediting">Local Line Editing</A> 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 <A HREF="22.htm">LIMITATIONS</A> section below about extra echoes.</P>
+
+
+
+<P><B><A NAME="comportsettings"></A>/comPortSettings</B> <B><I>“dataRate,dataBits,parity,stopBits,flow”</I></B></P>
+
+<P>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 <A HREF="07.htm#communications">Communications</A> dialog.</P>
+
+
+
+<P><B><A NAME="icslogon"></A>/icslogon </B>or<B> <A NAME="internetchessserverlogonscript"></A>/internetChessServerLogonScript <I>filename</I></B></P>
+
+<P>This option lets you change the name used for the <A HREF="#icslogon">ICS Logon</A> file. Default: "ICS.ini". The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe).</P>
+
+
+
+<P><B><A NAME="autocomm"></A>/autocomm </B>or <B>/xautocomm</B>, or<B> <A NAME="autocomment"></A>/autoComment<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#autocommentcmd">Auto Comment</A> option. Default: False.</P>
+
+
+
+<P><B><A NAME="autoflag"></A>/autoflag</B> or <B>/xautoflag</B>,<B> </B>or<B> <A NAME="autocallflag"></A>/autoCallFlag<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="#autoflag">Auto Flag</A> option. Default: False.</P>
+
+
+
+<P><B><A NAME="autobs"></A>/autobs</B> or <B>/xautobs</B>,<B> </B>or<B> <A NAME="autoobservecmd"></A>/autoObserve<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="#autoobservecmd">Auto Observe</A> option. Default: False.</P>
+
+
+
+<P><B><A NAME="autokibitz"></A><font color="#008000">/autoKibitz</font></B></P>
+
+<P><font color="#008000">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.</font> <font color="#3333ff">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.</font></P>
+
+
+
+<P><B><A NAME="moves"></A>/moves</B> or <B>/xmoves</B>,<B> </B>or<B> <A NAME="getmovelist"></A>/getMoveList<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#getmovelistcmd">Get Move List</A> option. Default: True.</P>
+
+
+
+<P><B><A NAME="edit"></A>/edit<SUP> </SUP></B> or <B>/xedit</B>,<B> </B>or<B> <A NAME="locallineeditingoption"></A>/localLineEditing<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#locallineediting">Local Line Editing</A> option. Default: True.</P>
+
+
+
+<P><B><A NAME="quiet"></A>/quiet </B>or <B>/xquiet</B>, or<B> <A NAME="quietplay"></A>/quietPlay<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#quietplaycmd">Quiet Play</A> option. Default: False</P>
+
+
+
+<P><B><A NAME="opt_blindfold"></A>/blindfold <I>true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#blindfoldcmd">Blindfold</A> option. Default: False</P>
+
+
+
+<P><B><A NAME="pre"></A>/pre </B>or<B> <A NAME="xpre"></A>/xpre</B>, or<B> <A NAME="premove"></A>/premove<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#premovecmd">Premove</A> option. If set to True, the premove feature is enabled. If set to False, premove is disabled and the other <A HREF="07.htm#premovecmd">Premove</A> settings are ignored. Default: False.</P>
+
+
+
+<P><B><A NAME="prewhite"></A>/prewhite </B>or<B> <A NAME="xprewhite"></A>/xprewhite</B>, or <B><A NAME="premovewhite"></A>/premoveWhite<I> true|false</I></B></P>
+
+
+
+<P><B><A NAME="premovewhitetext"></A>/premoveWhiteText<I> movetext</I></B></P>
+
+<P>If <B>premoveWhite</B> is set to True and you are playing white in an ICS game, the text specified by the <B>premoveWhiteText</B> option is sent to the ICS as soon as the game starts.  These options can be set from the <A HREF="07.htm#premovecmd">Premove</A> section of the <A HREF="07.htm#icsoptions">ICS Options</A> dialog box. The default for <B>premoveWhite</B> is False.</P>
+
+
+
+<P><B><A NAME="preblack"></A>/preblack </B>or<B> <A NAME="xpreblack"></A>/xpreblack</B>, or <B><A NAME="premoveblack"></A>/premoveBlack<I> true|false</I></B></P>
+
+
+
+<P><B><A NAME="premoveblacktext"></A>/premoveBlackText<I> movetext</I></B></P>
+
+<P>If <B>premoveBlack</B> is set to True and you are playing black in an ICS game, the text specified by the <B>premoveBlackText</B> 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 <A HREF="07.htm#premovecmd">Premove</A> section of the <A HREF="07.htm#icsoptions">ICS Options</A> dialog box. The default for <B>premoveBlack</B> is False.</P>
+
+
+
+<P><B><A NAME="alarm"></A>/alarm </B>or<B> <A NAME="xalarm"></A>/xalarm</B>, or <B><A NAME="icsalarm"></A>/icsAlarm <I>true|false</I></B></P>
+
+
+
+<P><B><A NAME="icsalarmtime"></A>/icsAlarmTime <I>milliseconds</I></B></P>
+
+<P>When <B>icsAlarm</B> is set to True, the <A HREF="16.htm#soundicsalarm">alarm sound</A> is played when your clock counts down to <B>icsAlarmTime</B> 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</B>.  The <B>icsAlarmTime</B> can be set by selecting <A HREF="07.htm#icsalarm">ICS Alarm</A> from the <A HREF="07.htm#icsoptions">ICS options</A> dialog. The default is 5 seconds.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/15.htm b/winboard/help/html/15.htm
new file mode 100644
index 0000000..cf9a52b
--- /dev/null
+++ b/winboard/help/html/15.htm
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Load and Save Options</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="loadandsaveoptions"></A>Load and Save Options</B></P>
+
+
+
+<P><B><A NAME="lgf"></A>/lgf </B>or<B> <A NAME="loadgamefile"></A>/loadGameFile <I>filename</I><BR>
+<A NAME="lgi"></A>/lgi </B>or<B> <A NAME="loadgameindex"></A>/loadGameIndex <I>N</I></B></P>
+
+<P>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 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 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>N, </I>the menu is suppressed and the <I>N</I>th game found in the file is loaded immediately.</P>
+
+
+
+<P><B><A NAME="td"></A>/td </B>or<B> <A NAME="timedelay"></A>/timeDelay <I>seconds</I></B></P>
+
+<P>Time delay between moves during <A HREF="03.htm#loadgame">Load Game</A>. 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.</P>
+
+
+
+<P><B><A NAME="sgf"></A>/sgf </B>or<B> <A NAME="savegamefile"></A>/saveGameFile <I>filename</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="autosave"></A>/autosave</B> or <B>/xautosave</B>,<B> </B>or<B> <A NAME="autosavegames"></A>/autoSaveGames<I> true|false</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="lpf"></A>/lpf </B>or<B> <A NAME="loadpositionfile"></A>/loadPositionFile <I>filename</I><BR>
+<A NAME="lpi"></A>/lpi </B>or<B> <A NAME="loadpositionindex"></A>/loadPositionIndex <I>N</I></B></P>
+
+<P>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>N</I>, the <I>N</I>th position found in the file is loaded; otherwise the first is loaded.</P>
+
+
+
+<P><B><A NAME="spf"></A>/spf </B>or<B> <A NAME="savepositionfile"></A>/savePositionFile <I>filename</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="pgnextendedinfo"></A><font color="#ff0000">/pgnExtendedInfo <I>true|false</I></font></B></P>
+
+<P><font color="#ff0000">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.</font></P>
+
+
+
+<P><B><A NAME="pgneventheader"></A><font color="#ff0000">/pgnEventHeader <I>string</I></font></B></P>
+
+<P><font color="#ff0000">Sets the name used in the PGN event tag to <I>string</I>.</font></P>
+
+
+
+<P><B><A NAME="saveoutofbookinfo"></A><font color="#ff0000">/saveOutOfBookInfo <I>true|false</I></font></B></P>
+
+<P><font color="#ff0000">Include the information on how the engine(s) game out of its opening book in a special ‘annotator’ tag with the PGN file.</font></P>
+
+
+
+<P><B><A NAME="oldsave"></A>/oldsave </B>or <B>/xoldsave</B>, or<B> <A NAME="oldsavestyle"></A>/oldSaveStyle<I> true|false</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="debug"></A>/debug</B> or <B>/xdebug</B>,<B> </B>or<B> <A NAME="debugmode"></A>/debugMode<I> true|false</I></B></P>
+
+<P>Writes debugging information to the file “WinBoard.debug”, 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.</P>
+
+
+
+<P><B><A NAME="debugfile"></A><font color="#ff0000">/debugFile<SUP> </SUP> <I>filename</I> </B>or<B> <A NAME="nameofdebugfile"></A>/nameOfDebugFile<I> filename</I></B></font></P>
+
+<P><font color="#ff0000">Sets the name of the file to which WinBoard saves debug information (including all communication to and from the engines).</font></P>
+
+
+
+<P><B><A NAME="enginedebugoutput"></A><font color="#008000">/engineDebugOutput<SUP> </SUP> <I>number</I></font></B></P>
+
+<P><font color="#008000">Specifies how WinBoard should handle unsollicited output from the engine, with respect to saving it in the debug file. The output is further (hopefully) ignored. If <I>number</I>=0, WinBoard refrains from writing such spurious output to the debug file. If<I> number</I>=1, all engine output is written faithfully to the debug file. If <I> number</I>=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.</font></P>
+
+<P><font color="#008000">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.</font></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/16.htm b/winboard/help/html/16.htm
new file mode 100644
index 0000000..47bd778
--- /dev/null
+++ b/winboard/help/html/16.htm
@@ -0,0 +1,493 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>User Interface Options</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="userinterfaceoptions"></A>User Interface Options</B></P>
+
+
+
+<P><B><A NAME="firstlogo"></A><font color="#3333ff">/firstLogo <I>filename</I></font></B></P>
+
+
+
+<P><B><A NAME="secondlogo"></A><font color="#3333ff">/secondLogo <I>filename</I></font></B></P>
+
+<P><font color="#3333ff">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 ‘swap clocks’ is in effect. The <I>filename</I> 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.)</font></P>
+
+
+
+<P><B><A NAME="autologo"></A><font color="#3333ff">/autoLogo<I> true|false</I></font></B></P>
+
+<P><font color="#3333ff">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 directory (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. In this mode it will also look in a sub-folder of its installation folder called “logos”, for finding logos with names corresponding to the ICS (e.g. “chessclub.com.bmp”) or to the human user, should they be involved in a game.</font></P>
+
+
+
+<P><B><A NAME="hidethinkingfromhuman"></A><font color="#ff0000">/hideThinkingFromHuman<I> true|false</I></font></B></P>
+
+<P><font color="#ff0000">Prevents the engine thinking output to appear in the display, without necessitating to suppress the sending of this information altogether (so it can still appear in the PGN).</font></P>
+
+
+
+<P><B><A NAME="nogui"></A><font color="#3333ff">/noGUI</font></B></P>
+
+<P><font color="#3333ff">Suppresses all GUI functions of WinBoard (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.</font></P>
+
+
+
+<P><B><A NAME="top"></A>/top </B>or <B>/xtop</B>, or<B> <A NAME="alwaysontopopt"></A>/alwaysOnTop<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#alwaysontop">Always On Top</A> option. Default: False.</P>
+
+
+
+<P><B><A NAME="queen"></A>/queen</B> or <B>/xqueen</B>,<B> </B>or<B> <A NAME="alwayspromotetoqueen"></A>/alwaysPromoteToQueen<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#alwaysqueen">Always Queen</A> option. Default: False.</P>
+
+
+
+<P><B><A NAME="drag"></A>/drag</B> or <B>/xdrag</B>,<B> </B>or<B> <A NAME="animatedraggingopt"></A>/animateDragging<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#animatedragging">Animate Dragging</A> option. Default: True.</P>
+
+
+
+<P><B><A NAME="animate"></A>/animate </B>or <B>/xanimate</B>, or<B> <A NAME="animatemovingopt"></A>/animateMoving<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#animatemoving">Animate Moving</A> option. Default: True.</P>
+
+
+
+<P><B><A NAME="flip"></A>/flip </B>or <B>/xflip</B>, or<B> <A NAME="flipviewoption"></A>/flipView<I> true|false</I></B></P>
+
+<P>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 <A HREF="07.htm#flipview">Flip View</A> menu command can be used to flip the board after the game starts</P>
+
+
+
+<P><B><A NAME="autoflip"></A>/autoflip</B> or <B>/xautoflip</B>, or <A NAME="autoflipviewoption"></A><B>/autoFlipView <I>true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#autoflipview">Auto Flip View</A> option. Default: True.</P>
+
+
+
+<P><B><A NAME="autoraise"></A>/autoraise</B> or <B>/xautoraise</B>, or <A NAME="autoraiseboardoption"></A><B>/autoRaiseBoard <I>true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#autoflipview">Auto Raise Board</A> option. Default: True.</P>
+
+
+
+<P><B><A NAME="highdrag"></A>/highdrag </B>or <B>/xhighdrag</B>, or<B> <A NAME="highlightdraggingopt"></A>/highlightDragging <I>true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#highlightdragging">Highlight Dragging</A> option. Default: False.</P>
+
+
+
+<P><B><A NAME="highlight"></A>/highlight </B>or <B>/xhighlight</B>, or<B> <A NAME="highlightlastmoveopt"></A>/highlightLastMove<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="#highlightlastmoveopt">Highlight Last Move</A> option. Default: False.</P>
+
+
+
+<P><B><A NAME="popup"></A>/exit</B> or <B>/xexit</B>,<B> </B>or<B> <A NAME="popupmoveerrorsopt"></A>/popupExitMessage<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#popupexitmessagecmd">Popup Exit Message</A> menu option. Default: False.</P>
+
+
+
+<P><B><A NAME="popup"></A>/popup</B> or <B>/xpopup</B>,<B> </B>or<B> <A NAME="popupmoveerrorsopt"></A>/popupMoveErrors<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#popupmoveerrorscmd">Popup Move Errors</A> menu option. Default: False.</P>
+
+
+
+<P><B><A NAME="coords"></A>/coords </B>or <B>/xcoords</B>, or<B> <A NAME="showcoords"></A>/showCoords<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="#showcoords">Show Coords</A> option. Default: False.</P>
+
+
+
+<P><B><A NAME="legal"></A>/legal </B>or <B>/xlegal</B>, or<B> <A NAME="testlegality"></A>/testLegality<I> true|false</I></B></P>
+
+<P>Sets the <A HREF="07.htm#testlegalitycmd">Test Legality</A> option. Default: True.</P>
+
+
+
+<P><B><A NAME="size"></A>/size </B>or<B> <A NAME="boardsize"></A>/boardSize <I>sizename</I></B></P>
+
+<P>Sets the <A HREF="07.htm#boardsizecmd">Board Size</A> option. Also chooses which board size any following Font options will affect. The default is the largest size that will fit on your screen.</P>
+
+
+
+<P><B><A NAME="wpc"></A>/wpc</B> or <B><A NAME="whitepiececolor"></A>/whitePieceColor <I>color<BR>
+</I><A NAME="bpc"></A>/bpc </B>or <B><A NAME="blackpiececolor"></A>/blackPieceColor <I>color<BR>
+</I><A NAME="lsc"></A>/lsc </B>or<B><I> </I><A NAME="lightsquarecolor"></A>/lightSquareColor <I>color</I><SUP> </SUP><BR>
+<A NAME="dsc"></A>/dsc </B>or<B> <A NAME="darksquarecolor"></A>/darkSquareColor <I>color</I><SUP> </SUP></B></P>
+
+<P>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>#rrggbb</I>) or in decimal (as <I>rrr,ggg,bbb</I>). 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 <A HREF="07.htm#boardcolors">Board Colors</A> section of the <A HREF="07.htm#boardoptions">Board Options</A> dialog.</P>
+
+
+
+<P>If you are using a <A NAME="grayscale"></A>grayscale monitor, try setting the colors to:</P>
+
+<PRE><CODE>-whitePieceColor:#FFFFFF
+-blackPieceColor:#000000
+-lightSquareColor:#CCCCCC
+-darkSquareColor:#999999</CODE></PRE>
+
+
+
+<P><B><A NAME="hsc"></A>/hsc </B>or<B> <A NAME="highlightsquarecolor"></A>/highlightSquareColor <I>color</I><SUP> </SUP><BR>
+<A NAME="phc"></A>/phc </B>or <B><A NAME="premovehighlightcolor"></A>/premoveHighlightColor <I>color</I><SUP> </SUP></B></P>
+
+<P>Color specifications for the <A HREF="07.htm#highlightlastmove">Highlight Last Move</A> and <A HREF="07.htm#premovecmd">Premove</A> options, respectively. Colors can be specified only by red/green/blue intensity, either in hexadecimal (as <I>#rrggbb</I>) or in decimal (as <I>rrr,ggg,bbb</I>). 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.</P>
+
+
+
+<P><B><A NAME="mono"></A>/mono</B> or <B>/xmono</B>,<B> </B>or<B> <A NAME="monomode"></A>/monoMode<I> true|false</I></B></P>
+
+<P>Determines whether WinBoard displays its pieces and squares in black and white (True) or color (False, the default). Available in the <A HREF="07.htm#boardcolors">Board Colors</A> section of the <A HREF="07.htm#boardoptions">Board Options</A> dialog.</P>
+
+
+
+<P><B><A NAME="flipblack"></A><font color="#008000">/flipBlack<I> true|false</I></font></B></P>
+
+<P><font color="#008000">Determines whether 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.</font></P>
+
+
+
+<P><B><A NAME="allwhite"></A><font color="#008000">/allWhite<I> true|false</I></font></B></P>
+
+<P><font color="#008000">Determines whether the white piece 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.</font></P>
+
+
+
+<P><B><A NAME="renderpieceswithfont"></A><font color="#ff0000">/renderPiecesWithFont <I>fontname</I></font></B></P>
+
+<P><font color="#ff0000">Uses the named true-type font 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.</font></P>
+
+
+
+<P><B><A NAME="fontpiecetochartable"></A><font color="#ff0000">/fontPieceToCharTable <I>characterstring</I></font></B></P>
+
+<P><font color="#ff0000">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.</font></P>
+
+
+
+<P><B><A NAME="fontpiecesize"></A><font color="#ff0000">/fontPieceSize <I>number</I></font></B></P>
+
+<P><font color="#ff0000">The number gives the size of the piece, as a percentage of the square size.</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="fontpiecebackcolorwhite"></A>/fontPieceBackColorWhite <I>color<BR>
+</I><A NAME="fontpieceforecolorwhite"></A>/fontPieceForeColorWhite <I>color<BR>
+</I><A NAME="fontpiecebackcolorblack"></A>/fontPieceBackColorBlack <I>color<BR>
+</I><A NAME="fontpieceforecolorblack"></A>/fontPieceForeColorBlack <I>color</I><SUP> </SUP></B></font></P>
+
+<P><font color="#ff0000">Color specifications for white pieces, black pieces that are generated with font-based rendering.</font></P>
+
+
+
+<P><B><A NAME="litebacktexturefile"></A><font color="#ff0000">/liteBackTextureFile <I>filename</I></font></B></P>
+
+
+
+<P><B><A NAME="darkbacktexturefile"></A><font color="#ff0000">/darkBackTextureFile <I>filename</I></font></B></P>
+
+<P><font color="#ff0000">The filename indicates a bitmap file that should be used to display the light or dark squares, allowing you to make boards that look like wood, marble, etc. A filename starting with * is ignored.</font></P>
+
+
+
+<P><B><A NAME="litebacktexturemode"></A><font color="#ff0000">/liteBackTextureMode <I>number</I></font></B></P>
+
+
+
+<P><B><A NAME="darkbacktexturemode"></A><font color="#ff0000">/darkBackTextureMode <I>number</I></font></B></P>
+
+<P><font color="#ff0000">The number indicates the way the files given in the background-texture options should be used to fill in the squares. 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.</font><BR>
+</P>
+
+
+
+<P><B><A NAME="overidelinegap"></A><font color="#ff0000">/overideLineGap <I>number</I></font></B></P>
+
+<P><font color="#ff0000">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.</font></P>
+
+
+
+<P><B><A NAME="highlightmoveswitharrow"></A><font color="#ff0000">/highlightMovesWithArrow <I>true|false</I></font></B></P>
+
+<P><font color="#ff0000">If this option is true, a big, fat arrow is drawn to indicate the last move.</font></P>
+
+
+
+<P><B><A NAME="highlightarrowcolor"></A><font color="#ff0000">/highlightArrowColor <I>color</I></font></B></P>
+
+<P><font color="#ff0000">Specifies the color of the arrow that highlights the moves.</font></P>
+
+
+
+<P><B><A NAME="evalhistocolorwhite"></A><font color="#ff0000">/evalHistoColorWhite <I>color</I></font></B></P>
+
+
+
+<P><B><A NAME="evalhistocolorblack"></A><font color="#ff0000">/evalHistoColorBlack <I>color</I></font></B></P>
+
+<P><font color="#ff0000">Specifies the colors to be used to plot the white and black scores in the evaluation graph.</font><BR>
+</P>
+
+
+
+<P><B><A NAME="colorshout"></A>/colorShout<I> “effects color”<BR>
+</I><A NAME="colorsshout"></A>/colorSShout <I>“effects color”<BR>
+</I><A NAME="colorchannel1"></A>/colorChannel1 <I>“effects color”</I><BR>
+<A NAME="colorchannel"></A>/colorChannel <I>“effects color”</I><BR>
+<A NAME="colorkibitz"></A>/colorKibitz <I>“effects color”</I><BR>
+<A NAME="colortell"></A>/colorTell <I>“effects color”</I><BR>
+<A NAME="colorchallenge"></A>/colorChallenge <I>“effects color”</I><BR>
+<A NAME="colorrequest"></A>/colorRequest <I>“effects color”</I><BR>
+<A NAME="colorseek"></A>/colorSeek <I>“effects color”</I><BR>
+<A NAME="colornormal"></A>/colorNormal <I>“effects color”</I></B></P>
+
+<P>Select colors and effects to colorize messages in the ICS Interaction window. The effects may be any combination of <B>b</B>old, <B>i</B>talic, <B>u</B>nderline, and <B>s</B>trikeout. Colors are specified as for squares and pieces. Available on the <A HREF="07.htm#icsinteractioncolors">ICS Interaction Colors</A> section of the <A HREF="07.htm#icsoptions">ICS Options</A> 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.</P>
+
+
+
+<P><B><A NAME="colorbackground"></A>/colorBackground <I>color</I></B></P>
+
+<P>Sets the background color for the ICS Interaction window. Available on the <A HREF="07.htm#icsinteractioncolors">ICS Interaction Colors</A> section of the <A HREF="07.htm#icsoptions">ICS Options</A> dialog.</P>
+
+
+
+<P><B><A NAME="colorize"></A>/colorize<SUP> </SUP></B>or <B>/xcolorize</B>, or<B> <A NAME="colorizemessages"></A>/colorizeMessages<I> true|false</I></B></P>
+
+<P>If True, WinBoard colorizes messages in the ICS Interaction window with the colors listed above. Default: True. Available in the <A HREF="07.htm#icsinteractioncolors">ICS Interaction Colors</A> section of the <A HREF="07.htm#icsoptions">ICS Options</A> dialog.</P>
+
+
+
+<P><B><A NAME="clockfont"></A>/clockFont “<I>fontname:size effects</I>”<BR>
+<A NAME="messagefont"></A>/messageFont “<I>fontname:size effects</I>”<BR>
+<A NAME="coordfont"></A>/coordFont “<I>fontname:size effects</I>”<BR>
+<A NAME="tagsfont"></A>/tagsFont “<I>fontname:size effects</I>”<BR>
+<A NAME="commentfont"></A>/commentFont “<I>fontname:size effects</I>”<BR>
+<A NAME="icsfont"></A>/icsFont “<I>fontname:size effects</I>”</B></P>
+
+<P>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 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, and the effects may be any combination of <B>b</B>old, <B>i</B>talic, <B>u</B>nderline, and <B>s</B>trikeout. Example: <CODE>/clockFont="Arial:20.0 bi".</CODE> Available on the <A HREF="07.htm#fonts">Fonts</A> menu.</P>
+
+
+
+<P><B><A NAME="soundshout"></A>/soundShout<I> sound<BR>
+</I><A NAME="soundsshout"></A>/soundSShout <I>sound<BR>
+</I><A NAME="soundchannel1"></A>/soundChannel1 <I>sound</I><BR>
+<A NAME="soundchannel"></A>/soundChannel <I>sound</I><BR>
+<A NAME="soundkibitz"></A>/soundKibitz <I>sound</I><BR>
+<A NAME="soundtell"></A>/soundTell <I>sound</I><BR>
+<A NAME="soundchallenge"></A>/soundChallenge <I>sound</I><BR>
+<A NAME="soundrequest"></A>/soundRequest <I>sound</I><BR>
+<A NAME="soundmove"></A>/soundMove <I>sound</I><SUP> </SUP><BR>
+<A NAME="soundbell"></A>/soundBell <I>sound</I><SUP> </SUP></B></P>
+
+
+
+<P><B><A NAME="soundicswin"></A>/soundIcsWin <I>sound</I><BR>
+<A NAME="soundicsloss"></A>/soundIcsLoss <I>sound</I><SUP> </SUP><BR>
+<A NAME="soundicsdraw"></A>/soundIcsDraw <I>sound</I><SUP> </SUP><BR>
+<A NAME="soundicsunfinished"></A>/soundIcsUnfinished <I>sound</I><SUP> </SUP></B></P>
+
+
+
+<P><B><A NAME="soundicsalarm"></A>/soundIcsAlarm <I>sound</I><SUP> </SUP></B></P>
+
+<P>Associate sounds with WinBoard events. Most of the events are the same ones that cause text colorization. In addition, <B>soundMove</B> is played if a chess engine or another player makes a move. <B>SoundBell</B> is played if the chess server sends an ASCII BEL character (Ctrl+G). Available on the <A HREF="07.htm#sounds">Sounds</A> menu.</P>
+
+<P><B>SoundIcsWin</B>, <B>soundIcsLoss</B>, <B>soundIcsDraw</B> and <B>soundIcsUnfinished</B> are played at the conclusion of an ICS game.  The result of the game determines which sound is played.</P>
+
+<P><B>SoundIcsAlarm</B> is played when your game clock counts down to <A HREF="14.htm#icsalarmtime">icsAlarmTime</A>. </P>
+
+<P>The <I>sound</I> argument may be one of the following:
+
+<UL>
+	<LI>The name of a <CODE>.wav</CODE> file. The filename is interpreted relative to WinBoard's installation directory (the directory containing WinBoard.exe).<BR><BR></LI>
+
+	<LI><CODE>$</CODE>, indicating the default system sound.<BR><BR></LI>
+
+	<LI><CODE>!</CODE> followed by the name of a built-in WinBoard wave resource.<BR><BR></LI>
+
+	<LI><CODE>!</CODE> alone, or “” (empty string), indicating silence.</LI>
+</UL>
+
+<P>The default for soundMove and soundBell is <CODE>$</CODE>, while the others default to silence.</P>
+
+
+
+<P><B><A NAME="icsmenu"></A>/icsMenu={<I>entries</I>} </B>or <B>/icsMenu=@<I>filename</I></B></P>
+
+<P>This option lets you customize the right-button <A HREF="09.htm">context menu</A> 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 <CODE>"-"</CODE>. The fields are:
+
+<OL>
+	<LI>The menu text. If this field begins with <CODE>"|"</CODE>, the item begins a new column in the menu and the <CODE>"|"</CODE> is not shown. If this field contains an <CODE>"&amp;"</CODE>, 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.<BR><BR></LI>
+
+	<LI>Text to insert into the input pane. The text cannot include a comma. You can use ICS aliases to get around this limitation.<BR><BR></LI>
+
+	<LI>A flag (1 or 0) saying whether to insert a space and <I>name </I>(see <A HREF="09.htm#tell">above</A>) after the text. If you set this flag, you might also want to put "(name)" into the menu text as a memory aid.<BR><BR></LI>
+
+	<LI>A flag (1 or 0) saying whether the result should be sent immediately to ICS or left in the input pane for further editing.</LI>
+</OL>
+
+<P>The entry <CODE>"-"</CODE> produces a separator line in the menu. The top three menu entries are always <B>Copy and Paste</B>, <B>Copy</B>, and <B>Paste</B>, but you have full control over the rest of the menu.</P>
+
+<P>The default menu is:</P>
+
+<PRE><CODE>–
+&amp;Who,who,0,1
+Playe&amp;rs,players,0,1
+&amp;Games,games,0,1
+&amp;Sought,sought,0,1
+|&amp;Tell (name),tell,1,0
+M&amp;essage (name),message,1,0
+–
+&amp;Finger (name),finger,1,1
+&amp;Vars (name),vars,1,1
+&amp;Observe (name),observe,1,1
+&amp;Match (name),match,1,1
+Pl&amp;ay (name),play,1,1</CODE></PRE>
+
+<P>There is no graphical user interface to set this option. To change it, edit your <A HREF="19.htm#settings">settings</A> file with a plain text editor such as Notepad.</P>
+
+
+
+<P><B><A NAME="icsnames"></A>/icsNames={<I>names</I>} </B>or <B>/icsNames=@<I>filename</I></B></P>
+
+<P>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 ”/ics /icsHost=” and adds the result to the command-line options. There is no graphical user interface to set this option. To change it, edit your <A HREF="19.htm#settings">settings</A> file with a plain text editor such as Notepad.</P>
+
+
+
+<P><B><A NAME="firstchessprogramnames"></A>/firstChessProgramNames={<I>names</I>} </B>or <B>/firstChessProgramNames="@<I>filename</I>"</B></P>
+
+<P>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 ”/cp /firstChessProgram=” and adds the result to the command-line options. </P>
+
+<P>There is no graphical user interface to set this option. To change it, edit your <A HREF="19.htm#settings">settings</A> file with a plain text editor such as Notepad. Example:</P>
+
+<PRE><CODE>/firstChessProgramNames={GNUChess
+WCrafty-15_11 /fd="C:\Program Files\Crafty"
+ArasanX /fd="C:\Program Files\Arasan\Arasan 4.1"
+"EXchess xb" /fd=C:\EXchess
+Comet-WB /fd=C:\Comet
+}</CODE></PRE>
+
+
+
+<P><B><A NAME="secondchessprogramnames"></A>/secondChessProgramNames={<I>names</I>}</B> or <B>/secondChessProgramNames="@<I>filename</I>"</B></P>
+
+<P>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 ”/cp /secondChessProgram=” and adds the result to the command-line options.</P>
+
+<P>There is no graphical user interface to set this option. To change it, edit your <A HREF="19.htm#settings">settings</A> file with a plain text editor such as Notepad. Example:</P>
+
+<P><CODE>/secondChessProgramNames={GNUChess<BR>
+WCrafty-15_11 /sd="C:\\Program Files\\Crafty\"<BR>
+ArasanX /sd="C:\Program Files\Arasan\Arasan 4.1"<BR>
+"EXchess xb" /sd=C:\EXchess<BR>
+Comet-WB /sd=C:\Comet<BR>
+}</CODE></P>
+
+
+
+<P><B><A NAME="xy"></A>/x=<I>xcoord  </I>/y=<I>ycoord</I></B></P>
+
+<P>Sets the initial location of the board window, giving the screen coordinates of the upper left-hand corner. Both arguments must be given together.</P>
+
+
+
+<P><B><A NAME="xywh"></A>/analysisX=<I>xcoord  </I>/analysisY=<I>ycoord</I>  /analysisW=<I>width</I>  /analysisH=<I>height</I></B></P>
+
+<P><font color="#3333ff">These options have been deprecated, as the analysis window is replaced by the more general engine-output window. They are recognized, but ignored, and no longer saved in the winboard.ini file.</font></P>
+
+
+
+<P><B><A NAME="xywh"></A>/commentX=<I>xcoord  </I>/commentY=<I>ycoord</I>  /commentW=<I>width</I>  /commentH=<I>height</I></B></P>
+
+<P>Sets the initial location and size of the Comment window, giving the screen coordinates of the upper left-hand corner <font color="#3333ff">(relative to the main window)</font>, the width, and the height. All four arguments must be given together.</P>
+
+
+
+<P><B><A NAME="xywh"></A>/gameListX=<I>xcoord  </I>/gameListY=<I>ycoord</I>  /gameListW=<I>width</I>  /gameListH=<I>height</I></B></P>
+
+<P>Sets the initial location and size of the Game List window, giving the screen coordinates of the upper left-hand corner <font color="#3333ff">(relative to the main window)</font>, the width, and the height. All four arguments must be given together.</P>
+
+
+
+<P><B><A NAME="xywh"></A>/icsX=<I>xcoord  </I>/icsY=<I>ycoord</I>  /icsW=<I>width</I>  /icsH=<I>height</I></B></P>
+
+<P>Sets the initial location and size of the ICS Interaction window, giving the screen coordinates of the upper left-hand corner <font color="#3333ff">(relative to the main window)</font>, the width, and the height. All four arguments must be given together.</P>
+
+
+
+<P><B><A NAME="xywh"></A>/tagsX=<I>xcoord  </I>/tagsY=<I>ycoord</I>  /tagsW=<I>width</I>  /tagsH=<I>height</I></B></P>
+
+<P>Sets the initial location and size of the Tags window, giving the screen coordinates of the upper left-hand corner <font color="#3333ff">(relative to the main window)</font>, the width, and the height. All four arguments must be given together.</P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="xywh"></A>/moveHistoryX=<I>xcoord  </I>moveHistoryY=<I>ycoord</I>  /moveHistoryW=<I>width</I>  /moveHistoryH=<I>height</I></B></font></P>
+
+<P><font color="#ff0000">Sets the initial location and size of the move-history window, giving the screen coordinates of the upper left-hand corner</font> <font color="#3333ff">(relative to the main window)</font><font color="#ff0000">, the width, and the height. All four arguments must be given together.</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="xywh"></A>/evalGraphX=<I>xcoord  </I>/evalGraphY=<I>ycoord</I>  /evalGraphW=<I>width</I>  /evalGraphH=<I>height</I></B></font></P>
+
+<P><font color="#ff0000">Sets the initial location and size of the evaluation-graph window, giving the screen coordinates of the upper left-hand corner</font> <font color="#3333ff">(relative to the main window)</font><font color="#ff0000">, the width, and the height. All four arguments must be given together.</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="xywh"></A>/engineOutputX=<I>xcoord  </I>/engineOutputY=<I>ycoord</I>  </B></font></P>
+
+<P><font color="#ff0000"><B>/engineOutputW=<I>width</I>  /engineOutputH=<I>height</I></B></font></P>
+
+<P><font color="#ff0000">Sets the initial location and size of the engine-output window, giving the screen coordinates of the upper left-hand corner</font> <font color="#3333ff">(relative to the main window)</font><font color="#ff0000">, the width, and the height. All four arguments must be given together.</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="windowup"></A>/engineOutputUp <I>true|false </I></B></font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="windowup"></A>/evalGraphUp <I>true|false</I></B></font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="windowup"></A>/moveHistoryUp <I>true|false</I></B></font></P>
+
+<P><font color="#ff0000">If set to True, the corresponding window is displayed, if False, the window is absent.</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="stickywindows"></A>/stickyWindows <I>true|false</I></B></font></P>
+
+<P><font color="#ff0000">Auxiliary windows touching the main window will stay attached to the latter when you move it.</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="autodisplaycomment"></A>/autoDisplayComment <I>true|false</I></B></font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="autodisplaytags"></A>/autoDisplayTags <I>true|false</I></B></font></P>
+
+<P><font color="#ff0000">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.</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="gamelisttags"></A>/gameListTags <I>string</I></B></font></P>
+
+<P><font color="#ff0000">The <I>string</I> contains single-character codes specifying the PGN tags that have to be listed for each game in 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: “eprd”.</font></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/17.htm b/winboard/help/html/17.htm
new file mode 100644
index 0000000..c1f77cb
--- /dev/null
+++ b/winboard/help/html/17.htm
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Adjudication Options</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><font color="#ff0000"><B><A NAME="adjudicationoptions"></A>Adjudication Options</B></font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="adjudicatelossthreshold"></A>/adjudicateLossThreshold <I>scorethreshold</I></B></font></P>
+
+<P><font color="#ff0000">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.</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="adjudicatedrawmoves"></A>/adjudicateDrawMoves <I>number</I></B></font></P>
+
+<P><font color="#ff0000">If the given value is non-zero, WinBoard adjudicates the game as a draw if after the given <I>number</I> of moves it was not yet decided.</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="checkmates"></A>/checkMates<I> true|false</I></B></font></P>
+
+<P><font color="#008000">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.</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="testclaims"></A>/testClaims<I> true|false</I></B></font></P>
+
+<P><font color="#008000">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.</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="materialdraws"></A>/materialDraws<I> true|false</I></B></font></P>
+
+<P><font color="#008000">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.</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="trivialdraws"></A>/trivialDraws<I> true|false</I></B></font></P>
+
+<P><font color="#008000">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.</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="rulemoves"></A>/ruleMoves <I>number</I></B></font></P>
+
+<P><font color="#008000">If the given value is non-zero, WinBoard adjudicates the game as a draw after the given <I>number</I> of consecutive reversible moves. Engines can claim draws after 50 moves, irrespective of the value of <I>number</I>.</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="repeatstodraw"></A>/repeatsToDraw <I>number</I></B></font></P>
+
+<P><font color="#008000">If the given value is non-zero, WinBoard adjudicates the game as a draw if a position is repeated the given <I>number</I> of times. Engines can claim draws after 3 repeats, (on the 3rd occurrence, actually), irrespective of the value of <I>number</I>. Beware that positions that have different castling or en-passant rights do not count as repeats, WinBoard is fully e.p. and castling aware!</font></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/18.htm b/winboard/help/html/18.htm
new file mode 100644
index 0000000..81a8f79
--- /dev/null
+++ b/winboard/help/html/18.htm
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Other Options</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="otheroptions"></A>Other Options</B></P>
+
+
+
+<P><B><A NAME="ncp"></A>/ncp</B> or <B>/xncp</B>,<B> </B>or<B> <A NAME="nochessprogram"></A>/noChessProgram<I> true|false</I></B></P>
+
+<P>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.</P>
+
+
+
+<P><B><A NAME="mode"></A>/mode</B> or <B><A NAME="initialmode"></A>/initialMode <I>modename</I></B></P>
+
+<P>If this option is given, WinBoard selects the given <I>modename</I> from the <A HREF="04.htm">Mode menu</A> after starting and (if applicable) processing the <A HREF="15.htm#loadgamefile">loadGameFile</A> or <A HREF="15.htm#loadpositionfile">loadPositionFile</A> option. Default: "". Other supported values are TwoMachines, AnalyzeFile, Analysis, MachineWhite, MachineBlack, EditGame, EditPosition, and Training.</P>
+
+
+
+<P><B><A NAME="variant"></A>/variant</B> <B><I> varname</I></B></P>
+
+<P>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:</P>
+
+<table><tr><td>
+normal</td><td>Normal chess
+</td></tr><tr><td>
+wildcastle</td><td>Shuffle chess, king can castle from d file
+</td></tr><tr><td>
+nocastle</td><td>Shuffle chess, no castling allowed
+</td></tr><tr><td>
+fischerandom</td><td>Fischer Random shuffle chess
+</td></tr><tr><td>
+bughouse</td><td>Bughouse, ICC/FICS rules
+</td></tr><tr><td>
+crazyhouse</td><td>Crazyhouse, ICC/FICS rules
+</td></tr><tr><td>
+losers</td><td>Lose all pieces or get mated (ICC wild 17)
+</td></tr><tr><td>
+suicide</td><td>Lose all pieces including king (FICS)
+</td></tr><tr><td>
+giveaway</td><td>Try to have no legal moves (ICC wild 26)
+</td></tr><tr><td>
+twokings</td><td>Weird ICC wild 9
+</td></tr><tr><td>
+kriegspiel</td><td>Opponent's pieces are invisible
+</td></tr><tr><td>
+atomic</td><td>Capturing piece explodes (ICC wild 27)
+</td></tr><tr><td>
+3check</td><td>Win by giving check 3 times (ICC wild 25)
+</td></tr><tr><td>
+<font color="#008000">xiangqi</font></td><td><font color="#008000">Chinese Chess (on a 9x10 board)</font>
+</td></tr><tr><td>
+<font color="#008000">shogi</font></td><td><font color="#008000">Japanese Chess (on a 9x9 board, with piece drops)</font>
+</td></tr><tr><td>
+<font color="#008000">capablanca</font></td><td><font color="#008000">Capablanca Chess (10x8 board, with Archbishop and Chancellor pieces)</font>
+</td></tr><tr><td>
+<font color="#008000">gothic</font></td><td><font color="#008000">similar, with a better initial position</font>
+</td></tr><tr><td>
+<font color="#008000">caparandom</font></td><td><font color="#008000">An FRC-like version of Capablanca Chess (10x8 board)</font>
+</td></tr><tr><td>
+<font color="#008000">janus</font></td><td><font color="#008000">A game with two Archbishops (10x8 board)</font>
+</td></tr><tr><td>
+<font color="#008000">shatranj</font></td><td><font color="#008000">Ancient Arabic Chess, with Elephants and General replacing B and Q.</font>
+</td></tr><tr><td>
+<font color="#008000">courier</font></td><td><font color="#008000">Medieval intermedite between shatranj and modern Chess (on 12x8 board)</font>
+</td></tr><tr><td>
+<font color="#008000">falcon</font></td><td><font color="#008000">A patented Chess variant with two Falcon pieces (10x8) board</font>
+</td></tr><tr><td>
+<font color="#008000">berolina</font></td><td><font color="#008000">Pawns capture straight ahead, and move diagonal (legality testing off!)</font>
+</td></tr><tr><td>
+<font color="#008000">cylinder</font></td><td><font color="#008000">Pieces wrap around the board, as if it were a cylinder (legality testing off!)</font> 
+</td></tr><tr><td>
+<font color="#008000">fairy</font></td><td><font color="#008000">A variant in which all pieces known to WinBoard can participate</font>
+</td></tr><tr><td>
+<font color="#008000">knightmate</font></td><td><font color="#008000">King moves a Knight, and vice versa</font>
+</td></tr><tr><td>
+<font color="#3333ff">super</font></td><td><font color="#3333ff">Superchess, a shuffle variant with B+N, R+N, K+N and Q+N compound</font>
+</td></tr><tr><td>
+<font color="#3333ff">great</font></td><td><font color="#3333ff">Great Shatranj, whithout sliders, on 10x8 board (legality testing off!)</font>
+</td></tr></table>
+
+<P><font color="#008000">In the shuffle variants, WinBoard does now shuffle the pieces, although you can still do it by hand using Edit Position.</font> 
+Some variants are supported only in ICS mode, including bughouse, and kriegspiel. 
+The winning/drawing conditions in crazyhouse (offboard interposition on mate) is not fully understood, 
+<font color="#3333ff">but losers, suicide, giveaway, atomic, and 3check should be OK.</font> 
+In crazyhouse, <font color="#3333ff">WinBoard now does keep track of offboard pieces.
+In shatranj it does implement the baring rule when mate detection is switched on.
+In xiangqi it does implement the rules for perpetual checking and chasing (in Two-Machines mode)</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="boardheight"></A>/boardHeight <I>height</I></B></font></P>
+
+<P><font color="#008000">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.</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="boardwidth"></A>/boardWidth <I>width</I></B></font></P>
+
+<P><font color="#008000">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. Width a non-standard width, the initial position will always be an empty board, as the usual opening array will not fit.</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="holdingssize"></A>/holdingsSize <I>size</I></B></font></P>
+
+<P><font color="#008000">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 <I>size</I> 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>size</I> equals 0, there will be no holdings.</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="defaultfrcposition"></A>/defaultFrcPosition <I>number</I></B></font></P>
+
+<P><font color="#ff0000">Specifies the number of the opening position in shuffle games like FRC. A value of ‘-1’ means the position is randomly generated by WinBoard.</font></P>
+
+
+
+<P><font color="#008000"><B><A NAME="piecetosquaretable"></A>/pieceToSquareTable <I>characterstring</I></B></font></P>
+
+<P><font color="#008000">The characters that are used to represent 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 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.</font></P>
+
+<P><font color="#008000">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).</font></P>
+
+<P><font color="#008000">Note that promoted pieces are represented by pieces 11 further in the list.</font></P>
+
+<P><font color="#008000">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.</font></P>
+
+
+
+<P><B><A NAME="rsh"></A>/rsh </B>or<B> <A NAME="remoteshell"></A>/remoteShell <I>shellname</I></B></P>
+
+<P>Name of the command used to run programs remotely. If this option is not given, WinBoard<I> </I>uses its own built-in implementation of the Unix <I>rcmd</I> protocol (the protocol used by <I>rsh</I>).</P>
+
+
+
+<P><B><A NAME="ruser"></A>/ruser </B>or<B> <A NAME="remoteuser"></A>/remoteUser <I>username</I></B></P>
+
+<P>User name on the remote system when running programs with the remoteShell. The default is your local user name.</P>
+
+
+
+<P><font color="#008000"><B><A NAME="username"></A>/userName <I>username</I></B></font></P>
+
+<P><font color="#008000">Name under which the Human player will be listed in the PGN file. (Default is the login name on your local computer.)</font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="delaybeforequit"></A>/delayBeforeQuit <I>number</I></B></font></P>
+
+
+
+<P><font color="#ff0000"><B><A NAME="delayafterquit"></A>/delayAfterQuit <I>number</I></B></font></P>
+
+<P><font color="#ff0000">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.</font></P>
+
+
+
+<P><B><A NAME="ini"></A>/ini </B>or<B> <A NAME="settingsfile"></A>/settingsFile <I>filename<BR>
+</I><A NAME="atsign"></A>@ <I>file-name</I></B></P>
+
+<P>See <A HREF="19.htm#settings">Settings</A>.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/19.htm b/winboard/help/html/19.htm
new file mode 100644
index 0000000..6440fc6
--- /dev/null
+++ b/winboard/help/html/19.htm
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Files</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="files"></A>INITIALIZATION FILES</B></P>
+
+
+
+<P><B><A NAME="settings"></A>Settings</B></P>
+
+<P>When WinBoard starts up, it reads option settings from a file named <I>WinBoard.ini </I>in its installation directory (the directory containing WinBoard.exe). Options in this file have the same format as <A HREF="11.htm">command line options</A>, 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 (<CODE>;</CODE>).</P>
+
+<P>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.</P>
+
+<P>If WinBoard encounters a <A HREF="18.htm#settingsfile">/settingsFile</A> <I>filename </I>or <A HREF="18.htm#atsign">@</A><I>filename </I>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.</P>
+
+<P>The <A HREF="07.htm#savesettings">Save Settings Now</A> menu command writes the current values of most options to a file. In addition, settings are saved automatically when WinBoard exits if <A HREF="07.htm#savesettingsonexit">Save Settings on Exit</A> is checked. The settings are written to the last file named in a /settingsFile command, if any; otherwise to WinBoard.ini<I>.</I> The @ option does not affect which file settings are saved to.</P>
+
+<P>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 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.</P>
+
+<P><font color="#008000">Notice that tournament managers, like 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 ‘volatile’ options, such as /variant, into the settings file.</font></P>
+
+
+
+<P><B><A NAME="icslogon"></A>ICS Logon</B></P>
+
+<P>Whenever WinBoard connects to the Internet Chess Server, if it finds a file called <I>ICS.ini </I>in its installation directory<I>,</I> 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>ICS.ini</I> by using the <A HREF="14.htm#icslogon">icslogon</A> command line option.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/20.htm b/winboard/help/html/20.htm
new file mode 100644
index 0000000..025c8b2
--- /dev/null
+++ b/winboard/help/html/20.htm
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Installing Chess Engines</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="installingchessengines"></A>INSTALLING CHESS ENGINES</B></P>
+
+<P><B>Introduction</B></P>
+
+<P>WinBoard is capable of operating with many different chess engines. You can play chess against a compatible engine, set up matches between two engines, or (advanced users only) run an automated computer player on an ICS.</P>
+
+<P>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.</P>
+
+<P>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:</P>
+
+<P>1. Get a copy of the engine and any supporting files it needs.</P>
+
+<P>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.</P>
+
+<P>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.</P>
+
+<P>4. Create a shortcut on your desktop or Start menu to run the engine with WinBoard.</P>
+
+<P>5. Optionally edit your WinBoard.ini file to add the engine to the drop-down lists on WinBoard's startup dialog.</P>
+
+<P>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.</P>
+
+<P><B>Example: Crafty</B></P>
+
+<P>1. Choose a directory to put Crafty in. We'll use <CODE>C:\Program Files\Crafty</CODE> in this example. Download your copy of Crafty into this directory from its author's FTP site, <CODE>ftp://ftp.cis.uab.edu/pub/hyatt</CODE>. At this writing, you will need at least the following files:</P>
+
+<P><CODE>read.me<BR>
+v15/crafty.doc<BR>
+v15/crafty.faq<BR>
+v15/wcrafty-15.*.exe</CODE> (where * is replaced by the largest number there)<BR>
+<CODE>common/start.zip<BR>
+common/medium.zip </CODE>(or another book).</P>
+
+<P>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 some 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.</P>
+
+<P>3. Optional, but recommended: In an MS-DOS Prompt box, <CODE>cd </CODE>to the directory where WinBoard is installed, typically <CODE>"C:\Program Files\WinBoard"</CODE>. Then type the following command line. Use the actual name of the wcrafty file you downloaded, not an <CODE>*</CODE>, and if your browser changed the first period to an underscore when you downloaded the file, make that change in the command line too.</P>
+
+<PRE><CODE>WinBoard /cp /fcp=WCrafty-15.* /fd="C:\Program Files\Crafty" /scp=WCrafty-15.* /sd="C:\Program Files\Crafty"</CODE></PRE>
+
+<P>WinBoard should start up, with Crafty running as its chess engine. Check that you can play chess against Crafty.</P>
+
+<P>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>after</I> the closing quotation mark. Use the actual name of the wcrafty file you downloaded, not an <CODE>*</CODE>, and if your browser changed the first period to an underscore when you downloaded the file, make that change in the command line too.</P>
+
+<PRE><CODE>/cp /fcp=WCrafty-15.* /fd="C:\Program Files\Crafty" 
+/scp=WCrafty-15.* /sd="C:\Program Files\Crafty"</CODE></PRE>
+
+<P>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.</P>
+
+<P>5. To add Crafty as an option in the WinBoard Startup dialog, edit your <A HREF="19.htm#settings">WinBoard.ini file</A> with Notepad or another plain text editor, carefully following the example shown under <A HREF="16.htm#firstchessprogramnames">/firstChessProgramNames</A> above.</P>
+
+<P><B>For more information</B></P>
+
+<P>If you would like to run an automated computer player on the ICS, see the separate file <CODE>zippy.README</CODE>. If you would like to write your own engine to interface to WinBoard, see the separate file <CODE>engine-intf.html</CODE>, 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<CODE>.</CODE></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/21.htm b/winboard/help/html/21.htm
new file mode 100644
index 0000000..c970da5
--- /dev/null
+++ b/winboard/help/html/21.htm
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Firewalls</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="firewalls"></A>FIREWALLS</B></P>
+
+<P>By default, "WinBoard /ics"<I> </I>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 WinBoard<I>.</I> Important: See the paragraph in the <A HREF="22.htm">LIMITATIONS</A> section below about extra echoes.</P>
+
+<P>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: </P>
+
+<PRE><CODE>WinBoard -ics -icshost fire.wall.com -icsport 23</CODE></PRE>
+
+<P>Then when you run WinBoard<I> </I>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.</P>
+
+<P>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 "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".</P>
+
+<P>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’t specify a port to the telnet program. But the other chess servers don’t allow this.</P>
+
+<P>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: </P>
+
+<PRE><CODE>WinBoard -ics -gateway rsh.wall.com -icshost chessclub.com</CODE></PRE>
+
+<P>Then when you run WinBoard<I> </I>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.</P>
+
+<P>ICC timestamp and FICS timeseal do not work through many<B> </B>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.</P>
+
+<P>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.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/22.htm b/winboard/help/html/22.htm
new file mode 100644
index 0000000..5d5255f
--- /dev/null
+++ b/winboard/help/html/22.htm
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Limitations</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="limitations"></A>LIMITATIONS <font color="#008000">AND NON-LIMITATIONS</font></B></P>
+
+<P>WinBoard<I> </I>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.</P>
+
+<P><I>CMail, </I>the companion program to xboard for playing electronic mail correspondence chess, has not been ported to Win32.</P>
+
+<P>There is no way for two people running copies of WinBoard<I> </I>to play each other without going through the Internet Chess Server.</P>
+
+<P>Under some circumstances, your ICS password may be echoed when you log on.</P>
+
+<P>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 "<CODE>stty -echo</CODE>" after you log in to the provider but before you run telnet, timestamp, or timeseal. In addition, you may need to type the sequence “<CODE>Ctrl+Q Ctrl+E Enter</CODE>“ after you have finished logging in to ICS. On VMS, type “<CODE>set terminal /noecho /nowrap</CODE>”, and after you telnet to the ICS, type “<CODE>Ctrl+Q Ctrl+] Enter set mode char Enter Enter</CODE>”. 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’t just turn off <A HREF="07.htm#locallineediting">Local Line Editing</A> so that you see only the remote echo and not the local one; that will make the interleaving problem worse.</P>
+
+<P>The game parser recognizes only algebraic notation (SAN).</P>
+
+<P>The <A HREF="14.htm#icslogon">ICS logon</A> file does not work properly when you connect to ICS through a Unix gateway host by setting <A HREF="14.htm#icsport">icsPort</A> to 23. The Unix login process apparently discards type-ahead.</P>
+
+<P>Some WinBoard functions may not work with versions of GNU Chess earlier than 4.0, patchlevel 77. The current version of WinBoard<I> </I>works best with Crafty version 15.11 or later.</P>
+
+<P><font color="#008000">Many of the following points used to be limitations in WinBoard 4.2.7 and earlier, but are now fixed:</font></P>
+
+<P><font color="#008000">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.</font> It permits castling with the king on the <B>d</B> 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. <font color="#008000">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.</font> 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.</P>
+
+<P><font color="#008000">FEN positions saved by WinBoard<I> </I>do include correct information about whether castling or en passant are legal, and also handle the 50-move counter.</font></P>
+
+<P>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. WinBoard will not assume the game is over at that point, <font color="#008000">not even when the option Detect Mates is on.</font></P>
+
+<P><font color="#008000">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.</font></P>
+
+<P><font color="#008000">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.</font></P>
+
+<P><font color="#008000">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.</font></P>
+
+<P>Also see the ToDo file included with the distribution for many other possible bugs, limitations, and ideas for improvement that have been suggested.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/23.htm b/winboard/help/html/23.htm
new file mode 100644
index 0000000..ba29478
--- /dev/null
+++ b/winboard/help/html/23.htm
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Authors</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="authors"></A>AUTHORS AND CONTRIBUTORS</B></P>
+
+<P>WinBoard is partly based on <I>xboard</I>, a chessboard program for Unix and the X Window System. Tim Mann has been responsible for all versions of WinBoard,<I> </I>and for xboard versions 1.3 and beyond. <font color="#008000">H.G.Muller is responsible for version 4.3.</font></P>
+
+<P>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> </I>user interface improvements and improved Crafty support. Jochen Wiedmann ported xboard<I> </I>to the Amiga, creating <I>AmyBoard</I>, and converted the documentation to texinfo. Elmar Bartel contributed the new piece bitmaps for version 3.2. Evan Welsh wrote <I>CMail. </I>John Chanak contributed the initial implementation of ICS mode. The default color scheme was adapted from Wayne Christopher's <I>XChess </I>program. Chris Sears and Dan Sears wrote the original xboard<I>. </I>They were responsible for xboard<I> </I>versions 1.0 through 1.2. <font color="#ff0000">Alessandro 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.</font> <font color="#008000">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.</font></P>
+
+<P>Send bug reports to &lt;bug-xboard at gnu.org&gt;. Please run WinBoard with the /debug option and include the output from the resulting WinBoard.debug file in your message.</P>
+
+<P><font color="#008000">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 suggestions for improvements and additions, are best posted in the WinBoard forum, development section</font> <font color="#3333ff">(<u>www.open-aurec.com/wbforum/</u>)</font><font color="#008000">.</font></P>
+
+<P><font color="#3333ff">Michel van den Bergh provided the code for reading Polyglot opening books.</a></P>
+
+<P><font color="#3333ff">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.</a></P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/html/24.htm b/winboard/help/html/24.htm
new file mode 100644
index 0000000..f0dbfcc
--- /dev/null
+++ b/winboard/help/html/24.htm
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">
+<TITLE>Copyright</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
+
+
+
+<P><B><A NAME="copyright"></A>COPYRIGHT</B></P>
+
+<P>Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts. <BR>
+Enhancements Copyright 1992-2009 Free Software Foundation, Inc.</P>
+
+<P>The following terms apply to Digital Equipment Corporation's copyright interest in WinBoard:</P>
+
+<P>All Rights Reserved</P>
+
+<P>Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Digital not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission.</P>
+
+<P>DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</P>
+
+<P>The following terms apply to the enhanced version of WinBoard distributed by the Free Software Foundation:</P>
+
+<P>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.</P>
+
+<P>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.</P>
+
+<P>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.</P>
+
+</BODY>
+</HTML>
diff --git a/winboard/help/winboard b/winboard/help/winboard
new file mode 100644
index 0000000..5328dc9
--- /dev/null
+++ b/winboard/help/winboard
@@ -0,0 +1,38 @@
+[OPTIONS]
+Compatibility=1.1 or later
+Compiled file=..\..\..\xboard-4.4.0.chm
+Contents file=Table of Contents.hhc
+Default topic=html\winb3mnn.htm
+Display compile progress=No
+Index file=winboard.hhk
+Language=0x413 Nederlands (Nederland)
+
+
+[FILES]
+html\winb3mnn.htm
+html\winb31o3.htm
+html\winb54vp.htm
+html\winb5lkl.htm
+html\winb9gqd.htm
+html\winb0nlh.htm
+html\winb85it.htm
+html\winb3j3p.htm
+html\winb4h6d.htm
+html\winb87ar.htm
+html\winb5qpf.htm
+html\winb75yr.htm
+html\winb3i0k.htm
+html\winb701f.htm
+html\winb1v8z.htm
+html\winb8ws3.htm
+html\winb55yr.htm
+html\winb8n03.htm
+html\winb85yr.htm
+html\winb2tv7.htm
+html\winb381f.htm
+html\winb1hir.htm
+html\winb3wmr.htm
+html\winb1ks4.htm
+
+[INFOTYPES]
+
diff --git a/winboard/help/winboard.chm b/winboard/help/winboard.chm
new file mode 100644
index 0000000..bafdeee
Binary files /dev/null and b/winboard/help/winboard.chm differ
diff --git a/winboard/help/winboard.hhk b/winboard/help/winboard.hhk
new file mode 100644
index 0000000..d4fd092
--- /dev/null
+++ b/winboard/help/winboard.hhk
@@ -0,0 +1,2370 @@
+<HTML>
+<!-- Sitemap 1.0 -->
+<OBJECT type="text/site properties">
+</OBJECT>
+<UL>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Abort">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#abort">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="About WinBoard">
+		<param name="Name" value="Help Menu">
+		<param name="Local" value="html/08.htm#aboutwinboard">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Accept">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#accept">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Action Menu">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Adjourn">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#adjourn">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Adjudicate Draw">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#adjudicatedraw">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Adjudicate Draw Moves">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#adjudicatedrawmoves">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Adjudicate Loss Threshold">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#adjudicatelossthreshold">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Adjudicate To Black">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#adjudicatetoblack">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Adjudicate To White">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#adjudicatetowhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Adjudicate Trivial Draws">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#adjudicatetrivialdraws">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="adjudicateDrawMoves">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm#checkmates">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="adjudicateLossThreshold">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Adjudication Options">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Adjudications">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#adjudications">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="alarm">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#alarm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="All White">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#allwhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="allWhite">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#renderpieceswithfont">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Always On Top">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#alwaysontop">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Always Queen">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#alwaysqueen">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="alwaysOnTop">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#top">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="alwaysPromoteToQueen">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#queen">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Analysis Mode">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#analysismode">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Analyze File">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#analyzefile">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="animate">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#animate">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Animate Dragging">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#animatedragging">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Animate Moving">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#animatemoving">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="animateDragging">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#drag">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="animateMoving">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#animate">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="at sign">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#ini">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Authors">
+		<param name="Name" value="Authors">
+		<param name="Local" value="html/23.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Auto Comment">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#autocommentcmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Auto Flag">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#autoflagcmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Auto Flip View">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#autoflipview">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Auto Observe">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#autobscmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Auto Raise Board">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#autoraiseboard">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autobs">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#autobs">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoCallFlag">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#autoflag">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autocomm">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#autocomm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoComment">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#autocomm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoDisplayComment">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#autodisplaycomment">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoDisplayTags">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#autodisplaytags">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoflag">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#autoflag">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoflip">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#autoflip">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoFlipView">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#autoflip">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoKibitz">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#autokibitz">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoLogo">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#autologo">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoObserve">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#autobs">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoraise">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#autoraise">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoRaiseBoardOption">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#autoraise">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autosave">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#autosave">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="autoSaveGames">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#autosave">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Back to Start">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm#backtostart">
+		<param name="Name" value="Buttons">
+		<param name="Local" value="html/10.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Backward">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm#backward">
+		<param name="Name" value="Buttons">
+		<param name="Local" value="html/10.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="blackPieceColor">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#wpc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Blindfold">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#blindfoldcmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="blindfold (option)">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#opt_blindfold">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Board Colors">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#boardcolors">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Board Options">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#boardoptions">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Board Size">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#boardsizecmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="boardHeight">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#boardheight">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="boardSize">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#size">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="boardWidth">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#boardwidth">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Book">
+		<param name="Name" value="Help Menu">
+		<param name="Local" value="html/08.htm#book">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="bpc">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#wpc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Buttons">
+		<param name="Name" value="Buttons">
+		<param name="Local" value="html/10.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Call Flag">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#callflag">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="checkMates">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm#checkmates">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Chess Engine Options">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="chessProgram">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#cp">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="clock">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#clock">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="clockFont">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#clockfont">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="clockMode">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#clock">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorBackground">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorbackground">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorChallenge">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorChannel">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorChannel1">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorize">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorizeMessages">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorKibitz">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorNormal">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorRequest">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorSeek">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorShout">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorSShout">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="colorTell">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#colorshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Command Line Options">
+		<param name="Name" value="Command Line Options">
+		<param name="Local" value="html/11.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="commentFont">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#clockfont">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Communications">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#communications">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="comPortSettings">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#comportsettings">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Contents">
+		<param name="Name" value="Contents">
+		<param name="Local" value="html/01.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="coordFont">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#clockfont">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="coords">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#coords">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Copy">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#copy">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Copy and Paste">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#copyandpaste">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Copy Game To Clipboard">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#copygametoclipboard">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Copy Position Clipboard">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#copypositiontoclipboard">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Copyright">
+		<param name="Name" value="Copyright">
+		<param name="Local" value="html/24.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="cp">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#cp">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="darkBackTextureFile">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#darkbacktexturefile">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="darkBackTextureMode">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#darkbacktexturemode">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="darkSquareColor">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#wpc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="debug">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#debug">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="debugFile">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#debugfile">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="debugMode">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#debug">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Decline">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#decline">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="defaultCacheSizeEGTB">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#defaultcachesizeegtb">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="defaultFrcPosition">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#defaultfrcposition">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="defaultHashSize">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#defaulthashsize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="defaultPathEGTB">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#defaultpathegtb">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="delayAfterQuit">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#delayafterquit">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="delayBeforeQuit">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#delaybeforequit">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Description">
+		<param name="Name" value="Contents">
+		<param name="Local" value="html/01.htm#description">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Detect Mates">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#detectmates">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="drag">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#drag">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Draw">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#draw">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Draw If Insufficient Material">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#drawifinsufficientmaterial">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="dsc">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#wpc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="edit">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#edit">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Edit Comment">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#editcomment">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Edit Game">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#editgame">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Edit Position">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#editposition">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Edit Tags">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#edittags">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="EGTB Cache Size">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#hashsize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="EGTB Path">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#hashsize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Engine Settings">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#engine settings">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="engineDebugOutput">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#enginedebugoutput">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="engineOutputUp">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#windowup">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Enter Username">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#enterusername">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="evalGraphUp">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#windowup">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="evalHistoColorBlack">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#evalhistocolorblack">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="evalHistoColorWhite">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#evalhistocolorwhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Exit">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#exit">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Extended PGN Info">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#extendedpgninfo">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Extra Info In Move History">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#extrainfoinmovehistory">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fb">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fb">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fcp">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fd">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fh">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="File Menu">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Files">
+		<param name="Name" value="Files">
+		<param name="Local" value="html/19.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Finger">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#finger">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Firewalls">
+		<param name="Name" value="Firewalls">
+		<param name="Local" value="html/21.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstChessProgram">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstChessProgramNames">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#firstchessprogramnames">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstDirectory">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstHasOwnBookUCI">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#fnoownbookuci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstHost">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstIsUCI">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#fuci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstLogo">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#firstlogo">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstNeedsNoncompliantFEN">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firstneedsnoncompliantfen">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstNPS">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firstnps">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstOptions">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firstoptions">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstPlaysBlack">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fb">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstProtocolVersion">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firstprotocolversion">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstScoreAbs">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firstscoreabs">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstTimeOdds">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firsttimeodds">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="firstXBook">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#fnoownbookuci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="flip">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#flip">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Flip Black">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#flipblack">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Flip View">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#flipview">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="flipBlack">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#monomode">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="flipView">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#flip">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fNoOwnBookUCI">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#fnoownbookuci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fontPieceBackColorBlack">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#fontpiecebackcolorwhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fontPieceBackColorWhite">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#fontpiecebackcolorwhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fontPieceForeColorBlack">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#fontpiecebackcolorwhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fontPieceForeColorWhite">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#fontpiecebackcolorwhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fontPieceSize">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#fontpiecesize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fontPieceToCharTable">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#fontpiecetochartable">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Fonts">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#fonts">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Forward">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm#forward">
+		<param name="Name" value="Buttons">
+		<param name="Local" value="html/10.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Forward to End">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm#forwardtoend">
+		<param name="Name" value="Buttons">
+		<param name="Local" value="html/10.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="fUCI">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#fuci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="gameListTags">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#gamelisttags">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Games">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#games">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="gateway">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#gateway">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="General Options">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#generaloptions">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Get Move List">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#getmovelistcmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="getMoveList">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#moves">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Getting Started">
+		<param name="Name" value="Contents">
+		<param name="Local" value="html/01.htm#gettingstarted">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="grayscale">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#grayscale">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Hash Size">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#hashsize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Help Contents">
+		<param name="Name" value="Help Menu">
+		<param name="Local" value="html/08.htm#helpcontents">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Help Menu">
+		<param name="Name" value="Help Menu">
+		<param name="Local" value="html/08.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Hide Thinking From Human">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#hidethinkingfromhuman">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#pondernextmove">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="hideThinkingFromHuman">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#nogui">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="highdrag">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#highdrag">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="highlight">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#highlight">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Highlight Dragging">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#highlightdragging">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Highlight Last Move">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#highlightlastmove">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Highlight Move With Arrow">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#highlightmovewitharrow">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="highlightArrowColor">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#highlightarrowcolor">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="highlightDragging">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#highdrag">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="highlightLastMove">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#highlight">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="highlightMovesWithArrow">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#highlightmoveswitharrow">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="highlightSquareColor">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#hsc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Hint">
+		<param name="Name" value="Help Menu">
+		<param name="Local" value="html/08.htm#hint">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="holdingsSize">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#holdingssize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="How to Use Help">
+		<param name="Name" value="Help Menu">
+		<param name="Local" value="html/08.htm#helphelp">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="hsc">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#hsc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icon">
+		<param name="Name" value="Contents">
+		<param name="Local" value="html/01.htm#icon">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ics">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#ics">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ICS Alarm">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#icsalarm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ICS Client">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#icsclient">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ICS Interaction Colors">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#icsinteractioncolors">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ICS Interaction Context Menu">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ICS Logon">
+		<param name="Name" value="Files">
+		<param name="Local" value="html/19.htm#settings">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ICS Options">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#icsoptions">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icsAlarm">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#alarm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icsAlarmTime">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#icsalarmtime">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icscom">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#icscom">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icsFont">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#clockfont">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icshost">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#icshost">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icslogon">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#icslogon">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icsMenu">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#icsmenu">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icsNames">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#icsnames">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="icsport">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#icsport">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="inc">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#inc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ini">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#ini">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Initialization files">
+		<param name="Name" value="Files">
+		<param name="Local" value="html/19.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="initialMode">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#mode">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="initString">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#initstring">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#secondinitstring">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Installing Chess Engines">
+		<param name="Name" value="Installing Chess Engines">
+		<param name="Local" value="html/20.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Internet Chess Server Options">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="internetChessServerComPort">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#icscom">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="internetChessServerHost">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#icshost">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="internetChessServerLogonScript">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#icslogon">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="internetChessServerMode">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#ics">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="internetChessServerPort">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#icsport">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="legal">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#legal">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="lgf">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#lgf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="lgi">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#lgf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="lightSquareColor">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#wpc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Limitations">
+		<param name="Name" value="Limitations">
+		<param name="Local" value="html/22.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="liteBackTextureFile">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#litebacktexturefile">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="liteBackTextureMode">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#litebacktexturemode">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Load and Save Options">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Load Game">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#loadgame">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#loadgameoptns">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Load Next Game">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#loadnextgame">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Load Next Position">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#loadnextposition">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Load Position">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#loadposition">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Load Previous Game">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#loadpreviousgame">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Load Previous Position">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#loadpreviousposition">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="loadGameFile">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#lgf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="loadGameIndex">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#lgf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="loadPositionFile">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#lpf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="loadPositionIndex">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#lpf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Local Line Editing">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#locallineediting">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="localLineEditing">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#edit">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="lpf">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#lpf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="lpi">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#lpf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="lsc">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#wpc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Machine Black">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#machineblack">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Machine Both">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#machine both">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Machine White">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#machinewhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Match">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#match">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="matchGames">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#mg">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="matchMode">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#mm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="matchPause">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#matchpause">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="materialDraws">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm#materialdraws">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Menus">
+		<param name="Name" value="Menus">
+		<param name="Local" value="html/02.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Message">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#message">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="messageFont">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#clockfont">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="mg">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#mg">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="mm">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#mm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="mode">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#mode">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Mode Menu">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="mono">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#mono">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="monoMode">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#mono">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="move">
+		<param name="Name" value="Contents">
+		<param name="Local" value="html/01.htm#move">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Move Now">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm#movenow">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Move Sound">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#movesound">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="moveHistoryUp">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#windowup">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="moves">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#moves">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="movesPerSession">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#mps">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="mps">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#mps">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="N-Fold Repetition Rule">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#n-foldrepetitionrule">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="N-Move Rule">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#n-moverule">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="nameOfDebugFile">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#debugfile">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ncp">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#ncp">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="New Game">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#newgame">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="New Shuffle Game">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#newshufflegame">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="New Variant">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#newvariant">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="niceEngines">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#niceengines">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="noChessProgram">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#ncp">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="noGUI">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#nogui">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Number of CPUs">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#hashsize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Observe">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#observe">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="oldsave">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#oldsave">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="oldSaveStyle">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#oldsave">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Opening Book">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#hashsize">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Options">
+		<param name="Name" value="Command Line Options">
+		<param name="Local" value="html/11.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Options Menu">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Other Options">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="overideLineGap">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#overidelinegap">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Paste">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#paste">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Paste Game From Clipboard">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#pastegamefromclipboard">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Paste Position Clipboard">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#pastepositionfromclipboard">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Pause">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#pause">
+		<param name="Name" value="Buttons">
+		<param name="Local" value="html/10.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="periodic">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#periodic">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Periodic Updates">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#periodicupdatescmd">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#pondernextmove">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="periodicUpdates">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#periodic">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="pgnEventHeader">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#pgneventheader">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="pgnExtendedInfo">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#pgnextendedinfo">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="phc">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#hsc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="pieceToSquareTable">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#piecetosquaretable">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Play">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#play">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Players">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#players">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Polyglot Directory">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#polyglotdirectory">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="PolyglotBook">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#polyglotbook">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="PolyglotDir">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#polyglotdir">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ponder">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#ponder">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Ponder Next Move">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#pondernextmovecmd">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#pondernextmove">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ponderNextMove">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#ponder">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="popup">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#popup">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#popupmoveerrorsopt">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Popup Exit Message">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#popupexitmessagecmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Popup Move Errors">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#popupmoveerrorscmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="popupMoveErrors">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#popup">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#popupmoveerrorsopt">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="pre">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#pre">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="preBlack">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#preblack">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Premove">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#premovecmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="premove (option)">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#pre">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="premoveBlack">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#preblack">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="premoveBlackText">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#premoveblacktext">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="premoveHighlightColor">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#hsc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="premoveWhite">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#prewhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="premoveWhiteText">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#premovewhitetext">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="preWhite">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#prewhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="queen">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#queen">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="quiet">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#quiet">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Quiet Play">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#quietplaycmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="quietPlay">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#quiet">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Reload Same Game">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#reloadsamegame">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Reload Same Position">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#reloadsameposition">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Rematch">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#rematch">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="remoteShell">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#rsh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="remoteUser">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#ruser">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="renderPiecesWithFont">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#renderpieceswithfont">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="repeatsToDraw">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm#repeatstodraw">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Resign">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#resign">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Retract Move">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm#retractmove">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="reuse">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#reuse">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="reuse2">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#reuse">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="reuseFirst">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#reuse">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="reuseSecond">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#reuse">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Revert">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm#revert">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="rsh">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#rsh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ruleMoves">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm#rulemoves">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="ruser">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#ruser">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Save Diagram">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#save diagram">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Save Game">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#savegame">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#savegameoptns">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Save Position">
+		<param name="Name" value="File Menu">
+		<param name="Local" value="html/03.htm#saveposition">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Save Settings Now">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#savesettings">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Save Settings on Exit">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#savesettingsonexit">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="saveGameFile">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#sgf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="saveOutOfBookInfo">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#saveoutofbookinfo">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="savePositionFile">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#spf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="scp">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="sd">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#sd">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Search for Help on">
+		<param name="Name" value="Help Menu">
+		<param name="Local" value="html/08.htm#searchhelp">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="searchDepth">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#sd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="searchTime">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#st">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondChessProgram">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondChessProgramNames">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#secondchessprogramnames">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondDirectory">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondHasOwnBookUCI">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#snoownbookuci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondHost">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondInitString">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#initstring">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#secondinitstring">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondIsUCI">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#suci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondLogo">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#secondlogo">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondNeedsNoncompliantFEN">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firstneedsnoncompliantfen">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondNPS">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#secondnps">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondOptions">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firstoptions">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondProtocolVersion">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firstprotocolversion">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondScoreAbs">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#firstscoreabs">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondTimeOdds">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#secondtimeodds">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="secondXBook">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#snoownbookuci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Settings">
+		<param name="Name" value="Files">
+		<param name="Local" value="html/19.htm#settings">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="settingsFile">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#ini">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="sgf">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#sgf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="sh">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#fh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Show Button Bar">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#showbuttonbarcmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Show Coords">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#showcoordscmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Show Engine Output">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#show engine output">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Show Evaluation Graph">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#show evaluation graph">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Show Game List">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#showgamelist">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Show Move History">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#show move history">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Show Thinking">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#showthinkingcmd">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#pondernextmove">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="showCoords">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#coords">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="showThinking">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#thinking">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="size">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#size">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="sNoOwnBookUCI">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#snoownbookuci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Sought">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#sought">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundBell">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundChallenge">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundChannel">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundChannel1">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundIcsAlarm">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundicsalarm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundIcsDraw">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundicswin">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundIcsLoss">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundicswin">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundIcsUnfinished">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundicswin">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundIcsWin">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundicswin">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundKibitz">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundMove">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundRequest">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Sounds">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#sounds">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#communications">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundShout">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundSShout">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="soundTell">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#soundshout">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="spf">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#spf">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="st">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#st">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Step Menu">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="stickyWindows">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#stickywindows">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Stop Examining">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#stopexamining">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Stop Observing">
+		<param name="Name" value="Action Menu">
+		<param name="Local" value="html/05.htm#stopobserving">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="sUCI">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#suci">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Swap Clocks">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#swap clocks">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="tagsFont">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#clockfont">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="tc">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#tc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="td">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#td">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Tell">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#tell">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="telnet">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#telnet">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="telnetProgram">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#telnetprogram">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Test Legality">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#testlegalitycmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="testClaims">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm#testclaims">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="testLegality">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#legal">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="thinking">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#thinking">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Time Control">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#timecontrolcmd">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="timeControl">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#tc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="timeDelay">
+		<param name="Name" value="Load and Save Options">
+		<param name="Local" value="html/15.htm#td">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="timeIncrement">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#inc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="timeOddsMode">
+		<param name="Name" value="Chess Engine Options">
+		<param name="Local" value="html/12.htm#timeoddsmode">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="timeseal">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#via">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="timestamp">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#via">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="top">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#top">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Training">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#training">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="trivialDraws">
+		<param name="Name" value="Adjudication Options">
+		<param name="Local" value="html/17.htm#trivialdraws">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Truncate Game">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm#truncategame">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Two Machines">
+		<param name="Name" value="Mode Menu">
+		<param name="Local" value="html/04.htm#twomachines">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Type In Move">
+		<param name="Name" value="Step Menu">
+		<param name="Local" value="html/06.htm#typeinmove">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="UCI Engine Support">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="usePolyglotBook">
+		<param name="Name" value="UCI Engine Support">
+		<param name="Local" value="html/13.htm#usepolyglotbook">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="User Interface Options">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="userName">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#username">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="useTelnet">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#telnet">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="variant">
+		<param name="Name" value="Other Options">
+		<param name="Local" value="html/18.htm#variant">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Vars">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#vars">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Verify Claims">
+		<param name="Name" value="Options Menu">
+		<param name="Local" value="html/07.htm#verifyclaims">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="via">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#via">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="whitePieceColor">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#wpc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="Who">
+		<param name="Name" value="ICS Interaction Context Menu">
+		<param name="Local" value="html/09.htm#who">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="wpc">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#wpc">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xalarm">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#alarm">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xpre">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#pre">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xpreBlack">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#preblack">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xpreWhite">
+		<param name="Name" value="Internet Chess Server Options">
+		<param name="Local" value="html/14.htm#prewhite">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xy coordinates of board">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#xy">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xywh coordinates of Analysis window">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#xywh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xywh coordinates of Comment window">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#xywh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xywh coordinates of Engine Output window">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#windowup">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xywh coordinates of Evaluation Graph window">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#windowup">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xywh coordinates of Game List window">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#xywh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xywh coordinates of ICS Interaction window">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#xywh">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xywh coordinates of Move History window">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#windowup">
+		</OBJECT>
+	<LI> <OBJECT type="text/sitemap">
+		<param name="Keyword" value="xywh coordinates of Tags window">
+		<param name="Name" value="User Interface Options">
+		<param name="Local" value="html/16.htm#xywh">
+		</OBJECT>
+</UL></HTML>
diff --git a/winboard/help/winboard.hhp b/winboard/help/winboard.hhp
new file mode 100644
index 0000000..c4a22d3
--- /dev/null
+++ b/winboard/help/winboard.hhp
@@ -0,0 +1,29 @@
+[OPTIONS]
+Contents file=C:\Chess\WinBoard\help\contents.hhc
+Index file=C:\Chess\WinBoard\help\winboard.hhk
+
+[FILES]
+html\01.htm
+html\02.htm
+html\03.htm
+html\04.htm
+html\05.htm
+html\06.htm
+html\07.htm
+html\08.htm
+html\09.htm
+html\10.htm
+html\11.htm
+html\12.htm
+html\13.htm
+html\14.htm
+html\15.htm
+html\16.htm
+html\17.htm
+html\18.htm
+html\19.htm
+html\20.htm
+html\21.htm
+html\22.htm
+html\23.htm
+html\24.htm
diff --git a/winboard/jaws.c b/winboard/jaws.c
index 4502178..1891f07 100644
--- a/winboard/jaws.c
+++ b/winboard/jaws.c
@@ -188,8 +188,8 @@ MenuItemDesc menuItemJAWS[] = {
 {"Say Board &Rank\tAlt+R",      IDM_ReadRow },
 {"Say Board &File\tAlt+F",      IDM_ReadColumn },
 {"-", 0 },
-{"Say &Upper Diagnols\tAlt+U",  IDM_SayUpperDiagnols },
-{"Say &Lower Diagnols\tAlt+L",  IDM_SayLowerDiagnols },
+{"Say &Upper Diagonals\tAlt+U",  IDM_SayUpperDiagnols },
+{"Say &Lower Diagonals\tAlt+L",  IDM_SayLowerDiagnols },
 {"Say K&night Moves\tAlt+N",    IDM_SayKnightMoves },
 {"Say Current &Square\tAlt+S",  IDM_SayCurrentPos },
 {"Say &Attacks\tAlt+A",         IDM_PossibleAttackMove },
diff --git a/winboard/makefile.gcc b/winboard/makefile.gcc
index 2e78c0b..83dde19 100644
--- a/winboard/makefile.gcc
+++ b/winboard/makefile.gcc
@@ -7,7 +7,7 @@ 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 help.o
+ wsockerr.o help.o wsettings.o
 
 
 # make compiling less spammy
@@ -163,5 +163,8 @@ book.o: ../book.c ../common.h ../backend.h ../lists.h
 uci.o: ../uci.c ..//common.h ../backend.h ../frontend.h ../lists.h
 	$(call compile, $<)
 
+wsettings.o: wsettings.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
index 2e0b953..c78bbb4 100644
--- a/winboard/makefile.ms
+++ b/winboard/makefile.ms
@@ -15,7 +15,7 @@ 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 help.obj
+ wsockerr.obj help.obj wsettings.obj
 
 
 # Debugging?
@@ -169,6 +169,10 @@ uci.obj: ../uci.c ..//common.h ../backend.h ../frontend.h ../lists.h
         $(CC) $(CFLAGS) ../uci.c
 
 
+wsettings.obj: wsettings.c ..//common.h ../backend.h ../frontend.h ../lists.h
+        $(CC) $(CFLAGS) wsettings.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\
diff --git a/winboard/resource.h b/winboard/resource.h
index 3a886d0..565fab6 100644
--- a/winboard/resource.h
+++ b/winboard/resource.h
@@ -496,6 +496,8 @@
 #define IDC_SPECIFY_ENG_STATIC          1814
 #define IDC_SPECIFY_SERVER_STATIC       1815
 #define OPT_MESS                        1818
+#define IDM_Engine1Options		1890
+#define IDM_Engine2Options		1891
 #define IDC_STATIC                      -1
 
 // Next default values for new objects
diff --git a/winboard/wengineo.c b/winboard/wengineo.c
index b562959..1c3238f 100644
--- a/winboard/wengineo.c
+++ b/winboard/wengineo.c
@@ -547,7 +547,7 @@ void EngineOutputUpdate( FrontEndProgramStats * stats )
     if( clearMemo ) DoClearMemo(which);
 
     /* Update */
-    lastDepth[which] = depth;
+    lastDepth[which] = depth == 1 && ed.nodes == 0 ? 0 : depth; // [HGM] info-line kudge
     lastForwardMostMove[which] = forwardMostMove;
 
     if( ed.pv != 0 && ed.pv[0] == ' ' ) {
@@ -807,7 +807,8 @@ static void UpdateControls( EngineOutputData * ed )
         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 );
+	if(ed->nodes == 0 && ed->score == 0 && ed->time == 0) sprintf( buf, "%3d\t", ed->depth ); else 
+	sprintf( buf, "%3d\t%s\t%s\t%s\t", ed->depth, s_score, s_nodes, s_time );
 
         /* Add PV */
         buflen = strlen(buf);
diff --git a/winboard/winboard.c b/winboard/winboard.c
index fb98336..d6f4a45 100644
--- a/winboard/winboard.c
+++ b/winboard/winboard.c
@@ -449,6 +449,8 @@ VOID EngineOutputPopDown();
 BOOL EngineOutputIsUp();
 VOID EngineOutputUpdate( FrontEndProgramStats * stats );
 
+VOID EngineOptionsPopup(); // [HGM] settings
+
 VOID GothicPopUp(char *title, VariantClass variant);
 /*
  * Setting "frozen" should disable all user input other than deleting
@@ -856,7 +858,7 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
   wp.rcNormalPosition.bottom = boardY + winHeight;
   SetWindowPlacement(hwndMain, &wp);
 
-  SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
+  if(!appData.noGUI) SetWindowPos(hwndMain, alwaysOnTop ? HWND_TOPMOST : HWND_NOTOPMOST,
                0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
 
   if (hwndConsole) {
@@ -866,7 +868,7 @@ InitInstance(HINSTANCE hInstance, int nCmdShow, LPSTR lpCmdLine)
 #endif
     ShowWindow(hwndConsole, nCmdShow);
   }
-  UpdateWindow(hwnd);
+  if(!appData.noGUI)   UpdateWindow(hwnd);  else ShowWindow(hwnd, SW_MINIMIZE);
 
   return TRUE;
 
@@ -5094,7 +5096,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                                                                         ) {
       /* 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 */
+      /* [HGM] <sameColor> now always do UserMoveTest(), and check colors there */
 	toX = x;
 	toY = y;
         /* [HGM] <popupFix> UserMoveEvent requires two calls now,
@@ -5107,6 +5109,9 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
 		break; 
 	} else 
         if(moveType != ImpossibleMove) {
+	  if(moveType == IllegalMove) {
+		;
+	  } else
           /* [HGM] We use PromotionToKnight in Shogi to indicate frorced promotion */
           if (moveType == WhitePromotionKnight || moveType == BlackPromotionKnight ||
             ((moveType == WhitePromotionQueen || moveType == BlackPromotionQueen) &&
@@ -5124,7 +5129,7 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                      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
+		    // kludge to temporarily execute move on display, without promotng yet
 		    promotionChoice = TRUE;
 		    boards[currentMove][fromY][fromX] = EmptySquare; // move Pawn to 8th rank
 		    boards[currentMove][toY][toX] = p;
@@ -5140,23 +5145,20 @@ MouseEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                  ClearHighlights();
              }
              FinishMove(moveType, fromX, fromY, toX, toY, NULLCHAR);
-	     fromX = fromY = -1;
              if (appData.animate && !appData.highlightLastMove) {
                   ClearHighlights();
                   DrawPosition(forceFullRepaint || FALSE, NULL);
              }
           }
-          break;
+          fromX = fromY = -1;
+	  break;
         }
         if (gotPremove) {
-            /* [HGM] it seemed that braces were missing here */
-            SetPremoveHighlights(fromX, fromY, toX, toY);
-            fromX = fromY = -1;
-            break;
-        }
-      }
-      ClearHighlights();
-      DrawPosition(forceFullRepaint || FALSE, NULL);
+	    SetPremoveHighlights(fromX, fromY, toX, toY);
+            DrawPosition(forceFullRepaint || FALSE, NULL);
+	} else ClearHighlights();
+        fromX = fromY = -1;
+        DrawPosition(forceFullRepaint || FALSE, NULL);
     }
     /* First downclick, or restart on a square with same color piece */
     if (!frozen && OKToStartUserMove(x, y)) {
@@ -5652,7 +5654,7 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     
     JAWS_ALT_INTERCEPT
 
-    if (appData.icsActive && (isalpha((char)wParam) || wParam == '0')) { 
+    if (appData.icsActive && (char)wParam > ' ' && !((char)wParam >= '1' && (char)wParam <= '9')) { 
 	// [HGM] movenum: for non-zero digits we always do type-in dialog
 	HWND h = GetDlgItem(hwndConsole, OPT_ConsoleInput);
 	if (IsIconic(hwndConsole)) ShowWindow(hwndConsole, SW_RESTORE);
@@ -6127,6 +6129,14 @@ WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
       EnginePlayOptionsPopup(hwnd);
       break;
 
+    case IDM_Engine1Options:
+      EngineOptionsPopup(hwnd, &first);
+      break;
+
+    case IDM_Engine2Options:
+      EngineOptionsPopup(hwnd, &second);
+      break;
+
     case IDM_OptionsUCI:
       UciOptionsPopup(hwnd);
       break;
diff --git a/winboard/winboard.dsp b/winboard/winboard.dsp
index 35842da..5db2925 100644
--- a/winboard/winboard.dsp
+++ b/winboard/winboard.dsp
@@ -245,6 +245,10 @@ SOURCE=.\woptions.c
 # End Source File
 # Begin Source File
 
+SOURCE=.\wsettings.c
+# End Source File
+# Begin Source File
+
 SOURCE=.\wsnap.c
 # End Source File
 # Begin Source File
diff --git a/winboard/winboard.rc b/winboard/winboard.rc
index 3037858..0e9cb38 100644
--- a/winboard/winboard.rc
+++ b/winboard/winboard.rc
@@ -1142,11 +1142,13 @@ BEGIN
         MENUITEM "&General...",                 IDM_GeneralOptions
         MENUITEM "&Board...",                   IDM_BoardOptions
         MENUITEM "Adjudications...\tAlt+Shift+J",IDM_EnginePlayOptions
-        MENUITEM "Engine Settings...\tAlt+Shift+U",IDM_OptionsUCI
+        MENUITEM "Global Settings...\tAlt+Shift+U",IDM_OptionsUCI
+        MENUITEM "Engine #1 Settings...",       IDM_Engine1Options
+        MENUITEM "Engine #2 Settings...",       IDM_Engine2Options
         MENUITEM "&ICS...",                     IDM_IcsOptions, GRAYED
         MENUITEM "&Fonts...",                   IDM_Fonts
         MENUITEM "Soun&ds...",                  IDM_Sounds
-        MENUITEM "Game List...\tAlt+Shift+G",   IDM_GameListOptions
+        MENUITEM "Game List...",                IDM_GameListOptions
         MENUITEM SEPARATOR
         MENUITEM "Comm&unications...",          IDM_CommPort
         MENUITEM "&Load Game...\tAlt+Shift+L",  IDM_LoadOptions
diff --git a/winboard/winboard.rtf b/winboard/winboard.rtf
index 4531eb9..f5bbdc8 100644
--- a/winboard/winboard.rtf
+++ b/winboard/winboard.rtf
@@ -6,7 +6,7 @@
 {\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;}
+{\f23\froman\fcharset0\fprq0{\*\panose 00000000000000000000}TimesNewRoman,Italic;}{\f24\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria Math;}{\f25\fnil\fcharset129\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;}
@@ -218,7 +218,7 @@ footer;}{\s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cg
 {\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\dy22\hr20\min30}{\printim\yr1997\mo4\dy22\hr23\min5}{\version42}{\edmins887}
+\listoverridecount0\ls16}}{\*\revtbl {Unknown;}{Tim Mann;}}{\info{\title + $ # KWinBoard: Chessboard for Windows}{\author TRIO}{\operator hgm}{\creatim\yr2003\mo10\dy25\hr23\min40}{\revtim\yr2009\mo9\dy5\hr6\min5}{\printim\yr1997\mo4\dy22\hr23\min5}{\version44}{\edmins899}
 {\nofpages78}{\nofwords17967}{\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 
 
@@ -231,12 +231,12 @@ footer;}{\s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cg
 \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 \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
- mouse, and loads and saves game files in standard chess notation. WinBoard serves as a front-end for many different services, including:
+\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 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\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.
@@ -247,19 +247,19 @@ Chess servers}{\b\f1  }{\f1 on the Internet. You can play against other Internet
 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 Win
-dows 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 mod
-e, 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 \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 othe
+r 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 dou
+ble-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 chess servers. More ad
+vanced 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 rel
+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 n
 e
-ase) 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 button over a square to bring up the menu; no menu will come 
-u
-p 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 ICS mode, your typing will be redirected into the ICS interact
-ion window.
+w 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 moves 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\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
@@ -332,8 +332,8 @@ Event}{\f1  tag, by looking for the strings that the Internet Chess Servers put
 \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 n
-otation) 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 
+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. Ga
+me 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
@@ -344,13 +344,12 @@ otation) format, unless the }{\f1\uldb oldSaveStyle}{\v\f1 oldSaveStyle}{\f1  op
 \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 tha
-t many variants require an extension of the original FEN standard. WinBoard tries to be as universal as possible in understanding FENs when different standards are raound, but has to make a choice when writing them. In FRC is uses Shredder-FEN (Haha castl
-i
-ng notation) , but it understands KQkq as the outermost Rook, so it also reads X-FEN. In Crazyhouse / Bughouse it appends the holdings immediately behind the board info between brackets [], but on input it also understands bFEN (which puts it behind a sla
-s
-h / as if it were an extra board rank). It uses a tilde ~ behind a piece to indicate it is really a promoted Pawn (like bFEN). 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 
+{\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 understanding FENs when different standards ar
+e 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 the holdings immediately behind the boa
+r
+d 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 bFEN). 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.
@@ -363,8 +362,8 @@ the original piece. Letters used for the pieces can be set with the /pieceToChar
 \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 Positio
-n command; however, currently Load Position can load only the first position in a file.
+}{\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.
@@ -392,61 +391,61 @@ n command; however, currently Load Position can load only the first position in
 \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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 
+A single chess engine plays itself. Mainly 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. t
+he 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 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. Crafty was the first engine to support this feature, 
-but by now there are many others 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, b
-ut 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 tim
-e. (Basically this amounts to adding 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 In this mode, you can make moves for both sides on the board. After each move, the chess engine will think about possible rep
+lies and display its analysis in a separate window. Crafty was the first engine to support this feature, but by now there are many others 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 log
+ged 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 zi
+p
+py.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 adding 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 each 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 \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 analyz
+e each 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 typ
-e commands and receive text responses from the chess server. You can use the standard Windows 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 command. 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 \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 comm
+ands and receive text responses from the chess server. You can use the standard Windows 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 command. 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 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, empt
-y
- 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. You can also make moves by ty
-ping 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 p
-layer 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.
+\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 comma
+nds 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 
+s
+quare, 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. You can also make moves by typing t
+hem 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\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 continues to check moves for legality but does not participate i
-n 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 }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\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 .
 \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\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 po
-sition. 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 me
-nu 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 pie
-ce 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 Comm
-oner is a demoted King).}{\f1 
+\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 d
+elete 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 d
+ifferent 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 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 o
+n 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 .
@@ -462,9 +461,9 @@ lets you edit positions locally. If you want to edit positions on ICS in a way t
 \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 \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 button
+s 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\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:
@@ -473,11 +472,10 @@ Training mode lets you interactively guess the moves of a game for one of the pl
 \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 charac
-ters 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  Edi
-t 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 \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  }{
@@ -485,14 +483,14 @@ LoadGame}{\f1 , }{\f1\uldb Forward}{\v\f1 Forward}{\f1 , and }{\f1\uldb Backward
 \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 \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 eng
-ine 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 examin
-ers or observers. Select Pause again to reconnect yourself to the current state of the game on ICS.
+\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 \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 bo
+th 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\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 
@@ -516,12 +514,12 @@ K}{\f1  Action Menu}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmul
 \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 gam
-e, 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 \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 adjourne
+d 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 \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\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.
@@ -545,14 +543,14 @@ e, or agrees to a pending adjournment offer from your opponent. You continue an
 \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 standa
-rd 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 \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 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.
+\f1 . 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 o
+bserving 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\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}}#
@@ -560,23 +558,22 @@ rd algebraic chess notation. (You can also get this dialog box by simply startin
 \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 
  button 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
- 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.
+ 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\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 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 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 \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 ag
+ainst 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 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\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 view forward, and it will not go past the position the game was in when you paused.
+ 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 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  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 .
@@ -604,20 +601,18 @@ If you are playing a game on the ICS, the board is always oriented at the start
 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 \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 (i
+ncrement) 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 
+ 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 whe
+never 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 
@@ -625,14 +620,14 @@ If Animate Dragging is on while you are dragging a piece with the mouse, an imag
 \par dragging a piece, but if Animate Moving is on, the move will be animated when it 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 
  Animate 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 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 \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 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\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 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 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is on and one playe
+r 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 insufficient matin
+g 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.}{
@@ -641,17 +636,17 @@ instead and have the server call the flag. In local chess engine mode, WinBoard
 \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\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 Blindfol
-d 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 \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {If Blindfold is on, WinBoard displays a blank board. Moves can sti
+ll 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Highlight Draggi
+ng 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\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 rec
-orded time is the time reported by the engine.
+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. 
@@ -661,9 +656,8 @@ orded time is the time reported by the engine.
  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 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Per
+iodic 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\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
@@ -675,9 +669,9 @@ If this option is on, when WinBoard wants to display a message just before exiti
 \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 (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 ot
-her 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is off, when you make an error in moving (such as attempting an illegal move or mo
+ving 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 anywhe
+re 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 
@@ -688,16 +682,16 @@ her errors. You can dismiss an error popup either by clicking its OK button or b
 \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.
+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 unders
-tand. (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, k
-nightmate: 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 legality 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If Tes
+t 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, sui
+cide, 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 k
+nows 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 legality testing off, and falcon uses a wildcard piece for the Falcons, so it consid
+ers 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 
@@ -721,13 +715,12 @@ bishop, Chancellor and the wildcard Lance exist in all sizes from Petite to Bulk
 \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 color to distinguish them). If you do not cho
-ose a very dark color for the black pieces, they look very ugly without outline, and using this option can fix that.
+\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 color 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 \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
@@ -741,8 +734,8 @@ ose a very dark color for the black pieces, they look very ugly without outline,
 \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.
+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  m
+ode.
 \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.
@@ -752,34 +745,34 @@ Adjudicate a draw after the given number of moves, to prevent games from draggin
 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 WinB
-oard detect checkmate and stalemate, even before the engine gets the chance to claim it. 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 \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 it. 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, and 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 \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 i
+s 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 g
-ame as draw. Engine draw claims are always consider ed valid after 50 moves (in the context of \ldblquote Verify Claims\rdblquote 
+\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 repetitions of the same position that should occur in order for WinBoard to adjudicate the game as draw. En
-gine draw claims are always consider ed valid after 3 repetitions (in the context of \ldblquote Verify Claims\rdblquote 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Here you can set the number of repetitions of the same position that should occur in order for WinBoard to adjudicate the game as draw. Engine 
+draw claims are always considered 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 engines as if they were WinBoard 
-engines, and WinBoard will automatically invoke Polyglot as an adapter to run them.
+\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 engines 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 
@@ -788,41 +781,39 @@ EGTBPath}}}{\f1\cf6  EGTB Path, }{\cs58\f1\cf6\super K{\footnote\ftnalt \pard\pl
 \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 WinBoard 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 
+\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 
+WinBoard 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, 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 
-. Limitation: remarks that you type yourself are not 
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\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 include
+s 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\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\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  Ge
-t 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 
-receives 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 ca
-n 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 ov
-er 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 \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\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 receives the first board of a new ICS game (or a different ICS g
+ame 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 observin
+g 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, et
-c., 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 (\ldblquote quote\rdblquote 
-); 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 (\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 AS
-CII 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.
+\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 (\ldblquote quote\rdblquote ); however, the edit buffer will not accept certain control characte
+rs 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 k
+eypad; 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}{
@@ -843,13 +834,13 @@ premoveBlackText}{.
  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 t
-o 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 (includin
-g abort, adjourn, draw, pause, and takeback), seek, and normal (all other messages).
+\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 whi
+sper), 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\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, co
-mments font and ICS Interaction font are not dependent on the current size of the board.  The \ldblquote Revert to Defaults\rdblquote 
+\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, mess
+age 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 
@@ -1002,12 +993,12 @@ Save Settings on Exit}{\v\f1 SaveSettingsOnExit}{\f1 , so most people will not n
 \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\}), a
-s 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 \\
+: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 che
-ss server to connect to. To bypass 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 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 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\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 
@@ -1037,15 +1028,15 @@ moves}{\f1
 {\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 \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 -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 \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 -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\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 chess clocks. If clockMode is False, the clocks are not shown, but the side that is to play next is still highlighted. Also, unless searc
-hTime is set, the chess engine still keeps track of the clock time and uses it to determine how fast to make its moves.
+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 sea
+rchTime 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\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 
@@ -1066,9 +1057,9 @@ ts search depth based on the number of moves and amount of time remaining until
 \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 matche
-s 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!
+ 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 WinBoard clock. The engine is supposed to report in CPU time it uses, rather than wall-clock time in this mode. Th
+is 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). \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}}#
@@ -1111,8 +1102,9 @@ saveGameFile}{\v\f1 saveGameFile}{\f1  option is set, a move record for the matc
 \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 i
-s 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 \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
@@ -1126,26 +1118,25 @@ s too short, engines not implementing \lquote ping\rquote  will sometimes send t
 {\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 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.
+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 interpr
+eted 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 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 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 o
-ne 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.
+ 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 inter
+preted 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.
 \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 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 \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 }\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 be 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 options 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 tournament, 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
 
@@ -1158,8 +1149,9 @@ ournament, options hidden inside the engine command-line can contain \lquote %s\
 \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 include a "cd" command i
-n the argument to /fcp or /scp.
+ 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 include a "cd" command in the argume
+nt 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 
@@ -1175,11 +1167,11 @@ o the initString; see the GNU Chess documentati{\*\bkmkstart _Hlt386545814}o{\*\
 }}#{\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 c
-hess 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 initializa
-tion 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 \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 en
+gines 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 co
+mmands, 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 wa
+nt 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}}}
@@ -1207,14 +1199,13 @@ s. Other values for version-number are not supported.
 \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 \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-line, 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 operati
-on 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 
+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 {
@@ -1226,11 +1217,11 @@ on of WinBoard (or the rest of your system). Try priority = 10 or even 20 to low
 \f1\cf2  firstNeedsNoncompliantFEN}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2  firstNeedsNoncompliantFEN}}}{\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  secondNeedsNoncompliantFEN}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
 \nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\cf2\super #}{\f1\cf2  secondNeedsNoncompliantFEN}}}{\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. (shat
-ranj, 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 }\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 WinBoa
+rd 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
@@ -1314,25 +1305,26 @@ The host name or numeric address of the Internet Chess Server to connect to when
 \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.
+. 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\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  s
-ection below for an explanation of when this option is useful.
+ 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\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 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 internetChessServer as the first argument and the value of internetChess
-ServerPort as the second argument on its command line.
+. It gives the name of the remote or external helper program to be used with the gateway or useTelnet option. The default is "tel
+net". 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 command 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 Serve
-r 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 Internet access through another machine by dialing in using a modem or by connec
-ting directly to a serial terminal port. Example:
+\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 network (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 }{
@@ -1431,10 +1423,11 @@ Load and Save Options
 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 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 filename "-" specifies th
-e 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If loadGameFile is set, Wi
+nBoard reads the specified game file at startup. You can leave out the name 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 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 loadGameIn
+dex 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 
@@ -1445,8 +1438,8 @@ th game found in the file is loaded immediately.
 {\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 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1 If this option is set, Wi
+nBoard 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 
@@ -1459,15 +1452,15 @@ If this option is True, at the end of every game WinBoard prompts you for a file
 \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 
+\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 st
+artup. 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\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 t
-o the specified file. The filename is interpreted relative to WinBoard's initial working directory. The file name "-" specifies the standard output.
+\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 filename is interpreted relative to WinBoard's initial w
+orking 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.
@@ -1482,15 +1475,15 @@ o the specified file. The filename is interpreted relative to WinBoard's initial
 #{\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 \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 com
-mands 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 \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 Ct
+rl+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 
@@ -1499,12 +1492,11 @@ mands sent to ICS. You can press Ctrl+Alt+F12 to turn this option on or off whil
 \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 }\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 saving it in the debug file. The output is further (hopefully) ignored. If }{
+\i\f1\cf11 number}{\f1\cf11 =0, WinBoard refrains from writing such spurious output to the debug file. If}{\i\f1\cf11  number}{\f1\cf11 =1, all engine output is written faithfully to the debug file. If }{\i\f1\cf11  number}{\f1\cf11 
+=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 
@@ -1514,14 +1506,15 @@ User Interface Options
  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 
+\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 looki
-ng for a fie named logo.bmp in the engine directory (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. In this mode it will also look in a sub-folder of its instal
-lation folder called \ldblquote logos\rdblquote , for finding logos with names corresponding to the ICS (e.g. \ldblquote chessclub.com.bmp\rdblquote ) or to the human user, should they be involved in a game.
+\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 directory (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. In this mode it will also look in a sub-folder of its installation folder called \ldblquote logos\rdblquote 
+, for finding logos with names corresponding to the ICS (e.g. \ldblquote chessclub.com.bmp\rdblquote ) or to the human user, should they be involved in a 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 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 
 
@@ -1614,9 +1607,8 @@ t participating in a game, then the positioning of the board at the start of eac
 \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, yo
-u 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.
+\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 \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
@@ -1626,8 +1618,8 @@ Board Options}{\v\f1 BoardOptions}{\f1  dialog.
 \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 
+\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 int
+ensity, 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}}#
@@ -1640,14 +1632,13 @@ BoardColors}{\f1  section of the }{\f1\uldb Board Options}{\v\f1 BoardOptions}{\
 Determines whether 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 piece 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 Determines whether the white piece bitmaps will be used to display black pieces. The white pieces have a dark outline, which the black pieces lack. This makes the l
+atter 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 font 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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf6 Uses the named true-type font 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 
 characterstring}{\f1\cf6 
@@ -1782,8 +1773,8 @@ The name of a }{\f2 .wav}{\f1  file. The filename is interpreted relative to Win
 \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 either four fields separated by commas or the single character }{\f2 "-"}{\f1 . The fields are:
+ 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 opt
+ion 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\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 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.
@@ -1796,33 +1787,32 @@ A flag (1 or 0) saying whether the result should be sent immediately to ICS or l
 \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\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 \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),te
+ll,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 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 wit
-h 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 /ics /icsHost=\rdblquote 
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\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, o
+ne 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 /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 th
-e 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. 
+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 co
+ntains 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\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 
+\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  se
+condChessProgramNames}}#{\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 lis
-t 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 }\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 consist
+s 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 /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\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\\
@@ -1833,8 +1823,8 @@ Arasan\\Arasan 4.1"\line "EXchess xb" /sd=C:\\EXchess\line Comet-WB /sd=C:\\Come
 \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\cf2 These options have been deprecated, as the analysis window is replaced by the more gener
-al engine-output window. They are recognized, but ignored, and no longer saved in the winboard.ini file.
+\par }\pard\plain \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf2 These options have been deprecated, as the analysi
+s window is replaced by the more general engine-output window. They are recognized, but ignored, and no longer saved in the winboard.ini 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 
  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
@@ -1882,16 +1872,16 @@ engineOutputUp}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\no
 \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 Auxiliary windows touching the main window will stay attached to the latter when you move it.
 \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
+autoDisplayComment}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\cs58\f1\super #}{\f1  }{\f1\cf6 autoDisplayComment}}}{\f1\cf6 /autoDisplayComment }{\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 \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 p
+op 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 li
-sted for each game in 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 \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 f
+or each game in 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}}}{
@@ -1899,8 +1889,8 @@ sted for each game in the game-list window, and their order. The meaning of the
 \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 \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 bo
+th 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 
@@ -1911,8 +1901,8 @@ scorethreshold}{\f1\cf6
 {
 \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 \s26\li120\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\f1\cf11 If this option is True, WinBoard verifies all result clai
+ms 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 
 
@@ -1921,9 +1911,10 @@ If this option is True, WinBoard adjudicates games as draws when there is no suf
 
 \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 b
-elong 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 \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 c
+alled 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 
@@ -1931,8 +1922,8 @@ elong in this category, and might be taken out in the future. (When bitbase-base
 \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, WinBoard is fully e.p. and castling aware!}{\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, WinBoar
+d 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
@@ -1947,12 +1938,12 @@ If this option is True, WinBoard acts as a passive chessboard; it does not start
 \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.
+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 TwoMachin
+es, AnalyzeFile, Analysis, MachineWhite, MachineBlack, EditGame, EditPosition, and Training.
 \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 local engine or editing variant games
-. This flag is not needed in ICS mode. Recognized variant names are:
+\par }\pard\plain \li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {Activates preliminary, partial support for playing chess variants against a local engine or editing variant games. This fl
+ag 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)
@@ -1961,10 +1952,10 @@ Capablanca Chess (10x8 board, with Archbishop and Chancellor pieces)\line gothic
 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\line }{\cf2 super\tab \tab Superchess, a shuffle variant with B+N, R+N, K+N and Q+N compound\line great\tab \tab 
-Great Shatranj, whithout sliders, on 10x8 board (legality testing off!)\line }{
+Great Shatranj, variant without sliders, on 10x8 board (legality testing off!)\line }{
 \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 shat
-ranj it does implement the baring rule when mate detection is switched on.
+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 d
+oes 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.
@@ -2037,8 +2028,8 @@ option while reading settings (whether from the command line or a file), it read
 \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 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 \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {\f1 Notice that tournament managers, like 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 \s66\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cf11\cgrid {\f1 Notice that tournament managers, like 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 
@@ -2076,13 +2067,13 @@ mpt box and make sure it works before you go on.
 
 \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\\
+\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 Bro
+wse 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\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, 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 \s62\li120\sb80\sl-240\slmult0\nowidctlpar\adjustright \f5\fs20\cgrid {\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 c
+an 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
@@ -2117,8 +2108,8 @@ e scope of this document, but see the SOCKS Web site at http://www.socks.nec.com
 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 Windo
-ws 95. It does not work on Windows 3.11 or earlier, even with the Win32s compatibility package.
+\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 Window
+s 95. It does not work on Windows 3.11 or earlier, even with the Win32s compatibility package.
 \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.
@@ -2163,7 +2154,7 @@ on he added most of the adjudication options, made WinBoard ore robust in dealin
 \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 suggestions for impr
 ovements and additions, are best posted in the WinBoard forum, development section (}{\field{\*\fldinst {\f1  HYPERLINK http://www.open-aurec.com/wbforum) }{\f1 {\*\datafield 
 00d0c9ea79f9bace118c8200aa004ba90b02000000170000002300000068007400740070003a002f002f007700770077002e006f00700065006e002d00610075007200650063002e0063006f006d002f007700620066006f00720075006d0029000000e0c9ea79f9bace118c8200aa004ba90b460000006800740074007000
-3a002f002f007700770077002e006f00700065006e002d00610075007200650063002e0063006f006d002f007700620066006f00720075006d0029000000000000000000000000}}}{\fldrslt {\cs59\ul\cf2 http://www.open-aurec.com/wbforum)}}}{\f1 .
+3a002f002f007700770077002e006f00700065006e002d00610075007200650063002e0063006f006d002f007700620066006f00720075006d00290000000000000000000000000000}}}{\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 the Sava
 nnah web site and the WinBoard forum.
@@ -2173,11 +2164,11 @@ K}{\f1  Copyright}}#{\footnote\ftnalt \pard\plain \s57\li120\sb80\sl-240\slmult0
 \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-2009 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 that the above copyri
-ght 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 spec
-ific, 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 CONSEQUENTIAL DAMAGES OR ANY DAM
-AGES 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 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 CONSEQUENT
+IAL 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 3 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/wsettings.c b/winboard/wsettings.c
new file mode 100644
index 0000000..8907a3b
--- /dev/null
+++ b/winboard/wsettings.c
@@ -0,0 +1,674 @@
+/*
+ * Engine-settings dialog. The complexity come from an attempt to present the engine-defined options
+ * in a nicey formatted layout. To this end we first run a back-end pre-formatter, which will distribute
+ * the controls over two columns (the minimum required, as some are double width). It also takes care of 
+ * grouping options that start with the same word (mainly for "Polyglot ..." options). It assigns relative
+ * suitability to break points between lines, and in the end decides if and where to break up the list
+ * for display in multiple (2*N) columns.
+ * The thus obtained list representing the topology of the layout is then passed to a front-end routine
+ * that generates the actual dialog box from it.
+ */
+
+//#include "config.h"
+#include "config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include "common.h"
+#include "backend.h"
+#include "backendz.h"
+
+int layoutList[2*MAX_OPTIONS];
+int checkList[2*MAX_OPTIONS];
+int comboList[2*MAX_OPTIONS];
+int buttonList[2*MAX_OPTIONS];
+int boxList[2*MAX_OPTIONS];
+int groupNameList[2*MAX_OPTIONS];
+int breaks[MAX_OPTIONS];
+int checks, combos, buttons, layout, groups;
+
+void
+PrintOpt(int i, int right, ChessProgramState *cps)
+{
+    if(i<0) {
+	if(!right) fprintf(debugFP, "%30s", "");
+    } else {
+	Option opt = cps->option[i];
+	switch(opt.type) {
+	    case Slider:
+	    case Spin:
+		fprintf(debugFP, "%20.20s [    +/-]", opt.name);
+		break;
+	    case TextBox:
+	    case FileName:
+	    case PathName:
+		fprintf(debugFP, "%20.20s [______________________________________]", opt.name);
+		break;
+	    case CheckBox:
+		fprintf(debugFP, "[x] %-26.25s", opt.name);
+		break;
+	    case ComboBox:
+		fprintf(debugFP, "%20.20s [ COMBO ]", opt.name);
+		break;
+	    case Button:
+	    case SaveButton:
+		fprintf(debugFP, "[ %26.26s ]", opt.name);
+	    case Message:
+		break;
+	}
+    }
+    fprintf(debugFP, right ? "\n" : " ");
+}
+
+void
+CreateOptionDialogTest(int *list, int nr, ChessProgramState *cps)
+{
+    int line;
+
+    for(line = 0; line < nr; line+=2) {
+	PrintOpt(list[line+1], 0, cps);
+	PrintOpt(list[line], 1, cps);
+    }
+}
+
+void
+LayoutOptions(int firstOption, int endOption, char *groupName, Option *optionList)
+{
+    int i, b = strlen(groupName), stop, prefix, right, nextOption, firstButton = buttons;
+    Control lastType, nextType;
+
+    nextOption = firstOption;
+    while(nextOption < endOption) {
+	checks = combos = 0; stop = 0;
+	lastType = Button; // kludge to make sure leading Spin will not be prefixed
+	// first separate out buttons for later treatment, and collect consecutive checks and combos
+	while(nextOption < endOption && !stop) {
+	    switch(nextType = optionList[nextOption].type) {
+		case CheckBox: checkList[checks++] = nextOption; lastType = CheckBox; break;
+		case ComboBox: comboList[combos++] = nextOption; lastType = ComboBox; break;
+		case SaveButton:
+		case Button:  buttonList[buttons++] = nextOption; lastType = Button; break;
+		case TextBox:
+		case FileName:
+		case PathName:
+		case Slider:
+		case Spin: stop++;
+		case Message: ; // cannot happen
+	    }
+	    nextOption++;
+	}
+	// We now must be at the end, or looking at a spin or textbox (in nextType)
+	if(!stop) 
+	    nextType = Button; // kudge to flush remaining checks and combos undistorted
+	// Take a new line if a spin follows combos or checks, or when we encounter a textbox
+	if((combos+checks || nextType == TextBox) && layout&1) {
+	    layoutList[layout++] = -1;
+	}
+	// The last check or combo before a spin will be put on the same line as that spin (prefix)
+	// and will thus not be grouped with other checks and combos
+	prefix = -1;
+	if(nextType == Spin && lastType != Button) {
+	    if(lastType == CheckBox) prefix = checkList[--checks]; else
+	    if(lastType == ComboBox) prefix = comboList[--combos];
+	}
+	// if a combo is followed by a textbox, it must stay at the end of the combo/checks list to appear
+	// immediately above the textbox, so treat it as check. (A check would automatically be and remain there.)
+	if(nextType == TextBox && lastType == ComboBox)
+	    checkList[checks++] = comboList[--combos];
+	// Now append the checks behind the (remaining) combos to treat them as one group
+	for(i=0; i< checks; i++) 
+	    comboList[combos++] = checkList[i];
+	// emit the consecutive checks and combos in two columns
+	right = combos/2; // rounded down if odd!
+	for(i=0; i<right; i++) {
+	    breaks[layout/2] = 2;
+	    layoutList[layout++] = comboList[i];
+	    layoutList[layout++] = comboList[i + right];
+	}
+	// An odd check or combo (which could belong to following textBox) will be put in the left column
+	// If there was an even number of checks and combos the last one will automatically be in that position
+	if(combos&1) {
+	    layoutList[layout++] = -1;
+	    layoutList[layout++] = comboList[2*right];
+	}
+	if(nextType == TextBox) {
+	    // A textBox is double width, so must be left-adjusted, and the right column remains empty
+	    breaks[layout/2] = lastType == Button ? 0 : 100;
+	    layoutList[layout++] = -1;
+	    layoutList[layout++] = nextOption - 1;
+	} else if(nextType == Spin) {
+	    // A spin will go in the next available position (right to left!). If it had to be prefixed with
+	    // a check or combo, this next position must be to the right, and the prefix goes left to it.
+	    layoutList[layout++] = nextOption - 1;
+	    if(prefix >= 0) layoutList[layout++] = prefix;
+	}
+    }
+    // take a new line if needed
+    if(layout&1) layoutList[layout++] = -1;
+    // emit the buttons belonging in this group; loose buttons are saved for last, to appear at bottom of dialog
+    if(b) {
+	while(buttons > firstButton)
+	    layoutList[layout++] = buttonList[--buttons];
+	if(layout&1) layoutList[layout++] = -1;
+    }
+}
+
+char *
+EndMatch(char *s1, char *s2)
+{
+	char *p, *q;
+	p = s1; while(*p) p++;
+	q = s2; while(*q) q++;
+	while(p > s1 && q > s2 && *p == *q) { p--; q--; }
+	if(p[1] == 0) return NULL;
+	return p+1;
+}
+
+void
+DesignOptionDialog(ChessProgramState *cps)
+{
+    int k=0, n=0;
+    char buf[MSG_SIZ];
+
+    layout = 0;
+    buttons = groups = 0;
+    while(k < cps->nrOptions) { // k steps through 'solitary' options
+	// look if we hit a group of options having names that start with the same word
+	int groupSize = 1, groupNameLength = 50;
+	sscanf(cps->option[k].name, "%s", buf); // get first word of option name
+	while(k + groupSize < cps->nrOptions &&
+	      strstr(cps->option[k+groupSize].name, buf) == cps->option[k+groupSize].name) {
+		int j;
+		for(j=0; j<groupNameLength; j++) // determine common initial part of option names
+		    if( cps->option[k].name[j] != cps->option[k+groupSize].name[j]) break;
+		groupNameLength = j;
+		groupSize++;
+		
+	}
+	if(groupSize > 3) {
+		// We found a group to terminates the current section
+		LayoutOptions(n, k, "", cps->option); // flush all solitary options appearing before the group
+		groupNameList[groups] = groupNameLength;
+		boxList[groups++] = layout; // group start in even entries
+		LayoutOptions(k, k+groupSize, buf, cps->option); // flush the group
+		boxList[groups++] = layout; // group end in odd entries
+		k = n = k + groupSize;
+#if 0
+	} else {
+		// try to recognize "two-column groups" based on option suffix
+		int j = 1;
+		while((p = EndMatch(cps->option[k].name, EndMatch(cps->option[k+2*j].name)) &&
+		      (q = EndMatch(cps->option[k+1].name, EndMatch(cps->option[k+2*j+1].name)) ) j++;
+#endif
+	} else k += groupSize; // small groups are grouped with the solitary options
+    }
+    if(n != k) LayoutOptions(n, k, "", cps->option); // flush remaining solitary options
+    // decide if and where we break into two column pairs
+    
+    // Emit buttons and add OK and cancel
+//    for(k=0; k<buttons; k++) layoutList[layout++] = buttonList[k];
+    // Create the dialog window
+    if(appData.debugMode) CreateOptionDialogTest(layoutList, layout, cps);
+//    CreateOptionDialog(layoutList, layout, cps);
+}
+
+#include <windows.h>
+
+extern HINSTANCE hInst;
+
+typedef struct {
+    DLGITEMTEMPLATE item;
+    WORD code;
+    WORD controlType;
+    wchar_t d1, data;
+    WORD creationData;
+} Item;
+
+struct {
+    DLGTEMPLATE header;
+    WORD menu;
+    WORD winClass;
+    wchar_t title[20];
+    WORD pointSize;
+    wchar_t fontName[14];
+    Item control[MAX_OPTIONS];
+} template = {
+    { DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SETFONT, 0, 0, 0, 0, 295, 300 },
+    0x0000, 0x0000, L"Engine #1 Settings ", 8, L"MS Sans Serif"
+};
+
+ChessProgramState *activeCps;
+
+void
+SetOptionValues(HWND hDlg, ChessProgramState *cps)
+// Put all current option values in controls, and write option names next to them
+{
+    HANDLE hwndCombo;
+    int i, k;
+    char **choices, title[MSG_SIZ], *name;
+
+    for(i=0; i<layout+buttons; i++) {
+	int j=layoutList[i];
+	if(j == -2) SetDlgItemText( hDlg, 2000+2*i, ". . ." );
+	if(j<0) continue;
+	name = cps->option[j].name;
+	if(strstr(name, "Polyglot ") == name) name += 9;
+	SetDlgItemText( hDlg, 2000+2*i, name );
+//if(appData.debugMode) fprintf(debugFP, "# %s = %d\n",cps->option[j].name, cps->option[j].value );
+	switch(cps->option[j].type) {
+	    case Spin:
+		SetDlgItemInt( hDlg, 2001+2*i, cps->option[j].value, TRUE );
+		break;
+	    case TextBox:
+		SetDlgItemText( hDlg, 2001+2*i, cps->option[j].textValue );
+		break;
+	    case CheckBox:
+		CheckDlgButton( hDlg, 2000+2*i, cps->option[j].value != 0);
+		break;
+	    case ComboBox:
+		choices = (char**) cps->option[j].textValue;
+		hwndCombo = GetDlgItem(hDlg, 2001+2*i);
+		SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0);
+		for(k=0; k<cps->option[j].max; k++) {
+		    SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) choices[k]);
+		}
+		SendMessage(hwndCombo, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) choices[cps->option[j].value]);
+		break;
+	    case Button:
+	    case SaveButton:
+	    default:
+		break;
+	}
+    }
+    SetDlgItemText( hDlg, IDOK, "OK" );
+    SetDlgItemText( hDlg, IDCANCEL, "Cancel" );
+    sprintf(title, "%s Engine Settings (%s)", cps->which, cps->tidy); 
+    title[0] &= ~32; // capitalize
+    SetWindowText( hDlg, title);
+    for(i=0; i<groups; i+=2) { 
+	int id, p; char buf[MSG_SIZ];
+	id = k = boxList[i];
+	if(layoutList[k] < 0) k++;
+	if(layoutList[k] < 0) continue;
+	for(p=0; p<groupNameList[i]; p++) buf[p] = cps->option[layoutList[k]].name[p];
+	buf[p] = 0;
+	SetDlgItemText( hDlg, 2000+2*(id+MAX_OPTIONS), buf );
+    }
+}
+
+
+void
+GetOptionValues(HWND hDlg, ChessProgramState *cps)
+// read out all controls, and if value is altered, remember it and send it to the engine
+{
+    HANDLE hwndCombo;
+    int i, k, new=0, changed=0;
+    char **choices, newText[MSG_SIZ], buf[MSG_SIZ];
+    BOOL success;
+
+    for(i=0; i<layout; i++) {
+	int j=layoutList[i];
+	if(j<0) continue;
+	switch(cps->option[j].type) {
+	    case Spin:
+		new = GetDlgItemInt( hDlg, 2001+2*i, &success, TRUE );
+		if(!success) break;
+		if(new < cps->option[j].min) new = cps->option[j].min;
+		if(new > cps->option[j].max) new = cps->option[j].max;
+		changed = 2*(cps->option[j].value != new);
+		cps->option[j].value = new;
+		break;
+	    case TextBox:
+	    case FileName:
+	    case PathName:
+		success = GetDlgItemText( hDlg, 2001+2*i, newText, MSG_SIZ - strlen(cps->option[j].name) - 9 );
+		if(!success) break;
+		changed = strcmp(cps->option[j].textValue, newText) != 0;
+		strcpy(cps->option[j].textValue, newText);
+		break;
+	    case CheckBox:
+		new = IsDlgButtonChecked( hDlg, 2000+2*i );
+		changed = 2*(cps->option[j].value != new);
+		cps->option[j].value = new;
+		break;
+	    case ComboBox:
+		choices = (char**) cps->option[j].textValue;
+		hwndCombo = GetDlgItem(hDlg, 2001+2*i);
+		success = GetDlgItemText( hDlg, 2001+2*i, newText, MSG_SIZ );
+		if(!success) break;
+		new = -1;
+		for(k=0; k<cps->option[j].max; k++) {
+		    if(!strcmp(choices[k], newText)) new = k;
+		}
+		changed = new >= 0 && (cps->option[j].value != new);
+		if(changed) cps->option[j].value = new;
+		break;
+	    case Button:
+	    default:
+		break; // are treated instantly, so they have been sent already
+	}
+	if(changed == 2) sprintf(buf, "option %s=%d\n", cps->option[j].name, new); else
+	if(changed == 1) sprintf(buf, "option %s=%s\n", cps->option[j].name, newText);
+	if(changed) SendToProgram(buf, cps);
+    }
+}
+
+LRESULT CALLBACK SettingsProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
+{
+    char buf[MSG_SIZ];
+    int i, j;
+
+    switch( message )
+    {
+    case WM_INITDIALOG:
+
+//        CenterWindow(hDlg, GetWindow(hDlg, GW_OWNER));
+	SetOptionValues(hDlg, activeCps);
+
+//        SetFocus(GetDlgItem(hDlg, IDC_NFG_Edit));
+
+        break;
+
+    case WM_COMMAND:
+        switch( LOWORD(wParam) ) {
+        case IDOK:
+	    GetOptionValues(hDlg, activeCps);
+            EndDialog( hDlg, 0 );
+            return TRUE;
+
+        case IDCANCEL:
+            EndDialog( hDlg, 1 );   
+            return TRUE;
+
+	default:
+	    // program-defined push buttons
+	    i = LOWORD(wParam);
+	    if( i>=2000 &&  i < 2000+2*(layout+buttons)) {
+		j = layoutList[(i - 2000)/2];
+		if(j == -2) {
+		          char filter[] = 
+				"All files\0*.*\0BIN Files\0*.bin\0LOG Files\0*.log\0INI Files\0*.ini\0\0";
+/*
+{ 
+		              '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, i+3, buf );
+		          }
+		}
+		if(j < 0) break;
+		if( activeCps->option[j].type  == SaveButton)
+		     GetOptionValues(hDlg, activeCps);
+		else if( activeCps->option[j].type  != Button) break;
+		sprintf(buf, "option %s\n", activeCps->option[j].name);
+		SendToProgram(buf, activeCps);
+	    }
+	    break;
+        }
+
+        break;
+    }
+
+    return FALSE;
+}
+
+#if 0
+// example copied from MS docs
+#define ID_HELP   150
+#define ID_TEXT   200
+
+LPWORD lpwAlign(LPWORD lpIn)
+{
+    ULONG ul;
+
+    ul = (ULONG)lpIn;
+    ul ++;
+    ul >>=1;
+    ul <<=1;
+    return (LPWORD)ul;
+}
+
+LRESULT DisplayMyMessage(HINSTANCE hinst, HWND hwndOwner, LPSTR lpszMessage)
+{
+    HGLOBAL hgbl;
+    LPDLGTEMPLATE lpdt;
+    LPDLGITEMTEMPLATE lpdit;
+    LPWORD lpw;
+    LPWSTR lpwsz;
+    LRESULT ret;
+    int nchar;
+
+    hgbl = GlobalAlloc(GMEM_ZEROINIT, 1024);
+    if (!hgbl)
+        return -1;
+ 
+    lpdt = (LPDLGTEMPLATE)GlobalLock(hgbl);
+ 
+    // Define a dialog box.
+ 
+    lpdt->style = WS_POPUP | WS_BORDER | WS_SYSMENU | DS_MODALFRAME | WS_CAPTION;
+//		  WS_POPUP |             WS_SYSMENU | DS_MODALFRAME | WS_CAPTION | DS_SETFONT
+    lpdt->cdit = 3;         // Number of controls
+    lpdt->x  = 10;  lpdt->y  = 10;
+    lpdt->cx = 100; lpdt->cy = 100;
+
+    lpw = (LPWORD)(lpdt + 1);
+    *lpw++ = 0;             // No menu
+    *lpw++ = 0;             // Predefined dialog box class (by default)
+
+    lpwsz = (LPWSTR)lpw;
+    nchar = 1 + MultiByteToWideChar(CP_ACP, 0, "My Dialog", -1, lpwsz, 50);
+    lpw += nchar;
+
+    //-----------------------
+    // Define an OK button.
+    //-----------------------
+    lpw = lpwAlign(lpw);    // Align DLGITEMTEMPLATE on DWORD boundary
+    lpdit = (LPDLGITEMTEMPLATE)lpw;
+    lpdit->x  = 10; lpdit->y  = 70;
+    lpdit->cx = 80; lpdit->cy = 20;
+    lpdit->id = IDOK;       // OK button identifier
+    lpdit->style = WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON;
+
+    lpw = (LPWORD)(lpdit + 1);
+    *lpw++ = 0xFFFF;
+    *lpw++ = 0x0080;        // Button class
+
+    lpwsz = (LPWSTR)lpw;
+    nchar = 1 + MultiByteToWideChar(CP_ACP, 0, "OK", -1, lpwsz, 50);
+    lpw += nchar;
+    lpw = lpwAlign(lpw);    // Align creation data on DWORD boundary
+    *lpw++ = 0;             // No creation data
+
+    //-----------------------
+    // Define a Help button.
+    //-----------------------
+    lpw = lpwAlign(lpw);    // Align DLGITEMTEMPLATE on DWORD boundary
+    lpdit = (LPDLGITEMTEMPLATE)lpw;
+    lpdit->x  = 55; lpdit->y  = 10;
+    lpdit->cx = 40; lpdit->cy = 20;
+    lpdit->id = ID_HELP;    // Help button identifier
+    lpdit->style = WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON;
+
+    lpw = (LPWORD)(lpdit + 1);
+    *lpw++ = 0xFFFF;
+    *lpw++ = 0x0080;        // Button class atom
+
+    lpwsz = (LPWSTR)lpw;
+    nchar = 1 + MultiByteToWideChar(CP_ACP, 0, "Help", -1, lpwsz, 50);
+    lpw += nchar;
+    lpw = lpwAlign(lpw);    // Align creation data on DWORD boundary
+    *lpw++ = 0;             // No creation data
+
+    //-----------------------
+    // Define a static text control.
+    //-----------------------
+    lpw = lpwAlign(lpw);    // Align DLGITEMTEMPLATE on DWORD boundary
+    lpdit = (LPDLGITEMTEMPLATE)lpw;
+    lpdit->x  = 10; lpdit->y  = 10;
+    lpdit->cx = 40; lpdit->cy = 20;
+    lpdit->id = ID_TEXT;    // Text identifier
+    lpdit->style = WS_CHILD | WS_VISIBLE | SS_LEFT;
+
+    lpw = (LPWORD)(lpdit + 1);
+    *lpw++ = 0xFFFF;
+    *lpw++ = 0x0082;        // Static class
+
+    for (lpwsz = (LPWSTR)lpw; *lpwsz++ = (WCHAR)*lpszMessage++;);
+    lpw = (LPWORD)lpwsz;
+    lpw = lpwAlign(lpw);    // Align creation data on DWORD boundary
+    *lpw++ = 0;             // No creation data
+
+    GlobalUnlock(hgbl); 
+    ret = DialogBoxIndirect(hinst, 
+                           (LPDLGTEMPLATE)hgbl, 
+                           hwndOwner, 
+                           (DLGPROC)DialogProc); 
+    GlobalFree(hgbl); 
+    return ret; 
+}
+#endif
+
+void AddControl(int x, int y, int w, int h, int type, int style, int n)
+{
+    int i;
+
+    i = template.header.cdit++;
+    template.control[i].item.style = style;
+    template.control[i].item.dwExtendedStyle = 0;
+    template.control[i].item.x = x;
+    template.control[i].item.y = y;
+    template.control[i].item.cx = w;
+    template.control[i].item.cy = h;
+    template.control[i].item.id = 2000 + n;
+    template.control[i].code = 0xFFFF;
+    template.control[i].controlType = type;
+    template.control[i].d1 = ' ';
+    template.control[i].data = 0;
+    template.control[i].creationData = 0;
+}
+
+void AddOption(int x, int y, Control type, int i)
+{
+
+    switch(type) {
+	case Slider:
+	case Spin:
+	    AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i);
+	    AddControl(x+95, y, 50, 11, 0x0081, ES_AUTOHSCROLL | ES_NUMBER | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1);
+	    break;
+//	case TextBox:
+	    AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i);
+	    AddControl(x+95, y, 190, 11, 0x0081, ES_AUTOHSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1);
+	    break;
+	case TextBox:  // For now all text edits get a browse button, as long as -file and -path options are not yet implemented
+	case FileName:
+	case PathName:
+	    AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i);
+	    AddControl(x+95, y, 180, 11, 0x0081, ES_AUTOHSCROLL | WS_BORDER | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1);
+	    AddControl(x+275, y, 20, 12, 0x0080, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i-2);
+	    layoutList[i/2-1] = -2;
+	    break;
+	case CheckBox:
+	    AddControl(x, y, 145, 11, 0x0080, BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i);
+	    break;
+	case ComboBox:
+	    AddControl(x, y+1, 95, 9, 0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, i);
+	    AddControl(x+95, y-1, 50, 500, 0x0085, CBS_AUTOHSCROLL | CBS_DROPDOWN | WS_VISIBLE | WS_CHILD | WS_TABSTOP, i+1);
+	    break;
+	case Button:
+	case SaveButton:
+	    AddControl(x-2, y, 65, 13, 0x0080, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, i);
+	case Message:
+	    break;
+    }
+    
+}
+
+void
+CreateDialogTemplate(int *layoutList, int nr, ChessProgramState *cps)
+{
+    int i, j, x=1, y=0, buttonRows, breakPoint = -1, k=0;
+
+    template.header.cdit = 0;
+    template.header.cx = 307;
+    buttonRows = (buttons + 1 + 3)/4; // 4 per row, rounded up
+    if(nr > 50) { 
+	breakPoint = (nr+2*buttonRows+1)/2 & ~1;
+	template.header.cx = 625;
+    }
+
+    for(i=0; i<nr; i++) {
+	if(k < groups && i == boxList[k]) {
+	    y += 10;
+	    AddControl(x+2, y+13*(i>>1)-2, 301, 13*(boxList[k+1]-boxList[k]>>1)+8, 
+						0x0082, WS_VISIBLE | WS_CHILD | SS_BLACKFRAME, 2400);
+	    AddControl(x+60, y+13*(i>>1)-6, 10*groupNameList[k]/3, 10, 
+						0x0082, SS_ENDELLIPSIS | WS_VISIBLE | WS_CHILD, 2*(i+MAX_OPTIONS));
+	}
+	j = layoutList[i];
+	if(j >= 0)
+	    AddOption(x+155-150*(i&1), y+13*(i>>1)+5, cps->option[j].type, 2*i);
+	if(k < groups && i+1 == boxList[k+1]) {
+	    k += 2; y += 4;
+	}
+	if(i+1 == breakPoint) { x += 318; y = -13*(breakPoint>>1); }
+    }
+    // add butons at the bottom of dialog window
+    y += 13*(nr>>1)+5;
+
+    AddControl(x+275, y+18*(buttonRows-1), 25, 15, 0x0080, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, IDOK-2000);
+    AddControl(x+235, y+18*(buttonRows-1), 35, 15, 0x0080, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, IDCANCEL-2000);
+    for(i=0; i<buttons; i++) {
+	AddControl(x+70*(i%4)+5, y+18*(i/4), 65, 15, 0x0080, BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD, 2*(nr+i));
+	layoutList[nr+i] = buttonList[i];
+    }
+    template.title[8] = cps == &first ? '1' :  '2';
+    template.header.cy = y += 18*buttonRows+2;
+    template.header.style &= ~WS_VSCROLL;
+#if 0
+    if(y > 300) {
+	template.header.cx = 295;
+	template.header.cy = 300;
+	template.header.style |= WS_VSCROLL;
+    }
+#endif
+}
+
+void 
+EngineOptionsPopup(HWND hwnd, ChessProgramState *cps)
+{
+    FARPROC lpProc = MakeProcInstance( (FARPROC) SettingsProc, hInst );
+
+    activeCps = cps;
+    DesignOptionDialog(cps);
+    CreateDialogTemplate(layoutList, layout, cps);
+
+
+    DialogBoxIndirect( hInst, &template.header, hwnd, (DLGPROC)lpProc );
+
+    FreeProcInstance(lpProc);
+
+    return;
+}
+
+
diff --git a/xboard.c b/xboard.c
index b739ed0..7b1fe43 100644
--- a/xboard.c
+++ b/xboard.c
@@ -1022,7 +1022,7 @@ XtResource clientResources[] = {
     { "localLineEditing", "localLineEditing", XtRBoolean,
 	sizeof(Boolean), XtOffset(AppDataPtr, localLineEditing),
 	XtRImmediate, (XtPointer) True }, /* not implemented, must be True */
-#ifdef ZIPPY
+#if ZIPPY
     { "zippyTalk", "zippyTalk", XtRBoolean,
 	sizeof(Boolean), XtOffset(AppDataPtr, zippyTalk),
 	XtRImmediate, (XtPointer) ZIPPY_TALK },
@@ -1229,6 +1229,9 @@ XtResource clientResources[] = {
     { "adjudicateLossThreshold", "adjudicateLossThreshold", XtRInt,
 	sizeof(int), XtOffset(AppDataPtr, adjudicateLossThreshold),
 	XtRImmediate, (XtPointer) 0},
+    { "adjudicateDrawMoves", "adjudicateDrawMoves", XtRInt,
+	sizeof(int), XtOffset(AppDataPtr, adjudicateDrawMoves),
+	XtRImmediate, (XtPointer) 0},
     { "pgnEventHeader", "pgnEventHeader", XtRString,
         sizeof(String), XtOffset(AppDataPtr, pgnEventHeader),
 	XtRImmediate, (XtPointer) "Computer Chess Game" },
@@ -1697,6 +1700,7 @@ XrmOptionDescRec shellOptions[] = {
     { "-pgnExtendedInfo", "pgnExtendedInfo", XrmoptionSepArg, NULL },
     { "-hideThinkingFromHuman", "hideThinkingFromHuman", XrmoptionSepArg, NULL },
     { "-adjudicateLossThreshold", "adjudicateLossThreshold", XrmoptionSepArg, NULL },
+    { "-adjudicateDrawMoves", "adjudicateDrawMoves", XrmoptionSepArg, NULL },
     { "-pgnEventHeader", "pgnEventHeader", XrmoptionSepArg, NULL },
     { "-firstIsUCI", "firstIsUCI", XrmoptionSepArg, NULL },
     { "-secondIsUCI", "secondIsUCI", XrmoptionSepArg, NULL },
@@ -2316,6 +2320,19 @@ void InitDrawingSizes(BoardSize boardSize, int flags)
 }
 #endif
 
+void EscapeExpand(char *p, char *q)
+{	// [HGM] initstring: routine to shape up string arguments
+	while(*p++ = *q++) if(p[-1] == '\\')
+	    switch(*q++) {
+		case 'n': p[-1] = '\n'; break;
+		case 'r': p[-1] = '\r'; break;
+		case 't': p[-1] = '\t'; break;
+		case '\\': p[-1] = '\\'; break;
+		case 0: *p = 0; return;
+		default: p[-1] = q[-1]; break;
+	    }
+}
+
 int
 main(argc, argv)
      int argc;
@@ -2374,7 +2391,6 @@ main(argc, argv)
 #endif
 #endif
 
-
     setbuf(stdout, NULL);
     setbuf(stderr, NULL);
     debugFP = stderr;
@@ -2415,16 +2431,6 @@ main(argc, argv)
 	exit(2);
     }
 
-    if ((chessDir = (char *) getenv("CHESSDIR")) == NULL) {
-	chessDir = ".";
-    } else {
-	if (chdir(chessDir) != 0) {
-	    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;
@@ -2437,6 +2443,28 @@ main(argc, argv)
 			      clientResources, XtNumber(clientResources),
 			      NULL, 0);
 
+    { // [HGM] initstring: kludge to fix bad bug. expand '\n' characters in init string and computer string.
+	static char buf[MSG_SIZ];
+	EscapeExpand(buf, appData.initString);
+	appData.initString = strdup(buf);
+	EscapeExpand(buf, appData.secondInitString);
+	appData.secondInitString = strdup(buf);
+	EscapeExpand(buf, appData.firstComputerString);
+	appData.firstComputerString = strdup(buf);
+	EscapeExpand(buf, appData.secondComputerString);
+	appData.secondComputerString = strdup(buf);
+    }
+
+    if ((chessDir = (char *) getenv("CHESSDIR")) == NULL) {
+	chessDir = ".";
+    } else {
+	if (chdir(chessDir) != 0) {
+	    fprintf(stderr, _("%s: can't cd to CHESSDIR: "), programName);
+	    perror(chessDir);
+	    exit(1);
+	}
+    }
+
     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)  {
@@ -3949,9 +3977,23 @@ void CreateXPMPieces()
 		if ((r=XpmReadFileToPixmap(xDisplay, xBoardWindow, buf,
 					   &(xpmPieceBitmap2[kind][piece]),
 					   NULL, &attr)) != 0) {
-		    fprintf(stderr, _("Error %d loading XPM file \"%s\"\n"),
-			    r, buf);
-		    exit(1);
+		    if(piece != (int)WhiteKing && piece > (int)WhiteQueen) {
+		      // [HGM] missing: read of unorthodox piece failed; substitute King.
+		      snprintf(buf, sizeof(buf), "%s/k%s%u.xpm",
+				ExpandPathName(appData.pixmapDirectory),
+				xpmkind[kind], ss);
+			if (appData.debugMode) {
+			    fprintf(stderr, _("(Replace by File:%s:) "), buf);
+			}
+			r=XpmReadFileToPixmap(xDisplay, xBoardWindow, buf,
+						&(xpmPieceBitmap2[kind][piece]),
+						NULL, &attr);
+		    }
+		    if (r != 0) {
+			fprintf(stderr, _("Error %d loading XPM file \"%s\"\n"),
+				r, buf);
+			exit(1);
+		    }
 		}
 		if(piece <= (int) WhiteKing) 
 		    xpmPieceBitmap[kind][piece] = xpmPieceBitmap2[kind][piece];
@@ -5140,14 +5182,18 @@ void HandleUserMove(w, event, prms, nprms)
 	x >= 0 && y >= 0) {
 	ChessSquare fromP;
 	ChessSquare toP;
+	int frc;
 
 	/* Check if clicking again on the same color piece */
 	fromP = boards[currentMove][fromY][fromX];
 	toP = boards[currentMove][y][x];
-	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)) {
+	frc = gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom;
+ 	if ((WhitePawn <= fromP && fromP <= WhiteKing && // [HGM] this test should go, as UserMoveTest now does it.
+	     WhitePawn <= toP && toP <= WhiteKing &&
+	     !(fromP == WhiteKing && toP == WhiteRook && frc)) ||   
+	    (BlackPawn <= fromP && fromP <= BlackKing && 
+	     BlackPawn <= toP && toP <= BlackKing &&
+	     !(fromP == BlackKing && toP == BlackRook && frc))) {
 	    /* Clicked again on same color piece -- changed his mind */
 	    second = (x == fromX && y == fromY);
 	    if (appData.highlightDragging) {
@@ -9437,4 +9483,4 @@ SetProgramStats( FrontEndProgramStats * stats )
   // [HR] TODO
   // [HGM] done, but perhaps backend should call this directly?
     EngineOutputUpdate( stats );
-}
+}
\ No newline at end of file
diff --git a/xboard.texi b/xboard.texi
index 0657847..e964ab3 100644
--- a/xboard.texi
+++ b/xboard.texi
@@ -183,6 +183,7 @@ and XBoard adapts automatically.) 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, crazyhouse, bughouse.
+(But not every board size has built-in bitmaps for un-orthodox pieces!)
 @item Load Game
 @cindex Load Game, Menu Item
 Plays a game from a record file. The @kbd{g} key is a keyboard equivalent.
@@ -2201,12 +2202,21 @@ fairy         A catchall variant in which all piece types
 unknown       Catchall for other unknown variants
 @end example
 
+NOT ALL BOARDSIZES PROVIDE A COMPLETE SET OF BUILT-IN BITMAPS FOR ALL
+UN-ORTHODOX PIECES, though. Only in @code{boardSize} middling and bulky
+all 22 piece types are provided, while -boardSize petite has most
+of them. Archbishop, Chancellor and Amazon are supported in every
+size from petite to bulky. Kings or Amazons are substituted for
+missing bitmaps. You can still play variants needing un-orthodox
+pieces in other board sizes providing your own bitmaps through the
+ at code{bitmapDirectory} or @code{pixmapDirectory} options.
+
 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 (off-board
-interposition on mate), losers, suicide, giveaway, atomic, and 3check
-are not fully understood.  
+interposition on mate) are not fully understood, but losers, suicide, 
+giveaway, atomic, and 3check should be OK.
 Berolina and cylinder chess can only be played with legality testing off.
 In crazyhouse, XBoard now does keep
 track of off-board pieces.  In shatranj it does implement the baring
diff --git a/xengineoutput.c b/xengineoutput.c
index 29e987e..54c8859 100644
--- a/xengineoutput.c
+++ b/xengineoutput.c
@@ -1,979 +1,980 @@
-/*
- * Engine output (PV)
- *
- * Author: Alessandro Scotti (Dec 2005)
- *
- * Copyright 2005 Alessandro Scotti
- *
- * Enhancements 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.  */
-
-#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(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);
-}
+/*
+ * Engine output (PV)
+ *
+ * Author: Alessandro Scotti (Dec 2005)
+ *
+ * Copyright 2005 Alessandro Scotti
+ *
+ * Enhancements 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.  */
+
+#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 == 1 && ed.nodes == 0 ? 0 : depth; // [HGM] info-line kudge
+    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... */
+	if(ed->nodes == 0 && ed->score == 0 && ed->time == 0) sprintf( buf, "%3d\t", ed->depth ); else 
+        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(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/xoptions.c b/xoptions.c
index 04924c7..da6a825 100644
--- a/xoptions.c
+++ b/xoptions.c
@@ -1,1728 +1,1752 @@
-/*
- * 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++) {
-	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(last, 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, last);  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
-
+/*
+ * 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);
+
+    j=0;
+    XtSetArg(args[j], XtNfromVert, buttonDesc[14].handle);  j++;
+//    XtSetArg(args[j], XtNheight, 70); j++;
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;
+    XtSetArg(args[j], XtNright, XtChainRight);  j++;
+    XtSetArg(args[j], XtNlabel, _("WARNING: variants with un-orthodox\n"
+				  "pieces only have built-in bitmaps\n"
+				  "for -boardSize middling, bulky and\n"
+				  "petite, and substitute king or amazon\n"
+				  "for missing bitmaps. (See manual.)")); j++;
+    XtCreateManagedWidget("warning", labelWidgetClass, form, args, j);
+
+    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, leftMargin = NULL;
+    Window root, child;
+    int x, y, i, j, height, width, h, c;
+    int win_x, win_y;
+    unsigned int mask;
+    char def[80], *p, *q;
+    static char pane[6] = "paneX";
+
+    // to do: start up second engine if needed
+    if(!cps->initDone || !cps->nrOptions) return; // nothing to be done
+    currentCps = cps;
+
+    if(cps->nrOptions > 50) width = 4; else if(cps->nrOptions>24) width = 2; else width = 1;
+    height = cps->nrOptions / width + 1;
+    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));
+  for(c=0; c<width; c++) {
+    pane[4] = 'A'+c;
+    form =
+      XtCreateManagedWidget(pane, formWidgetClass, layout,
+			    formArgs, XtNumber(formArgs));
+    j=0;
+    XtSetArg(args[j], XtNfromHoriz, leftMargin);  j++;
+    XtSetValues(form, args, j);
+    leftMargin = form;
+
+    last = NULL;
+    for(h=0; h<height; h++) {
+	i = h + c*height;
+        if(i >= cps->nrOptions) break;
+	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(last, 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, last);  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
\ No newline at end of file
diff --git a/zippy.c b/zippy.c
index 9f5b2a8..5626092 100644
--- a/zippy.c
+++ b/zippy.c
@@ -1,1170 +1,1170 @@
-/*
- * zippy.c -- Implements Zippy the Pinhead chess player on ICS in 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.
- *
- * Enhancements Copyright 2005 Alessandro Scotti
- *
- * 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 char zippyOffender[MSG_SIZ]; // [HGM] aborter
-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);
-    if(forwardMostMove < appData.zippyShortGame) 
-	strcpy(zippyOffender, zippyLastOpp); else zippyOffender[0] = 0; // [HGM] aborter
-}
-
-/*
- * 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;
-    }
-
-    /* [HGM] aborter: opponent is cheater that aborts games he doesn't like on first move. Make him wait */
-    if (strcmp(opponent, zippyOffender) == 0 &&
-	difftime(time(0), zippyLastGameEnd) < appData.zippyReplayTimeout) {
-      sprintf(buf, "%stell %s Sorry, your previous game against %s was rather short. "
-		   " It will wait %d seconds to see if a tougher opponent comes along.\n%sdecline %s\n",
-	      ics_prefix, opponent, 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);
-}
+/*
+ * zippy.c -- Implements Zippy the Pinhead chess player on ICS in 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.
+ *
+ * Enhancements Copyright 2005 Alessandro Scotti
+ *
+ * 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 char zippyOffender[MSG_SIZ]; // [HGM] aborter
+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);
+    if(forwardMostMove < appData.zippyShortGame) 
+	strcpy(zippyOffender, zippyLastOpp); else zippyOffender[0] = 0; // [HGM] aborter
+}
+
+/*
+ * 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;
+    }
+
+    /* [HGM] aborter: opponent is cheater that aborts games he doesn't like on first move. Make him wait */
+    if (strcmp(opponent, zippyOffender) == 0 &&
+	difftime(time(0), zippyLastGameEnd) < appData.zippyReplayTimeout) {
+      sprintf(buf, "%stell %s Sorry, your previous game against %s was rather short. "
+		   " It will wait %d seconds to see if a tougher opponent comes along.\n%sdecline %s\n",
+	      ics_prefix, opponent, 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);
+}

-- 
xboard PKG



More information about the Pkg-games-commits mailing list