Add forgotten files 1.4.70b
[polyglot.git] / uci2uci.cpp
index 8132224..edadeb4 100644 (file)
@@ -6,7 +6,6 @@
 #include <cstdlib>
 
 #include "util.h"
-#include "adapter.h"
 #include "board.h"
 #include "engine.h"
 #include "fen.h"
@@ -30,11 +29,9 @@ static board_t UCIboard[1];
 static bool Init=true;
 static int SavedMove=MoveNone;
 
-// defines
+// prototypes
 
-#ifdef _WIN32
-#define strcasecmp lstrcmpi
-#endif
+static void send_uci_options();
 
 // parse_position()
 
@@ -118,43 +115,57 @@ static void send_book_move(int move){
     gui_send(GUI,"bestmove %s",move_string);
 }
 
+// format_uci_option_line()
+
+static void format_uci_option_line(char * option_line,option_t *opt){
+    char option_string[StringSize];
+    int j;
+    strcpy(option_line,"");
+    strcat(option_line,"option name");
+    if(opt->mode&PG){
+        strcat(option_line," Polyglot");
+    }
+    sprintf(option_string," %s",opt->name);
+    strcat(option_line,option_string);
+    sprintf(option_string," type %s",opt->type);
+    strcat(option_line,option_string);
+    if(strcmp(opt->type,"button")){
+        sprintf(option_string," default %s",opt->default_);
+        strcat(option_line,option_string);
+    }
+    if(!strcmp(opt->type,"spin")){
+        sprintf(option_string," min %s",opt->min);
+        strcat(option_line,option_string);
+    }
+    if(!strcmp(opt->type,"spin")){
+        sprintf(option_string," max %s",opt->max);
+        strcat(option_line,option_string);
+    }
+    for(j=0;j<opt->var_nb;j++){
+        sprintf(option_string," var %s",opt->var[j]);
+        strcat(option_line,option_string);
+    }
+}
+
 // send_uci_options()
 
-void send_uci_options() {
+static void send_uci_options() {
     int i;
+    option_t *p=Option;
     char option_line[StringSize]="";
-    char option_string[StringSize]="";
     gui_send(GUI,"id name %s", Uci->name);
     gui_send(GUI,"id author %s", Uci->author);
     for(i=0;i<Uci->option_nb;i++){
-        strcat(option_line,"option");
-        if(strcmp(Uci->option[i].name,"<empty>")){
-            sprintf(option_string," name %s",Uci->option[i].name);
-            strcat(option_line,option_string);
-        }
-        if(strcmp(Uci->option[i].type,"<empty>")){
-            sprintf(option_string," type %s",Uci->option[i].type);
-            strcat(option_line,option_string);
-        }
-        if(strcmp(Uci->option[i].value,"<empty>")){
-            sprintf(option_string," default %s",Uci->option[i].value);
-            strcat(option_line,option_string);
-        }
-        if(strcmp(Uci->option[i].min,"<empty>")){
-            sprintf(option_string," min %s",Uci->option[i].min);
-            strcat(option_line,option_string);
-        }
-        if(strcmp(Uci->option[i].max,"<empty>")){
-            sprintf(option_string," max %s",Uci->option[i].max);
-            strcat(option_line,option_string);
-        }
-        if(strcmp(Uci->option[i].var,"<empty>")){
-            sprintf(option_string," var %s",Uci->option[i].var);
-            strcat(option_line,option_string);
-        }
-        gui_send(GUI,"%s",option_line);
-        strcpy(option_line,"");
+        format_uci_option_line(option_line,Uci->option+i);
+         gui_send(GUI,"%s",option_line);
     }
+    while(p->name){
+        if(p->mode &UCI){
+            format_uci_option_line(option_line,p);
+            gui_send(GUI,"%s",option_line);
+        }
+        p++;
+    }   
     gui_send(GUI,"uciok");
 }
 
@@ -163,48 +174,30 @@ void send_uci_options() {
 
 
 static void parse_setoption(const char string[]) {
-    parse_t parse[1];
-    char option[StringSize];
-    char name[StringSize];
-    char value[StringSize];
+    char *name;
+    char *pg_name;
+    char *value;
     char * string_copy;
     string_copy=my_strdup(string);
-    parse_open(parse,string_copy);
-    parse_add_keyword(parse,"setoption");
-    parse_add_keyword(parse,"name");
-    parse_add_keyword(parse,"value");
-    parse_get_word(parse,option,StringSize);
-    ASSERT(my_string_equal(option,"setoption"));
-    if(parse_get_word(parse,option,StringSize)){
-        if(my_string_equal(option,"name")){
-            parse_get_string(parse,name,StringSize);
-            if(parse_get_word(parse,option,StringSize)){
-                if(my_string_equal(option,"value")){
-                    parse_get_string(parse,value,StringSize);
-                    if(my_string_case_equal(name,PolyglotBookFile)){
-                        my_log("POLYGLOT *** SETTING BOOK ***\n");
-                        my_log("POLYGLOT BOOK \"%s\"\n",value);
-                        book_close();
-                        book_clear();
-                        book_open(value);
-                        if(!book_is_open()){
-                            my_log("POLYGLOT Unable to open book \"%s\"\n",value);
-                        }
-                    }else{
-                        engine_send(Engine,"%s",string);       
-                    }
-                }
-            }
+    if(match(string_copy,"setoption name * value *")){
+        name=Star[0];
+        value=Star[1];
+        if(match(name, "Polyglot *")){
+            pg_name=Star[0];
+            polyglot_set_option(pg_name,value);
+        }else{
+            engine_send(Engine,"%s",string);
         }
+    }else{
+        engine_send(Engine,"%s",string);
     }
-    parse_close(parse);
     free(string_copy);
 }
 
 
-// uci_gui_step()
+// uci2uci_gui_step()
 
-void uci_gui_step(char string[]) {
+void uci2uci_gui_step(char string[]) {
     int move;
      if(false){
      }else if(match(string,"uci")){
@@ -247,7 +240,7 @@ void uci_gui_step(char string[]) {
      engine_send(Engine,"%s",string);
 }
 
-void uci_engine_step(char string[]) {
+void uci2uci_engine_step(char string[]) {
     gui_send(GUI,string);
 }