Merge branch 'maint'
[gnushogi.git] / gnushogi / commondsp.c
index 36a5f8d..a6f567d 100644 (file)
@@ -6,6 +6,7 @@
  * ----------------------------------------------------------------------
  * Copyright (c) 1993, 1994, 1995 Matthias Mutz
  * Copyright (c) 1999 Michael Vanier and the Free Software Foundation
+ * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation
  *
  * GNU SHOGI is based on GNU CHESS
  *
  *
  */
 
+/* request *snprintf prototypes */
+#define _POSIX_C_SOURCE 200112L
+#include <stdio.h>
+
 #if defined HAVE_GETTIMEOFDAY
 #include <sys/time.h>
 #endif
@@ -350,7 +355,7 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv)
 
 
 static int
-parser(char *f, int side, short *fpiece)
+parser(char *f, short *fpiece)
 {
     int c1, r1, c2, r2;
     short i, p = false;
@@ -424,7 +429,7 @@ void RequestInputString(char* buffer, unsigned bufsize)
 }
 
 
-void
+static void
 GetGame(void)
 {
     FILE *fd;
@@ -588,7 +593,7 @@ GetGame(void)
             InPtr = fname;
             skipb();
             g = &GameList[GameCnt];
-            g->gmove = parser(InPtr, side, &g->fpiece);
+            g->gmove = parser(InPtr, &g->fpiece);
             skip();
             g->score = atoi(InPtr);
             skip();
@@ -647,7 +652,7 @@ GetGame(void)
 }
 
 
-void
+static void
 SaveGame(void)
 {
     FILE *fd;
@@ -799,7 +804,7 @@ SaveGame(void)
  * xshogi wasn't defined -- wonder why?
  */
 
-void
+static void
 GetXGame(void)
 {
     FILE *fd;
@@ -928,7 +933,7 @@ GetXGame(void)
 }
 
 
-void
+static void
 SaveXGame(void)
 {
     FILE *fd;
@@ -1008,7 +1013,7 @@ SaveXGame(void)
 }
 
 
-void
+static void
 BookSave(void)
 {
     FILE *fd;
@@ -1227,7 +1232,7 @@ ListGame(void)
 }
 
 
-void
+static void
 FlagMove(char c)
 {
     switch(c)
@@ -1253,7 +1258,7 @@ FlagMove(char c)
  * Undo the most recent half-move.
  */
 
-void
+static void
 Undo(void)
 {
     short f, t;
@@ -1362,7 +1367,7 @@ FlagString(unsigned short flags, char *s)
 }
 
 
-void
+static void
 TestSpeed(void(*f)(short side, short ply,
                    short in_check, short blockable),
           unsigned j)
@@ -1416,10 +1421,10 @@ TestSpeed(void(*f)(short side, short ply,
 }
 
 
-void
+static void
 TestPSpeed(short(*f) (short side), unsigned j)
 {
-    short i;
+    unsigned i;
     long cnt, t1, t2;
 #ifdef HAVE_GETTIMEOFDAY
     struct timeval tv;
@@ -1453,19 +1458,18 @@ TestPSpeed(short(*f) (short side), unsigned j)
 }
 
 
-void
-SetOppTime(char *s)
+static void
+SetOppTime(char *time)
 {
-    char *time;
     int m, t, sec;
 
     sec = 0;
-    time = &s[strlen("otime")];
     t = (int)strtol(time, &time, 10);
 
     if (*time == ':')
     {
         time++;
+       /* FIXME: sec is parsed but ignored */
         sec = (int)strtol(time, &time, 10);
     }
 
@@ -1487,19 +1491,18 @@ SetOppTime(char *s)
 }
 
 
-void
-SetMachineTime(char *s)
+static void
+SetMachineTime(char *time)
 {
-    char *time;
     int m, t, sec;
 
-    time = &s[strlen("time")];
     sec = 0;
     t = (int)strtol(time, &time, 10);
 
     if (*time == ':')
     {
         time++;
+       /* FIXME: sec is parsed but ignored */
         sec = (int)strtol(time, &time, 10);
     }
 
@@ -1527,15 +1530,13 @@ SetMachineTime(char *s)
  * Process the user's command. If easy mode is OFF (the computer is thinking
  * on opponents time) and the program is out of book, then make the 'hint'
  * move on the board and call SelectMove() to find a response. The user
- * terminates the search by entering ^C (quit siqnal) before entering a
- * command. If the opponent does not make the hint move, then set Sdepth to
- * zero.
+ * terminates the search by entering a command. If the opponent does not make
+ * the hint move, then set Sdepth to zero.
  */
 
 void
 InputCommand(char *command)
 {
-    int eof = 0;
     short have_shown_prompt = false;
     short ok, done, is_move = false;
     unsigned short mv;
@@ -1562,10 +1563,8 @@ InputCommand(char *command)
         algbr((short) hint >> 8, (short) hint & 0xff, false);
         strcpy(s, mvstr[0]);
 
-#if !defined NOPOST
         if (flag.post)
             dsp->GiveHint();
-#endif
 
         /* do the hint move */
         if (VerifyMove(s, VERIFY_AND_TRY_MODE, &mv))
@@ -1629,21 +1628,16 @@ InputCommand(char *command)
 #endif /* QUIETBACKGROUND */
 
         if (command == NULL) {
-            if (NOT_CURSES)
-                s[0] = '\0';
-
-            eof = dsp->GetString(sx);
+            int eof = dsp->GetString(sx);
+            if (eof)
+                dsp->ExitShogi();
         } else {
             strcpy(sx, command);
             done = true;
         }
 
-        sscanf(sx, "%s", s);
-
-        if (eof)
-            dsp->ExitShogi();
-
-        if (s[0] == '\0')
+        /* extract first word */
+        if (sscanf(sx, "%s", s) < 1)
             continue;
 
         if (strcmp(s, "bd") == 0)   /* bd -- display board */
@@ -1666,25 +1660,19 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "alg") == 0)
         {
-            /* noop */ ; /* alg */
+            /* noop */ ;
         }
         else if ((strcmp(s, "quit") == 0)
                  || (strcmp(s, "exit") == 0))
         {
             flag.quit = true;
         }
-#if !defined NOPOST
-        else if (strcmp(s, "post") == 0)
-        {
-            flag.post = !flag.post;
-        }
-#endif
         else if ((strcmp(s, "set") == 0)
                  || (strcmp(s, "edit") == 0))
         {
             dsp->EditBoard();
         }
-        else if ((strcmp(s, "setup") == 0))
+        else if (strcmp(s, "setup") == 0)
         {
             dsp->SetupBoard();
         }
@@ -1742,10 +1730,13 @@ InputCommand(char *command)
         {
             ListGame();
         }
-        else if ((strcmp(s, "level") == 0)
-                 || (strcmp(s, "clock") == 0))
+        else if (strcmp(s, "level") == 0)
+        {
+            dsp->SelectLevel(sx + strlen("level"));
+        }
+        else if (strcmp(s, "clock") == 0)
         {
-            dsp->SelectLevel(sx);
+            dsp->SelectLevel(sx + strlen("clock"));
         }
         else if (strcmp(s, "hash") == 0)
         {
@@ -1761,11 +1752,11 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "time") == 0)
         {
-            SetMachineTime(sx);
+            SetMachineTime(sx + strlen("time"));
         }
         else if (strcmp(s, "otime") == 0)
         {
-            SetOppTime(sx);
+            SetOppTime(sx + strlen("otime"));
         }
         else if (strcmp(s, "Awindow") == 0)
         {
@@ -1874,7 +1865,11 @@ InputCommand(char *command)
         }
         else if (strcmp(s, "depth") == 0)
         {
-            dsp->ChangeSearchDepth();
+            dsp->ChangeSearchDepth(sx + strlen("depth"));
+        }
+        else if (strcmp(s, "sd") == 0)
+        {
+            dsp->ChangeSearchDepth(sx + strlen("sd"));
         }
         else if (strcmp(s, "hashdepth") == 0)
         {
@@ -2021,8 +2016,6 @@ InputCommand(char *command)
         }
 
 #ifdef notdef /* optional pass best line to frontend with move */
-#  if !defined NOPOST
-
         if (flag.post && !flag.mate)
         {
             int i;
@@ -2035,7 +2028,6 @@ InputCommand(char *command)
                 printf("%5s ", mvstr[0]);
             }
         }
-#  endif
         printf("\n");
 #endif
     }