Allow null move in analysis and edit-game mode
authorH.G. Muller <h.g.muller@hccnet.nl>
Wed, 19 Jan 2011 10:46:41 +0000 (11:46 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 6 Aug 2011 16:40:51 +0000 (18:40 +0200)
commit681dfc03596526017b3b8f39caef7f8f7c032987
tree2ee66d66b0cd2b8c1ae804bd6d6aed5285ca65dc
parentbf07cc0c5232c7cd486fab118defa0815ff89183
Allow null move in analysis and edit-game mode

In some games it is allowed to pass your turn. The internal
representation picked for such a null move is the drop of an empty
square, (EmptySquare,DROP_RANK,0,0). Computer-algebraic form is "@@@@",
SAN form is "--", (for compatibility with ChessBase / SCID), and the
non-compliant forms "null", "pass"and "Z0" are recognized in
the parser as well. ApplyMove() has to test for this special case
(to not actually clear a1), and a way to enter the pass for the user had
to be found (clicking the opponent clock, like in EditPosition mode).
 The null move is made move irreversible to prevent repetition draws
spanning null moves being adjudicated.
  Such entry of null move is now allowed in AnalyzeMode and EditGame mode.
Because Chess engines will not accept null moves, SendMoveToProgram had
to be adapted to send not the move, but the position after it in
case of a null move. This erases the move history in the engine,
so it will not react to 'undo' for that null move, so BackwardInner
had to be adapted to test for intervening null moves, and if one is
found, approach the target from the other side after loading the
earliest position before it not crossing another null move, and
then loading the moves upto the target.
  XBoard clock clicks had to be fixed, to pay attention to the shift key.
backend.c
moves.c
parser.c
xboard.c