X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=option.c;h=ec0dc48dcaea6956bdec97bab07e70b96ce66bc3;hb=cd81270f2b1723e0798f4d6dcaee134f0b4aca7f;hp=1bccec36c73a52c8049a6522c12451084557899c;hpb=aaf072500213db1bed274a2dd8ebe711f21ab898;p=polyglot.git diff --git a/option.c b/option.c index 1bccec3..ec0dc48 100644 --- a/option.c +++ b/option.c @@ -12,7 +12,7 @@ // constants static const bool UseDebug = FALSE; - +static const int StringSize = 4096; // variables @@ -25,6 +25,10 @@ option_t DefaultOptions[] = { // options + { "Persist", "check","0","0", "true" , NULL,0,NNB, PG|XBOARD}, + { "PersistFile", "string","0","0", "" , NULL,0,NNB, PG}, + { "PersistDir", "string","0","0", "" , NULL,0,NNB, PG}, + { "EngineName", "string","0","0", "" , NULL,0,NNB, PG}, { "EngineDir", "string","0","0", "." , NULL,0,NNB, PG}, { "EngineCommand", "string","0","0", "" , NULL,0,NNB, PG}, @@ -37,7 +41,7 @@ option_t DefaultOptions[] = { { "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}, + { "Chess960", "check","0","0", "false" , NULL,0,NNB, PG}, { "Resign", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, { "ResignMoves", "spin","0","10000", "3" , NULL,0,NNB, PG|XBOARD}, @@ -74,6 +78,11 @@ option_t DefaultOptions[] = { { "WbWorkArounds", "check","0","0", "true" , NULL,0,NNB, PG|XBOARD}, { "WbWorkArounds2", "check","0","0", "false" , NULL,0,NNB, PG|XBOARD}, + + // Buttons + +// { "Defaults", "reset","0","0", "false" , NULL,0,NNB, PG|XBOARD}, + { NULL, NULL,"0","0", NULL , NULL,0,NNB, 0}, }; @@ -96,6 +105,8 @@ void option_init_pg() { int i; option_t *p=DefaultOptions; + char *home_dir; + char PersistDir[StringSize]; option_init(Option); while(p){ @@ -109,6 +120,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(PersistDir,sizeof(PersistDir),"%s/.polyglot",home_dir); + PersistDir[sizeof(PersistDir)-1]='\0'; +#else + sprintf(PersistDir,".\\Polyglot Settings"); +#endif + option_set(Option,"PersistDir",PersistDir); + option_set_default(Option,"PersistDir",PersistDir); } // option_init() @@ -123,16 +146,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 +186,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 +211,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 +326,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 +358,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 +368,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