Beispiel #1
0
bool pipex_readln_nb(pipex_t *pipex, char *string){

    while(!pipex->io->in_eof && !io_line_ready(pipex->io) && io_peek(pipex->io)){
      io_get_update(pipex->io);
  }
  
  if(io_line_ready(pipex->io)){
    return pipex_readln(pipex,string);
  }else if(pipex->io->in_eof){
    string[0]='\0';
    pipex->state|=PIPEX_EOF;
    return FALSE;
  }else {  
    string[0]='\0';
    return FALSE;
  }
}
static void adapter_step() {

   fd_set set[1];
   int fd_max;
   int val;

   // process buffered lines

   while (io_line_ready(XBoard->io)) xboard_step(); // process available xboard lines
   while (io_line_ready(Engine->io)) engine_step(); // process available engine lines

   // init

   FD_ZERO(set);
   fd_max = -1; // HACK

   // add xboard input

   ASSERT(XBoard->io->in_fd>=0);

   FD_SET(XBoard->io->in_fd,set);
   if (XBoard->io->in_fd > fd_max) fd_max = XBoard->io->in_fd;

   // add engine input

   ASSERT(Engine->io->in_fd>=0);

   FD_SET(Engine->io->in_fd,set);
   if (Engine->io->in_fd > fd_max) fd_max = Engine->io->in_fd;

   // wait for something to read (no timeout)

   ASSERT(fd_max>=0);

   val = select(fd_max+1,set,NULL,NULL,NULL);
   if (val == -1 && errno != EINTR) my_fatal("adapter_step(): select(): %s\n",strerror(errno));

   if (val > 0) {
      if (FD_ISSET(XBoard->io->in_fd,set)) io_get_update(XBoard->io); // read some xboard input
      if (FD_ISSET(Engine->io->in_fd,set)) io_get_update(Engine->io); // read some engine input
   }
}
void engine_get(engine_t * engine, char string[], int size) {

   ASSERT(engine_is_ok(engine));
   ASSERT(string!=NULL);
   ASSERT(size>=256);

   while (!io_line_ready(engine->io)) {
      io_get_update(engine->io);
   }

   if (!io_get_line(engine->io,string,size)) { // EOF
      exit(EXIT_SUCCESS);
   }
}
Beispiel #4
0
bool pipex_readln(pipex_t *pipex, char *string){
    while (!io_line_ready(pipex->io)) {
	io_get_update(pipex->io);
   }
   if (!io_get_line(pipex->io,string,StringSize)) { // EOF
       string[0]='\0';
       pipex->state|=PIPEX_EOF;
       return FALSE;
   }
   if(strncmp(PIPEX_MAGIC,string,strlen(PIPEX_MAGIC))==0){
     my_fatal("%s\n",string+strlen(PIPEX_MAGIC)+1);
   }

   return TRUE;
}