/*
- Glaurung, a UCI chess playing engine.
- Copyright (C) 2004-2008 Tord Romstad
+ Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+ Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
+ Copyright (C) 2008 Marco Costalba
- Glaurung is free software: you can redistribute it and/or modify
+ Stockfish is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
- Glaurung is distributed in the hope that it will be useful,
+
+ Stockfish is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//// Includes
////
+#include <cassert>
#include <iostream>
#include <sstream>
#include <string>
// get_command() waits for a command from the user, and passes
// this command to handle_command. get_command also intercepts
// EOF from stdin, by translating EOF to the "quit" command. This
- // ensures that Glaurung exits gracefully if the GUI dies
+ // ensures that Stockfish exits gracefully if the GUI dies
// unexpectedly.
void get_command() {
// UCIInputParser object to parse this text string as a UCI command,
// and calls the appropriate functions. In addition to the UCI
// commands, the function also supports a few debug commands.
-
+
void handle_command(const std::string &command) {
UCIInputParser uip(command);
}
else if (token == "uci")
{
- std::cout << "id name " << engine_name() << std::endl;
- std::cout << "id author Tord Romstad" << std::endl;
+ std::cout << "id name " << engine_name() << std::endl
+ << "id author Tord Romstad, Marco Costalba"
+ << std::endl;
print_uci_options();
std::cout << "uciok" << std::endl;
}
}
else if (token == "key")
{
- std::cout << "key: " << RootPosition.get_key()
+ std::cout << "key: " << std::hex << RootPosition.get_key()
<< " material key: " << RootPosition.get_material_key()
<< " pawn key: " << RootPosition.get_pawn_key()
<< std::endl;
- }
- else
+ }
+ else
{
std::cout << "Unknown command: " << command << std::endl;
while (!uip.eof())
}
- // set_position() is called when Glaurung receives the "position" UCI
+ // set_position() is called when Stockfish receives the "position" UCI
// command. The input parameter is a UCIInputParser. It is assumed
// that this parser has consumed the first token of the UCI command
// ("position"), and is ready to read the second token ("startpos"
if (token == "moves")
{
Move move;
- UndoInfo u;
+ StateInfo st;
while (!uip.eof())
{
uip >> token;
move = move_from_string(RootPosition, token);
- RootPosition.do_move(move, u);
+ RootPosition.do_move(move, st);
if (RootPosition.rule_50_counter() == 0)
RootPosition.reset_game_ply();
}
+ // Our StateInfo st is about going out of scope,
+ // so save its content before they disappear.
+ RootPosition.setStartState(st);
}
}
}
- // set_option() is called when Glaurung receives the "setoption" UCI
+ // set_option() is called when Stockfish receives the "setoption" UCI
// command. The input parameter is a UCIInputParser. It is assumed
// that this parser has consumed the first token of the UCI command
// ("setoption"), and is ready to read the second token ("name", if
}
- // go() is called when Glaurung receives the "go" UCI command. The
+ // go() is called when Stockfish receives the "go" UCI command. The
// input parameter is a UCIInputParser. It is assumed that this
// parser has consumed the first token of the UCI command ("go"),
// and is ready to read the second token. The function sets the
if (moveTime)
infinite = true; // HACK
- think(RootPosition, infinite, ponder, time[RootPosition.side_to_move()],
- inc[RootPosition.side_to_move()], movesToGo, depth, nodes, moveTime,
- searchMoves);
+ assert(RootPosition.is_ok());
+
+ think(RootPosition, infinite, ponder, RootPosition.side_to_move(), time,
+ inc, movesToGo, depth, nodes, moveTime, searchMoves);
}
}