Send FICS atomic claim to ICS if move creates draw after offer
authorH.G. Muller <h.g.muller@hccnet.nl>
Sun, 24 Jan 2010 17:51:38 +0000 (18:51 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Sat, 30 Jan 2010 08:56:05 +0000 (09:56 +0100)
The FICS format "draw MOVE" is used to send the move to the ICS  when
the user enters a move that adjudicates as a claimable draw, and he
offered a draw before the move. For the benefit of ICS that do not
understand this format, the plain move is sent afterwards.

backend.c

index 3fc68f2..d8c5410 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -5473,8 +5473,6 @@ UserMoveTest(fromX, fromY, toX, toY, promoChar, captureOwn)
        }
     }
 
-    userOfferedDraw = FALSE; // [HGM] drawclaim: only if we do a legal move!
-       
     return moveType;
     /* [HGM] <popupFix> in stead of calling FinishMove directly, this
        function is made into one that returns an OK move type if FinishMove
@@ -5604,6 +5602,12 @@ FinishMove(moveType, fromX, fromY, toX, toY, promoChar)
   if (appData.icsActive) {
     if (gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack ||
        gameMode == IcsExamining) {
+      if(userOfferedDraw && (signed char)boards[forwardMostMove][EP_STATUS] <= EP_DRAWS) {
+        SendToICS(ics_prefix); // [HGM] drawclaim: send caim and move on one line for FICS
+       SendToICS("draw ");
+        SendMoveToICS(moveType, fromX, fromY, toX, toY);
+      }
+      // also send plain move, in case ICS does not understand atomic claims
       SendMoveToICS(moveType, fromX, fromY, toX, toY);
       ics_user_moved = 1;
     }
@@ -5655,6 +5659,8 @@ FinishMove(moveType, fromX, fromY, toX, toY, promoChar)
     break;
   }
 
+  userOfferedDraw = FALSE; // [HGM] drawclaim: after move made, and tested for claimable draw
+       
   if(bookHit) { // [HGM] book: simulate book reply
        static char bookMove[MSG_SIZ]; // a bit generous?