X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=backend.c;h=7672207afe4c942a156151048f99e6c5065c79ac;hb=c612331f05b9a1ddddb6f25c598b4258f9e094b1;hp=a5e26db4576c751f30e395e2b7ae54f8022177df;hpb=e67c40abb13210481e672cad13050fa4d68d3aae;p=xboard.git diff --git a/backend.c b/backend.c index a5e26db..7672207 100644 --- a/backend.c +++ b/backend.c @@ -1983,7 +1983,7 @@ void VariantSwitch(Board board, VariantClass newVariant) { int newHoldingsWidth, newWidth = 8, newHeight = 8, i, j; - Board oldBoard; + static Board oldBoard; startedFromPositionFile = FALSE; if(gameInfo.variant == newVariant) return; @@ -3842,7 +3842,7 @@ ParseBoard12(string) } if((gameMode == IcsPlayingWhite || gameMode == IcsPlayingBlack) - && newGameMode == IcsObserving && appData.bgObserve) { + && newGameMode == IcsObserving && gamenum != ics_gamenum && appData.bgObserve) { // [HGM] bughouse: don't act on alien boards while we play. Just parse the board and save it */ char *toSqr; for (k = 0; k < ranks; k++) { @@ -6772,7 +6772,7 @@ Adjudicate(ChessProgramState *cps) || NrWN==2 || NrBN==2 /* KNNK */ || NrWN+NrWB == 1 && NrBN+NrBB == 1 /* KBKN, KBKB, KNKN */ ) ) { - if(canAdjudicate && --moveCount < 0 && appData.trivialDraws) + if(--moveCount < 0 && appData.trivialDraws && canAdjudicate) { /* if the first 3 moves do not show a tactical win, declare draw */ if(engineOpponent) { SendToProgram("force\n", engineOpponent); // suppress reply @@ -6823,7 +6823,7 @@ Adjudicate(ChessProgramState *cps) boards[forwardMostMove][CASTLING][4] != boards[k][CASTLING][4] ) rights++; } - if( canAdjudicate && rights == 0 && ++count > appData.drawRepeats-2 + if( rights == 0 && ++count > appData.drawRepeats-2 && canAdjudicate && appData.drawRepeats > 1) { /* adjudicate after user-specified nr of repeats */ if(engineOpponent) { @@ -7792,6 +7792,7 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats. } if (!ignore) { + ChessProgramStats tempStats = programStats; // [HGM] info: filter out info lines buf1[0] = NULLCHAR; if (sscanf(message, "%d%c %d %d " u64Display " %[^\n]\n", &plylev, &plyext, &curscore, &time, &nodes, buf1) >= 5) { @@ -7813,11 +7814,11 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats. } - programStats.depth = plylev; - programStats.nodes = nodes; - programStats.time = time; - programStats.score = curscore; - programStats.got_only_move = 0; + tempStats.depth = plylev; + tempStats.nodes = nodes; + tempStats.time = time; + tempStats.score = curscore; + tempStats.got_only_move = 0; if(cps->nps >= 0) { /* [HGM] nps: use engine nodes or time to decrement clock */ int ticklen; @@ -7834,31 +7835,34 @@ if(appData.debugMode) fprintf(debugFP, "nodes = %d, %lld\n", (int) programStats. /* Buffer overflow protection */ if (buf1[0] != NULLCHAR) { - if (strlen(buf1) >= sizeof(programStats.movelist) + if (strlen(buf1) >= sizeof(tempStats.movelist) && appData.debugMode) { fprintf(debugFP, "PV is too long; using the first %u bytes.\n", - (unsigned) sizeof(programStats.movelist) - 1); + (unsigned) sizeof(tempStats.movelist) - 1); } - safeStrCpy( programStats.movelist, buf1, sizeof(programStats.movelist) ); + safeStrCpy( tempStats.movelist, buf1, sizeof(tempStats.movelist) ); } else { - sprintf(programStats.movelist, " no PV\n"); + sprintf(tempStats.movelist, " no PV\n"); } - if (programStats.seen_stat) { - programStats.ok_to_send = 1; + if (tempStats.seen_stat) { + tempStats.ok_to_send = 1; } - if (strchr(programStats.movelist, '(') != NULL) { - programStats.line_is_book = 1; - programStats.nr_moves = 0; - programStats.moves_left = 0; + if (strchr(tempStats.movelist, '(') != NULL) { + tempStats.line_is_book = 1; + tempStats.nr_moves = 0; + tempStats.moves_left = 0; } else { - programStats.line_is_book = 0; + tempStats.line_is_book = 0; } - SendProgramStatsToFrontend( cps, &programStats ); + if(tempStats.score != 0 || tempStats.nodes != 0 || tempStats.time != 0) + programStats = tempStats; // [HGM] info: only set stats if genuine PV and not an info line + + SendProgramStatsToFrontend( cps, &tempStats ); /* [AS] Protect the thinkOutput buffer from overflow... this