X-Git-Url: http://winboard.nl/cgi-bin?p=gnushogi.git;a=blobdiff_plain;f=gnushogi%2Frawdsp.c;h=ba700db031ea4b515347575dab8e2e221034b176;hp=cbbfe525553b142da34fb98a231a61025ce2f58d;hb=b1b9616a3147b835beaabfaaa8f2de0db6d12ee9;hpb=de68af0b286eb210b5a3fb4bf4deb44b1b7a727e diff --git a/gnushogi/rawdsp.c b/gnushogi/rawdsp.c index cbbfe52..ba700db 100644 --- a/gnushogi/rawdsp.c +++ b/gnushogi/rawdsp.c @@ -4,6 +4,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 * @@ -32,21 +33,22 @@ #include #include #include +#include #include #include #include +#ifndef WIN32 +#include +#include +#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 + ****************************************/ +void Raw_UpdateDisplay(short f, short t, short redraw, short isspec); /**************************************** * Trivial output functions. @@ -55,20 +57,16 @@ extern short pscore[]; void Raw_ClearScreen(void) { - if (!barebones && !XSHOGI) + if (!XSHOGI) printf("\n"); } -/* FIXME: change to ShowPrompt? */ void -PromptForMove(void) +Raw_ShowPrompt(void) { - if (!barebones && !XSHOGI) - { - /* printf("\nYour move is? "); */ - fputs(CP[124], stdout); - } + if (!XSHOGI) + fputs("\nYour move is? ", stdout); } @@ -81,11 +79,8 @@ Raw_ShowCurrentMove(short pnt, short f, short t) 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); } @@ -122,16 +117,18 @@ Raw_ShowMessage(char *s) printf("%s\n", s); } + void Raw_AlwaysShowMessage(const char *format, ...) { va_list ap; va_start(ap, format); vprintf(format, ap); - va_end(ap); printf("\n"); + va_end(ap); } + void Raw_Printf(const char *format, ...) { @@ -141,6 +138,7 @@ Raw_Printf(const char *format, ...) va_end(ap); } + void Raw_doRequestInputString(const char* fmt, char* buffer) { @@ -152,10 +150,17 @@ 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; } @@ -163,7 +168,7 @@ Raw_GetString(char* sx) void Raw_ShowNodeCnt(long NodeCnt) { - printf(CP[91], + printf("Nodes = %ld Nodes/sec = %ld\n", NodeCnt, (((et) ? ((NodeCnt * 100) / et) : 0))); } @@ -213,7 +218,6 @@ Raw_ShowStage(void) * End of trivial output routines. ****************************************/ - void Raw_Initialize(void) { @@ -221,16 +225,21 @@ Raw_Initialize(void) 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) @@ -241,7 +250,6 @@ Raw_Initialize(void) } - void Raw_ExitShogi(void) { @@ -256,20 +264,6 @@ Raw_ExitShogi(void) 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(); -} - - - -void Raw_TerminateSearch(int sig) { #ifdef INTERRUPT_TEST @@ -283,93 +277,71 @@ Raw_TerminateSearch(int sig) } - void Raw_help(void) { Raw_ClearScreen(); - /* printf("SHOGI command summary\n"); */ - printf(CP[40], version, patchlevel); - printf("----------------------------------" - "------------------------------\n"); - /* printf("7g7f move from 7g to 7f quit - * Exit Shogi\n"); */ - fputs(CP[158], stdout); - /* 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"); */ - fputs(CP[130], stdout); - /* 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"); */ - fputs(CP[200], stdout); - /* printf("edit edit board force - * enter game moves\n"); */ - fputs(CP[153], stdout); - /* printf("switch sides with computer both - * computer match\n"); */ - fputs(CP[194], stdout); - /* printf("black computer plays black white - * computer plays white\n"); */ - fputs(CP[202], stdout); - /* printf("depth set search depth clock - * set time control\n"); */ - fputs(CP[149], stdout); - /* printf("post principle variation hint - * suggest a move\n"); */ - fputs(CP[177], stdout); - /* printf("save game to file get - * game from file\n"); */ - fputs(CP[188], stdout); - printf("xsave pos. to xshogi file xget" - " pos. from xshogi file\n"); - /* printf("random randomize play new - * start new game\n"); */ - fputs(CP[181], stdout); - 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); } - /* * 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 Raw_EditBoard(void) { @@ -380,14 +352,10 @@ Raw_EditBoard(void) Book = BOOKFAIL; Raw_ClearScreen(); Raw_UpdateDisplay(0, 0, 1, 0); - /* printf(". exit to main\n"); */ - fputs(CP[29], stdout); - /* printf("# clear board\n"); */ - fputs(CP[28], stdout); - /* printf("c change sides\n"); */ - fputs(CP[136], stdout); - /* printf("enter piece & location: \n"); */ - fputs(CP[155], stdout); + 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; @@ -396,7 +364,7 @@ Raw_EditBoard(void) scanf("%s", s); found = 0; - if (s[0] == CP[28][0]) /*#*/ + if (s[0] == '#') { for (sq = 0; sq < NO_SQUARES; sq++) { @@ -407,7 +375,7 @@ Raw_EditBoard(void) ClearCaptured(); } - if (s[0] == CP[136][0]) /*c*/ + if (s[0] == 'c') a = otherside[a]; if (s[1] == '*') @@ -455,7 +423,7 @@ Raw_EditBoard(void) 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); @@ -470,16 +438,13 @@ Raw_EditBoard(void) } - - /* * 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) +Raw_SetupBoard(void) { short r, c, sq, i; char ch; @@ -524,8 +489,7 @@ SetupBoard(void) InitializeStats(); Raw_ClearScreen(); Raw_UpdateDisplay(0, 0, 1, 0); - /* printf("Setup successful\n"); */ - fputs(CP[106], stdout); + fputs("Setup successful\n", stdout); } @@ -534,20 +498,19 @@ Raw_SearchStartStuff(short side) { if (flag.post) { - printf(CP[123], + printf("\nMove# %d Target = %ld Clock: %ld\n", GameCnt/2 + 1, ResponseTime, TimeControl.clock[side]); } } - void Raw_OutputMove(void) { if (flag.illegal) { - printf("%s\n", CP[225]); + printf("Illegal position.\n"); return; } @@ -555,15 +518,11 @@ Raw_OutputMove(void) 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)) @@ -588,15 +547,11 @@ Raw_OutputMove(void) 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); } @@ -604,8 +559,7 @@ Raw_OutputMove(void) 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); @@ -613,34 +567,29 @@ Raw_OutputMove(void) summary: if (root->flags & draw) - { - /* printf("Drawn game!\n"); */ - fputs(CP[57], stdout); - } + 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 +Raw_UpdateClocks(void) +{ +} + + +void Raw_UpdateDisplay(short f, short t, short redraw, short isspec) { @@ -653,8 +602,7 @@ 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--) @@ -700,7 +648,6 @@ Raw_UpdateDisplay(short f, short t, short redraw, short isspec) } - void Raw_ChangeAlphaWindow(void) { @@ -711,7 +658,6 @@ Raw_ChangeAlphaWindow(void) } - void Raw_ChangeBetaWindow(void) { @@ -722,46 +668,33 @@ Raw_ChangeBetaWindow(void) } - 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 - fputs(CP[223], stdout); + fputs("I have no idea.\n", stdout); } - 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]); + strncpy(T, sx, NO_SQUARES); + T[NO_SQUARES] = '\0'; - strcat(sx, "XX"); - q = T; - *q = '\0'; - - for (; *p != 'X'; *q++ = *p++); - - *q = '\0'; - - /* line empty ask for input */ + /* if line empty, ask for input */ if (!T[0]) { - fputs(CP[61], stdout); + fputs("Enter #moves #minutes: ", stdout); fgets(T, NO_SQUARES + 1, stdin); - strcat(T, "XX"); } /* skip blackspace */ @@ -771,6 +704,7 @@ Raw_SelectLevel(char *sx) if (*p == 'f') { /* its a fischer clock game */ + char *q; p++; TCminutes = (short)strtol(p, &q, 10); TCadd = (short)strtol(q, NULL, 10) *100; @@ -780,6 +714,7 @@ Raw_SelectLevel(char *sx) else { /* regular game */ + char *q; TCadd = 0; TCmoves = (short)strtol(p, &q, 10); TCminutes = (short)strtol(q, &q, 10); @@ -790,7 +725,7 @@ Raw_SelectLevel(char *sx) TCseconds = 0; #ifdef OPERATORTIME - fputs(CP[94], stdout); + fputs("Operator time (hundredths) = ", stdout); scanf("%hd", &OperatorTime); #endif @@ -819,19 +754,21 @@ Raw_SelectLevel(char *sx) } - - void -Raw_ChangeSearchDepth(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 Raw_ChangeHashDepth(void) { @@ -842,7 +779,6 @@ Raw_ChangeHashDepth(void) } - void Raw_SetContempt(void) { @@ -851,7 +787,6 @@ Raw_SetContempt(void) } - void Raw_ChangeXwindow(void) { @@ -864,12 +799,10 @@ Raw_ChangeXwindow(void) * Raw_ShowPostnValue(short sq) * must have called ExaminePosition() first */ - void Raw_ShowPostnValue(short sq) { - short score; - score = ScorePosition(color[sq]); + (void) ScorePosition(color[sq]); if (color[sq] != neutral) { @@ -886,7 +819,6 @@ Raw_ShowPostnValue(short sq) } - void Raw_DoDebug(void) { @@ -894,14 +826,14 @@ Raw_DoDebug(void) 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--) @@ -959,13 +891,12 @@ Raw_DoDebug(void) } 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 Raw_DoTable(short table[NO_SQUARES]) { @@ -985,7 +916,6 @@ Raw_DoTable(short table[NO_SQUARES]) } - void Raw_ShowPostnValues(void) { @@ -1004,8 +934,76 @@ Raw_ShowPostnValues(void) } 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]); } + + +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, +};