\r
static const bool UseDebug = false;\r
\r
-// types\r
-\r
-struct option_t {\r
- const char * var;\r
- const char * val;\r
-};\r
\r
// variables\r
\r
-static option_t Option[] = {\r
+option_t Option[] = {\r
\r
- { "OptionFile", NULL, }, // string\r
+ { "OptionFile", "string","0","0", "polyglot.ini", NULL,0,{}, PG}, \r
\r
// options\r
\r
- { "EngineName", NULL, }, // string\r
- { "EngineDir", NULL, }, // string\r
- { "EngineCommand", NULL, }, // string\r
-\r
- { "Log", NULL, }, // true/false\r
- { "LogFile", NULL, }, // string\r
+ { "EngineName", "string","0","0", "<empty>" , NULL,0,{}, PG}, \r
+ { "EngineDir", "string","0","0", "." , NULL,0,{}, PG}, \r
+ { "EngineCommand", "string","0","0", "<empty>" , NULL,0,{}, PG}, \r
\r
- { "UCI", NULL, }, // true/false\r
+ { "Log", "check","0","0", "false" , NULL,0,{}, PG|XBOARD|UCI}, \r
+ { "LogFile", "string","0","0", "polyglot.log", NULL,0,{}, PG|XBOARD|UCI}, \r
\r
- { "UseNice", NULL, }, // true/false\r
+ { "UCI", "string","0","0", "false" , NULL,0,{}, PG}, \r
\r
- { "NiceValue", NULL, }, // true/false\r
+ { "UseNice", "check","0","0", "false" , NULL,0,{}, PG|XBOARD|UCI}, \r
+ { "NiceValue", "spin", "0","20", "5" , NULL,0,{}, PG|XBOARD|UCI}, \r
\r
- { "Chess960", NULL, }, // true/false\r
+ { "Chess960", "check","0","0", "false" , NULL,0,{}, PG|XBOARD}, \r
\r
- { "Resign", NULL, }, // true/false\r
- { "ResignMoves", NULL, }, // move number\r
- { "ResignScore", NULL, }, // centipawns\r
+ { "Resign", "check","0","0", "false" , NULL,0,{}, PG|XBOARD}, \r
+ { "ResignMoves", "spin","0","10000", "3" , NULL,0,{}, PG|XBOARD}, \r
+ { "ResignScore", "spin","0","10000", "600" , NULL,0,{}, PG|XBOARD}, \r
\r
- { "MateScore", NULL, }, // centipawns\r
+ { "MateScore", "spin","0","1000000", "10000" , NULL,0,{}, PG|XBOARD}, \r
\r
- { "Book", NULL, }, // true/false\r
- { "BookFile", NULL, }, // string\r
+ { "Book", "check","0","0", "false" , NULL,0,{}, PG|XBOARD|UCI}, \r
+ { "BookFile", "string","0","0", "book.bin" , NULL,0,{}, PG|XBOARD|UCI}, \r
\r
- { "BookRandom", NULL, }, // true/false\r
- { "BookLearn", NULL, }, // true/false\r
+ { "BookRandom", "check","0","0", "true" , NULL,0,{}, PG|XBOARD|UCI}, \r
+ { "BookLearn", "check","0","0", "false" , NULL,0,{}, PG|XBOARD}, \r
\r
- { "KibitzMove", NULL, }, // true/false\r
- { "KibitzPV", NULL, }, // true/false\r
+ { "KibitzMove", "check","0","0", "false" , NULL,0,{}, PG|XBOARD}, \r
+ { "KibitzPV", "check","0","0", "false" , NULL,0,{}, PG|XBOARD}, \r
\r
- { "KibitzCommand", NULL, }, // string\r
- { "KibitzDelay", NULL, }, // seconds\r
+ { "KibitzCommand", "string","0","0", "tellall" , NULL,0,{}, PG|XBOARD}, \r
+ { "KibitzDelay", "check","0","10000", "5" , NULL,0,{}, PG|XBOARD}, \r
\r
- { "ShowPonder", NULL, }, // true/false\r
+ { "ShowPonder", "check","0","0", "false" , NULL,0,{}, PG|XBOARD}, \r
\r
// work-arounds\r
\r
- { "UCIVersion", NULL, }, // 1-\r
- { "CanPonder", NULL, }, // true/false\r
- { "SyncStop", NULL, }, // true/false\r
- { "Affinity", NULL, }, // -1 else 0-32 //won't do much on *nix systems\r
- { "RepeatPV", NULL, },\r
- { "PromoteWorkAround", NULL, }, // true/false\r
+ { "UCIVersion", "spin","1","2", "2" , NULL,0,{}, PG|XBOARD}, \r
+ { "CanPonder", "check","1","2", "false" , NULL,0,{}, PG|XBOARD}, \r
+ { "SyncStop", "check","1","2", "false" , NULL,0,{}, PG|XBOARD}, \r
+ { "Affinity", "spin","-1","32", "-1" , NULL,0,{}, PG}, \r
+ { "RepeatPV", "check","0","0", "false" , NULL,0,{}, PG|XBOARD},\r
+ { "PromoteWorkAround","check","0","0", "false" , NULL,0,{}, PG|XBOARD}, \r
\r
- // { "", NULL, },\r
-\r
- { NULL, NULL, },\r
+ { NULL, NULL,"0","0", NULL , NULL,0,{}, 0},\r
};\r
\r
// prototypes\r
\r
void option_init() {\r
\r
- option_set("OptionFile","polyglot.ini");\r
+ option_t *p=Option;\r
+ const char * name;\r
\r
- // options\r
+ while((name=(p++)->name)){\r
+ option_set(name,option_get_default(name));\r
+ }\r
+}\r
\r
- option_set("EngineName","<empty>");\r
- option_set("EngineDir",".");\r
- option_set("EngineCommand","<empty>");\r
\r
- option_set("Log","false");\r
- option_set("LogFile","polyglot.log");\r
+// option_set()\r
+\r
+bool option_set(const char name[], const char value[]) {\r
\r
- option_set("UCI","false");\r
+ option_t * opt;\r
+ ASSERT(name!=NULL);\r
+ ASSERT(value!=NULL);\r
\r
- option_set("UseNice","false");\r
- option_set("NiceValue","5");\r
- \r
- option_set("Chess960","false");\r
+ opt = option_find(name);\r
+ if (opt == NULL) return false;\r
\r
- option_set("Resign","false");\r
- option_set("ResignMoves","3");\r
- option_set("ResignScore","600");\r
+ my_string_set(&opt->value,value);\r
\r
- option_set("MateScore","10000");\r
+ if (UseDebug) my_log("POLYGLOT OPTION SET \"%s\" -> \"%s\"\n",opt->name,opt->value);\r
\r
- option_set("Book","false");\r
- option_set("BookFile","book.bin");\r
+ return true;\r
+}\r
+// option_set()\r
\r
- option_set("BookRandom","true");\r
- option_set("BookLearn","false");\r
+bool option_set_default(const char name[], const char value[]) {\r
\r
- option_set("KibitzMove","false");\r
- option_set("KibitzPV","false");\r
+ option_t * opt;\r
+ ASSERT(name!=NULL);\r
+ ASSERT(value!=NULL);\r
\r
- option_set("KibitzCommand","tellall");\r
- option_set("KibitzDelay","5");\r
+ opt = option_find(name);\r
+ if (opt == NULL) return false;\r
\r
- option_set("ShowPonder","true");\r
+ opt->default_=my_strdup(value);\r
\r
- // work-arounds\r
+ if (UseDebug) my_log("POLYGLOT OPTION DEFAULT SET \"%s\" -> \"%s\"\n",opt->name,opt->default_);\r
\r
- option_set("UCIVersion","2");\r
- option_set("CanPonder","false");\r
- option_set("SyncStop","false");\r
- option_set("Affinity","-1");\r
- option_set("PromoteWorkAround","false");\r
- option_set("RepeatPV","true");\r
- // option_set("","");\r
+ return true;\r
}\r
\r
-// option_set()\r
+// option_get()\r
\r
-bool option_set(const char var[], const char val[]) {\r
+const char * option_get(const char name[]) {\r
\r
option_t * opt;\r
\r
- ASSERT(var!=NULL);\r
- ASSERT(val!=NULL);\r
-\r
- opt = option_find(var);\r
- if (opt == NULL) return false;\r
+ ASSERT(name!=NULL);\r
\r
- my_string_set(&opt->val,val);\r
+ opt = option_find(name);\r
+ if (opt == NULL) my_fatal("option_get(): unknown option \"%s\"\n",name);\r
\r
- if (UseDebug) my_log("POLYGLOT OPTION SET \"%s\" -> \"%s\"\n",opt->var,opt->val);\r
+ if (UseDebug) my_log("POLYGLOT OPTION GET \"%s\" -> \"%s\"\n",opt->name,opt->value);\r
\r
- return true;\r
+ return opt->value;\r
}\r
\r
-// option_get()\r
+// option_get_default()\r
\r
-const char * option_get(const char var[]) {\r
+const char * option_get_default(const char name[]) {\r
\r
option_t * opt;\r
\r
- ASSERT(var!=NULL);\r
+ ASSERT(name!=NULL);\r
\r
- opt = option_find(var);\r
- if (opt == NULL) my_fatal("option_get(): unknown option \"%s\"\n",var);\r
+ opt = option_find(name);\r
+ if (opt == NULL) my_fatal("option_get(): unknown option \"%s\"\n",name);\r
\r
- if (UseDebug) my_log("POLYGLOT OPTION GET \"%s\" -> \"%s\"\n",opt->var,opt->val);\r
+ if (UseDebug) my_log("POLYGLOT OPTION GET \"%s\" -> \"%s\"\n",opt->name,opt->value);\r
\r
- return opt->val;\r
+ return opt->default_;\r
}\r
\r
// option_get_bool()\r
\r
-bool option_get_bool(const char var[]) {\r
+bool option_get_bool(const char name[]) {\r
\r
- const char * val;\r
+ const char * value;\r
\r
- val = option_get(var);\r
+ value = option_get(name);\r
\r
if (false) {\r
- } else if (my_string_case_equal(val,"true") || my_string_case_equal(val,"yes") || my_string_equal(val,"1")) {\r
+ } else if (my_string_case_equal(value,"true") || my_string_case_equal(value,"yes") || my_string_equal(value,"1")) {\r
return true;\r
- } else if (my_string_case_equal(val,"false") || my_string_case_equal(val,"no") || my_string_equal(val,"0")) {\r
+ } else if (my_string_case_equal(value,"false") || my_string_case_equal(value,"no") || my_string_equal(value,"0")) {\r
return false;\r
}\r
\r
\r
// option_get_double()\r
\r
-double option_get_double(const char var[]) {\r
+double option_get_double(const char name[]) {\r
\r
- const char * val;\r
+ const char * value;\r
\r
- val = option_get(var);\r
+ value = option_get(name);\r
\r
- return atof(val);\r
+ return atof(value);\r
}\r
\r
// option_get_int()\r
\r
-int option_get_int(const char var[]) {\r
+int option_get_int(const char name[]) {\r
\r
- const char * val;\r
+ const char * value;\r
\r
- val = option_get(var);\r
+ value = option_get(name);\r
\r
- return atoi(val);\r
+ return atoi(value);\r
}\r
\r
// option_get_string()\r
\r
-const char * option_get_string(const char var[]) {\r
+const char * option_get_string(const char name[]) {\r
\r
- const char * val;\r
+ const char * value;\r
\r
- val = option_get(var);\r
+ value = option_get(name);\r
\r
- return val;\r
+ return value;\r
}\r
\r
// option_find()\r
\r
-static option_t * option_find(const char var[]) {\r
+static option_t * option_find(const char name[]) {\r
\r
option_t * opt;\r
\r
- ASSERT(var!=NULL);\r
+ ASSERT(name!=NULL);\r
+\r
\r
- for (opt = &Option[0]; opt->var != NULL; opt++) {\r
- if (my_string_case_equal(opt->var,var)) return opt;\r
+ for (opt = &Option[0]; opt->name != NULL; opt++) {\r
+ if (my_string_case_equal(opt->name,name)) return opt;\r
}\r
\r
return NULL;\r