Ensure the player names are refreshed after a switch (impacts Curses mode).
[gnushogi.git] / gnushogi / commondsp.c
index af9df16..33d1068 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
  *
@@ -16,8 +17,8 @@
  *
  * GNU Shogi is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 1, or (at your option) any
- * later version.
+ * Free Software Foundation; either version 3 of the License,
+ * or (at your option) any later version.
  *
  * GNU Shogi is distributed in the hope that it will be useful, but WITHOUT
  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  * for more details.
  *
  * You should have received a copy of the GNU General Public License along
- * with GNU Shogi; see the file COPYING.  If not, write to the Free
- * Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ * with GNU Shogi; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
  * ----------------------------------------------------------------------
  *
  */
 
+/* request *snprintf prototypes */
+#define _POSIX_C_SOURCE 200112L
+#include <stdio.h>
+
 #if defined HAVE_GETTIMEOFDAY
 #include <sys/time.h>
 #endif
@@ -42,7 +47,6 @@
 #include <sys/types.h>
 #include <sys/file.h>
 
-#include <curses.h>
 #include "gnushogi.h"
 
 char mvstr[4][6];
@@ -128,6 +132,17 @@ movealgbr(short m, char *s)
 
 /*
  * Generate move strings in different formats.
+ *
+ * INPUT:
+ * - f                                 piece to be moved
+ *   - 0 < f < NO_SQUARES                              source square
+ *   - NO_SQUARES <= f NO_SQUARES + 2*NO_PIECES                dropped piece modulo NO_PIECES
+ * - t & 0x7f                          target square
+ * - t & 0x80                          promotion flag
+ * - flag                              FIXME: must be zero ?
+ *
+ * OUTPUT:
+ * - GLOBAL mvstr
  */
 
 void
@@ -153,12 +168,8 @@ algbr(short f, short t, short flag)
 
     if ((f == t) && ((f != 0) || (t != 0)))
     {
-        if (!barebones)
-        {
-            if (NOT_CURSES)
-                printf("error in algbr: FROM=TO=%d, flag=0x%4x\n", t, flag);
-            else
-                printw("error in algbr: FROM=TO=%d, flag=0x%4x\n", t, flag);
+        if (!barebones) {
+            Printf("error in algbr: FROM=TO=%d, flag=0x%4x\n", t, flag);
         }
 
         mvstr[0][0] = mvstr[1][0] = mvstr[2][0] = mvstr[3][0] = '\0';
@@ -291,20 +302,7 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv)
         if (SqAttacked(PieceList[opponent][0], computer, &blocked))
         {
             UnmakeMove(opponent, &xnode, &tempb, &tempc, &tempsf, &tempst);
-
-            if (NOT_CURSES)
-            {
-                /* Illegal move in check */
-                printf(CP[77], mvstr[0]);
-                printf("\n");
-            }
-            else
-            {
-                /* Illegal move in check */
-                sprintf(buffer, CP[77], s);
-                ShowMessage(buffer);
-            }
-
+            AlwaysShowMessage("Illegal move (in check) %s", s);
             return false;
         }
         else
@@ -346,21 +344,11 @@ VerifyMove(char *s, VerifyMove_mode iop, unsigned short *mv)
         }
     }
 
-    if (NOT_CURSES)
-    {
-        /* Illegal move */
-        printf (CP[75], s);
-    }
-    else /* Curses. */
-    {
-        /* Illegal move */
-        sprintf(buffer, CP[76], s);
-        ShowMessage(buffer);
-    }
+    AlwaysShowMessage("Illegal move (no match) %s", s);
 
     if (!barebones && (cnt > 1))
     {
-        sprintf(buffer, CP[32], s);
+        sprintf(buffer, "Ambiguous Move %s!", s);
         ShowMessage(buffer);
     }
 
@@ -389,17 +377,17 @@ parser(char *f, int side, short *fpiece)
 
     if (f[1] == '*' || f[1] == '\'')
     {
-        c2 = '9' - f[2];
-        r2 = 'i' - f[3];
+        c2 = COL_NUM(f[2]);
+        r2 = ROW_NUM(f[3]);
 
         return ((NO_SQUARES + *fpiece) << 8) | locn(r2, c2);
     }
     else
     {
-        c1 = '9' - f[1];
-        r1 = 'i' - f[2];
-        c2 = '9' - f[3];
-        r2 = 'i' - f[4];
+        c1 = COL_NUM(f[1]);
+        r1 = ROW_NUM(f[2]);
+        c2 = COL_NUM(f[3]);
+        r2 = ROW_NUM(f[4]);
         p = (f[5] == '+') ? 0x80 : 0;
 
         return (locn(r1, c1) << 8) | locn(r2, c2) | p;
@@ -437,29 +425,15 @@ GetGame(void)
     short sq;
     short side, isp;
 
-    if (savefile[0])
-    {
+    if (savefile[0]) {
         strcpy(fname, savefile);
-    }
-    else
-    {
-        /* Enter file name */
-        ShowMessage(CP[63]);
-
-        if (NOT_CURSES)
-        {
-            scanf("%s", fname);
-        }
-        else
-        {
-            fflush(stdout);
-            scanw("%s", fname);
-        }
+    } else {
+        ShowMessage("Enter file name: ");
+        RequestInputString(fname, sizeof(fname)-1);
     }
 
-    /* shogi.000 */
     if (fname[0] == '\0')
-        strcpy(fname, CP[137]);
+        strcpy(fname, "shogi.000");
 
     if ((fd = fopen(fname, "r")) != NULL)
     {
@@ -573,10 +547,12 @@ GetGame(void)
             skipb();
             Captured[side][pawn] = atoi(InPtr);
             skip();
+#ifndef MINISHOGI
             Captured[side][lance] = atoi(InPtr);
             skip();
             Captured[side][knight] = atoi(InPtr);
             skip();
+#endif
             Captured[side][silver] = atoi(InPtr);
             skip();
             Captured[side][gold] = atoi(InPtr);
@@ -636,7 +612,7 @@ GetGame(void)
                 }
 
                 skip();
-                g->color = ((*InPtr == CP[119][0]) ? white : black);
+                g->color = ((*InPtr == 'W') ? white : black);
                 skip();
                 g->piece = (*InPtr == '+'
                             ? promoted[piece]
@@ -674,52 +650,39 @@ SaveGame(void)
     short side, piece;
     char empty[2] = "\n";
 
-    if (savefile[0])
-    {
+    if (savefile[0]) {
         strcpy(fname, savefile);
-    }
-    else
-    {
-        /* Enter file name */
-        ShowMessage(CP[63]);
-
-        if (NOT_CURSES)
-        {
-            scanf("%s", fname);
-        }
-        else
-        {
-            fflush(stdout);
-            scanw("%s", fname);
-        }
+    } else {
+        ShowMessage("Enter file name: ");
+        RequestInputString(fname, sizeof(fname)-1);
     }
 
-    if (fname[0] == '\0')        /* shogi.000 */
-        strcpy(fname, CP[137]);
+    if (fname[0] == '\0')
+        strcpy(fname, "shogi.000");
 
     if ((fd = fopen(fname, "w")) != NULL)
     {
         char *b, *w;
-        b = w = CP[74];
+        b = w = "Human   ";
 
         if (computer == white)
-            w = CP[141];
+            w = "computer";
 
         if (computer == black)
-            b = CP[141];
+            b = "computer";
 
-        fprintf(fd, CP[37], w, b, Game50,
+        fprintf(fd, "White %s Black %s %d %s\n", w, b, Game50,
                 flag.force ? "force" : "");
-        fprintf(fd, empty);
-        fprintf(fd, CP[111], TCflag, OperatorTime);
-        fprintf(fd, CP[117],
+        fputs(empty, fd);
+        fprintf(fd, "TimeControl %d Operator Time %d\n", TCflag, OperatorTime);
+        fprintf(fd, "Black Clock %ld Moves %d\nWhite Clock %ld Moves %d\n",
                 TimeControl.clock[black], TimeControl.moves[black],
                 TimeControl.clock[white], TimeControl.moves[white]);
-        fprintf(fd, empty);
+        fputs(empty, fd);
 
         for (i = NO_ROWS - 1; i > -1; i--)
         {
-            fprintf(fd, "%c ", 'i' - i);
+            fprintf(fd, "%c ", ROW_NAME(i));
 
             for (c = 0; c < NO_COLS; c++)
             {
@@ -753,17 +716,25 @@ SaveGame(void)
             fprintf(fd, "\n");
         }
 
-        fprintf(fd, empty);
+        fputs(empty, fd);
+#ifndef MINISHOGI
         fprintf(fd, "   9 8 7 6 5 4 3 2 1\n");
-        fprintf(fd, empty);
+        fputs(empty, fd);
         fprintf(fd, "   p  l  n  s  g  b  r  k\n");
+#else
+        fprintf(fd, "   5 4 3 2 1\n");
+        fputs(empty, fd);
+        fprintf(fd, "   p  s  g  b  r  k\n");
+#endif
 
         for (side = 0; side <= 1; side++)
         {
             fprintf(fd, "%c", (side == black) ? 'B' : 'W');
             fprintf(fd, " %2d", Captured[side][pawn]);
+#ifndef MINISHOGI
             fprintf(fd, " %2d", Captured[side][lance]);
             fprintf(fd, " %2d", Captured[side][knight]);
+#endif
             fprintf(fd, " %2d", Captured[side][silver]);
             fprintf(fd, " %2d", Captured[side][gold]);
             fprintf(fd, " %2d", Captured[side][bishop]);
@@ -772,8 +743,8 @@ SaveGame(void)
             fprintf(fd, "\n");
         }
 
-        fprintf(fd, empty);
-        fprintf(fd, CP[126]);
+        fputs(empty, fd);
+        fputs("  move   score depth   nodes   time flags                         capture\n", fd);
 
         for (i = 1; i <= GameCnt; i++)
         {
@@ -807,13 +778,11 @@ SaveGame(void)
 
         fclose(fd);
 
-        /* Game saved */
-        ShowMessage(CP[70]);
+        ShowMessage("Game saved");
     }
     else
     {
-        /* ShowMessage("Could not open file"); */
-        ShowMessage(CP[48]);
+        ShowMessage("Could not open file");
     }
 }
 
@@ -833,21 +802,11 @@ GetXGame(void)
     short sq;
     short side, isp;
 
-    /* Enter file name */
-    ShowMessage(CP[63]);
-
-    if (NOT_CURSES)
-    {
-        scanf("%s", fname);
-    }
-    else
-    {
-        fflush(stdout);
-        scanw("%s", fname);
-    }
+    ShowMessage("Enter file name: ");
+    RequestInputString(fname, sizeof(fname)-1);
 
-    if (fname[0] == '\0') /* XSHOGI.position.read */
-        strcpy(fname, CP[205]);
+    if (fname[0] == '\0')
+        strcpy(fname, "xshogi.position.read");
 
     if ((fd = fopen(fname, "r")) != NULL)
     {
@@ -861,7 +820,7 @@ GetXGame(void)
 #ifdef notdef
         fname[6] = '\0';
 
-        if (strcmp(fname, CP[206]))
+        if (strcmp(fname, "xshogi"))
             return;
 #endif
 
@@ -927,10 +886,12 @@ GetXGame(void)
             InPtr = fname;
             Captured[side][pawn]   = atoi(InPtr);
             skip();
+#ifndef MINISHOGI
             Captured[side][lance]  = atoi(InPtr);
             skip();
             Captured[side][knight] = atoi(InPtr);
             skip();
+#endif
             Captured[side][silver] = atoi(InPtr);
             skip();
             Captured[side][gold]   = atoi(InPtr);
@@ -970,29 +931,16 @@ SaveXGame(void)
     short sq, piece;
     short side, isp;
 
-    /* Enter file name */
-    ShowMessage(CP[63]);
+    ShowMessage("Enter file name: ");
+    RequestInputString(fname, sizeof(fname)-1);
 
-    if (NOT_CURSES)
-    {
-        scanf("%s", fname);
-    }
-    else
-    {
-        fflush(stdout);
-        scanw("%s", fname);
-    }
-
-    if (fname[0] == '\0') /* XSHOGI.position.read */
-        strcpy(fname, CP[205]);
+    if (fname[0] == '\0')
+        strcpy(fname, "xshogi.position.read");
 
     if ((fd = fopen(fname, "w")) != NULL)
     {
-        /* xshogi position file ... */
         fputs("# xshogi position file -- \n", fd);
-        /* -- empty line -- */
         fputs("\n", fd);
-        /* -- empty line -- */
         fputs("\n", fd);
 
         for (i = NO_ROWS - 1; i > -1; i--)
@@ -1024,10 +972,17 @@ SaveXGame(void)
 
         for (side = 0; side <= 1; side++)
         {
-            sprintf(fname, "%d %d %d %d %d %d %d %d\n",
+            sprintf(fname,
+#ifndef MINISHOGI
+                   "%d %d %d %d %d %d %d %d\n",
+#else
+                   "%d %d %d %d %d %d\n",
+#endif
                     Captured[side][pawn],
+#ifndef MINISHOGI
                     Captured[side][lance],
                     Captured[side][knight],
+#endif
                     Captured[side][silver],
                     Captured[side][gold],
                     Captured[side][bishop],
@@ -1054,24 +1009,12 @@ BookSave(void)
     char fname[256], sflags[4];
     short i, j, f, t;
 
-    if (savefile[0])
-    {
+    if (savefile[0]) {
         strcpy(fname, savefile);
-    }
-    else
-    {
+    } else {
         /* Enter file name */
-        ShowMessage(CP[63]);
-
-        if (NOT_CURSES)
-        {
-            scanf("%s", fname);
-        }
-        else
-        {
-            fflush(stdout);
-            scanw("%s", fname);
-        }
+        ShowMessage("Enter file name: ");
+        RequestInputString(fname, sizeof(fname)-1);
     }
 
     if (fname[0] == '\0')
@@ -1142,13 +1085,11 @@ BookSave(void)
 
         fclose(fd);
 
-        /* Game saved */
-        ShowMessage(CP[70]);
+        ShowMessage("Game saved");
     }
     else
     {
-        /* ShowMessage("Could not open file"); */
-        ShowMessage(CP[48]);
+        ShowMessage("Could not open file");
     }
 }
 
@@ -1176,13 +1117,13 @@ ListGame(void)
         dbuf[16] = '\0';
         dbuf[19] = '\0';
 
-        /* use format "CLp16.Jan01-020304B" when patchlevel is 16,
+        /* use format "CL.Jan01-020304B" when
            date is Jan 1
            time is 02:03:04
            program played white */
 
-        sprintf(fname, "CLp%s.%s%s-%s%s%s%c",
-                patchlevel, dbuf + 4, dbuf + 8, dbuf + 11, dbuf + 14,
+        sprintf(fname, "CL.%s%s-%s%s%s%c",
+                dbuf + 4, dbuf + 8, dbuf + 11, dbuf + 14,
                 dbuf + 17, ColorStr[computer][0]);
 
         /* replace space padding with 0 */
@@ -1197,14 +1138,13 @@ ListGame(void)
 
     if (!fd)
     {
-        printf(CP[219], fname);
+        printf("Open failure for file: %s", fname);
         exit(1);
     }
 
-    /* fprintf(fd, "gnushogi game %d\n", u); */
-    fprintf(fd, CP[161], version, patchlevel);
-    fprintf(fd, CP[10]);
-    fprintf(fd, CP[11]);
+    fprintf(fd, "gnushogi %s game\n", PACKAGE_VERSION);
+    fputs("         score  depth   nodes  time         ", fd);
+    fputs("         score  depth   nodes  time\n", fd);
 
     for (i = 1; i <= GameCnt; i++)
     {
@@ -1251,9 +1191,9 @@ ListGame(void)
 
     if (GameList[GameCnt].flags & draw)
     {
-        fprintf(fd, CP[54], DRAW);
+        fprintf(fd, "Draw %s\n", DRAW);
 
-        if (DRAW == CP[101])
+        if (DRAW == DRAW_REPETITION)
         {
             short j;
 
@@ -1432,7 +1372,7 @@ TestSpeed(void(*f)(short side, short ply,
 #endif
 
     unsigned i;
-    long cnt, rate, t1, t2;
+    long cnt, t1, t2;
 
 #ifdef HAVE_GETTIMEOFDAY
     struct timeval tv;
@@ -1472,17 +1412,7 @@ TestSpeed(void(*f)(short side, short ply,
     else
         et = 1;
 
-    rate = (((et) ? ((cnt * 100) / et) : 0));
-
-#ifdef DYNAMIC_ZNODES
-    if (rate > 0)
-        znodes = rate;
-#endif
-
-    if (NOT_CURSES)
-        printf(CP[91], cnt, rate);
-    else
-        ShowNodeCnt(cnt);
+    ShowNodeCnt(cnt);
 }
 
 
@@ -1491,7 +1421,7 @@ void
 TestPSpeed(short(*f) (short side), unsigned j)
 {
     short i;
-    long cnt, rate, t1, t2;
+    long cnt, t1, t2;
 #ifdef HAVE_GETTIMEOFDAY
     struct timeval tv;
 #endif
@@ -1520,14 +1450,7 @@ TestPSpeed(short(*f) (short side), unsigned j)
     else
         et = 1;
 
-    rate = (et) ? ((cnt * 100) / et) : 0;
-
-    /* printf("Nodes= %ld Nodes/sec= %ld\n", cnt, rate); */
-
-    if (NOT_CURSES)
-        printf(CP[91], cnt, rate);
-    else
-        ShowNodeCnt(cnt);
+    ShowNodeCnt(cnt);
 }
 
 
@@ -1539,7 +1462,7 @@ SetOppTime(char *s)
     int m, t, sec;
 
     sec = 0;
-    time = &s[strlen(CP[228])];
+    time = &s[strlen("otime")];
     t = (int)strtol(time, &time, 10);
 
     if (*time == ':')
@@ -1573,7 +1496,7 @@ SetMachineTime(char *s)
     char *time;
     int m, t, sec;
 
-    time = &s[strlen(CP[197])];
+    time = &s[strlen("time")];
     sec = 0;
     t = (int)strtol(time, &time, 10);
 
@@ -1656,16 +1579,7 @@ InputCommand(char *command)
             Sdepth = 0;
 
 #ifdef QUIETBACKGROUND
-            if (NOT_CURSES)
-            {
-                PromptForMove();
-            }
-            else
-            {
-                ShowSidetoMove();
-                ShowPrompt();
-            }
-
+            ShowPrompt();
             have_shown_prompt = true;
 #endif /* QUIETBACKGROUND */
 
@@ -1712,15 +1626,7 @@ InputCommand(char *command)
         {
 #endif /* QUIETBACKGROUND */
 
-            if (NOT_CURSES)
-            {
-                PromptForMove();
-            }
-            else
-            {
-                ShowSidetoMove();
-                ShowPrompt();
-            }
+            ShowPrompt();
 
 #ifdef QUIETBACKGROUND
         }
@@ -1728,23 +1634,12 @@ InputCommand(char *command)
         have_shown_prompt = false;
 #endif /* QUIETBACKGROUND */
 
-        if (command == NULL)
-        {
+        if (command == NULL) {
             if (NOT_CURSES)
-            {
-                s[0] = sx[0] = '\0';
+                s[0] = '\0';
 
-                while(!sx[0])
-                    (void)fgets(sx, 80, stdin);
-            }
-            else
-            {
-                fflush(stdout);
-                eof = (getstr(sx) == ERR);
-            }
-        }
-        else
-        {
+            eof = GetString(sx);
+        } else {
             strcpy(sx, command);
             done = true;
         }
@@ -1757,7 +1652,7 @@ InputCommand(char *command)
         if (s[0] == '\0')
             continue;
 
-        if (strcmp(s, CP[131]) == 0)   /* bd -- display board */
+        if (strcmp(s, "bd") == 0)   /* bd -- display board */
         {
             /* FIXME: Hack alert! */
             short old_xshogi = XSHOGI;
@@ -1775,35 +1670,35 @@ InputCommand(char *command)
         {
             flag.post = !flag.post;
         }
-        else if (strcmp(s, CP[129]) == 0)
+        else if (strcmp(s, "alg") == 0)
         {
             /* noop */ ; /* alg */
         }
-        else if ((strcmp(s, CP[180]) == 0)
-                 || (strcmp(s, CP[216]) == 0))  /* quit exit */
+        else if ((strcmp(s, "quit") == 0)
+                 || (strcmp(s, "exit") == 0))
         {
             flag.quit = true;
         }
 #if !defined NOPOST
-        else if (strcmp(s, CP[178]) == 0)  /* post */
+        else if (strcmp(s, "post") == 0)
         {
             flag.post = !flag.post;
         }
 #endif
-        else if ((strcmp(s, CP[191]) == 0)
-                 || (strcmp(s, CP[154]) == 0))  /* set edit */
+        else if ((strcmp(s, "set") == 0)
+                 || (strcmp(s, "edit") == 0))
         {
             EditBoard();
         }
-        else if (NOT_CURSES && (strcmp(s, CP[190]) == 0))  /* setup */
+        else if ((strcmp(s, "setup") == 0))
         {
             SetupBoard();
         }
-        else if (strcmp(s, CP[156]) == 0)  /* first */
+        else if (strcmp(s, "first") == 0)
         {
             ok = true;
         }
-        else if (strcmp(s, CP[162]) == 0)  /* go */
+        else if (strcmp(s, "go") == 0)
         {
             ok = true;
             flag.force = false;
@@ -1819,15 +1714,15 @@ InputCommand(char *command)
                 opponent = white;
             }
         }
-        else if (strcmp(s, CP[166]) == 0)  /* help */
+        else if (strcmp(s, "help") == 0)
         {
             help();
         }
-        else if (strcmp(s, CP[221]) == 0)  /* material */
+        else if (strcmp(s, "material") == 0)
         {
             flag.material = !flag.material;
         }
-        else if (strcmp(s, CP[157]) == 0)  /* force */
+        else if (strcmp(s, "force") == 0)
         {
             if (XSHOGI)
             {
@@ -1840,61 +1735,61 @@ InputCommand(char *command)
                 flag.bothsides = false;
             }
         }
-        else if (strcmp(s, CP[134]) == 0)  /* book */
+        else if (strcmp(s, "book") == 0)
         {
             Book = Book ? 0 : BOOKFAIL;
         }
-        else if (strcmp(s, CP[172]) == 0)  /* new */
+        else if (strcmp(s, "new") == 0)
         {
             NewGame();
             UpdateDisplay(0, 0, 1, 0);
         }
-        else if (strcmp(s, CP[171]) == 0)  /* list */
+        else if (strcmp(s, "list") == 0)
         {
             ListGame();
         }
-        else if ((strcmp(s, CP[169]) == 0)
-                 || (strcmp(s, CP[217]) == 0))  /* level clock */
+        else if ((strcmp(s, "level") == 0)
+                 || (strcmp(s, "clock") == 0))
         {
             SelectLevel(sx);
         }
-        else if (strcmp(s, CP[165]) == 0)  /* hash */
+        else if (strcmp(s, "hash") == 0)
         {
             flag.hash = !flag.hash;
         }
-        else if (strcmp(s, CP[227]) == 0)  /* gamein */
+        else if (strcmp(s, "gamein") == 0)
         {
             flag.gamein = !flag.gamein;
         }
-        else if (strcmp(s, CP[226]) == 0)  /* beep */
+        else if (strcmp(s, "beep") == 0)
         {
             flag.beep = !flag.beep;
         }
-        else if (strcmp(s, CP[197]) == 0)  /* time */
+        else if (strcmp(s, "time") == 0)
         {
             SetMachineTime(sx);
         }
-        else if (strcmp(s, CP[228]) == 0)  /* otime */
+        else if (strcmp(s, "otime") == 0)
         {
             SetOppTime(sx);
         }
-        else if (strcmp(s, CP[33]) == 0)   /* Awindow */
+        else if (strcmp(s, "Awindow") == 0)
         {
             ChangeAlphaWindow();
         }
-        else if (strcmp(s, CP[39]) == 0)   /* Bwindow */
+        else if (strcmp(s, "Bwindow") == 0)
         {
             ChangeBetaWindow();
         }
-        else if (strcmp(s, CP[183]) == 0)  /* rcptr */
+        else if (strcmp(s, "rcptr") == 0)
         {
             flag.rcptr = !flag.rcptr;
         }
-        else if (strcmp(s, CP[168]) == 0)  /* hint */
+        else if (strcmp(s, "hint") == 0)
         {
             GiveHint();
         }
-        else if (strcmp(s, CP[135]) == 0)  /* both */
+        else if (strcmp(s, "both") == 0)
         {
             flag.bothsides = !flag.bothsides;
             flag.force = false;
@@ -1903,13 +1798,13 @@ InputCommand(char *command)
             SelectMove(opponent, FOREGROUND_MODE);
             ok = true;
         }
-        else if (strcmp(s, CP[185]) == 0)  /* reverse */
+        else if (strcmp(s, "reverse") == 0)
         {
             flag.reverse = !flag.reverse;
             ClearScreen();
             UpdateDisplay(0, 0, 1, 0);
         }
-        else if (strcmp(s, CP[195]) == 0)  /* switch */
+        else if (strcmp(s, "switch") == 0)
         {
             computer = computer ^ 1;
             opponent = opponent ^ 1;
@@ -1917,8 +1812,9 @@ InputCommand(char *command)
             flag.force = false;
             Sdepth = 0;
             ok = true;
+            UpdateDisplay(0, 0, 1, 0);
         }
-        else if (strcmp(s, CP[203]) == 0)  /* black */
+        else if (strcmp(s, "black") == 0)
         {
             computer = white;
             opponent = black;
@@ -1930,7 +1826,7 @@ InputCommand(char *command)
              * ok = true; don't automatically start with black command
              */
         }
-        else if (strcmp(s, CP[133]) == 0)  /* white */
+        else if (strcmp(s, "white") == 0)
         {
             computer = black;
             opponent = white;
@@ -1942,25 +1838,25 @@ InputCommand(char *command)
              * ok = true; don't automatically start with white command
              */
         }
-        else if (strcmp(s, CP[201]) == 0 && GameCnt > 0)   /* undo */
+        else if (strcmp(s, "undo") == 0 && GameCnt > 0)
         {
             Undo();
         }
-        else if (strcmp(s, CP[184]) == 0 && GameCnt > 1)   /* remove */
+        else if (strcmp(s, "remove") == 0 && GameCnt > 1)
         {
             Undo();
             Undo();
         }
         /* CHECKME: are these next three correct? */
-        else if (!XSHOGI && strcmp(s, CP[207]) == 0)  /* xget */
+        else if (!XSHOGI && strcmp(s, "xget") == 0)
         {
             GetXGame();
         }
-        else if (!XSHOGI && strcmp(s, "xsave") == 0)        /* xsave */
+        else if (!XSHOGI && strcmp(s, "xsave") == 0)
         {
             SaveXGame();
         }
-        else if (!XSHOGI && strcmp(s, "bsave") == 0)        /* bsave */
+        else if (!XSHOGI && strcmp(s, "bsave") == 0)
         {
             BookSave();
         }
@@ -1975,62 +1871,62 @@ InputCommand(char *command)
         {
             FlagMove(*s);
         }
-        else if (strcmp(s, CP[160]) == 0)    /* get */
+        else if (strcmp(s, "get") == 0)
         {
             GetGame();
         }
-        else if (strcmp(s, CP[189]) == 0)    /* save */
+        else if (strcmp(s, "save") == 0)
         {
             SaveGame();
         }
-        else if (strcmp(s, CP[151]) == 0)    /* depth */
+        else if (strcmp(s, "depth") == 0)
         {
             ChangeSearchDepth();
         }
-        else if (strcmp(s, CP[164]) == 0)    /* hashdepth */
+        else if (strcmp(s, "hashdepth") == 0)
         {
             ChangeHashDepth();
         }
-        else if (strcmp(s, CP[182]) == 0)    /* random */
+        else if (strcmp(s, "random") == 0)
         {
             dither = DITHER;
         }
-        else if (strcmp(s, CP[229]) == 0)    /* hard */
+        else if (strcmp(s, "hard") == 0)
         {
             flag.easy = false;
         }
-        else if (strcmp(s, CP[152]) == 0)    /* easy */
+        else if (strcmp(s, "easy") == 0)
         {
             flag.easy = !flag.easy;
         }
-        else if (strcmp(s, CP[230]) == 0)    /* tsume */
+        else if (strcmp(s, "tsume") == 0)
         {
             flag.tsume = !flag.tsume;
         }
-        else if (strcmp(s, CP[143]) == 0)    /* contempt */
+        else if (strcmp(s, "contempt") == 0)
         {
             SetContempt();
         }
-        else if (strcmp(s, CP[209]) == 0)    /* xwndw */
+        else if (strcmp(s, "xwndw") == 0)
         {
             ChangeXwindow();
         }
-        else if (strcmp(s, CP[186]) == 0)    /* rv */
+        else if (strcmp(s, "rv") == 0)
         {
             flag.rv = !flag.rv;
             UpdateDisplay(0, 0, 1, 0);
         }
-        else if (strcmp(s, CP[145]) == 0)    /* coords */
+        else if (strcmp(s, "coords") == 0)
         {
             flag.coords = !flag.coords;
             UpdateDisplay(0, 0, 1, 0);
         }
-        else if (strcmp(s, CP[193]) == 0)    /* stars */
+        else if (strcmp(s, "stars") == 0)
         {
             flag.stars = !flag.stars;
             UpdateDisplay(0, 0, 1, 0);
         }
-        else if (!XSHOGI && strcmp(s, CP[5]) == 0)          /* moves */
+        else if (!XSHOGI && strcmp(s, "moves") == 0)
         {
             short temp;
 
@@ -2046,42 +1942,42 @@ InputCommand(char *command)
 #endif
                 SwagHt = 0;
 
-            ShowMessage(CP[108]);  /* test movelist */
+            ShowMessage("Testing MoveList Speed");
             temp = generate_move_flags;
             generate_move_flags = true;
             TestSpeed(MoveList, 1);
             generate_move_flags = temp;
-            ShowMessage(CP[107]);  /* test capturelist */
+            ShowMessage("Testing CaptureList Speed");
             TestSpeed(CaptureList, 1);
-            ShowMessage(CP[85]);   /* test score position */
+            ShowMessage("Testing Eval Speed");
             ExaminePosition(opponent);
             TestPSpeed(ScorePosition, 1);
         }
-        else if (!XSHOGI && strcmp(s, CP[196]) == 0)    /* test */
+        else if (!XSHOGI && strcmp(s, "test") == 0)
         {
 #ifdef SLOW_CPU
-            ShowMessage(CP[108]); /* test movelist */
+            ShowMessage("Testing MoveList Speed");
             TestSpeed(MoveList, 2000);
-            ShowMessage(CP[107]); /* test capturelist */
+            ShowMessage("Testing CaptureList Speed");
             TestSpeed(CaptureList, 3000);
-            ShowMessage(CP[85]); /* test score position */
+            ShowMessage("Testing Eval Speed");
             ExaminePosition(opponent);
             TestPSpeed(ScorePosition, 1500);
 #else
-            ShowMessage(CP[108]); /* test movelist */
+            ShowMessage("Testing MoveList Speed");
             TestSpeed(MoveList, 20000);
-            ShowMessage(CP[107]); /* test capturelist */
+            ShowMessage("Testing CaptureList Speed");
             TestSpeed(CaptureList, 30000);
-            ShowMessage(CP[85]); /* test score position */
+            ShowMessage("Testing Eval Speed");
             ExaminePosition(opponent);
             TestPSpeed(ScorePosition, 15000);
 #endif
         }
-        else if (!XSHOGI && strcmp(s, CP[179]) == 0) /* p */
+        else if (!XSHOGI && strcmp(s, "p") == 0)
         {
             ShowPostnValues();
         }
-        else if (!XSHOGI && strcmp(s, CP[148]) == 0)    /* debug */
+        else if (!XSHOGI && strcmp(s, "debug") == 0)
         {
             DoDebug();
         }
@@ -2098,7 +1994,7 @@ InputCommand(char *command)
 
                 if (rpt >= 3)
                 {
-                    DRAW = CP[101];
+                    DRAW = DRAW_REPETITION;
                     ShowMessage(DRAW);
                     GameList[GameCnt].flags |= draw;
 
@@ -2150,8 +2046,6 @@ InputCommand(char *command)
         printf("\n");
 #endif
     }
-
-    signal(SIGINT, TerminateSearch);
 }