version 1.4.46b
[polyglot.git] / option.c
index 44d5c83..0052fe3 100644 (file)
--- a/option.c
+++ b/option.c
@@ -12,7 +12,7 @@
 // constants\r
 \r
 static const bool UseDebug = FALSE;\r
-\r
+static const int  StringSize = 4096;\r
 \r
 // variables\r
 \r
@@ -21,19 +21,20 @@ static const bool UseDebug = FALSE;
 option_list_t Option[1];\r
 \r
 option_t DefaultOptions[] = {    \r
-    { "OptionFile",       "string","0","0",     "polyglot.ini", NULL,0,NNB,  PG}, \r
+    { "OptionFile",       "file","0","0",     "polyglot.ini", NULL,0,NNB,  PG}, \r
 \r
    // options\r
 \r
-    { "SaveSettingsOnExit","check","0","0",      "true"     , NULL,0,NNB,  PG|XBOARD}, \r
-    { "SaveFile",         "string","0","0",     "<empty>"   , NULL,0,NNB,  PG|XBOARD},\r
+    { "Persist",          "check","0","0",      "true"      , NULL,0,NNB,  PG|XBOARD},\r
+    { "PersistFile",      "file","0","0",     "<empty>"   , NULL,0,NNB,  PG},\r
+    { "PersistDir",       "path","0","0",     "<empty>"   , NULL,0,NNB,  PG},\r
     \r
     { "EngineName",       "string","0","0",     "<empty>"   , NULL,0,NNB,  PG}, \r
-    { "EngineDir",        "string","0","0",     "."         , NULL,0,NNB,  PG}, \r
+    { "EngineDir",        "path","0","0",     "."         , NULL,0,NNB,  PG}, \r
     { "EngineCommand",    "string","0","0",     "<empty>"   , NULL,0,NNB,  PG}, \r
 \r
     { "Log",              "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD|UCI}, \r
-    { "LogFile",          "string","0","0",     "polyglot.log", NULL,0,NNB,  PG|XBOARD|UCI}, \r
+    { "LogFile",          "file","0","0",     "polyglot.log", NULL,0,NNB,  PG|XBOARD|UCI}, \r
 \r
     { "UCI",              "check","0","0",      "false"     , NULL,0,NNB,  PG}, \r
 \r
@@ -49,7 +50,7 @@ option_t DefaultOptions[] = {
     { "MateScore",        "spin","0","100000",  "10000"     , NULL,0,NNB,  PG|XBOARD}, \r
 \r
     { "Book",             "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD|UCI}, \r
-    { "BookFile",         "string","0","0",     "book.bin"  , NULL,0,NNB,  PG|XBOARD|UCI}, \r
+    { "BookFile",         "file","0","0",     "book.bin"  , NULL,0,NNB,  PG|XBOARD|UCI}, \r
 \r
     { "BookRandom",       "check","0","0",      "true"      , NULL,0,NNB,  PG|XBOARD|UCI}, \r
     { "BookDepth",        "spin","0","256",     "256"       , NULL,0,NNB,  PG|XBOARD}, \r
@@ -77,6 +78,11 @@ option_t DefaultOptions[] = {
 \r
     { "WbWorkArounds",    "check","0","0",      "true"      , NULL,0,NNB,  PG|XBOARD}, \r
     { "WbWorkArounds2",   "check","0","0",      "false"     , NULL,0,NNB,  PG|XBOARD}, \r
+\r
+    // Buttons\r
+\r
+//    { "Defaults",         "reset","0","0",     "false"     , NULL,0,NNB,  PG|XBOARD},\r
+\r
     { NULL,               NULL,"0","0",         NULL        , NULL,0,NNB,  0},\r
 \r
 };\r
@@ -99,6 +105,8 @@ void option_init_pg() {
 \r
     int i;\r
     option_t *p=DefaultOptions;\r
+    char *home_dir;\r
+    char PersistDir[StringSize];\r
     \r
     option_init(Option);\r
     while(p){\r
@@ -112,6 +120,18 @@ void option_init_pg() {
     for(i=0;i<Option->option_nb;i++){\r
         Option->options[i].value=my_strdup(Option->options[i].default_);\r
     }\r
+#ifndef _WIN32\r
+    home_dir=getenv("HOME");\r
+    if(!home_dir){\r
+        home_dir=".";\r
+    }\r
+    snprintf(PersistDir,sizeof(PersistDir),"%s/.polyglot",home_dir);\r
+    PersistDir[sizeof(PersistDir)-1]='\0';\r
+#else\r
+    sprintf(PersistDir,".\\_PG");\r
+#endif\r
+    option_set(Option,"PersistDir",PersistDir);\r
+    option_set_default(Option,"PersistDir",PersistDir);\r
 }\r
 \r
 // option_init()\r
@@ -166,6 +186,11 @@ bool option_set(option_list_t *option,
    opt = option_find(option,name);\r
    if (opt == NULL) return FALSE;\r
 \r
+   if(my_string_case_equal(opt->type,"check")){\r
+      value=(my_string_equal(value,"1")||\r
+            my_string_case_equal(value,"true"))?"true":"false";\r
+   }\r
+\r
    my_string_set(&opt->value,value);\r
 \r
    if (UseDebug) my_log("POLYGLOT OPTION SET \"%s\" -> \"%s\"\n",opt->name,opt->value);\r
@@ -186,6 +211,11 @@ bool option_set_default(option_list_t *option,
    opt = option_find(option,name);\r
    if (opt == NULL) return FALSE;\r
 \r
+   if(my_string_case_equal(opt->type,"check")){\r
+      value=(my_string_equal(value,"1")||\r
+            my_string_case_equal(value,"true"))?"true":"false";\r
+   }\r
+\r
    my_string_set(&opt->default_,value);\r
 \r
    if (UseDebug) my_log("POLYGLOT OPTION DEFAULT SET \"%s\" -> \"%s\"\n",opt->name,opt->default_);\r