X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=parser.l;h=53b568f29b2a8930df326612e3c62607345016b5;hb=32d6537664a734207772608507882f5a682a2c0a;hp=76ec89df05a4288a30142789d86eac737b8daea6;hpb=0cba5b3ac1360105f1ac24aba3c848adfa87f009;p=xboard.git diff --git a/parser.l b/parser.l index 76ec89d..53b568f 100644 --- a/parser.l +++ b/parser.l @@ -232,7 +232,7 @@ extern void CopyBoard P((Board to, Board from)); currentMoveString[2] - AAA >= BOARD_RGHT || currentMoveString[0] - AAA < BOARD_LEFT || currentMoveString[2] - AAA < BOARD_LEFT ) - return 0; + return ImpossibleMove; piece = boards[yyboardindex] [currentMoveString[1] - ONE][currentMoveString[0] - AAA]; @@ -300,7 +300,7 @@ extern void CopyBoard P((Board to, Board from)); currentMoveString[2] - AAA >= BOARD_RGHT || currentMoveString[0] - AAA < BOARD_LEFT || currentMoveString[2] - AAA < BOARD_LEFT ) - return 0; + return ImpossibleMove; result = LegalityTest(boards[yyboardindex], PosFlags(yyboardindex)&~F_MANDATORY_CAPTURE, // [HGM] losers: might think we can e.p.! @@ -313,7 +313,7 @@ extern void CopyBoard P((Board to, Board from)); if (currentMoveString[4] == NULLCHAR && (result == WhitePromotionKnight || result == BlackPromotionKnight || result == WhitePromotionQueen || result == BlackPromotionQueen)) { - if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier) + if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk) currentMoveString[4] = PieceToChar(BlackFerz); else if(gameInfo.variant == VariantGreat) currentMoveString[4] = PieceToChar(BlackMan); @@ -325,7 +325,7 @@ extern void CopyBoard P((Board to, Board from)); return (int) result; } -[a-l][0-9]((=?\(?[A-Z]\)?)|=)? { +[a-l][0-9]((=?\(?[A-Za-z]\)?)|=)? { /* * Pawn move, possibly with promotion */ @@ -343,14 +343,14 @@ extern void CopyBoard P((Board to, Board from)); cl.ffIn = yytext[0] - AAA; cl.rtIn = yytext[1] - ONE; cl.ftIn = yytext[0] - AAA; - c = cl.promoCharIn = yytext[2+skip]; + c = cl.promoCharIn = ToLower(yytext[2+skip]); /* [HGM] do not allow values beyond board size */ if(cl.rtIn >= BOARD_HEIGHT || cl.rtIn < 0 || cl.ffIn >= BOARD_RGHT || cl.ftIn < BOARD_LEFT ) - return 0; + return ImpossibleMove; if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare) return IllegalMove; @@ -405,7 +405,7 @@ extern void CopyBoard P((Board to, Board from)); cl.ffIn < BOARD_LEFT || cl.ftIn >= BOARD_RGHT || cl.ftIn < BOARD_LEFT ) - return 0; + return ImpossibleMove; if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare) return IllegalMove; @@ -455,7 +455,7 @@ extern void CopyBoard P((Board to, Board from)); currentMoveString[2] - AAA >= BOARD_RGHT || currentMoveString[0] - AAA < BOARD_LEFT || currentMoveString[2] - AAA < BOARD_LEFT ) - return 0; + return ImpossibleMove; if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */ currentMoveString[0] != currentMoveString[2] ) { @@ -497,7 +497,7 @@ extern void CopyBoard P((Board to, Board from)); result == WhitePromotionKnight || result == BlackPromotionKnight)) { currentMoveString[4] = PieceToChar(BlackQueen); // [HGM] shatranj: take care of variants without Queen - if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier) + if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier || gameInfo.variant == VariantMakruk) currentMoveString[4] = PieceToChar(BlackFerz); if(gameInfo.variant == VariantGreat) currentMoveString[4] = PieceToChar(BlackMan); @@ -579,7 +579,7 @@ extern void CopyBoard P((Board to, Board from)); cl.rtIn < 0 || cl.ftIn >= BOARD_RGHT || cl.ftIn < BOARD_LEFT ) - return 0; + return ImpossibleMove; Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl); @@ -639,7 +639,7 @@ extern void CopyBoard P((Board to, Board from)); cl.rtIn < 0 || cl.ftIn >= BOARD_RGHT || cl.ftIn < BOARD_LEFT ) - return 0; + return ImpossibleMove; Disambiguate(boards[yyboardindex], PosFlags(yyboardindex), &cl); @@ -777,7 +777,7 @@ extern void CopyBoard P((Board to, Board from)); /* [HGM] do not allow values beyond board size */ if(currentMoveString[3] - ONE >= BOARD_HEIGHT || currentMoveString[2] - AAA >= BOARD_WIDTH ) - return 0; + return ImpossibleMove; if (WhiteOnMove(yyboardindex)) { currentMoveString[0] = ToUpper(yytext[0]); @@ -1085,10 +1085,10 @@ int yywrap() /* Parse a move from the given string s */ /* ^ at start of pattern WON'T work here unless using flex */ -ChessMove yylexstr(boardIndex, s) - int boardIndex; - char *s; -{ +ChessMove yylexstr(boardIndex, s, text, len) + int boardIndex, len; + char *s, *text; +{ ChessMove ret; char *oldStringToLex; #ifdef FLEX_SCANNER @@ -1104,7 +1104,9 @@ ChessMove yylexstr(boardIndex, s) yy_switch_to_buffer(buffer); #endif /*FLEX_SCANNER*/ - ret = (ChessMove) yylex(); + ret = (ChessMove) yylex(); + strncpy(text, yy_text, len-1); // [HGM] vari: yy_text is not available to caller after buffer switch ?!? + text[len-1] = NULLCHAR; #ifdef FLEX_SCANNER if (oldBuffer != NULL)