#include "uci.h"\r
#include "uci2uci.h"\r
#include "util.h"\r
+#include "xboard2uci.h"\r
\r
// defines\r
\r
char *pg_name=Star[0];\r
polyglot_set_option(pg_name,value);\r
}else{\r
- start_protected_command();\r
- if(!uci_send_option(Uci, name, "%s", value)){\r
+ option_t *opt=option_find(Uci->option,name);\r
+ if(opt){\r
+ if(my_string_case_equal(opt->type,"check")){\r
+ value=my_string_equal(value,"1")?"true":"false";\r
+ }\r
+ start_protected_command();\r
+ uci_send_option(Uci, name, "%s", value);\r
+ end_protected_command();\r
+ }else{\r
gui_send(GUI,"Error (unknown option): %s",name); \r
}\r
- end_protected_command();\r
}\r
} else if (match(string,"option *")){\r
char *name=Star[0];\r
- start_protected_command();\r
+ if(match(name, "Polyglot *")){\r
+ char *pg_name=Star[0];\r
+ polyglot_set_option(pg_name,"<empty>");\r
+ }else{ \r
+ start_protected_command();\r
// value is ignored\r
- if(!uci_send_option(Uci, name, "%s", "<empty>")){\r
- gui_send(GUI,"Error (unknown option): %s",name); \r
- }; \r
- end_protected_command();\r
+ if(!uci_send_option(Uci, name, "%s", "<empty>")){\r
+ gui_send(GUI,"Error (unknown option): %s",name); \r
+ }; \r
+ end_protected_command();\r
+ }\r
} else if (XB->has_feature_smp && match(string,"cores *")){\r
int cores=atoi(Star[0]);\r
if(cores>=1){\r
gui_send(GUI,"1-0 {polyglot: resign"\r
" (illegal engine move black)}");\r
}\r
+ board_disp(board);\r
XB->result = TRUE;\r
mess();\r
}\r
strcat(option_line,option_string);\r
sprintf(option_string," -%s",opt->type);\r
strcat(option_line,option_string);\r
- if(strcmp(opt->type,"button") && strcmp(opt->type,"combo")){\r
+ if(!IS_BUTTON(opt) && strcmp(opt->type,"combo")){\r
if(strcmp(opt->type,"check")){\r
- sprintf(option_string," %s",opt->default_);\r
+ sprintf(option_string," %s",opt->value);\r
}else{\r
sprintf(option_string," %d",\r
- my_string_case_equal(opt->default_,"true")?1:0);\r
+ my_string_case_equal(opt->value,"true")||\r
+ my_string_equal(opt->value,"1")\r
+ ?1:0);\r
}\r
strcat(option_line,option_string);\r
}\r
- if(!strcmp(opt->type,"spin")){\r
+ if(IS_SPIN(opt)){\r
sprintf(option_string," %s",opt->min);\r
strcat(option_line,option_string);\r
}\r
- if(!strcmp(opt->type,"spin")){\r
+ if(IS_SPIN(opt)){\r
sprintf(option_string," %s",opt->max);\r
strcat(option_line,option_string);\r
}\r
for(j=0;j<opt->var_nb;j++){\r
- if(!strcmp(opt->var[j],opt->default_)){\r
+ if(!strcmp(opt->var[j],opt->value)){\r
sprintf(option_string," *%s",opt->var[j]);\r
}else{\r
sprintf(option_string," %s",opt->var[j]);\r
\r
static void send_xboard_options(){\r
\r
- char option_line[StringSize]="";\r
- const char * name;\r
- option_t *opt;\r
- \r
+ \r
gui_send(GUI,"feature done=0");\r
\r
gui_send(GUI,"feature analyze=1");\r
gui_send(GUI,"feature variants=\"normal\"");\r
}\r
\r
- option_start_iter(Uci->option);\r
- while((opt=option_next(Uci->option))){\r
- if(my_string_case_equal(opt->name,"UCI_AnalyseMode")) continue;\r
- if(my_string_case_equal(opt->name,"Ponder")) continue;\r
- if(my_string_case_equal(opt->name,"Hash")) continue;\r
- if(my_string_case_equal(opt->name,"NalimovPath")) continue;\r
- if((name=uci_thread_option(Uci))!=NULL &&\r
- my_string_case_equal(opt->name,name)) continue;\r
- \r
- format_xboard_option_line(option_line,opt);\r
- \r
- gui_send(GUI,"%s",option_line);\r
- }\r
-\r
+ xboard2uci_send_options();\r
+}\r
\r
- option_start_iter(Option);\r
- while((opt=option_next(Option))){\r
- if(opt->mode &XBOARD){\r
- format_xboard_option_line(option_line,opt);\r
- gui_send(GUI,"%s",option_line);\r
- }\r
- } \r
- gui_send(GUI,"feature done=1"); \r
+void xboard2uci_send_options(){\r
+ char option_line[StringSize]="";\r
+ const char * name;\r
+ option_t *opt;\r
+ \r
+ option_start_iter(Uci->option);\r
+ while((opt=option_next(Uci->option))){\r
+ if(my_string_case_equal(opt->name,"UCI_AnalyseMode")) continue;\r
+ if(my_string_case_equal(opt->name,"UCI_Opponent")) continue;\r
+ if(my_string_case_equal(opt->name,"UCI_Chess960")) continue;\r
+ if(my_string_case_equal(opt->name,"UCI_ShowCurrLine")) continue;\r
+ if(my_string_case_equal(opt->name,"UCI_ShowRefutations")) continue;\r
+ if(my_string_case_equal(opt->name,"UCI_ShredderbasesPath")) continue;\r
+ if(my_string_case_equal(opt->name,"UCI_SetPositionValue")) continue;\r
+ if(my_string_case_equal(opt->name,"UCI_DrawOffers")) continue;\r
+ if(my_string_case_equal(opt->name,"Ponder")) continue;\r
+ if(my_string_case_equal(opt->name,"Hash")) continue;\r
+ if(my_string_case_equal(opt->name,"NalimovPath")) continue;\r
+ if((name=uci_thread_option(Uci))!=NULL &&\r
+ my_string_case_equal(opt->name,name)) continue;\r
+ format_xboard_option_line(option_line,opt);\r
\r
+ gui_send(GUI,"%s",option_line);\r
+ }\r
+ \r
+ \r
+ option_start_iter(Option);\r
+ while((opt=option_next(Option))){\r
+ if(opt->mode &XBOARD){\r
+ format_xboard_option_line(option_line,opt);\r
+ gui_send(GUI,"%s",option_line);\r
+ }\r
+ } \r
+ gui_send(GUI,"feature done=1"); \r
+ \r
}\r
\r
// report_best_score()\r
\r
if (State->state == THINK || State->state == PONDER || State->state == ANALYSE) {\r
\r
+ // [VdB] moved up as we need the move number\r
+\r
+ game_get_board(Game,Uci->board);\r
+\r
// opening book\r
\r
- if (State->state == THINK && option_get_bool(Option,"Book")) {\r
+ if (State->state == THINK &&\r
+ option_get_bool(Option,"Book") &&\r
+ Uci->board->move_nb<option_get_int(Option,"BookDepth")\r
+ ) {\r
\r
- game_get_board(Game,Uci->board);\r
\r
move = book_move(Uci->board,option_get_bool(Option,"BookRandom"));\r
\r
// send_info()\r
\r
static void send_info() {\r
- if (XB->post) {\r
- gui_send(GUI,"%d %+d %.0f "S64_FORMAT" %s",Uci->best_depth>0?Uci->best_depth:1,\r
+ int min_depth;\r
+ if(option_get_bool(Option,"WbWorkArounds2")){\r
+ // Silly bug in some versions of WinBoard.\r
+ // depth <=1 clears the engine output window.\r
+ // Why shouldn't an engine be allowed to send info at depth 1?\r
+ min_depth=2;\r
+ }else{\r
+ min_depth=1;\r
+ }\r
+ gui_send(GUI,"%d %+d %.0f "S64_FORMAT" %s",Uci->best_depth>min_depth?Uci->best_depth:min_depth,\r
0,0,0.0,0,Uci->info); \r
- } \r
}\r
\r
// send_pv()\r