void BlindfoldProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void FlashMovesProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
-void GetMoveListProc P((Widget w, XEvent *event, String *prms,
- Cardinal *nprms));
void HighlightDraggingProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
void HighlightLastMoveProc P((Widget w, XEvent *event, String *prms,
{N_("Show Engine Output"), EngineOutputProc},
{N_("Show Evaluation Graph"), NothingProc}, // [HGM] evalgr: not functional yet
{N_("Show Game List"), ShowGameListProc},
- {"Show Move History", HistoryShowProc}, // [HGM] hist: activate 4.2.7 code
+ // {"Show Move History", HistoryShowProc}, // [HGM] hist: activate 4.2.7 code
{"----", NothingProc},
{N_("Edit Tags"), EditTagsProc},
{N_("Edit Comment"), EditCommentProc},
{N_("Auto Save"), AutosaveProc},
{N_("Blindfold"), BlindfoldProc},
{N_("Flash Moves"), FlashMovesProc},
- {N_("Get Move List"), GetMoveListProc},
+ // {N_("Get Move List"), GetMoveListProc},
#if HIGHDRAG
{N_("Highlight Dragging"), HighlightDraggingProc},
#endif
{ "localLineEditing", "localLineEditing", XtRBoolean,
sizeof(Boolean), XtOffset(AppDataPtr, localLineEditing),
XtRImmediate, (XtPointer) True }, /* not implemented, must be True */
-#ifdef ZIPPY
+#if ZIPPY
{ "zippyTalk", "zippyTalk", XtRBoolean,
sizeof(Boolean), XtOffset(AppDataPtr, zippyTalk),
XtRImmediate, (XtPointer) ZIPPY_TALK },
{ "adjudicateLossThreshold", "adjudicateLossThreshold", XtRInt,
sizeof(int), XtOffset(AppDataPtr, adjudicateLossThreshold),
XtRImmediate, (XtPointer) 0},
+ { "adjudicateDrawMoves", "adjudicateDrawMoves", XtRInt,
+ sizeof(int), XtOffset(AppDataPtr, adjudicateDrawMoves),
+ XtRImmediate, (XtPointer) 0},
{ "pgnEventHeader", "pgnEventHeader", XtRString,
sizeof(String), XtOffset(AppDataPtr, pgnEventHeader),
XtRImmediate, (XtPointer) "Computer Chess Game" },
XtRImmediate, (XtPointer) "xboard.debug"},
{ "engineDebugOutput", "engineDebugOutput", XtRInt,
sizeof(int), XtOffset(AppDataPtr, engineComments),
- XtRImmediate, (XtPointer) 0},
+ XtRImmediate, (XtPointer) 1},
{ "noGUI", "noGUI", XtRBoolean,
sizeof(Boolean), XtOffset(AppDataPtr, noGUI),
XtRImmediate, (XtPointer) 0},
{ "delayAfterQuit", "delayAfterQuit", XtRInt,
sizeof(int), XtOffset(AppDataPtr, delayAfterQuit),
XtRImmediate, (XtPointer) 0},
+ { "keepAlive", "keepAlive", XtRInt,
+ sizeof(int), XtOffset(AppDataPtr, keepAlive),
+ XtRImmediate, (XtPointer) 0},
};
XrmOptionDescRec shellOptions[] = {
{ "-pgnExtendedInfo", "pgnExtendedInfo", XrmoptionSepArg, NULL },
{ "-hideThinkingFromHuman", "hideThinkingFromHuman", XrmoptionSepArg, NULL },
{ "-adjudicateLossThreshold", "adjudicateLossThreshold", XrmoptionSepArg, NULL },
+ { "-adjudicateDrawMoves", "adjudicateDrawMoves", XrmoptionSepArg, NULL },
{ "-pgnEventHeader", "pgnEventHeader", XrmoptionSepArg, NULL },
{ "-firstIsUCI", "firstIsUCI", XrmoptionSepArg, NULL },
{ "-secondIsUCI", "secondIsUCI", XrmoptionSepArg, NULL },
{ "-secondOptions", "secondOptions", XrmoptionSepArg, NULL },
{ "-firstNeedsNoncompliantFEN", "firstNeedsNoncompliantFEN", XrmoptionSepArg, NULL },
{ "-secondNeedsNoncompliantFEN", "secondNeedsNoncompliantFEN", XrmoptionSepArg, NULL },
+ { "-keepAlive", "keepAlive", XrmoptionSepArg, NULL },
};
{ "TrainingProc", EditPositionProc },
{ "EngineOutputProc", EngineOutputProc}, // [HGM] Winboard_x engine-output window
{ "ShowGameListProc", ShowGameListProc },
- { "ShowMoveListProc", HistoryShowProc},
+ // { "ShowMoveListProc", HistoryShowProc},
{ "EditTagsProc", EditCommentProc },
{ "EditCommentProc", EditCommentProc },
{ "IcsAlarmProc", IcsAlarmProc },
{ "BlindfoldProc", BlindfoldProc },
{ "FlashMovesProc", FlashMovesProc },
// { "FlipViewProc", FlipViewProc },
- { "GetMoveListProc", GetMoveListProc },
+ // { "GetMoveListProc", GetMoveListProc },
#if HIGHDRAG
{ "HighlightDraggingProc", HighlightDraggingProc },
#endif
{ "AskQuestionPopDown", (XtActionProc) AskQuestionPopDown },
{ "GameListPopDown", (XtActionProc) GameListPopDown },
{ "PromotionPopDown", (XtActionProc) PromotionPopDown },
- { "HistoryPopDown", (XtActionProc) HistoryPopDown },
+ // { "HistoryPopDown", (XtActionProc) HistoryPopDown },
{ "EngineOutputPopDown", (XtActionProc) EngineOutputPopDown },
{ "ShufflePopDown", (XtActionProc) ShufflePopDown },
{ "EnginePopDown", (XtActionProc) EnginePopDown },
}
#ifdef GOTHIC
if(gameInfo.variant == VariantGothic) {
- ximMaskPm[(int)WhiteMarshall] = ximMaskPm2[i][(int)WhiteSilver];
+ ximMaskPm[(int)WhiteMarshall] = ximMaskPm2[(int)WhiteSilver];
}
#endif
#endif
}
#endif
+void EscapeExpand(char *p, char *q)
+{ // [HGM] initstring: routine to shape up string arguments
+ while(*p++ = *q++) if(p[-1] == '\\')
+ switch(*q++) {
+ case 'n': p[-1] = '\n'; break;
+ case 'r': p[-1] = '\r'; break;
+ case 't': p[-1] = '\t'; break;
+ case '\\': p[-1] = '\\'; break;
+ case 0: *p = 0; return;
+ default: p[-1] = q[-1]; break;
+ }
+}
+
int
main(argc, argv)
int argc;
argvCopy[j] = NULL;
argv = argvCopy;
argc = j;
-#if 0
- if(appData.debugMode,1) { // OK, appData is not initialized here yet...
- for(i=0; i<argc; i++) fprintf(stderr, "argv[%2d] = '%s'\n", i, argv[i]);
- }
#endif
-#endif
-
setbuf(stdout, NULL);
setbuf(stderr, NULL);
GUI_Window = GTK_WIDGET (gtk_builder_get_object (builder, "MainWindow"));
if(!GUI_Window) printf("Error: gtk_builder didn't work!\n");
+
+ GUI_History = GTK_WIDGET (gtk_builder_get_object (builder, "MoveHistory"));
+ if(!GUI_History) printf("Error: gtk_builder didn't work!\n");
+
GUI_Board = GTK_WIDGET (gtk_builder_get_object (builder, "Board"));
if(!GUI_Board) printf("Error: gtk_builder didn't work!\n");
+
GUI_Whiteclock = GTK_WIDGET (gtk_builder_get_object (builder, "WhiteClock"));
if(!GUI_Whiteclock) printf("Error: gtk_builder didn't work!\n");
+
GUI_Blackclock = GTK_WIDGET (gtk_builder_get_object (builder, "BlackClock"));
if(!GUI_Blackclock) printf("Error: gtk_builder didn't work!\n");
+ LIST_MoveHistory = GTK_LIST_STORE (gtk_builder_get_object (builder, "MoveHistoryStore"));
+ if(!LIST_MoveHistory) printf("Error: gtk_builder didn't work!\n");
+
+
gtk_builder_connect_signals (builder, NULL);
// don't unref the builder, since we use it to get references to widgets
clientResources, XtNumber(clientResources),
NULL, 0);
+ { // [HGM] initstring: kludge to fix bad bug. expand '\n' characters in init string and computer string.
+ static char buf[MSG_SIZ];
+ EscapeExpand(buf, appData.initString);
+ appData.initString = strdup(buf);
+ EscapeExpand(buf, appData.secondInitString);
+ appData.secondInitString = strdup(buf);
+ EscapeExpand(buf, appData.firstComputerString);
+ appData.firstComputerString = strdup(buf);
+ EscapeExpand(buf, appData.secondComputerString);
+ appData.secondComputerString = strdup(buf);
+ }
+
+ if ((chessDir = (char *) getenv("CHESSDIR")) == NULL) {
+ chessDir = ".";
+ } else {
+ if (chdir(chessDir) != 0) {
+ fprintf(stderr, _("%s: can't cd to CHESSDIR: "), programName);
+ perror(chessDir);
+ exit(1);
+ }
+ }
+
if (appData.debugMode && appData.nameOfDebugFile && strcmp(appData.nameOfDebugFile, "stderr")) {
/* [DM] debug info to file [HGM] make the filename a command-line option, and allow it to remain stderr */
if ((debugFP = fopen(appData.nameOfDebugFile, "w")) == NULL) {
x >= 0 && y >= 0) {
ChessSquare fromP;
ChessSquare toP;
+ int frc;
/* Check if clicking again on the same color piece */
fromP = boards[currentMove][fromY][fromX];
toP = boards[currentMove][y][x];
- if ((WhitePawn <= fromP && fromP < WhiteKing && // [HGM] this test should go, as UserMoveTest now does it.
- WhitePawn <= toP && toP <= WhiteKing) || // For now I made it less critical by exempting King
- (BlackPawn <= fromP && fromP < BlackKing && // moves, to not interfere with FRC castlings.
- BlackPawn <= toP && toP <= BlackKing)) {
+ frc = gameInfo.variant == VariantFischeRandom || gameInfo.variant == VariantCapaRandom;
+ if ((WhitePawn <= fromP && fromP <= WhiteKing && // [HGM] this test should go, as UserMoveTest now does it.
+ WhitePawn <= toP && toP <= WhiteKing &&
+ !(fromP == WhiteKing && toP == WhiteRook && frc)) ||
+ (BlackPawn <= fromP && fromP <= BlackKing &&
+ BlackPawn <= toP && toP <= BlackKing &&
+ !(fromP == BlackKing && toP == BlackRook && frc))) {
/* Clicked again on same color piece -- changed his mind */
second = (x == fromX && y == fromY);
if (appData.highlightDragging) {
char *title;
{
cmailMsgLoaded = FALSE;
- if (gameNumber == 0) {
+
+ if (gameNumber == 0)
+ {
int error = GameListBuild(f);
- if (error) {
+
+ if (error)
+ {
DisplayError(_("Cannot build game list"), error);
- } else if (!ListEmpty(&gameList) &&
- ((ListGame *) gameList.tailPred)->number > 1) {
+ }
+ else if (!ListEmpty(&gameList)
+ && ((ListGame *) gameList.tailPred)->number > 1)
+ {
GameListPopUp(f, title);
return TRUE;
- }
+ };
+
GameListDestroy();
gameNumber = 1;
- }
+ };
+
return LoadGame(f, gameNumber, title, FALSE);
}
args, 1);
}
-void GetMoveListProc(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
-{
- Arg args[16];
-
- appData.getMoveList = !appData.getMoveList;
-
- if (appData.getMoveList) {
- XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
- GetMoveListEvent();
- } else {
- XtSetArg(args[0], XtNleftBitmap, None);
- }
- XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Get Move List"),
- args, 1);
-}
-
#if HIGHDRAG
void HighlightDraggingProc(w, event, prms, nprms)
Widget w;
ScheduleDelayedEvent(cb, millisec)
DelayedEventCallback cb; guint millisec;
{
+ if(delayedEventTimerTag && delayedEventCallback == cb)
+ // [HGM] alive: replace, rather than add or flush identical event
+ g_source_remove(delayedEventTimerTag);
delayedEventCallback = cb;
delayedEventTimerTag = g_timeout_add(millisec,(GSourceFunc) FireDelayedEvent, NULL);
return;