X-Git-Url: http://winboard.nl/cgi-bin?p=polyglot.git;a=blobdiff_plain;f=option.c;h=c975c83de7a6ad7c7dfe1c5fd67e3bf086af2d14;hp=1bccec36c73a52c8049a6522c12451084557899c;hb=60900035e6d0309705f2326ee50edc52386305e9;hpb=aaf072500213db1bed274a2dd8ebe711f21ab898 diff --git a/option.c b/option.c index 1bccec3..c975c83 100644 --- a/option.c +++ b/option.c @@ -9,47 +9,53 @@ #include "option.h" #include "util.h" + +// defines + +#define NNB { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL } + // constants static const bool UseDebug = FALSE; - +static const int StringSize = 4096; // variables -#define NNB { NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL } option_list_t Option[1]; option_t DefaultOptions[] = { - { "OptionFile", "string","0","0", "polyglot.ini", NULL,0,NNB, PG}, - // options + { "SettingsFile", "file","0","0", "polyglot.ini", NULL,0,NNB, PG|XBOARD|XBSEL}, + + { "SettingsDir", "path","0","0", "" , NULL,0,NNB, PG}, + + { "OnlyWbOptions", "check","0","0", "true" , NULL,0,NNB, PG|XBOARD}, + { "EngineName", "string","0","0", "" , NULL,0,NNB, PG}, - { "EngineDir", "string","0","0", "." , NULL,0,NNB, PG}, + { "EngineDir", "path","0","0", "." , NULL,0,NNB, PG}, { "EngineCommand", "string","0","0", "" , NULL,0,NNB, PG}, - { "Log", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD|UCI}, - { "LogFile", "string","0","0", "polyglot.log", NULL,0,NNB, PG|XBOARD|UCI}, + { "Log", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD|XBSEL|UCI}, + { "LogFile", "file","0","0", "polyglot.log", NULL,0,NNB, PG|XBOARD|XBSEL|UCI}, { "UCI", "check","0","0", "false" , NULL,0,NNB, PG}, { "UseNice", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD|UCI}, { "NiceValue", "spin", "0","20", "5" , NULL,0,NNB, PG|XBOARD|UCI}, - { "Chess960", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, - - { "Resign", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, - { "ResignMoves", "spin","0","10000", "3" , NULL,0,NNB, PG|XBOARD}, - { "ResignScore", "spin","0","10000", "600" , NULL,0,NNB, PG|XBOARD}, + { "Resign", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD|XBSEL}, + { "ResignMoves", "spin","0","10000", "3" , NULL,0,NNB, PG|XBOARD|XBSEL}, + { "ResignScore", "spin","0","10000", "600" , NULL,0,NNB, PG|XBOARD|XBSEL}, { "MateScore", "spin","0","100000", "10000" , NULL,0,NNB, PG|XBOARD}, - { "Book", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD|UCI}, - { "BookFile", "string","0","0", "book.bin" , NULL,0,NNB, PG|XBOARD|UCI}, + { "Book", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD|XBSEL|UCI}, + { "BookFile", "file","0","0", "book.bin" , NULL,0,NNB, PG|XBOARD|XBSEL|UCI}, - { "BookRandom", "check","0","0", "true" , NULL,0,NNB, PG|XBOARD|UCI}, - { "BookDepth", "spin","0","256", "256" , NULL,0,NNB, PG|XBOARD}, + { "BookRandom", "check","0","0", "true" , NULL,0,NNB, PG|XBOARD|XBSEL|UCI}, + { "BookDepth", "spin","0","256", "256" , NULL,0,NNB, PG|XBOARD|XBSEL}, { "BookTreshold", "spin","0","1000", "5" , NULL,0,NNB, PG|XBOARD|UCI}, { "BookLearn", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, @@ -60,20 +66,36 @@ option_t DefaultOptions[] = { { "KibitzDelay", "spin","0","1000", "5" , NULL,0,NNB, PG|XBOARD}, { "KibitzInterval", "spin","0","1000", "0" , NULL,0,NNB, PG|XBOARD}, - { "ShowPonder", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, + { "ShowPonder", "check","0","0", "true" , NULL,0,NNB, PG|XBOARD}, { "ScoreWhite", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, // work-arounds { "UCIVersion", "spin","1","2", "2" , NULL,0,NNB, PG|XBOARD}, { "CanPonder", "check","1","2", "false" , NULL,0,NNB, PG|XBOARD}, - { "SyncStop", "check","1","2", "false" , NULL,0,NNB, PG|XBOARD}, + { "SyncStop", "check","1","2", "false" , NULL,0,NNB, PG|XBOARD|XBSEL}, { "Affinity", "spin","-1","32", "-1" , NULL,0,NNB, PG}, { "RepeatPV", "check","0","0", "true" , NULL,0,NNB, PG|XBOARD}, - { "PromoteWorkAround","check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, + { "PromoteWorkAround","check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, + + // internal + + { "Chess960", "check","0","0", "false" , NULL,0,NNB, PG}, + + // These options flag various hacks in the source to work around + // WB quirks. They will eventually all be set to false. Probably + // in 4.5.0 + + { "WbWorkArounds", "check","0","0", "true" , NULL,0,NNB, PG}, + { "WbWorkArounds2", "check","0","0", "false" , NULL,0,NNB, PG}, + { "WbWorkArounds3", "check","0","0", "true" , NULL,0,NNB, PG}, + + // Buttons + + { "Save", "save","0","0", "false" , NULL,0,NNB, PG|XBOARD|XBSEL}, - { "WbWorkArounds", "check","0","0", "true" , NULL,0,NNB, PG|XBOARD}, - { "WbWorkArounds2", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, + // Sentinel + { NULL, NULL,"0","0", NULL , NULL,0,NNB, 0}, }; @@ -96,6 +118,8 @@ void option_init_pg() { int i; option_t *p=DefaultOptions; + char *home_dir; + char SettingsDir[StringSize]; option_init(Option); while(p){ @@ -109,6 +133,18 @@ void option_init_pg() { for(i=0;ioption_nb;i++){ Option->options[i].value=my_strdup(Option->options[i].default_); } +#ifndef _WIN32 + home_dir=getenv("HOME"); + if(!home_dir){ + home_dir="."; + } + snprintf(SettingsDir,sizeof(SettingsDir),"%s/.polyglot",home_dir); + SettingsDir[sizeof(SettingsDir)-1]='\0'; +#else + sprintf(SettingsDir,".\\_PG"); +#endif + option_set(Option,"SettingsDir",SettingsDir); + option_set_default(Option,"SettingsDir",SettingsDir); } // option_init() @@ -123,16 +159,16 @@ void option_init(option_list_t *option){ // option_insert() void option_insert(option_list_t *option, option_t *new_option){ + int i; + option_t *opt; ASSERT(option!=NULL); ASSERT(new_option!=NULL); ASSERT(new_option->name!=NULL); - option_t *opt; opt=option_find(option,new_option->name); if(!opt){ opt=&option->options[option->option_nb]; option->option_nb++; } - int i; if(option->option_nb>=OptionNb){ my_fatal("option_insert(): option list overflow\n"); } @@ -163,6 +199,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); @@ -183,7 +224,12 @@ bool option_set_default(option_list_t *option, opt = option_find(option,name); if (opt == NULL) return FALSE; - opt->default_=my_strdup(value); + 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_); @@ -293,10 +339,14 @@ option_t * option_find(option_list_t *option, const char name[]) { return NULL; } +// option_start_iter() + void option_start_iter(option_list_t *option){ option->iter=0; } +// option_next() + option_t * option_next(option_list_t *option){ ASSERT(option->iter<=option->option_nb); if(option->iter==option->option_nb){ @@ -321,6 +371,8 @@ void option_free(option_t *option){ option->mode=0; } +// option_clear() + void option_clear(option_list_t *option){ int i; for (i = 0; i < option->option_nb; i++) { @@ -329,5 +381,18 @@ void option_clear(option_list_t *option){ option->option_nb=0; } +// option_from_ini() + +void option_from_ini(option_list_t *option, + ini_t *ini, + const char *section){ + ini_entry_t *entry; + ini_start_iter(ini); + while((entry=ini_next(ini))){ + option_set(option,entry->name,entry->value); + option_set_default(option,entry->name,entry->value); + } +} + // end of option.cpp