- while (token != "quit")
- {
- if (!getline(cin, cmd)) // Block here waiting for input
- cmd = "quit";
-
- istringstream is(cmd);
-
- is >> skipws >> token;
-
- if (token == "quit" || token == "stop")
- Threads.stop_thinking();
-
- else if (token == "ponderhit")
- {
- // The opponent has played the expected move. GUI sends "ponderhit" if
- // we were told to ponder on the same move the opponent has played. We
- // should continue searching but switching from pondering to normal search.
- Search::Limits.ponder = false;
-
- if (Search::Signals.stopOnPonderhit)
- Threads.stop_thinking();
- }
-
- else if (token == "go")
- go(pos, is);
-
- else if (token == "ucinewgame")
- pos.from_fen(StartFEN, false);
-
- else if (token == "isready")
- cout << "readyok" << endl;
-
- else if (token == "position")
- set_position(pos, is);
-
- else if (token == "setoption")
- set_option(is);
-
- else if (token == "perft")
- perft(pos, is);
-
- else if (token == "d")
- pos.print();
-
- else if (token == "flip")
- pos.flip_me();
-
- else if (token == "eval")
- {
- read_evaluation_uci_options(pos.side_to_move());
- cout << trace_evaluate(pos) << endl;
- }
-
- else if (token == "key")
- cout << "key: " << hex << pos.key()
- << "\nmaterial key: " << pos.material_key()
- << "\npawn key: " << pos.pawn_key() << endl;
-
- else if (token == "uci")
- cout << "id name " << engine_info(true)
- << "\n" << Options
- << "\nuciok" << endl;
- else
- cout << "Unknown command: " << cmd << endl;
- }
-}