X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=backend.c;h=a3a06b79d0467673ca042bad806e02685b11e3d9;hb=9d270b7479328210b4f4f47ad3c769c60e4ce200;hp=5c7ebaded08e781900eaf87b0235e526cf2ecb9c;hpb=d098a3196db8758737f6a79992b460306045d499;p=xboard.git diff --git a/backend.c b/backend.c index 5c7ebad..a3a06b7 100644 --- a/backend.c +++ b/backend.c @@ -4804,7 +4804,7 @@ CoordsToComputerAlgebraic(rf, ff, rt, ft, promoChar, move) AAA + ff, ONE + rf, AAA + ft, ONE + rt); } else { sprintf(move, "%c%c%c%c%c\n", - AAA + ff, ONE + rf, AAA + ft, ONE + rt, promoChar == '^' ? '+' : promoChar); + AAA + ff, ONE + rf, AAA + ft, ONE + rt, promoChar); } } } @@ -4884,16 +4884,7 @@ ParseOneMove(move, moveNum, moveType, fromX, fromY, toX, toY, promoChar) int *fromX, *fromY, *toX, *toY; char *promoChar; { - char moveCopy[20], *p = moveCopy; - strncpy(moveCopy, move, 20); // make a copy of move to preprocess it - if(gameInfo.variant == VariantShogi) { - while(*p && *p != ' ') p++; - if(p[-1] == '+') p[-1] = '^'; // in Shogi '+' is promotion, distinguish from check - } - if (appData.debugMode) { - fprintf(debugFP, "move to parse: %s\n", moveCopy); - } - *moveType = yylexstr(moveNum, moveCopy, yy_textstr, sizeof yy_textstr); + *moveType = yylexstr(moveNum, move, yy_textstr, sizeof yy_textstr); switch (*moveType) { case WhitePromotion: @@ -5700,14 +5691,14 @@ HasPromotionChoice(int fromX, int fromY, int toX, int toY, char *promoChoice) if(toY == 0 && piece == BlackPawn || toY == 0 && piece == BlackQueen || toY <= 1 && piece == BlackKnight) { - *promoChoice = '^'; + *promoChoice = '+'; return FALSE; } } else { if(toY == BOARD_HEIGHT-1 && piece == WhitePawn || toY == BOARD_HEIGHT-1 && piece == WhiteQueen || toY >= BOARD_HEIGHT-2 && piece == WhiteKnight) { - *promoChoice = '^'; + *promoChoice = '+'; return FALSE; } } @@ -5744,7 +5735,7 @@ HasPromotionChoice(int fromX, int fromY, int toX, int toY, char *promoChoice) gameMode == IcsPlayingBlack && WhiteOnMove(currentMove); if(appData.testLegality && !premove) { moveType = LegalityTest(boards[currentMove], PosFlags(currentMove), - fromY, fromX, toY, toX, gameInfo.variant == VariantShogi ? '^' : NULLCHAR); + fromY, fromX, toY, toX, gameInfo.variant == VariantShogi ? '+' : NULLCHAR); if(moveType != WhitePromotion && moveType != BlackPromotion) return FALSE; } @@ -8650,11 +8641,11 @@ ApplyMove(fromX, fromY, toX, toY, promoChar, board) board[toY][toX] = EmptySquare; } } - if(promoChar == '^') { + if(promoChar == '+') { /* [HGM] Shogi-style promotions, to piece implied by original (Might overwrite orinary Pawn promotion) */ board[toY][toX] = (ChessSquare) (PROMOTED piece); - } else if(!appData.testLegality) { // without legality testing, unconditionally believe promoChar - board[toY][toX] = CharToPiece(promoChar); + } else if(!appData.testLegality && promoChar != NULLCHAR && promoChar != '=') { // without legality testing, unconditionally believe promoChar + board[toY][toX] = CharToPiece(piece < BlackPawn ? ToUpper(promoChar) : ToLower(promoChar)); } if((gameInfo.variant == VariantSuper || gameInfo.variant == VariantGreat) && promoChar != NULLCHAR && gameInfo.holdingsSize) { @@ -13337,7 +13328,7 @@ if(appData.debugMode) fprintf(debugFP, "Append: in='%s' %d\n", text, addBraces); } else { commentList[index] = (char *) malloc(len + 6); // perhaps wastes 4... if(addBraces) - safeStrCpy(commentList[index], "{\n", sizeof(commentList[index])/sizeof(commentList[index][0])); + safeStrCpy(commentList[index], "{\n", 3); else commentList[index][0] = NULLCHAR; strcat(commentList[index], text); strcat(commentList[index], "\n");