version 1.4w10UCIb16
[polyglot.git] / uci.cpp
diff --git a/uci.cpp b/uci.cpp
index c12c67b..a84628e 100644 (file)
--- a/uci.cpp
+++ b/uci.cpp
@@ -80,6 +80,20 @@ bool uci_thread_option_exist(uci_t * uci) {
     return false;\r
 }\r
 \r
+const char * uci_thread_option(uci_t * uci){\r
+    const char **thread_options_copy = thread_options;\r
+    const char *thread_option;\r
+    int i;\r
+    while((thread_option = *(thread_options_copy++))){\r
+        i=uci_get_option(uci,thread_option);\r
+        if(i>=0){\r
+            return Uci->option[i].name;\r
+            break;\r
+        }\r
+    }\r
+    return NULL;\r
+}\r
+\r
 // uci_is_ok()\r
 \r
 static bool uci_is_ok(const uci_t * uci) {\r
@@ -144,7 +158,7 @@ void uci_close(uci_t * uci) {
    for (i = 0; i < uci->option_nb; i++) {\r
       opt = &uci->option[i];\r
       my_string_clear(&opt->name);\r
-      my_string_clear(&opt->value);\r
+      my_string_clear(&opt->default_);\r
    }\r
 \r
    uci->option_nb = 0;\r
@@ -305,9 +319,9 @@ void uci_send_option(uci_t * uci, const char option[], const char format[], ...)
 \r
       opt = &uci->option[i];\r
 \r
-      if (my_string_case_equal(opt->name,option) && !my_string_equal(opt->value,value)) {\r
+      if (my_string_case_equal(opt->name,option) && !my_string_equal(opt->default_,value)) {\r
          engine_send(uci->engine,"setoption name %s value %s",opt->name,value);\r
-         my_string_set(&opt->value,value);\r
+         my_string_set(&opt->default_,value);\r
          break;\r
       }\r
    }\r
@@ -740,12 +754,13 @@ int uci_get_option(uci_t * uci, const char * name){
 \r
 void uci_set_option(uci_t * uci,\r
                     const char * name,\r
-                    const char * value,\r
+                    const char * default_,\r
                     const char * type,\r
                     const char * max,\r
                     const char * min,\r
-                    const char * var){\r
-    int i;\r
+                    int var_nb,\r
+                    const char * var[]){\r
+    int i,j;\r
     for(i=0;i<Uci->option_nb;i++){\r
         if(my_string_equal(Uci->option[i].name,name)){\r
             break;\r
@@ -753,11 +768,14 @@ void uci_set_option(uci_t * uci,
    }\r
    if(i<OptionNb){\r
        my_string_set(&(Uci->option[i].name),name);\r
-       my_string_set(&(Uci->option[i].value),value);\r
+       my_string_set(&(Uci->option[i].default_),default_);\r
        my_string_set(&(Uci->option[i].type),type);\r
        my_string_set(&(Uci->option[i].min),min);\r
        my_string_set(&(Uci->option[i].max),max);\r
-       my_string_set(&(Uci->option[i].var),var);\r
+       Uci->option[i].var_nb=var_nb;\r
+       for(j=0;j<var_nb;j++){\r
+           my_string_set(&(Uci->option[i].var[j]),var[j]);\r
+       }\r
        if(i==Uci->option_nb){\r
            Uci->option_nb++;\r
        }\r
@@ -786,11 +804,15 @@ static void parse_option(uci_t * uci, const char string[]) {
    opt = &uci->option[uci->option_nb];\r
    uci->option_nb++;\r
 \r
+   opt->value=NULL;\r
+   opt->mode=0;\r
+\r
    opt->name = NULL;\r
    my_string_set(&opt->name,"<empty>");\r
 \r
-   opt->value = NULL;\r
-   my_string_set(&opt->value,"<empty>");\r
+   \r
+   opt->default_ = NULL;\r
+   my_string_set(&opt->default_,"<empty>");\r
 \r
    opt->max = NULL;\r
    my_string_set(&opt->max,"<empty>");\r
@@ -801,9 +823,8 @@ static void parse_option(uci_t * uci, const char string[]) {
    opt->type = NULL;\r
    my_string_set(&opt->type,"<empty>");\r
 \r
-   opt->var = NULL;\r
-   my_string_set(&opt->var,"<empty>");\r
-\r
+   opt->var_nb=0;\r
+   \r
    parse_open(parse,string);\r
    parse_add_keyword(parse,"default");\r
    parse_add_keyword(parse,"max");\r
@@ -815,7 +836,6 @@ static void parse_option(uci_t * uci, const char string[]) {
    // loop\r
 \r
    while (parse_get_word(parse,option,StringSize)) {\r
-\r
       parse_get_string(parse,argument,StringSize);\r
       if (UseDebug) my_log("POLYGLOT COMMAND \"%s\" OPTION \"%s\" ARGUMENT \"%s\"\n",command,option,argument);\r
 \r
@@ -826,7 +846,7 @@ static void parse_option(uci_t * uci, const char string[]) {
          // ASSERT(!my_string_empty(argument)); // HACK for Pepito\r
 \r
          if (!my_string_empty(argument)) {\r
-            my_string_set(&opt->value,argument);\r
+            my_string_set(&opt->default_,argument);\r
          }\r
 \r
       } else if (my_string_equal(option,"max")) {\r
@@ -855,7 +875,8 @@ static void parse_option(uci_t * uci, const char string[]) {
       } else if (my_string_equal(option,"var")) {\r
 \r
          ASSERT(!my_string_empty(argument));\r
-         my_string_set(&opt->var,argument);\r
+         my_string_set(&opt->var[opt->var_nb++],argument);\r
+         if(opt->var_nb==VarNb) break;\r
 \r
       } else {\r
 \r
@@ -865,7 +886,7 @@ static void parse_option(uci_t * uci, const char string[]) {
 \r
    parse_close(parse);\r
 \r
-   if (UseDebug) my_log("POLYGLOT option name \"%s\" value \"%s\"\n",opt->name,opt->value);\r
+   if (UseDebug) my_log("POLYGLOT option name \"%s\" default \"%s\"\n",opt->name,opt->default_);\r
 }\r
 \r
 // parse_score()\r