Fix drop moves on boards with more than 10 ranks
authorH.G. Muller <h.g.muller@hccnet.nl>
Wed, 29 Jun 2011 11:36:26 +0000 (13:36 +0200)
committerH.G. Muller <h.g.muller@hccnet.nl>
Wed, 29 Jun 2011 14:40:21 +0000 (16:40 +0200)
The internal encoding for rank 16 is '@', and thus ambiguous with drop
moves. They were always printed as 16, breaking drop games on large
boards. The ambiguity is now solved (for boards with more than 16 ranks)
by checking if the preceeding letter is upper case, in which case it
cannot be a fileindicator, but must be a piece, and thus a drop.

backend.c

index b5e5830..cc5fb3a 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -4899,8 +4899,12 @@ SendMoveToProgram(moveNum, cps)
        else SendToProgram(moveList[moveNum], cps);
       } else
       if(BOARD_HEIGHT > 10) { // [HGM] big: convert ranks to double-digit where needed
-       snprintf(buf, MSG_SIZ, "%c%d%c%d%s", moveList[moveNum][0], moveList[moveNum][1] - '0',
-                                            moveList[moveNum][2], moveList[moveNum][3] - '0', moveList[moveNum]+4);
+       if(moveList[moveNum][1] == '@' && (BOARD_HEIGHT < 16 || moveList[moveNum][0] <= 'Z')) { // drop move
+         snprintf(buf, MSG_SIZ, "%c@%c%d%s", moveList[moveNum][0],
+                                             moveList[moveNum][2], moveList[moveNum][3] - '0', moveList[moveNum]+4);
+       } else
+         snprintf(buf, MSG_SIZ, "%c%d%c%d%s", moveList[moveNum][0], moveList[moveNum][1] - '0',
+                                              moveList[moveNum][2], moveList[moveNum][3] - '0', moveList[moveNum]+4);
        SendToProgram(buf, cps);
       }
       else SendToProgram(moveList[moveNum], cps);