From 84704f266e28a5bbb0e10a7282db30b9983b87ea Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Wed, 8 Jun 2011 17:08:55 +0200 Subject: [PATCH] Fix interrupting tournament Stopping a tourney by using the Machine Match menu item did not wor properly. --- backend.c | 13 ++++++------- 1 files changed, 6 insertions(+), 7 deletions(-) diff --git a/backend.c b/backend.c index 4771e63..6645db1 100644 --- a/backend.c +++ b/backend.c @@ -1380,7 +1380,7 @@ ReserveGame(int gameNr, char resChar) safeStrCpy(q, p, strlen(p) + 2); if(gameNr >= 0) q[gameNr] = resChar; // replace '*' with result if(appData.debugMode) fprintf(debugFP, "pick next game from '%s': %d\n", q, nextGame); - if(nextGame <= appData.matchGames && resChar != ' ') { // already reserve next game, if tourney not yet done + if(nextGame <= appData.matchGames && resChar != ' ' && !abortMatch) { // reserve next game if tourney not yet done if(q[nextGame] == NULLCHAR) q[nextGame+1] = NULLCHAR; // append one char q[nextGame] = '*'; } @@ -1392,7 +1392,7 @@ ReserveGame(int gameNr, char resChar) fprintf(tf, "%s\"\n", q); fclose(tf); // update, and flush by closing DisplayMessage(buf, ""); free(p); appData.results = q; - if(nextGame <= appData.matchGames && resChar != ' ' && + if(nextGame <= appData.matchGames && resChar != ' ' && !abortMatch && (gameNr < 0 || nextGame / appData.defaultMatchGames != gameNr / appData.defaultMatchGames)) { UnloadEngine(&first); // next game belongs to other pairing; UnloadEngine(&second); // already unload the engines, so TwoMachinesEvent will load new ones. @@ -1405,8 +1405,7 @@ MatchEvent(int mode) int dummy; if(matchMode) { // already in match mode: switch it off abortMatch = TRUE; - appData.matchGames = appData.tourneyFile[0] ? nextGame: matchGame; // kludge to let match terminate after next game. - ModeHighlight(); // kludgey way to remove checkmark... + if(!appData.tourneyFile[0]) appData.matchGames = matchGame; // kludge to let match terminate after next game. return; } // if(gameMode != BeginningOfGame) { @@ -7143,8 +7142,6 @@ TourneyStandings(int display) int score[MAXPLAYERS], ranking[MAXPLAYERS], points[MAXPLAYERS], games[MAXPLAYERS]; char result, *p, *names[MAXPLAYERS]; - if(appData.tourneyType < 0) return strdup("Swiss tourney finished"); // standings of Swiss yet TODO - names[0] = p = strdup(appData.participants); while(p = strchr(p, '\n')) *p++ = NULLCHAR, names[++nPlayers] = p; // count participants @@ -7167,6 +7164,7 @@ TourneyStandings(int display) games[b]++; nr++; } + if(appData.tourneyType < 0) return strdup("Swiss tourney finished"); // standings of Swiss yet TODO if(appData.tourneyType > 0) nPlayers = appData.tourneyType; // in gauntlet, list only gauntlet engine(s) for(w=0; w appData.matchGames) appData.tourneyFile[0] = 0, ranking = TourneyStandings(3); // tourney is done + else ranking = strdup("busy"); //suppress popup when aborted but not finished } else roundNr = nextGame = matchGame + 1; // normal match, just increment; round equals matchGame if (nextGame <= appData.matchGames && !abortMatch) { -- 1.7.0.4