Assumption: Junior sends promotions according to the side to move (ucase/lcase).
Fact: Stockfish generally handles promotion lcase.
Patch: Handling position fen input moves always with lcase promotions.
Ported back by Portfish. No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
extern void dbg_print();
class Position;
extern void dbg_print();
class Position;
-extern Move move_from_uci(const Position& pos, const std::string& str);
+extern Move move_from_uci(const Position& pos, std::string str);
extern const std::string move_to_uci(Move m, bool chess960);
extern const std::string move_to_san(Position& pos, Move m);
extern const std::string move_to_uci(Move m, bool chess960);
extern const std::string move_to_san(Position& pos, Move m);
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <cassert>
#include <string>
#include <cassert>
#include <string>
/// simple coordinate notation and returns an equivalent Move if any.
/// Moves are guaranteed to be legal.
/// simple coordinate notation and returns an equivalent Move if any.
/// Moves are guaranteed to be legal.
-Move move_from_uci(const Position& pos, const string& str) {
+Move move_from_uci(const Position& pos, string str) {
+
+ // Some GUIs, like Junior, could send promotion in uppercase
+ std::transform(str.begin(), str.end(), str.begin(), tolower);
for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml)
if (str == move_to_uci(ml.move(), pos.is_chess960()))
for (MoveList<MV_LEGAL> ml(pos); !ml.end(); ++ml)
if (str == move_to_uci(ml.move(), pos.is_chess960()))