Allow passing command to InputCommand
[gnushogi.git] / gnushogi / commondsp.c
index 14fd387..ba56401 100644 (file)
@@ -1039,8 +1039,10 @@ BookSave(void)
         RequestInputString(fname, sizeof(fname)-1);
     }
 
-    if (fname[0] == '\0')
+    if (fname[0] == '\0') {
+        dsp->AlwaysShowMessage("aborting book save");
         return;
+    }
 
     if ((fd = fopen(fname, "a")) != NULL)
     {
@@ -1509,7 +1511,7 @@ InputCommand(char *command)
         ZeroTTable();
 #endif
 
-    if ((hint > 0) && !flag.easy && !flag.force)
+    if ((hint > 0) && !flag.easy && !flag.force && !command)
     {
         /*
          * A hint move for the player is available.  Compute a move for the
@@ -1573,6 +1575,10 @@ InputCommand(char *command)
     {
         player = opponent;
 
+        if (flag.analyze && !command) {
+            SelectMove(opponent, BACKGROUND_MODE);
+        }
+
 #ifdef QUIETBACKGROUND
         if (!have_shown_prompt)
         {
@@ -1621,14 +1627,20 @@ InputCommand(char *command)
         {
             flag.post = 0;
         }
+#ifdef MINISHOGI
+        else if (strcmp(s, "variant") == 0)
+        {   /* only variant we play is minishogi */
+            printf("setup (P.BR.S...G.+.++.+Kp.br.s...g.+.++.+k) 5x5+5_shogi rbsgk/4p/5/P4/KGSBR [-] w 0 1\n");
+        }
+#endif
         else if (strcmp(s, "alg") == 0 ||
                  strcmp(s, "accepted") == 0 || strcmp(s, "rejected") == 0 ||
                  strcmp(s, "variant") == 0 || strcmp(s, "computer") == 0)
         {
             /* noop */ ;
         }
-        else if ((strcmp(s, "quit") == 0)
-                 || (strcmp(s, "exit") == 0))
+        else if ((strcmp(s, "quit") == 0) ||
+                 (strcmp(s, "exit") == 0) && !xboard)
         {
             flag.quit = true;
         }
@@ -1640,16 +1652,38 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "protover") == 0)
         {
-            printf("feature myname=\"GNU %sShogi %s\" variants=\"%sshogi\" debug=1 setboard=0 sigint=0 done=1\n",
+            printf("feature myname=\"GNU %s %s\" ",
 #ifdef MINISHOGI
-                                       "mini", PACKAGE_VERSION, "5x5+5_"
+                   "MiniShogi",
 #else
-                                         "",   PACKAGE_VERSION, ""
+                   "Shogi",
 #endif
-                  );
+                   PACKAGE_VERSION
+                );
+            printf("variants=\"%s\" ",
+#ifdef MINISHOGI
+                   "5x5+5_shogi,minishogi"
+#else
+                   "shogi"
+#endif
+                );
+            printf("debug=1 setboard=0 sigint=0 done=1\n");
+        }
+        else if (strcmp(s, ".") == 0)
+        {   // ignore for now
+        }
+        else if (strcmp(s, "exit") == 0)
+        {
+            flag.analyze = false;
+            flag.force = true;
+        }
+        else if (strcmp(s, "analyze") == 0)
+        {
+            flag.analyze = true;
+            flag.force = true;
         }
-        else if ((strcmp(s, "set") == 0)
-                 || (strcmp(s, "edit") == 0))
+        else if ((strcmp(s, "set") == 0) ||
+                 (strcmp(s, "edit") == 0))
         {
             dsp->EditBoard();
         }
@@ -1828,12 +1862,12 @@ InputCommand(char *command)
             BookSave();
         }
 #ifdef EASY_OPENINGS
-        else if ((strcmp(s, "?") == 0)
-                 || (strcmp(s, "!") == 0)
-                 || (strcmp(s, "~") == 0))
+        else if ((strcmp(s, "?") == 0) ||
+                 (strcmp(s, "!") == 0) ||
+                 (strcmp(s, "~") == 0))
 #else
-        else if ((strcmp(s, "?") == 0)
-                 || (strcmp(s, "!") == 0))
+        else if ((strcmp(s, "?") == 0) ||
+                 (strcmp(s, "!") == 0))
 #endif
         {
             FlagMove(*s);