X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fuci.cpp;h=a2998e62abaed2611dd24851bcf076dae9247b96;hb=6e00aa6bae8a9634b3aea4b7b0bde652a588e9de;hp=1b7705065cd5de4dc6fefca0b2a1f9912cb07dd9;hpb=cc2b3ece5c5d8d1183f8526fbb0ee4e1ea7a69fe;p=stockfish diff --git a/src/uci.cpp b/src/uci.cpp index 1b770506..a2998e62 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -30,6 +30,8 @@ using namespace std; +extern void benchmark(istringstream& is); + namespace { // FEN string of the initial position, normal chess @@ -52,14 +54,17 @@ namespace { /// that we exit gracefully if the GUI dies unexpectedly. In addition to the UCI /// commands, the function also supports a few debug commands. -void uci_loop() { +void uci_loop(const string& args) { Position pos(StartFEN, false, 0); // The root position string cmd, token; while (token != "quit") { - if (!getline(cin, cmd)) // Block here waiting for input + if (!args.empty()) + cmd = args; + + else if (!getline(cin, cmd)) // Block here waiting for input cmd = "quit"; istringstream is(cmd); @@ -69,9 +74,7 @@ void uci_loop() { if (token == "quit" || token == "stop") { Search::Signals.stop = true; - - if (token == "quit") // Cannot quit while threads are still running - Threads.wait_for_search_finished(); + Threads.wait_for_search_finished(); // Cannot quit while threads are running } else if (token == "ponderhit") @@ -82,12 +85,18 @@ void uci_loop() { Search::Limits.ponder = false; if (Search::Signals.stopOnPonderhit) + { Search::Signals.stop = true; + Threads.wait_for_search_finished(); // Wake up if is sleeping + } } else if (token == "go") go(pos, is); + else if (token == "ucinewgame") + { /* Avoid returning "Unknown command" */ } + else if (token == "isready") cout << "readyok" << endl; @@ -109,6 +118,9 @@ void uci_loop() { else if (token == "eval") cout << Eval::trace(pos) << endl; + else if (token == "bench") + benchmark(is); + else if (token == "key") cout << "key: " << hex << pos.key() << "\nmaterial key: " << pos.material_key() @@ -120,6 +132,12 @@ void uci_loop() { << "\nuciok" << endl; else cout << "Unknown command: " << cmd << endl; + + if (!args.empty()) // Command line arguments have one-shot behaviour + { + Threads.wait_for_search_finished(); + break; + } } } @@ -200,13 +218,13 @@ namespace { while (is >> token) { if (token == "wtime") - is >> limits.times[WHITE]; + is >> limits.time[WHITE]; else if (token == "btime") - is >> limits.times[BLACK]; + is >> limits.time[BLACK]; else if (token == "winc") - is >> limits.incs[WHITE]; + is >> limits.inc[WHITE]; else if (token == "binc") - is >> limits.incs[BLACK]; + is >> limits.inc[BLACK]; else if (token == "movestogo") is >> limits.movestogo; else if (token == "depth")