// constants\r
\r
\r
-static const char * const Version = "1.4.45b";\r
+static const char * const Version = "1.4.46b";\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
"; obtained from the engine settings dialog\n"\r
"; in WinBoard/xboard 4.4.0 and higher.\n"\r
"\n" \r
+ "; If the value of the option \"Persist\" is false\n"\r
+ "; then the content of this file is ignored.\n"\r
+ "\n"\r
"; It is allowed to manually edit this file\n"\r
"; and you may safely delete it as well.\n"\r
"\n";\r
}\r
}\r
\r
-// write_ini()\r
\r
-static void write_ini(const char *filename,\r
- option_list_t *pg_options,\r
- option_list_t *uci_options){\r
+// make_ini()\r
+\r
+static void make_ini(ini_t *ini){\r
option_t *opt;\r
char tmp[StringSize];\r
- FILE *f;\r
- time_t t=time(NULL);\r
- f=fopen(filename,"w");\r
- if(!f){\r
- // alas this does nothing....\r
- gui_send(GUI,"tellusererror write_ini(): %s: %s.",filename,strerror(errno));\r
- // but at least we log the error\r
- my_log("POLYGLOT write_ini(): %s: %s.\n",filename,strerror(errno));\r
- return;\r
- }\r
- fprintf(f,"; %s\n",ctime(&t));\r
- fprintf(f,IniIntro,option_get_string(Option,"EngineName"));\r
- fprintf(f,"[PolyGlot]\n");\r
- fprintf(f,"EngineName=%s\n",\r
- option_get_string(Option,"EngineName"));\r
- fprintf(f,"EngineCommand=%s\n",\r
- option_get_string(Option,"EngineCommand"));\r
- fprintf(f,"EngineDir=%s\n",\r
- option_get_string(Option,"EngineDir"));\r
- option_start_iter(pg_options);\r
- while((opt=option_next(pg_options))){\r
+ ini_insert_ex(ini,"polyglot",\r
+ "EngineName",\r
+ option_get_string(Option,"EngineName"));\r
+ ini_insert_ex(ini,"polyglot",\r
+ "EngineCommand",\r
+ option_get_string(Option,"EngineCommand"));\r
+ ini_insert_ex(ini,"polyglot",\r
+ "EngineDir",\r
+ option_get_string(Option,"EngineDir"));\r
+ option_start_iter(Option);\r
+ while((opt=option_next(Option))){\r
if(!my_string_equal(opt->value,opt->default_)&&\r
- !IS_BUTTON(opt) &&\r
+ !IS_BUTTON(opt->type) &&\r
(opt->mode & XBOARD)){\r
- snprintf(tmp,sizeof(tmp),"%s=%s\n",opt->name,opt->value);\r
- tmp[sizeof(tmp)-1]='\0';\r
- fprintf(f,"%s",tmp);\r
+ ini_insert_ex(ini,"polyglot",opt->name,opt->value);\r
}\r
}\r
- fprintf(f,"[Engine]\n");\r
- option_start_iter(uci_options);\r
- while((opt=option_next(uci_options))){\r
+ option_start_iter(Uci->option);\r
+ while((opt=option_next(Uci->option))){\r
if(!my_string_equal(opt->value,opt->default_)&&\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
+ !IS_BUTTON(opt->type)){\r
+ ini_insert_ex(ini,"engine",opt->name,opt->value);\r
}\r
}\r
- fclose(f);\r
}\r
\r
-// write_ini_ex()\r
\r
-static void write_ini_ex(const char *filename,\r
+// write_ini()\r
+\r
+static void write_ini(const char *filename,\r
ini_t *ini){\r
ini_entry_t *entry;\r
char tmp[StringSize];\r
fprintf(f,"; %s\n",ctime(&t));\r
fprintf(f,IniIntro,option_get_string(Option,"EngineName"));\r
fprintf(f,"[PolyGlot]\n");\r
- fprintf(f,"EngineName=%s\n",\r
- option_get_string(Option,"EngineName"));\r
- fprintf(f,"EngineCommand=%s\n",\r
- option_get_string(Option,"EngineCommand"));\r
- fprintf(f,"EngineDir=%s\n",\r
- option_get_string(Option,"EngineDir"));\r
ini_start_iter(ini);\r
while((entry=ini_next(ini))){\r
if(my_string_case_equal(entry->section,"polyglot")){\r
\r
if(my_string_equal(option_get_string(Option,"PersistFile"),"<empty>")){\r
char tmp[StringSize];\r
+ int i;\r
snprintf(tmp,sizeof(tmp),"%s.ini",\r
option_get_string(Option,"EngineName"));\r
tmp[sizeof(tmp)-1]='\0';\r
+ for(i=0;i<strlen(tmp);i++){\r
+ if(tmp[i]==' '){\r
+ tmp[i]='_';\r
+ }\r
+ }\r
option_set(Option,"PersistFile",tmp);\r
}\r
\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
+ if(!IS_BUTTON(opt->type)){\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
+ if(!IS_BUTTON(opt->type)){\r
polyglot_set_option(opt->name,opt->default_);\r
}\r
}\r
\r
void quit() {\r
\r
- ini_t empty[1];\r
+ ini_t ini[1];\r
char persist_path[StringSize];\r
int ret;\r
\r
- ini_init(empty);\r
+ ini_init(ini);\r
\r
my_log("POLYGLOT *** QUIT ***\n");\r
\r
// engine is started. \r
if(!my_string_case_equal(option_get(Option,"PersistFile"),\r
"<empty>")){\r
- my_path_join(persist_path,\r
- option_get(Option,"PersistDir"),\r
- option_get(Option,"PersistFile"));\r
- if(option_get_bool(Option,"Persist")){\r
- write_ini(persist_path,\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(persist_path,empty);\r
- }else{\r
- write_ini_ex(persist_path,empty);\r
+ // Persistence should only work in XBOARD mode.\r
+ // In UCI mode the GUI is responsible for remembering options.\r
+ if(!option_get_bool(Option,"UCI")){\r
+ my_path_join(persist_path,\r
+ option_get(Option,"PersistDir"),\r
+ option_get(Option,"PersistFile"));\r
+ make_ini(ini);\r
+ if(option_get_bool(Option,"Persist")){\r
+ write_ini(persist_path,ini);\r
+ }else if(!my_string_case_equal(option_get_default(Option,"Persist"),\r
+ option_get_string(Option,"Persist"))){\r
+ // Hack\r
+ ini_insert_ex(ini,"polyglot","Persist","false");\r
+ write_ini(persist_path,ini);\r
+ }else{\r
+ write_ini(persist_path,ini);\r
+ }\r
+ my_log("POLYGLOT Calling exit\n");\r
}\r
- my_log("POLYGLOT Calling exit\n");\r
}\r
exit(EXIT_SUCCESS);\r
}\r