Warnings: be explicit about values we are using.
[gnushogi.git] / gnushogi / rawdsp.c
index 2c4d185..033d93b 100644 (file)
@@ -33,6 +33,7 @@
 #include <ctype.h>
 #include <signal.h>
 #include <stdarg.h>
+#include <stdio.h>
 #include <sys/param.h>
 #include <sys/types.h>
 #include <sys/file.h>
 #endif
 
 #include "gnushogi.h"
-#include "rawdsp.h"
 
-unsigned short MV[MAXDEPTH];
-int MSCORE;
-
-int mycnt1, mycnt2;
-char *DRAW;
-extern char *InPtr;
-extern short pscore[];
+/****************************************
+ * forward declarations
+ ****************************************/
 
+static void Raw_UpdateDisplay(short f, short t, short redraw, short isspec);
 
 /****************************************
  * Trivial output functions.
  ****************************************/
 
-void
+static void
 Raw_ClearScreen(void)
 {
-    if (!barebones && !XSHOGI)
+    if (!XSHOGI)
         printf("\n");
 }
 
 
-void
+static void
 Raw_ShowPrompt(void)
 {
-    if (!barebones && !XSHOGI)
-    {
+    if (!XSHOGI)
         fputs("\nYour move is? ", stdout);
-    }
 }
 
 
-void
+static void
 Raw_ShowCurrentMove(short pnt, short f, short t)
 {
 }
 
 
-void
+static void
 Raw_ShowDepth(char ch)
 {
-    if (!barebones && !XSHOGI)
-    {
-        printf("Depth= %d%c ", Sdepth, ch);
-        printf("\n");
-    }
+    if (!XSHOGI)
+        printf("Depth= %d%c \n", Sdepth, ch);
 }
 
 
-void
+static void
 Raw_ShowGameType(void)
 {
     if (flag.post)
@@ -100,7 +92,7 @@ Raw_ShowGameType(void)
 }
 
 
-void
+static void
 Raw_ShowLine(unsigned short *bstline)
 {
     int i;
@@ -118,49 +110,67 @@ Raw_ShowLine(unsigned short *bstline)
 }
 
 
-void
-Raw_ShowMessage(char *s)
+static void
+Raw_ShowMessage(char *format, ...)
 {
-    if (!XSHOGI)
-        printf("%s\n", s);
+    if (XSHOGI)
+        return;
+    va_list ap;
+    va_start(ap, format);
+    vprintf(format, ap);
+    printf("\n");
+    va_end(ap);
 }
 
 
-void
-Raw_AlwaysShowMessage(const char *format, va_list ap)
+static void
+Raw_AlwaysShowMessage(const char *format, ...)
 {
+    va_list ap;
+    va_start(ap, format);
     vprintf(format, ap);
     printf("\n");
+    va_end(ap);
 }
 
 
-void
-Raw_Printf(const char *format, va_list ap)
+static void
+Raw_Printf(const char *format, ...)
 {
+    va_list ap;
+    va_start(ap, format);
     vprintf(format, ap);
+    va_end(ap);
 }
 
 
-void
+static void
 Raw_doRequestInputString(const char* fmt, char* buffer)
 {
     scanf(fmt, buffer);
 }
 
 
-int
+static int
 Raw_GetString(char* sx)
 {
     int eof = 0;
+    char *nl;
     sx[0] = '\0';
 
     while(!eof && !sx[0])
         eof = (fgets(sx, 80, stdin) == NULL);
+
+    /* remove any trailing newline */
+    nl = strchr(sx, '\n');
+    if (nl)
+        nl[0] = '\0';
+
     return eof;
 }
 
 
-void
+static void
 Raw_ShowNodeCnt(long NodeCnt)
 {
     printf("Nodes = %ld Nodes/sec = %ld\n",
@@ -168,24 +178,24 @@ Raw_ShowNodeCnt(long NodeCnt)
 }
 
 
-void
+static void
 Raw_ShowPatternCount(short side, short n)
 {
     if (flag.post)
-        printf("%s matches %d pattern(s)\n", ColorStr[side], n);
+        printf("%s%s matches %d pattern(s)\n", xboard ? "# " : "" , ColorStr[side], n);
 }
 
 
-void
+static void
 Raw_ShowResponseTime(void)
 {
 }
 
 
-void
+static void
 Raw_ShowResults(short score, unsigned short *bstline, char ch)
 {
-    if (flag.post  && !XSHOGI)
+    if (flag.post && (xboard || !XSHOGI))
     {
         ElapsedTime(2);
         printf("%2d%c %6d %4ld %8ld  ",
@@ -195,13 +205,13 @@ Raw_ShowResults(short score, unsigned short *bstline, char ch)
 }
 
 
-void
+static void
 Raw_ShowSidetoMove(void)
 {
 }
 
 
-void
+static void
 Raw_ShowStage(void)
 {
     printf("stage = %d\n", stage);
@@ -213,7 +223,7 @@ Raw_ShowStage(void)
  * End of trivial output routines.
  ****************************************/
 
-void
+static void
 Raw_Initialize(void)
 {
     mycnt1 = mycnt2 = 0;
@@ -245,7 +255,7 @@ Raw_Initialize(void)
 }
 
 
-void
+static void
 Raw_ExitShogi(void)
 {
     /* CHECKME: what purpose does this next statement serve? */
@@ -258,20 +268,7 @@ Raw_ExitShogi(void)
 }
 
 
-void
-Raw_Die(int sig)
-{
-    char s[80];
-
-    Raw_ShowMessage("Abort? ");
-    scanf("%s", s);
-
-    if (strcmp(s, "yes") == 0)
-        Raw_ExitShogi();
-}
-
-
-void
+static void
 Raw_TerminateSearch(int sig)
 {
 #ifdef INTERRUPT_TEST
@@ -285,35 +282,53 @@ Raw_TerminateSearch(int sig)
 }
 
 
-void
+static void
 Raw_help(void)
 {
     Raw_ClearScreen();
     printf("GNU Shogi %s command summary\n", PACKAGE_VERSION);
-    printf("----------------------------------"
-           "------------------------------\n");
-    fputs ("7g7f      move from 7g to 7f      quit      Exit Shogi\n", stdout);
-    printf("S6h       move silver to 6h       beep      turn %s\n", (flag.beep) ? "OFF" : "ON");
-    printf("2d2c+     move to 2c and promote  material  turn %s\n", (flag.material) ? "OFF" : "ON");
-    printf("P*5e      drop pawn to 5e         easy      turn %s\n", (flag.easy) ? "OFF" : "ON");
-    printf("tsume     toggle tsume mode       hash      turn %s\n", (flag.hash) ? "OFF" : "ON");
-    fputs ("bd        redraw board            reverse   board display\n", stdout);
-    printf("list      game to shogi.lst       book      turn %s used %d of %d\n", (Book) ? "OFF" : "ON", bookcount, booksize);
-    fputs ("undo      undo last ply           remove    take back a move\n", stdout);
-    fputs ("edit      edit board              force     toggle manual move mode\n", stdout);
-    fputs ("switch    sides with computer     both      computer match\n", stdout);
-    fputs ("black     computer plays black    white     computer plays white\n", stdout);
-    fputs ("depth     set search depth        clock     set time control\n", stdout);
-    fputs ("post      principle variation     hint      suggest a move\n", stdout);
-    fputs ("save      game to file            get       game from file\n", stdout);
-    printf("xsave     pos. to xshogi file     xget"
-           "      pos. from xshogi file\n");
-    fputs("random    randomize play          new       start new game\n", stdout);
-    printf("--------------------------------"
-           "--------------------------------\n");
+    printf("----------------------------------------------------------------\n");
+    printf("7g7f      move from 7g to 7f      quit      Exit Shogi\n");
+    printf("S6h       move silver to 6h       beep      turn %s\n",
+           (flag.beep) ? "OFF" : "ON");
+    printf("2d2c+     move to 2c and promote  material  turn %s\n",
+           (flag.material) ? "OFF" : "ON");
+    printf("P*5e      drop pawn to 5e         easy      turn %s\n",
+           (flag.easy) ? "OFF" : "ON");
+    printf("tsume     toggle tsume mode       hash      turn %s\n",
+           (flag.hash) ? "OFF" : "ON");
+    printf("bd        redraw board            reverse   board display\n");
+    printf("list      game to shogi.lst       book      turn %s used %d of %d\n",
+           (Book) ? "OFF" : "ON", bookcount, booksize);
+    printf("undo      undo last ply           remove    take back a move\n");
+    printf("edit      edit board              force     toggle manual move mode\n");
+    printf("switch    sides with computer     both      computer match\n");
+    printf("black     computer plays black    white     computer plays white\n");
+    printf("sd        set search depth        clock     set time control\n");
+    printf("post      principle variation     hint      suggest a move\n");
+    printf("save      game to file            get       game from file\n");
+    printf("xsave     pos. to xshogi file     xget      pos. from xshogi file\n");
+    printf("random    randomize play          new       start new game\n");
+    printf("setup                             first     \n");
+    printf("go        computer plays now      material  turn %s\n",
+           flag.material ? "OFF" : "ON");
+    printf("level     time control            gamein    \n");
+    printf("time      set engine clock        otime     set opponent clock\n");
+    printf("Awindow                           Bwindow     \n");
+    printf("rcptr     turn %3s                bsave     book save\n",
+           flag.rcptr ? "OFF" : "ON ");
+    printf("hashdepth                         hard      turn easy OFF\n");
+    printf("contempt                          xwndw                  \n");
+    printf("rv        turn %3s                coords    turn %s\n",
+           flag.rv ? "OFF" : "ON ", flag.coords ? "OFF" : "ON");
+    printf("stars     turn %3s                moves                  \n",
+           flag.stars ? "OFF" : "ON ");
+    printf("test                              p                      \n");
+    printf("debug                             depth     alias for 'sd'\n");
+    printf("----------------------------------------------------------------\n");
     printf("Computer: %-12s Opponent:            %s\n",
            ColorStr[computer], ColorStr[opponent]);
-    printf("Depth:    %-12d Response time:       %d sec\n",
+    printf("Depth:    %-12d Response time:       %ld sec\n",
            MaxSearchDepth, MaxResponseTime/100);
     printf("Random:   %-12s Easy mode:           %s\n",
            (dither) ? "ON" : "OFF", (flag.easy) ? "ON" : "OFF");
@@ -321,7 +336,7 @@ Raw_help(void)
            (flag.beep) ? "ON" : "OFF", (flag.hash) ? "ON" : "OFF");
     printf("Tsume:    %-12s Force:               %s\n",
            (flag.tsume) ? "ON" : "OFF", (flag.force) ? "ON" : "OFF");
-    printf("Time Control %s %d moves %d sec %d add %d depth\n",
+    printf("Time Control %s %d moves %ld sec %d add %d depth\n",
            (TCflag) ? "ON" : "OFF",
            TimeControl.moves[black], TimeControl.clock[black] / 100,
            TCadd/100, MaxSearchDepth);
@@ -332,7 +347,7 @@ Raw_help(void)
  * Set up a board position. Pieces are entered by typing the piece followed
  * by the location. For example, Nf3 will place a knight on square f3.
  */
-void
+static void
 Raw_EditBoard(void)
 {
     short a, r, c, sq, i, found;
@@ -342,10 +357,10 @@ Raw_EditBoard(void)
     Book = BOOKFAIL;
     Raw_ClearScreen();
     Raw_UpdateDisplay(0, 0, 1, 0);
-    fputs(".   Exit to main\n", stdout);
-    fputs("#   Clear board\n", stdout);
-    fputs("c   Change sides\n", stdout);
-    fputs("enter piece & location: \n", stdout);
+    printf(".   Exit to main\n");
+    printf("#   Clear board\n");
+    printf("c   Change sides\n");
+    printf("enter piece & location:\n");
 
     a = black;
 
@@ -385,6 +400,8 @@ Raw_EditBoard(void)
                     break;
                 }
             }
+            if (!found)
+                printf("# Invalid piece type '%c'\n", s[0]);
             continue;
         }
 
@@ -392,17 +409,17 @@ Raw_EditBoard(void)
         r = ROW_NUM(s[2]);
 
         if ((c < 0) || (c >= NO_COLS) || (r < 0) || (r >= NO_ROWS)) {
+            printf("# Out-of-board position '%c%c'\n", s[1], s[2]);
             continue;
         }
 
         sq = locn(r, c);
-        color[sq] = a;
-        board[sq] = no_piece;
 
         for (i = no_piece; i <= king; i++)
         {
             if ((s[0] == pxx[i]) || (s[0] == qxx[i]))
             {
+                color[sq] = a;
                 if (s[3] == '+')
                     board[sq] = promoted[i];
                 else
@@ -413,8 +430,8 @@ Raw_EditBoard(void)
             }
         }
 
-        if (found == 0)
-            color[sq] = neutral;
+        if (!found)
+            printf("# Invalid piece type '%c'\n", s[0]);
     }
 
     for (sq = 0; sq < NO_SQUARES; sq++)
@@ -435,7 +452,7 @@ Raw_EditBoard(void)
  * Nine lines of nine characters are used to setup the board. 9a-1a is the
  * first line. White pieces are  represented  by  uppercase characters.
  */
-void
+static void
 Raw_SetupBoard(void)
 {
     short r, c, sq, i;
@@ -485,7 +502,7 @@ Raw_SetupBoard(void)
 }
 
 
-void
+static void
 Raw_SearchStartStuff(short side)
 {
     if (flag.post)
@@ -497,7 +514,7 @@ Raw_SearchStartStuff(short side)
 }
 
 
-void
+static void
 Raw_OutputMove(void)
 {
     if (flag.illegal)
@@ -509,16 +526,15 @@ Raw_OutputMove(void)
     if (mvstr[0][0] == '\0')
         goto nomove;
 
-    if (XSHOGI)
-    {
+    mycnt1++;
+    if (XSHOGI && xboard) /* xboard: print move in XBoard format, with 'move' prefix */
+        printf("move %s\n", mvstr[0]);
+    else if (XSHOGI)
         /* add remaining time in milliseconds to xshogi */
-        printf("%d. ... %s %ld\n", ++mycnt1, mvstr[0],
+        printf("%d. ... %s %ld\n", mycnt1, mvstr[0],
                (TimeControl.clock[player] - et) * 10);
-    }
     else
-    {
-        printf("%d. ... %s\n", ++mycnt1, mvstr[0]);
-    }
+        printf("%d. ... %s\n", mycnt1, mvstr[0]);
 
  nomove:
     if ((root->flags & draw) || (root->score == -(SCORE_LIMIT + 999))
@@ -563,39 +579,29 @@ Raw_OutputMove(void)
 
  summary:
     if (root->flags & draw)
-    {
         fputs("Drawn game!\n", stdout);
-    }
     else if (root->score == -(SCORE_LIMIT + 999))
-    {
         printf("%s mates!\n", ColorStr[opponent]);
-    }
     else if (root->score == (SCORE_LIMIT + 998))
-    {
         printf("%s mates!\n", ColorStr[computer]);
-    }
 #ifdef VERYBUGGY
-    else if (!barebones && (root->score < -SCORE_LIMIT))
-    {
-        printf("%s has a forced mate in %d moves!\n",
+    else if (!XSHOGI && (root->score < -SCORE_LIMIT))
+        printf("%s%s has a forced mate in %d moves!\n", xboard ? "# " : "",
                ColorStr[opponent], SCORE_LIMIT + 999 + root->score - 1);
-    }
-    else if (!barebones && (root->score > SCORE_LIMIT))
-    {
-        printf("%s has a forced mate in %d moves!\n",
+    else if (!XSHOGI && (root->score > SCORE_LIMIT))
+        printf("%s%s has a forced mate in %d moves!\n", xboard ? "# " : "",
                ColorStr[computer], SCORE_LIMIT + 998 - root->score - 1);
-    }
 #endif /* VERYBUGGY */
 }
 
 
-void
+static void
 Raw_UpdateClocks(void)
 {
 }
 
 
-void
+static void
 Raw_UpdateDisplay(short f, short t, short redraw, short isspec)
 {
 
@@ -654,7 +660,7 @@ Raw_UpdateDisplay(short f, short t, short redraw, short isspec)
 }
 
 
-void
+static void
 Raw_ChangeAlphaWindow(void)
 {
     printf("WAwindow: ");
@@ -664,7 +670,7 @@ Raw_ChangeAlphaWindow(void)
 }
 
 
-void
+static void
 Raw_ChangeBetaWindow(void)
 {
     printf("WBwindow: ");
@@ -674,7 +680,7 @@ Raw_ChangeBetaWindow(void)
 }
 
 
-void
+static void
 Raw_GiveHint(void)
 {
     if (hint)
@@ -687,74 +693,76 @@ Raw_GiveHint(void)
 }
 
 
-void
+static void
 Raw_SelectLevel(char *sx)
 {
+    /* FIXME: NO_SQUARES is nonsense here */
+    char T[NO_SQUARES + 1], *p;
 
-    char T[NO_SQUARES + 1], *p, *q;
-
-    if ((p = strstr(sx, "level")) != NULL)
-        p += strlen("level");
-    else if ((p = strstr(sx, "clock")) != NULL)
-        p += strlen("clock");
-
-    strcat(sx, "XX");
-    q = T;
-    *q = '\0';
-
-    for (; *p != 'X'; *q++ = *p++);
-
-    *q = '\0';
-
-    /* line empty ask for input */
-    if (!T[0])
-    {
-        fputs("Enter #moves #minutes: ", stdout);
-        fgets(T, NO_SQUARES + 1, stdin);
-        strcat(T, "XX");
-    }
-
-    /* skip blackspace */
-    for (p = T; *p == ' '; p++) ;
-
-    /* could be moves or a fischer clock */
-    if (*p == 'f')
-    {
-        /* its a fischer clock game */
-        p++;
-        TCminutes = (short)strtol(p, &q, 10);
-        TCadd = (short)strtol(q, NULL, 10) *100;
-        TCseconds = 0;
-        TCmoves = 50;
-    }
-    else
-    {
-        /* regular game */
-        TCadd = 0;
-        TCmoves = (short)strtol(p, &q, 10);
-        TCminutes = (short)strtol(q, &q, 10);
-
-        if (*q == ':')
-            TCseconds = (short)strtol(q + 1, (char **) NULL, 10);
-        else
-            TCseconds = 0;
+    strncpy(T, sx, NO_SQUARES);
+    T[NO_SQUARES] = '\0';
 
-#ifdef OPERATORTIME
-        fputs("Operator time (hundredths) = ", stdout);
-        scanf("%hd", &OperatorTime);
-#endif
 
-        if (TCmoves == 0)
+    if (!xboard) {
+        /* if line empty, ask for input */
+        if (!T[0])
         {
-            TCflag = false;
-            MaxResponseTime = TCminutes*60L * 100L + TCseconds * 100L;
-            TCminutes = TCseconds = 0;
+            fputs("Enter #moves #minutes: ", stdout);
+            fgets(T, NO_SQUARES + 1, stdin);
+        }
+    
+        /* skip blackspace */
+        for (p = T; *p == ' '; p++) ;
+    
+        /* could be moves or a fischer clock */
+        if (*p == 'f')
+        {
+            /* its a fischer clock game */
+            char *q;
+            p++;
+            TCminutes = (short)strtol(p, &q, 10);
+            TCadd = (short)strtol(q, NULL, 10) *100;
+            TCseconds = 0;
+            TCmoves = 50;
         }
         else
         {
-            TCflag = true;
-            MaxResponseTime = 0;
+            /* regular game */
+            char *q;
+            TCadd = 0;
+            TCmoves = (short)strtol(p, &q, 10);
+            TCminutes = (short)strtol(q, &q, 10);
+    
+            if (*q == ':')
+                TCseconds = (short)strtol(q + 1, (char **) NULL, 10);
+            else
+                TCseconds = 0;
+    
+    #ifdef OPERATORTIME
+            fputs("Operator time (hundredths) = ", stdout);
+            scanf("%hd", &OperatorTime);
+    #endif
+    
+            if (TCmoves == 0)
+            {
+                TCflag = false;
+                MaxResponseTime = TCminutes*60L * 100L + TCseconds * 100L;
+                TCminutes = TCseconds = 0;
+            }
+            else
+            {
+                TCflag = true;
+                MaxResponseTime = 0;
+            }
         }
+    } else {
+        int min, sec=0, inc, mps;
+        /* parse regular "level MPS TC INC" command of WB protocol */
+        if (sscanf(sx, "%d %d %d", &mps, &min, &inc) != 3)
+            sscanf(sx, "%d %d:%d %d", &mps, &min, &sec, &inc);
+        TCminutes = min; TCseconds = sec;
+        TCadd = inc*100; TCmoves = mps ? mps : 50;
+        MaxResponseTime = 0; TCflag = true;
     }
 
     TimeControl.clock[black] = TimeControl.clock[white] = 0;
@@ -769,16 +777,22 @@ Raw_SelectLevel(char *sx)
 }
 
 
-void
-Raw_ChangeSearchDepth(void)
+static void
+Raw_ChangeSearchDepth(char *sx)
 {
-    printf("depth = ");
-    scanf("%hd", &MaxSearchDepth);
+    char buf[80+1];
+    strncpy(buf, sx, 80); buf[80] = '\0';
+    /* if line empty, ask for input */
+    if (!buf[0]) {
+        printf("depth = ");
+        fgets(buf, 80+1, stdin);
+    }
+    sscanf(buf, "%hd", &MaxSearchDepth);
     TCflag = !(MaxSearchDepth > 0);
 }
 
 
-void
+static void
 Raw_ChangeHashDepth(void)
 {
     printf("hashdepth = ");
@@ -788,7 +802,7 @@ Raw_ChangeHashDepth(void)
 }
 
 
-void
+static void
 Raw_SetContempt(void)
 {
     printf("contempt = ");
@@ -796,7 +810,7 @@ Raw_SetContempt(void)
 }
 
 
-void
+static void
 Raw_ChangeXwindow(void)
 {
     printf("xwndw = ");
@@ -808,11 +822,10 @@ Raw_ChangeXwindow(void)
  * Raw_ShowPostnValue(short sq)
  * must have called ExaminePosition() first
  */
-void
+static void
 Raw_ShowPostnValue(short sq)
 {
-    short score;
-    score = ScorePosition(color[sq]);
+    (void) ScorePosition(color[sq]);
 
     if (color[sq] != neutral)
     {
@@ -829,7 +842,7 @@ Raw_ShowPostnValue(short sq)
 }
 
 
-void
+static void
 Raw_DoDebug(void)
 {
     short c, p, sq, tp, tc, tsq, score, j, k;
@@ -907,7 +920,7 @@ Raw_DoDebug(void)
 }
 
 
-void
+static void
 Raw_DoTable(short table[NO_SQUARES])
 {
     short  sq, j, k;
@@ -926,7 +939,7 @@ Raw_DoTable(short table[NO_SQUARES])
 }
 
 
-void
+static void
 Raw_ShowPostnValues(void)
 {
     short sq, score, j, k;
@@ -951,7 +964,7 @@ Raw_ShowPostnValues(void)
 }
 
 
-void
+static void
 Raw_PollForInput(void)
 {
 #ifdef WIN32
@@ -959,12 +972,12 @@ Raw_PollForInput(void)
     if (!PeekNamedPipe(GetStdHandle(STD_INPUT_HANDLE), NULL, 0, NULL, &cnt, NULL))
         cnt = 1;
 #else
-    static struct pollfd pollfds[1] = { /* [0] = */ { /* .fd = */ STDIN_FILENO,
-                                                      /* .events = */ POLLIN } };
+    static struct pollfd pollfds[1] = { [0] = { .fd = STDIN_FILENO,
+                                                .events = POLLIN } };
     int cnt = poll(pollfds, sizeof(pollfds)/sizeof(pollfds[0]), 0);
     if (cnt < 0) {
         perror("polling standard input");
-        ExitShogi();
+        Raw_ExitShogi();
     }
 #endif
     if (cnt) { /* if anything to read, or error occured */
@@ -973,3 +986,47 @@ Raw_PollForInput(void)
         flag.bothsides = false;
     }
 }
+
+struct display raw_display =
+{
+    .ChangeAlphaWindow    = Raw_ChangeAlphaWindow,
+    .ChangeBetaWindow     = Raw_ChangeBetaWindow,
+    .ChangeHashDepth      = Raw_ChangeHashDepth,
+    .ChangeSearchDepth    = Raw_ChangeSearchDepth,
+    .ChangeXwindow        = Raw_ChangeXwindow,
+    .ClearScreen          = Raw_ClearScreen,
+    .DoDebug              = Raw_DoDebug,
+    .DoTable              = Raw_DoTable,
+    .EditBoard            = Raw_EditBoard,
+    .ExitShogi            = Raw_ExitShogi,
+    .GiveHint             = Raw_GiveHint,
+    .Initialize           = Raw_Initialize,
+    .ShowNodeCnt          = Raw_ShowNodeCnt,
+    .OutputMove           = Raw_OutputMove,
+    .PollForInput         = Raw_PollForInput,
+    .SetContempt          = Raw_SetContempt,
+    .SearchStartStuff     = Raw_SearchStartStuff,
+    .SelectLevel          = Raw_SelectLevel,
+    .ShowCurrentMove      = Raw_ShowCurrentMove,
+    .ShowDepth            = Raw_ShowDepth,
+    .ShowGameType         = Raw_ShowGameType,
+    .ShowLine             = Raw_ShowLine,
+    .ShowMessage          = Raw_ShowMessage,
+    .AlwaysShowMessage    = Raw_AlwaysShowMessage,
+    .Printf               = Raw_Printf,
+    .doRequestInputString = Raw_doRequestInputString,
+    .GetString            = Raw_GetString,
+    .SetupBoard           = Raw_SetupBoard,
+    .ShowPatternCount     = Raw_ShowPatternCount,
+    .ShowPostnValue       = Raw_ShowPostnValue,
+    .ShowPostnValues      = Raw_ShowPostnValues,
+    .ShowPrompt           = Raw_ShowPrompt,
+    .ShowResponseTime     = Raw_ShowResponseTime,
+    .ShowResults          = Raw_ShowResults,
+    .ShowSidetoMove       = Raw_ShowSidetoMove,
+    .ShowStage            = Raw_ShowStage,
+    .TerminateSearch      = Raw_TerminateSearch,
+    .UpdateClocks         = Raw_UpdateClocks,
+    .UpdateDisplay        = Raw_UpdateDisplay,
+    .help                 = Raw_help,
+};