\r
char move[2000][10], checkOptions[8192], iniPos[256], hashOpt[20], pause, pondering, suspended, ponder, post, hasHash, c, sc='c', *suffix, *variants;\r
int mps, tc, inc, sTime, depth, myTime, hisTime, stm, computer = NONE, memory, oldMem=0, cores, moveNr, lastDepth, lastScore, startTime, debug;\r
-int statDepth, statScore, statNodes, statTime, currNr, size, collect, nr, sm, inex, on[500]; char currMove[20], moveMap[500][10]; // for analyze mode\r
+int statDepth, statScore, statNodes, statTime, currNr, size, collect, nr, sm, inex, on[500];\r
+char currMove[20], moveMap[500][10], /* for analyze mode */ canPonder[20];\r
\r
-FILE *toE, *fromE;\r
+FILE *toE, *fromE, *fromF;\r
int pid;\r
\r
#ifdef WIN32\r
}\r
}\r
\r
+int\r
+GetChar()\r
+{\r
+ int c;\r
+ if(fromF) {\r
+ if((c = fgetc(fromF)) != EOF) return c;\r
+ fclose(fromF); fromF = 0; printf("# end fake\n");\r
+ }\r
+ return fgetc(fromE);\r
+}\r
+\r
void *\r
Engine2GUI()\r
{\r
char line[1024], command[256];\r
\r
+ if(fromF = fopen("DefectiveEngineOptions.ini", "r")) printf("# fake engine input\n");\r
while(1) {\r
int i=0, x; char *p, dummy;\r
\r
fflush(stdout); fflush(toE);\r
- while((line[i] = x = fgetc(fromE)) != EOF && line[i] != '\n') i++;\r
+ while((line[i] = x = GetChar()) != EOF && line[i] != '\n') i++;\r
line[++i] = 0;\r
if(x == EOF) exit(0);\r
DPRINT("# engine said: %s", line), fflush(stdout);\r
- sscanf(line, "%s", command);\r
+ if(sscanf(line, "%s", command) != 1) continue;\r
if(!strcmp(command, "bestmove")) {\r
if(pause) { pondering = pause = 0; Sync(WAKEUP); continue; } // bestmove was reply to ponder miss or analysis result; ignore.\r
// move was a move to be played\r
if(p = strstr(line+6, " max ")) sscanf(p+1, "max %d", &max), *p = '\n';\r
if(p = strstr(line+6, " default ")) sscanf(p+1, "default %[^\n]*", val), *p = '\n';\r
if(p = strstr(line+6, " name ")) sscanf(p+1, "name %[^\n]*", name);\r
+ if(!strcmp(name, "Ponder") || !strcmp(name, "USI_Ponder")) { strcpy(canPonder, name); continue; }\r
if(!strcmp(name, "Hash") || !strcmp(name, "USI_Hash")) {\r
memory = oldMem = atoi(val); hasHash = 1; \r
strcpy(hashOpt, name);\r
else if(!strcmp(command, "otim")) sscanf(line+4, "%d", &hisTime), hisTime *= 10;\r
else if(!strcmp(command, "post")) post = 1;\r
else if(!strcmp(command, "nopost")) post = 0;\r
- else if(!strcmp(command, "easy")) ponder = 0, StopPonder(pondering);\r
- else if(!strcmp(command, "hard")) ponder = 1, StartPonder();\r
+ else if(!strcmp(command, "easy") && !!*canPonder) ponder = 0, StopPonder(pondering), fprintf(toE, "setoption name %s value false\n", canPonder);\r
+ else if(!strcmp(command, "hard") && !!*canPonder) ponder = 1, fprintf(toE, "setoption name %s value true\n", canPonder), StartPonder();\r
else if(!strcmp(command, "ping")) pause = 1, fprintf(toE, "isready\n"), fflush(toE), Sync(PAUSE), printf("pong %s", line+5);\r
else if(!strcmp(command, "memory")) sscanf(line, "memory %d", &memory);\r
else if(!strcmp(command, "cores")) sscanf(line, "cores %d", &cores);\r