X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fcursesdsp.c;h=cb2f458e58bfaf0c032837a619206325ed89beb8;hb=6cdb4afe21c8d0eb740a6a22a02a0adf922fddfc;hp=d71aa63577d34f9495ae99af56bbf1a143ab66e4;hpb=de68af0b286eb210b5a3fb4bf4deb44b1b7a727e;p=gnushogi.git diff --git a/gnushogi/cursesdsp.c b/gnushogi/cursesdsp.c index d71aa63..cb2f458 100644 --- a/gnushogi/cursesdsp.c +++ b/gnushogi/cursesdsp.c @@ -43,6 +43,20 @@ #include "gnushogi.h" #include "cursesdsp.h" +#if HAVE_UNISTD_H +#include +#endif + +#if HAVE_SYS_FILIO_H +/* Definition of FIONREAD */ +#include +#endif + +#if HAVE_ERRNO_H +/* Definition of errno(). */ +#include +#endif + #define FLUSH_SCANW fflush(stdout), scanw int mycnt1, mycnt2; @@ -60,13 +74,14 @@ char *DRAW; /* FIXME: change this name, puh-leeze! */ static void UpdateCatched(void); - +static void DrawPiece(short sq); +static void ShowScore(short score); /**************************************** * Trivial output functions. ****************************************/ -void +static void ClearEoln(void) { clrtoeol(); @@ -82,7 +97,7 @@ Curses_ClearScreen(void) } -void +static void ClearMessage(void) { gotoXY(TAB, 6); @@ -90,8 +105,7 @@ ClearMessage(void) } - -void +static void gotoXY(short x, short y) { move(y - 1, x - 1); @@ -215,7 +229,7 @@ Curses_ShowPatternCount(short side, short n) } -void +static void ShowPlayers(void) { gotoXY(5, ((flag.reverse) ? (5 + 2*NO_ROWS) : 2)); @@ -225,9 +239,10 @@ ShowPlayers(void) } -void -ShowPrompt(void) +static void +Curses_ShowPrompt(void) { + Curses_ShowSidetoMove(); gotoXY(TAB, 17); printw(CP[121]); /* Your move is? */ ClearEoln(); @@ -285,7 +300,7 @@ Curses_ShowResults(short score, unsigned short *bstline, char ch) } -void +static void ShowScore(short score) { gotoXY(TAB, 5); @@ -312,12 +327,10 @@ Curses_ShowStage(void) ClearEoln(); } - /**************************************** * End of trivial output routines. ****************************************/ - void Curses_Initialize(void) { @@ -344,7 +357,6 @@ Curses_ExitShogi(void) } - void Curses_Die(int sig) { @@ -364,7 +376,6 @@ Curses_Die(int sig) } - void Curses_TerminateSearch(int sig) { @@ -381,7 +392,6 @@ Curses_TerminateSearch(int sig) } - void Curses_help(void) { @@ -580,7 +590,6 @@ Curses_EditBoard(void) } - static void UpdateCatched() { @@ -632,7 +641,6 @@ UpdateCatched() } - void Curses_SearchStartStuff(short side) { @@ -649,7 +657,6 @@ Curses_SearchStartStuff(short side) } - void Curses_OutputMove(void) { @@ -715,8 +722,7 @@ Curses_OutputMove(void) } - -void +static void UpdateClocks(void) { short m, s; @@ -754,8 +760,7 @@ UpdateClocks(void) } - -void +static void DrawPiece(short sq) { char y; @@ -793,12 +798,9 @@ DrawPiece(short sq) } - - /* * Curses_ShowPostnValue(): must have called ExaminePosition() first */ - void Curses_ShowPostnValue(short sq) { @@ -824,7 +826,6 @@ Curses_ShowPostnValue(short sq) } - void Curses_ShowPostnValues(void) { @@ -845,7 +846,6 @@ Curses_ShowPostnValues(void) } - void Curses_UpdateDisplay(short f, short t, short redraw, short isspec) { @@ -957,9 +957,6 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec) } -extern char *InPtr; - - void Curses_ChangeAlphaWindow(void) { @@ -970,7 +967,6 @@ Curses_ChangeAlphaWindow(void) } - void Curses_ChangeBetaWindow(void) { @@ -981,7 +977,6 @@ Curses_ChangeBetaWindow(void) } - void Curses_GiveHint(void) { @@ -1001,7 +996,6 @@ Curses_GiveHint(void) } - void Curses_ChangeSearchDepth(void) { @@ -1029,7 +1023,6 @@ Curses_SetContempt(void) } - void Curses_ChangeXwindow(void) { @@ -1038,7 +1031,6 @@ Curses_ChangeXwindow(void) } - void Curses_SelectLevel(char *sx) { @@ -1149,7 +1141,6 @@ Curses_SelectLevel(char *sx) } - void Curses_DoDebug(void) { @@ -1197,7 +1188,6 @@ Curses_DoDebug(void) } - void Curses_DoTable(short table[NO_SQUARES]) { @@ -1212,4 +1202,95 @@ 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) +{ + long current_time; + int i; + int nchar; +#ifdef HAVE_GETTIMEOFDAY + struct timeval tv; +#endif + + if ((i = ioctl((int) 0, FIONREAD, &nchar))) + { + perror("FIONREAD"); + fprintf(stderr, + "You probably have a non-ANSI ; " + "see README. %d %d %x\n", + i, errno, FIONREAD); + exit(1); + } + + if (nchar) + { + if (!flag.timeout) + flag.back = true; + + 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; + + time0 = current_time; + } + + if (!NOT_CURSES) + { +#ifdef QUIETBACKGROUND + if (!background) +#endif + UpdateClocks(); + } + } +} + +void +Curses_SetupBoard(void) +{ + Curses_ShowMessage("'setup' command is not supported in Cursesmode"); +}