RETSIGTYPE IntSigHandler P((int sig));
RETSIGTYPE TermSizeSigHandler P((int sig));
void CreateGCs P((int redo));
+void CreateAnyPieces P((void));
void CreateXIMPieces P((void));
void CreateXPMPieces P((void));
void CreateXPMBoard P((char *s, int n));
int EventToSquare P((int x, int limit));
void DrawSquare P((int row, int column, ChessSquare piece, int do_flash));
void EventProc P((Widget widget, caddr_t unused, XEvent *event));
+void MoveTypeInProc P((Widget widget, caddr_t unused, XEvent *event));
void HandleUserMove P((Widget w, XEvent *event,
String *prms, Cardinal *nprms));
void AnimateUserMove P((Widget w, XEvent * event,
void PastePositionProc P((Widget w, XEvent *event, String *prms,
Cardinal *nprms));
void CopyGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void CopyGameListProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void PasteGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void SaveGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void SavePositionProc P((Widget w, XEvent *event,
void AdjuWhiteProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void AdjuBlackProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void AdjuDrawProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+void TypeInProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void EnterKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void UpKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void DownKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
WindowPlacement wpGameList;
WindowPlacement wpTags;
+extern Widget shells[];
+extern Boolean shellUp[];
+
#define SOLID 0
#define OUTLINE 1
Pixmap pieceBitmap[2][(int)BlackPawn];
MenuItem editMenu[] = {
{N_("Copy Game Ctrl+C"), "Copy Game", CopyGameProc},
{N_("Copy Position Ctrl+Shift+C"), "Copy Position", CopyPositionProc},
+ {N_("Copy Game List"), "Copy Game List", CopyGameListProc},
{"----", NULL, NothingProc},
{N_("Paste Game Ctrl+V"), "Paste Game", PasteGameProc},
{N_("Paste Position Ctrl+Shift+V"), "Paste Position", PastePositionProc},
{ "CopyPositionProc", CopyPositionProc },
{ "PastePositionProc", PastePositionProc },
{ "CopyGameProc", CopyGameProc },
+ { "CopyGameListProc", CopyGameListProc },
{ "PasteGameProc", PasteGameProc },
{ "SaveGameProc", SaveGameProc },
{ "SavePositionProc", SavePositionProc },
{ "AdjuWhiteProc", AdjuWhiteProc },
{ "AdjuBlackProc", AdjuBlackProc },
{ "AdjuDrawProc", AdjuDrawProc },
+ { "TypeInProc", TypeInProc },
{ "EnterKeyProc", EnterKeyProc },
{ "UpKeyProc", UpKeyProc },
{ "DownKeyProc", DownKeyProc },
break;
}
for(i=0; i<MAX_SIZE; i++) if(fontValid[n][i]) // [HGM] font: store all standard fonts
- fprintf(f, OPTCHAR "%s" SEPCHAR "size%d:%s\n", ad->argName, i, fontTable[n][i]);
+ fprintf(f, OPTCHAR "%s" SEPCHAR "\"size%d:%s\"\n", ad->argName, i, fontTable[n][i]);
}
void
if(MoveHistoryIsUp()) GetActualPlacement(historyShell, &wpMoveHistory);
if(EvalGraphIsUp()) GetActualPlacement(evalGraphShell, &wpEvalGraph);
if(GameListIsUp()) GetActualPlacement(gameListShell, &wpGameList);
+ if(shellUp[1]) GetActualPlacement(shells[1], &wpComment);
+ if(shellUp[2]) GetActualPlacement(shells[2], &wpTags);
}
void
return forceMono;
}
+void
+CreateAnyPieces()
+{ // [HGM] taken out of main
+#if HAVE_LIBXPM
+ if (appData.monoMode && // [HGM] no sense to go on to certain doom
+ (appData.bitmapDirectory == NULL || appData.bitmapDirectory[0] == NULLCHAR))
+ appData.bitmapDirectory = DEF_BITMAP_DIR;
+
+ if (appData.bitmapDirectory[0] != NULLCHAR) {
+ CreatePieces();
+ } else {
+ CreateXPMPieces();
+ CreateXPMBoard(appData.liteBackTextureFile, 1);
+ CreateXPMBoard(appData.darkBackTextureFile, 0);
+ }
+#else
+ CreateXIMPieces();
+ /* Create regular pieces */
+ if (!useImages) CreatePieces();
+#endif
+}
+
int
main(argc, argv)
int argc;
{ // [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.firstInitString);
+ appData.firstInitString = strdup(buf);
EscapeExpand(buf, appData.secondInitString);
appData.secondInitString = strdup(buf);
EscapeExpand(buf, appData.firstComputerString);
if (forceMono) {
fprintf(stderr, _("%s: too few colors available; trying monochrome mode\n"),
programName);
-
- if (appData.bitmapDirectory == NULL ||
- appData.bitmapDirectory[0] == NULLCHAR)
- appData.bitmapDirectory = DEF_BITMAP_DIR;
+ appData.monoMode = True;
}
if (appData.lowTimeWarning && !appData.monoMode) {
CreateGCs(False);
CreateGrid();
-#if HAVE_LIBXPM
- if (appData.bitmapDirectory[0] != NULLCHAR) {
- CreatePieces();
- } else {
- CreateXPMPieces();
- CreateXPMBoard(appData.liteBackTextureFile, 1);
- CreateXPMBoard(appData.darkBackTextureFile, 0);
- }
-#else
- CreateXIMPieces();
- /* Create regular pieces */
- if (!useImages) CreatePieces();
-#endif
+ CreateAnyPieces();
CreatePieceMenus();
XtAddEventHandler(boardWidget, ExposureMask|PointerMotionMask, False,
(XtEventHandler) EventProc, NULL);
/* end why */
+ XtAddEventHandler(formWidget, KeyPressMask, False,
+ (XtEventHandler) MoveTypeInProc, NULL);
/* [AS] Restore layout */
if( wpMoveHistory.visible ) {
}
gameInfo.boardWidth = 0; // [HGM] pieces: kludge to ensure InitPosition() calls InitDrawingSizes()
InitPosition(TRUE);
- XtSetKeyboardFocus(shellWidget, formWidget);
+// XtSetKeyboardFocus(shellWidget, formWidget);
+ XSetInputFocus(xDisplay, XtWindow(formWidget), RevertToPointerRoot, CurrentTime);
XtAppMainLoop(appContext);
if (appData.debugMode) fclose(debugFP); // [DM] debug
{ "menuOptions.Hide Thinking", False },
{ "menuOptions.Ponder Next Move", False },
#endif
- { "menuEngine.Engine #1 Settings", False },
#endif
+ { "menuEngine.Engine #1 Settings", False },
{ "menuEngine.Engine #2 Settings", False },
{ "menuEdit.Annotate", False },
{ NULL, False }
SetMenuEnables(icsEnables);
#if ZIPPY
- if (appData.zippyPlay && !appData.noChessProgram) /* [DM] icsEngineAnalyze */
+ if (appData.zippyPlay && !appData.noChessProgram) { /* [DM] icsEngineAnalyze */
XtSetSensitive(XtNameToWidget(menuBarWidget, "menuMode.Analysis Mode"), True);
+ XtSetSensitive(XtNameToWidget(menuBarWidget, "menuEngine.Engine #1 Settings"), True);
+ }
#endif
}
char *def_string, *base_fnt_lst, strInt[3];
XFontSet fntSet;
XFontStruct **fnt_list;
-
base_fnt_lst = calloc(1, strlen(pattern) + 3);
snprintf(strInt, sizeof(strInt)/sizeof(strInt[0]), "%d", targetPxlSize);
p = strstr(pattern, "--");
Cardinal *num_params;
{
String whichMenu; int menuNr;
+ shiftKey = strcmp(params[0], "menuW"); // used to indicate black
if (event->type == ButtonRelease)
menuNr = RightClick(Release, event->xbutton.x, event->xbutton.y, &pmFromX, &pmFromY);
else if (event->type == ButtonPress)
void AnimateUserMove (Widget w, XEvent * event,
String * params, Cardinal * nParams)
{
+ if(!PromoScroll(event->xmotion.x, event->xmotion.y))
DragPieceMove(event->xmotion.x, event->xmotion.y);
}
}
}
-/* note: when called from menu all parameters are NULL, so no clue what the
- * Widget which was clicked on was, or what the click event was
- */
-void CopyGameProc(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
+void CopySomething()
{
int ret;
- ret = SaveGameToFile(gameCopyFilename, FALSE);
- if (!ret) return;
-
/*
* Set both PRIMARY (the selection) and CLIPBOARD, since we don't
* have a notion of a game that is selected but not copied.
NULL/* transfer_done_proc */);
}
+/* note: when called from menu all parameters are NULL, so no clue what the
+ * Widget which was clicked on was, or what the click event was
+ */
+void CopyGameProc(w, event, prms, nprms)
+ Widget w;
+ XEvent *event;
+ String *prms;
+ Cardinal *nprms;
+{
+ int ret;
+
+ ret = SaveGameToFile(gameCopyFilename, FALSE);
+ if (!ret) return;
+
+ CopySomething();
+}
+
+void CopyGameListProc(w, event, prms, nprms)
+ Widget w;
+ XEvent *event;
+ String *prms;
+ Cardinal *nprms;
+{
+ if(!SaveGameListAsText(fopen(gameCopyFilename, "w"))) return;
+ CopySomething();
+}
+
/* function called when the data to Paste is ready */
static void
PasteGameCB(Widget w, XtPointer client_data, Atom *selection,
Cardinal *nprms;
{
if(gameMode != BeginningOfGame) { DisplayError(_("You can only start a match from the initial position."), 0); return; }
- matchMode = 2; // This is back-end, really\r
- appData.matchGames = appData.defaultMatchGames;\r
- matchGame = 1;\r
- first.matchWins = second.matchWins = 0;\r
- TwoMachinesEvent();
+ appData.matchGames = appData.defaultMatchGames;
+ MatchEvent(2);\r
}
void IcsClientProc(w, event, prms, nprms)
/* For XPM pieces, we need bitmaps to use as masks. */
if (useImages)
- CreateAnimMasks(info.depth);
- xpmDone = 1;
+ CreateAnimMasks(info.depth), xpmDone = 1;
}
#ifndef HAVE_USLEEP
}
}
+void
+ChangeDragPiece(ChessSquare piece)
+{
+ Pixmap mask;
+ player.dragPiece = piece;
+ /* The piece will be drawn using its own bitmap as a matte */
+ SelectGCMask(piece, &player.pieceGC, &player.outlineGC, &mask);
+ XSetClipMask(xDisplay, player.pieceGC, mask);
+}
+
static void
DragPieceMove(x, y)
int x; int y;