currentMoveString[3] = yytext[4+skip1+skip2];\r
currentMoveString[4] = NULLCHAR;\r
\r
+ if (appData.debugMode) {\r
+ fprintf(debugFP, "Parser Qa1b2: yyleng=%d\n",\r
+ yyleng);\r
+ }\r
+\r
if (yyleng-skip1-skip2 > 5) { char c;\r
if (yytext[yyleng-1] == ')') {\r
c = currentMoveString[4] = ToLower(yytext[yyleng-2]);\r
if (currentMoveString[4] == NULLCHAR &&\r
(result == WhitePromotionKnight || result == BlackPromotionKnight ||\r
result == WhitePromotionQueen || result == BlackPromotionQueen)) {\r
- currentMoveString[4] = PieceToChar(BlackQueen);\r
+ if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)\r
+ currentMoveString[4] = PieceToChar(BlackFerz);\r
+ else\r
+ currentMoveString[4] = PieceToChar(BlackQueen);\r
currentMoveString[5] = NULLCHAR;\r
}\r
\r
if(yyleng-skip > 3) /* [HGM] can have Shogi-style promotion */\r
cl.promoCharIn = yytext[yyleng-1];\r
\r
+ if (appData.debugMode) {\r
+ fprintf(debugFP, "Parser Qa1: yyleng=%d, %d(%d,%d)-(%d,%d) = %d (%c)\n",\r
+ yyleng,\r
+ cl.pieceIn,cl.ffIn,cl.rfIn,cl.ftIn,cl.rtIn,cl.promoCharIn,cl.promoCharIn?cl.promoCharIn:' ');\r
+ }\r
+\r
/* [HGM] but do not allow values beyond board size */\r
if(cl.rtIn >= BOARD_HEIGHT ||\r
cl.rtIn < 0 ||\r
currentMoveString[1] = cl.rf + ONE;\r
currentMoveString[2] = cl.ft + AAA;\r
currentMoveString[3] = cl.rt + ONE;\r
- currentMoveS\0tring[4] = cl.promoChar;\r
+ currentMoveString[4] = cl.promoChar;\r
currentMoveString[5] = NULLCHAR;\r
\r
return (int) cl.kind;\r
ff = (BOARD_WIDTH-1)>>1;\r
rt = 0;\r
ft = BOARD_RGHT-3;\r
- sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
} else {\r
rf = 0;\r
ff = BOARD_WIDTH>>1;\r
rt = 0;\r
ft = BOARD_LEFT+2;\r
- sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
}\r
} else{ \r
- if (boards[yyboardindex][BOARD_HEIGHT-1][3] == BlackKing) {\r
+ if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {\r
/* ICS wild castling */\r
rf = BOARD_HEIGHT-1;\r
ff = (BOARD_WIDTH-1)>>1;\r
rt = BOARD_HEIGHT-1;\r
ft = BOARD_RGHT-3;\r
- sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
} else {\r
rf = BOARD_HEIGHT-1;\r
ff = BOARD_WIDTH>>1;\r
rt = BOARD_HEIGHT-1;\r
ft = BOARD_LEFT+2;\r
- sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
}\r
}\r
+ if(gameInfo.variant == VariantFischeRandom) {\r
+ if (WhiteOnMove(yyboardindex)) {\r
+ ff = initialRights[2];\r
+ ft = initialRights[1];\r
+ } else {\r
+ ff = initialRights[5];\r
+ ft = initialRights[4];\r
+ }\r
+ fprintf(debugFP, "Parser FRC long %d %d\n", ff, ft);\r
+ if(ff < 0 || ft < 0) return 0;\r
+ }\r
+ sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
+ if (appData.debugMode) {\r
+ fprintf(debugFP, "long castling %d %d\n", ff, ft);\r
+ }\r
return (int) LegalityTest(boards[yyboardindex],\r
PosFlags(yyboardindex), EP_UNKNOWN,\r
- initialRights, /* [HGM] assume all castlings allowed */\r
+ castlingRights[yyboardindex], /* [HGM] use true castling rights */\r
rf, ff, rt, ft, NULLCHAR);\r
}\r
\r
ff = (BOARD_WIDTH-1)>>1;\r
rt = 0;\r
ft = BOARD_LEFT+1;\r
- sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
} else {\r
rf = 0;\r
ff = BOARD_WIDTH>>1;\r
rt = 0;\r
ft = BOARD_RGHT-2;\r
- sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
}\r
} else {\r
if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {\r
ff = (BOARD_WIDTH-1)>>1;\r
rt = BOARD_HEIGHT-1;\r
ft = BOARD_LEFT+1;\r
- sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
} else {\r
rf = BOARD_HEIGHT-1;\r
ff = BOARD_WIDTH>>1;\r
rt = BOARD_HEIGHT-1;\r
ft = BOARD_RGHT-2;\r
- sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
}\r
}\r
+ if(gameInfo.variant == VariantFischeRandom) {\r
+ if (WhiteOnMove(yyboardindex)) {\r
+ ff = initialRights[2];\r
+ ft = initialRights[0];\r
+ } else {\r
+ ff = initialRights[5];\r
+ ft = initialRights[3];\r
+ }\r
+ if (appData.debugMode) {\r
+ fprintf(debugFP, "Parser FRC short %d %d\n", ff, ft);\r
+ }\r
+ if(ff < 0 || ft < 0) return 0;\r
+ }\r
+ sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);\r
+ if (appData.debugMode) {\r
+ fprintf(debugFP, "short castling %d %d\n", ff, ft);\r
+ }\r
+\r
return (int) LegalityTest(boards[yyboardindex],\r
- PosFlags(yyboardindex), EP_UNKNOWN,\r
- initialRights, /* [HGM] assume all castlings allowed */\r
+ PosFlags(yyboardindex), EP_UNKNOWN,\r
+ castlingRights[yyboardindex], /* [HGM] use true castling rights */\r
rf, ff, rt, ft, NULLCHAR);\r
}\r
\r