]> git.sesse.net Git - stockfish/blobdiff - src/uci.cpp
Don't set Search::RootColor in Eval::trace
[stockfish] / src / uci.cpp
index 10519bb1c0a004fabc12777cd78f4334ec7551df..395b78a813bf4e9342a14ba44f7ef78e3ba9f6aa 100644 (file)
@@ -1,7 +1,7 @@
 /*
   Stockfish, a UCI chess playing engine derived from Glaurung 2.1
   Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
-  Copyright (C) 2008-2012 Marco Costalba, Joona Kiiski, Tord Romstad
+  Copyright (C) 2008-2013 Marco Costalba, Joona Kiiski, Tord Romstad
 
   Stockfish is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+#include <iomanip>
 #include <iostream>
 #include <sstream>
 #include <string>
@@ -42,8 +43,8 @@ namespace {
   // position just before to start searching). Needed by repetition draw detection.
   Search::StateStackPtr SetupStates;
 
-  void set_option(istringstream& up);
-  void set_position(Position& pos, istringstream& up);
+  void setoption(istringstream& up);
+  void position(Position& pos, istringstream& up);
   void go(const Position& pos, istringstream& up);
 }
 
@@ -55,7 +56,7 @@ namespace {
 
 void UCI::loop(const string& args) {
 
-  Position pos(StartFEN, false, Threads.main_thread()); // The root position
+  Position pos(StartFEN, false, Threads.main()); // The root position
   string token, cmd = args;
 
   do {
@@ -76,7 +77,7 @@ void UCI::loop(const string& args) {
           if (token != "ponderhit" || Search::Signals.stopOnPonderhit)
           {
               Search::Signals.stop = true;
-              Threads.main_thread()->notify_one(); // Could be sleeping
+              Threads.main()->notify_one(); // Could be sleeping
           }
           else
               Search::Limits.ponder = false;
@@ -90,24 +91,31 @@ void UCI::loop(const string& args) {
 
           benchmark(pos, ss);
       }
-      else if (token == "key") sync_cout <<   "position key: " << hex << pos.key()
-                                         << "\nmaterial key: " << pos.material_key()
-                                         << "\npawn key:     " << pos.pawn_key()
-                                         << sync_endl;
-
-      else if (token == "uci") sync_cout << "id name " << engine_info(true)
-                                         << "\n"       << Options
-                                         << "\nuciok"  << sync_endl;
-
+      else if (token == "key")
+          sync_cout << hex << uppercase << setfill('0')
+                    << "position key: "   << setw(16) << pos.key()
+                    << "\nmaterial key: " << setw(16) << pos.material_key()
+                    << "\npawn key:     " << setw(16) << pos.pawn_key()
+                    << dec << sync_endl;
+
+      else if (token == "uci")
+          sync_cout << "id name " << engine_info(true)
+                    << "\n"       << Options
+                    << "\nuciok"  << sync_endl;
+
+      else if (token == "eval")
+      {
+          Search::RootColor = pos.side_to_move(); // Ensure it is set
+          sync_cout << Eval::trace(pos) << sync_endl;
+      }
       else if (token == "ucinewgame") TT.clear();
       else if (token == "go")         go(pos, is);
-      else if (token == "position")   set_position(pos, is);
-      else if (token == "setoption")  set_option(is);
+      else if (token == "position")   position(pos, is);
+      else if (token == "setoption")  setoption(is);
       else if (token == "flip")       pos.flip();
       else if (token == "bench")      benchmark(pos, is);
       else if (token == "d")          sync_cout << pos.pretty() << sync_endl;
       else if (token == "isready")    sync_cout << "readyok" << sync_endl;
-      else if (token == "eval")       sync_cout << Eval::trace(pos) << sync_endl;
       else
           sync_cout << "Unknown command: " << cmd << sync_endl;
 
@@ -119,12 +127,12 @@ void UCI::loop(const string& args) {
 
 namespace {
 
-  // set_position() is called when engine receives the "position" UCI command.
+  // position() is called when engine receives the "position" UCI command.
   // The function sets up the position described in the given fen string ("fen")
   // or the starting position ("startpos") and then makes the moves given in the
   // following move list ("moves").
 
-  void set_position(Position& pos, istringstream& is) {
+  void position(Position& pos, istringstream& is) {
 
     Move m;
     string token, fen;
@@ -142,7 +150,7 @@ namespace {
     else
         return;
 
-    pos.set(fen, Options["UCI_Chess960"], Threads.main_thread());
+    pos.set(fen, Options["UCI_Chess960"], Threads.main());
     SetupStates = Search::StateStackPtr(new std::stack<StateInfo>());
 
     // Parse move list (if any)
@@ -154,10 +162,10 @@ namespace {
   }
 
 
-  // set_option() is called when engine receives the "setoption" UCI command. The
+  // setoption() is called when engine receives the "setoption" UCI command. The
   // function updates the UCI option ("name") to the given value ("value").
 
-  void set_option(istringstream& is) {
+  void setoption(istringstream& is) {
 
     string token, name, value;