X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=backend.c;h=6243fa3b52d8b9138186488f3d13d09be6821e1d;hb=0d4601eba9adede769abaeaa29c26cc1b5a626ab;hp=6645db166a7d7b3b69e7ad8991b418d9a1cc0979;hpb=84704f266e28a5bbb0e10a7282db30b9983b87ea;p=xboard.git diff --git a/backend.c b/backend.c index 6645db1..6243fa3 100644 --- a/backend.c +++ b/backend.c @@ -1550,6 +1550,8 @@ InitBackEnd3 P((void)) if(f = fopen(appData.tourneyFile, "r")) { ParseArgsFromFile(f); // make sure tourney parmeters re known fclose(f); + appData.clockMode = TRUE; + SetGNUMode(); } else appData.tourneyFile[0] = NULLCHAR; // for now ignore bad tourney file } MatchEvent(TRUE); @@ -7659,7 +7661,10 @@ HandleMachineMove(message, cps) if(cps == &pairing && sscanf(message, "%d-%d", &savedWhitePlayer, &savedBlackPlayer) == 2) { // [HGM] pairing: Mega-hack! Pairing engine also uses this routine (so it could give other WB commands). - if(savedWhitePlayer == 0 || savedBlackPlayer == 0) return; + if(savedWhitePlayer == 0 || savedBlackPlayer == 0) { + DisplayError(_("Invalid pairing from pairing engine"), 0); + return; + } pairingReceived = 1; NextMatchGame(); return; // Skim the pairing messages here. @@ -9746,9 +9751,9 @@ Pairing(int nr, int nPlayers, int *whitePlayer, int *blackPlayer, int *syncInter *whitePlayer = curRound; *blackPlayer = nPlayers - 1; // this is the 'bye' when nPlayer is odd } else { - *whitePlayer = curRound - pairingsPerRound + curPairing; + *whitePlayer = curRound - (nPlayers-1)/2 + curPairing; if(*whitePlayer < 0) *whitePlayer += nPlayers-1+(nPlayers&1); - *blackPlayer = curRound + pairingsPerRound - curPairing; + *blackPlayer = curRound + (nPlayers-1)/2 - curPairing; if(*blackPlayer >= nPlayers-1+(nPlayers&1)) *blackPlayer -= nPlayers-1+(nPlayers&1); } } else if(appData.tourneyType > 0) { @@ -9774,22 +9779,7 @@ NextTourneyGame(int nr, int *swapColors) InitTimeControls(); // TC might be altered from tourney file nPlayers = CountPlayers(appData.participants); // count participants - if(appData.tourneyType < 0 && appData.pairingEngine[0]) { - if(nr>=0 && !pairingReceived) { - char buf[1<<16]; - if(pairing.pr == NoProc) StartChessProgram(&pairing); - snprintf(buf, 1<<16, "results %d %s\n", nPlayers, appData.results); - SendToProgram(buf, &pairing); - snprintf(buf, 1<<16, "pairing %d\n", nr+1); - SendToProgram(buf, &pairing); - return 0; // wait for pairing engine to answer (which causes NextTourneyGame to be called again... - } - pairingReceived = 0; // ... so we continue here - syncInterval = nPlayers/2; *swapColors = 0; - appData.matchGames = appData.tourneyCycles * syncInterval - 1; - whitePlayer = savedWhitePlayer-1; blackPlayer = savedBlackPlayer-1; - matchGame = 1; roundNr = nr / syncInterval + 1; - } else + if(appData.tourneyType < 0) syncInterval = nPlayers/2; else *swapColors = Pairing(nr<0 ? 0 : nr, nPlayers, &whitePlayer, &blackPlayer, &syncInterval); if(syncInterval) { @@ -9804,6 +9794,29 @@ NextTourneyGame(int nr, int *swapColors) waitingForGame = FALSE; } + if(appData.tourneyType < 0) { + if(nr>=0 && !pairingReceived) { + char buf[1<<16]; + if(pairing.pr == NoProc) { + if(!appData.pairingEngine[0]) { + DisplayFatalError(_("No pairing engine specified"), 0, 1); + return 0; + } + StartChessProgram(&pairing); // starts the pairing engine + } + snprintf(buf, 1<<16, "results %d %s\n", nPlayers, appData.results); + SendToProgram(buf, &pairing); + snprintf(buf, 1<<16, "pairing %d\n", nr+1); + SendToProgram(buf, &pairing); + return 0; // wait for pairing engine to answer (which causes NextTourneyGame to be called again... + } + pairingReceived = 0; // ... so we continue here + *swapColors = 0; + appData.matchGames = appData.tourneyCycles * syncInterval - 1; + whitePlayer = savedWhitePlayer-1; blackPlayer = savedBlackPlayer-1; + matchGame = 1; roundNr = nr / syncInterval + 1; + } + if(first.pr != NoProc) return 1; // engines already loaded // redefine engines, engine dir, etc.