XBoard: split printing of the features line for clarity.
[gnushogi.git] / gnushogi / commondsp.c
index a883051..4718fd9 100644 (file)
@@ -182,7 +182,7 @@ algbr(short f, short t, short flag)
         short piece = flag & pmask;
 
         mvstr[0][0] = pxx[piece];
-        mvstr[0][1] = '*';
+        mvstr[0][1] = xboard ? '@' : '*';
         mvstr[0][2] = COL_NAME(column(t));
         mvstr[0][3] = ROW_NAME(row(t));
         mvstr[0][4] = '\0';
@@ -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)
     {
@@ -1420,16 +1422,15 @@ TestPSpeed(short(*f) (short side), unsigned j)
 static void
 SetOppTime(char *time)
 {
-    int m, t, sec;
+    int m, t;
 
-    sec = 0;
     t = (int)strtol(time, &time, 10);
 
     if (*time == ':')
     {
         time++;
        /* FIXME: sec is parsed but ignored */
-        sec = (int)strtol(time, &time, 10);
+        (void)strtol(time, &time, 10);
     }
 
     m = (int)strtol(time, &time, 10);
@@ -1453,16 +1454,15 @@ SetOppTime(char *time)
 static void
 SetMachineTime(char *time)
 {
-    int m, t, sec;
+    int m, t;
 
-    sec = 0;
     t = (int)strtol(time, &time, 10);
 
     if (*time == ':')
     {
         time++;
        /* FIXME: sec is parsed but ignored */
-        sec = (int)strtol(time, &time, 10);
+        (void)strtol(time, &time, 10);
     }
 
     m = (int)strtol(time, &time, 10);
@@ -1496,7 +1496,9 @@ SetMachineTime(char *time)
 void
 InputCommand(char *command)
 {
+#ifdef QUIETBACKGROUND
     short have_shown_prompt = false;
+#endif
     short ok, done, is_move = false;
     unsigned short mv;
     char s[80], sx[80];
@@ -1621,17 +1623,50 @@ InputCommand(char *command)
         {
             flag.post = 0;
         }
-        else if (strcmp(s, "alg") == 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))
         {
             flag.quit = true;
         }
-        else if ((strcmp(s, "set") == 0)
-                 || (strcmp(s, "edit") == 0))
+        else if (strcmp(s, "xboard") == 0)
+        {
+            xboard = true;
+            strcpy(ColorStr[0], "White");
+            strcpy(ColorStr[1], "Black");
+        }
+        else if (strcmp(s, "protover") == 0)
+        {
+            printf("feature myname=\"GNU %s %s\" ",
+#ifdef MINISHOGI
+                   "MiniShogi",
+#else
+                   "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, "set") == 0) ||
+                 (strcmp(s, "edit") == 0))
         {
             dsp->EditBoard();
         }
@@ -1717,7 +1752,8 @@ InputCommand(char *command)
         {
             SetMachineTime(sx + strlen("time"));
         }
-        else if (strcmp(s, "otime") == 0)
+        else if ((strcmp(s, "otime") == 0) ||
+                 (xboard && (strcmp(s, "otim")) == 0))
         {
             SetOppTime(sx + strlen("otime"));
         }
@@ -1762,7 +1798,7 @@ InputCommand(char *command)
             ok = true;
             dsp->UpdateDisplay(0, 0, 1, 0);
         }
-        else if (strcmp(s, "black") == 0)
+        else if (xboard ? strcmp(s, "white") == 0 : strcmp(s, "black") == 0)
         {
             computer = white;
             opponent = black;
@@ -1774,7 +1810,7 @@ InputCommand(char *command)
              * ok = true; don't automatically start with black command
              */
         }
-        else if (strcmp(s, "white") == 0)
+        else if (xboard ? strcmp(s, "black") == 0 : strcmp(s, "white") == 0)
         {
             computer = black;
             opponent = white;
@@ -1809,12 +1845,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);