changes from H.G. Muller; version 4.3.12
[xboard.git] / parser.l
index da4cbc7..46de027 100644 (file)
--- a/parser.l
+++ b/parser.l
@@ -172,6 +172,7 @@ extern void CopyBoard P((Board to, Board from));
     int skip1 = 0, skip2 = 0, skip3 = 0, promoted = 0;\r
     ChessSquare piece;\r
     ChessMove result;\r
+    char c;\r
     \r
     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */\r
 \r
@@ -218,7 +219,9 @@ extern void CopyBoard P((Board to, Board from));
     piece = boards[yyboardindex]\r
       [currentMoveString[1] - ONE][currentMoveString[0] - AAA];\r
     if(promoted) piece = (ChessSquare) (DEMOTED piece);\r
-    if (ToLower(yytext[skip3]) != ToLower(PieceToChar(piece)))\r
+    c = PieceToChar(piece);\r
+    if(c == '~') c = PieceToChar((ChessSquare) (DEMOTED piece));\r
+    if (ToLower(yytext[skip3]) != ToLower(c))\r
       return (int) IllegalMove;\r
 \r
     result = LegalityTest(boards[yyboardindex],\r
@@ -240,9 +243,10 @@ extern void CopyBoard P((Board to, Board from));
     return (int) result;\r
 }\r
 \r
-[a-l][0-9][xX:-]?[a-l][0-9]((=?\(?[A-Z]\)?)|=)?      {\r
+[a-l][0-9][xX:-]?[a-l][0-9]((=?\(?[A-Za-z]\)?)|=)?      {\r
     /*\r
      * Simple algebraic move, possibly with promotion\r
+     * [HGM] Engine moves are received in this format, with lower-case promoChar!\r
      */\r
     int skip = 0;\r
     ChessMove result;\r