\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
\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
\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 *** Mainloop has ended ***\n");\r
+ // This should be handled better.\r
+ engine_close(Engine);\r
+ my_log("POLYGLOT Calling exit\n");\r
+ exit(EXIT_SUCCESS);\r
+\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
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