cleaned up HTML in FAQ.html -- still need to work on content
[xboard.git] / backend.c
index 891d3e0..c34724e 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -749,6 +749,8 @@ InitBackEnd1()
     first.useFEN960 = FALSE; second.useFEN960 = FALSE;\r
     first.useOOCastle = TRUE; second.useOOCastle = TRUE;\r
     /* End of new features added by Tord. */\r
+    first.fenOverride  = appData.fenOverride1;\r
+    second.fenOverride = appData.fenOverride2;\r
 \r
     /* [HGM] time odds: set factor for each machine */\r
     first.timeOdds  = appData.firstTimeOdds;\r
@@ -4753,7 +4755,7 @@ SendBoard(cps, moveNum)
     char message[MSG_SIZ];\r
     \r
     if (cps->useSetboard) {\r
-      char* fen = PositionToFEN(moveNum, cps->useFEN960);\r
+      char* fen = PositionToFEN(moveNum, cps->fenOverride);\r
       sprintf(message, "setboard %s\n", fen);\r
       SendToProgram(message, cps);\r
       free(fen);\r
@@ -9484,7 +9486,7 @@ SaveGamePGN(f)
     PrintPGNTags(f, &gameInfo);\r
     \r
     if (backwardMostMove > 0 || startedFromSetupPosition) {\r
-        char *fen = PositionToFEN(backwardMostMove, 1);\r
+        char *fen = PositionToFEN(backwardMostMove, NULL);\r
         fprintf(f, "[FEN \"%s\"]\n[SetUp \"1\"]\n", fen);\r
        fprintf(f, "\n{--------------\n");\r
        PrintPosition(f, backwardMostMove);\r
@@ -9757,7 +9759,7 @@ SavePosition(f, dummy, dummy2)
        PrintPosition(f, currentMove);\r
        fprintf(f, "--------------]\n");\r
     } else {\r
-       fen = PositionToFEN(currentMove, 1);\r
+       fen = PositionToFEN(currentMove, NULL);\r
        fprintf(f, "%s\n", fen);\r
        free(fen);\r
     }\r
@@ -13293,9 +13295,9 @@ PGNDate()
 \r
 \r
 char *\r
-PositionToFEN(move, useFEN960)\r
+PositionToFEN(move, overrideCastling)\r
      int move;\r
-     int useFEN960;\r
+     char *overrideCastling;\r
 {\r
     int i, j, fromX, fromY, toX, toY;\r
     int whiteToPlay;\r
@@ -13370,6 +13372,9 @@ PositionToFEN(move, useFEN960)
     *p++ = whiteToPlay ? 'w' : 'b';\r
     *p++ = ' ';\r
 \r
+  if(q = overrideCastling) { // [HGM] FRC: override castling & e.p fields for non-compliant engines\r
+    while(*p++ = *q++); if(q != overrideCastling+1) p[-1] = ' ';\r
+  } else {\r
   if(nrCastlingRights) {\r
      q = p;\r
      if(gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom) {\r
@@ -13427,6 +13432,7 @@ PositionToFEN(move, useFEN960)
     }\r
     *p++ = ' ';\r
   }\r
+  }\r
 \r
     /* [HGM] find reversible plies */\r
     {   int i = 0, j=move;\r