bob wrote:OK. You don't understand it. You don't want to understand it. So there is little left to discuss. My interpretation of how the current winboard works is 100% correct. I have used it for 15 years now. And I understand _exactly_ what it does, and where the problems are.
Apparently not. Or you would know that a RESULT command would _always_ end the game instantly, when not in ICS mode. And thus, when you don't want your engine having to behave differently in two-machines mode as in ICS mode, you cannot sent RESULT strings in ICS mode either.
WB protocol is what it is, and it is not in my power to change it. Unlike Human OTB Chess, there is a great need in computer Chess for an engine->GUI command that unconditionally ends the game, by telling the GUI that no more moves have to be expected from the engine no matter what. Lack of such a command would result in huge wastes of CPU time in many situations, by having to wait out the game for a flag to drop.
Like it or not, original WinBoard has only one command to unconditionally terminate a game, namely the RESULT command. Most engines rely on the command having this effect, so it would be extremely detrimental to suddenly redefine this command to mean something else. If you have a sick desire to waste computer time and needlessly drive up CO2 emissions, just because you have enough of it to burn, doesn't mean that I am going to harm others this way. So the RESULT command will have to terminate the game unconditionally in future versions of WinBoard as well, as it always has. No matter how much we would like there to be a separate "stop game", "abandon" or "leave" command decoupling this effect from the actual result specification. Existing engines do not use these command, and we cannot 'fix' problems by breaking a hundred times as many things that are working properly right now.
So the only solution is to use another command than RESULT for cases were the engine might want to play on. This could be an entirely new command, but using "offer draw" in the situation where this new command would be used does not result in any different behavior, so it might as well be used. Note that there are _many_ undocumented commands that are understood by WinBoard for accomodating older engines, from before the time the protocol definition was published, and that many sentences containing the word 'draw', recognized by that fact alone, will be considered as an equivalent to the RESULT message in existing WinBoard. So things like "claim draw" would certainly cause improper operation of any engine using it, when it runs under such an old WinBoard. There would be no backward compatibility. The only way to guarantee this backward compatibility is to use a command that old WinBoard versions already know, and is harmless in that context. This is why overloading"offer draw" is such a perfect solution.
Implement what you want, and then when the problems I have explained pop up, maybe _THEN_ you will "get it" the hard way...
I will certainly do that (I never planned otherwise

), as following your advice would lead to a crap product that no one would want anyway...
I suppose all of that rambling is supposed to make some sort of sense? Again, two cases. Draw claim. Draw offer/draw offer accept. Two different animals. The former requires verification. The latter does not. I don't exactly like the "offer draw" to accept a draw, but it has worked perfectly for years and is OK. With ICC that is also all that is needed to claim a draw. ICC's interpretation is as follows: If a player offers a draw, and the game is drawn by rule (50 move, 3-fold repetition, etc) then the draw is enforced instantly. Otherwise the draw offer is relayed to the opponent. If he accepts, or if he offers a draw in response, the game ends immediately.
Well, this is exactly what I descibed, and how WinBoard 4.3.13 works. So why are you going off like a loose cannon?
The "GUI" does it correctly. Programs can't end the game themselves (unless they outright resign or else get mated or mate the opponent, but they can handle draws just as FIDE intended. And if a player claims a draw and nothing happens, the game continues. Again just as FIDE rules say. Surely if ICC can do it, you can do it too? And make it work reasonably without artificially changing game results?
As I told from the very beginning, it already works exactly that way in WinBoard_F. You have to
offer the draw, not use the RESULT message (which unconditionally ends the game, with the GUI forced to decide on a result), just as you describe above in the interaction with ICS.
And not everyone is an idiot that is making up rules as they go along and forcing everyone to abide by them.
Indeed. Only GUI programmers have that privilege.
A mistaken draw claim should not end the game.
But a protocol violation will. Claims not made by the proper protocol command can and will not be an exception to this universal truth.
if it does, I won't be using it even though my program is never guilty of doing this. But I don't want wins in positions where there is still play left. It really is as simple as following the rules of chess, rather than the whims of testers that are really doing nothing to help the engines out anyway...
Well, seems you are not using current WinBoard either, so who cares? Why would anyone care what you use or don't? What you use is not a factor in this at all. What matters is how others will use Crafty, and how they will appreciate its behavior.
It is all so simple...
yes it is. So why all the discussion? If a program claims a draw, and the game is not drawn, it continues. the idea of calling an invalid draw claim equivalent to a loss is the entire point of this discussion.
Not at all. The point of this discussion is if refusing to play on, or misusing the protocol in such a way as to create the impression refusing to play on, should be equivalent to a loss.
Has been from the get-go. And to do so is wrong, whether it be via the broken result mechanism, or anything else. A user must be allowed to claim a draw that is incorrect, without penalty...
The rules of chess say so.
Yes. And protocol specifies how you have to do it. It would for instance, not be very smart to claim a draw by sending "resign", or 1-0, or "OFFER DRAW", or "half-half", or an invalid move, or "remise, s'il vous plait?"... If you don't stick to protocol, your engine will forfeit, and be considered buggy. Always has been that way...