// constants\r
\r
\r
-static const char * const Version = "1.4.42b";\r
+static const char * const Version = "1.4.44b";\r
static const char * const HelpMessage = "\\r
SYNTAX\n\\r
* polyglot [configfile] [-noini] [-ec engine] [-ed enginedirectory] [-en enginename] [-log] [-lf logfile] [-hash value] [-bk book] [-pg <name>=<value>]* [-uci <name>=<value>]*\n\\r
FILE *f;\r
f=fopen(filename,"w");\r
if(!f){\r
- my_fatal("ini_create_pg(): Cannot open %s for writing.\n",filename);\r
+ my_fatal("write_ini(): Cannot open %s for writing.\n",filename);\r
}\r
fprintf(f,"; You may edit this file to set options for the\n"\r
"; UCI engine whose PolyGlot name is %s.\n"\r
option_start_iter(pg_options);\r
while((opt=option_next(pg_options))){\r
if(!my_string_equal(opt->value,opt->default_)&&\r
- !my_string_case_equal(opt->type,"button") &&\r
+ !IS_BUTTON(opt) &&\r
(opt->mode & XBOARD)){\r
snprintf(tmp,sizeof(tmp),"%s=%s\n",opt->name,opt->value);\r
tmp[sizeof(tmp)-1]='\0';\r
option_start_iter(uci_options);\r
while((opt=option_next(uci_options))){\r
if(!my_string_equal(opt->value,opt->default_)&&\r
- !my_string_case_equal(opt->type,"button")){\r
+ !IS_BUTTON(opt)){\r
snprintf(tmp,sizeof(tmp),"%s=%s\n",opt->name,opt->value);\r
tmp[sizeof(tmp)-1]='\0';\r
fprintf(f,"%s",tmp);\r
fclose(f);\r
}\r
\r
+// write_ini_ex()\r
+\r
+static void write_ini_ex(const char *filename,\r
+ ini_t *ini){\r
+ ini_entry_t *entry;\r
+ char tmp[StringSize];\r
+ FILE *f;\r
+ f=fopen(filename,"w");\r
+ if(!f){\r
+ my_fatal("write_ini_ex(): Cannot open %s for writing.\n",filename);\r
+ }\r
+ fprintf(f,"; You may edit this file to set options for the\n"\r
+ "; UCI engine whose PolyGlot name is %s.\n"\r
+ "; You may also safely delete this file\n"\r
+ "; to restore the default options.\n",\r
+ option_get_string(Option,"EngineName"));\r
+ fprintf(f,"[PolyGlot]\n");\r
+ ini_start_iter(ini);\r
+ while((entry=ini_next(ini))){\r
+ if(my_string_case_equal(entry->section,"polyglot")){\r
+ snprintf(tmp,sizeof(tmp),"%s=%s\n",\r
+ entry->name,\r
+ entry->value);\r
+ tmp[sizeof(tmp)-1]='\0';\r
+ fprintf(f,"%s",tmp);\r
+ }\r
+ }\r
+ fprintf(f,"[Engine]\n");\r
+ ini_start_iter(ini);\r
+ while((entry=ini_next(ini))){\r
+ if(my_string_case_equal(entry->section,"engine")){\r
+ snprintf(tmp,sizeof(tmp),"%s=%s\n",\r
+ entry->name,\r
+ entry->value);\r
+ tmp[sizeof(tmp)-1]='\0';\r
+ fprintf(f,"%s",tmp);\r
+ }\r
+ }\r
+ fclose(f);\r
+}\r
+\r
\r
// main()\r
\r
ini_entry_t *entry;\r
char *arg;\r
int arg_index;\r
- bool NoIni;\r
+ bool NoIni, Persist;\r
\r
if(!DEBUG){\r
printf("PolyGlot %s by Fabien Letouzey.\n",Version);\r
my_log("POLYGLOT *** Switching to UCI mode ***\n");\r
}\r
\r
- // initialize uci parsing and send uci command. Parse options and wait\r
- // for uciok\r
+ // initialize uci parsing and send uci command. \r
+ // Parse options and wait for uciok\r
\r
uci_open(Uci,Engine);\r
\r
option_set(Option,"PersistFile",tmp);\r
}\r
\r
- // if "Persist" is true, load the persist file!\r
- \r
- if(option_get_bool(Option,"Persist")){\r
- my_log("POLYGLOT PersistFile=%s\n",option_get_string(Option,"PersistFile"));\r
- if(ini_parse(ini_save,option_get_string(Option,"PersistFile"))){\r
- my_log("POLYGLOT Unable to open PersistFile\n"); \r
- }\r
+ // Load the persist file\r
+\r
+ my_log("POLYGLOT PersistFile=%s\n",option_get_string(Option,"PersistFile")); \r
+ if(ini_parse(ini_save,option_get_string(Option,"PersistFile"))){\r
+ my_log("POLYGLOT Unable to open PersistFile\n"); \r
+ }\r
+\r
+ // Do we want to use the persist file?\r
+\r
+ entry=ini_find(ini_save,"polyglot","Persist");\r
+ if(!entry){\r
+ Persist=option_get_bool(Option,"Persist");\r
+ }else{\r
+ Persist=(my_string_case_equal(entry->value,"false") || \r
+ my_string_equal(entry->value,"0"))?FALSE:TRUE;\r
}\r
- \r
- // parse the command line and merge remaining options\r
+\r
+ // if "Persist" now happens to be false, forget about the\r
+ // persist file \r
+\r
+ if(!Persist){\r
+ my_log("POLYGLOT Ignoring PersistFile");\r
+ ini_clear(ini_save);\r
+ }\r
+\r
+ option_set(Option,"Persist",Persist?"true":"false");\r
+\r
+ // parse the command line and merge remaining options\r
\r
arg_index=1;\r
while((arg=argv[arg_index])){\r
\r
// remind the reader once again about options\r
\r
- my_log("POLYGLOG Options from save file and command line\n");\r
+ my_log("POLYGLOG Options from PersistFile and command line\n");\r
ini_disp(ini_save);\r
\r
// extract PG options; this time do not set the default\r
// polyglot_set_option()\r
\r
void polyglot_set_option(const char *name, const char *value){ // this must be cleaned up!\r
+ option_t *opt;\r
my_log("POLYGLOT Setting PolyGlot option %s=\"%s\"\n",name,value);\r
+ if(my_string_case_equal(name,"Defaults")){\r
+ option_start_iter(Uci->option);\r
+ while((opt=option_next(Uci->option))){\r
+ if(!IS_BUTTON(opt)){\r
+ // also sets opt->value\r
+ uci_send_option(Uci,opt->name,opt->default_);\r
+ }\r
+ }\r
+ option_start_iter(Option);\r
+ while((opt=option_next(Option))){\r
+ if(!IS_BUTTON(opt)){\r
+ polyglot_set_option(opt->name,opt->default_);\r
+ }\r
+ }\r
+ xboard2uci_send_options();\r
+ }\r
option_set(Option,name,value);\r
if(option_get_bool(Option,"Book")&&(my_string_case_equal(name,"BookFile")||my_string_case_equal(name,"Book"))){\r
my_log("POLYGLOT *** SETTING BOOK ***\n");\r
my_log("POLYGLOT Unable to open book \"%s\"\n",option_get_string(Option,"BookFile"));\r
}\r
}else if(option_get_bool(Option,"Log")&&(my_string_case_equal(name,"LogFile") ||my_string_case_equal(name,"Log"))){\r
- my_log("POLYGLOT *** SETTING LOGFILE ***\n");\r
+ my_log("POLYGLOT *** SWITCHING LOGFILE ***\n");\r
my_log("POLYGLOT LOGFILE \"%s\"\n",option_get_string(Option,"LogFile"));\r
my_log_close();\r
my_log_open(option_get_string(Option,"LogFile"));\r
\r
void quit() {\r
\r
+ ini_t empty[1];\r
+\r
+ ini_init(empty);\r
+\r
my_log("POLYGLOT *** QUIT ***\n");\r
\r
if (Init) {\r
engine_close(Engine);\r
\r
}\r
+ // printf("def=%s val=%s\n",option_get_default(Option,"Persist"),option_get_string(Option,"Persist"));\r
if(option_get_bool(Option,"Persist")){\r
write_ini(option_get_string(Option,"PersistFile"),\r
Option,Uci->option);\r
+ }else if(!my_string_case_equal(option_get_default(Option,"Persist"),\r
+ option_get_string(Option,"Persist"))){\r
+ // Hack\r
+ ini_insert_ex(empty,"PolyGlot","Persist","false");\r
+ write_ini_ex(option_get_string(Option,"PersistFile"),empty);\r
+ }else{\r
+ write_ini_ex(option_get_string(Option,"PersistFile"),empty);\r
}\r
my_log("POLYGLOT Calling exit\n");\r
exit(EXIT_SUCCESS);\r