static void send_uci_options();
+
+// normalize_type()
+
+static void normalize_type(char *dst, const char* src){
+ if(option_get_int(Option,"UCIVersion") <=2){
+ if(IS_STRING(src)){
+ strcpy(dst,"string");
+ return;
+ }else if(IS_SPIN(src)){
+ strcpy(dst,"spin");
+ }else if(IS_BUTTON(src)){
+ strcpy(dst,"button");
+ }else{
+ strcpy(dst,src);
+ }
+ }else{
+ strcpy(dst,src);
+ }
+}
+
// parse_position()
static void parse_position(const char string[]) {
static void format_uci_option_line(char * option_line,option_t *opt){
char option_string[StringSize];
+ char type[StringSize];
int j;
strcpy(option_line,"");
+ // buffer overflow alert
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);
+ normalize_type(type,opt->type);
+ sprintf(option_string," type %s",type);
strcat(option_line,option_string);
- if(strcmp(opt->type,"button")){
- sprintf(option_string," default %s",opt->default_);
+ if(!IS_BUTTON(opt->type)){
+ sprintf(option_string," default %s",opt->value);
strcat(option_line,option_string);
}
- if(!strcmp(opt->type,"spin")){
+ if(IS_SPIN(opt->type)){
sprintf(option_string," min %s",opt->min);
strcat(option_line,option_string);
}
- if(!strcmp(opt->type,"spin")){
+ if(IS_SPIN(opt->type)){
sprintf(option_string," max %s",opt->max);
strcat(option_line,option_string);
}
// send_uci_options()
static void send_uci_options() {
- int i;
- option_t *p=Option;
+
+ option_t * opt;
char option_line[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++){
- format_uci_option_line(option_line,Uci->option+i);
- gui_send(GUI,"%s",option_line);
+ option_start_iter(Uci->option);
+ while((opt=option_next(Uci->option))){
+ format_uci_option_line(option_line,opt);
+ gui_send(GUI,"%s",option_line);
}
- while(p->name){
- if(p->mode &UCI){
- format_uci_option_line(option_line,p);
+ option_start_iter(Option);
+ while((opt=option_next(Option))){
+ if(opt->mode &UCI){
+ format_uci_option_line(option_line,opt);
gui_send(GUI,"%s",option_line);
}
- p++;
}
gui_send(GUI,"uciok");
}
Init=FALSE;
}
SavedMove=MoveNone;
- if(!strstr(string,"infinite")){
- move=book_move(UCIboard,option_get_bool("BookRandom"));
+ if(!strstr(string,"infinite")
+ && UCIboard->move_nb<option_get_int(Option,"BookDepth")){
+ move=book_move(UCIboard,option_get_bool(Option,"BookRandom"));
if (move != MoveNone && move_is_legal(move,UCIboard)) {
if(strstr(string,"ponder")){
SavedMove=move;