/************************* UCI2WB by H.G.Muller ****************************/\r
\r
-#define VERSION "1.7"\r
+#define VERSION "1.8"\r
\r
#include <stdio.h>\r
#include <stdlib.h>\r
if(sscanf(line, "id name %[^\n]", name) == 1) printf("feature myname=\"%s (U%cI2WB)\"\n", name, sc-32);\r
}\r
else if(!strcmp(command, "readyok")) { pause = 0; Sync(WAKEUP); } // resume processing of GUI commands\r
- else if(sscanf(command, "u%ciok", &c)==1 && c==sc) printf("feature smp=1 memory=%d done=1\n", hasHash); // done with options\r
+ else if(sscanf(command, "u%ciok", &c)==1 && c==sc) printf("feature smp=1 memory=%d done=1\n", hasHash), Sync(WAKEUP); // done with options\r
}\r
}\r
\r
void\r
GUI2Engine()\r
{\r
- char line[256], command[256], *p, *q;\r
+ char line[256], command[256], *p, *q, *r;\r
\r
while(1) {\r
int i, x;\r
if(!variants) variants = sc=='s' ? "shogi,5x5+5_shogi" : VARIANTS;\r
printf("feature variants=\"%s\" setboard=1 usermove=1 debug=1 ping=1 reuse=0 done=0\n", variants);\r
printf("feature option=\"UCI2WB debug output -check %d\"\n", debug);\r
- fprintf(toE, "u%ci\n", sc); // this prompts UCI engine for options\r
+ fprintf(toE, "u%ci\n", sc); fflush(toE); // this prompts UCI engine for options\r
+ Sync(PAUSE); // wait for uciok\r
}\r
else if(!strcmp(command, "setboard")) {\r
if(strstr(line+9, " b ")) stm = BLACK;\r
- if(sc == 's' && (p = strchr(line+9, '['))) { char c;\r
- *p++ = ' '; q = strchr(p, ']'); c = 'w' + 'b' - q[2]; strcpy(q+2, " 1\n"); while(*--q != ' ') q[2] = *q; *p = c; p[1] = ' '; \r
- }\r
- sprintf(iniPos, "%s%sfen %s", iniPos[0]=='p' ? "position " : "", sc=='s' ? "s" : "", line+9);\r
+ if(p = strchr(line+9, '[')) { char c;\r
+ *p++ = 0; q = strchr(p, ']'); *q = 0; r = q + 4; \r
+ if(sc == 's') q[2] = 'w' + 'b' - q[2], strcpy(r=q+3, " 1\n"); // Shogi: reverse color\r
+ else r = strchr(strchr(q+4, ' ') + 1, ' '); // skip to second space (after e.p. square)\r
+ *r = 0; sprintf(command, "%s%s %s %s", line+9, q+1, p, r+1);\r
+ } else strcpy(command, line+9);\r
+ sprintf(iniPos, "%s%sfen %s", iniPos[0]=='p' ? "position " : "", sc=='s' ? "s" : "", command);\r
iniPos[strlen(iniPos)-1] = 0;\r
}\r
else if(!strcmp(command, "variant")) {\r