\r
#ifdef WIN32 \r
# include <windows.h>\r
+ int InputWaiting()\r
+ { // checks for waiting input in pipe\r
+ static int pipe, init;\r
+ static HANDLE inp;\r
+ DWORD cnt;\r
+\r
+ if(!init) inp = GetStdHandle(STD_INPUT_HANDLE);\r
+ if(!PeekNamedPipe(inp, NULL, 0, NULL, &cnt, NULL)) return 1;\r
+ return cnt;\r
+ }\r
#else\r
# include <sys/time.h>\r
+# include <sys/ioctl.h>\r
+ int InputWaiting()\r
+ {\r
+ int cnt;\r
+ if(ioctl(0, FIONREAD, &cnt)) return 1;\r
+ return cnt;\r
+ }\r
int GetTickCount() // with thanks to Tord\r
{ struct timeval t;\r
gettimeofday(&t, NULL);\r
printf("\n");\r
fflush(stdout);\r
}\r
- if(GetTickCount() - startTime > tlim1) break; // do not start iteration we can (most likely) not finish\r
+ if(!(abortFlag & 1) && GetTickCount() - startTime > tlim1) break; // do not start iteration we can (most likely) not finish\r
}\r
replyDep = iterDep;\r
#ifdef HASH\r
void\r
PonderUntilInput (int stm)\r
{\r
+MapFromScratch(attacks);\r
+ repCnt = 0; abortFlag = -1;\r
+ Search(-INF-1, INF+1, rootEval, maxDepth, sup1, sup2);\r
}\r
\r
int TakeBack(int n)\r
\r
// extract the first word\r
sscanf(inBuf, "%s", command);\r
+printf("# in (mode = %d,%d): %s\n", root, abortFlag, command);\r
if(!strcmp(command, "otim")) { continue; } // do not start pondering after receiving time commands, as move will follow immediately\r
if(!strcmp(command, "time")) { sscanf(inBuf, "time %d", &timeLeft); continue; }\r
if(!strcmp(command, "put")) { ReadSquare(inBuf+4, &lastPut); continue; } // ditto\r
if(!strcmp(command, ".")) { inBuf[0] = 0; return; } // ignore for now\r
if(!strcmp(command, "lift")) { inBuf[0] = 0; Highlight(inBuf+5); return; } // treat here\r
+ abortFlag = 1;\r
return;\r
}\r
}\r
void\r
TerminationCheck()\r
{\r
+ if(abortFlag < 0) { // check for input\r
+ if(InputWaiting()) GetLine(0); // read & examine input command\r
+ } else { // check for time\r
if(GetTickCount() - startTime > tlim3) abortFlag = 2;\r
+ }\r
}\r
\r
main()\r
int i, score, curVarNr;\r
\r
Init(V_CHU); // Chu\r
+ listEnd = 1;\r
\r
while(1) { // infinite loop\r
\r
fflush(stdout); // make sure everything is printed before we do something that might take time\r
+ *inBuf = 0;\r
\r
if(listEnd == 0) ListMoves(); // always maintain a list of legal moves in root position\r
\r