changes from H.G. Muller; version 4.3.16
[xboard.git] / xengineoutput.c
index 72b6e26..a7d595d 100644 (file)
@@ -124,7 +124,8 @@ static void SetEngineColorIcon( int which );
 #define SHOW_PONDERING\r
 \r
 /* Imports from backend.c */\r
-char * SavePart(char *str);\r
+char * SavePart(char *str);
+extern int opponentKibitzes;\r
 \r
 /* Imports from winboard.c */\r
 //extern HWND engineOutputDialog;\r
@@ -172,7 +173,7 @@ typedef struct {
     int an_move_count;\r
 } EngineOutputData;\r
 \r
-static VerifyDisplayMode();\r
+static int VerifyDisplayMode();\r
 static void UpdateControls( EngineOutputData * ed );\r
 static SetEngineState( int which, int state, char * state_data );\r
 
@@ -844,6 +845,7 @@ void EngineOutputPopDown()
     int j;\r
 \r
     if (!engineOutputDialogUp) return;\r
+    DoClearMemo(1);
     j = 0;\r
     XtSetArg(args[j], XtNx, &engineOutputX); j++;\r
     XtSetArg(args[j], XtNy, &engineOutputY); j++;\r
@@ -930,6 +932,8 @@ void EngineOutputUpdate( FrontEndProgramStats * stats )
         return;\r
     }\r
 \r
+    if(gameMode == IcsObserving) return; // [HGM] kibitz: shut up engine if we are observing an ICS game
+
     which = stats->which;\r
     depth = stats->depth;\r
 \r
@@ -1068,7 +1072,7 @@ static void SetDisplayMode( int mode )
 }\r
 \r
 // pure back end\r
-static VerifyDisplayMode()\r
+int VerifyDisplayMode()\r
 {\r
     int mode;\r
 \r
@@ -1078,9 +1082,11 @@ static VerifyDisplayMode()
     case AnalyzeFile:\r
     case MachinePlaysWhite:\r
     case MachinePlaysBlack:\r
+        mode = 0;\r
+        break;\r
     case IcsPlayingWhite:\r
     case IcsPlayingBlack:\r
-        mode = 0;\r
+        mode = appData.zippyPlay && opponentKibitzes; // [HGM] kibitz\r
         break;\r
     case TwoMachinesPlay:\r
         mode = 1;\r
@@ -1263,4 +1269,25 @@ EngineOutputProc(w, event, prms, nprms)
   }
 //  ToNrEvent(currentMove);
 }
-\r
+
+// [HGM] kibitz: write kibitz line; split window for it if necessary
+void OutputKibitz(int window, char *text)
+{
+       if(!EngineOutputIsUp()) return;
+       if(!opponentKibitzes) { // on first kibitz of game, clear memos
+           DoClearMemo(1);
+           if(gameMode == IcsObserving) DoClearMemo(0);
+       }
+       opponentKibitzes = TRUE; // this causes split window DisplayMode in ICS modes.
+       VerifyDisplayMode();
+       if(gameMode == IcsObserving) {
+           DoSetWindowText(0, nLabel, gameInfo.white);
+           SetIcon( 0, nColorIcon,  nColorWhite);
+           SetIcon( 0, nStateIcon,  nClear);
+       }
+       DoSetWindowText(1, nLabel, gameMode == IcsPlayingBlack ? gameInfo.white : gameInfo.black); // opponent name
+       SetIcon( 1, nColorIcon,  gameMode == IcsPlayingBlack ? nColorWhite : nColorBlack);
+       SetIcon( 1, nStateIcon,  nClear);
+       InsertIntoMemo(window-1, text);
+}
+