version 1.4w10UCIb20
[polyglot.git] / mainloop.cpp
index 0d5a8f0..ffef0c9 100644 (file)
@@ -26,16 +26,18 @@ static const int StringSize = 4096;
 \r
 // prototypes\r
 \r
-static void mainloop_step      ();\r
-static void mainloop_init();\r
+static void mainloop_init            ();\r
+static void mainloop_wait_for_event  ();\r
 static void mainloop_engine_step(char * string);\r
 static void mainloop_gui_step(char * string);\r
 \r
+// functions\r
+\r
 // mainloop_init()\r
     \r
 static void mainloop_init(){\r
     if(!option_get_bool("UCI")){\r
-        xboard_init();\r
+        xboard2uci_init();  // the default\r
     }\r
 }\r
 \r
@@ -43,9 +45,9 @@ static void mainloop_init(){
 \r
 static void mainloop_engine_step(char * string){\r
     if(option_get_bool("UCI")){\r
-       uci_engine_step(string); \r
+        uci2uci_engine_step(string); \r
     }else{\r
-        engine_step(string);\r
+        xboard2uci_engine_step(string);\r
     }\r
 }\r
 \r
@@ -53,59 +55,65 @@ static void mainloop_engine_step(char * string){
 \r
 static void mainloop_gui_step(char * string){\r
     if(option_get_bool("UCI")){\r
-        uci_gui_step(string); \r
+        uci2uci_gui_step(string); \r
+    }else if(my_string_equal(string,"uci")){ // mode auto detection\r
+        my_log("POLYGLOT *** Switching to UCI mode ***\n");\r
+        option_set("UCI","true");\r
+        uci2uci_gui_step(string);\r
     }else{\r
-        xboard_step(string);\r
-    }  \r
+        xboard2uci_gui_step(string);\r
+    }\r
 }\r
 \r
-\r
-\r
 // mainloop()\r
 \r
 void mainloop() {\r
+    char string[StringSize];\r
     mainloop_init();\r
-    while (!engine_eof(Engine)) mainloop_step();\r
-    my_log("POLYGLOT *** EOF file received from engine ***");\r
+    while (!engine_eof(Engine)) {\r
+            // process buffered lines\r
+        while(TRUE){\r
+            if(gui_get_non_blocking(GUI,string,StringSize)){\r
+                mainloop_gui_step(string);\r
+            }else if(!engine_eof(Engine) &&\r
+                     engine_get_non_blocking(Engine,string,StringSize) ){\r
+                mainloop_engine_step(string);\r
+            }else{\r
+                break;\r
+            }\r
+        }\r
+        mainloop_wait_for_event();\r
+    }\r
+    my_log("POLYGLOT *** EOF file received from engine ***\n");\r
 }\r
 \r
-// adapter_step()\r
 \r
+\r
+\r
+// mainloop_wait_for_event()\r
+\r
+static void mainloop_wait_for_event(){\r
 #ifdef _WIN32\r
-static void mainloop_step(){  // polling!\r
-    bool xin,ein;\r
+    HANDLE hHandles[2];\r
     char string[StringSize];\r
-    xin=gui_get_non_blocking(GUI,string,StringSize);\r
-    if(xin) mainloop_gui_step(string);\r
-    ein=engine_get_non_blocking(Engine,string,StringSize);\r
-    if(ein) mainloop_engine_step(string);\r
-    if(xin==false && ein==false) Idle();//nobody wants me,lets have a beauty nap\r
-}\r
+    hHandles[0]=(GUI->io).hEvent;\r
+    hHandles[1]=(Engine->io).hEvent;\r
+    WaitForMultipleObjects(2,               // count\r
+                           hHandles,        //\r
+                           FALSE,           // return if one object is signaled\r
+                           INFINITE         // no timeout\r
+                           );\r
 #else\r
-static void mainloop_step() {\r
-\r
    fd_set set[1];\r
    int fd_max;\r
    int val;\r
    char string[StringSize];\r
-\r
-       // process buffered lines\r
-\r
-   while (io_line_ready(GUI->io)){\r
-       gui_get(GUI,string,StringSize);\r
-       mainloop_gui_step(string);\r
-   }\r
-   while (!engine_eof(Engine) && io_line_ready(Engine->io)){\r
-       engine_get(Engine,string,StringSize);\r
-       mainloop_engine_step(string);\r
-   }\r
-\r
    // init\r
 \r
    FD_ZERO(set);\r
    fd_max = -1; // HACK\r
 \r
-   // add xboard input\r
+   // add gui input\r
 \r
    ASSERT(GUI->io->in_fd>=0);\r
 \r
@@ -128,7 +136,9 @@ static void mainloop_step() {
    if (val > 0) {\r
       if (FD_ISSET(GUI->io->in_fd,set)) io_get_update(GUI->io); // read some xboard input\r
       if (FD_ISSET(Engine->io->in_fd,set)) io_get_update(Engine->io); // read some engine input\r
-   }\r
-}\r
+   }    \r
 #endif\r
+}\r
+\r
+\r
 \r