-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>Chess Engine Communication Protocol</title>
<h1>Chess Engine Communication Protocol</h1>
<h2><a href="http://www.tim-mann.org/">Tim Mann</a></h2>
<p>
-Last modified on Mon Feb 5 23:23:16 PST 2001 by mann<br>
+$Id$<br>
Version 2; implemented in xboard/WinBoard 4.2.1 and later.<br>
Changes since version 1 are indicated in <font color=red>red</font>.
<hr noshade size="2">
<li><a href="#4">4. How it got this way</a>
<li><a href="#5">5. WinBoard requires Win32 engines</a>
<li><a href="#6">6. Hints on input/output</a>
-<li><a href="#7">7. Interrupts</a>
+<li><a href="#7">7. Signals</a>
<li><a href="#8">8. Commands from xboard to the engine</a>
<li><a href="#9">9. Commands from the engine to xboard</a>
<li><a href="#10">10. Thinking Output</a>
</p>
<p>
-There are two reasons I can imagine someone wanting to do this:
+There are two reasons I can imagine someone wanting to do this:
</p>
<ol>
<li>You have, or are developing, a chess engine but you don't want to
-write your own graphical interface.
+write your own graphical interface.
<li>You have, or are developing,a chess engine, and you want to
interface it to the Internet Chess Server.
</ol>
<p>
I'd like to hear from everyone who is trying to interface their own
-chess engine to xboard/WinBoard. Please email me, <a
-href="mailto:tim.mann@compaq.com">tim.mann@compaq.com</a>. Also, please join
-the mailing list for authors of xboard/WinBoard compatible chess
-engines. The list is now hosted by egroups.com; you can join at <a
-href="http://www.egroups.com/group/chess-engines"
->http://www.egroups.com/group/chess-engines</a>, or you can read the
+chess engine to xboard/WinBoard. Please join the mailing list for
+authors of xboard/WinBoard compatible chess engines and post a message
+about what you're doing. The list is now hosted by Yahoo Groups; you
+can join at <a href="http://groups.yahoo.com/group/chess-engines"
+>http://groups.yahoo.com/group/chess-engines</a>, or you can read the
list there without joining. The list is filtered to prevent spam.
</p>
DLLs, BSOD, or any of the other infinite complexity that
Microsoft has created just to talk between two programs. A WinBoard
chess engine is a Win32 console program that simply reads from its
-standard input and writes to its standard output. See sections
+standard input and writes to its standard output. See sections
<a href="#5">5</a> and <a href="#6">6</a> below for additional details.
</p>
<font color=red>
This release of the protocol specification is the first to carry a
version number of its own -- version 2. Previous releases simply
-carried a last-modified date and were loosely tied to specific
+carried a last-modified date and were loosely tied to specific
releases of xboard and WinBoard. The version number "1" applies
generally to all those older versions of the protocol.
</font>
<font color=red>
<p>Protocol version 2 remains compatible with older engines but has
-several new capabilities. In particular, it adds the
+several new capabilities. In particular, it adds the
"feature" command, a new mechanism for making backward-compatible
changes and extensions to the protocol. Engines that do not support a
particular new feature do not have to use it; new features are not
including the "ping" command (recommended for all engines), the
"setboard" command, and many optional parameters. Additional features
will probably be added in future versions.
-</font>
</p>
+</font>
<h2><a name="5">5. WinBoard requires Win32 engines</a></h2>
a pipe, a console, or something else. (More Microsoft brain damage
here -- did they never hear of device independence?) For pipes, you
can use <tt>PeekNamedPipe</tt> to poll (even when the pipe is unnamed).
-For consoles,
+For consoles,
you can use <tt>GetNumberOfConsoleInputEvents</tt>. For sockets only, you can
use <tt>select()</tt>. It might be possible to use
-<tt>WaitForSingleObject</tt> more
+<tt>WaitForSingleObject</tt> more
generally, but I have not tried it. Some code to do these things can
be found in Crafty's utility.c, but I don't guarantee that it's all
correct or optimal.
characters in the buffer whenever you poll. C I/O libraries generally
do not provide any portable way to do this. Under C++, you can use
<tt>cin.rdbuf()->in_avail()</tt>. This method has been reported to
-work with
+work with
EXchess. Remember that if there are no characters in the buffer, you
still have to poll the underlying file descriptor too, using the
method described above.
<p>
Here are details for the curious. If xboard needs to send a command
-when it is the chess engine's move (such as before the "?" command),
+when it is the chess engine's move (such as before the "?" command),
it sends a <tt>SIGINT</tt> first. If xboard needs to send commands when it is
not the chess engine's move, but the chess engine may be pondering
(thinking on its opponent's time) or analyzing (analysis or analyze
Another <tt>SIGINT</tt> is not sent until another move is made, even if xboard
issues more commands. This behavior is necessary for GNU Chess 4. The
first <tt>SIGINT</tt> stops it from pondering until the next move, but on some
-systems, GNU Chess 4 will die if it receives a <tt>SIGINT</tt> when not
+systems, GNU Chess 4 will die if it receives a <tt>SIGINT</tt> when not
actually thinking or pondering.
</p>
game. If your engine can't play multiple games, you can disable reuse
<font color=red>
either with the "feature" command (beginning in protocol version
-2; see below) or
+2; see below) or
</font>
with xboard's -xreuse (or -xreuse2) command line
option. xboard will then ask the process to quit after each game and
"xboard" command comes in.
<p>
-<font color=red>
-<dt><strong>protover N</strong>
-<dd>Beginning in protocol version 2 (in which N=2), this command will
+<dt><font color=red><strong>protover N</strong></font>
+<dd><font color=red>
+Beginning in protocol version 2 (in which N=2), this command will
be sent immediately after the "xboard" command. If you receive some
other command immediately after "xboard" (such as "new"), you can
assume that protocol version 1 is in use. The "protover" command is
</font>
<p>
-<font color=red>
-<dt><strong>accepted</strong>
-<dt><strong>rejected</strong>
-<dd>These commands may be sent to your engine in reply to the "feature"
+<dt><font color=red><strong>accepted</strong></font>
+<dt><font color=red><strong>rejected</strong></font>
+<dd><font color=red>
+These commands may be sent to your engine in reply to the "feature"
command; see its documentation below.
</font>
<p>
<dd>
<font color=red>
(This command is obsolete as of protocol version 2, but is still
-sent in some situations to accommodate older engines unless you disable it
+sent in some situations to accommodate older engines unless you disable it
with the feature command.)
</font>
Set White on move. Set the engine to play Black. Stop clocks.
<p>
-
+
<dt><strong>black</strong>
<dd>
<font color=red>
(This command is obsolete as of protocol version 2, but is still
-sent in some situations to accommodate older engines unless you disable it
+sent in some situations to accommodate older engines unless you disable it
with the feature command.)
</font>
Set Black on move. Set the engine to play White. Stop clocks.
<dt><strong>level MPS BASE INC</strong>
<dd>Set time controls. See the <a href="#11">Time Control</a> section below.
<p>
-
+
<dt><strong>st TIME</strong>
<dd>Set time controls. See the <a href="#11">Time Control</a> section
below. The commands "level" and "st" are not used together.
<font color=red>
Beginning in protocol version 2, if you can't handle the time and
otim commands, you can use the "feature" command to disable them; see
-below.
+below.
</font>
The following techniques from older protocol versions also
work: You can ignore the time and otim commands (that is, treat them
the section "<a href="#9">Commands from the engine to xboard</a>".
</p>
-<font color=red>
-<dt><strong>usermove MOVE</strong>
-<dd>By default, moves are sent to the engine without a command name;
+<dt><font color=red><strong>usermove MOVE</strong></font>
+<dd><font color=red>
+By default, moves are sent to the engine without a command name;
the notation is just sent as a line by itself.
Beginning in protocol version 2, you can use the feature command
to cause the command name "usermove" to be sent before the move.
while the engine is on move.
</p>
-<font color=red>
-<dt><strong>ping N</strong>
+<dt><font color=red><strong>ping N</strong></font>
<dd>
+<font color=red>
In this command, N is a decimal number. When you receive the command,
reply by sending the string <strong>pong N</strong>, where N is the
same number you received. Important: You must not reply to a "ping"
the protocol to be fixed, so it is highly recommended that you
implement it. It is especially important in simple engines that do
not ponder and do not poll for input while thinking, but it is needed in all
-engines.
+engines.
</p>
</font>
stops playing by selecting Reset, Edit Game, Exit or the like.
</p>
-<font color=red>
-<dt><strong>setboard FEN</strong>
-<dd>The setboard command is the new way to set up positions, beginning
+<dt><font color=red><strong>setboard FEN</strong></font>
+<dd><font color=red>
+The setboard command is the new way to set up positions, beginning
in protocol version 2. It is not used unless it has been selected
with the feature command. Here FEN is a position in Forsythe-Edwards
Notation, as defined in the PGN standard.
be used to send an illegal position to the engine. The user can
create any position with xboard's Edit Position command (even, say,
an empty board, or a board with 64 white kings and no black ones).
-If your engine receives a position that it considers illegal,
+If your engine receives a position that it considers illegal,
I suggest that you send the response "tellusererror Illegal position",
and then respond to any attempted move with "Illegal move" until
the next new, edit, or setboard command.</p>
<p>
This sequence is used to avoid the "black" command, which is now
-considered obsolete and which many engines never did implement as
+considered obsolete and which many engines never did implement as
specified in this document.
</p>
<dt><strong>easy</strong>
<dd>Turn off pondering.
<p>
-
+
<dt><strong>post</strong>
-<dd>Turn on thinking/pondering output.
+<dd>Turn on thinking/pondering output.
See <a href="#10">Thinking Output</a> section.
<p>
<dt><strong>nopost</strong>
<dd>Turn off thinking/pondering output.
<p>
-
+
<dt><strong>analyze</strong>
<dd>Enter analyze mode. See <a href="#12">Analyze Mode</a> section.
<p>
<dt><strong>name X</strong> <dd>This command informs the engine of its
opponent's name. When the engine is playing on a chess server, xboard
-obtains the opponent's name from the server.
+obtains the opponent's name from the server.
<font color=red>
When the engine is
playing locally against a human user, xboard obtains the user's login
not appear on servers using outdated versions of the FICS code.) In
Zippy mode, it sends these ratings on to the chess engine using the
"rating" command. The chess engine's own rating comes first, and if
-either opponent is not rated, his rating is given as 0.
+either opponent is not rated, his rating is given as 0.
<font color=red>
In the future this command may also be used in other modes, if ratings
are known.
Example: <pre>rating 2600 1500</pre>
<p>
-<font color=red>
-<dt><strong>ics HOSTNAME</strong>
-<dd>If HOSTNAME is "-", the engine is playing against a local
+<dt><font color=red><strong>ics HOSTNAME</strong></font>
+<dd><font color=red>
+If HOSTNAME is "-", the engine is playing against a local
opponent; otherwise, the engine is playing on an Internet Chess Server
(ICS) with the given hostname. This command is new in protocol
version 2 and is not sent unless the engine has enabled it with
their playing style when they receive this command.
<p>
-<font color=red>
-<dt><strong>pause</strong>
-<dt><strong>resume</strong>
-<dd>(These commands are new in protocol
+<dt><font color=red><strong>pause</strong></font>
+<dt><font color=red><strong>resume</strong></font>
+<dd><font color=red>(These commands are new in protocol
version 2 and will not be sent unless feature pause=1 is set. At
this writing, xboard actually does not use the commands at all, but it
or other interfaces may use them in the future.)
>zippy.README</a> for information on Zippy mode and how to turn on the
bughouse support. The bughouse move format is given above. xboard
sends the following additional commands to the engine when in bughouse
-mode.
+mode.
Commands to inform your engine of the partner's game state may
be added in the future.
</p>
<p>
<dt><strong>ptell <text></strong>
-<dd>Your partner told you <text>, either with a ptell or an ordinary tell.
+<dd>Your partner told you <text>, either with a ptell or an ordinary tell.
<p>
<dt><strong>holding [<white>] [<black>]</strong>
</p>
<dl>
-<font color=red>
-<dt><strong>feature FEATURE1=VALUE1 FEATURE2=VALUE2 ...</strong>
+<dt><font color=red>
+<strong>feature FEATURE1=VALUE1 FEATURE2=VALUE2 ...</strong>
+</font>
-<dd>Beginning with version 2, the protocol includes the "feature"
+<dd><font color=red>
+Beginning with version 2, the protocol includes the "feature"
command, which lets your engine control certain optional protocol
features. Feature settings are written as FEATURE=VALUE, where
FEATURE is a name from the list below and VALUE is the value to be
<p>
Here are the features that are currently defined.
</p>
+</font>
<dl>
-<dt><strong>ping</strong> (boolean, default 0, recommended 1)
-<dd>If ping=1, xboard may use the protocol's new "ping" command;
+<dt><font color=red>
+<strong>ping</strong> (boolean, default 0, recommended 1)
+</font>
+<dd><font color=red>
+If ping=1, xboard may use the protocol's new "ping" command;
if ping=0, xboard will not use the command.
+</font>
-<dt><strong>setboard</strong> (boolean, default 0, recommended 1)
-<dd>If setboard=1, xboard will use the protocol's new "setboard" command
+<dt><font color=red>
+<strong>setboard</strong> (boolean, default 0, recommended 1)
+</font>
+<dd><font color=red>
+If setboard=1, xboard will use the protocol's new "setboard" command
to set up positions; if setboard=0, it will use the older "edit" command.
+</font>
-<dt><strong>playother</strong> (boolean, default 0, recommended 1)
-<dd>If playother=1, xboard will use the protocol's new "playother" command
+<dt><font color=red>
+<strong>playother</strong> (boolean, default 0, recommended 1)
+</font>
+<dd><font color=red>
+If playother=1, xboard will use the protocol's new "playother" command
when appropriate; if playother=0, it will not use the command.
+</font>
-<dt><strong>san</strong> (boolean, default 0)
-<dd>If san=1, xboard will send moves to the engine in standard algebraic
+<dt><font color=red>
+<strong>san</strong> (boolean, default 0)
+</font>
+<dd><font color=red>
+If san=1, xboard will send moves to the engine in standard algebraic
notation (SAN); for example, Nf3. If san=0, xboard will send moves in
-coordinate notation; for example, g1f3. See MOVE in
+coordinate notation; for example, g1f3. See MOVE in
<a href="#8">section 8</a> above for more details of both kinds of notation.
+</font>
-<dt><strong>usermove</strong> (boolean, default 0)
-<dd>If usermove=1, xboard will send moves to the engine with the
+<dt><font color=red>
+<strong>usermove</strong> (boolean, default 0)
+</font>
+<dd><font color=red>
+If usermove=1, xboard will send moves to the engine with the
command "usermove MOVE"; if usermove=0, xboard will send just the move,
with no command name.
+</font>
-<dt><strong>time</strong> (boolean, default 1, recommended 1)
-<dd>If time=1, xboard will send the "time" and "otim" commands to
+<dt><font color=red>
+<strong>time</strong> (boolean, default 1, recommended 1)
+</font>
+<dd><font color=red>
+If time=1, xboard will send the "time" and "otim" commands to
update the engine's clocks; if time=0, it will not.
+</font>
-<dt><strong>draw</strong> (boolean, default 1, recommended 1)
-<dd>If draw=1, xboard will send the "draw" command if the engine's opponent
+<dt><font color=red>
+<strong>draw</strong> (boolean, default 1, recommended 1)
+</font>
+<dd><font color=red>
+If draw=1, xboard will send the "draw" command if the engine's opponent
offers a draw; if draw=0, xboard will not inform the engine about
draw offers. Note that if draw=1, you may receive a draw offer while you
are on move; if this will cause you to move immediately, you should set
draw=0.
+</font>
-<dt><strong>sigint</strong> (boolean, default 1)
-<dd>If sigint=1, xboard may send SIGINT (the interrupt signal) to
+<dt><font color=red>
+<strong>sigint</strong> (boolean, default 1)
+</font>
+<dd><font color=red>
+If sigint=1, xboard may send SIGINT (the interrupt signal) to
the engine as <a href="#7">section 7</a> above; if sigint=0, it will
not.
+</font>
-<dt><strong>sigterm</strong> (boolean, default 1)
-<dd>If sigterm=1, xboard may send SIGTERM (the termination signal) to
+<dt><font color=red>
+<strong>sigterm</strong> (boolean, default 1)
+</font>
+<dd><font color=red>
+If sigterm=1, xboard may send SIGTERM (the termination signal) to
the engine as <a href="#7">section 7</a> above; if sigterm=0, it will
not.
+</font>
-<dt><strong>reuse</strong> (boolean, default 1, recommended 1)
-<dd>If reuse=1, xboard may reuse your engine for multiple games. If
+<dt><font color=red>
+<strong>reuse</strong> (boolean, default 1, recommended 1)
+</font>
+<dd><font color=red>
+If reuse=1, xboard may reuse your engine for multiple games. If
reuse=0 (or if the user has set the -xreuse option on xboard's command
line), xboard will kill the engine process after every game and start
a fresh process for the next game.
+</font>
-<dt><strong>analyze</strong> (boolean, default 1, recommended 1)
-<dd>If analyze=0, xboard will not try to use the "analyze" command; it
+<dt><font color=red>
+<strong>analyze</strong> (boolean, default 1, recommended 1)
+</font>
+<dd><font color=red>
+If analyze=0, xboard will not try to use the "analyze" command; it
will pop up an error message if the user asks for analysis mode. If
analyze=1, xboard will try to use the command if the user asks for
analysis mode.
+</font>
-<dt><strong>myname</strong> (string, default determined from engine filename)
-<dd>This feature lets you set the name that xboard will use for your
+<dt><font color=red>
+<strong>myname</strong> (string, default determined from engine filename)
+</font>
+<dd><font color=red>
+This feature lets you set the name that xboard will use for your
engine in window banners, in the PGN tags of saved game files, and when
sending the "name" command to another engine.
+</font>
-<dt><strong>variants</strong> (string, see text below)
-<dd>This feature indicates which chess variants your engine accepts.
+<dt><font color=red>
+<strong>variants</strong> (string, see text below)
+</font>
+<dd><font color=red>
+This feature indicates which chess variants your engine accepts.
It should be a comma-separated list of variant names. See the table
under the "variant" command in <a href="#8">section 8</a> above. If
you do not set this feature, xboard will assume by default that your
than leaving the default in place, so that the user will get an
appropriate error message if he tries to play a variant that your
engine does not support.
+</font>
-<dt><strong>colors</strong> (boolean, default 1, recommended 0)
-<dd>If colors=1, xboard uses the obsolete "white" and "black"
+<dt><font color=red>
+<strong>colors</strong> (boolean, default 1, recommended 0)
+</font>
+<dd><font color=red>
+If colors=1, xboard uses the obsolete "white" and "black"
commands in a stylized way that works with most older chess engines
that require the commands. See the "<a href="#13">Idioms</a>" section
below for details. If colors=0, xboard does not use the "white" and
"black" commands at all.
+</font>
-<dt><strong>ics</strong> (boolean, default 0)
-<dd>If ics=1, xboard will use the protocol's new "ics" command
+<dt><font color=red>
+<strong>ics</strong> (boolean, default 0)
+</font>
+<dd><font color=red>
+If ics=1, xboard will use the protocol's new "ics" command
to inform the engine of whether or not it is playing on a chess server;
if ics=0, it will not.
+</font>
-<dt><strong>name</strong> (boolean, see text below)
-<dd>If name=1, xboard will use the protocol's "name" command
+<dt><font color=red>
+<strong>name</strong> (boolean, see text below)
+</font>
+<dd><font color=red>
+If name=1, xboard will use the protocol's "name" command
to inform the engine of the opponent's name; if name=0, it will not.
By default, name=1 if the engine is playing on a chess server; name=0 if not.
+</font>
-<dt><strong>pause</strong> (boolean, default 0)
-<dd>If pause=1, xboard may use the protocol's new "pause" command;
+<dt><font color=red>
+<strong>pause</strong> (boolean, default 0)
+</font>
+<dd><font color=red>
+If pause=1, xboard may use the protocol's new "pause" command;
if pause=0, xboard assumes that the engine does not support this command.
+</font>
-<dt><strong>done</strong> (integer, no default)
-<dd>If you set done=1 during the initial two-second timeout after
+<dt><font color=red>
+<strong>done</strong> (integer, no default)
+</font>
+<dd><font color=red>
+If you set done=1 during the initial two-second timeout after
xboard sends you the "xboard" command, the
timeout will end and xboard will not look for any more feature
commands before starting normal operation.
If you set done=0, the initial timeout is increased to one hour;
in this case, you must set done=1 before xboard will enter normal operation.
-</dl>
</font>
+</dl>
<p>
<dt><strong>Illegal move: MOVE</strong>
Illegal move (moving into check): e1g1
</pre>
<p>
-Generally, xboard will never send an ambiguous move, so it does not
-matter whether you respond to such a move with an Illegal move message
+Generally, xboard will never send an ambiguous move, so it does not
+matter whether you respond to such a move with an Illegal move message
or an Error message.
</p>
until your engine has made two more moves.
<p>
-<font color=red>
-<dt><strong>tellopponent MESSAGE</strong>
-<dd>This command lets the engine give a message to its opponent,
+<dt><font color=red><strong>tellopponent MESSAGE</strong></font>
+<dd><font color=red>
+This command lets the engine give a message to its opponent,
independent of whether the opponent is a user on the local machine or
a remote ICS user (Zippy mode). MESSAGE consists of any characters,
including whitespace, to the end of the line. When the engine is
MESSAGE\n" to the ICS.
<p>
-<dt><strong>tellothers MESSAGE</strong>
+<dt><strong>tellothers MESSAGE</strong>
<dd>This command lets the engine give a message to people watching the
game other than the engine's opponent. MESSAGE consists of any
characters, including whitespace, to the end of the line. When the
<dt><strong>tellall MESSAGE</strong>
<dd>This command lets the engine give a message to its opponent and
-other people watching the game,
+other people watching the game,
independent of whether the opponent is a user on the local machine or
a remote ICS user (Zippy mode). MESSAGE consists of any characters,
including whitespace, to the end of the line. When the engine is
of any characters, including whitespace, to the end of the line.
<p>
-<font color=red>
-<dt><strong>tellicsnoalias MESSAGE</strong>
-<dd>In Zippy mode, xboard sends "xMESSAGE\n" to ICS, where "x" is a
+<dt><font color=red><strong>tellicsnoalias MESSAGE</strong></font>
+<dd><font color=red>
+In Zippy mode, xboard sends "xMESSAGE\n" to ICS, where "x" is a
character that prevents the ICS from expanding command aliases, if
xboard knows of such a character. (On chessclub.com and chess.net,
"/" is used; on freechess.org, "$" is used.) MESSAGE consists of any
Meaning:
</p>
-9 ply, score=1.56, time = 10.84 seconds, nodes=48000,
+9 ply, score=1.56, time = 10.84 seconds, nodes=48000,
PV = "Nf3 Nc6 Nc3 Nf6"
<p>
</p>
<pre>
- 2. 14 0 38 d1d2 e8e7
- 3+ 78 0 65 d1d2 e8e7 d2d3
- 3& 14 0 89 d1d2 e8e7 d2d3
- 3& 76 0 191 d1e2 e8e7 e2e3
- 3. 76 0 215 d1e2 e8e7 e2e3
- 4& 15 0 366 d1e2 e8e7 e2e3 e7e6
- 4. 15 0 515 d1e2 e8e7 e2e3 e7e6
- 5+ 74 0 702 d1e2 f7f5 e2e3 e8e7 e3f4
- 5& 71 0 1085 d1e2 e8e7 e2e3 e7e6 e3f4
- 5. 71 0 1669 d1e2 e8e7 e2e3 e7e6 e3f4
- 6& 48 0 3035 d1e2 e8e7 e2e3 e7e6 e3e4 f7f5 e4d4
- 6. 48 0 3720 d1e2 e8e7 e2e3 e7e6 e3e4 f7f5 e4d4
- 7& 48 0 6381 d1e2 e8e7 e2e3 e7e6 e3e4 f7f5 e4d4
- 7. 48 0 10056 d1e2 e8e7 e2e3 e7e6 e3e4 f7f5 e4d4
- 8& 66 1 20536 d1e2 e8e7 e2e3 e7e6 e3d4 g7g5 a2a4 f7f5
- 8. 66 1 24387 d1e2 e8e7 e2e3 e7e6 e3d4 g7g5 a2a4 f7f5
- 9& 62 2 38886 d1e2 e8e7 e2e3 e7e6 e3d4 h7h5 a2a4 h5h4
- d4e4
- 9. 62 4 72578 d1e2 e8e7 e2e3 e7e6 e3d4 h7h5 a2a4 h5h4
- d4e4
-10& 34 7 135944 d1e2 e8e7 e2e3 e7e6 e3d4 h7h5 c2c4 h5h4
- d4e4 f7f5 e4f4
-10. 34 9 173474 d1e2 e8e7 e2e3 e7e6 e3d4 h7h5 c2c4 h5h4
- d4e4 f7f5 e4f4
+ 2. 14 0 38 d1d2 e8e7
+ 3+ 78 0 65 d1d2 e8e7 d2d3
+ 3& 14 0 89 d1d2 e8e7 d2d3
+ 3& 76 0 191 d1e2 e8e7 e2e3
+ 3. 76 0 215 d1e2 e8e7 e2e3
+ 4& 15 0 366 d1e2 e8e7 e2e3 e7e6
+ 4. 15 0 515 d1e2 e8e7 e2e3 e7e6
+ 5+ 74 0 702 d1e2 f7f5 e2e3 e8e7 e3f4
+ 5& 71 0 1085 d1e2 e8e7 e2e3 e7e6 e3f4
+ 5. 71 0 1669 d1e2 e8e7 e2e3 e7e6 e3f4
+ 6& 48 0 3035 d1e2 e8e7 e2e3 e7e6 e3e4 f7f5 e4d4
+ 6. 48 0 3720 d1e2 e8e7 e2e3 e7e6 e3e4 f7f5 e4d4
+ 7& 48 0 6381 d1e2 e8e7 e2e3 e7e6 e3e4 f7f5 e4d4
+ 7. 48 0 10056 d1e2 e8e7 e2e3 e7e6 e3e4 f7f5 e4d4
+ 8& 66 1 20536 d1e2 e8e7 e2e3 e7e6 e3d4 g7g5 a2a4 f7f5
+ 8. 66 1 24387 d1e2 e8e7 e2e3 e7e6 e3d4 g7g5 a2a4 f7f5
+ 9& 62 2 38886 d1e2 e8e7 e2e3 e7e6 e3d4 h7h5 a2a4 h5h4
+ d4e4
+ 9. 62 4 72578 d1e2 e8e7 e2e3 e7e6 e3d4 h7h5 a2a4 h5h4
+ d4e4
+10& 34 7 135944 d1e2 e8e7 e2e3 e7e6 e3d4 h7h5 c2c4 h5h4
+ d4e4 f7f5 e4f4
+10. 34 9 173474 d1e2 e8e7 e2e3 e7e6 e3d4 h7h5 c2c4 h5h4
+ d4e4 f7f5 e4f4
</pre>
<p>If your engine is pondering (thinking on its opponent's time) in post
<p>xboard supports analyzing fresh games, edited positions, and games
from files. However, all of these look the same from the chess
engine's perspective. Basically, the engine just has to respond to the
-"analyze" command.
+"analyze" command.
<font color=red>
Beginning in protocol version 2,
if your engine does not support analyze mode, it should use
-the feature command to set analyze=0.
+the feature command to set analyze=0.
</font>
The older method of
printing the error message "Error (unknown command): analyze" in
</p>
<p>
-To enter analyze mode, xboard sends the command sequence "post", "analyze".
+To enter analyze mode, xboard sends the command sequence "post", "analyze".
Analyze mode in your engine should be
similar to force mode, except that your engine thinks about what move
it would make next if it were on move. Your engine should accept the
<li>Any legal move, as in force mode
<li><strong>undo</strong> Back up one move and analyze previous position.
<li><strong>new</strong> Reset position to start of game but stay in analyze mode.
-<font color=red>
-<li><strong>setboard</strong> if you have set feature setboard=1; otherwise <strong>edit</strong>. Exiting edit mode returns to analyze mode.
+<li><font color=red><strong>setboard</strong> if you have set feature setboard=1; otherwise <strong>edit</strong>. Exiting edit mode returns to analyze mode.
</font>
<li><strong>exit</strong> Leave analyze mode.
<li><strong>.</strong> Send a search status update (optional); see below.
-<font color=red><li>
+<li><font color=red>
<strong>bk</strong> Show book moves from this position,
if any; see above.</font>
-<font color=red><li>
+<li><font color=red>
<strong>hint</strong> Show the predicted move from this
position, if any; see above.</font>
</ul>
-
+
<p>
If the user selects "Periodic Updates", xboard will send the string
".\n" to the chess engine periodically during analyze mode, unless the
<p>
Some engines have variant interpretations of the force/go/white/black,
-time/otim, and hard/easy command sets.
+time/otim, and hard/easy command sets.
In order to accommodate these older engines, xboard uses these commands
only according to the stylized patterns ("idioms") given in this section.
The obsolete white and black commands
<dt><strong>go</strong>
<dd>Sent when the engine is in force mode or playing Black but should
switch to playing White. This sequence is sent only when White is
-already on move.
+already on move.
<font color=red>
If you set the feature colors=0, "white" is not sent.
</font>
<dt><strong>go</strong>
<dd>Sent when the engine is in force mode or playing White but should
switch to playing Black. This sequence is sent only when Black is
-already on move.
+already on move.
<font color=red>
If you set the feature colors=0, "black" is not sent.
</font>
<dt><strong>go</strong>
<dd>Sent when Black is on move, the engine is in force mode or playing
White, and the engine's clock needs to be updated before it starts
-playing.
+playing.
The initial "white" is a kludge to accommodate GNU Chess
-4's variant interpretation of these commands.
+4's variant interpretation of these commands.
<font color=red>
If you set the feature colors=0, "white" and "black" are not sent.
</font>
<dt><strong>go</strong>
<dd>Sent when White is on move, the engine is in force mode or playing
Black, and the engine's clock needs to be updated before it starts
-playing. See previous idiom.
+playing. See previous idiom.
The initial "black" is a kludge to accommodate GNU Chess
-4's variant interpretation of these commands.
+4's variant interpretation of these commands.
<font color=red>
If you set the feature colors=0, "black" and "white" are not sent.
</font>