X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Frawdsp.c;h=0edfafdd7d1e6ea2a5610f983f96af32f2006156;hb=cbf4ad5e9942032a96215a4c7f095a4777bf0021;hp=bfbc7d206de24437185b6044f47080098a9eb8f7;hpb=8ae7e7d1b257ef36d8a9fd1cd88807954ef10764;p=gnushogi.git diff --git a/gnushogi/rawdsp.c b/gnushogi/rawdsp.c index bfbc7d2..0edfafd 100644 --- a/gnushogi/rawdsp.c +++ b/gnushogi/rawdsp.c @@ -14,8 +14,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 @@ -23,14 +23,15 @@ * 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 + * . * ---------------------------------------------------------------------- * */ #include #include +#include #include #include #include @@ -59,14 +60,13 @@ Raw_ClearScreen(void) } -/* FIXME: change to ShowPrompt? */ void -PromptForMove(void) +Raw_ShowPrompt(void) { if (!barebones && !XSHOGI) { /* printf("\nYour move is? "); */ - printf(CP[124]); + fputs(CP[124], stdout); } } @@ -123,6 +123,48 @@ Raw_ShowMessage(char *s) void +Raw_AlwaysShowMessage(const char *format, va_list ap) +{ + vprintf(format, ap); + printf("\n"); +} + + +void +Raw_Printf(const char *format, va_list ap) +{ + vprintf(format, ap); +} + + +void +Raw_doRequestInputString(const char* fmt, char* buffer) +{ + scanf(fmt, buffer); +} + + +int +Raw_GetString(char* sx) +{ + int eof = 0; + sx[0] = '\0'; + + while(!eof && !sx[0]) + eof = (fgets(sx, 80, stdin) == NULL); + return eof; +} + + +void +Raw_ShowNodeCnt(long NodeCnt) +{ + printf(CP[91], + NodeCnt, (((et) ? ((NodeCnt * 100) / et) : 0))); +} + + +void Raw_ShowPatternCount(short side, short n) { if (flag.post) @@ -167,7 +209,6 @@ Raw_ShowStage(void) * End of trivial output routines. ****************************************/ - void Raw_Initialize(void) { @@ -195,7 +236,6 @@ Raw_Initialize(void) } - void Raw_ExitShogi(void) { @@ -204,6 +244,8 @@ Raw_ExitShogi(void) if (!nolist) ListGame(); + + exit(0); } @@ -220,7 +262,6 @@ Raw_Die(int sig) } - void Raw_TerminateSearch(int sig) { @@ -235,18 +276,17 @@ Raw_TerminateSearch(int sig) } - void Raw_help(void) { Raw_ClearScreen(); /* printf("SHOGI command summary\n"); */ - printf(CP[40]); + printf(CP[40], version, patchlevel); printf("----------------------------------" "------------------------------\n"); /* printf("7g7f move from 7g to 7f quit * Exit Shogi\n"); */ - printf(CP[158]); + 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]); @@ -260,36 +300,36 @@ Raw_help(void) printf(CP[174], (flag.hash) ? CP[92] : CP[93]); /* printf("bd redraw board reverse * board display\n"); */ - printf(CP[130]); + 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"); */ - printf(CP[200]); + fputs(CP[200], stdout); /* printf("edit edit board force * enter game moves\n"); */ - printf(CP[153]); + fputs(CP[153], stdout); /* printf("switch sides with computer both * computer match\n"); */ - printf(CP[194]); + fputs(CP[194], stdout); /* printf("black computer plays black white * computer plays white\n"); */ - printf(CP[202]); + fputs(CP[202], stdout); /* printf("depth set search depth clock * set time control\n"); */ - printf(CP[149]); + fputs(CP[149], stdout); /* printf("post principle variation hint * suggest a move\n"); */ - printf(CP[177]); + fputs(CP[177], stdout); /* printf("save game to file get * game from file\n"); */ - printf(CP[188]); + 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"); */ - printf(CP[181]); + fputs(CP[181], stdout); printf("--------------------------------" "--------------------------------\n"); /* printf("Computer: %-12s Opponent: %s\n", */ @@ -313,18 +353,13 @@ Raw_help(void) (TCflag) ? CP[93] : CP[92], 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 Raw_EditBoard(void) { @@ -336,13 +371,13 @@ Raw_EditBoard(void) Raw_ClearScreen(); Raw_UpdateDisplay(0, 0, 1, 0); /* printf(". exit to main\n"); */ - printf(CP[29]); + fputs(CP[29], stdout); /* printf("# clear board\n"); */ - printf(CP[28]); + fputs(CP[28], stdout); /* printf("c change sides\n"); */ - printf(CP[136]); + fputs(CP[136], stdout); /* printf("enter piece & location: \n"); */ - printf(CP[155]); + fputs(CP[155], stdout); a = black; @@ -382,8 +417,8 @@ Raw_EditBoard(void) } 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)) @@ -425,16 +460,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; @@ -480,16 +512,13 @@ SetupBoard(void) Raw_ClearScreen(); Raw_UpdateDisplay(0, 0, 1, 0); /* printf("Setup successful\n"); */ - printf(CP[106]); + fputs(CP[106], stdout); } void Raw_SearchStartStuff(short side) { - signal(SIGINT, Raw_TerminateSearch); - signal(SIGQUIT, Raw_TerminateSearch); - if (flag.post) { printf(CP[123], @@ -499,7 +528,6 @@ Raw_SearchStartStuff(short side) } - void Raw_OutputMove(void) { @@ -573,7 +601,7 @@ Raw_OutputMove(void) if (root->flags & draw) { /* printf("Drawn game!\n"); */ - printf(CP[57]); + fputs(CP[57], stdout); } else if (root->score == -(SCORE_LIMIT + 999)) { @@ -658,7 +686,6 @@ Raw_UpdateDisplay(short f, short t, short redraw, short isspec) } - void Raw_ChangeAlphaWindow(void) { @@ -669,7 +696,6 @@ Raw_ChangeAlphaWindow(void) } - void Raw_ChangeBetaWindow(void) { @@ -680,7 +706,6 @@ Raw_ChangeBetaWindow(void) } - void Raw_GiveHint(void) { @@ -690,11 +715,10 @@ Raw_GiveHint(void) printf(CP[72], mvstr[0]); /*hint*/ } else - printf(CP[223]); + fputs(CP[223], stdout); } - void Raw_SelectLevel(char *sx) { @@ -717,7 +741,7 @@ Raw_SelectLevel(char *sx) /* line empty ask for input */ if (!T[0]) { - printf(CP[61]); + fputs(CP[61], stdout); fgets(T, NO_SQUARES + 1, stdin); strcat(T, "XX"); } @@ -748,7 +772,7 @@ Raw_SelectLevel(char *sx) TCseconds = 0; #ifdef OPERATORTIME - printf(CP[94]); + fputs(CP[94], stdout); scanf("%hd", &OperatorTime); #endif @@ -777,8 +801,6 @@ Raw_SelectLevel(char *sx) } - - void Raw_ChangeSearchDepth(void) { @@ -788,8 +810,6 @@ Raw_ChangeSearchDepth(void) } - - void Raw_ChangeHashDepth(void) { @@ -800,7 +820,6 @@ Raw_ChangeHashDepth(void) } - void Raw_SetContempt(void) { @@ -809,7 +828,6 @@ Raw_SetContempt(void) } - void Raw_ChangeXwindow(void) { @@ -822,7 +840,6 @@ Raw_ChangeXwindow(void) * Raw_ShowPostnValue(short sq) * must have called ExaminePosition() first */ - void Raw_ShowPostnValue(short sq) { @@ -844,7 +861,6 @@ Raw_ShowPostnValue(short sq) } - void Raw_DoDebug(void) { @@ -923,7 +939,6 @@ Raw_DoDebug(void) } - void Raw_DoTable(short table[NO_SQUARES]) { @@ -943,7 +958,6 @@ Raw_DoTable(short table[NO_SQUARES]) } - void Raw_ShowPostnValues(void) { @@ -968,3 +982,58 @@ Raw_ShowPostnValues(void) printf("\nhung black %d hung white %d\n", hung[black], hung[white]); } + +/* + * 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 +Raw_ElapsedTime(ElapsedTime_mode iop) +{ + long current_time; +#ifdef HAVE_GETTIMEOFDAY + struct timeval tv; + 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; + + time0 = current_time; + } + } +}