From: H.G. Muller Date: Thu, 9 Jun 2011 08:05:13 +0000 (+0200) Subject: version 1.4.44b X-Git-Url: http://winboard.nl/cgi-bin?p=polyglot.git;a=commitdiff_plain;h=ac968003c13bde5c86ffa19f8819e436b5bc03e6 version 1.4.44b --- diff --git a/ChangeLog b/ChangeLog index d7968be..ba3e9fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +=========1.4.44b================ +- "Implementation" of new buttons and controls. +- The "Persist" option is now persistent. That is if you turn of "Persist" then as a special case PG will remember this. +- There is now a "reset" button which restores the default options. The code is commented out since WB does not support it yet. =========1.4.42b================ - SaveSettingsOnExit/SaveFile renamed as Persist/PersistFile. - Many bug fixes in the persistence feature. diff --git a/config.h b/config.h index 28eb06b..6ebd48e 100644 --- a/config.h +++ b/config.h @@ -115,13 +115,13 @@ #define PACKAGE_NAME "polyglot" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "polyglot 1.4.42b" +#define PACKAGE_STRING "polyglot 1.4.44b" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "polyglot" /* Define to the version of this package. */ -#define PACKAGE_VERSION "1.4.42b" +#define PACKAGE_VERSION "1.4.44b" /* Define to 1 if the C compiler supports function prototypes. */ #define PROTOTYPES 1 @@ -150,7 +150,7 @@ #define TIME_WITH_SYS_TIME 1 /* Version number of package */ -#define VERSION "1.4.42b" +#define VERSION "1.4.44b" /* Define like PROTOTYPES; this can be used by system headers. */ #define __PROTOTYPES 1 diff --git a/configure b/configure index 0e727f1..a66a968 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for polyglot 1.4.42b. +# Generated by GNU Autoconf 2.61 for polyglot 1.4.44b. # # Report bugs to . # @@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='polyglot' PACKAGE_TARNAME='polyglot' -PACKAGE_VERSION='1.4.42b' -PACKAGE_STRING='polyglot 1.4.42b' +PACKAGE_VERSION='1.4.44b' +PACKAGE_STRING='polyglot 1.4.44b' PACKAGE_BUGREPORT='michel.vandenbergh@uhasselt.be' ac_unique_file="mainloop.c" @@ -1207,7 +1207,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures polyglot 1.4.42b to adapt to many kinds of systems. +\`configure' configures polyglot 1.4.44b to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1273,7 +1273,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of polyglot 1.4.42b:";; + short | recursive ) echo "Configuration of polyglot 1.4.44b:";; esac cat <<\_ACEOF @@ -1357,7 +1357,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -polyglot configure 1.4.42b +polyglot configure 1.4.44b generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1371,7 +1371,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by polyglot $as_me 1.4.42b, which was +It was created by polyglot $as_me 1.4.44b, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ @@ -2061,7 +2061,7 @@ fi # Define the identity of the package. PACKAGE='polyglot' - VERSION='1.4.42b' + VERSION='1.4.44b' cat >>confdefs.h <<_ACEOF @@ -6848,7 +6848,7 @@ exec 6>&1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by polyglot $as_me 1.4.42b, which was +This file was extended by polyglot $as_me 1.4.44b, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6901,7 +6901,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -polyglot config.status 1.4.42b +polyglot config.status 1.4.44b configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/configure.ac b/configure.ac index ced072e..873bc6c 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ(2.61) -AC_INIT([polyglot], [1.4.42b], [michel.vandenbergh@uhasselt.be]) +AC_INIT([polyglot], [1.4.44b], [michel.vandenbergh@uhasselt.be]) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([mainloop.c]) AC_CONFIG_HEADER([config.h]) diff --git a/ini.c b/ini.c index 5509547..69f27b2 100644 --- a/ini.c +++ b/ini.c @@ -209,6 +209,19 @@ void ini_clear(ini_t *ini){ ini->index=0; } +// ini_copy() + +void ini_copy(ini_t *dst, ini_t *src){ + int i; + dst->index=src->index; + dst->iter=src->iter; + for(i=0;iindex;i++){ + my_string_set(&dst->entries[i].section,src->entries[i].section); + my_string_set(&dst->entries[i].name,src->entries[i].name); + my_string_set(&dst->entries[i].value,src->entries[i].value); + } +} + // ini_find() ini_entry_t *ini_find(ini_t *ini, const char *section, const char* name){ @@ -309,7 +322,6 @@ int ini_parse(ini_t *ini, const char *filename){ void ini_disp(ini_t *ini){ int i; - my_log("POLYGLOT Current options\n"); for(i=0;iindex;i++){ my_log("POLYGLOT [%s] %s=\"%s\"\n", (ini->entries)[i].section, @@ -334,5 +346,4 @@ ini_entry_t * ini_next(ini_t *ini){ return &ini->entries[ini->iter++]; } -// ini_create_pg() diff --git a/ini.h b/ini.h index 9df67fc..c7c1c06 100644 --- a/ini.h +++ b/ini.h @@ -38,6 +38,7 @@ typedef enum { extern void ini_init (ini_t *ini); extern void ini_clear (ini_t *ini); +extern void ini_copy (ini_t *dst, ini_t *src); extern int ini_parse (ini_t *ini, const char *filename); extern void ini_disp (ini_t *ini); extern void ini_insert (ini_t *ini, ini_entry_t *entry); diff --git a/main.c b/main.c index fad2ed8..8bd6276 100644 --- a/main.c +++ b/main.c @@ -36,7 +36,7 @@ // constants -static const char * const Version = "1.4.42b"; +static const char * const Version = "1.4.44b"; static const char * const HelpMessage = "\ SYNTAX\n\ * polyglot [configfile] [-noini] [-ec engine] [-ed enginedirectory] [-en enginename] [-log] [-lf logfile] [-hash value] [-bk book] [-pg =]* [-uci =]*\n\ @@ -82,7 +82,7 @@ static void write_ini(const char *filename, FILE *f; f=fopen(filename,"w"); if(!f){ - my_fatal("ini_create_pg(): Cannot open %s for writing.\n",filename); + my_fatal("write_ini(): Cannot open %s for writing.\n",filename); } fprintf(f,"; You may edit this file to set options for the\n" "; UCI engine whose PolyGlot name is %s.\n" @@ -93,7 +93,7 @@ static void write_ini(const char *filename, option_start_iter(pg_options); while((opt=option_next(pg_options))){ if(!my_string_equal(opt->value,opt->default_)&& - !my_string_case_equal(opt->type,"button") && + !IS_BUTTON(opt) && (opt->mode & XBOARD)){ snprintf(tmp,sizeof(tmp),"%s=%s\n",opt->name,opt->value); tmp[sizeof(tmp)-1]='\0'; @@ -104,7 +104,7 @@ static void write_ini(const char *filename, option_start_iter(uci_options); while((opt=option_next(uci_options))){ if(!my_string_equal(opt->value,opt->default_)&& - !my_string_case_equal(opt->type,"button")){ + !IS_BUTTON(opt)){ snprintf(tmp,sizeof(tmp),"%s=%s\n",opt->name,opt->value); tmp[sizeof(tmp)-1]='\0'; fprintf(f,"%s",tmp); @@ -113,6 +113,47 @@ static void write_ini(const char *filename, fclose(f); } +// write_ini_ex() + +static void write_ini_ex(const char *filename, + ini_t *ini){ + ini_entry_t *entry; + char tmp[StringSize]; + FILE *f; + f=fopen(filename,"w"); + if(!f){ + my_fatal("write_ini_ex(): Cannot open %s for writing.\n",filename); + } + fprintf(f,"; You may edit this file to set options for the\n" + "; UCI engine whose PolyGlot name is %s.\n" + "; You may also safely delete this file\n" + "; to restore the default options.\n", + option_get_string(Option,"EngineName")); + fprintf(f,"[PolyGlot]\n"); + ini_start_iter(ini); + while((entry=ini_next(ini))){ + if(my_string_case_equal(entry->section,"polyglot")){ + snprintf(tmp,sizeof(tmp),"%s=%s\n", + entry->name, + entry->value); + tmp[sizeof(tmp)-1]='\0'; + fprintf(f,"%s",tmp); + } + } + fprintf(f,"[Engine]\n"); + ini_start_iter(ini); + while((entry=ini_next(ini))){ + if(my_string_case_equal(entry->section,"engine")){ + snprintf(tmp,sizeof(tmp),"%s=%s\n", + entry->name, + entry->value); + tmp[sizeof(tmp)-1]='\0'; + fprintf(f,"%s",tmp); + } + } + fclose(f); +} + // main() @@ -121,7 +162,7 @@ int main(int argc, char * argv[]) { ini_entry_t *entry; char *arg; int arg_index; - bool NoIni; + bool NoIni, Persist; if(!DEBUG){ printf("PolyGlot %s by Fabien Letouzey.\n",Version); @@ -299,8 +340,8 @@ int main(int argc, char * argv[]) { my_log("POLYGLOT *** Switching to UCI mode ***\n"); } - // initialize uci parsing and send uci command. Parse options and wait - // for uciok + // initialize uci parsing and send uci command. + // Parse options and wait for uciok uci_open(Uci,Engine); @@ -320,16 +361,34 @@ int main(int argc, char * argv[]) { option_set(Option,"PersistFile",tmp); } - // if "Persist" is true, load the persist file! - - if(option_get_bool(Option,"Persist")){ - my_log("POLYGLOT PersistFile=%s\n",option_get_string(Option,"PersistFile")); - if(ini_parse(ini_save,option_get_string(Option,"PersistFile"))){ - my_log("POLYGLOT Unable to open PersistFile\n"); - } + // Load the persist file + + my_log("POLYGLOT PersistFile=%s\n",option_get_string(Option,"PersistFile")); + if(ini_parse(ini_save,option_get_string(Option,"PersistFile"))){ + my_log("POLYGLOT Unable to open PersistFile\n"); + } + + // Do we want to use the persist file? + + entry=ini_find(ini_save,"polyglot","Persist"); + if(!entry){ + Persist=option_get_bool(Option,"Persist"); + }else{ + Persist=(my_string_case_equal(entry->value,"false") || + my_string_equal(entry->value,"0"))?FALSE:TRUE; } - - // parse the command line and merge remaining options + + // if "Persist" now happens to be false, forget about the + // persist file + + if(!Persist){ + my_log("POLYGLOT Ignoring PersistFile"); + ini_clear(ini_save); + } + + option_set(Option,"Persist",Persist?"true":"false"); + + // parse the command line and merge remaining options arg_index=1; while((arg=argv[arg_index])){ @@ -380,7 +439,7 @@ int main(int argc, char * argv[]) { // remind the reader once again about options - my_log("POLYGLOG Options from save file and command line\n"); + my_log("POLYGLOG Options from PersistFile and command line\n"); ini_disp(ini_save); // extract PG options; this time do not set the default @@ -452,7 +511,24 @@ int main(int argc, char * argv[]) { // polyglot_set_option() void polyglot_set_option(const char *name, const char *value){ // this must be cleaned up! + option_t *opt; my_log("POLYGLOT Setting PolyGlot option %s=\"%s\"\n",name,value); + if(my_string_case_equal(name,"Defaults")){ + option_start_iter(Uci->option); + while((opt=option_next(Uci->option))){ + if(!IS_BUTTON(opt)){ + // also sets opt->value + uci_send_option(Uci,opt->name,opt->default_); + } + } + option_start_iter(Option); + while((opt=option_next(Option))){ + if(!IS_BUTTON(opt)){ + polyglot_set_option(opt->name,opt->default_); + } + } + xboard2uci_send_options(); + } option_set(Option,name,value); if(option_get_bool(Option,"Book")&&(my_string_case_equal(name,"BookFile")||my_string_case_equal(name,"Book"))){ my_log("POLYGLOT *** SETTING BOOK ***\n"); @@ -464,7 +540,7 @@ void polyglot_set_option(const char *name, const char *value){ // this must be c my_log("POLYGLOT Unable to open book \"%s\"\n",option_get_string(Option,"BookFile")); } }else if(option_get_bool(Option,"Log")&&(my_string_case_equal(name,"LogFile") ||my_string_case_equal(name,"Log"))){ - my_log("POLYGLOT *** SETTING LOGFILE ***\n"); + my_log("POLYGLOT *** SWITCHING LOGFILE ***\n"); my_log("POLYGLOT LOGFILE \"%s\"\n",option_get_string(Option,"LogFile")); my_log_close(); my_log_open(option_get_string(Option,"LogFile")); @@ -504,6 +580,10 @@ static void init_book(){ void quit() { + ini_t empty[1]; + + ini_init(empty); + my_log("POLYGLOT *** QUIT ***\n"); if (Init) { @@ -514,9 +594,17 @@ void quit() { engine_close(Engine); } + // printf("def=%s val=%s\n",option_get_default(Option,"Persist"),option_get_string(Option,"Persist")); if(option_get_bool(Option,"Persist")){ write_ini(option_get_string(Option,"PersistFile"), Option,Uci->option); + }else if(!my_string_case_equal(option_get_default(Option,"Persist"), + option_get_string(Option,"Persist"))){ + // Hack + ini_insert_ex(empty,"PolyGlot","Persist","false"); + write_ini_ex(option_get_string(Option,"PersistFile"),empty); + }else{ + write_ini_ex(option_get_string(Option,"PersistFile"),empty); } my_log("POLYGLOT Calling exit\n"); exit(EXIT_SUCCESS); diff --git a/option.c b/option.c index 6ac2cf1..701a251 100644 --- a/option.c +++ b/option.c @@ -78,6 +78,11 @@ option_t DefaultOptions[] = { { "WbWorkArounds", "check","0","0", "true" , NULL,0,NNB, PG|XBOARD}, { "WbWorkArounds2", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, + + // Buttons + +// { "Defaults", "reset","0","0", "false" , NULL,0,NNB, PG|XBOARD}, + { NULL, NULL,"0","0", NULL , NULL,0,NNB, 0}, }; @@ -167,6 +172,11 @@ bool option_set(option_list_t *option, opt = option_find(option,name); if (opt == NULL) return FALSE; + if(my_string_case_equal(opt->type,"check")){ + value=(my_string_equal(value,"1")|| + my_string_case_equal(value,"true"))?"true":"false"; + } + my_string_set(&opt->value,value); if (UseDebug) my_log("POLYGLOT OPTION SET \"%s\" -> \"%s\"\n",opt->name,opt->value); @@ -187,6 +197,11 @@ bool option_set_default(option_list_t *option, opt = option_find(option,name); if (opt == NULL) return FALSE; + if(my_string_case_equal(opt->type,"check")){ + value=(my_string_equal(value,"1")|| + my_string_case_equal(value,"true"))?"true":"false"; + } + my_string_set(&opt->default_,value); if (UseDebug) my_log("POLYGLOT OPTION DEFAULT SET \"%s\" -> \"%s\"\n",opt->name,opt->default_); diff --git a/option.h b/option.h index a4cff3b..aa3190c 100644 --- a/option.h +++ b/option.h @@ -17,6 +17,13 @@ #define PG (1<<2) #define OptionNb 256 +#define IS_BUTTON(opt) (my_string_case_equal(opt->type,"button") || \ + my_string_case_equal(opt->type,"save") || \ + my_string_case_equal(opt->type,"reset")) \ + +#define IS_SPIN(opt) (my_string_case_equal(opt->type,"spin") || \ + my_string_case_equal(opt->type,"slider")) \ + // types typedef struct { // TODO: put back in more logical order diff --git a/polyglot.spec b/polyglot.spec index 5c1a96c..8afeafb 100644 --- a/polyglot.spec +++ b/polyglot.spec @@ -1,6 +1,6 @@ Summary: A Winboard protocol to UCI protocol adapter Name: polyglot -Version: 1.4.42b +Version: 1.4.44b Release: 1 License: GPL Group: Amusement/Games diff --git a/uci.c b/uci.c index 03c6647..574c288 100644 --- a/uci.c +++ b/uci.c @@ -271,7 +271,7 @@ bool uci_send_option(uci_t * uci, const char option[], const char format[], ...) opt=option_find(uci->option,option); if(opt){ found=TRUE; - if(!my_string_case_equal(opt->type,"button")){ + if(!IS_BUTTON(opt)){ if(!my_string_equal(opt->value,value)){ engine_send(uci->engine,"setoption name %s value %s", opt->name,value); diff --git a/uci2uci.c b/uci2uci.c index 1c13d0f..f7cb63e 100644 --- a/uci2uci.c +++ b/uci2uci.c @@ -130,15 +130,15 @@ static void format_uci_option_line(char * option_line,option_t *opt){ strcat(option_line,option_string); sprintf(option_string," type %s",opt->type); strcat(option_line,option_string); - if(strcmp(opt->type,"button")){ + if(!IS_BUTTON(opt)){ sprintf(option_string," default %s",opt->default_); strcat(option_line,option_string); } - if(!strcmp(opt->type,"spin")){ + if(IS_SPIN(opt)){ sprintf(option_string," min %s",opt->min); strcat(option_line,option_string); } - if(!strcmp(opt->type,"spin")){ + if(IS_SPIN(opt)){ sprintf(option_string," max %s",opt->max); strcat(option_line,option_string); } diff --git a/util.h b/util.h index bf45896..8b670e8 100644 --- a/util.h +++ b/util.h @@ -90,6 +90,8 @@ } \ } \ + + // types typedef signed char sint8; diff --git a/xboard2uci.c b/xboard2uci.c index d3d91c5..2097de9 100644 --- a/xboard2uci.c +++ b/xboard2uci.c @@ -27,6 +27,7 @@ #include "uci.h" #include "uci2uci.h" #include "util.h" +#include "xboard2uci.h" // defines @@ -468,12 +469,17 @@ void xboard2uci_gui_step(char string[]) { } } else if (match(string,"option *")){ char *name=Star[0]; - start_protected_command(); + if(match(name, "Polyglot *")){ + char *pg_name=Star[0]; + polyglot_set_option(pg_name,""); + }else{ + start_protected_command(); // value is ignored - if(!uci_send_option(Uci, name, "%s", "")){ - gui_send(GUI,"Error (unknown option): %s",name); - }; - end_protected_command(); + if(!uci_send_option(Uci, name, "%s", "")){ + gui_send(GUI,"Error (unknown option): %s",name); + }; + end_protected_command(); + } } else if (XB->has_feature_smp && match(string,"cores *")){ int cores=atoi(Star[0]); if(cores>=1){ @@ -768,7 +774,7 @@ void format_xboard_option_line(char * option_line, option_t *opt){ strcat(option_line,option_string); sprintf(option_string," -%s",opt->type); strcat(option_line,option_string); - if(strcmp(opt->type,"button") && strcmp(opt->type,"combo")){ + if(!IS_BUTTON(opt) && strcmp(opt->type,"combo")){ if(strcmp(opt->type,"check")){ sprintf(option_string," %s",opt->value); }else{ @@ -779,11 +785,11 @@ void format_xboard_option_line(char * option_line, option_t *opt){ } strcat(option_line,option_string); } - if(!strcmp(opt->type,"spin")){ + if(IS_SPIN(opt)){ sprintf(option_string," %s",opt->min); strcat(option_line,option_string); } - if(!strcmp(opt->type,"spin")){ + if(IS_SPIN(opt)){ sprintf(option_string," %s",opt->max); strcat(option_line,option_string); } @@ -811,10 +817,7 @@ void format_xboard_option_line(char * option_line, option_t *opt){ static void send_xboard_options(){ - char option_line[StringSize]=""; - const char * name; - option_t *opt; - + gui_send(GUI,"feature done=0"); gui_send(GUI,"feature analyze=1"); @@ -857,41 +860,44 @@ static void send_xboard_options(){ gui_send(GUI,"feature variants=\"normal\""); } - option_start_iter(Uci->option); - while((opt=option_next(Uci->option))){ - if(my_string_case_equal(opt->name,"UCI_AnalyseMode")) continue; - if(my_string_case_equal(opt->name,"UCI_Opponent")) continue; - if(my_string_case_equal(opt->name,"UCI_Chess960")) continue; - if(my_string_case_equal(opt->name,"UCI_ShowCurrLine")) continue; - if(my_string_case_equal(opt->name,"UCI_ShowRefutations")) continue; - if(my_string_case_equal(opt->name,"UCI_ShredderbasesPath")) continue; - if(my_string_case_equal(opt->name,"UCI_SetPositionValue")) continue; - if(my_string_case_equal(opt->name,"UCI_DrawOffers")) continue; - if(my_string_case_equal(opt->name,"Ponder")) continue; - if(my_string_case_equal(opt->name,"Hash")) continue; - if(my_string_case_equal(opt->name,"NalimovPath")) continue; - if((name=uci_thread_option(Uci))!=NULL && - my_string_case_equal(opt->name,name)) continue; - format_xboard_option_line(option_line,opt); - - gui_send(GUI,"%s",option_line); - } - + xboard2uci_send_options(); +} - option_start_iter(Option); - while((opt=option_next(Option))){ - if(opt->mode &XBOARD){ - if(my_string_case_equal(opt->name,"Persist") && - my_string_case_equal(option_get_default(Option,opt->name), - "false")){ - continue; - } - format_xboard_option_line(option_line,opt); - gui_send(GUI,"%s",option_line); - } - } - gui_send(GUI,"feature done=1"); +void xboard2uci_send_options(){ + char option_line[StringSize]=""; + const char * name; + option_t *opt; + + option_start_iter(Uci->option); + while((opt=option_next(Uci->option))){ + if(my_string_case_equal(opt->name,"UCI_AnalyseMode")) continue; + if(my_string_case_equal(opt->name,"UCI_Opponent")) continue; + if(my_string_case_equal(opt->name,"UCI_Chess960")) continue; + if(my_string_case_equal(opt->name,"UCI_ShowCurrLine")) continue; + if(my_string_case_equal(opt->name,"UCI_ShowRefutations")) continue; + if(my_string_case_equal(opt->name,"UCI_ShredderbasesPath")) continue; + if(my_string_case_equal(opt->name,"UCI_SetPositionValue")) continue; + if(my_string_case_equal(opt->name,"UCI_DrawOffers")) continue; + if(my_string_case_equal(opt->name,"Ponder")) continue; + if(my_string_case_equal(opt->name,"Hash")) continue; + if(my_string_case_equal(opt->name,"NalimovPath")) continue; + if((name=uci_thread_option(Uci))!=NULL && + my_string_case_equal(opt->name,name)) continue; + format_xboard_option_line(option_line,opt); + gui_send(GUI,"%s",option_line); + } + + + option_start_iter(Option); + while((opt=option_next(Option))){ + if(opt->mode &XBOARD){ + format_xboard_option_line(option_line,opt); + gui_send(GUI,"%s",option_line); + } + } + gui_send(GUI,"feature done=1"); + } // report_best_score() diff --git a/xboard2uci.h b/xboard2uci.h index 1e44bb7..94eaa8c 100644 --- a/xboard2uci.h +++ b/xboard2uci.h @@ -15,6 +15,8 @@ extern void xboard2uci_init (); extern void xboard2uci_gui_step (char string[]); extern void xboard2uci_engine_step (char string[]); +extern void xboard2uci_send_options (); + #endif // !defined XBOARD2UCI_H