X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fcursesdsp.c;h=cb2f458e58bfaf0c032837a619206325ed89beb8;hb=72ca13ff5cd85091cedb1940dc370b19a509f061;hp=e15a3940b0ef05136e06a7776a2659b85d5e5a1f;hpb=303e8deb5d11ae84a88acb76329f0ab75274101a;p=gnushogi.git diff --git a/gnushogi/cursesdsp.c b/gnushogi/cursesdsp.c index e15a394..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,7 +105,7 @@ ClearMessage(void) } -void +static void gotoXY(short x, short y) { move(y - 1, x - 1); @@ -214,7 +229,7 @@ Curses_ShowPatternCount(short side, short n) } -void +static void ShowPlayers(void) { gotoXY(5, ((flag.reverse) ? (5 + 2*NO_ROWS) : 2)); @@ -224,7 +239,7 @@ ShowPlayers(void) } -void +static void Curses_ShowPrompt(void) { Curses_ShowSidetoMove(); @@ -285,7 +300,7 @@ Curses_ShowResults(short score, unsigned short *bstline, char ch) } -void +static void ShowScore(short score) { gotoXY(TAB, 5); @@ -707,7 +722,7 @@ Curses_OutputMove(void) } -void +static void UpdateClocks(void) { short m, s; @@ -745,7 +760,7 @@ UpdateClocks(void) } -void +static void DrawPiece(short sq) { char y; @@ -1186,3 +1201,96 @@ 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"); +}