X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Frawdsp.c;h=0edfafdd7d1e6ea2a5610f983f96af32f2006156;hb=cbf4ad5e9942032a96215a4c7f095a4777bf0021;hp=1f9e4b340b6ac2b7a114b900dd25c6190e26f69a;hpb=82b026e6376b640a4d3409a461dd6bd83708e33e;p=gnushogi.git diff --git a/gnushogi/rawdsp.c b/gnushogi/rawdsp.c index 1f9e4b3..0edfafd 100644 --- a/gnushogi/rawdsp.c +++ b/gnushogi/rawdsp.c @@ -2,11 +2,14 @@ * 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 * * 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 @@ -28,6 +31,7 @@ #include #include +#include #include #include #include @@ -56,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); } } @@ -120,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) @@ -164,7 +209,6 @@ Raw_ShowStage(void) * End of trivial output routines. ****************************************/ - void Raw_Initialize(void) { @@ -192,7 +236,6 @@ Raw_Initialize(void) } - void Raw_ExitShogi(void) { @@ -201,6 +244,8 @@ Raw_ExitShogi(void) if (!nolist) ListGame(); + + exit(0); } @@ -217,7 +262,6 @@ Raw_Die(int sig) } - void Raw_TerminateSearch(int sig) { @@ -232,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]); @@ -257,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", */ @@ -310,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) { @@ -333,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; @@ -379,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)) @@ -422,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; @@ -477,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], @@ -496,7 +528,6 @@ Raw_SearchStartStuff(short side) } - void Raw_OutputMove(void) { @@ -570,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)) { @@ -655,7 +686,6 @@ Raw_UpdateDisplay(short f, short t, short redraw, short isspec) } - void Raw_ChangeAlphaWindow(void) { @@ -666,7 +696,6 @@ Raw_ChangeAlphaWindow(void) } - void Raw_ChangeBetaWindow(void) { @@ -677,7 +706,6 @@ Raw_ChangeBetaWindow(void) } - void Raw_GiveHint(void) { @@ -687,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) { @@ -714,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"); } @@ -745,7 +772,7 @@ Raw_SelectLevel(char *sx) TCseconds = 0; #ifdef OPERATORTIME - printf(CP[94]); + fputs(CP[94], stdout); scanf("%hd", &OperatorTime); #endif @@ -774,8 +801,6 @@ Raw_SelectLevel(char *sx) } - - void Raw_ChangeSearchDepth(void) { @@ -785,8 +810,6 @@ Raw_ChangeSearchDepth(void) } - - void Raw_ChangeHashDepth(void) { @@ -797,7 +820,6 @@ Raw_ChangeHashDepth(void) } - void Raw_SetContempt(void) { @@ -806,7 +828,6 @@ Raw_SetContempt(void) } - void Raw_ChangeXwindow(void) { @@ -819,7 +840,6 @@ Raw_ChangeXwindow(void) * Raw_ShowPostnValue(short sq) * must have called ExaminePosition() first */ - void Raw_ShowPostnValue(short sq) { @@ -841,7 +861,6 @@ Raw_ShowPostnValue(short sq) } - void Raw_DoDebug(void) { @@ -920,7 +939,6 @@ Raw_DoDebug(void) } - void Raw_DoTable(short table[NO_SQUARES]) { @@ -940,7 +958,6 @@ Raw_DoTable(short table[NO_SQUARES]) } - void Raw_ShowPostnValues(void) { @@ -965,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; + } + } +}