Send parent variant with setup command
authorH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 26 Dec 2013 20:54:54 +0000 (21:54 +0100)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Thu, 26 Dec 2013 22:24:39 +0000 (23:24 +0100)
Implement WinBoard's extended setup command, which also specifies
board size and parent variant. The parent variant can be specified
in the fmax.ini file behind the pieceToCharTable. Ai-wok and Cambodian
now have new definitions making use of this mechanism. To not confuse
them with the old definitions, (which remained for backward compatibility),
the later are now capitalized.

data/fmax.ini
fairymax.c

index 39e4d14..a903175 100644 (file)
@@ -343,7 +343,7 @@ n:450 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7
 R:630 1,3 16,3 -1,3 -16,3\r
 \r
 // Cambodian Chess. Like Makruk, but with extra initial King and Met moves\r
-Game: cambodian\r
+Game: Cambodian\r
 8x8=3\r
 13 12 8 3 7 8 12 13\r
 13 12 9 7 4 9 12 13\r
@@ -356,13 +356,52 @@ q:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4
 m:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4\r
 s:300 15,7 17,7 -15,7 -17,7 -16,7\r
 s:300 15,7 17,7 -15,7 -17,7 16,7\r
+\r
 b:300 15,7 17,7 -15,7 -17,7 -16,7\r
 b:300 15,7 17,7 -15,7 -17,7 16,7\r
+\r
 n:450 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
 R:630 1,3 16,3 -1,3 -16,3\r
 \r
+\r
 // Thai Chess variant with Ai-Wok (RNF).\r
-Game: ai-wok\r
+Game: Ai-wok\r
+8x8=3\r
+6 5 3 8 7 3 5 6\r
+6 5 4 7 8 4 5 6\r
+p:100 -16,6 -15,5 -17,5 \r
+p:100 16,6 15,5 17,5\r
+s:300 15,7 17,7 -15,7 -17,7 -16,7\r
+s:300 15,7 17,7 -15,7 -17,7 16,7\r
+n:450 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
+R:630 1,3 16,3 -1,3 -16,3\r
+A:1350 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7 1,3 16,3 -1,3 -16,3 15,7 17,7 -15,7 -17,7\r
+k:-1  1,7 16,7 15,7 17,7 -1,7 -16,7 -15,7 -17,7\r
+\r
+// Cambodian Chess using WinBoard's new engine-defined variant mechanism\r
+Game: cambodian # PN.R.M....SKpn.r.m....sk # makruk\r
+8x8=3\r
+13 12 8 3 7 8 12 13\r
+13 12 9 7 4 9 12 13\r
+p:100 -16,6 -15,5 -17,5 \r
+p:100 16,6 15,5 17,5\r
+k:-1  1,7 16,7 15,7 17,7 -1,7 -16,7 -15,7 -17,7 -16,10F4 -16,1F0F4 -1,100F4 1,FFFF00F4\r
+k:-1  1,7 16,7 15,7 17,7 -1,7 -16,7 -15,7 -17,7 16,10F4 16,1F0F4 1,100F4 -1,FFFF00F4\r
+f:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4\r
+q:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4\r
+m:181 15,7 17,7 -15,7 -17,7 16,F4 -16,F4\r
+s:300 15,7 17,7 -15,7 -17,7 -16,7\r
+s:300 15,7 17,7 -15,7 -17,7 16,7\r
+\r
+b:300 15,7 17,7 -15,7 -17,7 -16,7\r
+b:300 15,7 17,7 -15,7 -17,7 16,7\r
+\r
+n:450 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
+R:630 1,3 16,3 -1,3 -16,3\r
+\r
+\r
+// Ai-Wok using WinBoard's new engine-defined variant mechanism\r
+Game: ai-wok # PN.R...A..SKpn.r...a..sk # makruk\r
 8x8=3\r
 6 5 3 8 7 3 5 6\r
 6 5 4 7 8 4 5 6\r
@@ -372,7 +411,7 @@ s:300 15,7 17,7 -15,7 -17,7 -16,7
 s:300 15,7 17,7 -15,7 -17,7 16,7\r
 n:450 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7\r
 R:630 1,3 16,3 -1,3 -16,3\r
-M:1350 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7 1,3 16,3 -1,3 -16,3 15,7 17,7 -15,7 -17,7\r
+A:1350 14,7 31,7 33,7 18,7 -14,7 -31,7 -33,7 -18,7 1,3 16,3 -1,3 -16,3 15,7 17,7 -15,7 -17,7\r
 k:-1  1,7 16,7 15,7 17,7 -1,7 -16,7 -15,7 -17,7\r
 \r
 // Medieval intermediate between Shatranj and FIDE Chess\r
index 5341cd2..f80bfe3 100644 (file)
@@ -342,6 +342,7 @@ int PrintResult(int s)
             }\r
           differs: ;\r
         }\r
+\r
         K=I;\r
         cnt = D(s,-I,I,Q,O,LL|4*S,3);\r
 #ifdef SHATRANJ\r
@@ -438,7 +439,7 @@ void PrintVariants(int combo)
                while((c = fgetc(f)) != EOF && c != '\n');\r
            if(c == EOF) break;\r
            total++;\r
-           if(combo == (strstr(buf, "fairy/") != buf)) continue;\r
+           if(*buf < 'a' || combo == (strstr(buf, "fairy/") != buf)) continue;\r
            if(combo && count == 0) strcpy(selectedFairy, buf);\r
            if(count++) printf(combo ? " /// " : ",");\r
            printf("%s", combo ? buf+6 : buf);\r
@@ -455,7 +456,7 @@ void PrintOptions()
        printf("feature option=\"Ini File -file %s\"\n", inifile);\r
        printf("feature option=\"Multi-PV Margin -spin %d 0 1000\"\n", margin);\r
        printf("feature option=\"Variant fairy selects -combo "); PrintVariants(1); printf("\"\n");\r
-       printf("feature option=\"Makruk rules -combo makruk /// cambodian /// ai-wok\"\n");\r
+       printf("feature option=\"Makruk rules -combo makruk /// Cambodian /// Ai-wok\"\n");\r
        printf("feature option=\"Dummy Slider Example -slider 20 0 100\"\n");\r
        printf("feature option=\"Dummy String Example -string happy birthday!\"\n");\r
        printf("feature option=\"Dummy Path Example -path .\"\n");\r
@@ -465,7 +466,7 @@ void PrintOptions()
                                          \r
 void LoadGame(char *name)\r
 {\r
-        int i, j, ptc, count=0; char c, buf[80], pieceToChar[80];\r
+        int i, j, ptc, count=0; char c, buf[80], pieceToChar[80], parent[80];\r
         static int currentVariant;\r
         FILE *f;\r
 \r
@@ -483,7 +484,7 @@ void LoadGame(char *name)
            if(!strcmp(name, "makruk")) name = Cambodian; else\r
            if(!strcmp(name, "fairy")) name = selectedFairy;\r
            gating = !strcmp(name, "seirawan");\r
-           while((ptc=fscanf(f, "Game: %s # %s", buf, pieceToChar))==0 || strcmp(name, buf) ) {\r
+           while((ptc=fscanf(f, "Game: %s # %s # %s", buf, pieceToChar, parent))==0 || strcmp(name, buf) ) {\r
                while((c = fgetc(f)) != EOF && c != '\n');\r
                count++;\r
                if(c == EOF) {\r
@@ -522,8 +523,9 @@ void LoadGame(char *name)
 \r
         fclose(f);\r
        sh = w[7] < 250 ? 3 : 0;\r
-        if(name == selectedFairy || makruk) {\r
-            printf(ptc == 1 ? "setup " : "setup (%s) ", pieceToChar); // setup board in GUI\r
+        if(ptc > 1) { // setup board in GUI, by sending it pieceToCharTable and FEN\r
+            if(ptc == 2) printf("setup (%s) ", pieceToChar);\r
+            else printf("setup (%s) %dx%d+0_%s ", pieceToChar, BW, BH, parent);\r
             for(i=0; i<BW; i++) printf("%c", piecename[oo[i+16]]+'`'); printf("/");\r
             if(makruk) printf("8/");\r
             for(i=0; i<BW; i++) printf("%c", piecename[2]+'`'); printf("/");\r