X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=backend.c;h=e1b7d9dbb15c207d3a6e04e9e7f6afc4c2dc8ceb;hb=66fd3db23545caa404030583316767b938c4f739;hp=e65421c1c91fc2e3eb2fe73df24608c57b896d49;hpb=d6f2e410787f82be2e56856dbbc9b18717dee9dc;p=xboard.git diff --git a/backend.c b/backend.c index e65421c..e1b7d9d 100644 --- a/backend.c +++ b/backend.c @@ -249,6 +249,7 @@ int lastSavedGame; /* [HGM] save: ID of game */ char chatPartner[MAX_CHAT][MSG_SIZ]; /* [HGM] chat: list of chatting partners */ extern int chatCount; int chattingPartner; +char marker[BOARD_RANKS][BOARD_FILES]; /* [HGM] marks for target squares */ /* States for ics_getting_history */ #define H_FALSE 0 @@ -5634,6 +5635,43 @@ if(appData.debugMode) fprintf(debugFP, "moveType 4 = %d, promochar = %x\n", move FinishMove(moveType, fromX, fromY, toX, toY, promoChar); } +void +Mark(board, flags, kind, rf, ff, rt, ft, closure) + Board board; + int flags; + ChessMove kind; + int rf, ff, rt, ft; + VOIDSTAR closure; +{ + typedef char Markers[BOARD_RANKS][BOARD_FILES]; + Markers *m = (Markers *) closure; + if(rf == fromY && ff == fromX) + (*m)[rt][ft] = 1 + (board[rt][ft] != EmptySquare + || kind == WhiteCapturesEnPassant + || kind == BlackCapturesEnPassant); + else if(flags & F_MANDATORY_CAPTURE && board[rt][ft] != EmptySquare) (*m)[rt][ft] = 3; +} + +void +MarkTargetSquares(int clear) +{ + int x, y; + if(!appData.markers || !appData.highlightDragging || + !appData.testLegality || gameMode == EditPosition) return; + if(clear) { + for(x=0; x1) capt++; + if(capt) + for(x=0; x