X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=backend.c;h=866b70345b24a7375a272ff9c59f7d21d53888e6;hb=cbef46783d8c68cb6ce106fc278edf3446b720fc;hp=8c795cda8aec91e2a19f41cedadef11ed7cbf679;hpb=f54f775f8c1d291c3de02704181182a50fa5b413;p=xboard.git diff --git a/backend.c b/backend.c index 8c795cd..866b703 100644 --- a/backend.c +++ b/backend.c @@ -2445,6 +2445,11 @@ read_from_ics(isr, closure, data, count, error) if (gameMode == IcsObserving && atoi(star_match[0]) == ics_gamenum) { + /* icsEngineAnalyze */ + if (appData.icsEngineAnalyze) { + ExitAnalyzeMode(); + ModeHighlight(); + } StopClocks(); gameMode = IcsIdle; ics_gamenum = -1; @@ -2620,8 +2625,8 @@ ParseBoard12(string) char *string; { GameMode newGameMode; - int gamenum, newGame, newMove, relation, basetime, increment, ics_flip = 0; - int j, k, n, moveNum, white_stren, black_stren, white_time, black_time; + int gamenum, newGame, newMove, relation, basetime, increment, ics_flip = 0, i; + int j, k, n, moveNum, white_stren, black_stren, white_time, black_time, takeback; int double_push, castle_ws, castle_wl, castle_bs, castle_bl, irrev_count; char to_play, board_chars[72]; char move_str[500], str[500], elapsed_time[500]; @@ -2733,7 +2738,7 @@ ParseBoard12(string) /* Forget the old game and get the history (if any) of the new one */ if (gameMode != BeginningOfGame) { - Reset(FALSE, TRUE); + Reset(FALSE, TRUE); } newGame = TRUE; if (appData.autoRaiseBoard) BoardToTop(); @@ -2855,6 +2860,16 @@ ParseBoard12(string) /* Update currentMove and known move number limits */ newMove = newGame || moveNum > forwardMostMove; + + /* If we found takebacks during icsEngineAnalyze + try send to engine */ + if (!newGame && appData.icsEngineAnalyze && moveNum < forwardMostMove) { + takeback = forwardMostMove - moveNum; + for (i = 0; i < takeback; i++) { + if (appData.debugMode) fprintf(debugFP, "take back move\n"); + SendToProgram("undo\n", &first); + } + } if (newGame) { forwardMostMove = backwardMostMove = currentMove = moveNum; if (gameMode == IcsExamining && moveNum == 0) { @@ -4383,6 +4398,7 @@ HandleMachineMove(message, cps) break; case AnalyzeMode: case AnalyzeFile: + break; /* icsEngineAnalyze */ case IcsObserving: if (!appData.icsEngineAnalyze) ignore = TRUE; @@ -5334,8 +5350,8 @@ ResurrectChessProgram() timeRemaining[1][currentMove] = blackTimeRemaining; } - if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile) && - first.analysisSupport) { + if ((gameMode == AnalyzeMode || gameMode == AnalyzeFile || + appData.icsEngineAnalyze) && first.analysisSupport) { SendToProgram("analyze\n", &first); first.analyzing = TRUE; } @@ -7776,9 +7792,11 @@ EditPositionEvent() void ExitAnalyzeMode() { - /* icsEngineAnalyze - possible call of other functions */ - if (appData.icsEngineAnalyze) appData.icsEngineAnalyze = FALSE; - + /* icsEngineAnalyze - possible call from other functions */ + if (appData.icsEngineAnalyze) { + appData.icsEngineAnalyze = FALSE; + DisplayMessage("","Close ICS engine analyze..."); + } if (first.analysisSupport && first.analyzing) { SendToProgram("exit\n", &first); first.analyzing = FALSE; @@ -8908,7 +8926,18 @@ ReceiveFromProgram(isr, closure, message, count, error) SubtractTimeMarks(&now, &programStartTime), cps->which, message); } - HandleMachineMove(message, cps); + /* if icsEngineAnalyze is active we block all + whisper and kibitz output, because nobody want + see this + */ + if (appData.icsEngineAnalyze) { + if (strstr(message, "whisper") != NULL || + strstr(message, "kibitz") != NULL || + strstr(message, "tellics") != NULL) return; + HandleMachineMove(message, cps); + } else { + HandleMachineMove(message, cps); + } }