Fix build of --with-curses mode.
[gnushogi.git] / gnushogi / cursesdsp.c
index e15a394..412bdc0 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;
@@ -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,18 +97,18 @@ Curses_ClearScreen(void)
 }
 
 
-void
-ClearMessage(void)
+static void
+gotoXY(short x, short y)
 {
-    gotoXY(TAB, 6);
-    ClearEoln();
+    move(y - 1, x - 1);
 }
 
 
-void
-gotoXY(short x, short y)
+static void
+ClearMessage(void)
 {
-    move(y - 1, x - 1);
+    gotoXY(TAB, 6);
+    ClearEoln();
 }
 
 
@@ -214,7 +229,7 @@ Curses_ShowPatternCount(short side, short n)
 }
 
 
-void
+static void
 ShowPlayers(void)
 {
     gotoXY(5, ((flag.reverse) ? (5 + 2*NO_ROWS) : 2));
@@ -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,93 @@ 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;
+        }
+
+#ifdef QUIETBACKGROUND
+        if (!background)
+#endif
+            UpdateClocks();
+    }
+}
+
+void
+Curses_SetupBoard(void)
+{
+    Curses_ShowMessage("'setup' command is not supported in Cursesmode");
+}