X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=moves.c;h=eb0701c21cdeb547a28f5b4668bdb86baabc1f1d;hb=064f39c035588d458888f942798a5178e928669a;hp=0def0759bf6264a142a02b78818be10af80d4a40;hpb=762e18baef5f815cc46019ba3e082bd5ec1980f6;p=xboard.git diff --git a/moves.c b/moves.c index 0def075..eb0701c 100644 --- a/moves.c +++ b/moves.c @@ -171,6 +171,9 @@ ChessMove PromoCharToMoveType(whiteOnMove, promoChar) { /* [HGM] made dependent on CharToPiece to alow alternate piece letters */ ChessSquare piece = CharToPiece(whiteOnMove ? ToUpper(promoChar) : ToLower(promoChar) ); + + if(promoChar == NULLCHAR) return NormalMove; + switch(piece) { case WhiteQueen: return WhitePromotionQueen; @@ -577,7 +580,7 @@ void GenPseudoLegal(board, flags, epfile, callback, closure) if (board[rt][ft] != EmptySquare) break; } if(m==1) goto mounted; - if(m==2) goto walking; + if(m==2) goto finishGold; break; case WhiteQueen: @@ -1085,6 +1088,7 @@ ChessMove LegalityTest(board, flags, epfile, castlingRights, rf, ff, rt, ft, pro } } else if (promoChar != NULLCHAR && promoChar != 'x') { + if(promoChar == '=') cl.kind = IllegalMove; else // [HGM] shogi: no deferred promotion outside Shogi if (cl.kind == WhitePromotionQueen || cl.kind == BlackPromotionQueen) { cl.kind = PromoCharToMoveType((flags & F_WHITE_ON_MOVE) != 0, promoChar); @@ -1265,7 +1269,7 @@ void Disambiguate(board, flags, epfile, closure) #endif /* [HGM] returns 'q' for optional promotion, 'n' for mandatory */ if(closure->promoCharIn != '=') - closure->promoChar = ToLower(PieceToChar(PromoPiece(closure->kind))); + closure->promoChar = ToLower(closure->promoCharIn); else closure->promoChar = '='; if (closure->promoChar == 'x') closure->promoChar = NULLCHAR; if (closure->count > 1) { @@ -1280,7 +1284,7 @@ void Disambiguate(board, flags, epfile, closure) } if(closure->kind == IllegalMove) /* [HGM] might be a variant we don't understand, pass on promotion info */ - closure->promoChar = closure->promoCharIn; + closure->promoChar = ToLower(closure->promoCharIn); if (appData.debugMode) { fprintf(debugFP, "Disambiguate out: %d(%d,%d)-(%d,%d) = %d (%c)\n", closure->piece,closure->ff,closure->rf,closure->ft,closure->rt,closure->promoChar,