5 static const int StringSize = 4096;
\r
15 #include <sys/select.h>
\r
16 #include <sys/types.h> // Mac OS X needs this one
\r
24 #include "xboard2uci.h"
\r
25 #include "uci2uci.h"
\r
29 static void mainloop_step ();
\r
30 static void mainloop_init();
\r
31 static void mainloop_engine_step(char * string);
\r
32 static void mainloop_gui_step(char * string);
\r
36 static void mainloop_init(){
\r
37 if(!option_get_bool("UCI")){
\r
42 // mainloop_engine_step()
\r
44 static void mainloop_engine_step(char * string){
\r
45 if(option_get_bool("UCI")){
\r
46 uci_engine_step(string);
\r
48 engine_step(string);
\r
52 // mainloop_gui_step()
\r
54 static void mainloop_gui_step(char * string){
\r
55 if(option_get_bool("UCI")){
\r
56 uci_gui_step(string);
\r
58 xboard_step(string);
\r
68 while (!engine_eof(Engine)) mainloop_step();
\r
69 my_log("POLYGLOT *** EOF file received from engine ***");
\r
75 static void mainloop_step(){ // polling!
\r
77 char string[StringSize];
\r
78 xin=gui_get_non_blocking(GUI,string,StringSize);
\r
79 if(xin) mainloop_gui_step(string);
\r
80 ein=engine_get_non_blocking(Engine,string,StringSize);
\r
81 if(ein) mainloop_engine_step(string);
\r
82 if(xin==false && ein==false) Idle();//nobody wants me,lets have a beauty nap
\r
85 static void mainloop_step() {
\r
90 char string[StringSize];
\r
92 // process buffered lines
\r
94 while (io_line_ready(GUI->io)){
\r
95 gui_get(GUI,string,StringSize);
\r
96 mainloop_gui_step(string);
\r
98 while (!engine_eof(Engine) && io_line_ready(Engine->io)){
\r
99 engine_get(Engine,string,StringSize);
\r
100 mainloop_engine_step(string);
\r
106 fd_max = -1; // HACK
\r
108 // add xboard input
\r
110 ASSERT(GUI->io->in_fd>=0);
\r
112 FD_SET(GUI->io->in_fd,set);
\r
113 if (GUI->io->in_fd > fd_max) fd_max = GUI->io->in_fd;
\r
115 // add engine input
\r
117 ASSERT(Engine->io->in_fd>=0);
\r
119 FD_SET(Engine->io->in_fd,set);
\r
120 if (Engine->io->in_fd > fd_max) fd_max = Engine->io->in_fd;
\r
122 // wait for something to read (no timeout)
\r
125 val = select(fd_max+1,set,NULL,NULL,NULL);
\r
126 if (val == -1 && errno != EINTR) my_fatal("adapter_step(): select(): %s\n",strerror(errno));
\r
129 if (FD_ISSET(GUI->io->in_fd,set)) io_get_update(GUI->io); // read some xboard input
\r
130 if (FD_ISSET(Engine->io->in_fd,set)) io_get_update(Engine->io); // read some engine input
\r