Finish the --without-curses support.
[gnushogi.git] / gnushogi / cursesdsp.c
index d6c7cef..47c34d2 100644 (file)
 #include "gnushogi.h"
 #include "cursesdsp.h"
 
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if HAVE_SYS_FILIO_H
+/* Definition of FIONREAD */
+#include <sys/filio.h>
+#endif
+
+#if HAVE_ERRNO_H
+/* Definition of errno(). */
+#include <errno.h>
+#endif
+
 #define FLUSH_SCANW fflush(stdout), scanw
 
 int mycnt1, mycnt2;
@@ -90,7 +104,6 @@ ClearMessage(void)
 }
 
 
-
 void
 gotoXY(short x, short y)
 {
@@ -313,12 +326,10 @@ Curses_ShowStage(void)
     ClearEoln();
 }
 
-
 /****************************************
  * End of trivial output routines.
  ****************************************/
 
-
 void
 Curses_Initialize(void)
 {
@@ -345,7 +356,6 @@ Curses_ExitShogi(void)
 }
 
 
-
 void
 Curses_Die(int sig)
 {
@@ -365,7 +375,6 @@ Curses_Die(int sig)
 }
 
 
-
 void
 Curses_TerminateSearch(int sig)
 {
@@ -382,7 +391,6 @@ Curses_TerminateSearch(int sig)
 }
 
 
-
 void
 Curses_help(void)
 {
@@ -581,7 +589,6 @@ Curses_EditBoard(void)
 }
 
 
-
 static void 
 UpdateCatched()
 {
@@ -633,7 +640,6 @@ UpdateCatched()
 }
 
 
-
 void
 Curses_SearchStartStuff(short side)
 {
@@ -650,7 +656,6 @@ Curses_SearchStartStuff(short side)
 }
 
 
-
 void
 Curses_OutputMove(void)
 {
@@ -716,7 +721,6 @@ Curses_OutputMove(void)
 }
 
 
-
 void
 UpdateClocks(void)
 {
@@ -755,7 +759,6 @@ UpdateClocks(void)
 }
 
 
-
 void
 DrawPiece(short sq)
 {
@@ -794,12 +797,9 @@ DrawPiece(short sq)
 }
 
 
-
-
 /*
  * Curses_ShowPostnValue(): must have called ExaminePosition() first
  */
-
 void
 Curses_ShowPostnValue(short sq)
 {
@@ -825,7 +825,6 @@ Curses_ShowPostnValue(short sq)
 }
 
 
-
 void
 Curses_ShowPostnValues(void)
 {
@@ -846,7 +845,6 @@ Curses_ShowPostnValues(void)
 }
 
 
-
 void
 Curses_UpdateDisplay(short f, short t, short redraw, short isspec)
 {
@@ -958,9 +956,6 @@ Curses_UpdateDisplay(short f, short t, short redraw, short isspec)
 }
 
 
-extern char *InPtr;
-
-
 void
 Curses_ChangeAlphaWindow(void)
 {
@@ -971,7 +966,6 @@ Curses_ChangeAlphaWindow(void)
 }
 
 
-
 void
 Curses_ChangeBetaWindow(void)
 {
@@ -982,7 +976,6 @@ Curses_ChangeBetaWindow(void)
 }
 
 
-
 void
 Curses_GiveHint(void)
 {
@@ -1002,7 +995,6 @@ Curses_GiveHint(void)
 }
 
 
-
 void
 Curses_ChangeSearchDepth(void)
 {
@@ -1030,7 +1022,6 @@ Curses_SetContempt(void)
 }
 
 
-
 void
 Curses_ChangeXwindow(void)
 {
@@ -1039,7 +1030,6 @@ Curses_ChangeXwindow(void)
 }
 
 
-
 void
 Curses_SelectLevel(char *sx)
 {
@@ -1150,7 +1140,6 @@ Curses_SelectLevel(char *sx)
 }
 
 
-
 void
 Curses_DoDebug(void)
 {
@@ -1198,7 +1187,6 @@ Curses_DoDebug(void)
 }
 
 
-
 void
 Curses_DoTable(short table[NO_SQUARES])
 {
@@ -1213,4 +1201,89 @@ 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 <ioctl.h>; "
+                "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();
+        }
+    }
+}