updated to new html5 boilerplate
[xboard.git] / engine-intf.html
1 <!--#include virtual="/server/html5-header.html" -->
2 <title>Chess Engine Communication Protocol</title>
3 <style type="text/css">
4   .header {
5   border-top:2px solid black;
6   border-bottom:2px solid black;
7   }
8   .version1 { color: red;}
9   .version43 { color: green;}
10   .version44 { color: blue; }
11
12   table tr { text-align: left}
13   tr > td:first-child { font-weight:bold;}
14   dt { font-weight:bold;}
15
16   </style>
17 <!--#include virtual="/server/banner.html" -->
18 <!--#set var="article_name" value="/server/standards/boilerplate" -->
19 <!--#include virtual="/server/gnun/initial-translations-list.html" -->
20
21 <div class="header">
22 <h1>Chess Engine Communication Protocol</h1>
23 <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>
24 <p>
25 Version 2; implemented in xboard/WinBoard 4.2.1 and later. (Sept 3, 2009)<br />
26 Changes since version 1 are indicated in <span class="version1">red</span>.<br />
27 Changes for WinBoard 4.3.xx are indicated in <span class="version43">green</span>.<br />
28 Changes for WinBoard 4.4.xx are indicated in <span class="version44">blue</span>.
29 </p>
30 </div>
31
32 <ul>
33 <li><a href="#1">1. Introduction</a></li>
34 <li><a href="#2">2. Connection</a></li>
35 <li><a href="#3">3. Debugging</a></li>
36 <li><a href="#4">4. How it got this way</a></li>
37 <li><a href="#5">5. WinBoard requires Win32 engines</a></li>
38 <li><a href="#6">6. Hints on input/output</a></li>
39 <li><a href="#7">7. Signals</a></li>
40 <li><a href="#8">8. Commands from xboard to the engine</a></li>
41 <li><a href="#9">9. Commands from the engine to xboard</a></li>
42 <li><a href="#10">10. Thinking Output</a></li>
43 <li><a href="#11">11. Time control</a></li>
44 <li><a href="#12">12. Analyze Mode</a></li>
45 <li><a href="#13">13. Idioms and backward compatibility features</a></li>
46 </ul>
47
48 <hr />
49
50 <h2><a name="1">1. Introduction</a></h2>
51
52 <p>
53 This document is a set of rough notes on the protocol that xboard and
54 WinBoard use to communicate with gnuchessx and other chess engines.
55 These notes may be useful if you want to connect a different chess
56 engine to xboard.  Throughout the notes, "xboard" means both xboard
57 and WinBoard except where they are specifically contrasted.
58 </p>
59
60 <p>
61 There are two reasons I can imagine someone wanting to do this:
62 </p>
63
64 <ol>
65 <li>You have, or are developing, a chess engine but you don't want to
66 write your own graphical interface. </li>
67 <li>You have, or are developing,a chess engine, and you want to
68 interface it to the Internet Chess Server.</li>
69 </ol>
70
71 <p>
72 In case (2), if you are using xboard, you will need to configure the
73 "Zippy" code into it, but WinBoard includes this code already.  See
74 the file <a
75 href="http://www.tim-mann.org/xboard/zippy.README">zippy.README</a>
76 in the xboard or WinBoard distribution for more information.
77 </p>
78
79 <p>
80 These notes are unpolished, but I've attempted to make them complete
81 in this release.  If you notice any errors, omissions, or misleading
82 statements, let me know.
83 </p>
84
85 <p>
86 I'd like to hear from everyone who is trying to interface their own
87 chess engine to xboard/WinBoard. Please join the mailing list for
88 authors of xboard/WinBoard compatible chess engines and post a message
89 about what you're doing. The list is now hosted by Yahoo Groups; you
90 can join at <a href="http://groups.yahoo.com/group/chess-engines"
91 >http://groups.yahoo.com/group/chess-engines</a>, or you can read the
92 list there without joining.  The list is filtered to prevent spam.
93 </p>
94
95 <p class="version43">
96 Note that the WinBoard 4.3.xx line was developed independently of the
97 original GNU project, by H.G.Muller.
98 If you have questions about WinBoard 4.3.xx, or want to report bugs in it,
99 report them in the appropriate section of the
100 <a href="http://www.open-aurec.com/wbforum/">WinBoard forum</a>.
101 </p>
102
103 <h2><a name="2">2. Connection</a></h2>
104
105 <p>
106 An xboard chess engine runs as a separate process from xboard itself,
107 connected to xboard through a pair of anonymous pipes.  The engine
108 does not have to do anything special to set up these pipes.  xboard
109 sets up the pipes itself and starts the engine with one pipe as its
110 standard input and the other as its standard output.  The engine then
111 reads commands from its standard input and writes responses to its
112 standard output.  This is, unfortunately, a little more complicated to
113 do right than it sounds; see <a href="#6">section 6</a> below.
114 </p>
115
116 <p>
117 And yes, contrary to some people's expectations, exactly the same
118 thing is true for WinBoard.  Pipes and standard input/output are
119 implemented in Win32 and work fine.  You don't have to use DDE, COM,
120 DLLs, BSOD, or any of the other infinite complexity that
121 Microsoft has created just to talk between two programs.  A WinBoard
122 chess engine is a Win32 console program that simply reads from its
123 standard input and writes to its standard output.  See sections
124 <a href="#5">5</a> and <a href="#6">6</a> below for additional details.
125 </p>
126
127 <h2><a name="3">3. Debugging</a></h2>
128
129 <p>
130 To diagnose problems in your engine's interaction with xboard, use the
131 -debug flag on xboard's command line to see the messages that are
132 being exchanged.  In WinBoard, these messages are written to the file
133 WinBoard.debug instead of going to the screen.
134 </p>
135
136 <p>
137 You can turn debug mode on or off while WinBoard is running by
138 pressing Ctrl+Alt+F12.  You can turn debug mode on or off while xboard
139 is running by binding DebugProc to a shortcut key (and pressing the
140 key!); see the instructions on shortcut keys in the xboard man page.
141 </p>
142
143 <p>
144 While your engine is running under xboard/WinBoard, you can send a
145 command directly to the engine by pressing Shift+1 (xboard) or Alt+1
146 (WinBoard 4.0.3 and later).  This brings up a dialog that you can type
147 your command into.  Press Shift+2 (Alt+2) instead to send to the
148 second chess engine in Two Machines mode.  On WinBoard 4.0.2 and earlier,
149 Ctrl+Alt is used in place of Alt; this had to be changed due to a conflict
150 with typing the @-sign on some European keyboards.
151 </p>
152
153 <h2><a name="4">4. How it got this way</a></h2>
154
155 <p>
156 Originally, xboard was just trying to talk to the existing
157 command-line interface of GNU Chess 3.1+ and 4, which was designed
158 for people to type commands to.  So the communication protocol is very
159 ad-hoc.  It might have been good to redesign it early on, but because
160 xboard and GNU Chess are separate programs, I didn't want to force
161 people to upgrade them together to versions that matched.  I
162 particularly wanted to keep new versions of xboard working with old
163 versions of GNU Chess, to make it easier to compare the play of old
164 and new gnuchess versions.  I didn't foresee the need for a clean
165 protocol to be used with other chess engines in the future.
166 </p>
167
168 <p>
169 Circumstances have changed over the years, and now there are many more
170 engines that work with xboard.  I've had to make the protocol
171 description more precise, I've added some features that GNU Chess
172 does not support, and I've specified the standard semantics of a few
173 features to be slightly different from what GNU Chess 4 does.
174 </p>
175
176 <p class="version1">
177 This release of the protocol specification is the first to carry a
178 version number of its own -- version 2.  Previous releases simply
179 carried a last-modified date and were loosely tied to specific
180 releases of xboard and WinBoard.  The version number "1" applies
181 generally to all those older versions of the protocol.
182 </p>
183
184 <p class="version1">
185 Protocol version 2 remains compatible with older engines but has
186 several new capabilities.  In particular, it adds the
187 "feature" command, a new mechanism for making backward-compatible
188 changes and extensions to the protocol.  Engines that do not support a
189 particular new feature do not have to use it; new features are not
190 enabled unless the engine specifically requests them using the feature
191 command.  If an engine does not send the feature command at all, the
192 protocol behavior is nearly identical to version 1.  Several new
193 features can be selected by the feature command in version 2,
194 including the "ping" command (recommended for all engines), the
195 "setboard" command, and many optional parameters.  Additional features
196 will probably be added in future versions.
197 </p>
198
199 <p class="version43">
200 If it is necessary to have a separate name,
201 it would be best to refer to the protocol including the green additions as version 2f.
202 I really don't think it is a different protocol from version 2, though.
203 I just tried to clarify some ambiguities in the original definition,
204 now that the WinBoard 4.3.xx line has implemented them in a specific way.
205 The hand-shaking protocol for features as defined in protocol 2 perfectly
206 allows addition of an occasional new features without any need for stepping up the protocol version number,
207 and I think refraining from the latter would enormously lower the barrier for actual
208 implementation of these features in engines.
209 <br />
210 The two really new things are the engine debug comments, and the "nps" command.
211 The former merely tries to regulate an extremely common existing pactice
212 of having engines dump debug messages on WinBoard in an unprotected way,
213 as usually you get away with that.
214 </p>
215
216 <h2><a name="5">5. WinBoard requires Win32 engines</a></h2>
217
218 <p>
219 Due to some Microsoft brain damage that I don't understand, WinBoard
220 does not work with chess engines that were compiled to use a DOS
221 extender for 32-bit addressing.  (Probably not with 16-bit DOS or
222 Windows programs either.)  WinBoard works only with engines that are
223 compiled for the Win32 API.  You can get a free compiler that targets
224 the Win32 API from <a href="http://sources.redhat.com/cygwin/"
225 >http://sources.redhat.com/cygwin/</a>.  I think DJGPP 2.x should also
226 work if you use the RSXNTDJ extension, but I haven't tried it.  Of
227 course, Microsoft Visual C++ will work.  Most likely the other
228 commercial products that support Win32 will work too (Borland, etc.),
229 but I have not tried them.  Delphi has been successfully used to write
230 engines for WinBoard; if you want to do this, Tony Werten has donated
231 some <a href="http://www.tim-mann.org/winboard/delphi.txt" >sample
232 code</a> that should help you get started.
233 </p>
234
235 <h2><a name="6">6. Hints on input/output</a></h2>
236
237 <p>
238 Beware of using buffered I/O in your chess engine.  The C stdio
239 library, C++ streams, and the I/O packages in most other languages use
240 buffering both on input and output.  That means two things.  First,
241 when your engine tries to write some characters to xboard, the library
242 stashes them in an internal buffer and does not actually write them to
243 the pipe connected to xboard until either the buffer fills up or you
244 call a special library routine asking for it to be flushed.  (In C
245 stdio, this routine is named <tt>fflush</tt>.)  Second, when your engine tries
246 to read some characters from xboard, the library does not read just
247 the characters you asked for -- it reads all the characters that are
248 currently available (up to some limit) and stashes any characters you
249 are not yet ready for in an internal buffer.  The next time you ask to
250 read, you get the characters from the buffer (if any) before the
251 library tries to read more data from the actual pipe.
252 </p>
253
254 <p>
255 Why does this cause problems?  First, on the output side, remember
256 that your engine produces output in small quantities (say, a few
257 characters for a move, or a line or two giving the current analysis),
258 and that data always needs to be delivered to xboard/WinBoard for
259 display immediately.  If you use buffered output, the data you print
260 will sit in a buffer in your own address space instead of being
261 delivered.
262 </p>
263
264 <p>
265 You can usually fix the output buffering problem by asking for the
266 buffering to be turned off.  In C stdio, you do this by calling
267 <tt>setbuf(stdout, NULL)</tt>.  A more laborious and error-prone
268 method is to carefully call <tt>fflush(stdout)</tt> after every line
269 you output; I don't recommend this.  In C++, you can try
270 <tt>cout.setf(ios::unitbuf)</tt>, which is documented in current
271 editions of "The C++ Programming Language," but not older ones.
272 Another C++ method that might work is
273 <tt>cout.rdbuf()-&gt;setbuf(NULL, 0)</tt>.  Alternatively, you can
274 carefully call <tt>cout.flush()</tt> after every line you output;
275 again, I don't recommend this.
276 </p>
277
278 <p>
279 Another way to fix the problem is to use unbuffered operating system
280 calls to write directly to the file descriptor for standard output.
281 On Unix, this means <tt>write(1, ...)</tt> -- see the man page for write(2).
282 On Win32, you can use either the Unix-like <tt>_write(1, ...)</tt> or Win32
283 native routines like <tt>WriteFile</tt>.
284 </p>
285
286 <p>
287 Second, on the input side, you are likely to want to poll during your
288 search and stop it if new input has come in.  If you implement
289 pondering, you'll need this so that pondering stops when the user
290 makes a move.  You should also poll during normal thinking on your
291 move, so that you can implement the "?" (move now) command, and so
292 that you can respond promptly to a "result", "force", or "quit"
293 command if xboard wants to end the game or terminate your engine.
294 Buffered input makes polling more complicated -- when you poll, you
295 must stop your search if there are <em>either</em> characters in the buffer
296 <em>or</em> characters available from the underlying file descriptor.
297 </p>
298
299 <p>
300 The most direct way to fix this problem is to use unbuffered operating
301 system calls to read (and poll) the underlying file descriptor
302 directly.  On Unix, use <tt>read(0, ...)</tt> to read from standard input, and
303 use <tt>select()</tt> to poll it.  See the man pages read(2) and select(2).
304 (Don't follow the example of GNU Chess 4 and use the FIONREAD ioctl to
305 poll for input.  It is not very portable; that is, it does not exist
306 on all versions of Unix, and is broken on some that do have it.)  On
307 Win32, you can use either the Unix-like <tt>_read(0, ...)</tt> or the native
308 Win32 <tt>ReadFile()</tt> to read.  Unfortunately, under Win32, the function to
309 use for polling is different depending on whether the input device is
310 a pipe, a console, or something else.  (More Microsoft brain damage
311 here -- did they never hear of device independence?)  For pipes, you
312 can use <tt>PeekNamedPipe</tt> to poll (even when the pipe is unnamed).
313 For consoles,
314 you can use <tt>GetNumberOfConsoleInputEvents</tt>.  For sockets only, you can
315 use <tt>select()</tt>.  It might be possible to use
316 <tt>WaitForSingleObject</tt> more
317 generally, but I have not tried it.  Some code to do these things can
318 be found in Crafty's utility.c, but I don't guarantee that it's all
319 correct or optimal.
320 </p>
321
322 <p>
323 A second way to fix the problem might be to ask your I/O library not
324 to buffer on input.  It should then be safe to poll the underlying
325 file descriptor as described above.  With C, you can try calling
326 <tt>setbuf(stdin, NULL)</tt>.  However, I have never tried this.  Also, there
327 could be problems if you use <tt>scanf()</tt>, at least with certain patterns,
328 because <tt>scanf()</tt> sometimes needs to read one extra character and "push
329 it back" into the buffer; hence, there is a one-character pushback
330 buffer even if you asked for stdio to be unbuffered.  With C++, you
331 can try <tt>cin.rdbuf()-&gt;setbuf(NULL, 0)</tt>, but again, I have never tried
332 this.
333 </p>
334
335 <p>
336 A third way to fix the problem is to check whether there are
337 characters in the buffer whenever you poll.  C I/O libraries generally
338 do not provide any portable way to do this.  Under C++, you can use
339 <tt>cin.rdbuf()-&gt;in_avail()</tt>.  This method has been reported to
340 work with
341 EXchess.  Remember that if there are no characters in the buffer, you
342 still have to poll the underlying file descriptor too, using the
343 method described above.
344 </p>
345
346 <p>
347 A fourth way to fix the problem is to use a separate thread to read
348 from stdin.  This way works well if you are familiar with thread
349 programming.  This thread can be blocked waiting for input to come in
350 at all times, while the main thread of your engine does its thinking.
351 When input arrives, you have the thread put the input into a buffer
352 and set a flag in a global variable.  Your search routine then
353 periodically tests the global variable to see if there is input to
354 process, and stops if there is.  WinBoard and my Win32 ports of ICC
355 timestamp and FICS timeseal use threads to handle multiple input
356 sources.
357 </p>
358
359 <h2><a name="7">7. Signals</a></h2>
360
361 <p>Engines that run on Unix need to be concerned with two Unix
362 signals: <tt>SIGTERM</tt> and <tt>SIGINT</tt>.  This applies both to
363 engines that run under xboard and (the unusual case of) engines that
364 WinBoard remotely runs on a Unix host using the -firstHost or
365 -secondHost feature.  It does not apply to engines that run on
366 Windows, because Windows does not have Unix-style signals.
367 <span class="version1">
368 Beginning with version 2, you can now turn off the use of
369 either or both
370 signals.  See the "feature" command in <a href="#6">section 9</a> below.
371 </span>
372 </p>
373
374 <p>First, when an engine is sent the "quit" command, it is also given
375 a <tt>SIGTERM</tt> signal shortly afterward to make sure it goes away.
376 If your engine reliably responds to "quit", and the signal causes
377 problems for you, you should either ignore it by calling
378 <tt>signal(SIGTERM, SIG_IGN)</tt> at the start of your program,
379 or disable it with the "feature" command.</p>
380
381 <p>Second, xboard will send an interrupt signal (<tt>SIGINT</tt>) at
382 certain times when it believes the engine may not be listening to user
383 input (thinking or pondering).  WinBoard currently does this only when
384 the engine is running remotely using the -firstHost or -secondHost
385 feature, not when it is running locally.  You probably need to know
386 only enough about this grungy feature to keep it from getting in your
387 way.
388 </p>
389
390 <p>
391 The <tt>SIGINT</tt>s are basically tailored to the needs of GNU Chess 4
392 on systems where its input polling code is broken or disabled.
393 Because they work in a rather peculiar way, it is recommended that you
394 either ignore <tt>SIGINT</tt> by having your engine call
395 <tt>signal(SIGINT, SIG_IGN)</tt>, or disable it with the "feature"
396 command.</p>
397
398 <p>
399 Here are details for the curious.  If xboard needs to send a command
400 when it is the chess engine's move (such as before the "?" command),
401 it sends a <tt>SIGINT</tt> first.  If xboard needs to send commands when it is
402 not the chess engine's move, but the chess engine may be pondering
403 (thinking on its opponent's time) or analyzing (analysis or analyze
404 file mode), xboard sends a <tt>SIGINT</tt> before the first such command only.
405 Another <tt>SIGINT</tt> is not sent until another move is made, even if xboard
406 issues more commands.  This behavior is necessary for GNU Chess 4.  The
407 first <tt>SIGINT</tt> stops it from pondering until the next move, but on some
408 systems, GNU Chess 4 will die if it receives a <tt>SIGINT</tt> when not
409 actually thinking or pondering.
410 </p>
411
412 <p>
413 There are two reasons why WinBoard does not send the Win32 equivalent
414 of <tt>SIGINT</tt> (which is called <tt>CTRL_C_EVENT</tt>) to local
415 engines.  First, the Win32 GNU Chess 4 port does not need it.  Second, I
416 could not find a way to get it to work.  Win32 seems to be designed
417 under the assumption that only console applications, not windowed
418 applications, would ever want to send a <tt>CTRL_C_EVENT</tt>.
419 </p>
420
421 <h2><a name="8">8. Commands from xboard to the engine</a></h2>
422
423 <p>
424 All commands from xboard to the engine end with a newline (\n), even
425 where that is not explicitly stated.  All your output to xboard must
426 be in complete lines; any form of prompt or partial line will cause
427 problems.
428 </p>
429
430 <p>
431 At the beginning of each game, xboard sends an initialization string.
432 This is currently "new\nrandom\n" unless the user changes it with the
433 initString or secondInitString option.
434 </p>
435
436 <p>
437 xboard normally reuses the same chess engine process for multiple
438 games.  At the end of a game, xboard will send the "force" command
439 (see below) to make sure your engine stops thinking about the current
440 position.  It will later send the initString again to start a new
441 game.  If your engine can't play multiple games, you can disable reuse
442 <span class="version1">
443 either with the "feature" command (beginning in protocol version
444 2; see below) or
445 </span>
446 with xboard's -xreuse (or -xreuse2) command line
447 option.  xboard will then ask the process to quit after each game and
448 start a new process for the next game.
449 </p>
450
451 <dl>
452 <dt>xboard</dt>
453 <dd>This command will be sent once immediately after your engine
454 process is started.  You can use it to put your engine into "xboard
455 mode" if that is needed.  If your engine prints a prompt to ask for
456 user input, you must turn off the prompt and output a newline when the
457 "xboard" command comes in.
458 </dd>
459
460 <dt class="version1">protover N</dt>
461 <dd class="version1">
462 <p>Beginning in protocol version 2 (in which N=2), this command will
463 be sent immediately after the "xboard" command.  If you receive some
464 other command immediately after "xboard" (such as "new"), you can
465 assume that protocol version 1 is in use.  The "protover" command is
466 the only new command that xboard always sends in version 2.  All other
467 new commands to the engine are sent only if the engine first enables
468 them with the "feature" command.  Protocol versions will always be
469 simple integers so that they can easily be compared.
470 </p>
471
472 <p>Your engine should reply to the protover command by sending the
473 "feature" command (see below) with the list of non-default feature
474 settings that you require, if any.</p>
475
476 <p>Your engine should never refuse to run due to receiving a higher
477 protocol version number than it is expecting!  New protocol versions
478 will always be compatible with older ones by default; the larger
479 version number is simply a hint that additional "feature" command
480 options added in later protocol versions may be accepted.
481 </p>
482 </dd>
483
484 <dt class="version1">accepted</dt>
485 <dt class="version1">rejected</dt>
486 <dd class="version1">
487 These commands may be sent to your engine in reply to the "feature"
488 command; see its documentation below.
489 </dd>
490
491 <dt>new</dt>
492 <dd>Reset the board to the standard chess starting position.  Set
493 White on move.  Leave force mode and set the engine to play Black.
494 Associate the engine's clock with Black and the opponent's clock with
495 White.  Reset clocks and time controls to the start of a new game.
496 Use wall clock for time measurement.
497 Stop clocks.  Do not ponder on this move, even if pondering is on.
498 Remove any search depth limit previously set by the sd command.
499 </dd>
500
501 <dt>variant VARNAME</dt>
502 <dd>If the game is not standard chess, but a variant, this command is
503 sent after "new" and before the first move or "edit" command.  Currently
504 defined variant names are:
505
506 <table>
507 <tr><td>wildcastle</td><td>Shuffle chess where king can castle from d file</td></tr>
508 <tr><td>nocastle</td><td>Shuffle chess with no castling at all</td></tr>
509 <tr><td>fischerandom</td><td>Fischer Random</td></tr>
510 <tr><td>bughouse</td><td>Bughouse, ICC/FICS rules</td></tr>
511 <tr><td>crazyhouse</td><td>Crazyhouse, ICC/FICS rules</td></tr>
512 <tr><td>losers</td><td>Win by losing all pieces or getting mated (ICC)</td></tr>
513 <tr><td>suicide</td><td>Win by losing all pieces including king,
514     or by having fewer pieces when one player has no legal moves (FICS)</td></tr>
515 <tr class="version1"><td>giveaway</td><td>Win by losing all pieces including king,
516     or by having no legal moves (ICC)</td></tr>
517 <tr><td>twokings</td><td>Weird ICC wild 9</td></tr>
518 <tr><td>kriegspiel</td><td>Kriegspiel (engines not supported)</td></tr>
519 <tr><td>atomic</td><td>Atomic</td></tr>
520 <tr><td>3check</td><td>Win by giving check 3 times</td></tr>
521 <tr class="version43"><td>xiangqi </td><td>Chinese Chess (9x10 board)</td></tr>
522 <tr class="version43"><td>shogi </td><td>Japanese Chess (9x9 bord)</td></tr>
523 <tr class="version43"><td>capablanca</td><td>Capablanca Chess (10x8 board, with Archbishop and Chancellor)</td></tr>
524 <tr class="version43"><td>gothic  </td><td>Gothic Chess (10x8 board, same with better opening setup)</td></tr>
525 <tr class="version43"><td>falcon  </td><td>Falcon Chess (10x8 board, with two Falcon pieces)</td></tr>
526 <tr class="version43"><td>shatranj  </td><td>ancient Arabic Chess, with Elephants and General in stead of B and Q</td></tr>
527 <tr class="version43"><td>courier  </td><td>Courier Chess (12x8 board, a medieval precursor of modern Chess</td></tr>
528 <tr class="version43"><td>knightmate  </td><td>King moves as Knight and vice versa</td></tr>
529 <tr class="version43"><td>berolina</td><td>    Pawns capture straight ahead, and move diagonally</td></tr>
530 <tr class="version43"><td>janus</td><td>    Janus Chess (10x8, with two Archbishops)</td></tr>
531 <tr class="version43"><td>caparandom  </td><td>shuffle variant like FRC (10x8 board)</td></tr>
532 <tr class="version43"><td>cylinder  </td><td>Pieces wrap around between side edges, like board is a cylinder</td></tr>
533 <tr class="version44"><td>super  </td><td>Superchess: a shuffle variant with 4 fairy pieces on 8x8 board</td></tr>
534 <tr class="version44"><td>great  </td><td>Great Shatranj: sliders are replaced by corresponding short-range pieces on a 10x8 board</td></tr>
535 <tr><td>unknown</td><td>Unknown variant (not supported)</td></tr>
536 </table>
537
538 </dd>
539
540 <dt>quit</dt>
541 <dd>The chess engine should immediately exit.  This command is used
542 when xboard is itself exiting, and also between games if the -xreuse
543 command line option is given (or -xreuse2 for the second engine).
544 See also <a href="#7">Signals</a> above.
545 </dd>
546
547 <dt>random</dt>
548 <dd>This command is specific to GNU Chess 4.  You can either ignore it
549 completely (that is, treat it as a no-op) or implement it as GNU Chess
550 does.  The command toggles "random" mode (that is, it sets random =
551 !random).  In random mode, the engine adds a small random value to its
552 evaluation function to vary its play.  The "new" command sets random
553 mode off.
554 </dd>
555
556 <dt>force</dt>
557 <dd>Set the engine to play neither color ("force mode").  Stop clocks.
558 The engine should check that moves received in force mode are legal
559 and made in the proper turn, but should not think, ponder, or make
560 moves of its own.
561 </dd>
562
563 <dt>go</dt>
564 <dd>Leave force mode and set the engine to play the color that is on
565 move.  Associate the engine's clock with the color that is on move,
566 the opponent's clock with the color that is not on move.  Start the engine's
567 clock.  Start thinking and eventually make a move.
568 </dd>
569
570 <dt class="version1">playother</dt>
571 <dd class="version1">
572 (This command is new in protocol version 2.  It is not
573 sent unless you enable it with the feature command.)
574 Leave force mode and set the engine to play the color that is <i>not</i> on
575 move.  Associate the opponent's clock with the color that is on move,
576 the engine's clock with the color that is not on move.  Start the opponent's
577 clock.  If pondering is enabled, the engine should begin pondering.
578 If the engine later receives a move, it should start thinking and eventually
579 reply.
580 </dd>
581
582 <dt>white</dt>
583 <dd>
584 <p><span class="version1">
585 (This command is obsolete as of protocol version 2, but is still
586 sent in some situations to accommodate older engines unless you disable it
587 with the feature command.)
588 </span>
589 Set White on move.  Set the engine to play Black.  Stop clocks.
590 </p>
591 </dd>
592
593 <dt>black </dt>
594 <dd>
595 <span class="version1">
596 (This command is obsolete as of protocol version 2, but is still
597 sent in some situations to accommodate older engines unless you disable it
598 with the feature command.)
599 </span>
600 Set Black on move.  Set the engine to play White.  Stop clocks.
601 </dd>
602
603 <dt>level MPS BASE INC</dt>
604 <dd>Set time controls.  See the <a href="#11">Time Control</a> section below.
605 </dd>
606
607 <dt>st TIME</dt>
608 <dd>Set time controls.  See the <a href="#11">Time Control</a> section
609 below.
610 </dd>
611
612 <dt>sd DEPTH</dt>
613 <dd>
614 <p>The engine should limit its thinking to DEPTH ply.
615 <span class="version43">The commands "level" or "st" and "sd" can be used together in an orthogonal way.
616 If both are issued, the engine should observe both limitations:</span>
617 In the protocol, the "sd" command isn't a time control.  It doesn't
618 say that your engine has unlimited time but must search to exactly the
619 given depth.  It says that you should pay attention to the time
620 control as normal, but cut off the search at the specified depth even
621 if you have time to search deeper.  If you don't have time to search
622 to the specified depth, given your normal time management algorithm,
623 then you will want to stop sooner than the given depth.
624 </p><p>
625 The "new" command should set the search depth back to unlimited.  This
626 is already stated in the spec.  The "level" command should not affect
627 the search depth.  As it happens, xboard/WinBoard currently always
628 sends sd (if needed) right after level, but that isn't part of the
629 spec.</p>
630 </dd>
631
632 <dt><span class="version43">nps NODE_RATE</span></dt>
633 <dd><span class="version43">The engine should not use wall-clock time to make its timing decisions,
634 but an own internal time measure based on the number of nodes it has searched
635 (and will report as "thinking output", see <a href="#10">section 10</a>),
636 converted to seconds through dividing by the given NODE_RATE.
637 Example: after receiving the commands "st 8" and "nps 10000",
638 the engine should never use more that 80,000 nodes in the search for any move.
639 In this mode, the engine should report user CPU time used (in its thinking output),
640 rather than wall-clock time.
641 This even holds if NODE_RATE is given as 0,
642 but in that case it should also use the user CPU time for its timing decisions.
643 The effect of an "nps" command should persist until the next "new" command.
644 </span>
645 </dd>
646
647 <dt>time N</dt>
648 <dd>Set a clock that always belongs to the engine.  N is a number in
649   centiseconds (units of 1/100 second).  Even if the engine changes to
650   playing the opposite color, this clock remains with the engine.
651 </dd>
652
653 <dt>otim N</dt>
654
655 <dd><p>Set a clock that always belongs to the opponent.  N is a number in
656 centiseconds (units of 1/100 second).  Even if the opponent changes to
657 playing the opposite color, this clock remains with the opponent.
658 </p><p>
659 If needed for purposes of board display in force mode (where the
660 engine is not participating in the game) the time clock should be
661 associated with the last color that the engine was set to play, the
662 otim clock with the opposite color.
663 </p>
664 <p>
665 <span class="version43">This business of "clocks remaining with the engine" is apparently so ambiguous
666 that many engines implement it wrong.
667 The clocks in fact always remain with the color.
668 Which clock reading is relayed with "time", and which by "otim", is determined by which side the engine plays.
669 Note that the way the clocks operate and receive extra time (in accordance with the selected time control)
670 is not affected in any way by which moves are made by the engine, which by the opponent, and which were forced.
671 </span>
672 </p>
673 <p>
674 <span class="version1">
675 Beginning in protocol version 2, if you can't handle the time and
676 otim commands, you can use the "feature" command to disable them; see
677 below.
678 </span>
679 The following techniques from older protocol versions also
680 work: You can ignore the time and otim commands (that is, treat them
681 as no-ops), or send back "Error (unknown command): time" the first
682 time you see "time".
683 </p></dd>
684
685 <dt>MOVE</dt>
686 <dd>
687 <p>See below for the syntax of moves.  If the move is illegal, print
688 an error message; see the section "<a href="#9">Commands from the engine to
689 xboard</a>".  If the move is legal and in turn, make it.  If not in force
690 mode, stop the opponent's clock, start the engine's clock, start
691 thinking, and eventually make a move.
692 </p><p>
693 When xboard sends your engine a move, it normally sends coordinate
694 algebraic notation.  Examples:
695 </p>
696 <table>
697 <tr><td>Normal moves:</td><td>e2e4</td></tr>
698 <tr><td>Pawn promotion:</td><td>e7e8q</td></tr>
699 <tr><td>Castling:</td><td>e1g1, e1c1, e8g8, e8c8</td></tr>
700 <tr><td>Bughouse/crazyhouse drop:</td><td>P@h3</td></tr>
701 <tr><td>ICS Wild 0/1 castling:</td><td>d1f1, d1b1, d8f8, d8b8</td></tr>
702 <tr><td>FischerRandom castling:</td><td>O-O, O-O-O (oh, not zero)</td></tr>
703 </table>
704
705 <p class="version43">
706 Note that on boards with more than 9 ranks, counting of the ranks starts at 0.
707 </p>
708 <p class="version1">
709 Beginning in protocol version 2, you can use the feature command
710 to select SAN (standard algebraic notation) instead; for example, e4,
711 Nf3, exd5, Bxf7+, Qxf7#, e8=Q, O-O, or P@h3.  Note that the last form,
712 P@h3, is a extension to the PGN standard's definition of SAN, which does
713 not support bughouse or crazyhouse.
714 </p>
715
716 <p>
717 xboard doesn't reliably detect illegal moves, because it does not keep
718 track of castling unavailability due to king or rook moves, or en
719 passant availability.  If xboard sends an illegal move, send back an
720 error message so that xboard can retract it and inform the user; see
721 the section "<a href="#9">Commands from the engine to xboard</a>".
722 </p>
723 </dd>
724 <dt class="version1">usermove MOVE</dt>
725 <dd class="version1">
726 By default, moves are sent to the engine without a command name;
727 the notation is just sent as a line by itself.
728 Beginning in protocol version 2, you can use the feature command
729 to cause the command name "usermove" to be sent before the move.
730 Example: "usermove e2e4".
731 </dd>
732
733 <dt>?</dt>
734 <dd><p>Move now.  If your engine is thinking, it should move immediately;
735   otherwise, the command should be ignored (treated as a no-op).  It
736   is permissible for your engine to always ignore the ? command.  The
737   only bad consequence is that xboard's Move Now menu command will do
738   nothing.
739 </p><p>
740 It is also permissible for your engine to move immediately if it gets
741 any command while thinking, as long as it processes the command right
742 after moving, but it's preferable if you don't do this.  For example,
743 xboard may send post, nopost, easy, hard, force, quit,
744 <span class="version1">
745 or other commands
746 </span>
747 while the engine is on move.
748 </p>
749 </dd>
750
751 <dt class="version1">ping N</dt>
752 <dd class="version1">
753 <p>In this command, N is a decimal number.  When you receive the command,
754 reply by sending the string <strong>pong N</strong>, where N is the
755 same number you received.  Important: You must not reply to a "ping"
756 command until you have finished executing all commands that you
757 received before it.  Pondering does not count; if you receive a ping
758 while pondering, you should reply immediately and continue pondering.
759 Because of the way xboard uses the ping command, if you implement the
760 other commands in this protocol, you should never see a "ping" command
761 when it is your move; however, if you do, you must not send the "pong"
762 reply to xboard until after you send your move.  For example, xboard
763 may send "?" immediately followed by "ping".  If you implement the "?"
764 command, you will have moved by the time you see the subsequent ping
765 command.  Similarly, xboard may send a sequence like "force", "new",
766 "ping".  You must not send the pong response until after you have
767 finished executing the "new" command and are ready for the new game to
768 start.
769 </p>
770 <p>
771 The ping command is new in protocol version 2 and will not be sent
772 unless you enable it with the "feature" command.  Its purpose is to
773 allow several race conditions that could occur in previous versions of
774 the protocol to be fixed, so it is highly recommended that you
775 implement it.  It is especially important in simple engines that do
776 not ponder and do not poll for input while thinking, but it is needed in all
777 engines.
778 </p>
779 </dd>
780
781 <dt>draw</dt>
782 <dd>The engine's opponent offers the engine a draw.  To accept the
783 draw, send "offer draw".  To decline, ignore the offer (that is, send
784 nothing).  If you're playing on ICS, it's possible for the draw offer
785 to have been withdrawn by the time you accept it, so don't assume the
786 game is over because you accept a draw offer.  Continue playing until
787 xboard tells you the game is over.  See also "offer draw" below.
788 </dd>
789
790 <dt>result RESULT {COMMENT}</dt>
791 <dd>After the end of each game, xboard will send you a result command.
792 You can use this command to trigger learning.  RESULT is either 1-0,
793 0-1, 1/2-1/2, or *, indicating whether white won, black won, the game
794 was a draw, or the game was unfinished.  The COMMENT string is purely
795 a human-readable comment; its content is unspecified and subject to
796 change.  In ICS mode, it is passed through from ICS uninterpreted.
797 Example: <pre>result 1-0 {White mates}</pre>
798 <p>
799 Here are some notes on interpreting the "result" command.  Some apply
800 only to playing on ICS ("Zippy" mode).
801 </p>
802
803 <p>
804 If you won but did not just play a mate, your opponent must have
805 resigned or forfeited.  If you lost but were not just mated, you
806 probably forfeited on time, or perhaps the operator resigned manually.
807 If there was a draw for some nonobvious reason, perhaps your opponent
808 called your flag when he had insufficient mating material (or vice
809 versa), or perhaps the operator agreed to a draw manually.
810 </p>
811
812 <p>
813 You will get a result command even if you already know the game ended
814 -- for example, after you just checkmated your opponent.  In fact, if
815 you send the "RESULT {COMMENT}" command (discussed below), you will
816 simply get the same thing fed back to you with "result" tacked in
817 front.  You might not always get a "result *" command, however.  In
818 particular, you won't get one in local chess engine mode when the user
819 stops playing by selecting Reset, Edit Game, Exit or the like.
820 </p>
821 </dd>
822
823 <dt><span class="version1">setboard FEN</span></dt>
824 <dd>
825 <p><span class="version1">
826 The setboard command is the new way to set up positions, beginning
827 in protocol version 2.  It is not used unless it has been selected
828 with the feature command.  Here FEN is a position in Forsythe-Edwards
829 Notation, as defined in the PGN standard.</span>
830 <span class="version43">Note that this PGN standard referred to here
831 only applies to normal Chess;
832 Obviously in variants that cannot be described by a FEN for normal Chess,
833 e.g. because the board is not 8x8, other pieces then PNBRQK participate,
834 there are holdings that need to be specified, etc.,
835 xboard will use a FEN format that is standard or suitable for that varant.
836 In particular, in FRC or CRC, WinBoard will use Shredder-FEN or X-FEN standard,
837 i.e. it can use the rook-file indicator letter to represent a castling right
838 (like HAha) whenever it wants, but if it uses KQkq, this will always refer
839 to the outermost rook on the given side.</span>
840 </p>
841
842 <p class="version1">
843 <em>Illegal positions:</em> Note that either setboard or edit can
844 be used to send an illegal position to the engine.  The user can
845 create any position with xboard's Edit Position command (even, say,
846 an empty board, or a board with 64 white kings and no black ones).
847 If your engine receives a position that it considers illegal,
848 I suggest that you send the response "tellusererror Illegal position",
849 and then respond to any attempted move with "Illegal move" until
850 the next new, edit, or setboard command.
851 </p>
852 </dd>
853
854 <dt>edit</dt>
855 <dd>
856 <p><span class="version1">
857 The edit command is the old way to set up positions.  For compatibility
858 with old engines, it is still used by default, but new engines may prefer
859 to use the feature command (see below) to cause xboard to use setboard instead.
860 </span>
861 The edit command puts the chess engine into a special mode, where
862 it accepts the following subcommands:</p>
863 <table>
864 <tr><td>c</td><td>change current piece color, initially white</td></tr>
865 <tr><td>Pa4 (for example)</td><td>place pawn of current color on a4</td></tr>
866 <tr><td>xa4 (for example)</td><td>empty the square a4 (not used by xboard)</td></tr>
867 <tr><td>#</td><td>clear board</td></tr>
868 <tr><td>.</td><td>leave edit mode</td></tr>
869 </table>
870 <p class="version1">
871 See the Idioms section below for additional subcommands used in
872 ChessBase's implementation of the protocol.
873 </p>
874
875 <p>The edit command does not change the side to move.  To set up a
876 black-on-move position, xboard uses the following command sequence:
877 </p>
878 <pre>
879     new
880     force
881     a2a3
882     edit
883     &lt;edit commands&gt;
884     .
885 </pre>
886
887 <p>
888 This sequence is used to avoid the "black" command, which is now
889 considered obsolete and which many engines never did implement as
890 specified in this document.
891 </p>
892
893 <p>
894 After an edit command is complete, if a king and a rook are on their
895 home squares, castling is assumed to be available to them.  En passant
896 capture is assumed to be illegal on the current move regardless of the
897 positions of the pawns.  The clock for the 50 move rule starts at
898 zero, and for purposes of the draw by repetition rule, no prior
899 positions are deemed to have occurred.
900 <span class="version43">
901 In FRC or CRC, any rook and king put on the back rank should be considered to
902 have castling rights, even if it later becomes apparent that they cannot be both in the
903 initial position, because the position just set up is asymmetric.
904 It is upto WinBoard to find work-around in cases where this is not desired,
905 similar to the "black kludge" shown above, by setting up an earlier position,
906 and then do a move to destroy castling rights or create e.p. rights.
907 (Don't bet your life on it...)
908 </span>
909 </p>
910 </dd>
911
912 <dt>hint</dt>
913 <dd>If the user asks for a hint, xboard sends your engine the command
914 "hint".  Your engine should respond with "Hint: xxx", where xxx is a
915 suggested move.  If there is no move to suggest, you can ignore the
916 hint command (that is, treat it as a no-op).
917 </dd>
918
919 <dt>bk</dt>
920 <dd>If the user selects "Book" from the xboard menu, xboard will send
921 your engine the command "bk".  You can send any text you like as the
922 response, as long as each line begins with a blank space or tab (\t)
923 character, and you send an empty line at the end.  The text pops up in
924 a modal information dialog.
925 </dd>
926
927 <dt>undo</dt>
928 <dd>If the user asks to back up one move, xboard will send you the
929 "undo" command.  xboard will not send this command without putting you
930 in "force" mode first, so you don't have to worry about what should
931 happen if the user asks to undo a move your engine made.  (GNU Chess 4
932 actually switches to playing the opposite color in this case.)
933 </dd>
934
935 <dt>remove</dt>
936 <dd>If the user asks to retract a move, xboard will send you the
937 "remove" command.  It sends this command only when the user is on
938 move.  Your engine should undo the last two moves (one for each
939 player) and continue playing the same color.
940 </dd>
941
942 <dt>hard</dt>
943 <dd>Turn on pondering (thinking on the opponent's time, also known as
944 "permanent brain").  xboard will not make any assumption about what
945 your default is for pondering or whether "new" affects this setting.
946 </dd>
947
948 <dt>easy</dt>
949 <dd>Turn off pondering.</dd>
950
951 <dt>post</dt>
952 <dd>Turn on thinking/pondering output.
953 See <a href="#10">Thinking Output</a> section.</dd>
954
955 <dt>nopost</dt>
956 <dd>Turn off thinking/pondering output.</dd>
957
958 <dt>analyze</dt>
959 <dd>Enter analyze mode.  See <a href="#12">Analyze Mode</a> section.</dd>
960
961 <dt>name X </dt>
962 <dd>This command informs the engine of its
963 opponent's name.  When the engine is playing on a chess server, xboard
964 obtains the opponent's name from the server.
965 <span class="version1">
966 When the engine is
967 playing locally against a human user, xboard obtains the user's login
968 name from the local operating system.  When the engine is playing
969 locally against another engine, xboard uses either the other engine's
970 filename or the name that the other engine supplied in the myname
971 option to the feature command.  By default, xboard uses the name
972 command only when the engine is playing on a chess server.  Beginning
973 in protocol version 2, you can change this with the name option to the
974 feature command; see below.
975 </span>
976 </dd>
977
978 <dt>rating</dt>
979 <dd>In ICS mode, xboard obtains the ICS opponent's rating from the
980 "Creating:" message that appears before each game.  (This message may
981 not appear on servers using outdated versions of the FICS code.)  In
982 Zippy mode, it sends these ratings on to the chess engine using the
983 "rating" command.  The chess engine's own rating comes first, and if
984 either opponent is not rated, his rating is given as 0.
985 <span class="version1">
986 In the future this command may also be used in other modes, if ratings
987 are known.
988 </span>
989 Example: <pre>rating 2600 1500</pre>
990 </dd>
991
992 <dt><span class="version1">ics HOSTNAME</span></dt>
993 <dd class="version1">
994 If HOSTNAME is "-", the engine is playing against a local
995 opponent; otherwise, the engine is playing on an Internet Chess Server
996 (ICS) with the given hostname.  This command is new in protocol
997 version 2 and is not sent unless the engine has enabled it with
998 the "feature" command.  Example: "ics freechess.org"
999 </dd>
1000
1001 <dt>computer</dt>
1002 <dd>The opponent is also a computer chess engine.  Some engines alter
1003 their playing style when they receive this command.
1004 </dd>
1005
1006 <dt class="version1">pause</dt>
1007 <dt class="version1">resume</dt>
1008 <dd class="version1">(These commands are new in protocol
1009 version 2 and will not be sent unless feature pause=1 is set.  At
1010 this writing, xboard actually does not use the commands at all, but it
1011 or other interfaces may use them in the future.)
1012 The "pause" command puts the engine into a special state where it
1013 does not think, ponder, or otherwise consume significant CPU time.
1014 The current thinking or pondering (if any) is suspended and both
1015 player's clocks are stopped.  The only command that the interface may
1016 send to the engine while it is in the paused state is "resume".  The
1017 paused thinking or pondering (if any) resumes from exactly where it
1018 left off, and the clock of the player on move resumes running from
1019 where it stopped.
1020 </dd>
1021
1022 <dt class="version44">memory N</dt>
1023 <dd class="version44">
1024 This command informs the engine on how much memory it is allowed to use maximally, in MegaBytes.
1025 On receipt of this command, the engine should adapt the size of its hash tables accordingly.
1026 This command does only fix the total memory use,
1027 the engine has to decide for itself
1028 (or be configured by the user by other means)
1029 how to divide up the available memory between the various tables it wants to use
1030 (e.g. main hash, pawn hash, tablebase cache, bitbases).
1031 This command will only be sent to engines that have requested it through the memory feature,
1032 and only at the start of a game,
1033 as the first of the commands to relay engine option settings just before each "new" command.
1034 </dd>
1035
1036 <dt class="version44">cores N</dt>
1037 <dd class="version44">
1038 This command informs the engine on how many CPU cores it is allowed to use maximally.
1039 This could be interpreted as the number of search threads for SMP engines.
1040 (Threads that do not consume significant amounts of CPU time, like I/O threads, need not be included in the count.)
1041 This command will only be sent to engines that have requested it through the smp feature.
1042 The engine should be able to respond to the "cores" command any time during a game,
1043 but it is allowed to finish a search in progress before procesing the command.
1044 (Obeying the command should take priority over finishing a ponder search, though.)
1045 In any case it will be sent at the start of every game
1046 as the last command to relay engine option settings before the "new" command.
1047 </dd>
1048
1049 <dt class="version44">egtpath TYPE PATH</dt>
1050 <dd class="version44">
1051 This command informs the engine in which directory (given by the PATH argument)
1052 it can find end-game tables of the specified TYPE.
1053 The TYPE argument can be any character string which does not contain spaces.
1054 Currently <strong>nalimov</strong> and <strong>scorpio</strong> are defined types,
1055 for Nalimov tablebases and Scorpio bitbases, respectively,
1056 but future developers of other formats are free to define their own format names.
1057 The GUI simply matches the TYPE names the engine says it supports
1058 with those that the user supplied when configuring xboard.
1059 For every match, it sends a separate "y" command.
1060 The PATH argument would normally (for Nalimov) be the pathname of the directory the EGT files are in,
1061 but could also be the name of a file, or in fact anything the particular EGT type requires.
1062 It is upto the developer of the EGT format to specify the syntax of this parameter.
1063 This command will only be sent to engines that have told the GUI they support EGTs of the given TYPE
1064 through the egt feature.
1065 It will be sent at the start of each game, before the "new" command.
1066 </dd>
1067
1068 <dt class="version44">option NAME[=VALUE]</dt>
1069 <dd class="version44">
1070 This command changes the setting of the option NAME defined by the engine
1071 (through an earlier feature command)
1072 to the given VALUE.
1073 XBoard will in general have no idea what the option means,
1074 and will send the command only when a user changes the value of this option through a menu,
1075 or at startup of the engine
1076 (before the first 'cores' command or, if that is not sent, the first 'new' command)
1077 in reaction to command-line options.
1078 The NAME echoes back to the engine the string that was identified as an option NAME
1079 in the feature command defining the option.
1080 The VALUE is of the type (numeric or text or absent) that was implied by the option type
1081 specified in this feature command,
1082 i.e. with 'spin' and 'check' options VALUE will be a decimal integer (in the latter case 0 or 1),
1083 with 'combo' and 'string' options VALUE will be a text string,
1084 and with 'button' and 'save' options no VALUE will be sent at all.
1085 </dd>
1086 </dl>
1087
1088 <h3>Bughouse commands:</h3>
1089
1090 <p>
1091 xboard now supports bughouse engines when in Zippy mode.  See
1092 <a href="http://www.tim-mann.org/xboard/zippy.README"
1093 >zippy.README</a> for information on Zippy mode and how to turn on the
1094 bughouse support.  The bughouse move format is given above.  xboard
1095 sends the following additional commands to the engine when in bughouse
1096 mode.
1097 Commands to inform your engine of the partner's game state may
1098 be added in the future.
1099 </p>
1100
1101 <dl>
1102 <dt>partner &lt;player&gt;</dt>
1103 <dd>&lt;player&gt; is now your partner for future games.  Example: <pre>partner mann</pre>
1104 </dd>
1105
1106 <dt>partner</dt>
1107 <dd>Meaning: You no longer have a partner.
1108 </dd>
1109
1110 <dt>ptell &lt;text&gt;</dt>
1111 <dd>Your partner told you &lt;text&gt;, either with a ptell or an ordinary tell.
1112 </dd>
1113
1114 <dt>holding [&lt;white&gt;] [&lt;black&gt;]</dt>
1115 <dd>White currently holds &lt;white&gt;; black currently holds &lt;black&gt;.
1116   Example: <pre>holding [PPPRQ] []</pre></dd>
1117
1118 <dt>holding [&lt;white&gt;] [&lt;black&gt;] &lt;color&gt;&lt;piece&gt;</dt>
1119 <dd>White currently holds &lt;white&gt;; black currently holds &lt;black&gt;, after
1120   &lt;color&gt; acquired &lt;piece&gt;.   Example: <pre>holding [PPPRQ] [R] BR</pre></dd>
1121 </dl>
1122
1123 <h2><a name="9">9. Commands from the engine to xboard</a></h2>
1124
1125 <p class="version1">
1126 In general, an engine should not send any output to xboard that is not
1127 described in this document.  As the protocol is extended, newer
1128 versions of xboard may recognize additional strings as commands that
1129 were previously not assigned a meaning.
1130 </p>
1131
1132 <dl>
1133
1134 <dt class="version1"> feature FEATURE1=VALUE1 FEATURE2=VALUE2 ... </dt>
1135 <dd class="version1">
1136 <p>Beginning with version 2, the protocol includes the "feature"
1137 command, which lets your engine control certain optional protocol
1138 features.  Feature settings are written as FEATURE=VALUE, where
1139 FEATURE is a name from the list below and VALUE is the value to be
1140 assigned.  Features can take string, integer, or boolean values; the
1141 type of value is listed for each feature.  String values are written
1142 in double quotes (for example, <tt>feature myname="Miracle Chess
1143 0.9"</tt>), integers are written in decimal, and boolean values are
1144 written as 0 for false, 1 for true.  Any number of features can be set
1145 in one feature command, or multiple feature commands can be given.</p>
1146
1147 <p>
1148 Your engine should send one or more feature commands immediately after
1149 receiving the "protover" command, since xboard needs to know the
1150 values of some features before sending further commands to the engine.
1151 Because engines that predate protocol version 2 do not send "feature",
1152 xboard uses a timeout mechanism: when it first starts your engine, it
1153 sends "xboard" and "protover N", then listens for feature commands for
1154 two seconds before sending any other commands.  To end this timeout
1155 and avoid the wait, set the feature "done=1" at the end of your last
1156 feature command.  To increase the timeout, if needed, set the feature
1157 "done=0" before your first feature command and "done=1" at the end.
1158 If needed, it is okay for your engine to set done=0 soon as it starts,
1159 even before it receives the xboard and protover commands.  This can be
1160 useful if your engine takes a long time to initialize itself.  It
1161 should be harmless even if you are talking to a (version 1) user
1162 interface that does not understand the "feature" command, since such
1163 interfaces generally ignore commands from the engine that they do not
1164 understand.
1165 </p>
1166
1167 <p>
1168 The feature command is designed to let the protocol change without
1169 breaking engines that were written for older protocol versions.  When
1170 a new feature is added to the protocol, its default value is always
1171 chosen to be compatible with older versions of the protocol that did
1172 not have the feature.  Any feature that your engine does not set in a
1173 "feature" command retains its default value, so as the protocol
1174 changes, you do not have to change your engine to keep up with it
1175 unless you want to take advantage of a new feature.  Because some
1176 features are improvements to the protocol, while others are meant to
1177 cater to engines that do not implement all the protocol features, the
1178 recommended setting for a feature is not always the same as the
1179 default setting.  The listing below gives both default and recommended
1180 settings for most features.
1181 </p>
1182
1183 <p>
1184 You may want to code your engine so as to be able to work with
1185 multiple versions of the engine protocol.  Protocol version 1 does not
1186 send the protover command and does not implement the feature command;
1187 if you send a feature command in protocol version 1, it will have no
1188 effect and there will be no response.  In protocol version 2 or later,
1189 each feature F that you set generates the response "accepted F" if the
1190 feature is implemented, or "rejected F" if it is not.  Thus an engine
1191 author can request any feature without having to keep track of which
1192 protocol version it was introduced in; you need only check whether the
1193 feature is accepted or rejected.  This mechanism also makes it
1194 possible for a user interface author to implement a subset of a
1195 protocol version by rejecting some features that are defined in that
1196 version; however, you should realize that engine authors are likely to
1197 code for xboard and may not be prepared to have a feature that they
1198 depend on be rejected.
1199 <span class="version44">If the GUI rejects an option feature because of the
1200 syntax of the value, it should print the value string with the
1201 "rejected" command, e.g. "rejected option nonsense" in response
1202 to receiving feature option="nonsense".</span>
1203 </p>
1204
1205 <p>
1206 Here are the features that are currently defined.
1207 </p>
1208
1209 <dl>
1210 <dt class="version1">ping (boolean, default 0, recommended 1)</dt>
1211 <dd class="version1">
1212 If ping=1, xboard may use the protocol's new "ping" command;
1213 if ping=0, xboard will not use the command.
1214 </dd>
1215
1216 <dt class="version1">setboard (boolean, default 0, recommended 1)</dt>
1217 <dd class="version1">
1218 If setboard=1, xboard will use the protocol's new "setboard" command
1219 to set up positions; if setboard=0, it will use the older "edit" command.
1220 </dd>
1221
1222 <dt class="version1">playother (boolean, default 0, recommended 1)</dt>
1223 <dd class="version1">
1224 If playother=1, xboard will use the protocol's new "playother" command
1225 when appropriate; if playother=0, it will not use the command.
1226 </dd>
1227
1228 <dt class="version1">san (boolean, default 0)</dt>
1229 <dd class="version1">
1230 If san=1, xboard will send moves to the engine in standard algebraic
1231 notation (SAN); for example, Nf3.  If san=0, xboard will send moves in
1232 coordinate notation; for example, g1f3.  See MOVE in
1233 <a href="#8">section 8</a> above for more details of both kinds of notation.
1234 </dd>
1235
1236 <dt class="version1">usermove (boolean, default 0)</dt>
1237 <dd class="version1">
1238 If usermove=1, xboard will send moves to the engine with the
1239 command "usermove MOVE"; if usermove=0, xboard will send just the move,
1240 with no command name.
1241 </dd>
1242
1243 <dt class="version1">time (boolean, default 1, recommended 1)</dt>
1244 <dd class="version1">
1245 If time=1, xboard will send the "time" and "otim" commands to
1246 update the engine's clocks; if time=0, it will not.
1247 </dd>
1248
1249 <dt class="version1">draw (boolean, default 1, recommended 1)</dt>
1250 <dd class="version1">
1251 If draw=1, xboard will send the "draw" command if the engine's opponent
1252 offers a draw; if draw=0, xboard will not inform the engine about
1253 draw offers.  Note that if draw=1, you may receive a draw offer while you
1254 are on move; if this will cause you to move immediately, you should set
1255 draw=0.
1256 </dd>
1257
1258 <dt class="version1">sigint (boolean, default 1)</dt>
1259 <dd class="version1">
1260 If sigint=1, xboard may send SIGINT (the interrupt signal) to
1261 the engine as <a href="#7">section 7</a> above; if sigint=0, it will
1262 not.
1263 </dd>
1264
1265 <dt class="version1">sigterm (boolean, default 1)</dt>
1266 <dd class="version1">
1267 If sigterm=1, xboard may send SIGTERM (the termination signal) to
1268 the engine as <a href="#7">section 7</a> above; if sigterm=0, it will
1269 not.
1270 </dd>
1271
1272 <dt class="version1">reuse (boolean, default 1, recommended 1) </dt>
1273 <dd class="version1">
1274 If reuse=1, xboard may reuse your engine for multiple games.  If
1275 reuse=0 (or if the user has set the -xreuse option on xboard's command
1276 line), xboard will kill the engine process after every game and start
1277 a fresh process for the next game.
1278 </dd>
1279
1280 <dt class="version1">analyze (boolean, default 1, recommended 1)</dt>
1281 <dd class="version1">
1282 If analyze=0, xboard will not try to use the "analyze" command; it
1283 will pop up an error message if the user asks for analysis mode.  If
1284 analyze=1, xboard will try to use the command if the user asks for
1285 analysis mode.
1286 </dd>
1287
1288 <dt class="version1">myname (string, default determined from engine filename)</dt>
1289 <dd class="version1">
1290 This feature lets you set the name that xboard will use for your
1291 engine in window banners, in the PGN tags of saved game files, and when
1292 sending the "name" command to another engine.
1293 </dd>
1294
1295 <dt class="version1">variants (string, see text below)</dt>
1296 <dd><span class="version1">
1297 This feature indicates which chess variants your engine accepts.
1298 It should be a comma-separated list of variant names.  See the table
1299 under the "variant" command in <a href="#8">section 8</a> above.  If
1300 you do not set this feature, xboard will assume by default that your
1301 engine supports all variants.  (However, the -zippyVariants
1302 command-line option still limits which variants will be accepted in
1303 Zippy mode.)  It is recommended that you set this feature to the
1304 correct value for your engine (just "normal" in most cases) rather
1305 than leaving the default in place, so that the user will get an
1306 appropriate error message if he tries to play a variant that your
1307 engine does not support.</span>
1308 <br />
1309 <span class="version43">If your engine can play variants on a deviating board size,
1310 like capablanca on an 8x8 board, or capablanca crazyhouse,
1311 it can list them amongst the variants with a prefix spcifying board size plus
1312 holdings size, like 8x8+0_capablanca or 10x8+7_capablanca.
1313 If it is capable of playing any variant with an arbitrary board size,
1314 it should list "boardsize" as one of the variants.
1315 If there is a maximum to the board size, this can be prefixed,
1316 e.g. "12x10+0_boardsize".
1317 </span>
1318 </dd>
1319
1320 <dt class="version1">colors (boolean, default 1, recommended 0) </dt>
1321 <dd><span class="version1">
1322 If colors=1, xboard uses the obsolete "white" and "black"
1323 commands in a stylized way that works with most older chess engines
1324 that require the commands.  See the "<a href="#13">Idioms</a>" section
1325 below for details.  If colors=0, xboard does not use the "white" and
1326 "black" commands at all.
1327 </span>
1328 </dd>
1329
1330 <dt class="version1">ics (boolean, default 0)</dt>
1331 <dd class="version1">
1332 If ics=1, xboard will use the protocol's new "ics" command
1333 to inform the engine of whether or not it is playing on a chess server;
1334 if ics=0, it will not.
1335 </dd>
1336
1337 <dt class="version1">name (boolean, see text below)</dt>
1338 <dd class="version1">
1339 If name=1, xboard will use the protocol's "name" command
1340 to inform the engine of the opponent's name; if name=0, it will not.
1341 By default, name=1 if the engine is playing on a chess server; name=0 if not.
1342 </dd>
1343
1344 <dt class="version1">pause (boolean, default 0)</dt>
1345 <dd class="version1">
1346 If pause=1, xboard may use the protocol's new "pause" command;
1347 if pause=0, xboard assumes that the engine does not support this command.
1348 </dd>
1349
1350 <dt class="version43">nps (boolean, default ?)</dt>
1351 <dd class="version43">
1352 If nps=1, it means the engine supports the nps command.
1353 If nps=0, it means the engine does not support it, and WinBoard should refrain from sending it.
1354 Default is that WinBoard sends it, in an attempt to try out if the engine understand it.
1355 The engine should properly respond with "Error (unkown command): nps" if it does not implement it,
1356 (as any protocol version pre-scribes),
1357 or WinBoard might assume that the engine did understand the command.
1358 In that case the use of different time standards that ensues could lead to time forfeits for the engine.
1359 </dd>
1360
1361 <dt class="version43">debug (boolean, default 0)</dt>
1362 <dd class="version43">
1363 If debug=1, it means the engine wants to send debug output prefixed by '#',
1364 which WinBoard should ignore, except for including it in the winboard.debug file.
1365 As this feature is added to protocol 2 ony late,
1366 so that not all protocol-2 supporting versions of WinBoard might implement it,
1367 it is important that engines check if WinBoard accepts the feature.
1368 If the feature is rejected,
1369 engines must refrain from sending the debug output,
1370 or do so at their own risk.
1371 </dd>
1372
1373 <dt class="version44">memory (boolean, default 0)</dt>
1374 <dd class="version44">
1375 If memory=1, the size of the total amount of memory available for the memory-consuming tables of the engine
1376 (e.g. hash, EGTB cache)
1377 will be set by the GUI through the "memory" command.
1378 </dd>
1379
1380 <dt class="version44">smp (boolean, default 0)</dt>
1381 <dd class="version44">
1382 If smp=1, the GUI will send the "cores" command to the engine to inform it how many CPU cores it can use.
1383 Note that sending smp=1 does not imply the engine can use more than one CPU;
1384 just that it wants to receive the "cores" command.
1385 </dd>
1386
1387 <dt class="version44">egt (string, see text below)</dt>
1388 <dd class="version44">
1389 This feature indicates which end-game table formats the engine supports.
1390 It should be a comma-separated list of format names.
1391 See under the "egtpath" command in <a href="#8">section 8</a> above.
1392 If you do not set this feature, xboard will assume the engine does not support end-game tables,
1393 and will not send any "egtpath" commands to inform the engine about their whereabouts.
1394 </dd>
1395
1396 <dt class="version44">option (string, see text below)</dt>
1397 <dd><span class="version44">
1398 This feature is used by the engine to define an option command to appear in a GUI menu,
1399 so that the user can change the corresponding setting of the engine through the GUI interactively.
1400 The string describes the option by defining a name, type, current value and (sometimes) the acceptable value range.
1401 Unlike other features, option features are accumulated by the GUI,
1402 and the GUI must be able to add a new option to the list at any time,
1403 even after having received feature done=1.
1404 There are ten different options types, each requiring a slighly different syntax of the defining string:
1405 <br />
1406 feature option="NAME -button"
1407 <br />
1408 feature option="NAME -save"
1409 <br />
1410 feature option="NAME -reset"
1411 <br />
1412 feature option="NAME -check VALUE"
1413 <br />
1414 feature option="NAME -string VALUE"
1415 <br />
1416 feature option="NAME -spin VALUE MIN MAX"
1417 <br />
1418 feature option="NAME -combo CHOICE1 /// CHOICE2 ..."
1419 <br />
1420 feature option="NAME -slider VALUE MIN MAX"
1421 <br />
1422 feature option="NAME -file VALUE"
1423 <br />
1424 feature option="NAME -path VALUE"
1425 <br />
1426 NAME is an arbitrary alphanumeric string which can contain spaces;
1427 the other words in capitals would be replaced by the current (default) setting of the option,
1428 (a character string for -string options, a decimal number for -spin and -check options,
1429 were the latter uses 1=checked, 0=unchecked),
1430 the minimum or maximum value of numeric (-spin) options,
1431 or arbitrary text labels (for -combo option).
1432 In the latter case, the current value will be preceded by an asterisk.
1433 The -file and -path options are similar to -string, but can be used to inform the GUI that
1434 the text represents a file name or folder name respectively,
1435 so the GUI dialog could add the appropriate browse button to the text-edit field.
1436 Similarly, a -slider option is like a -spin, but the GUI might make a different
1437 graphical representation for it.
1438 A -save option is like a -button, and defines an immediate command to be sent by the engine.
1439 With -save the GUI will make sure all current option settings are flushed to the engine
1440 before it sends this command.
1441 A -reset option is like a -button, but use of it purges the list of options before sending
1442 the corresponding option command to the engine.
1443 This enables the engine to completely redefine its options or their current settings,
1444 by sending a new set of option feature commands to the GUI,
1445 terminated by feature done=1.
1446 (The effect of sending an option feature for an option with the same name as was defined before,
1447 without first receiving a -reset option command, is undefined.)
1448 </span>
1449 </dd>
1450
1451 <dt class="version1">done (integer, no default)</dt>
1452 <dd><span class="version1">
1453 If you set done=1 during the initial two-second timeout after
1454 xboard sends you the "xboard" command, the
1455 timeout will end and xboard will not look for any more feature
1456 commands before starting normal operation.
1457 If you set done=0, the initial timeout is increased to one hour;
1458 in this case, you must set done=1 before xboard will enter normal operation.
1459 </span>
1460 </dd>
1461 </dl>
1462 </dd>
1463
1464
1465 <dt>Illegal move: MOVE</dt>
1466 <dt>Illegal move (REASON): MOVE</dt>
1467 <dd>If your engine receives a MOVE command that is recognizably a move
1468 but is not legal in the current position, your engine must print an
1469 error message in one of the above formats so that xboard can pass the
1470 error on to the user and retract the move.  The (REASON) is entirely
1471 optional.  Examples:
1472
1473 <pre>
1474   Illegal move: e2e4
1475   Illegal move (in check): Nf3
1476   Illegal move (moving into check): e1g1
1477 </pre>
1478 <p>
1479 Generally, xboard will never send an ambiguous move, so it does not
1480 matter whether you respond to such a move with an Illegal move message
1481 or an Error message.
1482 </p>
1483 </dd>
1484
1485 <dt>Error (ERRORTYPE): COMMAND</dt>
1486 <dd>If your engine receives a command it does not understand or does
1487 not implement, it should print an error message in the above format so
1488 that xboard can parse it.  Examples:
1489 <pre>
1490   Error (ambiguous move): Nf3
1491   Error (unknown command): analyze
1492   Error (command not legal now): undo
1493   Error (too many parameters): level 1 2 3 4 5 6 7
1494 </pre>
1495 </dd>
1496
1497 <dt>move MOVE</dt>
1498 <dd>Your engine is making the move MOVE.  Do not echo moves from
1499 xboard with this command; send only new moves made by the engine.
1500
1501 <div class="version1">
1502 <p>For the actual move text from your chess engine (in place of MOVE
1503 above), your move should be either</p>
1504 <ul>
1505 <li>in coordinate notation (e.g.,
1506 e2e4, e7e8q) with castling indicated by the King's two-square move (e.g.,
1507 e1g1), or</li>
1508 <li>in Standard Algebraic Notation (SAN) as defined in the
1509 Portable Game Notation standard (e.g, e4, Nf3, O-O, cxb5, Nxe4, e8=Q),
1510 with the extension piece@square (e.g., P@f7) to handle piece placement
1511 in bughouse and crazyhouse.</li>
1512 </ul>
1513 <p>
1514 xboard itself also accepts some variants of SAN, but for compatibility
1515 with non-xboard interfaces, it is best not to rely on this behavior.
1516 </p>
1517
1518 <p>Warning: Even though all versions of this protocol specification
1519 have indicated that xboard accepts SAN moves, some non-xboard
1520 interfaces are known to accept only coordinate notation.  See the
1521 Idioms section for more information on the known limitations of some
1522 non-xboard interfaces.  It should be safe to send SAN moves if you
1523 receive a "protover 2" (or later) command from the interface, but
1524 otherwise it is best to stick to coordinate notation for maximum
1525 compatibility.  An even more conservative approach would be for your
1526 engine to send SAN to the interface only if you have set feature san=1
1527 (which causes the interface to send SAN to you) and have received
1528 "accepted san" in reply.
1529 </p>
1530 </div>
1531 </dd>
1532
1533 <dt>RESULT {COMMENT}</dt>
1534 <dd>When your engine detects
1535 that the game has ended by rule, your engine must output a line of the
1536 form "RESULT {comment}" (without the quotes), where RESULT is a PGN
1537 result code (1-0, 0-1, or 1/2-1/2), and comment is the reason.  Here
1538 "by rule" means that the game is definitely over because of what
1539 happened on the board.  In normal chess, this includes checkmate,
1540 stalemate, triple repetition, the 50 move rule, or insufficient
1541 material; it does not include loss on time or the like.
1542 Examples:
1543 <pre>
1544   0-1 {Black mates}
1545   1-0 {White mates}
1546   1/2-1/2 {Draw by repetition}
1547   1/2-1/2 {Stalemate}
1548 </pre>
1549
1550 <p>
1551 xboard relays the result to the user, the ICS, the other engine in Two
1552 Machines mode, and the PGN save file as required.
1553 <span class="version43">Note that "definitey over" above means that sending this command
1554 will be taken by WinBoard as an unconditional refusal of the engine to play on,
1555 which might cause you to forfeit if the game was in fact not over.
1556 This command should thus not be used to offer draws, accept draws,
1557 or make draw-by-rule claims that are not yet valid in the current position
1558 (but will be after you move).
1559 For offering and claiming such draws, "offer draw" should be used.</span>
1560 </p>
1561
1562 <p class="version44">
1563 Note that (in accordance with FIDE rules) only KK, KNK, KBK and KBKB with all bishops on the
1564 same color can be claimed as draws on the basis of insufficient mating material.
1565 The end-games KNNK, KBKN, KNKN and KBKB with unlike bishops do have mate positions,
1566 and cannot be claimed.
1567 Complex draws based on locked Pawn chains will not be recognized as draws by most interfaces,
1568 so do not claim in such positions, but just offer a draw or play on.
1569 </p>
1570
1571 <p class="version44">
1572 Note to GUI programmers: RESULT commands that the engine sends immediately after its move
1573 might be detected by the GUI only after the opponent has moved, because of communication
1574 and scheduling delays, no matter how fast the engine sent it.
1575 Any judgement of the validity of RESULT claims based on te "current" board position
1576 will have to account for this uncertainty.
1577 </p>
1578 </dd>
1579
1580 <dt>resign</dt>
1581 <dd>If your engine wants to resign, it can send the command "resign".
1582 Alternatively, it can use the "RESULT {comment}" command if the string
1583 "resign" is included in the comment; for example "0-1 {White
1584 resigns}".  xboard relays the resignation to the user, the ICS, the
1585 other engine in Two Machines mode, and the PGN save file as required.
1586 <span class="version44">Note that many interfaces work more smoothly if you resign <em>before</em>
1587 you move.</span>
1588 </dd>
1589
1590 <dt>offer draw</dt>
1591 <dd>If your engine wants to offer a draw by agreement (as opposed to
1592 claiming a draw by rule), it can send the command "offer draw".
1593 xboard relays the offer to the user, the ICS, the other engine in Two
1594 Machines mode, and the PGN save file as required.  In Machine White,
1595 Machine Black, or Two Machines mode, the offer is considered valid
1596 until your engine has made two more moves.
1597 <span class="version43">This command must also be used to accept a draw offer.
1598 Do not use the 1/2-1/2 command for that, as the offer might be no longer valid,
1599 in which case a refusal to play on implied by the RESULT command might make you forfeit the game.
1600 "offer draw" should also be used to claim 50-move and 3-fold-repetition draws
1601 that will occur <em>after</em> your move, by sending it <em>before</em> making the move.
1602 WinBoard will grant draw offers without the opponent having any say in
1603 it in situations where draws can be claimed.
1604 Only if the draw cannot be claimed, the offer will be passed to your opponent after you make your next move,
1605 just before WinBoard relays this move to the opponent.
1606 </span>
1607 </dd>
1608
1609 <dt class="version1">tellopponent MESSAGE</dt>
1610 <dd class="version1">
1611 This command lets the engine give a message to its opponent,
1612 independent of whether the opponent is a user on the local machine or
1613 a remote ICS user (Zippy mode).  MESSAGE consists of any characters,
1614 including whitespace, to the end of the line.  When the engine is
1615 playing against a user on the local machine, xboard pops up an
1616 information dialog containing the message.  When the engine is playing
1617 against an opponent on the ICS (Zippy mode), xboard sends "say
1618 MESSAGE\n" to the ICS.
1619 </dd>
1620
1621 <dt class="version1">tellothers MESSAGE </dt>
1622 <dd class="version1">This command lets the engine give a message to people watching the
1623 game other than the engine's opponent.  MESSAGE consists of any
1624 characters, including whitespace, to the end of the line.  When the
1625 engine is playing against a user on the local machine, this command
1626 does nothing.  When the engine is playing against an opponent on the
1627 ICS (Zippy mode), xboard sends "whisper MESSAGE\n" to the ICS.
1628 </dd>
1629
1630 <dt class="version1">tellall MESSAGE</dt>
1631 <dd class="version1">This command lets the engine give a message to its opponent and
1632 other people watching the game,
1633 independent of whether the opponent is a user on the local machine or
1634 a remote ICS user (Zippy mode).  MESSAGE consists of any characters,
1635 including whitespace, to the end of the line.  When the engine is
1636 playing against a user on the local machine, xboard pops up an
1637 information dialog containing the message.  When the engine is playing
1638 against an opponent on the ICS (Zippy mode), xboard sends "kibitz
1639 MESSAGE\n" to the ICS.
1640 </dd>
1641
1642 <dt>telluser MESSAGE</dt>
1643 <dd>xboard pops up an information dialog containing the message.
1644 MESSAGE consists of any characters, including whitespace, to the end
1645 of the line.
1646 </dd>
1647
1648 <dt>tellusererror MESSAGE</dt>
1649 <dd>xboard pops up an error dialog containing the message.
1650 MESSAGE consists of any characters, including whitespace, to the end
1651 of the line.
1652 </dd>
1653
1654 <dt>askuser REPTAG MESSAGE</dt>
1655 <dd>Here REPTAG is a string containing no whitespace, and MESSAGE
1656 consists of any characters, including whitespace, to the end of the
1657 line.  xboard pops up a question dialog that says MESSAGE and
1658 has a typein box.  If the user types in "bar", xboard sends "REPTAG
1659 bar" to the engine.  The user can cancel the dialog and send nothing.
1660 </dd>
1661
1662 <dt>tellics MESSAGE</dt>
1663 <dd>In Zippy mode, xboard sends "MESSAGE\n" to ICS.  MESSAGE consists
1664 of any characters, including whitespace, to the end of the line.
1665 </dd>
1666
1667 <dt class="version1">tellicsnoalias MESSAGE</dt>
1668 <dd class="version1">
1669 In Zippy mode, xboard sends "xMESSAGE\n" to ICS, where "x" is a
1670 character that prevents the ICS from expanding command aliases, if
1671 xboard knows of such a character.  (On chessclub.com and chess.net,
1672 "/" is used; on freechess.org, "$" is used.)  MESSAGE consists of any
1673 characters, including whitespace, to the end of the line.
1674 </dd>
1675
1676 <dt class="version43"># COMMENT</dt>
1677 <dd class="version43">
1678 The engine can send any string of printable characters, terminated by a newline,
1679 for inclusion in the winboard.debug file, provided the line starts with a '#' character.
1680 If the engine has set feature debug=1,
1681 it is guaranteed that WinBoard (and any future version of it) will completely ignore
1682 these lines in any other respect.
1683 </dd>
1684 </dl>
1685
1686 <h2><a name="10">10. Thinking Output</a></h2>
1687
1688 <p>
1689 If the user asks your engine to "show thinking", xboard sends your
1690 engine the "post" command.  It sends "nopost" to turn thinking off.
1691 In post mode, your engine sends output lines to show the progress of
1692 its thinking.  The engine can send as many or few of these lines as it
1693 wants to, whenever it wants to.  Typically they would be sent when the
1694 PV (principal variation) changes or the depth changes.  The thinking
1695 output should be in the following format:
1696 </p>
1697
1698 <pre>ply score time nodes pv</pre>
1699
1700 <p>Where:</p>
1701 <table>
1702 <tr><td>ply</td><td>Integer giving current search depth.</td></tr>
1703 <tr><td>score</td><td>Integer giving current evaluation in centipawns.</td></tr>
1704 <tr><td>time</td><td>Current search time in centiseconds (ex:1028 = 10.28 seconds).</td></tr>
1705 <tr><td>nodes</td><td>Nodes searched.</td></tr>
1706 <tr><td>pv</td><td>Freeform text giving current "best" line.
1707 You can continue the pv onto another line if you start each
1708 continuation line with at least four space characters.</td></tr>
1709 </table>
1710
1711 <p>
1712 Example:
1713 </p>
1714
1715 <pre>  9 156 1084 48000 Nf3 Nc6 Nc3 Nf6</pre>
1716
1717 <p>
1718 Meaning:
1719 </p>
1720
1721 <pre>
1722 9 ply, score=1.56, time = 10.84 seconds, nodes=48000, PV = "Nf3 Nc6 Nc3 Nf6"
1723 </pre>
1724
1725 <p>
1726 Longer example from actual Crafty output:
1727 </p>
1728
1729 <pre>
1730   4    109      14   1435  1. e4 d5 2. Qf3 dxe4 3. Qxe4 Nc6
1731   4    116      23   2252  1. Nf3 Nc6 2. e4 e6
1732   4    116      27   2589  1. Nf3 Nc6 2. e4 e6
1733   5    141      44   4539  1. Nf3 Nc6 2. O-O e5 3. e4
1734   5    141      54   5568  1. Nf3 Nc6 2. O-O e5 3. e4
1735 </pre>
1736
1737 <p>
1738 You can use the PV to show other things; for instance, while in book,
1739 Crafty shows the observed frequency of different reply moves in its
1740 book.  In situations like this where your engine is not really
1741 searching, start the PV with a '(' character:
1742 </p>
1743
1744 <pre>
1745   0      0       0      0  (e4 64%, d4 24%)
1746 </pre>
1747
1748 <p>
1749 GNU Chess output is very slightly different.  The ply number is
1750 followed by an extra nonblank character, and the time is in seconds,
1751 not hundredths of seconds.  For compatibility, xboard accepts the
1752 extra character and takes it as a flag indicating the different time
1753 units.  Example:
1754 </p>
1755
1756 <pre>
1757  2.     14    0       38   d1d2  e8e7
1758  3+     78    0       65   d1d2  e8e7  d2d3
1759  3&amp;     14    0       89   d1d2  e8e7  d2d3
1760  3&amp;     76    0      191   d1e2  e8e7  e2e3
1761  3.     76    0      215   d1e2  e8e7  e2e3
1762  4&amp;     15    0      366   d1e2  e8e7  e2e3  e7e6
1763  4.     15    0      515   d1e2  e8e7  e2e3  e7e6
1764  5+     74    0      702   d1e2  f7f5  e2e3  e8e7  e3f4
1765  5&amp;     71    0     1085   d1e2  e8e7  e2e3  e7e6  e3f4
1766  5.     71    0     1669   d1e2  e8e7  e2e3  e7e6  e3f4
1767  6&amp;     48    0     3035   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4
1768  6.     48    0     3720   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4
1769  7&amp;     48    0     6381   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4
1770  7.     48    0    10056   d1e2  e8e7  e2e3  e7e6  e3e4  f7f5  e4d4
1771  8&amp;     66    1    20536   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5
1772  8.     66    1    24387   d1e2  e8e7  e2e3  e7e6  e3d4  g7g5  a2a4  f7f5
1773  9&amp;     62    2    38886   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4
1774                            d4e4
1775  9.     62    4    72578   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  a2a4  h5h4
1776                            d4e4
1777 10&amp;     34    7   135944   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4
1778                            d4e4  f7f5  e4f4
1779 10.     34    9   173474   d1e2  e8e7  e2e3  e7e6  e3d4  h7h5  c2c4  h5h4
1780                            d4e4  f7f5  e4f4
1781 </pre>
1782
1783 <p>If your engine is pondering (thinking on its opponent's time) in post
1784 mode, it can show its thinking then too.  In this case your engine may
1785 omit the hint move (the move it is assuming its opponent will make)
1786 from the thinking lines <em>if and only if</em> it sends xboard the move in
1787 the usual "Hint: xxx" format before sending the first line.
1788 </p>
1789
1790 <h2><a name="11">11. Time control</a></h2>
1791
1792 <p>
1793 xboard supports three styles of time control: conventional chess clocks,
1794 the ICS-style incremental clock, and an exact number of seconds per move.
1795 </p>
1796
1797 <p>In conventional clock mode, every time control period is the same.
1798 That is, if the time control is 40 moves in 5 minutes, then after each
1799 side has made 40 moves, they each get an additional 5 minutes, and so
1800 on, ad infinitum.  At some future time it would be nice to support a
1801 series of distinct time controls.  This is very low on my personal
1802 priority list, but code donations to the xboard project are accepted,
1803 so feel free to take a swing at it.  I suggest you talk to me first,
1804 though.
1805 </p>
1806
1807 <p>
1808 The command to set a conventional time control looks like this:
1809 </p>
1810
1811 <pre>
1812   level 40 5 0
1813   level 40 0:30 0
1814 </pre>
1815
1816 <p>
1817 The 40 means that there are 40 moves per time control.  The 5 means
1818 there are 5 minutes in the control.  In the second example, the 0:30
1819 means there are 30 seconds.  The final 0 means that we are in
1820 conventional clock mode.
1821 </p>
1822
1823 <p class="version43">
1824 Note that the time parameter in this command is not a pure numeric argument,
1825 but in general is a character string, in order to pass the number of seconds.
1826 Engines are encouraged to ignore any unexpected characters at the end of this string,
1827 i.e. following the MIN or MIN:SEC specification.
1828 Future protocol versions might (under control of an appropriate feature)
1829 append such extra characters to this argument,
1830 in order to inform the engine in advance of the time control it can expect after the current session completes.
1831 E.g. "level 40 25+5 0" could mean that the engine has to play 40 moves in 25 minutes,
1832 but should expect to get only 5 minutes for the entire remainder of the game after that,
1833 rather than another 25 minutes for the next 40 moves.
1834 When the time comes, (i.e. after the 40 moves),
1835 it will be informed of the time-control change by receiving a new "level 0 5 0" command,
1836 but engines with advanced time management might want to plan for this in advance.
1837 </p>
1838
1839 <p>
1840 The command to set an incremental time control looks like this:
1841 </p>
1842
1843 <pre>
1844   level 0 2 12
1845 </pre>
1846
1847 <p>
1848 Here the 0 means "play the whole game in this time control period",
1849 the 2 means "base=2 minutes", and the 12 means "inc=12 seconds".  As
1850 in conventional clock mode, the second argument to level can be in
1851 minutes and seconds.
1852 </p>
1853
1854 <p>
1855 At the start of the game, each player's clock is set to base minutes.
1856 Immediately after a player makes a move, inc seconds are added to his
1857 clock.  A player's clock counts down while it is his turn.  Your flag
1858 can be called whenever your clock is zero or negative.  (Your clock
1859 can go negative and then become positive again because of the
1860 increment.)
1861 </p>
1862
1863 <p class="version44">
1864 The number of moves given in the level command (when non-zero) should
1865 be taken as the number of moves still to do before the specified time
1866 will be added to the clock, if the "level" command is received after
1867 some moves have already been played.
1868 The time given should be interpreted as the time left on its clock
1869 (including any time left over from the previous sessions),
1870 and not necessarily the time that will be added to the clock
1871 after the specified number of moves has been played.
1872 This is only relevant in WinBoard 4.3.xx, which might send the engine
1873 "level" commands during a game,
1874 just before the engine has to start thinking about the first move of
1875 a new time-control session.
1876 Example: if at the start of the game "level 40 60 0" was given
1877 (40 moves per hour),
1878 and the engine receives "level 20 22 0" just before move 41,
1879 it should understand that it should do the next 20 moves in 22 minutes
1880 (pehaps because the secondary session was 20 moves per 15 minutes,
1881 and it had 7 minutes left on its clock after the first 40 moves).
1882 </p>
1883
1884 <p>
1885 A special rule on some ICS implementations: if you ask for a game with
1886 base=0, the clocks really start at 10 seconds instead of 0.  xboard
1887 itself does not know about this rule, so it passes the 0 on to the
1888 engine instead of changing it to 0:10.
1889 </p>
1890
1891 <p>
1892 ICS also has time odds games.  With time odds, each player has his own
1893 (base, inc) pair, but otherwise things work the same as in normal
1894 games.  The Zippy xboard accepts time odds games but ignores the fact
1895 that the opponent's parameters are different; this is perhaps not
1896 quite the right thing to do, but gnuchess doesn't understand time
1897 odds.  Time odds games are always unrated.
1898 </p>
1899
1900 <p>
1901 The command to set an exact number of seconds per move looks like this:
1902 </p>
1903
1904 <pre>
1905   st 30
1906 </pre>
1907
1908 <p>
1909 This means that each move must be made in at most 30 seconds.  Time not used
1910 on one move does not accumulate for use on later moves.
1911 </p>
1912
1913 <h2><a name="12">12. Analyze Mode</a></h2>
1914
1915 <p>xboard supports analyzing fresh games, edited positions, and games
1916 from files.  However, all of these look the same from the chess
1917 engine's perspective. Basically, the engine just has to respond to the
1918 "analyze" command.
1919 <span class="version1">
1920 Beginning in protocol version 2,
1921 if your engine does not support analyze mode, it should use
1922 the feature command to set analyze=0.
1923 </span>
1924 The older method of
1925 printing the error message "Error (unknown command): analyze" in
1926 response to the "analyze" command will also work, however.
1927 </p>
1928
1929 <p>
1930 To enter analyze mode, xboard sends the command sequence "post", "analyze".
1931 Analyze mode in your engine should be
1932 similar to force mode, except that your engine thinks about what move
1933 it would make next if it were on move.  Your engine should accept the
1934 following commands while in analyze mode:
1935 </p>
1936
1937 <ul>
1938 <li>Any legal move, as in force mode</li>
1939 <li><strong>undo</strong>&nbsp;&nbsp; Back up one move and analyze previous position.</li>
1940 <li><strong>new</strong>&nbsp;&nbsp; Reset position to start of game but stay in analyze mode.</li>
1941 <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>
1942 <li><strong>exit</strong>&nbsp;&nbsp; Leave analyze mode.</li>
1943 <li><strong>.</strong>&nbsp;&nbsp; Send a search status update (optional); see below.</li>
1944 <li><span class="version1">
1945 <strong>bk</strong>&nbsp;&nbsp; Show book moves from this position,
1946 if any; see above.</span></li>
1947 <li><span class="version1">
1948 <strong>hint</strong>&nbsp;&nbsp; Show the predicted move from this
1949 position, if any; see above.</span></li>
1950 </ul>
1951
1952 <p>
1953 If the user selects "Periodic Updates", xboard will send the string
1954 ".\n" to the chess engine periodically during analyze mode, unless the
1955 last PV received began with a '(' character.
1956 </p>
1957
1958 <p>
1959 The chess engine should respond to ".\n" with a line like this:
1960 </p>
1961
1962 <pre>
1963 stat01: time nodes ply mvleft mvtot <span class="version1">mvname</span>
1964 </pre>
1965
1966 <p>Where:</p>
1967 <table>
1968 <tr><td>time</td><td>Elapsed search time in centiseconds (ie: 567 = 5.67 seconds).</td></tr>
1969 <tr><td>nodes</td><td>Nodes searched so far.</td></tr>
1970 <tr><td>ply</td><td>Search depth so far.</td></tr>
1971 <tr><td>mvleft</td><td>Number of moves left to consider at this depth.</td></tr>
1972 <tr><td>mvtot</td><td>Total number of moves to consider.</td></tr>
1973 <tr class="version1"><td>mvname</td><td>Move currently being considered (SAN or coordinate notation).  Optional;
1974 added in protocol version 2.</td></tr>
1975 </table>
1976
1977 <p>
1978 Examples:
1979 </p>
1980 <pre>
1981   stat01: 1234 30000 7 5 30
1982   stat01: 1234 30000 7 5 30 Nf3
1983 </pre>
1984
1985 <p>
1986 Meaning:
1987 </p>
1988
1989 <p>After 12.34 seconds, I've searched 7 ply/30000 nodes, there are a
1990   total of 30 legal moves, and I have 5 more moves to search
1991   before going to depth 8.  In the second example, of the 30 legal
1992   moves, the one I am currently searching is Nf3.</p>
1993
1994 <p>
1995 Implementation of the "." command is optional. If the engine does not
1996 respond to the "." command with a "stat01..." line, xboard will stop
1997 sending "."  commands.  If the engine does not implement this command,
1998 the analysis window will use a shortened format to display the engine
1999 info.
2000 </p>
2001
2002 <p>
2003 To give the user some extra information, the chess engine can output
2004 the strings "++\n" and "--\n", to indicate that the current search is
2005 failing high or low, respectively.  You don't have to send anything
2006 else to say "Okay, I'm not failing high/low anymore."  xboard will
2007 figure this out itself.
2008 </p>
2009
2010 <h2><a name="13">13. Idioms and backward compatibility features</a></h2>
2011
2012 <p>
2013 Some engines have variant interpretations of the force/go/white/black,
2014 time/otim, and hard/easy command sets.
2015 In order to accommodate these older engines, xboard uses these commands
2016 only according to the stylized patterns ("idioms") given in this section.
2017 The obsolete white and black commands
2018 have historically been particularly troublesome, and it is recommended
2019 that new engines set the feature colors=0 and/or ignore the commands.
2020 </p>
2021
2022 <dl>
2023
2024 <dt>time N</dt>
2025 <dt>otim N</dt>
2026 <dt>MOVE</dt>
2027 <dd>Sent when the opponent makes a move and the engine is already
2028 playing the opposite color.
2029 </dd>
2030 <dt>white</dt>
2031 <dt>go</dt>
2032 <dd>Sent when the engine is in force mode or playing Black but should
2033 switch to playing White.  This sequence is sent only when White is
2034 already on move.
2035 <span class="version1">
2036 If you set the feature colors=0, "white" is not sent.
2037 </span>
2038 </dd>
2039
2040 <dt>black</dt>
2041 <dt>go</dt>
2042 <dd>Sent when the engine is in force mode or playing White but should
2043 switch to playing Black.  This sequence is sent only when Black is
2044 already on move.
2045 <span class="version1">
2046 If you set the feature colors=0, "black" is not sent.
2047 </span>
2048 </dd>
2049
2050 <dt>white</dt>
2051 <dt>time N</dt>
2052 <dt>otim N</dt>
2053 <dt>black</dt>
2054 <dt>go</dt>
2055 <dd>Sent when Black is on move, the engine is in force mode or playing
2056 White, and the engine's clock needs to be updated before it starts
2057 playing.
2058 The initial "white" is a kludge to accommodate GNU Chess
2059 4's variant interpretation of these commands.
2060 <span class="version1">
2061 If you set the feature colors=0, "white" and "black" are not sent.
2062 </span>
2063 </dd>
2064
2065 <dt>black</dt>
2066 <dt>time N</dt>
2067 <dt>otim N</dt>
2068 <dt>white</dt>
2069 <dt>go</dt>
2070 <dd>Sent when White is on move, the engine is in force mode or playing
2071 Black, and the engine's clock needs to be updated before it starts
2072 playing.  See previous idiom.
2073 The initial "black" is a kludge to accommodate GNU Chess
2074 4's variant interpretation of these commands.
2075 <span class="version1">
2076 If you set the feature colors=0, "black" and "white" are not sent.
2077 </span>
2078 </dd>
2079
2080 <dt>hard</dt>
2081 <dt>easy</dt>
2082 <dd>Sent in sequence to turn off pondering if xboard is not sure
2083 whether it is on.  When xboard is sure, it will send "hard" or "easy"
2084 alone.  xboard does this because "easy" is a toggle in GNU Chess 4 but
2085 "hard" is an absolute on.
2086 </dd>
2087 </dl>
2088
2089 <p>
2090 To support older engines, certain additional commands from the engine
2091 to xboard are also recognized.  (These are commands by themselves, not
2092 values to be placed in the comment field of the PGN result code.)
2093 These forms are not recommended for new engines; use the PGN result
2094 code commands or the resign command instead.
2095 </p>
2096
2097 <table>
2098 <tr><th>Command</th>              <th>Interpreted as</th></tr>
2099 <tr><td>White resigns        </td><td>0-1 {White resigns}</td></tr>
2100 <tr><td>Black resigns        </td><td>1-0 {Black resigns}</td></tr>
2101 <tr><td>White                </td><td>1-0 {White mates}</td></tr>
2102 <tr><td>Black                </td><td>0-1 {Black mates}</td></tr>
2103 <tr><td>Draw                 </td><td>1/2-1/2 {Draw}</td></tr>
2104 <tr><td>computer mates       </td><td>1-0 {White mates} or 0-1 {Black mates}</td></tr>
2105 <tr><td>opponent mates       </td><td>1-0 {White mates} or 0-1 {Black mates}</td></tr>
2106 <tr><td>computer resigns     </td><td>0-1 {White resigns} or 1-0 {Black resigns}</td></tr>
2107 <tr><td>game is a draw       </td><td>1/2-1/2 {Draw}</td></tr>
2108 <tr><td>checkmate            </td><td>1-0 {White mates} or 0-1 {Black mates}</td></tr>
2109 </table>
2110
2111 <p>
2112 Commands in the above table are recognized if they begin a line and
2113 arbitrary characters follow, so (for example) "White mates" will be
2114 recognized as "White", and "game is a draw by the 50 move rule" will
2115 be recognized as "game is a draw".  All the commands are
2116 case-sensitive.
2117 </p>
2118
2119 <p>
2120 An alternative move syntax is also recognized:
2121 </p>
2122
2123 <table>
2124 <tr><th>Command              </th><th>Interpreted as</th></tr>
2125 <tr><td>NUMBER ... MOVE      </td><td>move MOVE</td></tr>
2126 </table>
2127
2128 <p>
2129 Here NUMBER means any string of decimal digits, optionally ending in a
2130 period.  MOVE is any string containing no whitespace.  In this command
2131 format, xboard requires the "..." even if your engine is playing
2132 White.  A command of the form NUMBER MOVE will be ignored.  This odd
2133 treatment of the commands is needed for compatibility with gnuchessx.
2134 The original reasons for it are lost in the mists of time, but I
2135 suspect it was originally a bug in the earliest versions of xboard,
2136 before I started working on it, which someone "fixed" in the wrong
2137 way, by creating a special version of gnuchess (gnuchessx) instead of
2138 changing xboard.
2139 </p>
2140
2141 <p>
2142 Any line that contains the words "offer" and "draw" is recognized as
2143 "offer draw".
2144 </p>
2145
2146 <p>
2147 The "Illegal move" message is recognized even if spelled "illegal
2148 move" and even if the colon (":") is omitted.  This accommodates GNU
2149 Chess 4, which prints messages like "Illegal move (no matching
2150 move)e2e4", and old versions of Crafty, which print just "illegal move".
2151 </p>
2152
2153 <p>
2154 In Zippy mode, for compatibility with older versions of Crafty,
2155 xboard passes through to ICS any line that begins "kibitz", "whisper",
2156 "tell", or "draw".  Do not use this feature in new code.  Instead, use the
2157 commands "tellall", "tellothers", "tellopponent", "tellics" (if needed),
2158 "1/2-1/2 {COMMENT}", or "offer draw", as appropriate.
2159 </p>
2160
2161 <p class="version1">
2162 If the engine responds to the "sd DEPTH" command with an error message
2163 indicating the command is not supported (such as "Illegal move: sd"),
2164 xboard sets an internal flag and subsequently uses the command
2165 "depth\nDEPTH" instead, for the benefit of GNU Chess 4.  Note the
2166 newline in the middle of this command!  New engines should not rely on
2167 this feature.
2168 </p>
2169
2170 <p class="version1">
2171 If the engine responds to the "st TIME" command with an error message
2172 indicating the command is not supported (such as "Illegal move: st"),
2173 xboard sets an internal flag and subsequently uses the command "level
2174 1 TIME" instead, for the benefit of GNU Chess 4.  Note that this is
2175 not a standard use of the level command, as TIME seconds are not added
2176 after each player makes 1 move; rather, each move is made in at most
2177 TIME seconds.  New engines should not implement or rely on this
2178 feature.
2179 </p>
2180
2181 <div class="version1">
2182 <p>
2183 In support of the -firstHost/-secondHost features, which allow a chess
2184 engine to be run on another machine using the rsh protocol, xboard recognizes
2185 error messages that are likely to come from rsh as fatal errors.  The following
2186 messages are currently recognized:
2187 </p>
2188
2189 <ul>
2190 <li>unknown host</li>
2191 <li>No remote directory</li>
2192 <li>not found</li>
2193 <li>No such file</li>
2194 <li>can't alloc</li>
2195 <li>Permission denied</li>
2196 </ul>
2197 </div>
2198
2199 <p class="version1">
2200 ChessBase/Fritz now implements the xboard/winboard protocol and can use
2201 WinBoard-compatible engines in its GUI.  ChessBase's version of the
2202 protocol is generally the same as version 1, except that they have
2203 added the commands <strong>fritz</strong>, <strong>reset</strong>, and
2204 <strong>ponder</strong>, and the edit subcommands
2205 <strong>castle</strong> and <strong>ep</strong>.  If you want your
2206 engine to work well with the ChessBase/Fritz GUI, you may need to
2207 implement these additional commands, and you should also be aware of
2208 the peculiar way that ChessBase uses the protocol.  See their <a
2209 href="http://www.chessbase.com/Products/engines/winboard/tech.htm"
2210 >web page</a> for documentation.
2211 </p>
2212
2213 <p class="version1">
2214 ChessMaster 8000 also implements version 1 of the xboard/winboard
2215 protocol and can use WinBoard-compatible engines.  The original
2216 release of CM8000 also has one additional restriction: only pure
2217 coordinate notation (e.g., e2e4) is accepted in the move command.  A
2218 patch to correct this should be available from The Learning Company
2219 (makers of CM8000) in February 2001.
2220 </p>
2221 </div><!-- for id="content", starts in the include above -->
2222 <!--#include virtual="/server/footer.html" -->
2223 <div id="footer">
2224
2225 <p>Please send general FSF &amp; GNU inquiries to
2226 <a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.
2227 There are also <a href="/contact/">other ways to contact</a>
2228 the FSF.<br />
2229 Please send broken links and other corrections or suggestions to
2230 <a href="mailto:bug-xboard@gnu.org">&lt;bug-xboard@gnu.org&gt;</a>.</p>
2231
2232 <p>Please see the <a
2233 href="/server/standards/README.translations.html">Translations
2234 README</a> for information on coordinating and submitting translations
2235 of this article.</p>
2236
2237 <p>Copyright &copy; 2009, 2010, 2011, 2012 Free Software Foundation, Inc.</p>
2238
2239 <p>This page is licensed under a <a rel="license"
2240 href="http://creativecommons.org/licenses/by-nd/3.0/us/">Creative
2241 Commons Attribution-NoDerivs 3.0 United States License</a>.</p>
2242
2243 <p>Updated:
2244 <!-- timestamp start -->
2245 $Date: 2012/01/11 04:39:57 $
2246 <!-- timestamp end -->
2247 </p>
2248 </div>
2249 </div>
2250 </body>
2251 </html>