Fix disappearence of pieces that were moved illegally
[xboard.git] / engineoutput.c
index 157cabf..42eccc0 100644 (file)
@@ -5,7 +5,7 @@
  *
  * Copyright 2005 Alessandro Scotti
  *
- * Enhancements Copyright 1995, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ * Enhancements Copyright 1995, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
  *
  * ------------------------------------------------------------------------
  *
@@ -89,7 +89,7 @@ static int  lastDepth[2] = { -1, -1 };
 static int  lastForwardMostMove[2] = { -1, -1 };
 static int  engineState[2] = { -1, -1 };
 static char lastLine[2][MSG_SIZ];
-static char header[MSG_SIZ];
+static char header[2][MSG_SIZ];
 
 #define MAX_VAR 400
 static int scores[MAX_VAR], textEnd[MAX_VAR], keys[MAX_VAR], curDepth[2], nrVariations[2];
@@ -113,7 +113,7 @@ MakeEngineOutputTitle ()
        if( count == backwardMostMove ) count -= initialRulePlies;
        count = currentMove - count;
        if(!rule) rule = 100;
-       if(count >= rule - 40 && (!appData.icsActive || gameMode == IcsObserving)) {
+       if(count >= rule - 40 && (!appData.icsActive || gameMode == IcsObserving || appData.zippyPlay)) {
                snprintf(buf, MSG_SIZ, ngettext("%s (%d reversible ply)", "%s (%d reversible plies)", count), title, count);
                safeStrCpy(title, buf, MSG_SIZ);
        }
@@ -124,7 +124,7 @@ MakeEngineOutputTitle ()
 
 // back end, due to front-end wrapper for SetWindowText, and new SetIcon arguments
 void
-SetEngineState (int which, int state, char * state_data)
+SetEngineState (int which, enum ENGINE_STATE state, char * state_data)
 {
     int x_which = 1 - which;
 
@@ -223,14 +223,15 @@ SetProgramStats (FrontEndProgramStats * stats) // now directly called by back-en
 
     if( clearMemo ) {
         DoClearMemo(which); nrVariations[which] = 0;
-        header[0] = NULLCHAR;
+        header[which][0] = NULLCHAR;
         if(gameMode == AnalyzeMode) {
-          if((multi = MultiPV(&first)) >= 0) {
-            snprintf(header, MSG_SIZ, "\t%s viewpoint\t\tfewer / Multi-PV setting = %d / more\n",
-                                       appData.whitePOV || appData.scoreWhite ? "white" : "mover", first.option[multi].value);
+          ChessProgramState *cps = (which ? &second : &first);
+          if((multi = MultiPV(cps)) >= 0) {
+            snprintf(header[which], MSG_SIZ, "\t%s viewpoint\t\tfewer / Multi-PV setting = %d / more\n",
+                                       appData.whitePOV || appData.scoreWhite ? "white" : "mover", cps->option[multi].value);
          }
-          snprintf(header+strlen(header), MSG_SIZ-strlen(header), "%s", exclusionHeader);
-          InsertIntoMemo( which, header, 0);
+          if(!which) snprintf(header[which]+strlen(header[which]), MSG_SIZ-strlen(header[which]), "%s", exclusionHeader);
+          InsertIntoMemo( which, header[which], 0);
         } else
         if(appData.ponderNextMove && lastLine[which][0]) {
             InsertIntoMemo( which, lastLine[which], 0 );
@@ -347,12 +348,14 @@ VerifyDisplayMode ()
     switch( gameMode ) {
     case IcsObserving:    // [HGM] ICS analyze
        if(!appData.icsEngineAnalyze) return;
-    case AnalyzeMode:
     case AnalyzeFile:
     case MachinePlaysWhite:
     case MachinePlaysBlack:
         mode = 0;
         break;
+    case AnalyzeMode:
+        mode = second.analyzing;
+        break;
     case IcsPlayingWhite:
     case IcsPlayingBlack:
         mode = appData.zippyPlay && opponentKibitzes; // [HGM] kibitz
@@ -420,7 +423,7 @@ InsertionPoint (int len, EngineOutputData *ed)
                scores[n] = newScore;
        }
        nrVariations[n] += 2;
-      return offs + (gameMode == AnalyzeMode)*strlen(header);
+      return offs + (gameMode == AnalyzeMode)*strlen(header[ed->which]);
 }
 
 
@@ -503,10 +506,10 @@ UpdateControls (EngineOutputData *ed)
         unsigned long nps_100 = ed->nodes / ed->time;
 
         if( nps_100 < 100000 ) {
-         snprintf( s_label, sizeof(s_label)/sizeof(s_label[0]), "NPS: %lu", nps_100 * 100 );
+         snprintf( s_label, sizeof(s_label)/sizeof(s_label[0]), "%s: %lu", _("NPS"), nps_100 * 100 );
         }
         else {
-         snprintf( s_label, sizeof(s_label)/sizeof(s_label[0]), "NPS: %.1fk", nps_100 / 10.0 );
+         snprintf( s_label, sizeof(s_label)/sizeof(s_label[0]), "%s: %.1fk", _("NPS"), nps_100 / 10.0 );
         }
     }