X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Frawdsp.c;h=e71877d4bbb903ee16e38ed234dfdc234c09faa7;hb=d23b84fee73518dfb6b281d1eaedbe4fc4aa34b2;hp=0aeeb35753a41a9622e14d1c7527794722b0c6d8;hpb=1ea53ec86415316844abc71728f155bcb194bf7f;p=gnushogi.git diff --git a/gnushogi/rawdsp.c b/gnushogi/rawdsp.c index 0aeeb35..e71877d 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,9 +31,12 @@ #include #include +#include #include #include #include +#include +#include #include "gnushogi.h" #include "rawdsp.h" @@ -56,9 +62,8 @@ Raw_ClearScreen(void) } -/* FIXME: change to ShowPrompt? */ void -PromptForMove(void) +Raw_ShowPrompt(void) { if (!barebones && !XSHOGI) { @@ -120,6 +125,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 +211,6 @@ Raw_ShowStage(void) * End of trivial output routines. ****************************************/ - void Raw_Initialize(void) { @@ -192,7 +238,6 @@ Raw_Initialize(void) } - void Raw_ExitShogi(void) { @@ -201,6 +246,8 @@ Raw_ExitShogi(void) if (!nolist) ListGame(); + + exit(0); } @@ -217,7 +264,6 @@ Raw_Die(int sig) } - void Raw_TerminateSearch(int sig) { @@ -232,7 +278,6 @@ Raw_TerminateSearch(int sig) } - void Raw_help(void) { @@ -310,17 +355,13 @@ Raw_help(void) (TCflag) ? CP[93] : CP[92], TimeControl.moves[black], TimeControl.clock[black] / 100, TCadd/100, MaxSearchDepth); - - signal(SIGUSR1, 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) { @@ -378,8 +419,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)) @@ -421,16 +462,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; @@ -483,8 +521,6 @@ SetupBoard(void) void Raw_SearchStartStuff(short side) { - signal(SIGUSR1, Raw_TerminateSearch); - if (flag.post) { printf(CP[123], @@ -494,7 +530,6 @@ Raw_SearchStartStuff(short side) } - void Raw_OutputMove(void) { @@ -594,6 +629,12 @@ Raw_OutputMove(void) void +Raw_UpdateClocks(void) +{ +} + + +void Raw_UpdateDisplay(short f, short t, short redraw, short isspec) { @@ -653,7 +694,6 @@ Raw_UpdateDisplay(short f, short t, short redraw, short isspec) } - void Raw_ChangeAlphaWindow(void) { @@ -664,7 +704,6 @@ Raw_ChangeAlphaWindow(void) } - void Raw_ChangeBetaWindow(void) { @@ -675,7 +714,6 @@ Raw_ChangeBetaWindow(void) } - void Raw_GiveHint(void) { @@ -689,7 +727,6 @@ Raw_GiveHint(void) } - void Raw_SelectLevel(char *sx) { @@ -772,8 +809,6 @@ Raw_SelectLevel(char *sx) } - - void Raw_ChangeSearchDepth(void) { @@ -783,8 +818,6 @@ Raw_ChangeSearchDepth(void) } - - void Raw_ChangeHashDepth(void) { @@ -795,7 +828,6 @@ Raw_ChangeHashDepth(void) } - void Raw_SetContempt(void) { @@ -804,7 +836,6 @@ Raw_SetContempt(void) } - void Raw_ChangeXwindow(void) { @@ -817,7 +848,6 @@ Raw_ChangeXwindow(void) * Raw_ShowPostnValue(short sq) * must have called ExaminePosition() first */ - void Raw_ShowPostnValue(short sq) { @@ -839,7 +869,6 @@ Raw_ShowPostnValue(short sq) } - void Raw_DoDebug(void) { @@ -918,7 +947,6 @@ Raw_DoDebug(void) } - void Raw_DoTable(short table[NO_SQUARES]) { @@ -938,7 +966,6 @@ Raw_DoTable(short table[NO_SQUARES]) } - void Raw_ShowPostnValues(void) { @@ -963,3 +990,86 @@ Raw_ShowPostnValues(void) printf("\nhung black %d hung white %d\n", hung[black], hung[white]); } + +void +Raw_PollForInput(void) +{ + static struct pollfd pollfds[1] = { /* [0] = */ { /* .fd = */ STDIN_FILENO, + /* .events = */ POLLIN } }; + int cnt = poll(pollfds, sizeof(pollfds)/sizeof(pollfds[0]), 0); + if (cnt < 0) { + perror("polling standard input"); + ExitShogi(); + } + if (cnt) { /* if anything to read, or error occured */ + if (!flag.timeout) + flag.back = true; /* previous: flag.timeout = true; */ + flag.bothsides = false; + } +} + + +/* + * 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; +#endif + + PollForInput(); + +#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; + } + +#ifdef QUIETBACKGROUND + if (!background) +#endif + UpdateClocks(); + } +}