X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=gnushogi%2Ftcontrl.c;h=afdb32cd3663f17bdd489a7104e8fc4fd4cddc29;hb=0733495e0c47ce7590d799cafa9d1d1f9906ef41;hp=fd5f4a5ef847fe21a27efdd187bfaa8c5bb2e024;hpb=1f6f420ff000a2f0f5bec0845da2fa51170573c9;p=gnushogi.git diff --git a/gnushogi/tcontrl.c b/gnushogi/tcontrl.c index fd5f4a5..afdb32c 100644 --- a/gnushogi/tcontrl.c +++ b/gnushogi/tcontrl.c @@ -4,6 +4,7 @@ * ---------------------------------------------------------------------- * Copyright (c) 1993, 1994, 1995 Matthias Mutz * Copyright (c) 1999 Michael Vanier and the Free Software Foundation + * Copyright (c) 2008, 2013, 2014 Yann Dirson and the Free Software Foundation * * GNU SHOGI is based on GNU CHESS * @@ -162,10 +163,14 @@ void SetResponseTime(short side) { short rtf = in_opening_stage ? 8 : 2; short tcq = in_opening_stage ? 2 : 4; + int moves = TimeControl.moves[side]; - TimeControl.clock[side] += TCadd; + if(!xboard) /* no pre-add of increment in XBoard mode */ + TimeControl.clock[side] += TCadd; + if(TCflag == 2 && TCadd == 0) /* sudden death */ + moves = (moves < 30 ? 30 : moves); ResponseTime = (TimeControl.clock[side]) - / (((TimeControl.moves[side]) * rtf) + 1); + / (moves * rtf + 1); TCleft = (long)ResponseTime / tcq; ResponseTime += TCadd / 2; } @@ -251,10 +256,15 @@ void SetResponseTime(short side) else { /* calculate avg time per move remaining */ - TimeControl.clock[side] += TCadd; + int moves = TimeControl.moves[side]; + + if(!xboard) /* no pre-add of increment in XBoard mode */ + TimeControl.clock[side] += TCadd; + if(TCflag == 2 && TCadd == 0) /* sudden death */ + moves = (moves < 30 ? 30 : moves); ResponseTime = (TimeControl.clock[side]) - / (((TimeControl.moves[side]) * 2) + 1); + / (moves * 2 + 1); TCleft = (int) ResponseTime / 3; ResponseTime += TCadd / 2; @@ -294,7 +304,7 @@ void SetResponseTime(short side) TCcount = MAXTCCOUNTX; } #endif - +printf("# %2d. moves=%d,%d time=%d,%d ResponseTime=%d+%d\n",GameCnt,TimeControl.moves[computer],TimeControl.moves[opponent],TimeControl.clock[computer],TimeControl.clock[opponent],ResponseTime,TCleft); assert(TCcount <= MAXTCCOUNTX); } @@ -345,7 +355,7 @@ CheckForTimeout(int score, int globalscore, int Jscore, int zwndw) #endif if (flag.timeout) - ShowMessage("timeout"); + dsp->ShowMessage("timeout"); } @@ -365,7 +375,7 @@ ElapsedTime(ElapsedTime_mode iop) struct timeval tv; #endif - PollForInput(); + dsp->PollForInput(); #ifdef HAVE_GETTIMEOFDAY gettimeofday(&tv, NULL); @@ -410,6 +420,51 @@ ElapsedTime(ElapsedTime_mode iop) #ifdef QUIETBACKGROUND if (!background) #endif - UpdateClocks(); + dsp->UpdateClocks(); + } +} + + +void +SetTimeControl(void) +{ + if (TCflag) + { + TimeControl.moves[black] = TimeControl.moves[white] = TCmoves; + TimeControl.clock[black] += 6000L * TCminutes + TCseconds * 100; + TimeControl.clock[white] += 6000L * TCminutes + TCseconds * 100; + } + else + { + TimeControl.moves[black] = TimeControl.moves[white] = 0; + TimeControl.clock[black] = TimeControl.clock[white] = 0; + } + + flag.onemove = (TCmoves == 1); + et = 0; + ElapsedTime(COMPUTE_AND_INIT_MODE); +} + +void +RenewTimeControl(int side, int TCadd) +{ + if (flag.gamein || TCadd) + { + TimeCalc(); + } + else if (TimeControl.moves[side] == 0) + { + if (XC) + { + if (XCmore < XC) + { + TCmoves = XCmoves[XCmore]; + TCminutes = XCminutes[XCmore]; + TCseconds = XCseconds[XCmore]; + XCmore++; + } + } + + SetTimeControl(); } }