Internationalize EPD messages
[xboard.git] / engine-intf.html
index 6fb7c11..bc4815f 100644 (file)
@@ -1,38 +1,57 @@
-<html>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\r
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">\r
 <head>\r
 <title>Chess Engine Communication Protocol</title>\r
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />\r
+<style type="text/css">\r
+  .header { \r
+  border-top:2px solid black;\r
+  border-bottom:2px solid black;\r
+  }\r
+  .version1 { color: red;}\r
+  .version43 { color: green;}\r
+  .version44 { color: blue; }\r
+  .version47 { color: purple; }\r
+  .version48 { color: brown; }\r
+\r
+  table tr { text-align: left}\r
+  tr > td:first-child { font-weight:bold;}\r
+  dt { font-weight:bold;}\r
+\r
+  </style>\r
+\r
 </head>\r
 \r
 <body>\r
-<hr noshade size="2">\r
+<div class="header">\r
 <h1>Chess Engine Communication Protocol</h1>\r
-<h1><font color=green>Discussion Proposal</font></h1>\r
 <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>\r
 <p>\r
-$Id: engine-intf.html,v 2.1 2003/10/27 19:21:00 mann Exp $<br>\r
-Version 2; implemented in xboard/WinBoard 4.2.1 and later.<br>\r
-Changes since version 1 are indicated in <font color=red>red</font>.<br>\r
-Changes for WinBoard 4.3.xx are indicated in <font color=green>green</font>.<br>\r
-Proposed changes, implemented only in alpha versions are indicated in <font color=blue>blue</font>.\r
-<hr noshade size="2">\r
+Version 2; implemented in xboard/WinBoard 4.2.1 and later. (Sept 3, 2009)<br />\r
+Changes since version 1 are indicated in <span class="version1">red</span>.<br />\r
+Changes for WinBoard 4.3.xx are indicated in <span class="version43">green</span>.<br />\r
+Changes for WinBoard 4.4.xx are indicated in <span class="version44">blue</span>.\r
+</p>\r
+</div>\r
 \r
 <ul>\r
-<li><a href="#1">1. Introduction</a>\r
-<li><a href="#2">2. Connection</a>\r
-<li><a href="#3">3. Debugging</a>\r
-<li><a href="#4">4. How it got this way</a>\r
-<li><a href="#5">5. WinBoard requires Win32 engines</a>\r
-<li><a href="#6">6. Hints on input/output</a>\r
-<li><a href="#7">7. Signals</a>\r
-<li><a href="#8">8. Commands from xboard to the engine</a>\r
-<li><a href="#9">9. Commands from the engine to xboard</a>\r
-<li><a href="#10">10. Thinking Output</a>\r
-<li><a href="#11">11. Time control</a>\r
-<li><a href="#12">12. Analyze Mode</a>\r
-<li><a href="#13">13. Idioms and backward compatibility features</a>\r
+<li><a href="#1">1. Introduction</a></li>\r
+<li><a href="#2">2. Connection</a></li>\r
+<li><a href="#3">3. Debugging</a></li>\r
+<li><a href="#4">4. How it got this way</a></li>\r
+<li><a href="#5">5. WinBoard requires Win32 engines</a></li>\r
+<li><a href="#6">6. Hints on input/output</a></li>\r
+<li><a href="#7">7. Signals</a></li>\r
+<li><a href="#8">8. Commands from xboard to the engine</a></li>\r
+<li><a href="#9">9. Commands from the engine to xboard</a></li>\r
+<li><a href="#10">10. Thinking Output</a></li>\r
+<li><a href="#11">11. Time control</a></li>\r
+<li><a href="#12">12. Analyze Mode</a></li>\r
+<li><a href="#13">13. Idioms and backward compatibility features</a></li>\r
 </ul>\r
 \r
-<hr noshade size="2">\r
+<hr />\r
 \r
 <h2><a name="1">1. Introduction</a></h2>\r
 \r
@@ -47,11 +66,12 @@ and WinBoard except where they are specifically contrasted.
 <p>\r
 There are two reasons I can imagine someone wanting to do this: \r
 </p>\r
+\r
 <ol>\r
 <li>You have, or are developing, a chess engine but you don't want to\r
-write your own graphical interface. \r
+write your own graphical interface. </li>\r
 <li>You have, or are developing,a chess engine, and you want to\r
-interface it to the Internet Chess Server.\r
+interface it to the Internet Chess Server.</li>\r
 </ol>\r
 \r
 <p>\r
@@ -60,7 +80,6 @@ In case (2), if you are using xboard, you will need to configure the
 the file <a\r
 href="http://www.tim-mann.org/xboard/zippy.README">zippy.README</a>\r
 in the xboard or WinBoard distribution for more information.\r
-\r
 </p>\r
 \r
 <p>\r
@@ -78,14 +97,13 @@ can join at <a href="http://groups.yahoo.com/group/chess-engines"
 >http://groups.yahoo.com/group/chess-engines</a>, or you can read the\r
 list there without joining.  The list is filtered to prevent spam.\r
 </p>\r
-<p>\r
-<font color=green>\r
+\r
+<p class="version43">\r
 Note that the WinBoard 4.3.xx line was developed independently of the\r
 original GNU project, by H.G.Muller.\r
 If you have questions about WinBoard 4.3.xx, or want to report bugs in it,\r
 report them in the appropriate section of the \r
 <a href="http://www.open-aurec.com/wbforum/">WinBoard forum</a>.\r
-</font>\r
 </p>\r
 \r
 <h2><a name="2">2. Connection</a></h2>\r
@@ -161,17 +179,16 @@ does not support, and I've specified the standard semantics of a few
 features to be slightly different from what GNU Chess 4 does.\r
 </p>\r
 \r
-<p>\r
-<font color=red>\r
+<p class="version1">\r
 This release of the protocol specification is the first to carry a\r
 version number of its own -- version 2.  Previous releases simply\r
 carried a last-modified date and were loosely tied to specific \r
 releases of xboard and WinBoard.  The version number "1" applies\r
 generally to all those older versions of the protocol.\r
-</font>\r
+</p>\r
 \r
-<font color=red>\r
-<p>Protocol version 2 remains compatible with older engines but has\r
+<p class="version1">\r
+Protocol version 2 remains compatible with older engines but has\r
 several new capabilities.  In particular, it adds the \r
 "feature" command, a new mechanism for making backward-compatible\r
 changes and extensions to the protocol.  Engines that do not support a\r
@@ -185,8 +202,7 @@ including the "ping" command (recommended for all engines), the
 will probably be added in future versions.\r
 </p>\r
 \r
-<p>\r
-<font color=green>\r
+<p class="version43">\r
 If it is necessary to have a separate name, \r
 it would be best to refer to the protocol including the green additions as version 2f.\r
 I really don't think it is a different protocol from version 2, though.\r
@@ -196,14 +212,12 @@ The hand-shaking protocol for features as defined in protocol 2 perfectly
 allows addition of an occasional new features without any need for stepping up the protocol version number,\r
 and I think refraining from the latter would enormously lower the barrier for actual\r
 implementation of these features in engines.\r
-<br>\r
+<br />\r
 The two really new things are the engine debug comments, and the "nps" command.\r
 The former merely tries to regulate an extremely common existing pactice \r
 of having engines dump debug messages on WinBoard in an unprotected way, \r
 as usually you get away with that.\r
-</font>\r
-\r
-</font>\r
+</p>\r
 \r
 <h2><a name="5">5. WinBoard requires Win32 engines</a></h2>\r
 \r
@@ -356,11 +370,11 @@ engines that run under xboard and (the unusual case of) engines that
 WinBoard remotely runs on a Unix host using the -firstHost or\r
 -secondHost feature.  It does not apply to engines that run on\r
 Windows, because Windows does not have Unix-style signals.\r
-<font color=red>\r
+<span class="version1">\r
 Beginning with version 2, you can now turn off the use of\r
 either or both\r
 signals.  See the "feature" command in <a href="#6">section 9</a> below.\r
-</font>\r
+</span>\r
 </p>\r
 \r
 <p>First, when an engine is sent the "quit" command, it is also given\r
@@ -431,27 +445,27 @@ games.  At the end of a game, xboard will send the "force" command
 (see below) to make sure your engine stops thinking about the current\r
 position.  It will later send the initString again to start a new\r
 game.  If your engine can't play multiple games, you can disable reuse\r
-<font color=red>\r
+<span class="version1">\r
 either with the "feature" command (beginning in protocol version\r
 2; see below) or \r
-</font>\r
+</span>\r
 with xboard's -xreuse (or -xreuse2) command line\r
 option.  xboard will then ask the process to quit after each game and\r
 start a new process for the next game.\r
 </p>\r
 \r
 <dl>\r
-<dt><strong>xboard</strong>\r
+<dt>xboard</dt>\r
 <dd>This command will be sent once immediately after your engine\r
 process is started.  You can use it to put your engine into "xboard\r
 mode" if that is needed.  If your engine prints a prompt to ask for\r
 user input, you must turn off the prompt and output a newline when the\r
 "xboard" command comes in.\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=red><strong>protover N</strong></font>\r
-<dd><font color=red>\r
-Beginning in protocol version 2 (in which N=2), this command will\r
+<dt class="version1">protover N</dt>\r
+<dd class="version1">\r
+<p>Beginning in protocol version 2 (in which N=2), this command will\r
 be sent immediately after the "xboard" command.  If you receive some\r
 other command immediately after "xboard" (such as "new"), you can\r
 assume that protocol version 1 is in use.  The "protover" command is\r
@@ -459,28 +473,28 @@ the only new command that xboard always sends in version 2.  All other
 new commands to the engine are sent only if the engine first enables\r
 them with the "feature" command.  Protocol versions will always be\r
 simple integers so that they can easily be compared.\r
+</p>\r
 \r
 <p>Your engine should reply to the protover command by sending the\r
 "feature" command (see below) with the list of non-default feature\r
-settings that you require, if any.\r
+settings that you require, if any.</p>\r
 \r
 <p>Your engine should never refuse to run due to receiving a higher\r
 protocol version number than it is expecting!  New protocol versions\r
 will always be compatible with older ones by default; the larger\r
 version number is simply a hint that additional "feature" command\r
 options added in later protocol versions may be accepted.\r
-</font>\r
-<p>\r
+</p>\r
+</dd>\r
 \r
-<dt><font color=red><strong>accepted</strong></font>\r
-<dt><font color=red><strong>rejected</strong></font>\r
-<dd><font color=red>\r
+<dt class="version1">accepted</dt>\r
+<dt class="version1">rejected</dt>\r
+<dd class="version1">\r
 These commands may be sent to your engine in reply to the "feature"\r
 command; see its documentation below.\r
-</font>\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>new</strong>\r
+<dt>new</dt>\r
 <dd>Reset the board to the standard chess starting position.  Set\r
 White on move.  Leave force mode and set the engine to play Black.\r
 Associate the engine's clock with Black and the opponent's clock with\r
@@ -488,92 +502,83 @@ White.  Reset clocks and time controls to the start of a new game.
 Use wall clock for time measurement.\r
 Stop clocks.  Do not ponder on this move, even if pondering is on.\r
 Remove any search depth limit previously set by the sd command.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>variant VARNAME</strong>\r
+<dt>variant VARNAME</dt>\r
 <dd>If the game is not standard chess, but a variant, this command is\r
 sent after "new" and before the first move or "edit" command.  Currently\r
 defined variant names are:\r
 \r
 <table>\r
-<tr align="left"><th>wildcastle<td>Shuffle chess where king can castle from d file\r
-<tr align="left"><th>nocastle<td>Shuffle chess with no castling at all\r
-<tr align="left"><th>fischerandom<td>Fischer Random\r
-<tr align="left"><th>bughouse<td>Bughouse, ICC/FICS rules\r
-<tr align="left"><th>crazyhouse<td>Crazyhouse, ICC/FICS rules\r
-<tr align="left"><th>losers<td>Win by losing all pieces or getting mated (ICC)\r
-<tr align="left"><th>suicide<td>Win by losing all pieces including king,\r
-or by having fewer pieces when one player has no legal moves (FICS)\r
-<tr align="left"><th><font color=red>giveaway</font>\r
-<td><font color=red>Win by losing all pieces including king,\r
-or by having no legal moves (ICC)</font>\r
-<tr align="left"><th>twokings<td>Weird ICC wild 9\r
-<tr align="left"><th>kriegspiel<td>Kriegspiel (engines not supported)\r
-<tr align="left"><th>atomic<td>Atomic\r
-<tr align="left"><th>3check<td>Win by giving check 3 times\r
-<tr align="left"><th><font color=green>xiangqi</font>\r
-<td><font color=green>Chinese Chess (9x10 board)</font>\r
-<tr align="left"><th><font color=green>shogi</font>\r
-<td><font color=green>Japanese Chess (9x9 bord)</font>\r
-<tr align="left"><th><font color=green>capablanca</font>\r
-<td><font color=green>Capablanca Chess (10x8 board, with Archbishop and Chancellor)</font>\r
-<tr align="left"><th><font color=green>gothic</font>\r
-<td><font color=green>Gothic Chess (10x8 board, same with better opening setup)</font>\r
-<tr align="left"><th><font color=green>falcon</font>\r
-<td><font color=green>Falcon Chess (10x8 board, with two Falcon pieces)</font>\r
-<tr align="left"><th><font color=green>shatranj</font>\r
-<td><font color=green>ancient Arabic Chess, with Elephants and General in stead of B and Q</font>\r
-<tr align="left"><th><font color=green>courier</font>\r
-<td><font color=green>Courier Chess (12x8 board, a medieval precursor of modern Chess</font>\r
-<tr align="left"><th><font color=green>knightmate</font>\r
-<td><font color=green>King moves as Knight and vice versa</font>\r
-<tr align="left"><th><font color=green>berolina</font><td>\r
-<font color=green>Pawns capture straight ahead, and move diagonally</font>\r
-<tr align="left"><th><font color=green>janus</font><td>\r
-<font color=green>Janus Chess (10x8, with two Archbishops)</font>\r
-<tr align="left"><th><font color=green>caparandom</font>\r
-<td><font color=green>shuffle variant like FRC (10x8 board)</font>\r
-<tr align="left"><th><font color=green>cylinder</font>\r
-<td><font color=green>Pieces wrap around between side edges, like board is a cylinder</font>\r
-<tr align="left"><th><font color=blue>super</font>\r
-<td><font color=blue>Superchess: a shuffle variant with 4 fairy pieces on 8x8 board</font>\r
-<tr align="left"><th>unknown<td>Unknown variant (not supported)\r
+<tr><td>wildcastle</td><td>Shuffle chess where king can castle from d file</td></tr>\r
+<tr><td>nocastle</td><td>Shuffle chess with no castling at all</td></tr>\r
+<tr><td>fischerandom</td><td>Fischer Random</td></tr>\r
+<tr><td>bughouse</td><td>Bughouse, ICC/FICS rules</td></tr>\r
+<tr><td>crazyhouse</td><td>Crazyhouse, ICC/FICS rules</td></tr>\r
+<tr><td>losers</td><td>Win by losing all pieces or getting mated (ICC)</td></tr>\r
+<tr><td>suicide</td><td>Win by losing all pieces including king,\r
+    or by having fewer pieces when one player has no legal moves (FICS)</td></tr>\r
+<tr class="version1"><td>giveaway</td><td>Win by losing all pieces including king,\r
+    or by having no legal moves (ICC)</td></tr>\r
+<tr><td>twokings</td><td>Weird ICC wild 9</td></tr>\r
+<tr><td>kriegspiel</td><td>Kriegspiel (engines not supported)</td></tr>\r
+<tr><td>atomic</td><td>Atomic</td></tr>\r
+<tr><td>3check</td><td>Win by giving check 3 times</td></tr>\r
+<tr class="version43"><td>xiangqi </td><td>Chinese Chess (9x10 board)</td></tr>\r
+<tr class="version43"><td>shogi </td><td>Japanese Chess (9x9 bord)</td></tr>\r
+<tr class="version43"><td>capablanca</td><td>Capablanca Chess (10x8 board, with Archbishop and Chancellor)</td></tr>\r
+<tr class="version43"><td>gothic  </td><td>Gothic Chess (10x8 board, same with better opening setup)</td></tr>\r
+<tr class="version43"><td>falcon  </td><td>Falcon Chess (10x8 board, with two Falcon pieces)</td></tr>\r
+<tr class="version43"><td>shatranj  </td><td>ancient Arabic Chess, with Elephants and General in stead of B and Q</td></tr>\r
+<tr class="version43"><td>courier  </td><td>Courier Chess (12x8 board, a medieval precursor of modern Chess</td></tr>\r
+<tr class="version43"><td>knightmate  </td><td>King moves as Knight and vice versa</td></tr>\r
+<tr class="version43"><td>berolina</td><td>    Pawns capture straight ahead, and move diagonally</td></tr>\r
+<tr class="version43"><td>janus</td><td>    Janus Chess (10x8, with two Archbishops)</td></tr>\r
+<tr class="version43"><td>caparandom  </td><td>shuffle variant like FRC (10x8 board)</td></tr>\r
+<tr class="version43"><td>cylinder  </td><td>Pieces wrap around between side edges, like board is a cylinder</td></tr>\r
+<tr class="version44"><td>super  </td><td>Superchess: a shuffle variant with 4 fairy pieces on 8x8 board</td></tr>\r
+<tr class="version44"><td>great  </td><td>Great Shatranj: sliders are replaced by corresponding short-range pieces on a 10x8 board</td></tr>\r
+<tr class="version48"><td>lion  </td><td>Mighty-Lion Chess, with a super-knight, more powerful than a Queen</td></tr>\r
+<tr class="version48"><td>elven  </td><td>Elven Chess: hybrid between Chess and Chu Shogi on 10x10 board</td></tr>\r
+<tr class="version48"><td>chu  </td><td>Chu Shogi: Edo-period Japanese Chess on a 12x12 board</td></tr>\r
+<tr><td>unknown</td><td>Unknown variant (not supported)</td></tr>\r
 </table>\r
-<p>\r
 \r
-<dt><strong>quit</strong>\r
+<span class="version48">As of XBoard 4.8, engines can define arbitrary variant names; see the "feature" and "setup" commands in <a href="#9">section 9</a>.</span>\r
+</dd>\r
+\r
+<dt>quit</dt>\r
 <dd>The chess engine should immediately exit.  This command is used\r
 when xboard is itself exiting, and also between games if the -xreuse\r
 command line option is given (or -xreuse2 for the second engine).\r
 See also <a href="#7">Signals</a> above.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>random</strong>\r
+<dt>random</dt>\r
 <dd>This command is specific to GNU Chess 4.  You can either ignore it\r
 completely (that is, treat it as a no-op) or implement it as GNU Chess\r
 does.  The command toggles "random" mode (that is, it sets random =\r
 !random).  In random mode, the engine adds a small random value to its\r
 evaluation function to vary its play.  The "new" command sets random\r
 mode off.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>force</strong>\r
+<dt>force</dt>\r
 <dd>Set the engine to play neither color ("force mode").  Stop clocks.\r
 The engine should check that moves received in force mode are legal\r
 and made in the proper turn, but should not think, ponder, or make\r
 moves of its own.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>go</strong>\r
+<dt>go</dt>\r
 <dd>Leave force mode and set the engine to play the color that is on\r
 move.  Associate the engine's clock with the color that is on move,\r
 the opponent's clock with the color that is not on move.  Start the engine's\r
 clock.  Start thinking and eventually make a move.\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=red><strong>playother</strong></font>\r
-<dd>\r
-<font color=red>\r
+<dt class="version1">playother</dt>\r
+<dd class="version1">\r
 (This command is new in protocol version 2.  It is not\r
 sent unless you enable it with the feature command.)\r
 Leave force mode and set the engine to play the color that is <i>not</i> on\r
@@ -582,42 +587,43 @@ the engine's clock with the color that is not on move.  Start the opponent's
 clock.  If pondering is enabled, the engine should begin pondering.\r
 If the engine later receives a move, it should start thinking and eventually\r
 reply.\r
-</font>\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>white</strong>\r
+<dt>white</dt>\r
 <dd>\r
-<font color=red>\r
+<p><span class="version1">\r
 (This command is obsolete as of protocol version 2, but is still\r
 sent in some situations to accommodate older engines unless you disable it \r
 with the feature command.)\r
-</font>\r
+</span>\r
 Set White on move.  Set the engine to play Black.  Stop clocks.\r
-<p>\r
+</p>\r
+</dd>\r
   \r
-<dt><strong>black</strong>\r
+<dt>black </dt>\r
 <dd>\r
-<font color=red>\r
+<span class="version1">\r
 (This command is obsolete as of protocol version 2, but is still\r
 sent in some situations to accommodate older engines unless you disable it \r
 with the feature command.)\r
-</font>\r
+</span>\r
 Set Black on move.  Set the engine to play White.  Stop clocks.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>level MPS BASE INC</strong>\r
+<dt>level MPS BASE INC</dt>\r
 <dd>Set time controls.  See the <a href="#11">Time Control</a> section below.\r
-<p>\r
+</dd>\r
   \r
-<dt><strong>st TIME</strong>\r
+<dt>st TIME</dt>\r
 <dd>Set time controls.  See the <a href="#11">Time Control</a> section\r
 below. \r
-<p>\r
+</dd>\r
 \r
-<dt><strong>sd DEPTH</strong>\r
-<dd>The engine should limit its thinking to DEPTH ply.\r
-<font color=green>The commands "level" or "st" and "sd" can be used together in an orthogonal way.\r
-If both are issued, the engine should observe both limitations:</font>\r
+<dt>sd DEPTH</dt>\r
+<dd>\r
+<p>The engine should limit its thinking to DEPTH ply.\r
+<span class="version43">The commands "level" or "st" and "sd" can be used together in an orthogonal way.\r
+If both are issued, the engine should observe both limitations:</span>\r
 In the protocol, the "sd" command isn't a time control.  It doesn't\r
 say that your engine has unlimited time but must search to exactly the\r
 given depth.  It says that you should pay attention to the time\r
@@ -625,16 +631,16 @@ control as normal, but cut off the search at the specified depth even
 if you have time to search deeper.  If you don't have time to search\r
 to the specified depth, given your normal time management algorithm,\r
 then you will want to stop sooner than the given depth.\r
-<p>\r
+</p><p>\r
 The "new" command should set the search depth back to unlimited.  This\r
 is already stated in the spec.  The "level" command should not affect\r
 the search depth.  As it happens, xboard/WinBoard currently always\r
 sends sd (if needed) right after level, but that isn't part of the\r
-spec.\r
-<p>\r
+spec.</p>\r
+</dd>\r
 \r
-<dt><font color=green><strong>nps NODE_RATE</strong></font>\r
-<dd><font color=green>The engine should not use wall-clock time to make its timing decisions,\r
+<dt><span class="version43">nps NODE_RATE</span></dt>\r
+<dd><span class="version43">The engine should not use wall-clock time to make its timing decisions,\r
 but an own internal time measure based on the number of nodes it has searched\r
 (and will report as "thinking output", see <a href="#10">section 10</a>),\r
 converted to seconds through dividing by the given NODE_RATE.\r
@@ -645,79 +651,78 @@ rather than wall-clock time.
 This even holds if NODE_RATE is given as 0,\r
 but in that case it should also use the user CPU time for its timing decisions.\r
 The effect of an "nps" command should persist until the next "new" command.\r
-</font>\r
-<p>\r
+</span>\r
+</dd>\r
 \r
-<dt><strong>time N</strong>\r
+<dt>time N</dt>\r
 <dd>Set a clock that always belongs to the engine.  N is a number in\r
   centiseconds (units of 1/100 second).  Even if the engine changes to\r
   playing the opposite color, this clock remains with the engine.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>otim N</strong>\r
+<dt>otim N</dt>\r
 \r
-<dd>Set a clock that always belongs to the opponent.  N is a number in\r
+<dd><p>Set a clock that always belongs to the opponent.  N is a number in\r
 centiseconds (units of 1/100 second).  Even if the opponent changes to\r
 playing the opposite color, this clock remains with the opponent.\r
-<p>\r
+</p><p>\r
 If needed for purposes of board display in force mode (where the\r
 engine is not participating in the game) the time clock should be\r
 associated with the last color that the engine was set to play, the\r
 otim clock with the opposite color.\r
 </p>\r
 <p>\r
-<font color=green>This business of "clocks remaining with the engine" is apparently so ambiguous\r
+<span class="version43">This business of "clocks remaining with the engine" is apparently so ambiguous\r
 that many engines implement it wrong.\r
 The clocks in fact always remain with the color.\r
 Which clock reading is relayed with "time", and which by "otim", is determined by which side the engine plays.\r
 Note that the way the clocks operate and receive extra time (in accordance with the selected time control)\r
 is not affected in any way by which moves are made by the engine, which by the opponent, and which were forced.\r
-</font>\r
+</span>\r
 </p>\r
 <p>\r
-<font color=red>\r
+<span class="version1">\r
 Beginning in protocol version 2, if you can't handle the time and\r
 otim commands, you can use the "feature" command to disable them; see\r
 below.  \r
-</font>\r
+</span>\r
 The following techniques from older protocol versions also\r
 work: You can ignore the time and otim commands (that is, treat them\r
 as no-ops), or send back "Error (unknown command): time" the first\r
 time you see "time".\r
-</p>\r
+</p></dd>\r
 \r
-<dt><strong>MOVE</strong>\r
-<dd>See below for the syntax of moves.  If the move is illegal, print\r
+<dt>MOVE</dt>\r
+<dd>\r
+<p>See below for the syntax of moves.  If the move is illegal, print\r
 an error message; see the section "<a href="#9">Commands from the engine to\r
 xboard</a>".  If the move is legal and in turn, make it.  If not in force\r
 mode, stop the opponent's clock, start the engine's clock, start\r
 thinking, and eventually make a move.\r
-<p>\r
+</p><p>\r
 When xboard sends your engine a move, it normally sends coordinate\r
 algebraic notation.  Examples:\r
-<p>\r
+</p>\r
 <table>\r
-<tr align="left"><td>Normal moves:<td>e2e4\r
-<tr align="left"><td>Pawn promotion:<td>e7e8q\r
-<tr align="left"><td>Castling:<td>e1g1, e1c1, e8g8, e8c8\r
-<tr align="left"><td>Bughouse/crazyhouse drop:<td>P@h3\r
-<tr align="left"><td>ICS Wild 0/1 castling:<td>d1f1, d1b1, d8f8, d8b8\r
-<tr align="left"><td>FischerRandom castling:<td>O-O, O-O-O (oh, not zero)\r
+<tr><td>Normal moves:</td><td>e2e4</td></tr>\r
+<tr><td>Pawn promotion:</td><td>e7e8q</td></tr>\r
+<tr><td>Castling:</td><td>e1g1, e1c1, e8g8, e8c8</td></tr>\r
+<tr><td>Bughouse/crazyhouse drop:</td><td>P@h3</td></tr>\r
+<tr><td>ICS Wild 0/1 castling:</td><td>d1f1, d1b1, d8f8, d8b8</td></tr>\r
+<tr><td>FischerRandom castling:</td><td>O-O, O-O-O (oh, not zero)</td></tr>\r
+<tr class="version48"><td>Multi-leg move:</td><td>c4d5,d5e4 (legs separated by comma)</td></tr>\r
+<tr class="version48"><td>Null move:</td><td>@@@@</td></tr>\r
 </table>\r
 \r
-<p>\r
-<font color=green>\r
-Note that on boards with more than 9 ranks, counting of the ranks starts at 0.\r
-</font>\r
+<p class="version43">\r
+Note that on boards with <span class="version48">exactly 10</span> ranks, counting of the ranks starts at 0.\r
 </p>\r
-<p>\r
-<font color=red>\r
+<p class="version1">\r
 Beginning in protocol version 2, you can use the feature command\r
 to select SAN (standard algebraic notation) instead; for example, e4,\r
 Nf3, exd5, Bxf7+, Qxf7#, e8=Q, O-O, or P@h3.  Note that the last form,\r
 P@h3, is a extension to the PGN standard's definition of SAN, which does\r
 not support bughouse or crazyhouse.\r
-</font>\r
 </p>\r
 \r
 <p>\r
@@ -727,38 +732,37 @@ passant availability.  If xboard sends an illegal move, send back an
 error message so that xboard can retract it and inform the user; see\r
 the section "<a href="#9">Commands from the engine to xboard</a>".\r
 </p>\r
-\r
-<dt><font color=red><strong>usermove MOVE</strong></font>\r
-<dd><font color=red>\r
+</dd>\r
+<dt class="version1">usermove MOVE</dt>\r
+<dd class="version1">\r
 By default, moves are sent to the engine without a command name;\r
 the notation is just sent as a line by itself.\r
 Beginning in protocol version 2, you can use the feature command\r
 to cause the command name "usermove" to be sent before the move.\r
 Example: "usermove e2e4".\r
-</font>\r
-</p>\r
+</dd>\r
 \r
-<dt><strong>?</strong>\r
-<dd>Move now.  If your engine is thinking, it should move immediately;\r
+<dt>?</dt>\r
+<dd><p>Move now.  If your engine is thinking, it should move immediately;\r
   otherwise, the command should be ignored (treated as a no-op).  It\r
   is permissible for your engine to always ignore the ? command.  The\r
   only bad consequence is that xboard's Move Now menu command will do\r
   nothing.\r
-<p>\r
+</p><p>\r
 It is also permissible for your engine to move immediately if it gets\r
 any command while thinking, as long as it processes the command right\r
 after moving, but it's preferable if you don't do this.  For example,\r
 xboard may send post, nopost, easy, hard, force, quit,\r
-<font color=red>\r
+<span class="version1">\r
 or other commands\r
-</font>\r
+</span>\r
 while the engine is on move.\r
 </p>\r
+</dd>\r
 \r
-<dt><font color=red><strong>ping N</strong></font>\r
-<dd>\r
-<font color=red>\r
-In this command, N is a decimal number.  When you receive the command,\r
+<dt class="version1">ping N</dt>\r
+<dd class="version1">\r
+<p>In this command, N is a decimal number.  When you receive the command,\r
 reply by sending the string <strong>pong N</strong>, where N is the\r
 same number you received.  Important: You must not reply to a "ping"\r
 command until you have finished executing all commands that you\r
@@ -774,7 +778,7 @@ command.  Similarly, xboard may send a sequence like "force", "new",
 "ping".  You must not send the pong response until after you have\r
 finished executing the "new" command and are ready for the new game to\r
 start.\r
-\r
+</p>\r
 <p>\r
 The ping command is new in protocol version 2 and will not be sent\r
 unless you enable it with the "feature" command.  Its purpose is to\r
@@ -784,18 +788,18 @@ implement it.  It is especially important in simple engines that do
 not ponder and do not poll for input while thinking, but it is needed in all\r
 engines.  \r
 </p>\r
-</font>\r
+</dd>\r
 \r
-<dt><strong>draw</strong>\r
+<dt>draw</dt>\r
 <dd>The engine's opponent offers the engine a draw.  To accept the\r
 draw, send "offer draw".  To decline, ignore the offer (that is, send\r
 nothing).  If you're playing on ICS, it's possible for the draw offer\r
 to have been withdrawn by the time you accept it, so don't assume the\r
 game is over because you accept a draw offer.  Continue playing until\r
 xboard tells you the game is over.  See also "offer draw" below.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>result RESULT {COMMENT}</strong>\r
+<dt>result RESULT {COMMENT}</dt>\r
 <dd>After the end of each game, xboard will send you a result command.\r
 You can use this command to trigger learning.  RESULT is either 1-0,\r
 0-1, 1/2-1/2, or *, indicating whether white won, black won, the game\r
@@ -826,56 +830,59 @@ front.  You might not always get a "result *" command, however.  In
 particular, you won't get one in local chess engine mode when the user\r
 stops playing by selecting Reset, Edit Game, Exit or the like.\r
 </p>\r
+</dd>\r
 \r
-<dt><font color=red><strong>setboard FEN</strong></font>\r
-<dd><font color=red>\r
+<dt><span class="version1">setboard FEN</span></dt>\r
+<dd>\r
+<p><span class="version1">\r
 The setboard command is the new way to set up positions, beginning\r
 in protocol version 2.  It is not used unless it has been selected\r
 with the feature command.  Here FEN is a position in Forsythe-Edwards\r
-Notation, as defined in the PGN standard.</font>\r
-<font color=green>Note that this PGN standard referred to here\r
+Notation, as defined in the PGN standard.</span>\r
+<span class="version43">Note that this PGN standard referred to here\r
 only applies to normal Chess;\r
 Obviously in variants that cannot be described by a FEN for normal Chess,\r
 e.g. because the board is not 8x8, other pieces then PNBRQK participate, \r
 there are holdings that need to be specified, etc., \r
-xboard will use a FEN format that is standard or suitable for that varant.\r
+xboard will use a FEN format that is standard or suitable for that variant.\r
 In particular, in FRC or CRC, WinBoard will use Shredder-FEN or X-FEN standard,\r
 i.e. it can use the rook-file indicator letter to represent a castling right \r
 (like HAha) whenever it wants, but if it uses KQkq, this will always refer \r
-to the outermost rook on the given side.</font>\r
-<font color=red>\r
+to the outermost rook on the given side.</span>\r
+</p>\r
 \r
-<p><i>Illegal positions:</i> Note that either setboard or edit can\r
+<p class="version1">\r
+<em>Illegal positions:</em> Note that either setboard or edit can\r
 be used to send an illegal position to the engine.  The user can\r
 create any position with xboard's Edit Position command (even, say,\r
 an empty board, or a board with 64 white kings and no black ones).\r
 If your engine receives a position that it considers illegal, \r
 I suggest that you send the response "tellusererror Illegal position",\r
 and then respond to any attempted move with "Illegal move" until\r
-the next new, edit, or setboard command.</p>\r
-</font>\r
-<p>\r
+the next new, edit, or setboard command.\r
+</p>\r
+</dd>\r
 \r
-<dt><strong>edit</strong>\r
+<dt>edit</dt>\r
 <dd>\r
-<font color=red>\r
+<p><span class="version1">\r
 The edit command is the old way to set up positions.  For compatibility\r
 with old engines, it is still used by default, but new engines may prefer\r
 to use the feature command (see below) to cause xboard to use setboard instead.\r
-</font>\r
+</span>\r
 The edit command puts the chess engine into a special mode, where\r
-it accepts the following subcommands:\r
+it accepts the following subcommands:</p>\r
 <table>\r
-<tr align="left"><th>c<td>change current piece color, initially white\r
-<tr align="left"><th>Pa4 (for example)<td>place pawn of current color on a4\r
-<tr align="left"><th>xa4 (for example)<td>empty the square a4 (not used by xboard)\r
-<tr align="left"><th>#<td>clear board\r
-<tr align="left"><th>.<td>leave edit mode\r
+<tr><td>c</td><td>change current piece color, initially white</td></tr>\r
+<tr><td>Pa4 (for example)</td><td>place pawn of current color on a4</td></tr>\r
+<tr><td>xa4 (for example)</td><td>empty the square a4 (not used by xboard)</td></tr>\r
+<tr><td>#</td><td>clear board</td></tr>\r
+<tr><td>.</td><td>leave edit mode</td></tr>\r
 </table>\r
-<font color=red>\r
+<p class="version1">\r
 See the Idioms section below for additional subcommands used in\r
 ChessBase's implementation of the protocol.\r
-</font>\r
+</p>\r
 \r
 <p>The edit command does not change the side to move.  To set up a\r
 black-on-move position, xboard uses the following command sequence:\r
@@ -902,7 +909,7 @@ capture is assumed to be illegal on the current move regardless of the
 positions of the pawns.  The clock for the 50 move rule starts at\r
 zero, and for purposes of the draw by repetition rule, no prior\r
 positions are deemed to have occurred.\r
-<font color=green>\r
+<span class="version43">\r
 In FRC or CRC, any rook and king put on the back rank should be considered to\r
 have castling rights, even if it later becomes apparent that they cannot be both in the\r
 initial position, because the position just set up is asymmetric.\r
@@ -910,66 +917,64 @@ It is upto WinBoard to find work-around in cases where this is not desired,
 similar to the "black kludge" shown above, by setting up an earlier position,\r
 and then do a move to destroy castling rights or create e.p. rights.\r
 (Don't bet your life on it...)\r
-</font>\r
+</span>\r
 </p>\r
+</dd>\r
 \r
-<dt><strong>hint</strong>\r
+<dt>hint</dt>\r
 <dd>If the user asks for a hint, xboard sends your engine the command\r
 "hint".  Your engine should respond with "Hint: xxx", where xxx is a\r
 suggested move.  If there is no move to suggest, you can ignore the\r
 hint command (that is, treat it as a no-op).\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>bk</strong>\r
+<dt>bk</dt>\r
 <dd>If the user selects "Book" from the xboard menu, xboard will send\r
 your engine the command "bk".  You can send any text you like as the\r
 response, as long as each line begins with a blank space or tab (\t)\r
 character, and you send an empty line at the end.  The text pops up in\r
 a modal information dialog.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>undo</strong>\r
+<dt>undo</dt>\r
 <dd>If the user asks to back up one move, xboard will send you the\r
 "undo" command.  xboard will not send this command without putting you\r
 in "force" mode first, so you don't have to worry about what should\r
 happen if the user asks to undo a move your engine made.  (GNU Chess 4\r
 actually switches to playing the opposite color in this case.)\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>remove</strong>\r
+<dt>remove</dt>\r
 <dd>If the user asks to retract a move, xboard will send you the\r
 "remove" command.  It sends this command only when the user is on\r
 move.  Your engine should undo the last two moves (one for each\r
 player) and continue playing the same color.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>hard</strong>\r
+<dt>hard</dt>\r
 <dd>Turn on pondering (thinking on the opponent's time, also known as\r
 "permanent brain").  xboard will not make any assumption about what\r
 your default is for pondering or whether "new" affects this setting.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>easy</strong>\r
-<dd>Turn off pondering.\r
-<p>\r
+<dt>easy</dt>\r
+<dd>Turn off pondering.</dd>\r
   \r
-<dt><strong>post</strong>\r
+<dt>post</dt>\r
 <dd>Turn on thinking/pondering output.  \r
-See <a href="#10">Thinking Output</a> section.\r
-<p>\r
+See <a href="#10">Thinking Output</a> section.</dd>\r
 \r
-<dt><strong>nopost</strong>\r
-<dd>Turn off thinking/pondering output.\r
-<p>\r
+<dt>nopost</dt>\r
+<dd>Turn off thinking/pondering output.</dd>\r
   \r
-<dt><strong>analyze</strong>\r
-<dd>Enter analyze mode.  See <a href="#12">Analyze Mode</a> section.\r
-<p>\r
+<dt>analyze</dt>\r
+<dd>Enter analyze mode.  See <a href="#12">Analyze Mode</a> section.</dd>\r
 \r
-<dt><strong>name X</strong> <dd>This command informs the engine of its\r
+<dt>name X </dt>\r
+<dd>This command informs the engine of its\r
 opponent's name.  When the engine is playing on a chess server, xboard\r
 obtains the opponent's name from the server. \r
-<font color=red>\r
+<span class="version1">\r
 When the engine is\r
 playing locally against a human user, xboard obtains the user's login\r
 name from the local operating system.  When the engine is playing\r
@@ -979,41 +984,40 @@ option to the feature command.  By default, xboard uses the name
 command only when the engine is playing on a chess server.  Beginning\r
 in protocol version 2, you can change this with the name option to the\r
 feature command; see below.\r
-</font>\r
-<p>\r
+</span>\r
+</dd>\r
 \r
-<dt><strong>rating</strong>\r
+<dt>rating</dt>\r
 <dd>In ICS mode, xboard obtains the ICS opponent's rating from the\r
 "Creating:" message that appears before each game.  (This message may\r
 not appear on servers using outdated versions of the FICS code.)  In\r
 Zippy mode, it sends these ratings on to the chess engine using the\r
 "rating" command.  The chess engine's own rating comes first, and if\r
 either opponent is not rated, his rating is given as 0.  \r
-<font color=red>\r
+<span class="version1">\r
 In the future this command may also be used in other modes, if ratings\r
 are known.\r
-</font>\r
+</span>\r
 Example: <pre>rating 2600 1500</pre>\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=red><strong>ics HOSTNAME</strong></font>\r
-<dd><font color=red>\r
+<dt><span class="version1">ics HOSTNAME</span></dt>\r
+<dd class="version1">\r
 If HOSTNAME is "-", the engine is playing against a local\r
 opponent; otherwise, the engine is playing on an Internet Chess Server\r
 (ICS) with the given hostname.  This command is new in protocol\r
 version 2 and is not sent unless the engine has enabled it with\r
 the "feature" command.  Example: "ics freechess.org"\r
-</font>\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>computer</strong>\r
+<dt>computer</dt>\r
 <dd>The opponent is also a computer chess engine.  Some engines alter\r
 their playing style when they receive this command.\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=red><strong>pause</strong></font>\r
-<dt><font color=red><strong>resume</strong></font>\r
-<dd><font color=red>(These commands are new in protocol\r
+<dt class="version1">pause</dt>\r
+<dt class="version1">resume</dt>\r
+<dd class="version1">(These commands are new in protocol\r
 version 2 and will not be sent unless feature pause=1 is set.  At\r
 this writing, xboard actually does not use the commands at all, but it\r
 or other interfaces may use them in the future.)\r
@@ -1025,11 +1029,10 @@ send to the engine while it is in the paused state is "resume".  The
 paused thinking or pondering (if any) resumes from exactly where it\r
 left off, and the clock of the player on move resumes running from\r
 where it stopped.\r
-</font>\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=blue><strong>memory N</strong></font>\r
-<dd><font color=blue>\r
+<dt class="version44">memory N</dt>\r
+<dd class="version44">\r
 This command informs the engine on how much memory it is allowed to use maximally, in MegaBytes.\r
 On receipt of this command, the engine should adapt the size of its hash tables accordingly.\r
 This command does only fix the total memory use,\r
@@ -1040,11 +1043,10 @@ how to divide up the available memory between the various tables it wants to use
 This command will only be sent to engines that have requested it through the memory feature,\r
 and only at the start of a game,\r
 as the first of the commands to relay engine option settings just before each "new" command.\r
-</font>\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=blue><strong>cores N</strong></font>\r
-<dd><font color=blue>\r
+<dt class="version44">cores N</dt>\r
+<dd class="version44">\r
 This command informs the engine on how many CPU cores it is allowed to use maximally.\r
 This could be interpreted as the number of search threads for SMP engines. \r
 (Threads that do not consume significant amounts of CPU time, like I/O threads, need not be included in the count.)\r
@@ -1054,11 +1056,10 @@ but it is allowed to finish a search in progress before procesing the command.
 (Obeying the command should take priority over finishing a ponder search, though.)\r
 In any case it will be sent at the start of every game\r
 as the last command to relay engine option settings before the "new" command.\r
-</font>\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=blue><strong>egtpath TYPE PATH</strong></font>\r
-<dd><font color=blue>\r
+<dt class="version44">egtpath TYPE PATH</dt>\r
+<dd class="version44">\r
 This command informs the engine in which directory (given by the PATH argument)\r
 it can find end-game tables of the specified TYPE.\r
 The TYPE argument can be any character string which does not contain spaces.\r
@@ -1074,11 +1075,10 @@ It is upto the developer of the EGT format to specify the syntax of this paramet
 This command will only be sent to engines that have told the GUI they support EGTs of the given TYPE\r
 through the egt feature.\r
 It will be sent at the start of each game, before the "new" command.\r
-</font>\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=blue><strong>option NAME[=VALUE]</strong></font>\r
-<dd><font color=blue>\r
+<dt class="version44">option NAME[=VALUE]</dt>\r
+<dd class="version44">\r
 This command changes the setting of the option NAME defined by the engine \r
 (through an earlier feature command)\r
 to the given VALUE.\r
@@ -1094,7 +1094,60 @@ specified in this feature command,
 i.e. with 'spin' and 'check' options VALUE will be a decimal integer (in the latter case 0 or 1),\r
 with 'combo' and 'string' options VALUE will be a text string,\r
 and with 'button' and 'save' options no VALUE will be sent at all.\r
-</font>\r
+</dd>\r
+\r
+<dt class="version47">exclude MOVE</dt>\r
+<dt class="version47">include MOVE</dt>\r
+<dt class="version47">exclude all</dt>\r
+<dt class="version47">include all</dt>\r
+<dd class="version47">\r
+These commands change the set of moves that the engine should consider in the root node of its search,\r
+by removing or adding the mentioned MOVE from this set.\r
+After reaching a new position, (e.g. through a usermove, undo, new or setboard command),\r
+or after receiving "include all",\r
+this set should always be reset to all legal moves from that position.\r
+If the set of moves changes during a search, \r
+the engine could start a new search from scratch, or it can try to be smart, \r
+and continue the current search with the new set of moves\r
+(e.g. after exclusion of a move that has not been searched yet in the current iteration).\r
+After "exclude all", the engine would have no legal moves in the root,\r
+which logically should make it behave as if it is (stale)mated,\r
+but it is allowed to defer any effects of this command on a search in progress\r
+to when the set gets non-empty again through addition of a move.\r
+These commands will only be sent to engines that have requested such through the exclude feature.\r
+</dd>\r
+\r
+<dt class="version47">setscore SCORE DEPTH</dt>\r
+<dd class="version47">\r
+This command instructs the engine to treat future search requests on the current position\r
+(also when it is encountered inside a larger search tree)\r
+upto the given DEPTH as if these result is SCORE centi-Pawn in favor of the side that has the move in this position.\r
+It is entirely up to the engine to decide when the effect of this option should expire.\r
+(E.g. it could last upto the next "new" or "quit" command,\r
+or even into future sessions until the user explicitly clears it through an engine-defined option.)\r
+This command will only be sent to engines that have requested it through the setscore feature.\r
+</dd>\r
+\r
+<dt class="version48">lift SQUARE</dt>\r
+<dt class="version48">put SQUARE</dt>\r
+<dt class="version48">hover SQUARE</dt>\r
+<dd class="version48">\r
+These commands are only important for variants the GUI does not know the rules of,\r
+and keep the engine aware of how the user is manipulating pieces in the GUI,\r
+so that it can supply relevant rule information.\r
+The "lift" command is sent by the GUI when the user 'picks up' (or selects) a piece from the mentioned SQUARE,\r
+so that the engine can reply with a "highlight" command to mark the squares where that piece can move to.\r
+The "put" command similarly indicates where the user releases that piece;\r
+as the GUI clears the highlights on that event by itself, usually no engine response would be required.\r
+For promotion moves you can get a double "put" command, the first one sent when the piece lands on the square,\r
+without being decided yet what it promotes to, so the engine can send a "choice" command to\r
+specify the promotion choice the GUI should offer when promotion wasn't already implied by the "lift" location.\r
+The "hover" command is sent whenever the mouse pointer enters a square that is currently marked in red,\r
+(reserved for captures)\r
+so that the engine can (optionally) reply with a "highlight" command to mark victims of non-standard capture\r
+(such as e.p. capture in Chess, or jump capture in Checkers) when the user would move the currently selected piece there.\r
+These commands will only be sent to engines that have requested such through the highlight feature.\r
+</dd>\r
 </dl>\r
 \r
 <h3>Bughouse commands:</h3>\r
@@ -1111,45 +1164,41 @@ be added in the future.
 </p>\r
 \r
 <dl>\r
-<dt><strong>partner &lt;player&gt;</strong>\r
+<dt>partner &lt;player&gt;</dt>\r
 <dd>&lt;player&gt; is now your partner for future games.  Example: <pre>partner mann</pre>\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>partner</strong>\r
+<dt>partner</dt>\r
 <dd>Meaning: You no longer have a partner.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>ptell &lt;text&gt;</strong>\r
+<dt>ptell &lt;text&gt;</dt>\r
 <dd>Your partner told you &lt;text&gt;, either with a ptell or an ordinary tell.  \r
-<p>\r
+</dd>\r
 \r
-<dt><strong>holding [&lt;white&gt;] [&lt;black&gt;]</strong>\r
+<dt>holding [&lt;white&gt;] [&lt;black&gt;]</dt>\r
 <dd>White currently holds &lt;white&gt;; black currently holds &lt;black&gt;.\r
-  Example: <pre>holding [PPPRQ] []</pre>\r
+  Example: <pre>holding [PPPRQ] []</pre></dd>\r
 \r
-<dt><strong>holding [&lt;white&gt;] [&lt;black&gt;] &lt;color&gt;&lt;piece&gt;</strong>\r
+<dt>holding [&lt;white&gt;] [&lt;black&gt;] &lt;color&gt;&lt;piece&gt;</dt>\r
 <dd>White currently holds &lt;white&gt;; black currently holds &lt;black&gt;, after\r
-  &lt;color&gt; acquired &lt;piece&gt;.   Example: <pre>holding [PPPRQ] [R] BR</pre>\r
+  &lt;color&gt; acquired &lt;piece&gt;.   Example: <pre>holding [PPPRQ] [R] BR</pre></dd>\r
 </dl>\r
 \r
 <h2><a name="9">9. Commands from the engine to xboard</a></h2>\r
 \r
-<p>\r
-<font color=red>\r
+<p class="version1">\r
 In general, an engine should not send any output to xboard that is not\r
 described in this document.  As the protocol is extended, newer\r
 versions of xboard may recognize additional strings as commands that\r
 were previously not assigned a meaning.\r
-</font>\r
 </p>\r
 \r
 <dl>\r
-<dt><font color=red>\r
-<strong>feature FEATURE1=VALUE1 FEATURE2=VALUE2 ...</strong> \r
-</font>\r
 \r
-<dd><font color=red>\r
-Beginning with version 2, the protocol includes the "feature"\r
+<dt class="version1"> feature FEATURE1=VALUE1 FEATURE2=VALUE2 ... </dt>\r
+<dd class="version1">\r
+<p>Beginning with version 2, the protocol includes the "feature"\r
 command, which lets your engine control certain optional protocol\r
 features.  Feature settings are written as FEATURE=VALUE, where\r
 FEATURE is a name from the list below and VALUE is the value to be\r
@@ -1158,7 +1207,7 @@ type of value is listed for each feature.  String values are written
 in double quotes (for example, <tt>feature myname="Miracle Chess\r
 0.9"</tt>), integers are written in decimal, and boolean values are\r
 written as 0 for false, 1 for true.  Any number of features can be set\r
-in one feature command, or multiple feature commands can be given.\r
+in one feature command, or multiple feature commands can be given.</p>\r
 \r
 <p>\r
 Your engine should send one or more feature commands immediately after\r
@@ -1212,127 +1261,104 @@ protocol version by rejecting some features that are defined in that
 version; however, you should realize that engine authors are likely to\r
 code for xboard and may not be prepared to have a feature that they\r
 depend on be rejected.\r
+<span class="version44">If the GUI rejects an option feature because of the\r
+syntax of the value, it should print the value string with the\r
+"rejected" command, e.g. "rejected option nonsense" in response\r
+to receiving feature option="nonsense".</span>\r
 </p>\r
 \r
 <p>\r
 Here are the features that are currently defined.\r
 </p>\r
-</font>\r
 \r
 <dl>\r
-<dt><font color=red>\r
-<strong>ping</strong> (boolean, default 0, recommended 1)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">ping (boolean, default 0, recommended 1)</dt>\r
+<dd class="version1">\r
 If ping=1, xboard may use the protocol's new "ping" command;\r
 if ping=0, xboard will not use the command.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>setboard</strong> (boolean, default 0, recommended 1)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">setboard (boolean, default 0, recommended 1)</dt>\r
+<dd class="version1">\r
 If setboard=1, xboard will use the protocol's new "setboard" command\r
 to set up positions; if setboard=0, it will use the older "edit" command.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>playother</strong> (boolean, default 0, recommended 1)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">playother (boolean, default 0, recommended 1)</dt>\r
+<dd class="version1">\r
 If playother=1, xboard will use the protocol's new "playother" command\r
 when appropriate; if playother=0, it will not use the command.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>san</strong> (boolean, default 0)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">san (boolean, default 0)</dt>\r
+<dd class="version1">\r
 If san=1, xboard will send moves to the engine in standard algebraic\r
 notation (SAN); for example, Nf3.  If san=0, xboard will send moves in\r
 coordinate notation; for example, g1f3.  See MOVE in \r
 <a href="#8">section 8</a> above for more details of both kinds of notation.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>usermove</strong> (boolean, default 0)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">usermove (boolean, default 0)</dt>\r
+<dd class="version1">\r
 If usermove=1, xboard will send moves to the engine with the\r
 command "usermove MOVE"; if usermove=0, xboard will send just the move,\r
 with no command name.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>time</strong> (boolean, default 1, recommended 1)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">time (boolean, default 1, recommended 1)</dt>\r
+<dd class="version1">\r
 If time=1, xboard will send the "time" and "otim" commands to\r
 update the engine's clocks; if time=0, it will not.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>draw</strong> (boolean, default 1, recommended 1)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">draw (boolean, default 1, recommended 1)</dt>\r
+<dd class="version1">\r
 If draw=1, xboard will send the "draw" command if the engine's opponent\r
 offers a draw; if draw=0, xboard will not inform the engine about\r
 draw offers.  Note that if draw=1, you may receive a draw offer while you\r
 are on move; if this will cause you to move immediately, you should set\r
 draw=0.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>sigint</strong> (boolean, default 1)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">sigint (boolean, default 1)</dt>\r
+<dd class="version1">\r
 If sigint=1, xboard may send SIGINT (the interrupt signal) to\r
 the engine as <a href="#7">section 7</a> above; if sigint=0, it will\r
 not.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>sigterm</strong> (boolean, default 1)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">sigterm (boolean, default 1)</dt>\r
+<dd class="version1">\r
 If sigterm=1, xboard may send SIGTERM (the termination signal) to\r
 the engine as <a href="#7">section 7</a> above; if sigterm=0, it will\r
 not.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>reuse</strong> (boolean, default 1, recommended 1) \r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">reuse (boolean, default 1, recommended 1) </dt>\r
+<dd class="version1">\r
 If reuse=1, xboard may reuse your engine for multiple games.  If\r
 reuse=0 (or if the user has set the -xreuse option on xboard's command\r
 line), xboard will kill the engine process after every game and start\r
 a fresh process for the next game.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>analyze</strong> (boolean, default 1, recommended 1)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">analyze (boolean, default 1, recommended 1)</dt>\r
+<dd class="version1">\r
 If analyze=0, xboard will not try to use the "analyze" command; it\r
 will pop up an error message if the user asks for analysis mode.  If\r
 analyze=1, xboard will try to use the command if the user asks for\r
 analysis mode.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>myname</strong> (string, default determined from engine filename)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">myname (string, default determined from engine filename)</dt>\r
+<dd class="version1">\r
 This feature lets you set the name that xboard will use for your\r
 engine in window banners, in the PGN tags of saved game files, and when\r
 sending the "name" command to another engine.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>variants</strong> (string, see text below)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">variants (string, see text below)</dt>\r
+<dd><span class="version1">\r
 This feature indicates which chess variants your engine accepts.\r
 It should be a comma-separated list of variant names.  See the table\r
 under the "variant" command in <a href="#8">section 8</a> above.  If\r
@@ -1343,59 +1369,57 @@ Zippy mode.)  It is recommended that you set this feature to the
 correct value for your engine (just "normal" in most cases) rather\r
 than leaving the default in place, so that the user will get an\r
 appropriate error message if he tries to play a variant that your\r
-engine does not support.</font>\r
-<br>\r
-<font color=green>If your engine can play variants on a deviating board size,\r
+engine does not support.</span>\r
+<span class="version48">As of XBoard 4.8 a variant name not known to the GUI will be\r
+considered an engine-defined variant.\r
+The user will be given the opportunity to select such variants,\r
+but when this happens, the engine should define its meaning\r
+in detail with the aid of a "setup" command defined below,\r
+in order to avoid an error.</span>\r
+<br />\r
+<span class="version43">If your engine can play variants on a deviating board size,\r
 like capablanca on an 8x8 board, or capablanca crazyhouse,\r
-it can list them amongst the variants with a prefix spcifying board size plus\r
+it can list them amongst the variants with a prefix specifying board size plus\r
 holdings size, like 8x8+0_capablanca or 10x8+7_capablanca.\r
 If it is capable of playing any variant with an arbitrary board size,\r
 it should list "boardsize" as one of the variants.\r
 If there is a maximum to the board size, this can be prefixed,\r
 e.g. "12x10+0_boardsize".\r
-</font>\r
+</span>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>colors</strong> (boolean, default 1, recommended 0) \r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">colors (boolean, default 1, recommended 0) </dt>\r
+<dd><span class="version1">\r
 If colors=1, xboard uses the obsolete "white" and "black"\r
 commands in a stylized way that works with most older chess engines\r
 that require the commands.  See the "<a href="#13">Idioms</a>" section\r
 below for details.  If colors=0, xboard does not use the "white" and\r
 "black" commands at all.\r
-</font>\r
+</span>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>ics</strong> (boolean, default 0)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">ics (boolean, default 0)</dt>\r
+<dd class="version1">\r
 If ics=1, xboard will use the protocol's new "ics" command\r
 to inform the engine of whether or not it is playing on a chess server;\r
 if ics=0, it will not.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>name</strong> (boolean, see text below)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">name (boolean, see text below)</dt>\r
+<dd class="version1">\r
 If name=1, xboard will use the protocol's "name" command\r
 to inform the engine of the opponent's name; if name=0, it will not.\r
 By default, name=1 if the engine is playing on a chess server; name=0 if not.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=red>\r
-<strong>pause</strong> (boolean, default 0)\r
-</font>\r
-<dd><font color=red>\r
+<dt class="version1">pause (boolean, default 0)</dt>\r
+<dd class="version1">\r
 If pause=1, xboard may use the protocol's new "pause" command;\r
 if pause=0, xboard assumes that the engine does not support this command.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=green>\r
-<strong>nps</strong> (boolean, default ?)\r
-</font>\r
-<dd><font color=green>\r
+<dt class="version43">nps (boolean, default ?)</dt>\r
+<dd class="version43">\r
 If nps=1, it means the engine supports the nps command.\r
 If nps=0, it means the engine does not support it, and WinBoard should refrain from sending it.\r
 Default is that WinBoard sends it, in an attempt to try out if the engine understand it.\r
@@ -1403,12 +1427,10 @@ The engine should properly respond with "Error (unkown command): nps" if it does
 (as any protocol version pre-scribes),\r
 or WinBoard might assume that the engine did understand the command. \r
 In that case the use of different time standards that ensues could lead to time forfeits for the engine.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=green>\r
-<strong>debug</strong> (boolean, default 0)\r
-</font>\r
-<dd><font color=green>\r
+<dt class="version43">debug (boolean, default 0)</dt>\r
+<dd class="version43">\r
 If debug=1, it means the engine wants to send debug output prefixed by '#',\r
 which WinBoard should ignore, except for including it in the winboard.debug file.\r
 As this feature is added to protocol 2 ony late,\r
@@ -1417,81 +1439,184 @@ it is important that engines check if WinBoard accepts the feature.
 If the feature is rejected,\r
 engines must refrain from sending the debug output,\r
 or do so at their own risk.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=blue>\r
-<strong>memory</strong> (boolean, default 0)\r
-</font>\r
-<dd><font color=blue>\r
+<dt class="version44">memory (boolean, default 0)</dt>\r
+<dd class="version44">\r
 If memory=1, the size of the total amount of memory available for the memory-consuming tables of the engine \r
 (e.g. hash, EGTB cache)\r
 will be set by the GUI through the "memory" command.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=blue>\r
-<strong>smp</strong> (boolean, default 0)\r
-</font>\r
-<dd><font color=blue>\r
+<dt class="version44">smp (boolean, default 0)</dt>\r
+<dd class="version44">\r
 If smp=1, the GUI will send the "cores" command to the engine to inform it how many CPU cores it can use.\r
 Note that sending smp=1 does not imply the engine can use more than one CPU;\r
 just that it wants to receive the "cores" command.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=blue>\r
-<strong>egt</strong> (string, see text below)\r
-</font>\r
-<dd><font color=blue>\r
+<dt class="version44">egt (string, see text below)</dt>\r
+<dd class="version44">\r
 This feature indicates which end-game table formats the engine supports.\r
 It should be a comma-separated list of format names.\r
 See under the "egtpath" command in <a href="#8">section 8</a> above.\r
 If you do not set this feature, xboard will assume the engine does not support end-game tables,\r
 and will not send any "egtpath" commands to inform the engine about their whereabouts.\r
-</font>\r
+</dd>\r
 \r
-<dt><font color=blue>\r
-<strong>option</strong> (string, see text below)\r
-</font>\r
-<dd><font color=blue>\r
+<dt class="version44">option (string, see text below)</dt>\r
+<dd><span class="version44">\r
 This feature is used by the engine to define an option command to appear in a GUI menu,\r
-so that the user can change the corresponding setting of the engine through the GUI.\r
+so that the user can change the corresponding setting of the engine through the GUI interactively.\r
 The string describes the option by defining a name, type, current value and (sometimes) the acceptable value range.\r
-There are six different options types, each requiring a slighly different syntax of the defining string:\r
-<br>\r
+Unlike other features, option features are accumulated by the GUI, \r
+and the GUI must be able to add a new option to the list at any time,\r
+even after having received feature done=1.\r
+There are ten different options types, each requiring a slighly different syntax of the defining string:\r
+<br />\r
 feature option="NAME -button"\r
-<br>\r
+<br />\r
 feature option="NAME -save"\r
-<br>\r
+<br />\r
+feature option="NAME -reset"\r
+<br />\r
 feature option="NAME -check VALUE"\r
-<br>\r
+<br />\r
 feature option="NAME -string VALUE"\r
-<br>\r
+<br />\r
 feature option="NAME -spin VALUE MIN MAX"\r
-<br>\r
+<br />\r
 feature option="NAME -combo CHOICE1 /// CHOICE2 ..."\r
-<br>\r
+<br />\r
+feature option="NAME -slider VALUE MIN MAX"\r
+<br />\r
+feature option="NAME -file VALUE"\r
+<br />\r
+feature option="NAME -path VALUE"\r
+<br />\r
 NAME is an arbitrary alphanumeric string which can contain spaces; \r
-the oter words in capitals would be replaced by the current (default) setting of the option,\r
+the other words in capitals would be replaced by the current (default) setting of the option,\r
+(a character string for -string options, a decimal number for -spin and -check options,\r
+were the latter uses 1=checked, 0=unchecked),\r
 the minimum or maximum value of numeric (-spin) options, \r
 or arbitrary text labels (for -combo option).\r
-In the latter cae, the current value will be preceded by an asterisk.\r
-</font>\r
-\r
-<dt><font color=red>\r
-<strong>done</strong> (integer, no default)\r
-</font>\r
-<dd><font color=red>\r
+In the latter case, the current value will be preceded by an asterisk.\r
+The -file and -path options are similar to -string, but can be used to inform the GUI that\r
+the text represents a file name or folder name respectively, \r
+so the GUI dialog could add the appropriate browse button to the text-edit field.\r
+Similarly, a -slider option is like a -spin, but the GUI might make a different\r
+graphical representation for it.\r
+A -save option is like a -button, and defines an immediate command to be sent by the engine.\r
+With -save the GUI will make sure all current option settings are flushed to the engine\r
+before it sends this command.\r
+A -reset option is like a -button, but use of it purges the list of options before sending \r
+the corresponding option command to the engine.\r
+This enables the engine to completely redefine its options or their current settings,\r
+by sending a new set of option feature commands to the GUI, \r
+terminated by feature done=1.\r
+(The effect of sending an option feature for an option with the same name as was defined before, \r
+without first receiving a -reset option command, is undefined.)\r
+</span>\r
+</dd>\r
+\r
+<dt class="version47">exclude (boolean, default 0)</dt>\r
+<dd class="version47">\r
+If exclude=1 the GUI can send "exclude" and "include" commands to control which moves\r
+from the root position should be searched.\r
+</dd>\r
+\r
+<dt class="version47">setscore (boolean, default 0)</dt>\r
+<dd class="version47">\r
+If setscore=1 the GUI can send "setscore" commands to define the score of the current position.\r
+</dd>\r
+\r
+<dt class="version48">highlight (boolean, default 0)</dt>\r
+<dd class="version48">\r
+If highlight=1 the GUI will send "lift", "put" and "hover" commands to the engine,\r
+to keep the latter aware of the user's piece manipulation before the move entry is completed,\r
+so it can respond with the proper "highlight" and "click" commands.\r
+</dd>\r
+\r
+<dt class="version1">done (integer, no default)</dt>\r
+<dd><span class="version1">\r
 If you set done=1 during the initial two-second timeout after\r
 xboard sends you the "xboard" command, the\r
 timeout will end and xboard will not look for any more feature\r
 commands before starting normal operation.\r
 If you set done=0, the initial timeout is increased to one hour;\r
 in this case, you must set done=1 before xboard will enter normal operation.\r
-</font>\r
+</span>\r
+</dd>\r
 </dl>\r
-<p>\r
-\r
-<dt><strong>Illegal move: MOVE</strong>\r
-<dt><strong>Illegal move (REASON): MOVE</strong>\r
+</dd>\r
+</p>\r
+\r
+<dt>setup FEN</dt>\r
+<dt>setup (PIECETOCHAR) FEN</dt>\r
+<dt>setup (PIECETOCHAR) WxH+S_PARENTVARIANT FEN</dt>\r
+<dd>The engine can optionally send a setup command to the GUI in reply\r
+to the variant command.\r
+In the simplest form this sends the FEN of the initial position.\r
+This can be used to implement engines for non-standard variants\r
+that only differ from standard variants through the initial position.\r
+(E.g. many of the 'wild' boards you can play on an ICS.)\r
+Whether the GUI should obey or ignore this command depends on the situation.\r
+Normally it would ignore it in variants where it knows the standard initial position\r
+and legality testing is on, or when the user specified an initial position.\r
+In other cases it will use the FEN sent by the first engine\r
+for setting up the initial position, as if it was an externally supplied position.\r
+Such a position will always be sent to a second engine that might be involved,\r
+and any setup commands received from the latter will always be ignored.\r
+(This to allow for shuffle games, where the two engines might pick different setups.)\r
+When no initial position is known, such as for 'catch-all' variants like fairy,\r
+or whenever the board width is overruled to a non-standard value,\r
+the FEN will be used as default initial position even when legality testing is on.\r
+<p>\r
+Optionally the meaning of the piece ID letters in the FEN can be defined\r
+between parentheses; this will be interpreted as if it was the value of a\r
+-pieceToCharTable command-line option, mapping letters to GUI piece types.\r
+Also optionally behind that, the setup command can specify board width W,\r
+board height H and holdings size S, as well as a 'parent variant'.\r
+This is typically done in response to a variant command with a non-standard name,\r
+about which the GUI is not supposed to know anything at all.\r
+The engine can then specify board size, participating pieces, initial setup,\r
+and other rule details (inherited from the parent variant),\r
+saving the user the trouble to configure the GUI for this non-standard variant.\r
+Example:\r
+<pre>\r
+  setup (PN.RQKpn.rqk) 6x6+0_fairy rnqknr/pppppp/6/6/PPPPPP/RNQKNR w - - 0 1\r
+</pre>\r
+could be used by an engine for Los-Alamos Chess in response to 'variant losalamos',\r
+and would automatically switch the GUI to this variant as soon as the user\r
+selected it from the GUI menu.\r
+The PIECETOCHAR element would ensure a Bishop would not be accepted as promotion choice. \r
+</p>\r
+</dd>\r
+\r
+<dt><span class="version48">piece ID PIECEDESC</span></dt>\r
+<dd><span class="version48">The engine can send one or more piece commands\r
+in response to a variant command, in order to specify that the piece\r
+indicated by ID moves in a non-standard way in this variant.\r
+(This to enable the GUI to reliably perform mate detection, and produce good SAN.)\r
+Like in FEN the ID is a case-sensitive letter, specifying the color.\r
+When it is a capital suffixed by &, the description is valid for both colors.\r
+PIECEDESC describes the moves in 'Betza notation',\r
+basically a concatenation of one-letter (upper-case) codes for all of its moves.\r
+These codes can be prefixed with lower-case 'modifiers' to indicate directional sub-sets\r
+(combinations of fblrvs, if the piece is not totally symmetric),\r
+move modality (non-capture, capture, e.p. capture; mce),\r
+and whether the move can jump directly to its destination,\r
+or can be blocked (n).\r
+Moves only valid for a virgin piece are prefixed by 'i'.\r
+An optional numeric suffix on the move indicates the maximum number of times\r
+the move can be repeated in the same direction,\r
+to indicate sliders / riders (with the convention 0 = infinite).\r
+</span>\r
+</dd>\r
+</p>\r
+\r
+<dt>Illegal move: MOVE</dt>\r
+<dt>Illegal move (REASON): MOVE</dt>\r
 <dd>If your engine receives a MOVE command that is recognizably a move\r
 but is not legal in the current position, your engine must print an\r
 error message in one of the above formats so that xboard can pass the\r
@@ -1508,8 +1633,9 @@ Generally, xboard will never send an ambiguous move, so it does not
 matter whether you respond to such a move with an Illegal move message \r
 or an Error message.\r
 </p>\r
+</dd>\r
 \r
-<dt><strong>Error (ERRORTYPE): COMMAND</strong>\r
+<dt>Error (ERRORTYPE): COMMAND</dt>\r
 <dd>If your engine receives a command it does not understand or does\r
 not implement, it should print an error message in the above format so\r
 that xboard can parse it.  Examples:\r
@@ -1519,23 +1645,25 @@ that xboard can parse it.  Examples:
   Error (command not legal now): undo\r
   Error (too many parameters): level 1 2 3 4 5 6 7\r
 </pre>\r
+</dd>\r
 \r
-<dt><strong>move MOVE</strong>\r
+<dt>move MOVE</dt>\r
 <dd>Your engine is making the move MOVE.  Do not echo moves from\r
 xboard with this command; send only new moves made by the engine.\r
 \r
-<font color=red>\r
+<div class="version1">\r
 <p>For the actual move text from your chess engine (in place of MOVE\r
-above), your move should be either\r
+above), your move should be either</p>\r
 <ul>\r
 <li>in coordinate notation (e.g.,\r
 e2e4, e7e8q) with castling indicated by the King's two-square move (e.g.,\r
-e1g1), or\r
+e1g1), or</li>\r
 <li>in Standard Algebraic Notation (SAN) as defined in the\r
 Portable Game Notation standard (e.g, e4, Nf3, O-O, cxb5, Nxe4, e8=Q),\r
 with the extension piece@square (e.g., P@f7) to handle piece placement\r
-in bughouse and crazyhouse.\r
+in bughouse and crazyhouse.</li>\r
 </ul>\r
+<p>\r
 xboard itself also accepts some variants of SAN, but for compatibility\r
 with non-xboard interfaces, it is best not to rely on this behavior.\r
 </p>\r
@@ -1552,9 +1680,16 @@ engine to send SAN to the interface only if you have set feature san=1
 (which causes the interface to send SAN to you) and have received\r
 "accepted san" in reply.\r
 </p>\r
-</font>\r
 \r
-<dt><strong>RESULT {COMMENT}</strong> <dd>When your engine detects\r
+<p class="version48">\r
+For a multi-leg move, each leg will have to be sent in a separate "move" command,\r
+a comma at the end of all non-final legs indicating there is more to follow.\r
+</p>\r
+</div>\r
+</dd>\r
+\r
+<dt>RESULT {COMMENT}</dt>\r
+<dd>When your engine detects\r
 that the game has ended by rule, your engine must output a line of the\r
 form "RESULT {comment}" (without the quotes), where RESULT is a PGN\r
 result code (1-0, 0-1, or 1/2-1/2), and comment is the reason.  Here\r
@@ -1573,50 +1708,64 @@ Examples:
 <p>\r
 xboard relays the result to the user, the ICS, the other engine in Two\r
 Machines mode, and the PGN save file as required.\r
-<font color=green>Note that "definitey over" above means that sending this command \r
+<span class="version43">Note that "definitey over" above means that sending this command \r
 will be taken by WinBoard as an unconditional refusal of the engine to play on,\r
 which might cause you to forfeit if the game was in fact not over.\r
 This command should thus not be used to offer draws, accept draws,\r
-or make draw-by-rule claims that might not be valid \r
-(because it is not your move, and the opponent already moved without you knowing it yet).\r
-For offering and claiming draws, "offer draw" should be used.</font>\r
-<p>\r
+or make draw-by-rule claims that are not yet valid in the current position\r
+(but will be after you move).\r
+For offering and claiming such draws, "offer draw" should be used.</span>\r
+</p>\r
+\r
+<p class="version44">\r
+Note that (in accordance with FIDE rules) only KK, KNK, KBK and KBKB with all bishops on the\r
+same color can be claimed as draws on the basis of insufficient mating material.\r
+The end-games KNNK, KBKN, KNKN and KBKB with unlike bishops do have mate positions,\r
+and cannot be claimed.\r
+Complex draws based on locked Pawn chains will not be recognized as draws by most interfaces,\r
+so do not claim in such positions, but just offer a draw or play on.\r
+</p>\r
+\r
+<p class="version44">\r
 Note to GUI programmers: RESULT commands that the engine sends immediately after its move\r
 might be detected by the GUI only after the opponent has moved, because of communication\r
 and scheduling delays, no matter how fast the engine sent it.\r
 Any judgement of the validity of RESULT claims based on te "current" board position\r
 will have to account for this uncertainty.\r
 </p>\r
+</dd>\r
 \r
-<dt><strong>resign</strong>\r
+<dt>resign</dt>\r
 <dd>If your engine wants to resign, it can send the command "resign".\r
 Alternatively, it can use the "RESULT {comment}" command if the string\r
 "resign" is included in the comment; for example "0-1 {White\r
 resigns}".  xboard relays the resignation to the user, the ICS, the\r
 other engine in Two Machines mode, and the PGN save file as required.\r
-<p>\r
+<span class="version44">Note that many interfaces work more smoothly if you resign <em>before</em>\r
+you move.</span>\r
+</dd>\r
 \r
-<dt><strong>offer draw</strong>\r
+<dt>offer draw</dt>\r
 <dd>If your engine wants to offer a draw by agreement (as opposed to\r
 claiming a draw by rule), it can send the command "offer draw".\r
 xboard relays the offer to the user, the ICS, the other engine in Two\r
 Machines mode, and the PGN save file as required.  In Machine White,\r
 Machine Black, or Two Machines mode, the offer is considered valid\r
 until your engine has made two more moves.\r
-<font color=green>This command must also be used to accept a draw offer.\r
+<span class="version43">This command must also be used to accept a draw offer.\r
 Do not use the 1/2-1/2 command for that, as the offer might be no longer valid,\r
-in which case a refusal to play on implied by the RESULT command would make you forfeit the game.\r
+in which case a refusal to play on implied by the RESULT command might make you forfeit the game.\r
 "offer draw" should also be used to claim 50-move and 3-fold-repetition draws\r
 that will occur <em>after</em> your move, by sending it <em>before</em> making the move.\r
 WinBoard will grant draw offers without the opponent having any say in\r
 it in situations where draws can be claimed.\r
 Only if the draw cannot be claimed, the offer will be passed to your opponent after you make your next move,\r
 just before WinBoard relays this move to the opponent.\r
-</font>\r
-<p>\r
+</span>\r
+</dd>\r
 \r
-<dt><font color=red><strong>tellopponent MESSAGE</strong></font>\r
-<dd><font color=red>\r
+<dt class="version1">tellopponent MESSAGE</dt>\r
+<dd class="version1">\r
 This command lets the engine give a message to its opponent,\r
 independent of whether the opponent is a user on the local machine or\r
 a remote ICS user (Zippy mode).  MESSAGE consists of any characters,\r
@@ -1625,19 +1774,19 @@ playing against a user on the local machine, xboard pops up an
 information dialog containing the message.  When the engine is playing\r
 against an opponent on the ICS (Zippy mode), xboard sends "say\r
 MESSAGE\n" to the ICS.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>tellothers MESSAGE</strong> \r
-<dd>This command lets the engine give a message to people watching the\r
+<dt class="version1">tellothers MESSAGE </dt>\r
+<dd class="version1">This command lets the engine give a message to people watching the\r
 game other than the engine's opponent.  MESSAGE consists of any\r
 characters, including whitespace, to the end of the line.  When the\r
 engine is playing against a user on the local machine, this command\r
 does nothing.  When the engine is playing against an opponent on the\r
 ICS (Zippy mode), xboard sends "whisper MESSAGE\n" to the ICS.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>tellall MESSAGE</strong>\r
-<dd>This command lets the engine give a message to its opponent and\r
+<dt class="version1">tellall MESSAGE</dt>\r
+<dd class="version1">This command lets the engine give a message to its opponent and\r
 other people watching the game, \r
 independent of whether the opponent is a user on the local machine or\r
 a remote ICS user (Zippy mode).  MESSAGE consists of any characters,\r
@@ -1646,54 +1795,98 @@ playing against a user on the local machine, xboard pops up an
 information dialog containing the message.  When the engine is playing\r
 against an opponent on the ICS (Zippy mode), xboard sends "kibitz\r
 MESSAGE\n" to the ICS.\r
-</font>\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>telluser MESSAGE</strong>\r
+<dt>telluser MESSAGE</dt>\r
 <dd>xboard pops up an information dialog containing the message.\r
 MESSAGE consists of any characters, including whitespace, to the end\r
 of the line.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>tellusererror MESSAGE</strong>\r
+<dt>tellusererror MESSAGE</dt>\r
 <dd>xboard pops up an error dialog containing the message.\r
 MESSAGE consists of any characters, including whitespace, to the end\r
 of the line.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>askuser REPTAG MESSAGE</strong>\r
+<dt>askuser REPTAG MESSAGE</dt>\r
 <dd>Here REPTAG is a string containing no whitespace, and MESSAGE\r
 consists of any characters, including whitespace, to the end of the\r
 line.  xboard pops up a question dialog that says MESSAGE and\r
 has a typein box.  If the user types in "bar", xboard sends "REPTAG\r
 bar" to the engine.  The user can cancel the dialog and send nothing.\r
-<p>\r
+</dd>\r
 \r
-<dt><strong>tellics MESSAGE</strong>\r
+<dt>tellics MESSAGE</dt>\r
 <dd>In Zippy mode, xboard sends "MESSAGE\n" to ICS.  MESSAGE consists\r
 of any characters, including whitespace, to the end of the line.\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=red><strong>tellicsnoalias MESSAGE</strong></font>\r
-<dd><font color=red>\r
+<dt class="version1">tellicsnoalias MESSAGE</dt>\r
+<dd class="version1">\r
 In Zippy mode, xboard sends "xMESSAGE\n" to ICS, where "x" is a\r
 character that prevents the ICS from expanding command aliases, if\r
 xboard knows of such a character.  (On chessclub.com and chess.net,\r
 "/" is used; on freechess.org, "$" is used.)  MESSAGE consists of any\r
 characters, including whitespace, to the end of the line.\r
-</font>\r
-<p>\r
+</dd>\r
 \r
-<dt><font color=green><strong># COMMENT</strong></font>\r
-<dd><font color=green>\r
+<dt class="version43"># COMMENT</dt>\r
+<dd class="version43">\r
 The engine can send any string of printable characters, terminated by a newline,\r
 for inclusion in the winboard.debug file, provided the line starts with a '#' character.\r
 If the engine has set feature debug=1,\r
 it is guaranteed that WinBoard (and any future version of it) will completely ignore\r
 these lines in any other respect.\r
-</font>\r
+</dd>\r
+\r
+<dt class="version48">highlight COLORFEN</dt>\r
+<dd class="version48">\r
+Through this command the engine can apply markers to the board squares,\r
+of the same type as the GUI uses for indicating where the user could put down a piece he grabs.\r
+The COLORFEN is a construct similar to the board part of a FEN,\r
+in which the letters indicate colors rather than piece types.\r
+Eight colors are available, through the single-letter codes: RYGCBMWD,\r
+for red, yellow, green, cyan, blue, magenta, white, black ('dark'), respectively.\r
+For example, "highlight 8/8/8/8/4y3/4yr2/8/8" would mark e3 and e4 yellow, and f3 red.\r
+Some colors have special meaning to the GUI:\r
+<table>\r
+<tr><th>color</th><th>used for</th><th>effect</th><tr>\r
+<tr><td>red</td><td>capture</td><td>hovering over the square makes the GUI send a "hover" command</td><tr>\r
+<tr><td>magenta</td><td>promotion</td><td>moving to the square will be treated by the GUI as a promotion</td><tr>\r
+<tr><td>cyan</td><td>multi-move</td><td>moving to the square will not complete the move entry</td><tr>\r
+<tr><td>green</td><td>victims</td><td>no real effect, but used by convention to indicate capture victims on "hover"</td><tr>\r
+</table>\r
+The GUI will use the markers for legality checking,\r
+and will consider moves to squares left non-marked in a highlight command as illegal even when legality checking is off.\r
+This way the GUI can be made aware of the rules of unknown variants,\r
+popping up promotion dialogs where it would otherwise not,\r
+and knowing where to wait for more input on multi-leg moves.\r
+When it would be necessary to mark squares where no legal moves go to\r
+(e.g. to indicate side effects),\r
+the corresponding lower-case character can be used for the color.\r
+For indicating a legal destination square without visibly marking it, T (transparent) can be used.\r
+</dd>\r
+\r
+<dt class="version48">choice PIECESTRING</dt>\r
+<dd class="version48">\r
+This command can be sent to the GUI in response to a 'lift' or 'put' command that implies a promotion move,\r
+to alter the choice offered to the user for the promotion piece from what the GUI would naturally assume,\r
+to the piece IDs mentioned in the PIECESTRING.\r
+The IDs in that string should be given as capitals irrespective of color.\r
+The first piece mentioned will be the default choice.\r
+</dd>\r
+</dl>\r
+\r
+<dt class="version48">click SQUARE</dt>\r
+<dd class="version48">\r
+The GUI will treat this command as if the user had clicked the mentioned SQUARE.\r
+This can be used to implement one-click moving in variants the GUI does not know the rules of\r
+(having the engine send the clicks needed to complete the move).\r
+It can also be used to implement side effects of the move the GUI would not know about\r
+(e.g. moving the Rook in a non-standard castling).\r
+</dd>\r
 </dl>\r
-<p>\r
 \r
 <h2><a name="10">10. Thinking Output</a></h2>\r
 \r
@@ -1709,19 +1902,48 @@ output should be in the following format:
 \r
 <pre>ply score time nodes pv</pre>\r
 \r
-Where:\r
+<p>Where:</p>\r
 <table>\r
-<tr align="left"><th>ply<td>Integer giving current search depth.\r
-<tr align="left"><th>score<td>Integer giving current evaluation in centipawns.\r
-<tr align="left"><th>time<td>Current search time in centiseconds (ex:\r
-1028 = 10.28 seconds).\r
-\r
-<tr align="left"><th>nodes<td>Nodes searched.\r
-<tr align="left"><th>pv<td>Freeform text giving current "best" line.\r
+<tr><td>ply</td><td>Integer giving current search depth.</td></tr>\r
+<tr><td>score</td><td>Integer giving current evaluation in centipawns.</td></tr>\r
+<tr><td>time</td><td>Current search time in centiseconds (ex:1028 = 10.28 seconds).</td></tr>\r
+<tr><td>nodes</td><td>Nodes searched.</td></tr>\r
+<tr><td>*selective depth</td><td>Maximium length of any branch in the current search.</td></tr>\r
+<tr><td>*speed</td><td>Nodes per second in last measured time interval.</td></tr>\r
+<tr><td>*</td><td>Reserved for future extensions.</td></tr>\r
+<tr><td>*tbhits</td><td>Number of tablebase probes made in the current search.</td></tr>\r
+<tr><td>pv</td><td>Freeform text giving current "best" line.\r
 You can continue the pv onto another line if you start each\r
-continuation line with at least four space characters.\r
+continuation line with at least four space characters.</td></tr>\r
 </table>\r
 \r
+<p class="version48">\r
+The items marked with * are optional.\r
+If any of these items is present, the <b>pv</b> field must be preceeded directly by a tab character;\r
+if no tab character preceeds the first non-integer token,\r
+the <b>pv</b> field will start at the first non-blank character after <b>nodes</b>.\r
+Otherwise it will start after the last tab that is not behind any non-integer token.\r
+Of all integers between <b>nodes</b> and <b>pv</b> the last one is intepreted as <b>tbhits</b>.\r
+Of any remaining ones the first is interpreted as <b>selective depth</b>,\r
+and a second as <b>speed</b>.\r
+More infos could be added to this in the future.\r
+Note that older interfaces might consider the optional infos to be part of the <b>pv</b> field,\r
+and display them exactly as sent.\r
+It is therefore encouraged that engines use tabs or spaces to format this optional info\r
+so that it will display nicely in (not too wide) columns.\r
+</p>\r
+\r
+<p class="version48">\r
+A question mark as the last character in the <b>pv</b> field should be used to indicate\r
+the reported score is from a fail low, and thus represents an upper bound only.\r
+Similarly, an exclamation point should be used to indicate a fail high / lower bound.\r
+</p>\r
+\r
+<p class="version48">\r
+Mate scores should be indicated as 100000 + N for "mate in N moves",\r
+and -100000 - N for "mated in N moves".\r
+</p>\r
+\r
 <p>\r
 Example:\r
 </p>\r
@@ -1732,12 +1954,14 @@ Example:
 Meaning:\r
 </p>\r
 \r
-9 ply, score=1.56, time = 10.84 seconds, nodes=48000, \r
-PV = "Nf3 Nc6 Nc3 Nf6"\r
+<pre>\r
+9 ply, score=1.56, time = 10.84 seconds, nodes=48000, PV = "Nf3 Nc6 Nc3 Nf6"\r
+</pre>\r
 \r
 <p>\r
 Longer example from actual Crafty output:\r
 </p>\r
+\r
 <pre>\r
   4    109      14   1435  1. e4 d5 2. Qf3 dxe4 3. Qxe4 Nc6\r
   4    116      23   2252  1. Nf3 Nc6 2. e4 e6\r
@@ -1768,25 +1992,25 @@ units.  Example:
 <pre>\r
  2.     14    0       38   d1d2  e8e7 \r
  3+     78    0       65   d1d2  e8e7  d2d3 \r
- 3&     14    0       89   d1d2  e8e7  d2d3 \r
- 3&     76    0      191   d1e2  e8e7  e2e3 \r
+ 3&amp;     14    0       89   d1d2  e8e7  d2d3 \r
+ 3&amp;     76    0      191   d1e2  e8e7  e2e3 \r
  3.     76    0      215   d1e2  e8e7  e2e3 \r
- 4&     15    0      366   d1e2  e8e7  e2e3  e7e6 \r
+ 4&amp;     15    0      366   d1e2  e8e7  e2e3  e7e6 \r
  4.     15    0      515   d1e2  e8e7  e2e3  e7e6 \r
  5+     74    0      702   d1e2  f7f5  e2e3  e8e7  e3f4 \r
- 5&     71    0     1085   d1e2  e8e7  e2e3  e7e6  e3f4 \r
+ 5&amp;     71    0     1085   d1e2  e8e7  e2e3  e7e6  e3f4 \r
  5.     71    0     1669   d1e2  e8e7  e2e3  e7e6  e3f4 \r
- 6&     48    0     3035   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 \r
+ 6&amp;     48    0     3035   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 \r
  6.     48    0     3720   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 \r
- 7&     48    0     6381   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 \r
+ 7&amp;     48    0     6381   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 \r
  7.     48    0    10056   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4 \r
- 8&     66    1    20536   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5 \r
+ 8&amp;     66    1    20536   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5 \r
  8.     66    1    24387   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5 \r
- 9&     62    2    38886   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4 \r
+ 9&amp;     62    2    38886   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4 \r
                            d4e4 \r
  9.     62    4    72578   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4 \r
                            d4e4 \r
-10&     34    7   135944   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4 \r
+10&amp;     34    7   135944   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4 \r
                            d4e4  f7f5  e4f4 \r
 10.     34    9   173474   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4 \r
                            d4e4  f7f5  e4f4 \r
@@ -1832,8 +2056,7 @@ means there are 30 seconds.  The final 0 means that we are in
 conventional clock mode.\r
 </p>\r
 \r
-<p>\r
-<font color=green>\r
+<p class="version43">\r
 Note that the time parameter in this command is not a pure numeric argument,\r
 but in general is a character string, in order to pass the number of seconds.\r
 Engines are encouraged to ignore any unexpected characters at the end of this string,\r
@@ -1847,7 +2070,6 @@ rather than another 25 minutes for the next 40 moves.
 When the time comes, (i.e. after the 40 moves), \r
 it will be informed of the time-control change by receiving a new "level 0 5 0" command,\r
 but engines with advanced time management might want to plan for this in advance.\r
-</font>\r
 </p>\r
 \r
 <p>\r
@@ -1874,7 +2096,7 @@ can go negative and then become positive again because of the
 increment.)\r
 </p>\r
 \r
-<p><font color=blue>\r
+<p class="version44">\r
 The number of moves given in the level command (when non-zero) should \r
 be taken as the number of moves still to do before the specified time\r
 will be added to the clock, if the "level" command is received after\r
@@ -1893,7 +2115,7 @@ and the engine receives "level 20 22 0" just before move 41,
 it should understand that it should do the next 20 moves in 22 minutes\r
 (pehaps because the secondary session was 20 moves per 15 minutes,\r
 and it had 7 minutes left on its clock after the first 40 moves).\r
-</font></p>\r
+</p>\r
 \r
 <p>\r
 A special rule on some ICS implementations: if you ask for a game with\r
@@ -1930,11 +2152,11 @@ on one move does not accumulate for use on later moves.
 from files.  However, all of these look the same from the chess\r
 engine's perspective. Basically, the engine just has to respond to the\r
 "analyze" command.  \r
-<font color=red>\r
+<span class="version1">\r
 Beginning in protocol version 2,\r
 if your engine does not support analyze mode, it should use\r
 the feature command to set analyze=0.  \r
-</font>\r
+</span>\r
 The older method of\r
 printing the error message "Error (unknown command): analyze" in\r
 response to the "analyze" command will also work, however.\r
@@ -1949,19 +2171,18 @@ following commands while in analyze mode:
 </p>\r
 \r
 <ul>\r
-<li>Any legal move, as in force mode\r
-<li><strong>undo</strong>&nbsp;&nbsp; Back up one move and analyze previous position.\r
-<li><strong>new</strong>&nbsp;&nbsp; Reset position to start of game but stay in analyze mode.\r
-<li><font color=red><strong>setboard</strong> if you have set feature setboard=1; otherwise <strong>edit</strong>.  Exiting edit mode returns to analyze mode.\r
-</font>\r
-<li><strong>exit</strong>&nbsp;&nbsp; Leave analyze mode.\r
-<li><strong>.</strong>&nbsp;&nbsp; Send a search status update (optional); see below.\r
-<li><font color=red>\r
+<li>Any legal move, as in force mode</li>\r
+<li><strong>undo</strong>&nbsp;&nbsp; Back up one move and analyze previous position.</li>\r
+<li><strong>new</strong>&nbsp;&nbsp; Reset position to start of game but stay in analyze mode.</li>\r
+<li><span class="version1"><strong>setboard</strong> if you have set feature setboard=1; otherwise <strong>edit</strong>.  Exiting edit mode returns to analyze mode.</span></li>\r
+<li><strong>exit</strong>&nbsp;&nbsp; Leave analyze mode.</li>\r
+<li><strong>.</strong>&nbsp;&nbsp; Send a search status update (optional); see below.</li>\r
+<li><span class="version1">\r
 <strong>bk</strong>&nbsp;&nbsp; Show book moves from this position,\r
-if any; see above.</font>\r
-<li><font color=red>\r
+if any; see above.</span></li>\r
+<li><span class="version1">\r
 <strong>hint</strong>&nbsp;&nbsp; Show the predicted move from this\r
-position, if any; see above.</font>\r
+position, if any; see above.</span></li>\r
 </ul>\r
   \r
 <p>\r
@@ -1975,19 +2196,18 @@ The chess engine should respond to ".\n" with a line like this:
 </p>\r
 \r
 <pre>\r
-stat01: time nodes ply mvleft mvtot <font color=red>mvname</font>\r
+stat01: time nodes ply mvleft mvtot <span class="version1">mvname</span>\r
 </pre>\r
 \r
-Where:\r
+<p>Where:</p>\r
 <table>\r
-<tr align="left"><th>time<td>Elapsed search time in centiseconds (ie: 567 = 5.67 seconds).\r
-<tr align="left"><th>nodes<td>Nodes searched so far.\r
-<tr align="left"><th>ply<td>Search depth so far.\r
-<tr align="left"><th>mvleft<td>Number of moves left to consider at this depth.\r
-<tr align="left"><th>mvtot<td>Total number of moves to consider.\r
-<tr align="left"><th><font color=red>mvname</font><td><font color=red>\r
-Move currently being considered (SAN or coordinate notation).  Optional;\r
-added in protocol version 2.</font>\r
+<tr><td>time</td><td>Elapsed search time in centiseconds (ie: 567 = 5.67 seconds).</td></tr>\r
+<tr><td>nodes</td><td>Nodes searched so far.</td></tr>\r
+<tr><td>ply</td><td>Search depth so far.</td></tr>\r
+<tr><td>mvleft</td><td>Number of moves left to consider at this depth.</td></tr>\r
+<tr><td>mvtot</td><td>Total number of moves to consider.</td></tr>\r
+<tr class="version1"><td>mvname</td><td>Move currently being considered (SAN or coordinate notation).  Optional;\r
+added in protocol version 2.</td></tr>\r
 </table>\r
 \r
 <p>\r
@@ -2037,70 +2257,69 @@ that new engines set the feature colors=0 and/or ignore the commands.
 \r
 <dl>\r
 \r
-<dt><strong>time N</strong>\r
-<dt><strong>otim N</strong>\r
-<dt><strong>MOVE</strong>\r
+<dt>time N</dt>\r
+<dt>otim N</dt>\r
+<dt>MOVE</dt>\r
 <dd>Sent when the opponent makes a move and the engine is already\r
 playing the opposite color.\r
-<p>\r
-\r
-<dt><strong>white</strong>\r
-<dt><strong>go</strong>\r
+</dd>\r
+<dt>white</dt>\r
+<dt>go</dt>\r
 <dd>Sent when the engine is in force mode or playing Black but should\r
 switch to playing White.  This sequence is sent only when White is\r
 already on move.  \r
-<font color=red>\r
+<span class="version1">\r
 If you set the feature colors=0, "white" is not sent.\r
-</font>\r
-<p>\r
+</span>\r
+</dd>\r
 \r
-<dt><strong>black</strong>\r
-<dt><strong>go</strong>\r
+<dt>black</dt>\r
+<dt>go</dt>\r
 <dd>Sent when the engine is in force mode or playing White but should\r
 switch to playing Black.  This sequence is sent only when Black is\r
 already on move.  \r
-<font color=red>\r
+<span class="version1">\r
 If you set the feature colors=0, "black" is not sent.\r
-</font>\r
-<p>\r
-\r
-<dt><strong>white</strong>\r
-<dt><strong>time N</strong>\r
-<dt><strong>otim N</strong>\r
-<dt><strong>black</strong>\r
-<dt><strong>go</strong>\r
+</span>\r
+</dd>\r
+\r
+<dt>white</dt>\r
+<dt>time N</dt>\r
+<dt>otim N</dt>\r
+<dt>black</dt>\r
+<dt>go</dt>\r
 <dd>Sent when Black is on move, the engine is in force mode or playing\r
 White, and the engine's clock needs to be updated before it starts\r
 playing.  \r
 The initial "white" is a kludge to accommodate GNU Chess\r
 4's variant interpretation of these commands.  \r
-<font color=red>\r
+<span class="version1">\r
 If you set the feature colors=0, "white" and "black" are not sent.\r
-</font>\r
-<p>\r
-\r
-<dt><strong>black</strong>\r
-<dt><strong>time N</strong>\r
-<dt><strong>otim N</strong>\r
-<dt><strong>white</strong>\r
-<dt><strong>go</strong>\r
+</span>\r
+</dd>\r
+\r
+<dt>black</dt>\r
+<dt>time N</dt>\r
+<dt>otim N</dt>\r
+<dt>white</dt>\r
+<dt>go</dt>\r
 <dd>Sent when White is on move, the engine is in force mode or playing\r
 Black, and the engine's clock needs to be updated before it starts\r
 playing.  See previous idiom.  \r
 The initial "black" is a kludge to accommodate GNU Chess\r
 4's variant interpretation of these commands.  \r
-<font color=red>\r
+<span class="version1">\r
 If you set the feature colors=0, "black" and "white" are not sent.\r
-</font>\r
-<p>\r
+</span>\r
+</dd>\r
 \r
-<dt><strong>hard</strong>\r
-<dt><strong>easy</strong>\r
+<dt>hard</dt>\r
+<dt>easy</dt>\r
 <dd>Sent in sequence to turn off pondering if xboard is not sure\r
 whether it is on.  When xboard is sure, it will send "hard" or "easy"\r
 alone.  xboard does this because "easy" is a toggle in GNU Chess 4 but\r
 "hard" is an absolute on.\r
-\r
+</dd>\r
 </dl>\r
 \r
 <p>\r
@@ -2112,17 +2331,17 @@ code commands or the resign command instead.
 </p>\r
 \r
 <table>\r
-<tr align="left"><th>Command              <th>Interpreted as\r
-<tr align="left"><td>White resigns        <td>0-1 {White resigns}\r
-<tr align="left"><td>Black resigns        <td>1-0 {Black resigns}\r
-<tr align="left"><td>White                <td>1-0 {White mates}\r
-<tr align="left"><td>Black                <td>0-1 {Black mates}\r
-<tr align="left"><td>Draw                 <td>1/2-1/2 {Draw}\r
-<tr align="left"><td>computer mates       <td>1-0 {White mates} or 0-1 {Black mates}\r
-<tr align="left"><td>opponent mates       <td>1-0 {White mates} or 0-1 {Black mates}\r
-<tr align="left"><td>computer resigns     <td>0-1 {White resigns} or 1-0 {Black resigns}\r
-<tr align="left"><td>game is a draw       <td>1/2-1/2 {Draw}\r
-<tr align="left"><td>checkmate            <td>1-0 {White mates} or 0-1 {Black mates}\r
+<tr><th>Command</th>              <th>Interpreted as</th></tr>\r
+<tr><td>White resigns        </td><td>0-1 {White resigns}</td></tr>\r
+<tr><td>Black resigns        </td><td>1-0 {Black resigns}</td></tr>\r
+<tr><td>White                </td><td>1-0 {White mates}</td></tr>\r
+<tr><td>Black                </td><td>0-1 {Black mates}</td></tr>\r
+<tr><td>Draw                 </td><td>1/2-1/2 {Draw}</td></tr>\r
+<tr><td>computer mates       </td><td>1-0 {White mates} or 0-1 {Black mates}</td></tr>\r
+<tr><td>opponent mates       </td><td>1-0 {White mates} or 0-1 {Black mates}</td></tr>\r
+<tr><td>computer resigns     </td><td>0-1 {White resigns} or 1-0 {Black resigns}</td></tr>\r
+<tr><td>game is a draw       </td><td>1/2-1/2 {Draw}</td></tr>\r
+<tr><td>checkmate            </td><td>1-0 {White mates} or 0-1 {Black mates}</td></tr>\r
 </table>\r
 \r
 <p>\r
@@ -2138,8 +2357,8 @@ An alternative move syntax is also recognized:
 </p>\r
 \r
 <table>\r
-<tr align="left"><th>Command              <th>Interpreted as\r
-<tr align="left"><td>NUMBER ... MOVE      <td>move MOVE\r
+<tr><th>Command              </th><th>Interpreted as</th></tr>\r
+<tr><td>NUMBER ... MOVE      </td><td>move MOVE</td></tr>\r
 </table>\r
 \r
 <p>\r
@@ -2175,19 +2394,16 @@ commands "tellall", "tellothers", "tellopponent", "tellics" (if needed),
 "1/2-1/2 {COMMENT}", or "offer draw", as appropriate.\r
 </p>\r
 \r
-<p>\r
-<font color=red>\r
+<p class="version1">\r
 If the engine responds to the "sd DEPTH" command with an error message\r
 indicating the command is not supported (such as "Illegal move: sd"),\r
 xboard sets an internal flag and subsequently uses the command\r
 "depth\nDEPTH" instead, for the benefit of GNU Chess 4.  Note the\r
 newline in the middle of this command!  New engines should not rely on\r
 this feature.\r
-</font>\r
 </p>\r
 \r
-<p>\r
-<font color=red>\r
+<p class="version1">\r
 If the engine responds to the "st TIME" command with an error message\r
 indicating the command is not supported (such as "Illegal move: st"),\r
 xboard sets an internal flag and subsequently uses the command "level\r
@@ -2196,10 +2412,9 @@ not a standard use of the level command, as TIME seconds are not added
 after each player makes 1 move; rather, each move is made in at most\r
 TIME seconds.  New engines should not implement or rely on this\r
 feature.\r
-</font>\r
 </p>\r
 \r
-<font color=red>\r
+<div class="version1">\r
 <p>\r
 In support of the -firstHost/-secondHost features, which allow a chess\r
 engine to be run on another machine using the rsh protocol, xboard recognizes\r
@@ -2207,18 +2422,17 @@ error messages that are likely to come from rsh as fatal errors.  The following
 messages are currently recognized:\r
 </p>\r
 \r
-<blockquote>\r
-unknown host<br>\r
-No remote directory<br>\r
-not found<br>\r
-No such file<br>\r
-can't alloc<br>\r
-Permission denied<br>\r
-</blockquote>\r
-</font>\r
+<ul>\r
+<li>unknown host</li>\r
+<li>No remote directory</li>\r
+<li>not found</li>\r
+<li>No such file</li>\r
+<li>can't alloc</li>\r
+<li>Permission denied</li>\r
+</ul>\r
+</div>\r
 \r
-<p>\r
-<font color=red>\r
+<p class="version1">\r
 ChessBase/Fritz now implements the xboard/winboard protocol and can use\r
 WinBoard-compatible engines in its GUI.  ChessBase's version of the\r
 protocol is generally the same as version 1, except that they have\r
@@ -2230,21 +2444,16 @@ implement these additional commands, and you should also be aware of
 the peculiar way that ChessBase uses the protocol.  See their <a\r
 href="http://www.chessbase.com/Products/engines/winboard/tech.htm"\r
 >web page</a> for documentation.\r
-</font>\r
 </p>\r
 \r
-<p>\r
-<font color=red>\r
+<p class="version1">\r
 ChessMaster 8000 also implements version 1 of the xboard/winboard\r
 protocol and can use WinBoard-compatible engines.  The original\r
 release of CM8000 also has one additional restriction: only pure\r
 coordinate notation (e.g., e2e4) is accepted in the move command.  A\r
 patch to correct this should be available from The Learning Company\r
 (makers of CM8000) in February 2001.\r
-</font>\r
 </p>\r
 \r
-<hr noshade size="2">\r
-<address>converted to HTML by <a href="http://www.jakob.at/steffen/">Steffen A. Jakob</a></address>\r
 </body>\r
 </html>\r