X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fcursesdsp.c;h=bf379994cd019800afdfa632764aa5f9b5e40d52;hb=0f5d4e2b00e7911f02ed0f404a3d96d699cabd7e;hp=47c34d2294984a59ef025030da213def4e6d052f;hpb=4a9acd2e4d21586f2af629ec44cd78c237dcd702;p=gnushogi.git diff --git a/gnushogi/cursesdsp.c b/gnushogi/cursesdsp.c index 47c34d2..bf37999 100644 --- a/gnushogi/cursesdsp.c +++ b/gnushogi/cursesdsp.c @@ -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 * @@ -30,10 +31,13 @@ * ---------------------------------------------------------------------- */ +/* request *snprintf prototypes*/ +#define _POSIX_C_SOURCE 200112L #include #include #include +#include #include #include @@ -41,7 +45,6 @@ #include #include "gnushogi.h" -#include "cursesdsp.h" #if HAVE_UNISTD_H #include @@ -59,28 +62,28 @@ #define FLUSH_SCANW fflush(stdout), scanw -int mycnt1, mycnt2; - #define TAB (58) #define VIR_C(s) ((flag.reverse) ? (NO_COLS - 1 - column(s)) : column(s)) #define VIR_R(s) ((flag.reverse) ? (NO_ROWS - 1 - row(s)) : row(s)) -unsigned short MV[MAXDEPTH]; -int MSCORE; -char *DRAW; +/**************************************** + * forward declarations + ****************************************/ -/* Forward declarations. */ /* FIXME: change this name, puh-leeze! */ - static void UpdateCatched(void); - +static void DrawPiece(short sq); +static void ShowScore(short score); +static void Curses_UpdateDisplay(short f, short t, short redraw, short isspec); +static void Curses_Die(int sig); +static void Curses_ShowSidetoMove(void); /**************************************** * Trivial output functions. ****************************************/ -void +static void ClearEoln(void) { clrtoeol(); @@ -88,7 +91,7 @@ ClearEoln(void) } -void +static void Curses_ClearScreen(void) { clear(); @@ -96,22 +99,14 @@ Curses_ClearScreen(void) } -void -ClearMessage(void) -{ - gotoXY(TAB, 6); - ClearEoln(); -} - - -void +static void gotoXY(short x, short y) { move(y - 1, x - 1); } -void +static void Curses_ShowCurrentMove(short pnt, short f, short t) { algbr(f, t, false); @@ -120,16 +115,16 @@ Curses_ShowCurrentMove(short pnt, short f, short t) } -void +static void Curses_ShowDepth(char ch) { gotoXY(TAB, 4); - printw(CP[53], Sdepth, ch); /* Depth = %d%c */ + printw("Depth= %d%c ", Sdepth, ch); ClearEoln(); } -void +static void Curses_ShowGameType(void) { if (flag.post) @@ -140,21 +135,21 @@ Curses_ShowGameType(void) } -void +static void ShowHeader(void) { gotoXY(TAB, 2); - printw(CP[69], version, patchlevel); + printw("GNU Shogi %s", PACKAGE_VERSION); } -void +static void Curses_ShowLine(unsigned short *bstline) { } -void +static void Curses_ShowMessage(char *s) { gotoXY(TAB, 6); @@ -163,7 +158,7 @@ Curses_ShowMessage(char *s) } -void +static void Curses_AlwaysShowMessage(const char *format, ...) { static char buffer[60]; @@ -175,7 +170,7 @@ Curses_AlwaysShowMessage(const char *format, ...) } -void +static void Curses_Printf(const char *format, ...) { static char buffer[60]; @@ -187,14 +182,14 @@ Curses_Printf(const char *format, ...) } -void +static void Curses_doRequestInputString(const char* fmt, char* buffer) { FLUSH_SCANW(fmt, buffer); } -int +static int Curses_GetString(char* sx) { fflush(stdout); @@ -202,18 +197,18 @@ Curses_GetString(char* sx) } -void +static void Curses_ShowNodeCnt(long NodeCnt) { gotoXY(TAB, 22); - /* printw(CP[90], NodeCnt, (et > 100) ? NodeCnt / (et / 100) : 0); */ + /* printw("Nodes = %8ld, Nodes/Sec = %5ld", NodeCnt, (et > 100) ? NodeCnt / (et / 100) : 0); */ printw("n = %ld n/s = %ld", NodeCnt, (et > 100) ? NodeCnt / (et / 100) : 0); ClearEoln(); } -void +static void Curses_ShowPatternCount(short side, short n) { if (flag.post) @@ -228,35 +223,33 @@ Curses_ShowPatternCount(short side, short n) } -void +static void ShowPlayers(void) { gotoXY(5, ((flag.reverse) ? (5 + 2*NO_ROWS) : 2)); - printw("%s", (computer == white) ? CP[218] : CP[74]); + printw("%s", (computer == white) ? "Computer" : "Human "); gotoXY(5, ((flag.reverse) ? 2 : (5 + 2*NO_ROWS))); - printw("%s", (computer == black) ? CP[218] : CP[74]); + printw("%s", (computer == black) ? "Computer" : "Human "); } -void +static void Curses_ShowPrompt(void) { Curses_ShowSidetoMove(); gotoXY(TAB, 17); - printw(CP[121]); /* Your move is? */ + printw("Your move is? "); ClearEoln(); } -void +static void Curses_ShowResponseTime(void) { if (flag.post) { short TCC = TCcount; gotoXY(TAB, 21); - /* printw("RT = %ld TCC = %d TCL = %ld EX = %ld ET = %ld TO = %d", - ResponseTime, TCC, TCleft, ExtraTime, et, flag.timeout); */ printw("%ld, %d, %ld, %ld, %ld, %d", ResponseTime, TCC, TCleft, ExtraTime, et, flag.timeout); ClearEoln(); @@ -264,7 +257,7 @@ Curses_ShowResponseTime(void) } -void +static void Curses_ShowResults(short score, unsigned short *bstline, char ch) { unsigned char d, ply; @@ -299,16 +292,16 @@ Curses_ShowResults(short score, unsigned short *bstline, char ch) } -void +static void ShowScore(short score) { gotoXY(TAB, 5); - printw(CP[104], score); + printw("Score= %d", score); ClearEoln(); } -void +static void Curses_ShowSidetoMove(void) { gotoXY(TAB, 14); @@ -317,7 +310,7 @@ Curses_ShowSidetoMove(void) } -void +static void Curses_ShowStage(void) { gotoXY(TAB, 19); @@ -330,7 +323,7 @@ Curses_ShowStage(void) * End of trivial output routines. ****************************************/ -void +static void Curses_Initialize(void) { signal(SIGINT, Curses_Die); @@ -340,7 +333,7 @@ Curses_Initialize(void) } -void +static void Curses_ExitShogi(void) { if (!nolist) @@ -356,7 +349,7 @@ Curses_ExitShogi(void) } -void +static void Curses_Die(int sig) { char s[80]; @@ -364,10 +357,10 @@ Curses_Die(int sig) signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); - Curses_ShowMessage(CP[31]); /* Abort? */ + Curses_ShowMessage("Abort? "); FLUSH_SCANW("%s", s); - if (strcmp(s, CP[210]) == 0) /* yes */ + if (strcmp(s, "yes") == 0) Curses_ExitShogi(); signal(SIGINT, Curses_Die); @@ -375,7 +368,7 @@ Curses_Die(int sig) } -void +static void Curses_TerminateSearch(int sig) { signal(SIGINT, SIG_IGN); @@ -391,80 +384,48 @@ Curses_TerminateSearch(int sig) } -void +static void Curses_help(void) { Curses_ClearScreen(); - /* printw("GNU Shogi ??p? command summary\n"); */ - printw(CP[40], version, patchlevel); + printw("GNU Shogi %s command summary\n", PACKAGE_VERSION); printw("-------------------------------" "---------------------------------\n"); - /* printw("7g7f move from 7g to 7f quit - * Exit Shogi\n"); */ - printw(CP[158]); - /* printw("S6h move silver to 6h beep - * turn %s\n", (flag.beep) ? "off" : "on"); */ - printw(CP[86], (flag.beep) ? CP[92] : CP[93]); - /* printw("2d2c+ move to 2c and promote\n"); */ - printw(CP[128], (flag.material) ? CP[92] : CP[93]); - /* printw("P*5e drop a pawn to 5e easy - * turn %s\n", (flag.easy) ? "off" : "on"); */ - printw(CP[173], (flag.easy) ? CP[92] : CP[93]); - /* printw(" hash - * turn %s\n", (flag.hash) ? "off" : "on"); */ - printw(CP[174], (flag.hash) ? CP[92] : CP[93]); - /* printw("bd redraw board reverse - * board display\n"); */ - printw(CP[130]); - /* printw("list game to shogi.lst book - * turn %s used %d of %d\n", (Book) ? "off" : "on", book - count, booksize); */ - printw(CP[170], (Book) ? CP[92] : CP[93], bookcount, BOOKSIZE); - /* printw("undo undo last ply remove - * take back a move\n"); */ - printw(CP[200]); - /* printw("edit edit board force - * enter game moves\n"); */ - printw(CP[153]); - /* printw("switch sides with computer both - * computer match\n"); */ - printw(CP[194]); - /* printw("black computer plays black white - * computer plays white\n"); */ - printw(CP[202]); - /* printw("depth set search depth clock - * set time control\n"); */ - printw(CP[149]); - /* printw("hint suggest a move post - * turn %s principle variation\n", (flag.post) ? "off" : - * "on"); */ - printw(CP[177], (flag.post) ? CP[92] : CP[93]); - /* printw("save game to file get - * game from file\n"); */ - printw(CP[188]); - /* printw("random randomize play new - * start new game\n"); */ - printw(CP[181]); + printw("7g7f move from 7g to 7f quit Exit Shogi\n"); + printw("S6h move silver to 6h beep turn %s\n", (flag.beep) ? "OFF" : "ON"); + printw("2d2c+ move to 2c and promote material turn %s\n", (flag.material) ? "OFF" : "ON"); + printw("P*5e drop pawn to 5e easy turn %s\n", (flag.easy) ? "OFF" : "ON"); + printw("tsume toggle tsume mode hash turn %s\n", (flag.hash) ? "OFF" : "ON"); + printw("bd redraw board reverse board display\n"); + printw("list game to shogi.lst book turn %s used %d of %d\n", (Book) ? "OFF" : "ON", bookcount, BOOKSIZE); + printw("undo undo last ply remove take back a move\n"); + printw("edit edit board force toggle manual move mode\n"); + printw("switch sides with computer both computer match\n"); + printw("black computer plays black white computer plays white\n"); + printw("depth set search depth clock set time control\n"); + printw("post principle variation hint suggest a move\n", (flag.post) ? "OFF" : "ON"); + printw("save game to file get game from file\n"); + printw("random randomize play new start new game\n"); gotoXY(10, 20); - printw(CP[47], ColorStr[computer]); + printw("Computer: %s", ColorStr[computer]); gotoXY(10, 21); - printw(CP[97], ColorStr[opponent]); + printw("Opponent: %s", ColorStr[opponent]); gotoXY(10, 22); - printw(CP[79], MaxResponseTime/100); + printw("Level: %ld", MaxResponseTime/100); gotoXY(10, 23); - printw(CP[59], (flag.easy) ? CP[93] : CP[92]); + printw("Easy mode: %s", (flag.easy) ? "ON" : "OFF"); gotoXY(25, 23); - printw(CP[231], (flag.tsume) ? CP[93] : CP[92]); + printw("Tsume: %s", (flag.tsume) ? "ON" : "OFF"); gotoXY(40, 20); - printw(CP[52], MaxSearchDepth); + printw("Depth: %d", MaxSearchDepth); gotoXY(40, 21); - printw(CP[100], (dither) ? CP[93] : CP[92]); + printw("Random: %s", (dither) ? "ON" : "OFF"); gotoXY(40, 22); - printw(CP[112], (flag.hash) ? CP[93] : CP[92]); + printw("Transposition table: %s", (flag.hash) ? "ON" : "OFF"); gotoXY(40, 23); - printw(CP[73]); + printw("Hit to return: "); gotoXY(10, 24); - printw(CP[110], (TCflag) ? CP[93] : CP[92], + printw("Time Control %s %d moves %d sec %d add %d depth\n", (TCflag) ? "ON" : "OFF", TimeControl.moves[black], TimeControl.clock[black] / 100, OperatorTime, MaxSearchDepth); @@ -491,7 +452,7 @@ static const short y0[2] = { 20, 4 }; * P* will put a pawn to the captured pieces. */ -void +static void Curses_EditBoard(void) { short a, c, sq, i; @@ -503,24 +464,24 @@ Curses_EditBoard(void) Curses_ClearScreen(); Curses_UpdateDisplay(0, 0, 1, 0); gotoXY(TAB, 3); - printw(CP[29]); + printw(". Exit to main\n"); gotoXY(TAB, 4); - printw(CP[28]); + printw("# Clear board\n"); gotoXY(TAB, 5); - printw(CP[136]); + printw("c Change sides\n"); gotoXY(TAB, 7); - printw(CP[64]); + printw("Enter piece & location: "); a = black; do { gotoXY(TAB, 6); - printw(CP[60], ColorStr[a]); /* Editing %s */ + printw("Editing: %s", ColorStr[a]); gotoXY(TAB + 24, 7); ClearEoln(); FLUSH_SCANW("%s", s); - if (s[0] == CP[28][0]) /* # */ + if (s[0] == '#') { for (sq = 0; sq < NO_SQUARES; sq++) { @@ -533,7 +494,7 @@ Curses_EditBoard(void) UpdateCatched(); } - if (s[0] == CP[136][0]) /* c */ + if (s[0] == 'c') a = otherside[a]; if (s[1] == '*') @@ -574,7 +535,7 @@ Curses_EditBoard(void) DrawPiece(sq); } } - while (s[0] != CP[29][0]); /* . */ + while (s[0] != '.'); for (sq = 0; sq < NO_SQUARES; sq++) Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0); @@ -640,7 +601,7 @@ UpdateCatched() } -void +static void Curses_SearchStartStuff(short side) { short i; @@ -656,7 +617,7 @@ Curses_SearchStartStuff(short side) } -void +static void Curses_OutputMove(void) { @@ -665,11 +626,11 @@ Curses_OutputMove(void) if (flag.illegal) { - printw(CP[225]); + printw("Illegal position."); return; } - printw(CP[84], mvstr[0]); /* My move is %s */ + printw("My move is: %5s", mvstr[0]); if (flag.beep) putchar(7); @@ -679,16 +640,16 @@ Curses_OutputMove(void) gotoXY(TAB, 18); if (root->flags & draw) - printw(CP[58]); + printw("Drawn game!"); else if (root->score == -(SCORE_LIMIT + 999)) - printw(CP[95]); + printw("Opponent mates!"); else if (root->score == SCORE_LIMIT + 998) - printw(CP[44]); + printw("Computer mates!"); #ifdef VERYBUGGY else if (root->score < -SCORE_LIMIT) - printw(CP[96], SCORE_LIMIT + 999 + root->score - 1); + printw("Opp: mate in %d!", SCORE_LIMIT + 999 + root->score - 1); else if (root->score > SCORE_LIMIT) - printw(CP[45], SCORE_LIMIT + 998 - root->score - 1); + printw("Comp: mate in %d!", SCORE_LIMIT + 998 - root->score - 1); #endif /* VERYBUGGY */ ClearEoln(); @@ -711,9 +672,9 @@ Curses_OutputMove(void) t = (l + h) >> 1; } - ShowNodeCnt(NodeCnt); + Curses_ShowNodeCnt(NodeCnt); gotoXY(TAB, 23); - printw(CP[81], t); /* Max Tree= */ + printw("Max Tree = %5d", t); ClearEoln(); } @@ -721,8 +682,8 @@ Curses_OutputMove(void) } -void -UpdateClocks(void) +static void +Curses_UpdateClocks(void) { short m, s; long dt; @@ -753,13 +714,13 @@ UpdateClocks(void) printw("%d:%02d ", m, s); if (flag.post) - ShowNodeCnt(NodeCnt); + Curses_ShowNodeCnt(NodeCnt); refresh(); } -void +static void DrawPiece(short sq) { char y; @@ -800,13 +761,11 @@ DrawPiece(short sq) /* * Curses_ShowPostnValue(): must have called ExaminePosition() first */ -void +static void Curses_ShowPostnValue(short sq) { - short score; - gotoXY(4 + 5 * VIR_C(sq), 5 + 2 * (7 - VIR_R(sq))); /* CHECKME */ - score = ScorePosition(color[sq]); + (void) ScorePosition(color[sq]); if (color[sq] != neutral) #if defined SAVE_SVALUE @@ -825,7 +784,7 @@ Curses_ShowPostnValue(short sq) } -void +static void Curses_ShowPostnValues(void) { short sq, score; @@ -837,7 +796,7 @@ Curses_ShowPostnValues(void) score = ScorePosition(opponent); gotoXY(TAB, 5); - printw(CP[103], score, + printw("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]); @@ -845,7 +804,7 @@ Curses_ShowPostnValues(void) } -void +static void Curses_UpdateDisplay(short f, short t, short redraw, short isspec) { short i, sq, z; @@ -893,10 +852,17 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec) gotoXY(3, 4 + 2*NO_ROWS); printw(" "); +#ifndef MINISHOGI if (flag.reverse) - printw(CP[16]); + printw(" 1 2 3 4 5 6 7 8 9"); else - printw(CP[15]); + printw(" 9 8 7 6 5 4 3 2 1"); +#else + if (flag.reverse) + printw(" 1 2 3 4 5"); + else + printw(" 1 2 3 4 5"); +#endif for (sq = 0; sq < NO_SQUARES; sq++) DrawPiece(sq); @@ -956,27 +922,27 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec) } -void +static void Curses_ChangeAlphaWindow(void) { - Curses_ShowMessage(CP[114]); + Curses_ShowMessage("WAwindow = "); FLUSH_SCANW("%hd", &WAwindow); - Curses_ShowMessage(CP[34]); + Curses_ShowMessage("BAwindow = "); FLUSH_SCANW("%hd", &BAwindow); } -void +static void Curses_ChangeBetaWindow(void) { - Curses_ShowMessage(CP[115]); + Curses_ShowMessage("WBwindow = "); FLUSH_SCANW("%hd", &WBwindow); - Curses_ShowMessage(CP[35]); + Curses_ShowMessage("BBwindow = "); FLUSH_SCANW("%hd", &BBwindow); } -void +static void Curses_GiveHint(void) { char s[40]; @@ -984,80 +950,80 @@ Curses_GiveHint(void) if (hint) { algbr((short) (hint >> 8), (short) (hint & 0xFF), false); - strcpy(s, CP[198]); /* try */ + strcpy(s, "try "); strcat(s, mvstr[0]); Curses_ShowMessage(s); } else { - Curses_ShowMessage(CP[223]); + Curses_ShowMessage("I have no idea.\n"); } } -void -Curses_ChangeSearchDepth(void) +static void +Curses_ChangeSearchDepth(char* sx) { - Curses_ShowMessage(CP[150]); + Curses_ShowMessage("depth = "); FLUSH_SCANW("%hd", &MaxSearchDepth); TCflag = !(MaxSearchDepth > 0); } -void +static void Curses_ChangeHashDepth(void) { - Curses_ShowMessage(CP[163]); + Curses_ShowMessage("hashdepth = "); FLUSH_SCANW("%hd", &HashDepth); - Curses_ShowMessage(CP[82]); + Curses_ShowMessage("MoveLimit = "); FLUSH_SCANW("%hd", &HashMoveLimit); } -void +static void Curses_SetContempt(void) { - Curses_ShowMessage(CP[142]); + Curses_ShowMessage("contempt = "); FLUSH_SCANW("%hd", &contempt); } -void +static void Curses_ChangeXwindow(void) { - Curses_ShowMessage(CP[208]); + Curses_ShowMessage("xwndw= "); FLUSH_SCANW("%hd", &xwndw); } -void +static void Curses_SelectLevel(char *sx) { int item; Curses_ClearScreen(); gotoXY(32, 2); - printw(CP[41], version, patchlevel); + printw("GNU Shogi %s", PACKAGE_VERSION); gotoXY(20, 4); - printw(CP[18]); + printw(" 1. 40 moves in 5 minutes"); gotoXY(20, 5); - printw(CP[19]); + printw(" 2. 40 moves in 15 minutes"); gotoXY(20, 6); - printw(CP[20]); + printw(" 3. 40 moves in 30 minutes"); gotoXY(20, 7); - printw(CP[21]); + printw(" 4. all moves in 15 minutes"); gotoXY(20, 8); - printw(CP[22]); + printw(" 5. all moves in 30 minutes"); gotoXY(20, 9); - printw(CP[23]); + printw(" 6. all moves in 15 minutes, 30 seconds fischer clock"); gotoXY(20, 10); - printw(CP[24]); + printw(" 7. all moves in 30 minutes, 30 seconds fischer clock"); gotoXY(20, 11); - printw(CP[25]); + printw(" 8. 1 move in 1 minute"); gotoXY(20, 12); - printw(CP[26]); + printw(" 9. 1 move in 15 minutes"); gotoXY(20, 13); - printw(CP[27]); + printw("10. 1 move in 30 minutes"); OperatorTime = 0; TCmoves = 40; @@ -1065,7 +1031,7 @@ Curses_SelectLevel(char *sx) TCseconds = 0; gotoXY(20, 17); - printw(CP[62]); + printw("Enter Level: "); refresh(); FLUSH_SCANW("%d", &item); @@ -1140,21 +1106,21 @@ Curses_SelectLevel(char *sx) } -void +static void Curses_DoDebug(void) { short c, p, sq, tp, tc, tsq, score; char s[40]; ExaminePosition(opponent); - Curses_ShowMessage(CP[65]); + Curses_ShowMessage("Enter piece: "); FLUSH_SCANW("%s", s); c = neutral; - if ((s[0] == CP[9][0]) || (s[0] == CP[9][1])) /* b B */ + if ((s[0] == 'b') || (s[0] == 'B')) c = black; - if ((s[0] == CP[9][2]) || (s[0] == CP[9][3])) /* w W */ + if ((s[0] == 'w') || (s[0] == 'W')) c = white; for (p = king; p > no_piece; p--) @@ -1179,7 +1145,7 @@ Curses_DoDebug(void) score = ScorePosition(opponent); gotoXY(TAB, 5); - printw(CP[103], score, + printw("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]); @@ -1187,7 +1153,7 @@ Curses_DoDebug(void) } -void +static void Curses_DoTable(short table[NO_SQUARES]) { short sq; @@ -1201,25 +1167,12 @@ Curses_DoTable(short table[NO_SQUARES]) } -/* - * Determine the time that has passed since the search was started. If the - * elapsed time exceeds the target(ResponseTime + ExtraTime) then set timeout - * to true which will terminate the search. - * iop = COMPUTE_MODE calculate et, bump ETnodes - * iop = COMPUTE_AND_INIT_MODE calculate et, set timeout if time exceeded, - * set reference time - */ -void -Curses_ElapsedTime(ElapsedTime_mode iop) +static void +Curses_PollForInput(void) { - long current_time; int i; int nchar; -#ifdef HAVE_GETTIMEOFDAY - struct timeval tv; -#endif - if ((i = ioctl((int) 0, FIONREAD, &nchar))) { perror("FIONREAD"); @@ -1237,53 +1190,56 @@ Curses_ElapsedTime(ElapsedTime_mode iop) flag.bothsides = false; } +} -#ifdef HAVE_GETTIMEOFDAY - gettimeofday(&tv, NULL); - current_time = tv.tv_sec*100 + (tv.tv_usec/10000); -#else - et = ((current_time = time((long *) 0)) - time0) * 100; -#endif - -#ifdef INTERRUPT_TEST - if (iop == INIT_INTERRUPT_MODE) - { - itime0 = current_time; - } - else if (iop == COMPUTE_INTERRUPT_MODE) - { - it = current_time - itime0; - } - else -#endif - { -#ifdef HAVE_GETTIMEOFDAY - et = current_time - time0; -#endif - ETnodes = NodeCnt + znodes; - - if (et < 0) - { -#ifdef INTERRUPT_TEST - printf("elapsed time %ld not positive\n", et); -#endif - et = 0; - } - if (iop == COMPUTE_AND_INIT_MODE) - { - if ((et > (ResponseTime + ExtraTime)) && (Sdepth > MINDEPTH)) - flag.timeout = true; +static void +Curses_SetupBoard(void) +{ + Curses_ShowMessage("'setup' command is not supported in Cursesmode"); +} - time0 = current_time; - } - if (!NOT_CURSES) - { -#ifdef QUIETBACKGROUND - if (!background) -#endif - UpdateClocks(); - } - } -} +struct display curses_display = +{ + .ChangeAlphaWindow = Curses_ChangeAlphaWindow, + .ChangeBetaWindow = Curses_ChangeBetaWindow, + .ChangeHashDepth = Curses_ChangeHashDepth, + .ChangeSearchDepth = Curses_ChangeSearchDepth, + .ChangeXwindow = Curses_ChangeXwindow, + .ClearScreen = Curses_ClearScreen, + .DoDebug = Curses_DoDebug, + .DoTable = Curses_DoTable, + .EditBoard = Curses_EditBoard, + .ExitShogi = Curses_ExitShogi, + .GiveHint = Curses_GiveHint, + .Initialize = Curses_Initialize, + .ShowNodeCnt = Curses_ShowNodeCnt, + .OutputMove = Curses_OutputMove, + .PollForInput = Curses_PollForInput, + .SetContempt = Curses_SetContempt, + .SearchStartStuff = Curses_SearchStartStuff, + .SelectLevel = Curses_SelectLevel, + .ShowCurrentMove = Curses_ShowCurrentMove, + .ShowDepth = Curses_ShowDepth, + .ShowGameType = Curses_ShowGameType, + .ShowLine = Curses_ShowLine, + .ShowMessage = Curses_ShowMessage, + .AlwaysShowMessage = Curses_AlwaysShowMessage, + .Printf = Curses_Printf, + .doRequestInputString = Curses_doRequestInputString, + .GetString = Curses_GetString, + .SetupBoard = Curses_SetupBoard, + .ShowPatternCount = Curses_ShowPatternCount, + .ShowPostnValue = Curses_ShowPostnValue, + .ShowPostnValues = Curses_ShowPostnValues, + .ShowPrompt = Curses_ShowPrompt, + .ShowResponseTime = Curses_ShowResponseTime, + .ShowResults = Curses_ShowResults, + .ShowSidetoMove = Curses_ShowSidetoMove, + .ShowStage = Curses_ShowStage, + .TerminateSearch = Curses_TerminateSearch, + .UpdateClocks = Curses_UpdateClocks, + .UpdateDisplay = Curses_UpdateDisplay, + .help = Curses_help, +};