+ // go() is called when engine receives the "go" UCI command. The function sets
+ // the thinking time and other parameters from the input string, then starts
+ // the search.
+
+ void go(const Position& pos, istringstream& is) {
+
+ Search::LimitsType limits;
+ string token;
+
+ while (is >> token)
+ if (token == "searchmoves")
+ while (is >> token)
+ limits.searchmoves.push_back(UCI::to_move(pos, token));
+
+ else if (token == "wtime") is >> limits.time[WHITE];
+ else if (token == "btime") is >> limits.time[BLACK];
+ else if (token == "winc") is >> limits.inc[WHITE];
+ else if (token == "binc") is >> limits.inc[BLACK];
+ else if (token == "movestogo") is >> limits.movestogo;
+ else if (token == "depth") is >> limits.depth;
+ else if (token == "nodes") is >> limits.nodes;
+ else if (token == "movetime") is >> limits.movetime;
+ else if (token == "mate") is >> limits.mate;
+ else if (token == "infinite") limits.infinite = 1;
+ else if (token == "ponder") limits.ponder = 1;
+
+ Threads.start_thinking(pos, limits, SetupStates);
+ }