version 1.4.58b
[polyglot.git] / main.c
diff --git a/main.c b/main.c
index 60b1c5d..21bbe17 100644 (file)
--- a/main.c
+++ b/main.c
 // constants\r
 \r
 \r
-static const char * const Version = "1.4.51b";\r
+static const char * const Version = "1.4.58b";\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
+* polyglot [configfile] [-noini] [-ec engine] [-ed enginedirectory] [-en enginename] [-log true/false] [-lf logfile] [-pg <name>=<value>]* [-uci <name>=<value>]*\n\\r
 * polyglot make-book [-pgn inputfile] [-bin outputfile] [-max-ply ply] [-min-game games] [-min-score score] [-only-white] [-only-black] [-uniform]\n\\r
 * polyglot merge-book -in1 inputfile1 -in2 inputfile2 [-out outputfile]\n\\r
 * polyglot info-book [-bin inputfile] [-exact]\n\\r
@@ -185,9 +185,12 @@ static void make_ini(ini_t *ini){
 \r
 static void write_ini(const char *filename,\r
                         ini_t *ini){\r
+  // TODO Quote, dequote\r
     const char *quote;\r
     ini_entry_t *entry;\r
     char tmp[StringSize];\r
+    char tmp1[StringSize];\r
+    char tmp2[StringSize];\r
     FILE *f;\r
     time_t t=time(NULL);\r
     f=fopen(filename,"w");\r
@@ -201,16 +204,11 @@ static void write_ini(const char *filename,
     ini_start_iter(ini);\r
     while((entry=ini_next(ini))){\r
       if(my_string_case_equal(entry->section,"polyglot")){\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
+         my_quote(tmp1,entry->name,ini_specials);\r
+         my_quote(tmp2,entry->value,ini_specials);\r
+          snprintf(tmp,sizeof(tmp),"%s=%s\n",\r
+                   tmp1,\r
+                   tmp2);\r
        tmp[sizeof(tmp)-1]='\0';\r
        fprintf(f,"%s",tmp);\r
       }\r
@@ -218,17 +216,12 @@ static void write_ini(const char *filename,
     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
-            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
+      if(my_string_case_equal(entry->section,"engine")){\r
+        my_quote(tmp1,entry->name,ini_specials);\r
+       my_quote(tmp2,entry->value,ini_specials);\r
+       snprintf(tmp,sizeof(tmp),"%s=%s\n",\r
+                     tmp1,\r
+                     tmp2);\r
        tmp[sizeof(tmp)-1]='\0';\r
        fprintf(f,"%s",tmp);\r
       }\r
@@ -287,6 +280,8 @@ int main(int argc, char * argv[]) {
 \r
     Init = FALSE;\r
 \r
+    gui_init(GUI);\r
+\r
     util_init();\r
     option_init_pg();\r
     \r
@@ -369,7 +364,7 @@ int main(int argc, char * argv[]) {
     \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
+            my_fatal("main(): Can't open config file \"%s\": %s\n",\r
                    option_get_string(Option,"SettingsFile"),\r
                    strerror(errno));\r
         }\r
@@ -442,11 +437,17 @@ int main(int argc, char * argv[]) {
         option_set(Option,entry->name,entry->value);\r
     }\r
 \r
+    // Make sure that EngineCommand has been set\r
+    if(my_string_case_equal(option_get(Option,"EngineCommand"),"<empty>")){\r
+      my_fatal("main(): EngineCommand not set\n");\r
+    }\r
+\r
         // start engine\r
     \r
     engine_open(Engine);\r
+\r
     if(!engine_active(Engine)){\r
-        my_fatal("Could not start \"%s\"\n",option_get(Option,"EngineCommand"));\r
+        my_fatal("main(): Could not start \"%s\"\n",option_get(Option,"EngineCommand"));\r
     }\r
 \r
         // switch to UCI mode if necessary\r
@@ -458,6 +459,7 @@ int main(int argc, char * argv[]) {
         // initialize uci parsing and send uci command. \r
         // Parse options and wait for uciok\r
     \r
+    // XXX\r
     uci_open(Uci,Engine);\r
 \r
     option_set_default(Option,"EngineName",Uci->name);\r
@@ -543,11 +545,6 @@ int main(int argc, char * argv[]) {
         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
@@ -569,11 +566,11 @@ int main(int argc, char * argv[]) {
     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
+            my_fatal("main(): Incorrect use of option: \"%s\"\n",argv[argc-1]);\r
         }\r
     }\r
 \r
-    gui_init(GUI);\r
+    //    gui_init(GUI);\r
     mainloop();\r
     return EXIT_SUCCESS; \r
 }\r
@@ -584,7 +581,7 @@ void polyglot_set_option(const char *name, const char *value){ // this must be c
     ini_t ini[1];\r
     int ret;\r
     ini_init(ini);\r
-    my_log("POLYGLOT Setting PolyGlot option %s=\"%s\"\n",name,value);\r
+    my_log("POLYGLOT Setting PolyGlot option \"%s=%s\"\n",name,value);\r
     if(my_string_case_equal(name,"Save")){\r
         ret=my_mkdir(option_get(Option,"SettingsDir"));\r
         if(ret){\r
@@ -637,18 +634,16 @@ void polyglot_set_option(const char *name, const char *value){ // this must be c
 // quit()\r
 \r
 void quit() {\r
-\r
     my_log("POLYGLOT *** QUIT ***\n");\r
-    \r
-    if (Init) {\r
-        \r
+    if (Init && !Engine->pipex->quit_pending) {\r
         stop_search();\r
+       Engine->pipex->quit_pending=TRUE;\r
         engine_send(Engine,"quit");\r
-        my_log("POLYGLOT Closing engine\n");\r
         engine_close(Engine);\r
         \r
     }\r
-       my_log("POLYGLOT Calling exit\n");\r
+    my_sleep(200);\r
+    my_log("POLYGLOT Calling exit\n");\r
     exit(EXIT_SUCCESS);\r
 }\r
 \r