#include <stdio.h>\r
#include <stdlib.h>\r
#include <string.h>\r
+#include <time.h>\r
\r
#include "attack.h"\r
#include "board.h"\r
#include "xboard2uci.h"\r
#include "uci2uci.h"\r
#include "ini.h"\r
+#include "util.h"\r
+\r
\r
// constants\r
\r
\r
-static const char * const Version = "1.4.44b";\r
+static const char * const Version = "1.4.45b";\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
static const double SearchTime = 3600.0;\r
static const int StringSize = 4096;\r
\r
+static const char * const IniIntro=\r
+ "; This ini file is used internally by PolyGlot\n"\r
+ "; to remember the settings for the UCI engine\n"\r
+ "; whose name is \"%s\".\n"\r
+ "\n"\r
+ "; The values for these settings would be typicallly\n"\r
+ "; obtained from the engine settings dialog\n"\r
+ "; in WinBoard/xboard 4.4.0 and higher.\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
// variables\r
\r
static bool Init;\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
- 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
- "; You may also safely delete this file\n"\r
- "; to restore the default options.\n",\r
- option_get_string(Option,"EngineName"));\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
if(!my_string_equal(opt->value,opt->default_)&&\r
ini_entry_t *entry;\r
char tmp[StringSize];\r
FILE *f;\r
+ time_t t=time(NULL);\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
+ // 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
ini_start_iter(ini);\r
while((entry=ini_next(ini))){\r
if(my_string_case_equal(entry->section,"polyglot")){\r
char *arg;\r
int arg_index;\r
bool NoIni, Persist;\r
+ char persist_path[StringSize];\r
\r
if(!DEBUG){\r
printf("PolyGlot %s by Fabien Letouzey.\n",Version);\r
\r
if(my_string_equal(option_get_string(Option,"PersistFile"),"<empty>")){\r
char tmp[StringSize];\r
- snprintf(tmp,sizeof(tmp),"PG_%s.ini",\r
+ snprintf(tmp,sizeof(tmp),"%s.ini",\r
option_get_string(Option,"EngineName"));\r
tmp[sizeof(tmp)-1]='\0';\r
option_set(Option,"PersistFile",tmp);\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_path_join(persist_path,\r
+ option_get_string(Option,"PersistDir"),\r
+ option_get_string(Option,"PersistFile"));\r
+\r
+ my_log("POLYGLOT PersistFile=%s\n",persist_path); \r
+ if(ini_parse(ini_save,persist_path)){\r
my_log("POLYGLOT Unable to open PersistFile\n"); \r
}\r
\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
+ // Extract PG options; this time do not set the default.\r
// polyglot_set_option() performs the necessary actions such\r
// as opening the log file/opening book etcetera.\r
+ // Ignore EngineName, EngineCommand and EngineDir\r
+ // as these are really meant as comments.\r
\r
ini_start_iter(ini_save);\r
while((entry=ini_next(ini_save))){\r
if(my_string_case_equal(entry->section,"polyglot")){\r
+ if(my_string_case_equal(entry->value,"EngineName")) \r
+ continue;\r
+ if(my_string_case_equal(entry->value,"EngineCommand")) \r
+ continue;\r
+ if(my_string_case_equal(entry->value,"EngineDir")) \r
+ continue;\r
polyglot_set_option(entry->name,entry->value);\r
}\r
}\r
void quit() {\r
\r
ini_t empty[1];\r
+ char persist_path[StringSize];\r
+ int ret;\r
\r
ini_init(empty);\r
\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
+ ret=my_mkdir(option_get(Option,"PersistDir"));\r
+ if(ret){\r
+ my_log("POLYGLOT quit(): %s: %s\n",option_get(Option,"PersistDir"),strerror(errno));\r
+ }\r
+ // PersistFile can be named "<empty>" in case of a crash before the\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(option_get_string(Option,"PersistFile"),empty);\r
- }else{\r
- write_ini_ex(option_get_string(Option,"PersistFile"),empty);\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
+ }\r
+ my_log("POLYGLOT Calling exit\n");\r
}\r
- my_log("POLYGLOT Calling exit\n");\r
exit(EXIT_SUCCESS);\r
}\r
\r