#include "backendz.h"\r
\r
char *SendMoveToBookUser P((int nr, ChessProgramState *cps, int initial)); // [HGM] book\r
+void HandleMachineMove P((char *message, ChessProgramState *cps));\r
\r
static char zippyPartner[MSG_SIZ];\r
static char zippyLastOpp[MSG_SIZ];\r
+static char zippyOffender[MSG_SIZ]; // [HGM] aborter\r
static int zippyConsecGames;\r
static time_t zippyLastGameEnd;\r
\r
SendToICS("\n");\r
}\r
zippyLastGameEnd = time(0);\r
+ if(forwardMostMove < appData.zippyShortGame) \r
+ strcpy(zippyOffender, zippyLastOpp); else zippyOffender[0] = 0; // [HGM] aborter\r
}\r
\r
/*\r
return;\r
}\r
if (StrStr(appData.zippyVariants, varname) == NULL ||\r
- (i=first.protocolVersion) != 1 && StrStr(first.variants, varname) == NULL /* [HGM] zippyvar */\r
+ ((i=first.protocolVersion) != 1 && StrStr(first.variants, varname) == NULL) /* [HGM] zippyvar */\r
) {\r
sprintf(buf,\r
"%stell %s This computer can't play %s [%s], only %s\n%sdecline %s\n",\r
return;\r
}\r
\r
+ /* [HGM] aborter: opponent is cheater that aborts games he doesn't like on first move. Make him wait */\r
+ if (strcmp(opponent, zippyOffender) == 0 &&\r
+ difftime(time(0), zippyLastGameEnd) < appData.zippyReplayTimeout) {\r
+ sprintf(buf, "%stell %s Sorry, your previous game against %s was rather short. "\r
+ " It will wait %d seconds to see if a tougher opponent comes along.\n%sdecline %s\n",\r
+ ics_prefix, opponent, ics_handle,\r
+ appData.zippyReplayTimeout, ics_prefix, opponent);\r
+ SendToICS(buf);\r
+ return;\r
+ }\r
+\r
/* Engine not yet initialized or still thinking about last game? */\r
if (!first.initDone || first.lastPing != first.lastPong) {\r
sprintf(buf, "%stell %s I'm not quite ready for a new game yet; try again soon.\n%sdecline %s\n",\r