#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.51b";\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
\r
// prototypes\r
\r
-static void init_book ();\r
static void stop_search ();\r
\r
// functions\r
}\r
}\r
\r
-// write_ini()\r
+// parse_args()\r
\r
-static void write_ini(const char *filename,\r
- option_list_t *pg_options,\r
- option_list_t *uci_options){\r
- option_t *opt;\r
- char tmp[StringSize];\r
- FILE *f;\r
- f=fopen(filename,"w");\r
- if(!f){\r
- my_fatal("write_ini(): Cannot open %s for writing.\n",filename);\r
+static void parse_args(ini_t *ini, char **argv){\r
+ int arg_index;\r
+ char *arg;\r
+ arg_index=0;\r
+ while((arg=argv[arg_index])){\r
+ if(my_string_equal(arg,"-ec") && argv[arg_index+1]){\r
+ ini_insert_ex(ini,"PolyGlot","EngineCommand",argv[arg_index+1]);\r
+ arg_shift_left(argv,arg_index);\r
+ arg_shift_left(argv,arg_index);\r
+ continue;\r
+ }if(my_string_equal(arg,"-ed") && argv[arg_index+1]){\r
+ ini_insert_ex(ini,"PolyGlot","EngineDir",argv[arg_index+1]);\r
+ arg_shift_left(argv,arg_index);\r
+ arg_shift_left(argv,arg_index);\r
+ continue;\r
+ }\r
+ if(my_string_equal(arg,"-en") && argv[arg_index+1]){\r
+ ini_insert_ex(ini,"PolyGlot","EngineName",argv[arg_index+1]);\r
+ arg_shift_left(argv,arg_index);\r
+ arg_shift_left(argv,arg_index);\r
+ continue;\r
+ }\r
+ if(my_string_equal(arg,"-log") &&\r
+ argv[arg_index+1] &&\r
+ IS_BOOL(argv[arg_index+1])){\r
+ ini_insert_ex(ini,\r
+ "PolyGlot",\r
+ "Log",\r
+ TO_BOOL(argv[arg_index+1])?"true":"false");\r
+ arg_shift_left(argv,arg_index);\r
+ arg_shift_left(argv,arg_index);\r
+ continue;\r
+ }\r
+ if(my_string_equal(arg,"-lf") && argv[arg_index+1]){\r
+ ini_insert_ex(ini,"PolyGlot","LogFile",argv[arg_index+1]);\r
+ arg_shift_left(argv,arg_index);\r
+ arg_shift_left(argv,arg_index);\r
+ continue;\r
+ }\r
+ if(my_string_equal(arg,"-wb") &&\r
+ argv[arg_index+1]&&\r
+ IS_BOOL(argv[arg_index+1])){\r
+ ini_insert_ex(ini,"PolyGlot",\r
+ "OnlyWbOptions",\r
+ TO_BOOL(argv[arg_index+1])?"true":"false");\r
+ arg_shift_left(argv,arg_index);\r
+ arg_shift_left(argv,arg_index);\r
+ continue;\r
+ }\r
+ if((my_string_equal(arg,"-pg")||my_string_equal(arg,"-uci")) &&\r
+ argv[arg_index+1]){\r
+ int ret;\r
+ char section[StringSize];\r
+ char name[StringSize];\r
+ char value[StringSize];\r
+ ret=ini_line_parse(argv[arg_index+1],section,name,value);\r
+ if(ret==NAME_VALUE){\r
+ if(my_string_equal(arg,"-pg")){\r
+ ini_insert_ex(ini,"PolyGlot",name,value);\r
+ }else{\r
+ ini_insert_ex(ini,"Engine",name,value);\r
+ }\r
+ }\r
+ arg_shift_left(argv,arg_index);\r
+ arg_shift_left(argv,arg_index);\r
+ continue;\r
+ }\r
+ arg_index++;\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
- option_start_iter(pg_options);\r
- while((opt=option_next(pg_options))){\r
- if(!my_string_equal(opt->value,opt->default_)&&\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
- fprintf(f,"%s",tmp);\r
+}\r
+\r
+\r
+// make_ini()\r
+\r
+static void make_ini(ini_t *ini){\r
+ option_t *opt;\r
+ ini_insert_ex(ini,"polyglot",\r
+ "EngineCommand",\r
+ option_get(Option,"EngineCommand"));\r
+ ini_insert_ex(ini,"polyglot",\r
+ "EngineDir",\r
+ option_get(Option,"EngineDir"));\r
+ option_start_iter(Option);\r
+ while((opt=option_next(Option))){\r
+ if(my_string_case_equal(opt->name,"SettingsFile")) continue;\r
+ if(my_string_case_equal(opt->name,"EngineCommand")) continue;\r
+ if(my_string_case_equal(opt->name,"EngineDir")) continue;\r
+ if(!my_string_equal(opt->value,opt->default_)&& !IS_BUTTON(opt->type))\r
+ {\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(!strncmp(opt->name,"UCI_",4) &&\r
+ !my_string_case_equal(opt->name,"UCI_LimitStrength") &&\r
+ !my_string_case_equal(opt->name,"UCI_Elo"))continue;\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
+ const char *quote;\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
+ gui_send(GUI,"tellusererror write_ini(): %s: %s.",filename,strerror(errno));\r
+ my_log("POLYGLOT write_ini(): %s: %s.\n",filename,strerror(errno));\r
+ return;\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,"; Created: %s\n",ctime(&t));\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
+ if(strchr(entry->value,';')|| strchr(entry->value,'#')|| strchr(entry->value,'"')){\r
+ quote="\"";\r
+ }else{\r
+ quote="";\r
+ }\r
+ snprintf(tmp,sizeof(tmp),"%s=%s%s%s\n",\r
+ entry->name,\r
+ quote,\r
+ entry->value,\r
+ quote);\r
tmp[sizeof(tmp)-1]='\0';\r
fprintf(f,"%s",tmp);\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
+ if(my_string_case_equal(entry->section,"engine")){\r
+ if(strchr(entry->value,';')|| strchr(entry->value,'#')|| strchr(entry->value,'"')){\r
+ quote="\"";\r
+ }else{\r
+ quote="";\r
+ }\r
+ snprintf(tmp,sizeof(tmp),"%s=%s%s%s\n",\r
+ entry->name,\r
+ quote,\r
+ entry->value,\r
+ quote);\r
tmp[sizeof(tmp)-1]='\0';\r
fprintf(f,"%s",tmp);\r
}\r
fclose(f);\r
}\r
\r
+// welcome_message()\r
+\r
+void welcome_message(char *buf){\r
+ if(!DEBUG){\r
+ sprintf(buf,\r
+ "PolyGlot %s by Fabien Letouzey.\n",\r
+ Version);\r
+ }else{\r
+ sprintf(buf,\r
+ "PolyGlot %s by Fabien Letouzey (debug build).\n",\r
+ Version);\r
+ }\r
+}\r
+\r
+int wb_select(){\r
+ option_t *opt;\r
+ option_start_iter(Option);\r
+ while((opt=option_next(Option))){\r
+ opt->mode&=~XBOARD;\r
+ if(opt->mode & XBSEL){\r
+ opt->mode|=XBOARD; \r
+ }\r
+ }\r
+}\r
\r
// main()\r
\r
int main(int argc, char * argv[]) {\r
- ini_t ini[1],ini_save[1];\r
+ ini_t ini[1], ini_command[1];\r
ini_entry_t *entry;\r
char *arg;\r
int arg_index;\r
- bool NoIni, Persist;\r
+ bool NoIni;\r
+ option_t *opt;\r
+ char welcome[StringSize];\r
+\r
+\r
+ welcome_message(welcome);\r
\r
- if(!DEBUG){\r
- printf("PolyGlot %s by Fabien Letouzey.\n",Version);\r
- }else{\r
- printf("PolyGlot %s by Fabien Letouzey (debug build).\n",Version);\r
- }\r
+ printf("%s",welcome);\r
+\r
\r
if(argc>=2 && ((my_string_case_equal(argv[1],"help")) || (my_string_case_equal(argv[1],"-help")) || (my_string_case_equal(argv[1],"--help")) || (my_string_case_equal(argv[1],"-h")) || my_string_case_equal(argv[1],"/?"))){\r
printf("%s\n",HelpMessage);\r
my_random_init();\r
\r
ini_init(ini);\r
- ini_init(ini_save);\r
+ ini_init(ini_command);\r
\r
- // book utilities\r
+ // book utilities: do not touch these\r
\r
if (argc >= 2 && my_string_equal(argv[1],"make-book")) {\r
book_make(argc,argv);\r
do_perft(argc,argv);\r
return EXIT_SUCCESS;\r
}\r
-\r
- // TODO: If logging is enabled on the command line turn it on NOW\r
- // and do not allow it to be overridden later. \r
\r
// What is the config file? This is very hacky right now.\r
\r
}\r
}\r
arg_shift_left(argv,arg_index-1);\r
+ parse_args(ini_command,argv+1);\r
if(NoIni){\r
- option_set(Option,"OptionFile","<empty>");\r
+ option_set(Option,"SettingsFile","<empty>");\r
}\r
\r
// Ok see if first argument looks like config file\r
if(argv[1] && !my_string_equal(argv[1],"epd-test") && !(argv[1][0]=='-')){\r
// first argument must be config file\r
if(!NoIni){\r
- option_set(Option,"OptionFile",argv[1]);\r
+ option_set(Option,"SettingsFile",argv[1]);\r
}else{\r
// ignore\r
}\r
// Config file is the default.\r
// This has already been set above or in "option_init_pg()"\r
}\r
- \r
+\r
+\r
\r
// if we use a config file: load it!\r
\r
- if(!my_string_equal(option_get_string(Option,"OptionFile"),"<empty>")){\r
- if(ini_parse(ini,option_get_string(Option,"OptionFile"))){\r
+ if(!my_string_equal(option_get_string(Option,"SettingsFile"),"<empty>")){\r
+ if(ini_parse(ini,option_get_string(Option,"SettingsFile"))){\r
my_fatal("main(): Can't open file \"%s\": %s\n",\r
- option_get_string(Option,"OptionFile"),\r
+ option_get_string(Option,"SettingsFile"),\r
strerror(errno));\r
}\r
}\r
- // remind the reader of what options are in effect\r
\r
- my_log("POLYGLOG Options from ini file\n");\r
- ini_disp(ini);\r
+ // Extract some important options\r
\r
- // extract PG options\r
+ if((entry=ini_find(ini,"polyglot","EngineCommand"))){\r
+ option_set(Option,entry->name,entry->value);\r
+ }\r
+ if((entry=ini_find(ini,"polyglot","EngineDir"))){\r
+ option_set(Option,entry->name,entry->value);\r
+ }\r
+ if((entry=ini_find(ini,"polyglot","EngineName"))){\r
+ option_set(Option,entry->name,entry->value);\r
+ }\r
+ if((entry=ini_find(ini,"polyglot","Log"))){\r
+ polyglot_set_option(entry->name,entry->value);\r
+ }\r
+ if((entry=ini_find(ini,"polyglot","LogFile"))){\r
+ polyglot_set_option(entry->name,entry->value);\r
+ }\r
\r
- ini_start_iter(ini);\r
- while((entry=ini_next(ini))){\r
- if(my_string_case_equal(entry->section,"polyglot")){\r
- option_set(Option,entry->name,entry->value);\r
- option_set_default(Option,entry->name,entry->value);\r
+ // Concession to WB 4.4.0\r
+ // Treat "polyglot_1st.ini" and "polyglot_2nd.ini" specially\r
+\r
+ if(option_get_bool(Option,"WbWorkArounds3")){\r
+ const char *SettingsFile=option_get(Option,"SettingsFile");\r
+ if(strstr(SettingsFile,"polyglot_1st.ini")||\r
+ strstr(SettingsFile,"polyglot_2nd.ini")){\r
+ option_set(Option,"SettingsFile","<empty>");\r
}\r
}\r
\r
- // start logging if required\r
+ // Look at command line for logging option. It is important\r
+ // to start logging as soon as possible.\r
+\r
+ if((entry=ini_find(ini_command,"PolyGlot","Log"))){\r
+ option_set(Option,entry->name,entry->value);\r
+ }\r
+ if((entry=ini_find(ini_command,"PolyGlot","LogFile"))){\r
+ option_set(Option,entry->name,entry->value);\r
+ }\r
+ \r
+ // start logging if required\r
\r
if (option_get_bool(Option,"Log")) {\r
my_log_open(option_get_string(Option,"LogFile"));\r
\r
// log welcome stuff\r
\r
- if(!DEBUG){\r
- my_log("PolyGlot %s by Fabien Letouzey\n",Version);\r
- }else{\r
- my_log("PolyGlot %s by Fabien Letouzey (debug build)\n",Version);\r
- } \r
+ my_log("%s",welcome);\r
my_log("POLYGLOT *** START ***\n");\r
- my_log("POLYGLOT INI file \"%s\"\n",option_get_string(Option,"OptionFile"));\r
+ if(!my_string_equal(option_get_string(Option,"SettingsFile"),"<empty>")){\r
+ my_log("POLYGLOT INI file \"%s\"\n",option_get_string(Option,"SettingsFile"));\r
+ }\r
\r
- // open book (presumably this should go else where)\r
- \r
- init_book();\r
\r
// scavenge command line for options necessary to start the engine\r
- \r
- arg_index=1;\r
- while((arg=argv[arg_index])){\r
- if(my_string_equal(arg,"-ec") && argv[arg_index+1]){\r
- option_set(Option,"EngineCommand",argv[arg_index+1]);\r
- arg_shift_left(argv,arg_index);\r
- arg_shift_left(argv,arg_index);\r
- continue;\r
- }\r
- if(my_string_equal(arg,"-ed") && argv[arg_index+1]){\r
- option_set(Option,"EngineDir",argv[arg_index+1]);\r
- arg_shift_left(argv,arg_index);\r
- arg_shift_left(argv,arg_index);\r
- continue;\r
- }\r
- if(my_string_equal(arg,"-en") && argv[arg_index+1]){\r
- option_set(Option,"EngineName",argv[arg_index+1]);\r
- arg_shift_left(argv,arg_index);\r
- arg_shift_left(argv,arg_index);\r
- continue;\r
- }\r
- arg_index++;\r
+\r
+\r
+ if((entry=ini_find(ini_command,"PolyGlot","EngineCommand"))){\r
+ option_set(Option,entry->name,entry->value);\r
+ }\r
+ if((entry=ini_find(ini_command,"PolyGlot","EngineDir"))){\r
+ option_set(Option,entry->name,entry->value);\r
+ }\r
+ if((entry=ini_find(ini_command,"PolyGlot","EngineName"))){\r
+ option_set(Option,entry->name,entry->value);\r
}\r
\r
// start engine\r
\r
uci_open(Uci,Engine);\r
\r
- // get engine name from engine if not supplied in config file\r
- \r
+ option_set_default(Option,"EngineName",Uci->name);\r
+\r
+ // get engine name from engine if not supplied in config file or on\r
+ // the command line\r
+\r
if (my_string_equal(option_get_string(Option,"EngineName"),"<empty>")) {\r
option_set(Option,"EngineName",Uci->name);\r
}\r
\r
- // what is the name of the persist file?\r
\r
- if(my_string_equal(option_get_string(Option,"PersistFile"),"<empty>")){\r
+ // In the case we have been invoked with NoIni or StandardIni\r
+ // we still have to load a config file.\r
+\r
+ if(my_string_equal(option_get_string(Option,"SettingsFile"),"<empty>")){\r
+\r
+ // construct the name of the ConfigFile from the EngineName\r
+ \r
char tmp[StringSize];\r
- snprintf(tmp,sizeof(tmp),"PG_%s.ini",\r
+ char option_file[StringSize];\r
+ int i;\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
-\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
+ for(i=0;i<strlen(tmp);i++){\r
+ if(tmp[i]==' '){\r
+ tmp[i]='_';\r
+ }\r
+ }\r
+ my_path_join(option_file,\r
+ option_get_string(Option,"SettingsDir"),\r
+ tmp);\r
+ // Load the config file\r
+ option_set(Option,"SettingsFile",option_file);\r
+\r
+ my_log("POLYGLOT INI file \"%s\"\n",option_get_string(Option,"SettingsFile"));\r
+ if(ini_parse(ini,option_file)){\r
+ my_log("POLYGLOT Unable to open %s\n",\r
+ option_get_string(Option,"SettingsFile")); \r
+ }\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
+ // 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
+ ini_start_iter(ini_command);\r
+ while((entry=ini_next(ini_command))){\r
+ ini_insert(ini,entry);\r
}\r
\r
- option_set(Option,"Persist",Persist?"true":"false");\r
+ // Remind the reader about the options that are now in effect.\r
\r
- // parse the command line and merge remaining options\r
+ my_log("POLYGLOG OPTIONS \n");\r
+ ini_disp(ini);\r
\r
- arg_index=1;\r
- while((arg=argv[arg_index])){\r
- if(my_string_equal(arg,"-log")){\r
- ini_insert_ex(ini_save,"PolyGlot","Log","true");\r
- arg_shift_left(argv,arg_index);\r
- continue;\r
- }\r
- if(my_string_equal(arg,"-lf") && argv[arg_index+1]){\r
- ini_insert_ex(ini_save,"PolyGlot","LogFile",argv[arg_index+1]);\r
- arg_shift_left(argv,arg_index);\r
- arg_shift_left(argv,arg_index);\r
- continue;\r
- }\r
- if(my_string_equal(arg,"-hash") && argv[arg_index+1]){\r
- ini_insert_ex(ini_save,"Engine","Hash",argv[arg_index+1]);\r
- arg_shift_left(argv,arg_index);\r
- arg_shift_left(argv,arg_index);\r
- continue;\r
- }\r
- if(my_string_equal(arg,"-bk") && argv[arg_index+1]){\r
- ini_insert_ex(ini_save,"PolyGlot","Book","true");\r
- ini_insert_ex(ini_save,"PolyGlot","BookFile",argv[arg_index+1]);\r
- arg_shift_left(argv,arg_index);\r
- arg_shift_left(argv,arg_index);\r
- continue;\r
- }\r
- if((my_string_equal(arg,"-pg")||my_string_equal(arg,"-uci")) &&\r
- argv[arg_index]){\r
- int ret;\r
- char section[StringSize];\r
- char name[StringSize];\r
- char value[StringSize];\r
- ret=ini_line_parse(argv[arg_index++],section,name,value);\r
- if(ret==NAME_VALUE){\r
- if(my_string_equal(arg,"-pg")){\r
- ini_insert_ex(ini_save,"PolyGlot",name,value);\r
- }else{\r
- ini_insert_ex(ini_save,"Engine",name,value);\r
- }\r
+ // extract PG options\r
+ \r
+ ini_start_iter(ini);\r
+ while((entry=ini_next(ini))){\r
+ if(my_string_case_equal(entry->section,"polyglot")){\r
+ opt=option_find(Option,entry->name);\r
+ if(opt && !IS_BUTTON(opt->type)){\r
+ polyglot_set_option(entry->name,entry->value);\r
}\r
- arg_shift_left(argv,arg_index);\r
- arg_shift_left(argv,arg_index);\r
- continue;\r
}\r
- arg_index++;\r
}\r
\r
- // remind the reader once again about options\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
- // polyglot_set_option() performs the necessary actions such\r
- // as opening the log file/opening book etcetera.\r
+ // Cater to our biggest customer:-)\r
\r
- ini_start_iter(ini_save);\r
- while((entry=ini_next(ini_save))){\r
- if(my_string_case_equal(entry->section,"polyglot")){\r
- polyglot_set_option(entry->name,entry->value);\r
- }\r
+ if(option_get_bool(Option,"OnlyWbOptions")){\r
+ wb_select();\r
}\r
\r
// done initializing\r
if(my_string_case_equal(entry->section,"engine")){\r
// also updates value in Uci->option\r
uci_send_option(Uci,entry->name,"%s",entry->value);\r
- // since this comes from the ini file, also update default\r
- option_set_default(Uci->option,entry->name,entry->value);\r
// this is inherited, it probably does not work correctly\r
if(my_string_case_equal(entry->name,"MultiPV") &&\r
atoi(entry->value)>1){\r
}\r
}\r
}\r
- ini_start_iter(ini_save);\r
- while((entry=ini_next(ini_save))){\r
- if(my_string_case_equal(entry->section,"engine")){\r
- // also updates value in Uci->option\r
- uci_send_option(Uci,entry->name,"%s",entry->value);\r
- // this is inherited, it probably does not work correctly\r
- if(my_string_case_equal(entry->name,"MultiPV") &&\r
- atoi(entry->value)>1){\r
- Uci->multipv_mode=TRUE;\r
- }\r
- }\r
- }\r
- \r
+\r
+ \r
\r
// EPD test\r
\r
}\r
\r
// Anything that hasn't been parsed yet is a syntax error\r
+ // It seems that XBoard sometimes passes empty strings as arguments\r
+ // to PolyGlot. We ignore these. \r
\r
- if(argv[1]){\r
- my_fatal("main(): Unknown option: %s\n",argv[1]);\r
+ argc=1;\r
+ while((arg=argv[argc++])){\r
+ if(!my_string_equal(arg,"")){\r
+ my_fatal("main(): Option: \"%s\" not found\n",argv[argc-1]);\r
+ }\r
}\r
\r
-\r
gui_init(GUI);\r
mainloop();\r
return EXIT_SUCCESS; \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
+ ini_t ini[1];\r
+ int ret;\r
+ ini_init(ini);\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
+ if(my_string_case_equal(name,"Save")){\r
+ ret=my_mkdir(option_get(Option,"SettingsDir"));\r
+ if(ret){\r
+ my_log("POLYGLOT polyglot_set_option(): %s: %s\n",\r
+ option_get(Option,"SettingsDir"),\r
+ strerror(errno));\r
+ }\r
+ make_ini(ini);\r
+ write_ini(option_get(Option,"SettingsFile"),ini);\r
+ return;\r
+ }\r
+// if(my_string_equal(option_get(Option,name),value)){\r
+// my_log("Not setting PolyGlot option \"%s\" "\r
+// "since it already as the correct value.\n",\r
+// name);\r
+// return;\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
}\r
}else if(option_get_bool(Option,"Log")&&(my_string_case_equal(name,"LogFile") ||my_string_case_equal(name,"Log"))){\r
my_log("POLYGLOT *** SWITCHING LOGFILE ***\n");\r
- my_log("POLYGLOT LOGFILE \"%s\"\n",option_get_string(Option,"LogFile"));\r
+ my_log("POLYGLOT NEW LOGFILE \"%s\"\n",option_get_string(Option,"LogFile"));\r
my_log_close();\r
my_log_open(option_get_string(Option,"LogFile"));\r
}else if(option_get_bool(Option,"UseNice") &&(my_string_case_equal(name,"NiceValue")||my_string_case_equal(name,"UseNice"))){\r
}\r
\r
\r
-// init_book()\r
-\r
-static void init_book(){\r
- book_clear();\r
- if (option_get_bool(Option,"Book")){\r
- my_log("POLYGLOT *** SETTING BOOK ***\n");\r
- my_log("POLYGLOT BOOK \"%s\"\n",option_get_string(Option,"BookFile"));\r
- book_open(option_get_string(Option,"BookFile"));\r
- if(!book_is_open()){\r
- my_log("POLYGLOT Unable to open book \"%s\"\n",\r
- option_get_string(Option,"BookFile"));\r
- }\r
- }\r
-}\r
-\r
\r
// quit()\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
+ my_log("POLYGLOT Calling exit\n");\r
exit(EXIT_SUCCESS);\r
}\r
\r
}\r
\r
\r
-// end of main.cpp\r
+// end of main.c\r
\r