Fix regression with stdarg dspwrappers.
[gnushogi.git] / gnushogi / search.c
index 5be8209..c1d8fd9 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
  */
 
 #include "gnushogi.h"
-
-#if !defined OLDTIME && defined HAVE_GETTIMEOFDAY
-double pow(double x, double y);
-#endif
+#include <poll.h>
+#include <unistd.h>
 
 short background = 0;
 static short DepthBeyond;
@@ -173,6 +174,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 +528,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 +547,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;
@@ -881,7 +898,7 @@ search(short side,
 
             MakeMove(side, node, &tempb, &tempc, &tempsf,
                      &tempst, &INCscore);
-            CptrFlag[ply] = (node->flags & capture);
+            CptrFlag[ply] = ((node->flags & capture) != 0);
             TesujiFlag[ply] = (node->flags & tesuji)
                 && (node->flags & dropmask);
             Tscore[ply] = node->score;