#include <sys/param.h>
#include <sys/types.h>
#include <sys/file.h>
+#include <poll.h>
+#include <unistd.h>
#include "gnushogi.h"
#include "rawdsp.h"
}
-/* FIXME: change to ShowPrompt? */
void
-PromptForMove(void)
+Raw_ShowPrompt(void)
{
if (!barebones && !XSHOGI)
{
printf("%s\n", s);
}
+
void
-Raw_AlwaysShowMessage(const char *format, ...)
+Raw_AlwaysShowMessage(const char *format, va_list ap)
{
- va_list ap;
- va_start(ap, format);
vprintf(format, ap);
- va_end(ap);
printf("\n");
}
+
void
-Raw_Printf(const char *format, ...)
+Raw_Printf(const char *format, va_list ap)
{
- va_list ap;
- va_start(ap, format);
vprintf(format, ap);
- va_end(ap);
}
+
void
Raw_doRequestInputString(const char* fmt, char* buffer)
{
* End of trivial output routines.
****************************************/
-
void
Raw_Initialize(void)
{
}
-
void
Raw_ExitShogi(void)
{
}
-
void
Raw_TerminateSearch(int sig)
{
}
-
void
Raw_help(void)
{
}
-
/*
* 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)
{
}
-
-
/*
* 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;
}
-
void
Raw_OutputMove(void)
{
void
+Raw_UpdateClocks(void)
+{
+}
+
+
+void
Raw_UpdateDisplay(short f, short t, short redraw, short isspec)
{
}
-
void
Raw_ChangeAlphaWindow(void)
{
}
-
void
Raw_ChangeBetaWindow(void)
{
}
-
void
Raw_GiveHint(void)
{
}
-
void
Raw_SelectLevel(char *sx)
{
}
-
-
void
Raw_ChangeSearchDepth(void)
{
}
-
-
void
Raw_ChangeHashDepth(void)
{
}
-
void
Raw_SetContempt(void)
{
}
-
void
Raw_ChangeXwindow(void)
{
* Raw_ShowPostnValue(short sq)
* must have called ExaminePosition() first
*/
-
void
Raw_ShowPostnValue(short sq)
{
}
-
void
Raw_DoDebug(void)
{
}
-
void
Raw_DoTable(short table[NO_SQUARES])
{
}
-
void
Raw_ShowPostnValues(void)
{
mtl[opponent], pscore[opponent], GameType[opponent]);
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();
+ }
+}