* FILE: rawdsp.c
*
* ----------------------------------------------------------------------
- *
- * Copyright (c) 2012 Free Software Foundation
+ * 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
*
+ * Copyright (c) 1988, 1989, 1990 John Stanback
+ * Copyright (c) 1992 Free Software Foundation
+ *
* This file is part of GNU SHOGI.
*
* GNU Shogi is free software; you can redistribute it and/or modify it
#include <ctype.h>
#include <signal.h>
+#include <stdarg.h>
+#include <stdio.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/file.h>
+#ifndef WIN32
+#include <poll.h>
+#include <unistd.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");
}
-/* FIXME: change to ShowPrompt? */
-void
-PromptForMove(void)
+static void
+Raw_ShowPrompt(void)
{
- if (!barebones && !XSHOGI)
- {
- /* printf("\nYour move is? "); */
- printf(CP[124]);
- }
+ 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(CP[53], Sdepth, ch); /* Depth = %d%c */
- printf("\n");
- }
+ if (!XSHOGI)
+ printf("Depth= %d%c \n", Sdepth, ch);
}
-void
+static void
Raw_ShowGameType(void)
{
if (flag.post)
}
-void
+static void
Raw_ShowLine(unsigned short *bstline)
{
int i;
}
-void
+static void
Raw_ShowMessage(char *s)
{
if (!XSHOGI)
}
-void
+static void
+Raw_AlwaysShowMessage(const char *format, ...)
+{
+ va_list ap;
+ va_start(ap, format);
+ vprintf(format, ap);
+ printf("\n");
+ va_end(ap);
+}
+
+
+static void
+Raw_Printf(const char *format, ...)
+{
+ va_list ap;
+ va_start(ap, format);
+ vprintf(format, ap);
+ va_end(ap);
+}
+
+
+static void
+Raw_doRequestInputString(const char* fmt, char* buffer)
+{
+ scanf(fmt, buffer);
+}
+
+
+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;
+}
+
+
+static void
+Raw_ShowNodeCnt(long NodeCnt)
+{
+ printf("Nodes = %ld Nodes/sec = %ld\n",
+ NodeCnt, (((et) ? ((NodeCnt * 100) / et) : 0)));
+}
+
+
+static void
Raw_ShowPatternCount(short side, short n)
{
if (flag.post)
}
-void
+static void
Raw_ShowResponseTime(void)
{
}
-void
+static void
Raw_ShowResults(short score, unsigned short *bstline, char ch)
{
if (flag.post && !XSHOGI)
}
-void
+static void
Raw_ShowSidetoMove(void)
{
}
-void
+static void
Raw_ShowStage(void)
{
printf("stage = %d\n", stage);
* End of trivial output routines.
****************************************/
-
-void
+static void
Raw_Initialize(void)
{
mycnt1 = mycnt2 = 0;
if (XSHOGI)
{
-#ifdef HAVE_SETLINEBUF
- setlinebuf(stdout);
+#ifdef WIN32
+ /* needed because of inconsistency between MSVC run-time system and gcc includes */
+ setbuf(stdout, NULL);
#else
-# ifdef HAVE_SETVBUF
+#ifdef HAVE_SETVBUF
setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
+#else
+# ifdef HAVE_SETLINEBUF
+ setlinebuf(stdout);
# else
-# error "Need setlinebuf() or setvbuf() to compile gnushogi!"
+# error "Need setvbuf() or setlinebuf() to compile gnushogi!"
# endif
#endif
- printf("GNU Shogi %sp%s\n", version, patchlevel);
+#endif
+ printf("GNU Shogi %s\n", PACKAGE_VERSION);
}
if (hard_time_limit)
}
-
-void
+static void
Raw_ExitShogi(void)
{
/* CHECKME: what purpose does this next statement serve? */
if (!nolist)
ListGame();
-}
-
-void
-Raw_Die(int sig)
-{
- char s[80];
-
- Raw_ShowMessage(CP[31]); /* Abort? */
- scanf("%s", s);
-
- if (strcmp(s, CP[210]) == 0) /* yes */
- Raw_ExitShogi();
+ exit(0);
}
-
-void
+static void
Raw_TerminateSearch(int sig)
{
#ifdef INTERRUPT_TEST
}
-
-void
+static void
Raw_help(void)
{
Raw_ClearScreen();
- /* printf("SHOGI command summary\n"); */
- printf(CP[40]);
- printf("----------------------------------"
- "------------------------------\n");
- /* printf("7g7f move from 7g to 7f quit
- * Exit Shogi\n"); */
- printf(CP[158]);
- /* printf("S6h move silver to 6h beep
- * turn %s\n", (flag.beep) ? "off" : "on"); */
- printf(CP[86], (flag.beep) ? CP[92] : CP[93]);
- /* printf("2d2c+ move from 2d to 2c and promote\n"); */
- printf(CP[128], (flag.material) ? CP[92] : CP[93]);
- /* printf("P*5e drop pawn to 5e easy
- * turn %s\n", (flag.easy) ? "off" : "on"); */
- printf(CP[173], (flag.easy) ? CP[92] : CP[93]);
- /* printf(" hash
- * turn %s\n", (flag.hash) ? "off" : "on"); */
- printf(CP[174], (flag.hash) ? CP[92] : CP[93]);
- /* printf("bd redraw board reverse
- * board display\n"); */
- printf(CP[130]);
- /* printf("list game to shogi.lst book
- * turn %s used %d of %d\n", (Book) ? "off" : "on", bookcount); */
- printf(CP[170], (Book) ? CP[92] : CP[93], bookcount, booksize);
- /* printf("undo undo last ply remove
- * take back a move\n"); */
- printf(CP[200]);
- /* printf("edit edit board force
- * enter game moves\n"); */
- printf(CP[153]);
- /* printf("switch sides with computer both
- * computer match\n"); */
- printf(CP[194]);
- /* printf("black computer plays black white
- * computer plays white\n"); */
- printf(CP[202]);
- /* printf("depth set search depth clock
- * set time control\n"); */
- printf(CP[149]);
- /* printf("post principle variation hint
- * suggest a move\n"); */
- printf(CP[177]);
- /* printf("save game to file get
- * game from file\n"); */
- printf(CP[188]);
- printf("xsave pos. to xshogi file xget"
- " pos. from xshogi file\n");
- /* printf("random randomize play new
- * start new game\n"); */
- printf(CP[181]);
- printf("--------------------------------"
- "--------------------------------\n");
- /* printf("Computer: %-12s Opponent: %s\n", */
- printf(CP[46],
+ printf("GNU Shogi %s command summary\n", PACKAGE_VERSION);
+ 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(CP[51],
+ printf("Depth: %-12d Response time: %ld sec\n",
MaxSearchDepth, MaxResponseTime/100);
- /* printf("Random: %-12s Easy mode: %s\n", */
- printf(CP[99],
- (dither) ? CP[93] : CP[92], (flag.easy) ? CP[93] : CP[92]);
- /* printf("Beep: %-12s Transposition file: %s\n", */
- printf(CP[36],
- (flag.beep) ? CP[93] : CP[92], (flag.hash) ? CP[93] : CP[92]);
- /* printf("Tsume: %-12s Force: %s\n")*/
- printf(CP[232],
- (flag.tsume) ? CP[93] : CP[92], (flag.force) ? CP[93] : CP[92]);
- /* printf("Time Control %s %d moves %d seconds %d opr %d
- * depth\n", (TCflag) ? "ON" : "OFF", */
- printf(CP[110],
- (TCflag) ? CP[93] : CP[92],
+ printf("Random: %-12s Easy mode: %s\n",
+ (dither) ? "ON" : "OFF", (flag.easy) ? "ON" : "OFF");
+ printf("Beep: %-12s Transposition file: %s\n",
+ (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 %ld sec %d add %d depth\n",
+ (TCflag) ? "ON" : "OFF",
TimeControl.moves[black], TimeControl.clock[black] / 100,
TCadd/100, MaxSearchDepth);
-
- signal(SIGINT, Raw_TerminateSearch);
- signal(SIGQUIT, Raw_TerminateSearch);
}
-
/*
* 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;
Book = BOOKFAIL;
Raw_ClearScreen();
Raw_UpdateDisplay(0, 0, 1, 0);
- /* printf(". exit to main\n"); */
- printf(CP[29]);
- /* printf("# clear board\n"); */
- printf(CP[28]);
- /* printf("c change sides\n"); */
- printf(CP[136]);
- /* printf("enter piece & location: \n"); */
- printf(CP[155]);
+ fputs(". Exit to main\n", stdout);
+ fputs("# Clear board\n", stdout);
+ fputs("c Change sides\n", stdout);
+ fputs("enter piece & location: \n", stdout);
a = black;
scanf("%s", s);
found = 0;
- if (s[0] == CP[28][0]) /*#*/
+ if (s[0] == '#')
{
for (sq = 0; sq < NO_SQUARES; sq++)
{
ClearCaptured();
}
- if (s[0] == CP[136][0]) /*c*/
+ if (s[0] == 'c')
a = otherside[a];
if (s[1] == '*')
}
else
{
- c = '9' - s[1];
- r = 'i' - s[2];
+ c = COL_NAME(s[1]);
+ r = ROW_NAME(s[2]);
}
if ((c >= 0) && (c < NO_COLS) && (r >= 0) && (r < NO_ROWS))
color[sq] = neutral;
}
}
- while (s[0] != CP[29][0]);
+ while (s[0] != '.');
for (sq = 0; sq < NO_SQUARES; sq++)
Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0);
}
-
-
/*
* Set up a board position.
* 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
-SetupBoard(void)
+static void
+Raw_SetupBoard(void)
{
short r, c, sq, i;
char ch;
InitializeStats();
Raw_ClearScreen();
Raw_UpdateDisplay(0, 0, 1, 0);
- /* printf("Setup successful\n"); */
- printf(CP[106]);
+ fputs("Setup successful\n", stdout);
}
-void
+static void
Raw_SearchStartStuff(short side)
{
- signal(SIGINT, Raw_TerminateSearch);
- signal(SIGQUIT, Raw_TerminateSearch);
-
if (flag.post)
{
- printf(CP[123],
+ printf("\nMove# %d Target = %ld Clock: %ld\n",
GameCnt/2 + 1,
ResponseTime, TimeControl.clock[side]);
}
}
-
-void
+static void
Raw_OutputMove(void)
{
if (flag.illegal)
{
- printf("%s\n", CP[225]);
+ printf("Illegal position.\n");
return;
}
goto nomove;
if (XSHOGI)
- {
/* add remaining time in milliseconds to xshogi */
printf("%d. ... %s %ld\n", ++mycnt1, mvstr[0],
(TimeControl.clock[player] - et) * 10);
- }
else
- {
printf("%d. ... %s\n", ++mycnt1, mvstr[0]);
- }
nomove:
if ((root->flags & draw) || (root->score == -(SCORE_LIMIT + 999))
t = (l + h) >> 1;
}
- /* printf("Nodes %ld Tree %d Eval %ld
- * Rate %ld RS high %ld low %ld\n", */
- printf(CP[89], GenCnt, NodeCnt, t, EvalNodes,
+ printf("Gen %ld Node %ld Tree %d Eval %ld Rate %ld EC %d/%d RS hi %ld lo %ld \n", GenCnt, NodeCnt, t, EvalNodes,
(et > 100) ? (NodeCnt / (et / 100)) : 0,
EADD, EGET, reminus, replus);
- /* printf("Hin/Hout/Coll/Fin/Fout =
- * %ld/%ld/%ld/%ld/%ld\n", */
- printf(CP[71],
+ printf("Hin/Hout/Tcol/Coll/Fin/Fout = %ld/%ld/%ld/%ld/%ld/%ld\n",
HashAdd, HashCnt, THashCol, HashCol, FHashCnt, FHashAdd);
}
if (!XSHOGI)
{
- /* printf("My move is: %s\n", mvstr[0]); */
- printf(CP[83], mvstr[0]);
+ printf("My move is: %5s\n", mvstr[0]);
if (flag.beep)
printf("%c", 7);
summary:
if (root->flags & draw)
- {
- /* printf("Drawn game!\n"); */
- printf(CP[57]);
- }
+ 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))
- {
+ else if (!XSHOGI && (root->score < -SCORE_LIMIT))
printf("%s has a forced mate in %d moves!\n",
ColorStr[opponent], SCORE_LIMIT + 999 + root->score - 1);
- }
- else if (!barebones && (root->score > SCORE_LIMIT))
- {
+ else if (!XSHOGI && (root->score > SCORE_LIMIT))
printf("%s has a forced mate in %d moves!\n",
ColorStr[computer], SCORE_LIMIT + 998 - root->score - 1);
- }
#endif /* VERYBUGGY */
}
-void
+static void
+Raw_UpdateClocks(void)
+{
+}
+
+
+static void
Raw_UpdateDisplay(short f, short t, short redraw, short isspec)
{
c = (short)((TimeControl.clock[black] % 6000) / 100);
l = (short)(TimeControl.clock[white] / 6000);
m = (short)((TimeControl.clock[white] % 6000) / 100);
- /* printf("Black %d:%02d White %d:%02d\n", r, c, l, m); */
- printf(CP[116], r, c, l, m);
+ printf("Black %d:%02d White %d:%02d\n", r, c, l, m);
printf("\n");
for (r = (NO_ROWS - 1); r >= 0; r--)
}
-
-void
+static void
Raw_ChangeAlphaWindow(void)
{
printf("WAwindow: ");
}
-
-void
+static void
Raw_ChangeBetaWindow(void)
{
printf("WBwindow: ");
}
-
-void
+static void
Raw_GiveHint(void)
{
if (hint)
{
algbr((short) (hint >> 8), (short) (hint & 0xFF), false);
- printf(CP[72], mvstr[0]); /*hint*/
+ printf("Hint: %s\n", mvstr[0]);
}
else
- printf(CP[223]);
+ fputs("I have no idea.\n", stdout);
}
-
-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, CP[169])) != NULL)
- p += strlen(CP[169]);
- else if ((p = strstr(sx, CP[217])) != NULL)
- p += strlen(CP[217]);
-
- strcat(sx, "XX");
- q = T;
- *q = '\0';
+ strncpy(T, sx, NO_SQUARES);
+ T[NO_SQUARES] = '\0';
- for (; *p != 'X'; *q++ = *p++);
-
- *q = '\0';
-
- /* line empty ask for input */
+ /* if line empty, ask for input */
if (!T[0])
{
- printf(CP[61]);
+ fputs("Enter #moves #minutes: ", stdout);
fgets(T, NO_SQUARES + 1, stdin);
- strcat(T, "XX");
}
/* skip blackspace */
if (*p == 'f')
{
/* its a fischer clock game */
+ char *q;
p++;
TCminutes = (short)strtol(p, &q, 10);
TCadd = (short)strtol(q, NULL, 10) *100;
else
{
/* regular game */
+ char *q;
TCadd = 0;
TCmoves = (short)strtol(p, &q, 10);
TCminutes = (short)strtol(q, &q, 10);
TCseconds = 0;
#ifdef OPERATORTIME
- printf(CP[94]);
+ fputs("Operator time (hundredths) = ", stdout);
scanf("%hd", &OperatorTime);
#endif
}
-
-
-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 = ");
}
-
-void
+static void
Raw_SetContempt(void)
{
printf("contempt = ");
}
-
-void
+static void
Raw_ChangeXwindow(void)
{
printf("xwndw = ");
* 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)
{
}
-
-void
+static void
Raw_DoDebug(void)
{
short c, p, sq, tp, tc, tsq, score, j, k;
char s[40];
ExaminePosition(opponent);
- Raw_ShowMessage(CP[65]);
+ Raw_ShowMessage("Enter piece: ");
scanf("%s", s);
c = neutral;
- if ((s[0] == CP[9][0]) || (s[0] == CP[9][1])) /* w W */
+ if ((s[0] == 'b') || (s[0] == 'B'))
c = black;
- if ((s[0] == CP[9][2]) || (s[0] == CP[9][3])) /* b B */
+ if ((s[0] == 'w') || (s[0] == 'W'))
c = white;
for (p = king; p > no_piece; p--)
}
printf("stage = %d\n", stage);
- printf(CP[103], score,
+ printf("S%d m%d ps%d gt%c m%d ps%d gt%c", score,
mtl[computer], pscore[computer], GameType[computer],
mtl[opponent], pscore[opponent], GameType[opponent]);
}
-
-void
+static void
Raw_DoTable(short table[NO_SQUARES])
{
short sq, j, k;
}
-
-void
+static void
Raw_ShowPostnValues(void)
{
short sq, score, j, k;
}
score = ScorePosition(opponent);
- printf(CP[103], score,
+ printf("S%d m%d ps%d gt%c m%d ps%d gt%c", score,
mtl[computer], pscore[computer], GameType[computer],
mtl[opponent], pscore[opponent], GameType[opponent]);
printf("\nhung black %d hung white %d\n", hung[black], hung[white]);
}
+
+static void
+Raw_PollForInput(void)
+{
+#ifdef WIN32
+ DWORD cnt;
+ 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 } };
+ int cnt = poll(pollfds, sizeof(pollfds)/sizeof(pollfds[0]), 0);
+ if (cnt < 0) {
+ perror("polling standard input");
+ Raw_ExitShogi();
+ }
+#endif
+ if (cnt) { /* if anything to read, or error occured */
+ if (!flag.timeout)
+ flag.back = true; /* previous: flag.timeout = true; */
+ 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,
+};