X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=engineoutput.c;h=9cd75483a797591fdbd902066dfcc38f15c4e54c;hb=69a45edffca6dd25ab27dcf9f12f5b4a5be5639f;hp=f37b9c2b4d247cb1e57c0c2c480d0ec59b5a1e67;hpb=632da8a159457f147071df149300c5fdc575b292;p=xboard.git diff --git a/engineoutput.c b/engineoutput.c index f37b9c2..9cd7548 100644 --- a/engineoutput.c +++ b/engineoutput.c @@ -43,7 +43,17 @@ #include "common.h" #include "frontend.h" #include "backend.h" +#include "moves.h" #include "engineoutput.h" +#include "gettext.h" + +#ifdef ENABLE_NLS +# define _(s) gettext (s) +# define N_(s) gettext_noop (s) +#else +# define _(s) (s) +# define N_(s) s +#endif typedef struct { char * name; @@ -70,10 +80,38 @@ 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]; #define MAX_VAR 400 static int scores[MAX_VAR], textEnd[MAX_VAR], curDepth[2], nrVariations[2]; +extern int initialRulePlies; + +void MakeEngineOutputTitle() +{ + static char buf[MSG_SIZ]; + static char oldTitle[MSG_SIZ]; + char title[MSG_SIZ]; + int count, rule = 2*appData.ruleMoves; + + snprintf(title, MSG_SIZ, _("Engine Output") ); + + if(!EngineOutputIsUp()) return; + // figure out value of 50-move counter + count = currentMove; + while( (signed char)boards[count][EP_STATUS] <= EP_NONE && count > backwardMostMove ) count--; + if( count == backwardMostMove ) count -= initialRulePlies; + count = currentMove - count; + if(!rule) rule = 100; + if(count >= rule - 40 && (!appData.icsActive || gameMode == IcsObserving)) { + snprintf(buf, MSG_SIZ, _("%s (%d reversible plies)"), title, count); + safeStrCpy(title, buf, MSG_SIZ); + } + if(!strcmp(oldTitle, title)) return; + safeStrCpy(oldTitle, title, MSG_SIZ); + SetEngineOutputTitle(title); +} + // back end, due to front-end wrapper for SetWindowText, and new SetIcon arguments void SetEngineState( int which, int state, char * state_data ) { @@ -111,8 +149,7 @@ void SetProgramStats( FrontEndProgramStats * stats ) // now directly called by b { EngineOutputData ed; int clearMemo = FALSE; - int which; - int depth; + int which, depth, multi; if( stats == 0 ) { SetEngineState( 0, STATE_IDLE, "" ); @@ -171,6 +208,12 @@ void SetProgramStats( FrontEndProgramStats * stats ) // now directly called by b if( clearMemo ) { DoClearMemo(which); nrVariations[which] = 0; + header[0] = NULLCHAR; + if(gameMode == AnalyzeMode && (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); + InsertIntoMemo( which, header, 0); + } else if(appData.ponderNextMove && lastLine[which][0]) { InsertIntoMemo( which, lastLine[which], 0 ); InsertIntoMemo( which, "\n", 0 ); @@ -345,7 +388,7 @@ static int InsertionPoint( int len, EngineOutputData * ed ) scores[n] = newScore; } nrVariations[n] += 2; - return offs; + return offs + (gameMode == AnalyzeMode)*strlen(header); } @@ -355,7 +398,7 @@ static void UpdateControls( EngineOutputData * ed ) // int isPondering = FALSE; char s_label[MAX_NAME_LENGTH + 32]; - + int h; char * name = ed->name; /* Label */ @@ -455,11 +498,12 @@ static void UpdateControls( EngineOutputData * ed ) } /* Score */ - if( ed->score > 0 ) { - snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "+%.2f", ed->score / 100.0 ); + h = ((gameMode == AnalyzeMode && appData.whitePOV || appData.scoreWhite) && !WhiteOnMove(currentMove) ? -1 : 1) * ed->score; + if( h > 0 ) { + snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "+%.2f", h / 100.0 ); } else { - snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "%.2f", ed->score / 100.0 ); + snprintf( s_score, sizeof(s_score)/sizeof(s_score[0]), "%.2f", h / 100.0 ); } /* Time */