Adjudicate Xiangqi material draws with Advisor-less Cannons
[xboard.git] / parser.l
index 348bd15..53b568f 100644 (file)
--- a/parser.l
+++ b/parser.l
@@ -232,7 +232,7 @@ extern void CopyBoard P((Board to, Board from));
        currentMoveString[2] - AAA >= BOARD_RGHT   ||\r
        currentMoveString[0] - AAA <  BOARD_LEFT   ||\r
        currentMoveString[2] - AAA <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     piece = boards[yyboardindex]\r
       [currentMoveString[1] - ONE][currentMoveString[0] - AAA];\r
@@ -300,7 +300,7 @@ extern void CopyBoard P((Board to, Board from));
        currentMoveString[2] - AAA >= BOARD_RGHT   ||\r
        currentMoveString[0] - AAA <  BOARD_LEFT   ||\r
        currentMoveString[2] - AAA <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     result = LegalityTest(boards[yyboardindex],\r
                          PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.!\r
@@ -325,7 +325,7 @@ extern void CopyBoard P((Board to, Board from));
     return (int) result;\r
 }\r
 \r
-[a-l][0-9]((=?\(?[A-Z]\)?)|=)?       {\r
+[a-l][0-9]((=?\(?[A-Za-z]\)?)|=)?       {\r
     /*\r
      * Pawn move, possibly with promotion\r
      */\r
@@ -343,14 +343,14 @@ extern void CopyBoard P((Board to, Board from));
     cl.ffIn = yytext[0] - AAA;\r
     cl.rtIn = yytext[1] - ONE;\r
     cl.ftIn = yytext[0] - AAA;\r
-    c = cl.promoCharIn = yytext[2+skip];\r
+    c = cl.promoCharIn = ToLower(yytext[2+skip]);\r
 \r
     /* [HGM] do not allow values beyond board size */\r
     if(cl.rtIn >= BOARD_HEIGHT ||\r
        cl.rtIn <  0            ||\r
        cl.ffIn >= BOARD_RGHT   ||\r
        cl.ftIn <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)\r
       return IllegalMove;\r
@@ -405,7 +405,7 @@ extern void CopyBoard P((Board to, Board from));
        cl.ffIn <  BOARD_LEFT  ||\r
        cl.ftIn >= BOARD_RGHT  ||\r
        cl.ftIn <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)\r
       return IllegalMove;\r
@@ -455,7 +455,7 @@ extern void CopyBoard P((Board to, Board from));
        currentMoveString[2] - AAA >= BOARD_RGHT   ||\r
        currentMoveString[0] - AAA <  BOARD_LEFT   ||\r
        currentMoveString[2] - AAA <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */\r
          currentMoveString[0] != currentMoveString[2] ) {\r
@@ -579,7 +579,7 @@ extern void CopyBoard P((Board to, Board from));
        cl.rtIn <  0            ||\r
        cl.ftIn >= BOARD_RGHT   ||\r
        cl.ftIn <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl);\r
 \r
@@ -639,7 +639,7 @@ extern void CopyBoard P((Board to, Board from));
        cl.rtIn <  0            ||\r
        cl.ftIn >= BOARD_RGHT   ||\r
        cl.ftIn <  BOARD_LEFT     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl);\r
 \r
@@ -777,7 +777,7 @@ extern void CopyBoard P((Board to, Board from));
     /* [HGM] do not allow values beyond board size */\r
     if(currentMoveString[3] - ONE >= BOARD_HEIGHT ||\r
        currentMoveString[2] - AAA >= BOARD_WIDTH     )\r
-      return 0;\r
+      return ImpossibleMove;\r
 \r
     if (WhiteOnMove(yyboardindex)) {\r
        currentMoveString[0] = ToUpper(yytext[0]);\r