fix joining of lines split by ICS
[xboard.git] / backend.c
index ddd4ef2..a612db1 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -2124,7 +2124,8 @@ read_from_ics(isr, closure, data, count, error)
            if(buf_len >= 5 && buf[buf_len-5]=='\n' && buf[buf_len-4]=='\\' && 
                                buf[buf_len-3]==' '  && buf[buf_len-2]==' '  && buf[buf_len-1]==' ') {
                buf_len -= 5; // [HGM] ICS: join continuation line of Lasker 2.2.3 server with previous
-               buf[buf_len++] = ' '; // replace by space (assumes ICS does not break lines within word)
+               if(buf_len == 0 || buf[buf_len-1] != ' ')
+                  buf[buf_len++] = ' '; // add space (assumes ICS does not break lines within word)
            }
        }
 
@@ -5050,7 +5051,6 @@ int lastLoadGameUseList = FALSE;
 char lastLoadGameTitle[MSG_SIZ], lastLoadPositionTitle[MSG_SIZ];
 ChessMove lastLoadGameStart = (ChessMove) 0;
 
-
 ChessMove
 UserMoveTest(fromX, fromY, toX, toY, promoChar, captureOwn)
      int fromX, fromY, toX, toY;
@@ -5158,12 +5158,6 @@ UserMoveTest(fromX, fromY, toX, toY, promoChar, captureOwn)
                    fprintf(debugFP, "Got premove: fromX %d,"
                            "fromY %d, toX %d, toY %d\n",
                            fromX, fromY, toX, toY);
-               if(!WhiteOnMove(currentMove) && gotPremove == 1) {
-                   // [HGM] race: we must have been hit by an opponent move from the ICS while preparing the premove
-                   if (appData.debugMode) 
-                       fprintf(debugFP, "Execute as normal move\n");
-                   gotPremove = 0; break;
-               }
            }
             return ImpossibleMove;
        }
@@ -5185,12 +5179,6 @@ UserMoveTest(fromX, fromY, toX, toY, promoChar, captureOwn)
                    fprintf(debugFP, "Got premove: fromX %d,"
                            "fromY %d, toX %d, toY %d\n",
                            fromX, fromY, toX, toY);
-               if(WhiteOnMove(currentMove) && gotPremove == 1) {
-                   // [HGM] race: we must have been hit by an opponent move from the ICS while preparing the premove
-                   if (appData.debugMode) 
-                       fprintf(debugFP, "Execute as normal move\n");
-                   gotPremove = 0; break;
-               }
            }
             return ImpossibleMove;
        }
@@ -7487,9 +7475,6 @@ MakeMove(fromX, fromY, toX, toY, promoChar)
                        0, 1);
       return;
     }
-    SwitchClocks();
-    timeRemaining[0][forwardMostMove+1] = whiteTimeRemaining;
-    timeRemaining[1][forwardMostMove+1] = blackTimeRemaining;
     if (commentList[forwardMostMove+1] != NULL) {
        free(commentList[forwardMostMove+1]);
        commentList[forwardMostMove+1] = NULL;
@@ -7499,6 +7484,9 @@ MakeMove(fromX, fromY, toX, toY, promoChar)
     ApplyMove(fromX, fromY, toX, toY, promoChar, boards[forwardMostMove+1], 
                                castlingRights[forwardMostMove+1], &epStatus[forwardMostMove+1]);
     forwardMostMove++; // [HGM] bare: moved to after ApplyMove, to make sure clock interrupt finds complete board
+    SwitchClocks(); // uses forwardMostMove, so must be done after incrementing it !
+    timeRemaining[0][forwardMostMove] = whiteTimeRemaining;
+    timeRemaining[1][forwardMostMove] = blackTimeRemaining;
     gameInfo.result = GameUnfinished;
     if (gameInfo.resultDetails != NULL) {
        free(gameInfo.resultDetails);