if(stats.pv && stats.pv[0]) safeStrCpy(lastPV[stats.which], stats.pv, sizeof(lastPV[stats.which])/sizeof(lastPV[stats.which][0])); // [HGM] pv: remember last PV of each
+ if( gameMode == AnalyzeMode && stats.pv && stats.pv[0]
+ && appData.analysisBell && stats.time >= 100*appData.analysisBell ) RingBell();
+
SetProgramStats( &stats );
}
}
if(appData.epd) {
if(solvingTime >= 0) {
- snprintf(buf1, MSG_SIZ, "%d. %4.2fs\n", matchGame, solvingTime/100.);
- totalTime += solvingTime; first.matchWins++;
+ snprintf(buf1, MSG_SIZ, "%d. solved %4.2fs\n", matchGame, solvingTime/100.);
+ totalTime += solvingTime; first.matchWins++; solvingTime = -1;
} else {
snprintf(buf1, MSG_SIZ, "%d. wrong (%s)\n", matchGame, parseList[backwardMostMove]);
second.matchWins++;
ChessMove mt;
int ok = ParseOneMove(bestMove, forwardMostMove, &mt, &ff1, &fr1, &tf1, &tr1, &pp1);
ok &= ParseOneMove(pv, forwardMostMove, &mt, &ff2, &fr2, &tf2, &tr2, &pp2);
- solvingTime = (ok && ff1==ff2 && fr1==fr2 && tf1==tf2 && tr1==tr2 && pp1==pp2 ? time : -1);
+ solvingTime = (ok && ff1==ff2 && fr1==fr2 && tf1==tf2 && tr1==tr2 && pp1==pp2 ? (solvingTime < 0 ? time : solvingTime) : -1);
}
if(serverMoves && (time > 100 || time == 0 && plylev > 7)) {
res = LoadGameOrPosition(matchGame); // setup game
appData.noChessProgram = FALSE; // LoadGameOrPosition might call Reset too!
if(!res) return; // abort when bad game/pos file
+ if(appData.epd) {// in EPD mode we make sure first engine is to move
+ firstWhite = !(forwardMostMove & 1);
+ first.twoMachinesColor = firstWhite ? "white\n" : "black\n"; // perform actual color assignement
+ second.twoMachinesColor = firstWhite ? "black\n" : "white\n";
+ }
TwoMachinesEvent();
}
return;
} else {
gameMode = nextGameMode;
+ if(appData.epd) {
+ snprintf(buf, MSG_SIZ, "-------------------------------- ");
+ OutputKibitz(2, buf);
+ snprintf(buf, MSG_SIZ, "Average solving time %4.2f sec ", totalTime/(100.*first.matchWins));
+ OutputKibitz(2, buf);
+ snprintf(buf, MSG_SIZ, "Solved %d of %d (%3.1f%%) ", first.matchWins, nextGame, first.matchWins*100./nextGame);
+ OutputKibitz(2, buf);
+ }
snprintf(buf, MSG_SIZ, _("Match %s vs. %s: final score %d-%d-%d"),
first.tidy, second.tidy,
first.matchWins, second.matchWins,
DisplayError(_("Bad FEN position in file"), 0);
return FALSE;
}
- if((p = strstr(line, ";")) && (p = strstr(p+1, "bm "))) { // EPD with best move
- sscanf(p+3, "%s", bestMove);
+ if((strchr(line, ';')) && (p = strstr(line, " bm "))) { // EPD with best move
+ sscanf(p+4, "%s", bestMove);
} else *bestMove = NULLCHAR;
} else {
(void) fgets(line, MSG_SIZ, f);