Change ElapsedTime to a normal display function.
[gnushogi.git] / gnushogi / search.c
index e21ce0e..1491057 100644 (file)
@@ -2,11 +2,14 @@
  * FILE: search.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
@@ -27,6 +30,8 @@
  */
 
 #include "gnushogi.h"
+#include <poll.h>
+#include <unistd.h>
 
 #if !defined OLDTIME && defined HAVE_GETTIMEOFDAY
 double pow(double x, double y);
@@ -173,6 +178,7 @@ SelectMove(short side, SelectMove_mode iop)
     }
     else
     {
+        background = false; /* [HGM] with ponder on we did not switch back to foreground mode??? */
         player = side;
         SetResponseTime(side);
     }
@@ -526,6 +532,8 @@ search(short side,
     short best = -(SCORE_LIMIT + 3000);
     short bestwidth = 0;
     short mustcut;
+    static struct pollfd pollfds[1] = { /* [0] = */ { /* .fd = */ STDIN_FILENO,
+                                                      /* .events = */ POLLIN } };
 
 #ifdef NULLMOVE
     short PVsave;
@@ -543,6 +551,19 @@ search(short side,
         {
             ElapsedTime(COMPUTE_MODE);
 
+            if(background) {
+                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;
+                }
+            }
+
             if (flag.back)
             {
                 flag.back = false;