syzygy wrote:This might be a silly question, but does the xboard/winboard protocol allow the engine to print mate scores (or even "tablebase win" scores)? According to
this page, score is an integer giving evaluation in centipawns.
The standard does not currently define it, but the standard is alive, and not cast in stone. Mate scores can be encoded as numbers without breaking interfaces that would not know about this extension of the standard. Like 1000000+x for mate in x, and -1000000-x for mated in x. Similarly, scores +/- (800000+x) could be used for encoding DTZ, and +/- (900000+x) for DTC, etc.
An important consideration is that it only has to be implemented in WinBoard and Polyglot to automatically work for all UCI engines.
But then there should be some (not necessarily universal) agreement between engine and gui authors.
Well, you have to start somewhere, and Stockfish is as good a place as any. If everyone keeps looking at the other until a standard emerges, while none is proposed, and none is being negociated, there will certainly never be any progress.
In case we are going to redo UCI, I would like to ask for the possibilty of defining a hierarchy of options (e.g. Syzygy.Path, Syzygy.ProbeLimit that all appear under a button "Syzygy").
You mean a button to open a child dialog?
That also seems an interface feature to me, not necessarily related to the protocol. Names can already consist of multiple words in UCI, and a space seems as good a delimiter as a period. You can simply call the options "Syzygy Path" and "Syzygy ProbeLimit", and if the GUI thinks it would be worth creating a separate dialog for that (because there are many, and because there are also many non-Syzygy options), it could do that. All within the framework of existing protocol.
WinBoard currently would not create any child dialogs, but it would already draw a Windows group box around the options, with the name Syzygy (the longest leading string the options all have in common), and then list all the options within the group box without the leading Syzygy. This is why the Polyglot options always appear in a separate groupbox in the Engine Settings dialog. These all have names "Polyglot XXX", and this makes WinBoard decide to group them. Making it into a separate child dialog would only be a small step. But not something the engine would have to know about.
I resisted the temptation to allow WB engines to define options of type Label and (column-)Break, etc., which WinBoard/XBoard uses in addition to the UCI standard types to define its own dialogs. Because I don't think it is a good thing to allow the engine to meddle in GUI matters.
I did define an option type ('Reset') that (on activation) would prompt the engine for completely resending its list of options + settings. It was originally intended to allow engines to implement a button to reset everything to their defaults, without the GUI having to remember those defaults. But it is much more flexible than that, as an engine could have several options of that type (but different name), to recall one of several 'profiles' (groups of settings) with a single button. And it could even be used to not only alter the values of existing options, but actually completely redefine the list of available options. This would allow the engine to create a button 'Advanced' with its initial options, to greatly expand the number of options when it is pushed (and amongst these new options, a button 'Basic' to go back to the smaller number of options). It could also be used for something similar to what you suggest: amongst the initial options the engine would only define a single reset button "Syzygy", and when it is activated, it would redefine the option to a list of the real Syzygy options only (plus a 'Close' button). They would then not appear in a child dialog, but just replace the controls in the current Engine Settings dialog, until you press 'Close', after which the engine would redefine the list back to the initial one.