X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Fcursesdsp.c;h=cb2f458e58bfaf0c032837a619206325ed89beb8;hb=72ca13ff5cd85091cedb1940dc370b19a509f061;hp=dd6b10f15c3869fcbb4caea759a47b0be69777ed;hpb=1be442641b610fa1b6172a38d9acffe2d22797b6;p=gnushogi.git diff --git a/gnushogi/cursesdsp.c b/gnushogi/cursesdsp.c index dd6b10f..cb2f458 100644 --- a/gnushogi/cursesdsp.c +++ b/gnushogi/cursesdsp.c @@ -33,6 +33,7 @@ #include #include +#include #include #include @@ -42,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; @@ -59,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(); @@ -81,7 +97,7 @@ Curses_ClearScreen(void) } -void +static void ClearMessage(void) { gotoXY(TAB, 6); @@ -89,8 +105,7 @@ ClearMessage(void) } - -void +static void gotoXY(short x, short y) { move(y - 1, x - 1); @@ -150,6 +165,18 @@ Curses_ShowMessage(char *s) void +Curses_AlwaysShowMessage(const char *format, ...) +{ + static char buffer[60]; + va_list ap; + va_start(ap, format); + vsnprintf(buffer, sizeof(buffer), format, ap); + Curses_ShowMessage(buffer); + va_end(ap); +} + + +void Curses_Printf(const char *format, ...) { static char buffer[60]; @@ -162,14 +189,22 @@ Curses_Printf(const char *format, ...) void -Curses_RequestInputString(char* buffer) +Curses_doRequestInputString(const char* fmt, char* buffer) +{ + FLUSH_SCANW(fmt, buffer); +} + + +int +Curses_GetString(char* sx) { - FLUSH_SCANW("%s", buffer); + fflush(stdout); + return (getstr(sx) == ERR); } void -ShowNodeCnt(long NodeCnt) +Curses_ShowNodeCnt(long NodeCnt) { gotoXY(TAB, 22); /* printw(CP[90], NodeCnt, (et > 100) ? NodeCnt / (et / 100) : 0); */ @@ -194,7 +229,7 @@ Curses_ShowPatternCount(short side, short n) } -void +static void ShowPlayers(void) { gotoXY(5, ((flag.reverse) ? (5 + 2*NO_ROWS) : 2)); @@ -204,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(); @@ -264,7 +300,7 @@ Curses_ShowResults(short score, unsigned short *bstline, char ch) } -void +static void ShowScore(short score) { gotoXY(TAB, 5); @@ -291,12 +327,10 @@ Curses_ShowStage(void) ClearEoln(); } - /**************************************** * End of trivial output routines. ****************************************/ - void Curses_Initialize(void) { @@ -323,7 +357,6 @@ Curses_ExitShogi(void) } - void Curses_Die(int sig) { @@ -343,7 +376,6 @@ Curses_Die(int sig) } - void Curses_TerminateSearch(int sig) { @@ -360,7 +392,6 @@ Curses_TerminateSearch(int sig) } - void Curses_help(void) { @@ -559,7 +590,6 @@ Curses_EditBoard(void) } - static void UpdateCatched() { @@ -611,7 +641,6 @@ UpdateCatched() } - void Curses_SearchStartStuff(short side) { @@ -628,7 +657,6 @@ Curses_SearchStartStuff(short side) } - void Curses_OutputMove(void) { @@ -694,8 +722,7 @@ Curses_OutputMove(void) } - -void +static void UpdateClocks(void) { short m, s; @@ -733,8 +760,7 @@ UpdateClocks(void) } - -void +static void DrawPiece(short sq) { char y; @@ -772,12 +798,9 @@ DrawPiece(short sq) } - - /* * Curses_ShowPostnValue(): must have called ExaminePosition() first */ - void Curses_ShowPostnValue(short sq) { @@ -803,7 +826,6 @@ Curses_ShowPostnValue(short sq) } - void Curses_ShowPostnValues(void) { @@ -824,7 +846,6 @@ Curses_ShowPostnValues(void) } - void Curses_UpdateDisplay(short f, short t, short redraw, short isspec) { @@ -936,9 +957,6 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec) } -extern char *InPtr; - - void Curses_ChangeAlphaWindow(void) { @@ -949,7 +967,6 @@ Curses_ChangeAlphaWindow(void) } - void Curses_ChangeBetaWindow(void) { @@ -960,7 +977,6 @@ Curses_ChangeBetaWindow(void) } - void Curses_GiveHint(void) { @@ -980,7 +996,6 @@ Curses_GiveHint(void) } - void Curses_ChangeSearchDepth(void) { @@ -1008,7 +1023,6 @@ Curses_SetContempt(void) } - void Curses_ChangeXwindow(void) { @@ -1017,7 +1031,6 @@ Curses_ChangeXwindow(void) } - void Curses_SelectLevel(char *sx) { @@ -1128,7 +1141,6 @@ Curses_SelectLevel(char *sx) } - void Curses_DoDebug(void) { @@ -1176,7 +1188,6 @@ Curses_DoDebug(void) } - void Curses_DoTable(short table[NO_SQUARES]) { @@ -1191,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"); +}