\r
static const bool UseDebug = FALSE;\r
\r
-static const int StringSize = 4096;\r
+#define StringSize ((int)4096)\r
\r
// variables\r
\r
\r
// functions\r
\r
+\r
+// uci_adapt_UCI3()\r
+\r
+static void apply_UCI3_heuristics(option_t *opt){\r
+ if(option_get_int(Option,"UCIVersion")>2){\r
+ return;\r
+ }\r
+ if(!my_string_equal(opt->type,"string")){\r
+ return;\r
+ }\r
+ if(!strncmp(opt->name,"UCI_",4)){\r
+ return;\r
+ }\r
+ if(my_string_case_contains(opt->name,"file")){\r
+ my_string_set(&opt->type,"file");\r
+ return;\r
+ }\r
+ if(my_string_case_contains(opt->name,"path")){\r
+ my_string_set(&opt->type,"path");\r
+ return;\r
+ }\r
+}\r
+\r
// uci_set_threads()\r
\r
void uci_set_threads(uci_t * uci, int n) {\r
- ASSERT(n>=1);\r
const char *thread_option=uci_thread_option(uci);\r
+ ASSERT(n>=1);\r
if(thread_option){\r
uci_send_option(uci,thread_option,"%d",n);\r
}\r
uci->best_depth = 0;\r
uci->best_sel_depth = 0;\r
line_clear(uci->best_pv);\r
-\r
- uci->node_nb = 0;\r
+// make the default 1 instead of 0 so that info lines can be recognized by their node number 0\r
+ uci->node_nb = 1;\r
uci->time = 0.0;\r
uci->speed = 0.0;\r
uci->cpu = 0.0;\r
opt=option_find(uci->option,option);\r
if(opt){\r
found=TRUE;\r
- if(!my_string_case_equal(opt->type,"button")){\r
+ if(!IS_BUTTON(opt->type)){\r
if(!my_string_equal(opt->value,value)){\r
engine_send(uci->engine,"setoption name %s value %s",\r
opt->name,value);\r
}else if(my_string_case_equal(argument,"Resign")){\r
event |= EVENT_RESIGN;\r
}else{\r
- strcpy(uci->info,argument);\r
+ snprintf(uci->info,sizeof(uci->info),"%s",argument);\r
+ uci->info[sizeof(uci->info)-1]='\0';\r
event|=EVENT_INFO;\r
}\r
// TODO: argument to EOS\r
} else {\r
\r
my_log("POLYGLOT unknown option \"%s\" for command \"%s\"\n",option,command);\r
- // this is for buggy engines; it should probably be protected\r
+ // This should probably be protected\r
// by a "WorkAround" option.\r
- strcpy(uci->info,option);\r
- strcat(uci->info," ");\r
- strcat(uci->info,argument);\r
+ snprintf(uci->info,sizeof(uci->info),"%s %s",option,argument);\r
+ uci->info[sizeof(uci->info)-1]='\0';\r
event|=EVENT_INFO;\r
}\r
}\r
}\r
\r
parse_close(parse);\r
+\r
+ apply_UCI3_heuristics(opt);\r
option_insert(uci->option,opt);\r
option_free(opt);\r
\r