*
* Copyright 2005 Alessandro Scotti
*
- * Enhancements Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014, 2015 Free Software Foundation, Inc.
+ * Enhancements Copyright 1995, 2009, 2010, 2011, 2012, 2013, 2014,
+ * 2015, 2016 Free Software Foundation, Inc.
*
* ------------------------------------------------------------------------
*
return;
}
+ if(appData.epd && which) return; // do not write second pane in -epd mode
+
if( !EngineOutputDialogExists() ) {
return;
}
clearMemo = TRUE;
}
- if( lastForwardMostMove[which] != forwardMostMove ) {
+ if( lastForwardMostMove[which] != forwardMostMove && endPV < 0) {
clearMemo = TRUE;
}
if(gameMode == AnalyzeMode) {
ChessProgramState *cps = (which ? &second : &first);
char *exclu = cps->excludeMoves ? exclusionHeader : "";
- 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);
+ if((multi = MultiPV(cps, 3)) != -1) {
+ char *s = "setting";
+ if(multi < -1) multi = -2 - multi, s = "margin";
+ snprintf(header[which], MSG_SIZ, "\t%s viewpoint\t\tfewer / Multi-PV %s = %d / more\n",
+ appData.whitePOV || appData.scoreWhite ? "white" : "mover", s, cps->option[multi].value);
}
if(!which) snprintf(header[which]+strlen(header[which]), MSG_SIZ-strlen(header[which]), "%s%s", exclu, columnHeader);
InsertIntoMemo( which, header[which], 0);
/* Update */
lastDepth[which] = depth == 1 && ed.nodes == 0 ? 0 : depth; // [HGM] info-line kudge
- lastForwardMostMove[which] = forwardMostMove;
+ if(endPV < 0) lastForwardMostMove[which] = forwardMostMove; // not during PV walk!
UpdateControls( &ed );
}
// [HGM] multivar: sort Thinking Output within one depth on score
static int
+MateFlip (int n)
+{ // map mate-score to monotonous scale, so sorting compares them correctly
+ if(n >= MATE_SCORE) return 2*MATE_SCORE - n;
+ if(n <= -MATE_SCORE) return -2*MATE_SCORE - n;
+ return n;
+}
+
+static int
InsertionPoint (int len, EngineOutputData *ed)
{
int i, offs = 0, newScore = ed->score, n = ed->which;
keys[i+n+2] = ed->moveKey;
fail[i+n+2] = failType;
if(ed->moveKey != keys[i+n] && // same move always tops previous one (as a higher score must be a fail low)
- newScore < scores[i+n] && fail[i+n] == ' ') break;
+ MateFlip(newScore) < MateFlip(scores[i+n]) && fail[i+n] == ' ') break;
// if it had higher score as previous, move previous in stead
scores[i+n+2] = ed->moveKey == keys[i+n] ? newScore : scores[i+n]; // correct scores of fail-low/high searches
textEnd[i+n+2] = textEnd[i+n] + len;
static int currentLineEnd[2];
int where = 0;
if(!EngineOutputIsUp()) return;
- if(!opponentKibitzes) { // on first kibitz of game, clear memos
+ if(!opponentKibitzes && !appData.epd) { // on first kibitz of game, clear memos
DoClearMemo(1); currentLineEnd[1] = 0;
if(gameMode == IcsObserving) { DoClearMemo(0); currentLineEnd[0] = 0; }
}
opponentKibitzes = TRUE; // this causes split window DisplayMode in ICS modes.
VerifyDisplayMode();
- strncpy(text+strlen(text)-1, "\r\n",sizeof(text+strlen(text)-1)); // to not lose line breaks on copying
+ strncpy(text+strlen(text)-1, "\r\n", 4); // to not lose line breaks on copying
if(gameMode == IcsObserving) {
DoSetWindowText(0, nLabel, gameInfo.white);
SetIcon( 0, nColorIcon, nColorWhite);