Let edit command switch to force mode
[fairymax.git] / fairymax.c
index 36bda21..3a89dd5 100644 (file)
@@ -366,8 +366,10 @@ InitEngine()
 \r
 InitGame()\r
 {\r
- int i,j;\r
+ int i,j,k=0;\r
 \r
+ Side = WHITE; Q=0; O=S;\r
+ Fifty = 0; R = 0;\r
  for(i=0;i<16*BH;i++)b[i]=0;\r
  for(i=0;i<32;i++)pl[i]=0;\r
  K=BW;W(K--)\r
@@ -377,10 +379,13 @@ InitGame()
   if(w[oo[K]] == -1)pl[oo[K]]=1;\r
   L=8;W(L--)b[16*L+K+257]=(K-BW/2)*(K-BW/2)+(L-3.5)*(L-3.5); /* center-pts table   */\r
  }                                                   /*(in unused half b[])*/\r
- Side = WHITE; Q=0; O=S;\r
- Fifty = 0; R = 0;\r
- for(i=0; i<BW; i++) if(i!=3) R += (w[oo[i]]/FAC) + (w[oo[i+16]]/FAC);\r
- UnderProm = -1; pl[WHITE] = pl[BLACK] = 2*BW;\r
+ for(i=0; i<BW; i++) {\r
+  R += abs(w[oo[i]])/FAC + abs(w[oo[i+16]])/FAC;\r
+  Q += abs(w[oo[i]]) - abs(w[oo[i+16]]) + w[1] - w[2];\r
+  if(w[oo[i]] < 0) k = w[oo[i]];\r
+ }\r
+ R -= 2*(-k/FAC);\r
+ UnderProm = -1; pl[WHITE] = pl[BLACK] = 2*BW; \r
  pm = !pl[BLACK+7] && pl[BLACK+9] && pl[WHITE+7] ? 2 : 0; // Unlike white, black has no 'Q', so promote to 9, which he does have.\r
 }\r
 \r
@@ -435,7 +440,7 @@ void PrintOptions()
                                          \r
 int LoadGame(char *name)\r
 {\r
-        int i, j, count=0; char c, buf[80];\r
+        int i, j, ptc, count=0; char c, buf[80], pieceToChar[80];\r
         static int currentVariant;\r
         FILE *f;\r
 \r
@@ -450,7 +455,7 @@ int LoadGame(char *name)
         if(name != NULL)\r
         {  /* search for game name in definition file */\r
            if(!strcmp(name, "fairy")) name = selectedFairy;\r
-           while(fscanf(f, "Game: %s", buf)!=1 || strcmp(name, buf) ) {\r
+           while((ptc=fscanf(f, "Game: %s # %s", buf, pieceToChar))==0 || strcmp(name, buf) ) {\r
                while((c = fgetc(f)) != EOF && c != '\n');\r
                count++;\r
                if(c == EOF) {\r
@@ -488,6 +493,14 @@ int LoadGame(char *name)
         fclose(f);\r
        sh = w[7] < 250 ? 3 : 0;\r
        makruk = w[7]==181 ? 64 : 0; // w[7] is used as kludge to enable makruk promotions\r
+        if(name == selectedFairy) {\r
+            printf(ptc == 1 ? "setup " : "setup (%s) ", pieceToChar); // setup board in GUI\r
+            for(i=0; i<BW; i++) printf("%c", piecename[oo[i+16]]+'`'); printf("/");\r
+            for(i=0; i<BW; i++) printf("%c", piecename[2]+'`'); printf("/");\r
+            for(i=2; i<BH-2; i++) printf("%d/", BW);\r
+            for(i=0; i<BW; i++) printf("%c", piecename[1]+'@'); printf("/");\r
+            for(i=0; i<BW; i++) printf("%c", piecename[oo[i]]+'@'); printf(" w KQkq - 0 1\n");\r
+        }\r
 }\r
 \r
 int main(int argc, char **argv)\r
@@ -825,6 +838,7 @@ int main(int argc, char **argv)
                        setupPosition[128] = Side;\r
                        setupPosition[129] = R;\r
                        for(i=0; i<32; i++) setupPosition[i+130] = pl[i];\r
+                       Computer = EMPTY; // after edit: force mode!\r
                        continue;\r
                }\r
                 /* command not recognized, assume input move */\r