H.G.Muller [Fri, 23 Dec 2016 15:17:58 +0000]
Fix -var option with UCI_Chess960
The variant specified in the -var option would be overruled by the
"normal,fischerandom" emitted later under the influence of a UCI_Chess960
option. This is now solved by always sending the variants feature on 'uciok'.
The varList is now initialized to the -var string, and overwritten by the
protocol defaults before sending 'uci' only when it is still empty.
A UCI_Variants option then gets the chance to overwrite this, while
a UCI_Chess960 option will append "normal,fischeradom" to the list.
H.G.Muller [Mon, 5 Dec 2016 18:47:05 +0000]
Make sure we resign when engine reports we are checkmated
When a UCI engine is set thinking in a checkmated position, the PV
necessarily is empty, and instead of printing an empty 'pv' field in
as pv info, it might omit it alltogether. So we even accept a 'mate 0'
score when there is no PV, so that a following 'bestmove 0000' will
be interpreted as a loss (sending 'resign'), rather than a draw
(sending 1/2-1/2).
H.G.Muller [Mon, 5 Dec 2016 08:29:13 +0000]
Display error message when engine dies
UCI2WB used to exit silently when reading from the engine produced an EOF
response (indicating the engine process died). This then evoked the standard
XBoard fatal error "... engine exited uexpectedly". Now it sends a
'tellusererror' command to the GUI to suppress the standard popup, and
to clearly indicate that it was because of a crash in the engine rather
than in the adapter.
H.G.Muller [Sat, 3 Dec 2016 10:42:41 +0000]
Improve efficiency
The commands usermove, time and otim are now matched first, because
these are the commands used during game play, when response time and
CPU usage are relevant concerns.
H.G.Muller [Thu, 1 Dec 2016 20:17:11 +0000]
Buffer 'setoption' commands until engine done thinking
UCI does not allow setting of options during search after all. So all
'setoption' commands are now first collected in a memory buffer. During
ponder or analysis the search is then stopped immediately to flush that
buffer to the engine, in a new routine Release(). This routine will
also (re)start a ponder search if one is called for. During thinking,
finishing the search has priority. So only Release() the buffer contents
when a search finishes (immediately after receiving 'bestmove').
To deal with race conditions we also flush the buffer in the GUI thread,
after waiting for thinking to finish, just in case.
The WB 'easy' and 'hard' command implicitly set the Ponder option,
and this is treated by the hack of injecting fake 'option' commands in the
input stream, which then are subjected to the same buffering scheme.
Because waiting for thinking termination might now not happen at all
(if we only receive commands that can be handled instantly), a test for
search termination was added immediately after reading the command,
so that every command can now be aware whether thinking is in progress.
H.G.Muller [Thu, 1 Dec 2016 13:53:48 +0000]
Fix instant commands during think after ponder hit
The new method of suspending command processing only after peeking at
the next command to see if it should terminate the search was not
yet working after a ponder hit turned a ponder search into thinking.
H.G.Muller [Thu, 1 Dec 2016 13:41:05 +0000]
Process all innocent commands immediately (fixes pause/resume)
To prevent that commands received during thinking will halt command
processing,eclipsing later instant commands, all commands that merely
alter a settings value in adapter or engine are now immediately executed.
UCI engines should be able to handle 'setoption' commands even during
thinking, so explicit or implicit (easy/hard) settings changes are
immediately relayed to the engine as well.
The 'pause' and 'resume' commands are now also treated immediately;
waiting with that until the engine is done thinking subverted the
intention of the 'pause' command.
Commands that would never be sent when an engine is thinking are still
left with the commands that require thinking to complete, as for those
thisdoes not matter.
H.G.Muller [Wed, 30 Nov 2016 13:17:55 +0000]
Also treat 'result' command immediately
WinBoard has the nasty habit of sending a 'result' command just before
'quit' when it is closed while the engine is thinking, without putting
the engine in force mode first. So this command has to abort thinking too.
To prevent this will start a ponder search, 'result' now puts us in
force mode.
H.G.Muller [Wed, 30 Nov 2016 11:09:00 +0000]
Implement UCI_AnalyseMode option
An engine option of the form "??I_AnalyseMode" is now assumed to be the
standard check option UCI_... or USI_... (OK, that is a bit flaky).
It will not be reported as option feature, and will be automatically set
during analysis.
H.G.Muller [Wed, 30 Nov 2016 08:22:55 +0000]
Treat EOF same as quit command
A EOF during reading from the GUI caused UCI2WB to exit through a different
path as a 'quit' command. Now the EOF detection just fakes a 'quit -1'
command was received, and then processes that as usual. This means it
also causes proper termination of the engine when it occurs during thinking
(sending 'stop'). The '-1' appendage to the command allows the 'quit'
handling to return an error code.
H.G.Muller [Wed, 30 Nov 2016 08:02:50 +0000]
Treat 'quit', 'force' and '?' commands immediately
The blocking of input during thinking made it also insensitive to 'quit'.
This would cause hanging engine processes when the GUI was closed and would
kill the adapter because it did not respond to 'quit' in time. The Sync()
call that waits for the engine's 'bestmove' is now deferred until after
reading input (executed conditionally through a 'think' flag, so that
it only happens during thinking), so that we can peek at the first command
that arrives during thinking. If it is one of the 'immediate' commands
(?, quit or force), a 'stop' command is sent to the engine before we
start waiting for the 'bestmove', which then never should take long.
Draw offers could potentially arrive during thinking as well, interefering
with this mechanism by eclipsing a following ?/quit/force. As these would
just set the drawOffer flag for processing during the next move, these
are now fully processed immediately.
H.G.Muller [Thu, 10 Nov 2016 10:38:08 +0000]
Print everything sent to engine in debug mode
Now the macro EPRINT makes this easy we make sure that everything sent to
the engine is also reported in a comment to the GUI, when the debug
option is on.
H.G.Muller [Thu, 10 Nov 2016 10:13:19 +0000]
Simplify debug printing
The duplicats of each print statement to the engine to (optionally) print
debug information are now generated automatically by a single macro EPRINT.
H.G.Muller [Thu, 10 Nov 2016 09:55:41 +0000]
Print newline after 'position moves' instead of before 'go'
The '\n' between position-moves and go was printed with the latter
to avoid a separate printf for it after the move list, but this obfuscated
the code, and was a show stopper for more elegant printing of debug info.
H.G.Muller [Thu, 10 Nov 2016 09:12:11 +0000]
Fix commands during analysis (MultiPV option!)
UCI2WB could not handle spurious commands while analyzing: these would
start a new search without first terminating the old one. Only the commands
allowed in analysis mode (exit, usermove, and in/exclude) were handled
correctly. Unfortunately XBoard sometimes sends spurious 'accepted' commands
during analysis, in violation of the CECP specs. All such non-compliant
commands are now ignored. And the 'option' command will also abort an
ongoing analysis search, to allow altering the MultiPV setting during
analysis. (Something XBoard also does.)
H.G.Muller [Thu, 10 Nov 2016 08:55:40 +0000]
Suppress 'setup' command for some standard variants
Receiving an 'info string variant' from the engine now not automatically
leads to emission of a 'setup' command to the GUI. Because currently such
a setup command contains defaults for info not supplied in the 'info'
command, such as holdings size and pieceToChar, we suppress this in some
standard variants where this would be harmful (such as crazyhouse).
Such that the GUI does not get wrongly configured when playing these
variants with legality testing off. Before, the setup command was
only suppressed in variant normal.
H.G.Muller [Tue, 8 Nov 2016 21:29:32 +0000]
Bump version to 2.3
H.G.Muller [Tue, 8 Nov 2016 21:27:45 +0000]
Define strcasestr for Windows
The MinGW compiler apparently does not have this function.
H.G.Muller [Tue, 8 Nov 2016 21:01:16 +0000]
Update README file (changelog) and man page
H.G.Muller [Sun, 6 Nov 2016 13:29:08 +0000]
Implement CECP 'setup' command
On reception of an "info string variant NAME startpos FEN" from the engine
UCI2WB will now send "setup (-) 8x8+0_fairy FEN" to the GUI, to make
engine-defined variants also work with UCI engines. Correct operation
required sending of an 'isready' command to the engine after setting
the UCI_Variant option (which evokes the 'info string' response),
and stalling processing of GUI commands until the 'readyok' response,
to prevent early processing of a following 'ping' before the engine
got time to submit the reply. This way the 'info string' response
can be optional. When variant ="chess" the 'info string' is ignored,
as such a setting of UCI_Variant only occurs in response to 'new',
and never to 'variant'.
H.G.Muller [Sun, 6 Nov 2016 11:29:42 +0000]
Configure XBoard to use UCI2WB as uxiAdapter in make-install
The install target of the Makefile now invokes XBoard to set its
-uxiAdapter option for the current user to a value suitable for
usig UCI2WB.
H.G.Muller [Sun, 6 Nov 2016 11:15:31 +0000]
Implement CECP 'computer' command
Remember if the 'computer' command was received from the GUI, and use
this info when setting the UCI_Opponent option to distinguish 'human'
and 'computer' as first word, instead of the uniformative 'none'.
The implemntation assumes 'computer' would be sent before 'name', which
XBoard does (but the CECP specs do not guarantee).
H.G.Muller [Sun, 6 Nov 2016 10:54:30 +0000]
Support UCI_Opponent option
The UCI_Opponent option is now recognized, and its option feature is
suppressed. Instead its presence is remembered, and will lead to its
setting on reception of a CECP 'name' command. The feature name=1
is emitted at startuptosolicitsuch a command.
H.G.Muller [Sat, 5 Nov 2016 12:54:10 +0000]
Do not transform FEN when UCI_Variant option is supported
For USI FENs have to be translated to SFEN by putting the holdings
after the side-to-move indicator. This was done for any FEN that specified
holdings (probably to accomodate the Seirawan Chess version of Komodo).
But in Crazyhouse for Stockfish this wrecks things. The announcement
of a UCI_Variant option now suppresses this transformation.
H.G.Muller [Sat, 5 Nov 2016 12:45:51 +0000]
Implement UCI_Variant option
A UCI combo option UCI_Variant is now recognized as special, and translated
to 'feature variant=...' rather than 'feature option="UCI_Variant ..."'.
The CECP 'variant' command now leads to setting of this option, while on
the 'new' command the option is reset to 'chess'.
The variant names are transmitted as given, except for 'chess',
which is traslated to 'normal', and 'threecheck' (CECP: 3check).
H.G.Muller [Wed, 21 Sep 2016 21:41:52 +0000]
Bump version to 2.2
H.G.Muller [Wed, 21 Sep 2016 21:41:19 +0000]
Update README file
H.G.Muller [Wed, 21 Sep 2016 21:20:02 +0000]
Add description of -var option to man page
H.G.Muller [Wed, 21 Sep 2016 21:03:39 +0000]
Update man page
The manual page is updated with
- mentioning of the Arena960 dialect and -f flag to trigger it
- discussion of byoyomi TC, and the options to force it
- replacing the defunct USI specs URL by a valid one on my own website
H.G.Muller [Wed, 21 Sep 2016 13:05:13 +0000]
Subtract byoyomi from wtime and btime
USI engines think byoyomi comes in addition to their time on the clock,
so the time passed from the GUI in CECP must be decreased by the byoyomi
to let the engine know how close it is to forfeit.
H.G.Muller [Wed, 21 Sep 2016 12:42:20 +0000]
Send game result to USI engines
The USI 'gameover' command is now used as translation of the CECP
'result' command, to relay the result to the engine. To decide how
the absolute game result (white/black) is translated to a relative one
(win/lose), the side last moved for is used as indication, and remembered
whenever the engine is set thinking on a move (as it could already be
switched to force mode at the time the 'result' command is received).
H.G.Muller [Wed, 21 Sep 2016 12:26:07 +0000]
Handle USI win claims
USI engines can emit 'bestmove win' to claim a win, e.g. because
of the point count in an impasse situation. This is traslated to
a CECP result claim in favor of the side to move, with REASON "claim".
H.G.Muller [Wed, 21 Sep 2016 12:22:36 +0000]
Split byoyomi options over lines
H.G.Muller [Wed, 7 Sep 2016 18:56:54 +0000]
Bump version to 2.1
H.G.Muller [Wed, 7 Sep 2016 18:44:25 +0000]
Add option Byoyomi
In USI (-s) mode, UCI2WB now announces an option Byoyomi, which can
be used to define a hard byoyomi when the the option Floating Byoyomi
is off. Setting it to N is equivalent to a third argument " byoyomi N".
With N < 0 the option is switched off.
H.G.Muller [Mon, 5 Sep 2016 19:48:22 +0000]
Add option 'Floating Byoyomi'
In USI (-s) mode an option 'Floating Byoyomi' will be announced, which
will force the 'suffix' to the 'go' command to specify a byoyomi equal
to a reasonable time to think (timeLeft/40 + inc). This can be used as
a work-around to let engines that ignore the time left and always think
they are playing in byoyomi (a common misery in USI engines) work reasonably
well under incrementalor sudden-death TC. This then removes the need to
specify the suffix on the UCI2WB command line.
H.G.Muller [Wed, 7 Sep 2016 18:52:48 +0000]
Make suffix an array
The suffix to the 'go' command is now declared as array rather than
pointer, so that it can be easily printed in. (Before it could be made
to point to argv[3] if needed, and be NULL otherwise, but we want to
add some options that would create a suffix dynamically.)
H.G.Muller [Mon, 5 Sep 2016 19:33:03 +0000]
Put LDFLAGS at end of compile command
Pointed out by Logan Rosen.
H.G.Muller [Tue, 14 Jun 2016 09:07:29 +0000]
Supply time and node count for engines that do not give it
By default thinking time and nodecount were set to 0, but this made
XBoard interpret Thinking Output with score 0 as an info string, which
was undesirable. So the node count is now 1 by default, while the time
could be measured by UCI2WB itself (as it was already recoding startTime
of all searches).
H.G.Muller [Sat, 21 May 2016 16:38:58 +0000]
Join name and version when in separate 'id' commands
If an engine issues an "id version" command when an "id name" was already
received, a new 'myname' feature is emitted that contains both name and
version number. This is supposed to overrule the bare name in the myname
feature emitted because of the "id name" command.
H.G.Muller [Tue, 12 Apr 2016 18:38:24 +0000]
Set suspected non-standard Chess960 check options
Any check-type option containing the substring "960" or "frc" in their
name will be set automatically when UCI2WB is run with the -f option.
They will also be reported to the GUI, but always as having default
setting 'true', no matter what their original default setting was,
to reflect the new reality. So the potential damage this heuristic can
do is limited to altereing the default.
H.G.Muller [Mon, 4 Apr 2016 15:46:34 +0000]
Fix setting hash-table size in UCCI
The keyword 'name' in "setoption name Hash ..." was hard-coded, but in
UCCI it needs to be left out. So the variable nameWord is now used instead.
H.G.Muller [Mon, 4 Apr 2016 11:32:06 +0000]
Support Chess960
AIf an engine annunces an option UCI_Chess960 UCI2WB will report to
the GUI it supports variant fischerandom. In addition it will request
the GUI to encode castling moves as KxR through feature oocastle=0.
A flag argument -f will make UCI2WB support FRC even when the engine
does not have the option. In that case the GUI is set to deliver castling
moves as O-O[-O] (feature oocastle=1), and any castling field in a
received FEN will be overwritten with KQkq. (This is the obsolete
'Arena standard' for FRC.)
H.G.Muller [Wed, 7 Jan 2015 16:50:20 +0000]
Fix blocking of input in ponder games
The blocking of input during thinking did break pondering, as a ponder
miss also used pause = 2 to schedule ignoring of the 'bestmove' reply
to 'stop'. This now uses pause = 1 again, while after a ponder hit the
input thread is blocked after turning pause into 2, indicating the
'bestmove' is for real.
H.G.Muller [Tue, 23 Dec 2014 21:13:50 +0000]
Send ucinewgame after isready/readyok handshake
H.G.Muller [Tue, 23 Dec 2014 20:32:36 +0000]
Block processing of CECP commands during thinking
The GUI thread is blocked during thinking until a move is printed,
so that ping can be instantly replied to when it is processed,
without any need for isready/readyok.
H.G.Muller [Fri, 21 Nov 2014 08:06:38 +0000]
Specify license and include GPL text
H.G.Muller [Thu, 30 Oct 2014 14:52:29 +0000]
Also use new start FEN in UCCI after Pawn push
Irreversible (= forward) Pawn moves now also are recognized as
irreversible moves, next to captures.
H.G.Muller [Thu, 30 Oct 2014 14:16:49 +0000]
Pack Windows icon with distro tar ball
H.G.Muller [Thu, 30 Oct 2014 11:46:51 +0000]
Add Linux Makefile
H.G.Muller [Thu, 30 Oct 2014 11:46:19 +0000]
Add Linux manual page
H.G.Muller [Thu, 30 Oct 2014 09:13:18 +0000]
Print feature sigint=0 sigterm=0
Better to not even let XBoard send the signals we are going to ignore,
as this would just waste system resources.
H.G.Muller [Wed, 29 Oct 2014 21:46:59 +0000]
Don't forget to quit engine when GUI dies unexpectedly
When we get an EOF signal from the GUI pipe, meaning that the GUI
died without sending a 'quit' command, we'd better shutdown the engine
before exiting ourself.
H.G.Muller [Wed, 29 Oct 2014 21:43:46 +0000]
Make UCI2WB resistent to SIGTERM in Linux
UCI2WB was already resistant to SIGINT, which XBoard sends with every
usermove, but must also ignore the SIGTERM that is sent with the quit
command in order to reliably relay this quit to the engine.
H.G.Muller [Tue, 28 Oct 2014 20:02:56 +0000]
Bump version to 2.0
H.G.Muller [Tue, 28 Oct 2014 19:45:23 +0000]
Work-around for move during ponder
When engines, in violation of UCI specs, moved during ponder without
waiting for 'stop' or 'ponderhit', UCI2WB would pass their move out
of turn to the GUI, and hang when the opponent would move, waiting
for an engine move that had already come. We now ignore such a
premature ending of the ponder search, like no ponder search was
made at all. And we give an error message in the engine output.
H.G.Muller [Tue, 28 Oct 2014 11:57:14 +0000]
Fix UCCI draw offers
The offer must not be sent with the 'go ponder' command, but with 'ponderhit'.
H.G.Muller [Tue, 28 Oct 2014 08:22:20 +0000]
Update README file
H.G.Muller [Tue, 28 Oct 2014 08:08:54 +0000]
Suppress isready for first ping
The first ping sent by the XBoard should not probe the engine with
the isready/readyok dialog, but be answered with 'pong' immediately,
as the 'uciok' already issued an 'isready'.
H.G.Muller [Tue, 28 Oct 2014 07:44:34 +0000]
Remove possible deadlock
Add some flush() calls to make sure we are not waiting for a
response to something we still have buffered.
H.G.Muller [Mon, 27 Oct 2014 23:21:20 +0000]
Implement UCCI draw offers
The XBoard "offer draw" command is recognized, and leads to sending of
a 'draw' keyword with the 'go'. The other way a 'draw' in 'bestmove'
will lead to sending of an "offer draw" command.
H.G.Muller [Mon, 27 Oct 2014 23:12:50 +0000]
Implement the UCCI usemillisec option
This option is set (and msec are used) when the engine announced it
with default value 'false'.
H.G.Muller [Mon, 27 Oct 2014 23:09:52 +0000]
Implement UCCI newgame option
In UCCI 'newgame' is an engine-defined option, which should only be sent
when the engine has announced it.
H.G.Muller [Mon, 27 Oct 2014 22:59:02 +0000]
Implement UCCI
The main framework of UCCI now works, and is activated by the option -x :
We send 'ucci' and expect 'ucciok', the alternative keywords for timing
are used (time and opptime, increment and oppincrement), and 'name'
and 'value' are suppressed when setting options. 'name' is also not
mandatory anymore in the received 'option' commands. The position-moves
command starts with the FEN for after the latest capture, and now
has the 'position' keyword that was missing in Cyclone UCI.
H.G.Muller [Mon, 27 Oct 2014 22:43:11 +0000]
Print UCI keywords from variable, so they can be easily changed
The keyword wtime, btime, winc, binc, name, and value are all defined
as variable, to facilitate implementing UCCI, which uses different
words for these.
H.G.Muller [Mon, 27 Oct 2014 22:35:31 +0000]
Compactify timing code by figuring out who is black first
A new variable 'black' is set when the engine plays black, to know
if the XBoard 'time' setting should be transmitted as 'wtim' or 'btim'.
H.G.Muller [Mon, 27 Oct 2014 22:32:11 +0000]
Print 'ponder' always immediately behind 'go'
Some engines do not like it if you print it otherwise.
H.G.Muller [Mon, 27 Oct 2014 22:23:00 +0000]
Add infrastructure for keeping track of board position
A Xiangqi board is added, with code to set it up from a FEN, convert it
to the board part of a FEN, and apply the moves from the move list to it,
keeping track of what was the last capture. The FEN for setting it up
is always taken from the "fen <FEN>" position command ('iniPos') of the
Cyclone dialect used in variant xiangqi.
H.G.Muller [Mon, 27 Oct 2014 22:07:39 +0000]
Create infrastructure for accounting time in other units
A variable 'unit', initialized to 1, indicates how many msec a unit is.
H.G.Muller [Mon, 27 Oct 2014 22:46:39 +0000]
Fix extracting side-to-move from setboard command
When white was to move, the stm was just keeping its previous value,
which could very well have been BLACK.
H.G. Muller [Thu, 20 Dec 2012 14:00:57 +0000]
Connect WB cores command to UCI option Threads
H.G. Muller [Sun, 16 Dec 2012 08:42:12 +0000]
Implement Ponder option
UCI2WB now makes the possibility to ponder subject to the engine reporting
the Ponder option, and sets this option according to the WB ponder state.
H.G. Muller [Wed, 12 Dec 2012 16:52:21 +0000]
Allow faking of options the engine fails to announce
A file DefectiveEngineOptions.ini will be read as if it is engine output
before any real engine output. This can be used to fake UCI 'option' commands
that the engine fails to announce, so that they will appear in the GUI's
Engine Settings dialog, and can be changed by user or GUI.
H.G. Muller [Sun, 9 Dec 2012 17:50:41 +0000]
Fix pause in ponder-off games
H.G. Muller [Wed, 5 Dec 2012 15:57:19 +0000]
Fix ponder start
There was an inconsistency in starting ponder searches, because they occur
with the opposite side-to-move, or thus exchange wtime and btime. This was
solved in the old version by changing stm only after starting the ponder
search in response to an engine move. But for starting through 'hard'
there is no turn change. So the start routine has to swap the times by
itself, and the turn change was moved to before it to compensate.
H.G. Muller [Wed, 5 Dec 2012 11:05:59 +0000]
Respond immediately to ponder on/off commands
Rather than just setting the flag that causes a ponder search to start
after the engine moves, we start the search on receiving the 'hard' command.
When a ponder search is in progress, it is stopped on receiving 'easy'.
This requires saving a ponder move even with ponder off, (because it might
be switched on later), and more strict clearing of the move beyond the last
one, toprevent it can be accidentally used as ponder move (e.g. after undo).
H.G. Muller [Tue, 4 Dec 2012 22:37:53 +0000]
Implement pause / resume commands
H.G. Muller [Wed, 9 May 2012 19:05:34 +0000]
Fix bug in converting Shogi moves
The patch that put the move conversion in separate routines broke UCI2WB
for Shogi, because it still tested for LF to recognize non-promotions,
while the move now was null-terminated.
H.G. Muller [Thu, 19 Apr 2012 21:01:55 +0000]
Bump version number to 1.9
H.G. Muller [Thu, 19 Apr 2012 21:01:22 +0000]
Update README file
H.G. Muller [Thu, 19 Apr 2012 20:59:53 +0000]
Remove S-Chess gating-move translation
This is no longer needed, since the UCI S-Chess engine now uses the same
gating-move notation as WinBoard protocol.
H.G. Muller [Thu, 19 Apr 2012 20:43:11 +0000]
Warn user when all moves have been collected
A line 'OK to exclude' is printed disguised as Thinking-Output, to inform
the user that he can start using the exclude command.
H.G. Muller [Thu, 19 Apr 2012 19:18:28 +0000]
Implement WB exclude feature
UCI2WB collects moves sent by the engne in analysis mode from the currmove,
currmovenumber info commands. After the full set for the current position
has been completed, UCI2Wb becomes sensitive for WB include and exclude
commands, to switch the moves in the list on or off. If not all moves
are on, the 'go infinite' will be accompanied by 'searchmoves'. If all
moves are off, the current search is allowed to continue.
H.G. Muller [Thu, 19 Apr 2012 20:51:26 +0000]
Bump version number to 1.8
H.G. Muller [Tue, 17 Apr 2012 18:09:56 +0000]
Wait for uciok before handling GUI input
WinBoard does not apply a feature timeout when restarting an engine that
had reuse=0, but immediately starts sending commands. This caused the
memory command to be ignored, because it arrived when UCI2WB had not seen
the engine's Hash option yet. Now UCI2WB stalls processing GUI commands
after receiving 'protover' until it sees 'uciok' from the engine.
H.G. Muller [Tue, 17 Apr 2012 18:05:20 +0000]
Make translation of FEN with holdings also handle S-Chess
Like in Shogi FEN, UCI S-Chess engines have the holdings not immediately
behind the board, but before the move counters. Since Shogi FENs are
missing a few fields in this area (castling, e.p. and 50-move), some
recoding was necessary to make this work.
H.G. Muller [Tue, 17 Apr 2012 18:00:29 +0000]
Put move translation in separate routines
H.G. Muller [Tue, 17 Apr 2012 05:44:50 +0000]
Translate S-Chess gating moves
The only existing UCI S-Chess engine requires the gating square to be
repeated after the gating piece suffix. Also gating-at-Rook castlings
have a different format: they mention the King move. UCI2WB now handles
these move translations.
H.G. Muller [Tue, 17 Apr 2012 06:56:39 +0000]
Update README file
Add description of the debug and -var options.
H.G. Muller [Tue, 17 Apr 2012 05:36:21 +0000]
Make supported variants run-time configurable
A new command-line argument "-var XXX" is accepted to set the variant
list reprted at startup to variants="XXX". It has to go between "debug"
and the engine name.
H.G. Muller [Tue, 17 Apr 2012 05:31:24 +0000]
Use 30msec margin in st->movetime translation
Because of the different definition of the time mentioned in the WB st
and UCI movetime (max time vs exact time), a margin is needed to not make
the engine forfeit on time.
num
H.G. Muller [Sun, 12 Feb 2012 21:53:35 +0000]
Always pass info string with timing info
Even with nopost a sting starting with "info string times @" will be passed
to the GUI as debug output.
H.G. Muller [Sun, 12 Feb 2012 21:47:44 +0000]
Fix some spurious output
Not all debug prints towards the GUI were controlled through the
"UCI2WB debug output" option. This is now repaired. The method for
matching an info string is made a bit more efficient, by only looking
at the beginning.
H.G. Muller [Sat, 14 Jan 2012 13:05:12 +0000]
Bump version number to 1.6
Also update changelog in README file.
H.G. Muller [Sat, 14 Jan 2012 12:53:08 +0000]
Fix engine names with spaces
Only the first word in the "id name" command was recognized by scanf.
H.G. Muller [Sat, 14 Jan 2012 12:46:45 +0000]
Make debug output optional
The debug output sent by UCI2WB to the GUI is made subject to an option
"UCI2WB debug output", which by default is set to false. A command-line
argument "debug" can set it to true from the beginning, so that you will
also be able to see the option handshaking.
H.G. Muller [Sat, 14 Jan 2012 12:13:20 +0000]
Eliminate polling in Windows
Also use pipe-based synchronization here.
H.G. Muller [Sat, 14 Jan 2012 11:14:57 +0000]
Implement ping
Use readyok / isready to really ping the engine before acknowledging the GUI.
H.G. Muller [Sat, 14 Jan 2012 10:56:13 +0000]
Eliminate polling in Linux
The sleep-spaced polling for readyok or bestmove has now been replaced
by pipe-based blocking of the waiting thread, waking it up by writing
a character into the pipe.
H.G. Muller [Fri, 15 Oct 2010 09:16:45 +0000]
Check in Windows icon