Fix parsing of OO castling when redefined
authorH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 11 Jan 2016 21:58:50 +0000 (22:58 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Mon, 11 Jan 2016 22:02:39 +0000 (23:02 +0100)
A 'piece' command can redefine the castling stride of a King,
and OO castling for non-Fischer castling is internally encoded as the
King step, and thus has to know this.

parser.c

index 7235cae..4cc2f03 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -22,6 +22,7 @@
 
 #include "config.h"
 #include <stdio.h>
+#include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
 #include "common.h"
@@ -632,8 +633,12 @@ badMove:// we failed to find algebraic move
                    /* ICS wild castling */
                    ft = castlingType == 1 ? BOARD_LEFT+1 : (gameInfo.variant == VariantJanus ? BOARD_RGHT-2 : BOARD_RGHT-3);
                } else {
+                   char *q;
                    ff = BOARD_WIDTH>>1; // e-file
                    ft = castlingType == 1 ? BOARD_RGHT-2 : BOARD_LEFT+2;
+                   if(pieceDesc[king] && (q = strchr(pieceDesc[king], 'O'))) { // redefined to non-default King stride
+                       ft = (castlingType == 1 ? ff + atoi(q+1) : ff - atoi(q+1));
+                   }
                }
                if(PosFlags(0) & F_FRC_TYPE_CASTLING) {
                    if (wom) {