Fix disambiguation for one-click moving
authorH.G.Muller <hgm@hgm-xboard.(none)>
Tue, 29 Mar 2016 18:20:54 +0000 (20:20 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Tue, 29 Mar 2016 18:27:14 +0000 (20:27 +0200)
The test in the DisambiguateCallback to ignore duplicate moves (as
sometimes generated by Betza descriptions) was only testing for the
same from square. This is good enugh if the to-square is always given
(as in SAN), so that moves with different to-square would always be
rejected anyway. But to determine if a piece has only a single move
we disambiguate with unknown to-square. So all moves but the first
of a piece would be ignored, making it always pass the only-move test.
We now test both from- and to-square, and only ignore moves that
have both of these equal to that of an already matching move.

moves.c

diff --git a/moves.c b/moves.c
index c8f8039..abf1936 100644 (file)
--- a/moves.c
+++ b/moves.c
@@ -2058,7 +2058,7 @@ DisambiguateCallback (Board board, int flags, ChessMove kind, int rf, int ff, in
        (cl->rtIn == -1 || cl->rtIn == rt || wildCard) &&
        (cl->ftIn == -1 || cl->ftIn == ft || wildCard)) {
 
-       if(cl->count && rf == cl->rf && ff == cl->ff) return; // duplicate move
+       if(cl->count && rf == cl->rf && ff == cl->ff && rt == cl->rt && ft == cl->ft) return; // duplicate move
 
        if(cl->count == 1 && kifu & 0x7E && cl->rfIn == -1 && cl->ffIn == -1) { // traditional Shogi disambiguation required
            int this = 1, other = 1;