# endif
#endif
-
-# if HAVE_LIBREADLINE /* add gnu-readline support */
-#include <readline/readline.h>
-#include <readline/history.h>
-# endif
-
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Shell.h>
void update_ics_width P(());
int get_term_width P(());
int CopyMemoProc P(());
-
-# if HAVE_LIBREADLINE /* add gnu-readline support */
-static void ReadlineCompleteHandler P((char *));
-# endif
-
/*
* XBoard depends on Xt R4 or higher
*/
char *fileOpenMode;
char installDir[] = "."; // [HGM] UCI: needed for UCI; probably needs run-time initializtion
-# if HAVE_LIBREADLINE /* gnu readline support */
-static char* readline_buffer;
-static int readline_complete=0;
-extern int sending_ICS_login;
-extern int sending_ICS_password;
-#endif
-
Position commentX = -1, commentY = -1;
Dimension commentW, commentH;
typedef unsigned int BoardSize;
{N_("New Variant ..."), NewVariantProc}, // [HGM] variant: not functional yet
{"----", NothingProc},
{N_("Load Game"), LoadGameProc},
- {N_("Load Next Game"), LoadNextGameProc},
- {N_("Load Previous Game"), LoadPrevGameProc},
- {N_("Reload Same Game"), ReloadGameProc},
+ {N_("Load Position"), LoadPositionProc},
+// {N_("Load Next Game"), LoadNextGameProc},
+// {N_("Load Previous Game"), LoadPrevGameProc},
+// {N_("Reload Same Game"), ReloadGameProc},
+ {"----", NothingProc},
+// {N_("Load Next Position"), LoadNextPositionProc},
+// {N_("Load Previous Position"), LoadPrevPositionProc},
+// {N_("Reload Same Position"), ReloadPositionProc},
{N_("Save Game"), SaveGameProc},
+ {N_("Save Position"), SavePositionProc},
{"----", NothingProc},
+ {N_("Mail Move"), MailMoveProc},
+ {N_("Reload CMail Message"), ReloadCmailMsgProc},
+ {"----", NothingProc},
+ {N_("Exit"), QuitProc},
+ {NULL, NULL}
+};
+
+MenuItem editMenu[] = {
{N_("Copy Game"), CopyGameProc},
+ {N_("Copy Position"), CopyPositionProc},
+ {"----", NothingProc},
{N_("Paste Game"), PasteGameProc},
+ {N_("Paste Position"), PastePositionProc},
{"----", NothingProc},
- {N_("Load Position"), LoadPositionProc},
- {N_("Load Next Position"), LoadNextPositionProc},
- {N_("Load Previous Position"), LoadPrevPositionProc},
- {N_("Reload Same Position"), ReloadPositionProc},
- {N_("Save Position"), SavePositionProc},
+ {N_("Edit Game"), EditGameProc},
+ {N_("Edit Position"), EditPositionProc},
{"----", NothingProc},
- {N_("Copy Position"), CopyPositionProc},
- {N_("Paste Position"), PastePositionProc},
+ {N_("Edit Tags"), EditTagsProc},
+ {N_("Edit Comment"), EditCommentProc},
{"----", NothingProc},
- {N_("Mail Move"), MailMoveProc},
- {N_("Reload CMail Message"), ReloadCmailMsgProc},
+ {N_("Revert"), RevertProc},
+ {N_("Annotate"), AnnotateProc},
+ {N_("Truncate Game"), TruncateGameProc},
{"----", NothingProc},
- {N_("Exit"), QuitProc},
+ {N_("Backward"), BackwardProc},
+ {N_("Forward"), ForwardProc},
+ {N_("Back to Start"), ToStartProc},
+ {N_("Forward to End"), ToEndProc},
+ {NULL, NULL}
+};
+
+MenuItem viewMenu[] = {
+ {N_("Flip View"), FlipViewProc},
+ {"----", NothingProc},
+ {N_("Show Engine Output"), EngineOutputProc},
+ {N_("Show Evaluation Graph"), EvalGraphProc},
+ {N_("Show Game List"), ShowGameListProc},
+ {N_("Show Move History"), HistoryShowProc}, // [HGM] hist: activate 4.2.7 code
+ {"----", NothingProc},
+ {N_("Show Tags"), EditTagsProc},
+ {N_("Show Comments"), EditCommentProc},
+ {N_("ICS Input Box"), IcsInputBoxProc},
{NULL, NULL}
};
{N_("Two Machines"), TwoMachinesProc},
{N_("Analysis Mode"), AnalyzeModeProc},
{N_("Analyze File"), AnalyzeFileProc },
- {N_("ICS Client"), IcsClientProc},
{N_("Edit Game"), EditGameProc},
{N_("Edit Position"), EditPositionProc},
{N_("Training"), TrainingProc},
+ {N_("ICS Client"), IcsClientProc},
{"----", NothingProc},
- {N_("Show Engine Output"), EngineOutputProc},
- {N_("Show Evaluation Graph"), EvalGraphProc},
- {N_("Show Game List"), ShowGameListProc},
- {N_("Show Move History"), HistoryShowProc}, // [HGM] hist: activate 4.2.7 code
- {"----", NothingProc},
- {N_("Edit Tags"), EditTagsProc},
- {N_("Edit Comment"), EditCommentProc},
- {N_("ICS Input Box"), IcsInputBoxProc},
{N_("Pause"), PauseProc},
{NULL, NULL}
};
{NULL, NULL}
};
-MenuItem stepMenu[] = {
- {N_("Backward"), BackwardProc},
- {N_("Forward"), ForwardProc},
- {N_("Back to Start"), ToStartProc},
- {N_("Forward to End"), ToEndProc},
- {N_("Revert"), RevertProc},
- {N_("Annotate"), AnnotateProc},
- {N_("Truncate Game"), TruncateGameProc},
+MenuItem engineMenu[] = {
+ {N_("Engine #1 Settings"), FirstSettingsProc},
+ {N_("Engine #2 Settings"), SecondSettingsProc},
{"----", NothingProc},
{N_("Move Now"), MoveNowProc},
{N_("Retract Move"), RetractMoveProc},
};
MenuItem optionsMenu[] = {
- {N_("Flip View"), FlipViewProc},
- {"----", NothingProc},
- {N_("Adjudications ..."), EngineMenuProc},
- {N_("General Settings ..."), UciMenuProc},
- {N_("Engine #1 Settings ..."), FirstSettingsProc},
- {N_("Engine #2 Settings ..."), SecondSettingsProc},
{N_("Time Control ..."), TimeControlProc},
+ {N_("Common Engine ..."), UciMenuProc},
+ {N_("Adjudications ..."), EngineMenuProc},
{N_("Game List ..."), GameListOptionsPopUp},
{"----", NothingProc},
{N_("Always Queen"), AlwaysQueenProc},
Menu menuBar[] = {
{N_("File"), fileMenu},
+ {N_("Edit"), editMenu},
+ {N_("View"), viewMenu},
{N_("Mode"), modeMenu},
{N_("Action"), actionMenu},
- {N_("Step"), stepMenu},
+ {N_("Engine"), engineMenu},
{N_("Options"), optionsMenu},
{N_("Help"), helpMenu},
{NULL, NULL}
xpmPieceBitmap[i][(int)WhiteMarshall] = xpmPieceBitmap2[i][(int)WhiteSilver];
}
#endif
+ if(gameInfo.variant == VariantSChess && (squareSize == 49 || squareSize == 72)) {
+ xpmPieceBitmap[i][(int)WhiteAngel] = xpmPieceBitmap2[i][(int)WhiteFalcon];
+ xpmPieceBitmap[i][(int)WhiteMarshall] = xpmPieceBitmap2[i][(int)WhiteAlfil];
+ }
#if !HAVE_LIBXPM
// [HGM] why are thee ximMasks used at all? the ximPieceBitmaps seem to be never used!
for(p=0; p<=(int)WhiteKing; p++)
ximMaskPm[(int)WhiteMarshall] = ximMaskPm2[(int)WhiteSilver];
}
#endif
+ if(gameInfo.variant == VariantSChess && (squareSize == 49 || squareSize == 72)) {
+ ximMaskPm[(int)WhiteAngel] = ximMaskPm2[(int)WhiteFalcon];
+ ximMaskPm[(int)WhiteMarshall] = ximMaskPm2[(int)WhiteAlfil];
+ }
#endif
}
} else {
pieceBitmap[i][(int)WhiteMarshall] = pieceBitmap2[i][(int)WhiteSilver];
}
#endif
+ if(gameInfo.variant == VariantSChess && (squareSize == 49 || squareSize == 72)) {
+ pieceBitmap[i][(int)WhiteAngel] = pieceBitmap2[i][(int)WhiteFalcon];
+ pieceBitmap[i][(int)WhiteMarshall] = pieceBitmap2[i][(int)WhiteAlfil];
+ }
}
}
#if HAVE_LIBXPM
setbuf(stdout, NULL);
setbuf(stderr, NULL);
debugFP = stderr;
-
-# if HAVE_LIBREADLINE
- /* install gnu-readline handler */
- rl_callback_handler_install("> ", ReadlineCompleteHandler);
- rl_readline_name="XBoard";
-# endif
if(argc > 1 && (!strcmp(argv[1], "-v" ) || !strcmp(argv[1], "--version" ))) {
printf("%s version %s\n", PACKAGE_NAME, PACKAGE_VERSION);
if (saveSettingsOnExit) SaveSettings(settingsFileName);
unlink(gameCopyFilename);
unlink(gamePasteFilename);
-
-# if HAVE_LIBREADLINE
- /* remove gnu-readline handler. */
- rl_callback_handler_remove();
-#endif
-
- return;
}
RETSIGTYPE TermSizeSigHandler(int sig)
{
Widget w;
if (!menuBarWidget) return;
- w = XtNameToWidget(menuBarWidget, "menuStep.Revert");
+ w = XtNameToWidget(menuBarWidget, "menuEdit.Revert");
if (w == NULL) {
- DisplayError("menuStep.Revert", 0);
+ DisplayError("menuEdit.Revert", 0);
} else {
XtSetSensitive(w, !grey);
}
- w = XtNameToWidget(menuBarWidget, "menuStep.Annotate");
+ w = XtNameToWidget(menuBarWidget, "menuEdit.Annotate");
if (w == NULL) {
- DisplayError("menuStep.Annotate", 0);
+ DisplayError("menuEdit.Annotate", 0);
} else {
XtSetSensitive(w, !grey);
}
#ifndef ZIPPY
{ "menuHelp.Hint", False },
{ "menuHelp.Book", False },
- { "menuStep.Move Now", False },
+ { "menuEngine.Move Now", False },
{ "menuOptions.Periodic Updates", False },
{ "menuOptions.Hide Thinking", False },
{ "menuOptions.Ponder Next Move", False },
+ { "menuEngine.Engine #1 Settings", False },
#endif
- { "menuStep.Annotate", False },
+ { "menuEngine.Engine #2 Settings", False },
+ { "menuEdit.Annotate", False },
{ NULL, False }
};
{ "menuMode.Analyze File", False },
{ "menuMode.Two Machines", False },
{ "menuMode.ICS Client", False },
- { "menuMode.ICS Input Box", False },
+ { "menuView.ICS Input Box", False },
{ "Action", False },
- { "menuStep.Revert", False },
- { "menuStep.Annotate", False },
- { "menuStep.Move Now", False },
- { "menuStep.Retract Move", False },
+ { "menuEdit.Revert", False },
+ { "menuEdit.Annotate", False },
+ { "menuEngine.Engine #1 Settings", False },
+ { "menuEngine.Engine #2 Settings", False },
+ { "menuEngine.Move Now", False },
+ { "menuEngine.Retract Move", False },
{ "menuOptions.Auto Comment", False },
{ "menuOptions.Auto Flag", False },
{ "menuOptions.Auto Flip View", False },
Enables gnuEnables[] = {
{ "menuMode.ICS Client", False },
- { "menuMode.ICS Input Box", False },
+ { "menuView.ICS Input Box", False },
{ "menuAction.Accept", False },
{ "menuAction.Decline", False },
{ "menuAction.Rematch", False },
{ "menuAction.Stop Examining", False },
{ "menuAction.Stop Observing", False },
{ "menuAction.Upload to Examine", False },
- { "menuStep.Revert", False },
- { "menuStep.Annotate", False },
+ { "menuEdit.Revert", False },
+ { "menuEdit.Annotate", False },
{ "menuOptions.Auto Comment", False },
{ "menuOptions.Auto Observe", False },
{ "menuOptions.Auto Raise Board", False },
Enables trainingOnEnables[] = {
{ "menuMode.Edit Comment", False },
{ "menuMode.Pause", False },
- { "menuStep.Forward", False },
- { "menuStep.Backward", False },
- { "menuStep.Forward to End", False },
- { "menuStep.Back to Start", False },
- { "menuStep.Move Now", False },
- { "menuStep.Truncate Game", False },
+ { "menuEdit.Forward", False },
+ { "menuEdit.Backward", False },
+ { "menuEdit.Forward to End", False },
+ { "menuEdit.Back to Start", False },
+ { "menuEngine.Move Now", False },
+ { "menuEdit.Truncate Game", False },
{ NULL, False }
};
Enables trainingOffEnables[] = {
{ "menuMode.Edit Comment", True },
{ "menuMode.Pause", True },
- { "menuStep.Forward", True },
- { "menuStep.Backward", True },
- { "menuStep.Forward to End", True },
- { "menuStep.Back to Start", True },
- { "menuStep.Move Now", True },
- { "menuStep.Truncate Game", True },
+ { "menuEdit.Forward", True },
+ { "menuEdit.Backward", True },
+ { "menuEdit.Forward to End", True },
+ { "menuEdit.Back to Start", True },
+ { "menuEngine.Move Now", True },
+ { "menuEdit.Truncate Game", True },
{ NULL, False }
};
Enables machineThinkingEnables[] = {
{ "menuFile.Load Game", False },
- { "menuFile.Load Next Game", False },
- { "menuFile.Load Previous Game", False },
- { "menuFile.Reload Same Game", False },
- { "menuFile.Paste Game", False },
+// { "menuFile.Load Next Game", False },
+// { "menuFile.Load Previous Game", False },
+// { "menuFile.Reload Same Game", False },
+ { "menuEdit.Paste Game", False },
{ "menuFile.Load Position", False },
- { "menuFile.Load Next Position", False },
- { "menuFile.Load Previous Position", False },
- { "menuFile.Reload Same Position", False },
- { "menuFile.Paste Position", False },
+// { "menuFile.Load Next Position", False },
+// { "menuFile.Load Previous Position", False },
+// { "menuFile.Reload Same Position", False },
+ { "menuEdit.Paste Position", False },
{ "menuMode.Machine White", False },
{ "menuMode.Machine Black", False },
{ "menuMode.Two Machines", False },
- { "menuStep.Retract Move", False },
+ { "menuEngine.Retract Move", False },
{ NULL, False }
};
Enables userThinkingEnables[] = {
{ "menuFile.Load Game", True },
- { "menuFile.Load Next Game", True },
- { "menuFile.Load Previous Game", True },
- { "menuFile.Reload Same Game", True },
- { "menuFile.Paste Game", True },
+// { "menuFile.Load Next Game", True },
+// { "menuFile.Load Previous Game", True },
+// { "menuFile.Reload Same Game", True },
+ { "menuEdit.Paste Game", True },
{ "menuFile.Load Position", True },
- { "menuFile.Load Next Position", True },
- { "menuFile.Load Previous Position", True },
- { "menuFile.Reload Same Position", True },
- { "menuFile.Paste Position", True },
+// { "menuFile.Load Next Position", True },
+// { "menuFile.Load Previous Position", True },
+// { "menuFile.Reload Same Position", True },
+ { "menuEdit.Paste Position", True },
{ "menuMode.Machine White", True },
{ "menuMode.Machine Black", True },
{ "menuMode.Two Machines", True },
- { "menuStep.Retract Move", True },
+ { "menuEngine.Retract Move", True },
{ NULL, False }
};
}
if (!lastBoardValid[nr] || (nr == 0 && lastFlipView != flipView)) {
XtSetArg(args[0], XtNleftBitmap, (flipView ? xMarkPixmap : None));
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Flip View"),
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuView.Flip View"),
args, 1);
}
editUp = True;
j = 0;
XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++;
- XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Edit Comment"),
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuEdit.Edit Comment"),
+ args, j);
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuView.Show Comments"),
args, j);
}
editUp = False;
j = 0;
XtSetArg(args[j], XtNleftBitmap, None); j++;
- XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Edit Comment"),
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuEdit.Edit Comment"),
+ args, j);
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuView.Show Comments"),
args, j);
}
ICSInputBoxUp = True;
j = 0;
XtSetArg(args[j], XtNleftBitmap, xMarkPixmap); j++;
- XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.ICS Input Box"),
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuView.ICS Input Box"),
args, j);
}
ICSInputBoxUp = False;
j = 0;
XtSetArg(args[j], XtNleftBitmap, None); j++;
- XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.ICS Input Box"),
+ XtSetValues(XtNameToWidget(menuBarWidget, "menuView.ICS Input Box"),
args, j);
}
* automatically call XtFree on the value returned. So have to
* make a copy of it allocated with XtMalloc */
selection_tmp= XtMalloc(strlen(selected_fen_position)+16);
- safeStrCpy(selection_tmp, selected_fen_position, sizeof(selection_tmp)/sizeof(selection_tmp[0]) );
+ safeStrCpy(selection_tmp, selected_fen_position, strlen(selected_fen_position)+16 );
*value_return=selection_tmp;
*length_return=strlen(selection_tmp);
}
else {
safeStrCpy(buf, s+1, sizeof(buf)/sizeof(buf[0]) );
- *strchr(buf, '/') = 0;
+ { char *p; if(p = strchr(buf, '/')) *p = 0; }
pwd = getpwnam(buf);
if (!pwd)
{
}
q = is->buf;
while (p < is->unused) {
- *q++ = *p++;
+ *q++ = *p++;
}
is->unused = q;
} else {
-# if HAVE_LIBREADLINE
- /* check if input is from stdin, if yes, use gnu-readline */
- if( is->fd==fileno(stdin) )
- {
- /* to clear the line */
- printf("\r \r");
-
- /* read from stdin */
- rl_callback_read_char();
-
- /* redisplay the current line, check special case for login and password */
- if(sending_ICS_password)
- {
- int i; char buf[MSG_SIZ];
-
- bzero(buf,MSG_SIZ);
-
- /* blank the password */
- count = strlen(rl_line_buffer);
- if(count>MSG_SIZ-1)
- {
- printf("PROBLEM with readline\n");
- count=MSG_SIZ;
- }
- for(i=0;i<count;i++)
- buf[i]='*';
- i++;
- buf[i]='\0';
- printf("\rpassword: %s",buf);
- }
- else if (sending_ICS_login)
- {
- /* show login prompt */
- count = strlen(rl_line_buffer);
- printf("\rlogin: %s",rl_line_buffer);
- }
- else
- rl_reset_line_state();
-
- if(readline_complete)
- {
- /* copy into XBoards buffer */
- count = strlen(readline_buffer);
- if (count>INPUT_SOURCE_BUF_SIZE-1)
- {
- printf("PROBLEM with readline\n");
- count = INPUT_SOURCE_BUF_SIZE;
- };
- strncpy(is->buf,readline_buffer,count);
- is->buf[count]='\n';count++;
-
- /* reset gnu-readline state */
- free(readline_buffer);
- readline_buffer=NULL;
- readline_complete=0;
-
- if (count == -1)
- error = errno;
- else
- error = 0;
- (is->func)(is, is->closure, is->buf, count, error);
-
- /* are we done with the password? */
- if(sending_ICS_password)
- sending_ICS_password=0;
- if(sending_ICS_login)
- sending_ICS_login=0;
- }
- }
- else
- {
- /* input not from stdin, use default method */
- count = read(is->fd, is->buf, INPUT_SOURCE_BUF_SIZE);
- if (count == -1)
- error = errno;
- else
- error = 0;
- (is->func)(is, is->closure, is->buf, count, error);
- };
-#else /* no readline support */
- count = read(is->fd, is->buf, INPUT_SOURCE_BUF_SIZE);
- if (count == -1)
- error = errno;
- else
- error = 0;
- (is->func)(is, is->closure, is->buf, count, error);
-#endif
-
+ count = read(is->fd, is->buf, INPUT_SOURCE_BUF_SIZE);
+ if (count == -1)
+ error = errno;
+ else
+ error = 0;
+ (is->func)(is, is->closure, is->buf, count, error);
}
}
ChildProc *cp = (ChildProc *) pr;
int outCount;
-
if (pr == NoProc)
{
- if (appData.noJoin || !appData.useInternalWrap)
- outCount = fwrite(message, 1, count, stdout);
- else
+ if (appData.noJoin || !appData.useInternalWrap)
+ outCount = fwrite(message, 1, count, stdout);
+ else
{
- int width = get_term_width();
- int len = wrap(NULL, message, count, width, &line);
- char *msg = malloc(len);
- int dbgchk;
-
- if (!msg)
- outCount = fwrite(message, 1, count, stdout);
- else
+ int width = get_term_width();
+ int len = wrap(NULL, message, count, width, &line);
+ char *msg = malloc(len);
+ int dbgchk;
+
+ if (!msg)
+ outCount = fwrite(message, 1, count, stdout);
+ else
{
- dbgchk = wrap(msg, message, count, width, &line);
- if (dbgchk != len && appData.debugMode)
- fprintf(debugFP, "wrap(): dbgchk(%d) != len(%d)\n", dbgchk, len);
- outCount = fwrite(msg, 1, dbgchk, stdout);
- free(msg);
+ dbgchk = wrap(msg, message, count, width, &line);
+ if (dbgchk != len && appData.debugMode)
+ fprintf(debugFP, "wrap(): dbgchk(%d) != len(%d)\n", dbgchk, len);
+ outCount = fwrite(msg, 1, dbgchk, stdout);
+ free(msg);
}
}
-
-# if HAVE_LIBREADLINE
- /* readline support */
- if(strlen(rl_line_buffer))
- printf("\n> %s",rl_line_buffer);
-#endif
-
}
else
outCount = write(cp->fdTo, message, count);
EndAnimation(anim, finish);
}
+void
+AnimateAtomicCapture(Board board, int fromX, int fromY, int toX, int toY)
+{
+ int i, x, y;
+ ChessSquare piece = board[fromY][toY];
+ board[fromY][toY] = EmptySquare;
+ DrawPosition(FALSE, board);
+ if (flipView) {
+ x = lineGap + ((BOARD_WIDTH-1)-toX) * (squareSize + lineGap);
+ y = lineGap + toY * (squareSize + lineGap);
+ } else {
+ x = lineGap + toX * (squareSize + lineGap);
+ y = lineGap + ((BOARD_HEIGHT-1)-toY) * (squareSize + lineGap);
+ }
+ for(i=1; i<4*kFactor; i++) {
+ int r = squareSize * 9 * i/(20*kFactor - 5);
+ XFillArc(xDisplay, xBoardWindow, highlineGC,
+ x + squareSize/2 - r, y+squareSize/2 - r, 2*r, 2*r, 0, 64*360);
+ FrameDelay(appData.animSpeed);
+ }
+ board[fromY][toY] = piece;
+}
+
/* Main control logic for deciding what to animate and how */
void
#if DONT_HOP
hop = FALSE;
#else
- hop = (piece == WhiteKnight || piece == BlackKnight);
+ hop = abs(fromX-toX) == 1 && abs(fromY-toY) == 2 || abs(fromX-toX) == 2 && abs(fromY-toY) == 1;
#endif
if (appData.debugMode) {
ScreenSquare(toX, toY, &finish, &endColor);
if (hop) {
- /* Knight: make diagonal movement then straight */
+ /* Knight: make straight movement then diagonal */
if (abs(toY - fromY) < abs(toX - fromX)) {
mid.x = start.x + (finish.x - start.x) / 2;
- mid.y = finish.y;
+ mid.y = start.y;
} else {
- mid.x = finish.x;
+ mid.x = start.x;
mid.y = start.y + (finish.y - start.y) / 2;
}
} else {
else
Tween(&start, &mid, &finish, kFactor, frames, &nFrames);
FrameSequence(&game, piece, startColor, &start, &finish, frames, nFrames);
+ if(Explode(board, fromX, fromY, toX, toY)) { // mark as damaged
+ int i,j;
+ for(i=0; i<BOARD_WIDTH; i++) for(j=0; j<BOARD_HEIGHT; j++)
+ if((i-toX)*(i-toX) + (j-toY)*(j-toY) < 6) damage[0][j][i] = True;
+ }
/* Be sure end square is redrawn */
damage[0][toY][toX] = True;
XCopyArea(xDisplay, xBoardWindow, player.saveBuf, player.blitGC,
corner.x, corner.y, squareSize, squareSize,
0, 0); // [HGM] zh: unstack in stead of grab
+ if(gatingPiece != EmptySquare) {
+ /* Kludge alert: When gating we want the introduced
+ piece to appear on the from square. To generate an
+ image of it, we draw it on the board, copy the image,
+ and draw the original piece again. */
+ ChessSquare piece = boards[currentMove][boardY][boardX];
+ DrawSquare(boardY, boardX, gatingPiece, 0);
+ XCopyArea(xDisplay, xBoardWindow, player.saveBuf, player.blitGC,
+ corner.x, corner.y, squareSize, squareSize, 0, 0);
+ DrawSquare(boardY, boardX, piece, 0);
+ }
damage[0][boardY][boardX] = True;
} else {
player.dragActive = False;
{
update_ics_width();
}
-
-# if HAVE_LIBREADLINE
-static void
-ReadlineCompleteHandler(char* ptr)
-{
- /* make gnu-readline keep the history */
- readline_buffer = ptr;
- readline_complete = 1;
-
- if (ptr && *ptr && !sending_ICS_password && !sending_ICS_login)
- add_history(ptr);
-
- return;
-}
-#endif