#include "xedittags.h"
#include "menus.h"
#include "board.h"
+#include "dialogs.h"
#include "gettext.h"
RETSIGTYPE CmailSigHandler P((int sig));
RETSIGTYPE IntSigHandler P((int sig));
RETSIGTYPE TermSizeSigHandler P((int sig));
-void CreateGCs P((int redo));
-void CreateAnyPieces P((void));
+static void CreateGCs P((int redo));
+static 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 EventProc P((Widget widget, caddr_t unused, XEvent *event));
void DelayedDrag P((void));
-void MoveTypeInProc P((Widget widget, caddr_t unused, XEvent *event));
+static 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 SelectCommand P((Widget w, XtPointer client_data, XtPointer call_data));
void KeyBindingProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void QuitWrapper 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));
+static void EnterKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+static void UpKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
+static void DownKeyProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void TempBackwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void TempForwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
Boolean TempBackwardActive = False;
void ManInner P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void DisplayMove P((int moveNumber));
-void DisplayTitle P((char *title));
void ICSInitScript P((void));
-void ErrorPopUp P((char *title, char *text, int modal));
-void ErrorPopDown P((void));
static char *ExpandPathName P((char *path));
void SelectMove P((Widget w, XEvent * event, String * params, Cardinal * nParams));
void GameListOptionsPopDown P(());
WindowPlacement wpGameList;
WindowPlacement wpTags;
-extern Widget shells[];
-extern Boolean shellUp[];
#define SOLID 0
#define OUTLINE 1
// In XBoard this will have to wait until awareness of window parameters is implemented
GetActualPlacement(shellWidget, &wpMain);
if(EngineOutputIsUp()) GetActualPlacement(engineOutputShell, &wpEngineOutput);
- if(MoveHistoryIsUp()) GetActualPlacement(shells[7], &wpMoveHistory);
+ if(MoveHistoryIsUp()) GetActualPlacement(shells[HistoryDlg], &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);
+ if(shellUp[CommentDlg]) GetActualPlacement(shells[CommentDlg], &wpComment);
+ if(shellUp[TagsDlg]) GetActualPlacement(shells[TagsDlg], &wpTags);
}
void
}
}
-int
+static int
MakeOneColor (char *name, Pixel *color)
{
XrmValue vFrom, vTo;
return False;
}
-int
+static int
MakeColors ()
{ // [HGM] taken out of main(), so it can be called from BoardOptions dialog
int forceMono = False;
return forceMono;
}
-void
+static void
CreateAnyPieces ()
{ // [HGM] taken out of main
#if HAVE_LIBXPM
#endif
}
+void
+InitDrawingParams ()
+{
+ MakeColors(); CreateGCs(True);
+ CreateAnyPieces();
+}
+
int
main (int argc, char **argv)
{
return;
}
-// [HGM] code borrowed from winboard.c (which should thus go to backend.c!)
-#define HISTORY_SIZE 64
-static char *history[HISTORY_SIZE];
-int histIn = 0, histP = 0;
-
-void
-SaveInHistory (char *cmd)
-{
- if (history[histIn] != NULL) {
- free(history[histIn]);
- history[histIn] = NULL;
- }
- if (*cmd == NULLCHAR) return;
- history[histIn] = StrSave(cmd);
- histIn = (histIn + 1) % HISTORY_SIZE;
- if (history[histIn] != NULL) {
- free(history[histIn]);
- history[histIn] = NULL;
- }
- histP = histIn;
-}
-
-char *
-PrevInHistory (char *cmd)
-{
- int newhp;
- if (histP == histIn) {
- if (history[histIn] != NULL) free(history[histIn]);
- history[histIn] = StrSave(cmd);
- }
- newhp = (histP - 1 + HISTORY_SIZE) % HISTORY_SIZE;
- if (newhp == histIn || history[newhp] == NULL) return NULL;
- histP = newhp;
- return history[histP];
-}
-
-char *
-NextInHistory ()
-{
- if (histP == histIn) return NULL;
- histP = (histP + 1) % HISTORY_SIZE;
- return history[histP];
-}
-// end of borrowed code
-
#define Abs(n) ((n)<0 ? -(n) : (n))
#ifdef ENABLE_NLS
return XtGetGC(shellWidget, value_mask, gc_values);
}
-void
+static void
CreateGCs (int redo)
{
XtGCMask value_mask = GCLineWidth | GCLineStyle | GCForeground
wpNew.width == wpMain.width && wpNew.height == wpMain.height) // not sized
return; // false alarm
if(EngineOutputIsUp()) CoDrag(engineOutputShell, &wpEngineOutput);
- if(MoveHistoryIsUp()) CoDrag(shells[7], &wpMoveHistory);
+ if(MoveHistoryIsUp()) CoDrag(shells[HistoryDlg], &wpMoveHistory);
if(EvalGraphIsUp()) CoDrag(evalGraphShell, &wpEvalGraph);
if(GameListIsUp()) CoDrag(gameListShell, &wpGameList);
wpMain = wpNew;
extern Option boxOptions[];
void
-ICSInputSendText ()
-{
- Widget edit;
- int j;
- Arg args[16];
- String val;
-
- edit = boxOptions[0].handle;
- j = 0;
- XtSetArg(args[j], XtNstring, &val); j++;
- XtGetValues(edit, args, j);
- SaveInHistory(val);
- SendMultiLineToICS(val);
- XtCallActionProc(edit, "select-all", NULL, NULL, 0);
- XtCallActionProc(edit, "kill-selection", NULL, NULL, 0);
-}
-
-void
ICSInputBoxPopDown ()
{
- PopDown(4);
+ PopDown(InputBoxDlg);
}
void
void
CommentPopDown ()
{
- PopDown(1);
+ PopDown(CommentDlg);
}
static char *openName;
XtSetArg(args[i], XtNtitle, title); i++;
errorShell =
XtCreatePopupShell("errorpopup", transientShellWidgetClass,
- shellUp[0] ? (dialogError = modal = TRUE, shells[0]) : shellWidget, args, i);
+ shellUp[TransientDlg] ? (dialogError = modal = TRUE, shells[TransientDlg]) : shellWidget, args, i);
layout =
XtCreateManagedWidget(layoutName, formWidgetClass, errorShell,
layoutArgs, XtNumber(layoutArgs));
QuitProc();
}
-void
+static void
+MoveTypeInProc (Widget widget, caddr_t unused, XEvent *event)
+{
+ char buf[10], keys[32];
+ KeySym sym;
+ KeyCode metaL, metaR; //, ctrlL, ctrlR;
+ int n = XLookupString(&(event->xkey), buf, 10, &sym, NULL);
+ XQueryKeymap(xDisplay,keys);
+ metaL = XKeysymToKeycode(xDisplay, XK_Meta_L);
+ metaR = XKeysymToKeycode(xDisplay, XK_Meta_R);
+// ctrlL = XKeysymToKeycode(xDisplay, XK_Control_L);
+// ctrlR = XKeysymToKeycode(xDisplay, XK_Control_R);
+ if ( n == 1 && *buf >= 32 // printable
+ && !(keys[metaL>>3]&1<<(metaL&7)) && !(keys[metaR>>3]&1<<(metaR&7)) // no alt key pressed
+// && !(keys[ctrlL>>3]&1<<(ctrlL&7)) && !(keys[ctrlR>>3]&1<<(ctrlR&7)) // no ctrl key pressed
+ ) BoxAutoPopUp (buf);
+}
+
+static void
UpKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
{ // [HGM] input: let up-arrow recall previous line from history
- Widget edit;
- int j;
- Arg args[16];
- String val;
- XawTextBlock t;
-
- if (!shellUp[4]) return;
- edit = boxOptions[0].handle;
- j = 0;
- XtSetArg(args[j], XtNstring, &val); j++;
- XtGetValues(edit, args, j);
- val = PrevInHistory(val);
- XtCallActionProc(edit, "select-all", NULL, NULL, 0);
- XtCallActionProc(edit, "kill-selection", NULL, NULL, 0);
- if(val) {
- t.ptr = val; t.firstPos = 0; t.length = strlen(val); t.format = XawFmt8Bit;
- XawTextReplace(edit, 0, 0, &t);
- XawTextSetInsertionPoint(edit, 9999);
- }
+ IcsKey(1);
}
-void
+static void
DownKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
{ // [HGM] input: let down-arrow recall next line from history
- Widget edit;
- String val;
- XawTextBlock t;
-
- if (!shellUp[4]) return;
- edit = boxOptions[0].handle;
- val = NextInHistory();
- XtCallActionProc(edit, "select-all", NULL, NULL, 0);
- XtCallActionProc(edit, "kill-selection", NULL, NULL, 0);
- if(val) {
- t.ptr = val; t.firstPos = 0; t.length = strlen(val); t.format = XawFmt8Bit;
- XawTextReplace(edit, 0, 0, &t);
- XawTextSetInsertionPoint(edit, 9999);
- }
+ IcsKey(-1);
}
-void
+static void
EnterKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
{
- if (shellUp[4] == True)
- ICSInputSendText();
+ IcsKey(0);
}
void
}
void
-DisplayTitle (char *text)
+SetWindowTitle (char *text, char *title, char *icon)
{
Arg args[16];
int i;
- char title[MSG_SIZ];
- char icon[MSG_SIZ];
-
- if (text == NULL) text = "";
-
if (appData.titleInWindow) {
i = 0;
XtSetArg(args[i], XtNlabel, text); i++;
XtSetValues(titleWidget, args, i);
}
-
- if (*text != NULLCHAR) {
- safeStrCpy(icon, text, sizeof(icon)/sizeof(icon[0]) );
- safeStrCpy(title, text, sizeof(title)/sizeof(title[0]) );
- } else if (appData.icsActive) {
- snprintf(icon, sizeof(icon), "%s", appData.icsHost);
- snprintf(title, sizeof(title), "%s: %s", programName, appData.icsHost);
- } else if (appData.cmailGameName[0] != NULLCHAR) {
- snprintf(icon, sizeof(icon), "%s", "CMail");
- snprintf(title,sizeof(title), "%s: %s", programName, "CMail");
-#ifdef GOTHIC
- // [HGM] license: This stuff should really be done in back-end, but WinBoard already had a pop-up for it
- } else if (gameInfo.variant == VariantGothic) {
- safeStrCpy(icon, programName, sizeof(icon)/sizeof(icon[0]) );
- safeStrCpy(title, GOTHIC, sizeof(title)/sizeof(title[0]) );
-#endif
-#ifdef FALCON
- } else if (gameInfo.variant == VariantFalcon) {
- safeStrCpy(icon, programName, sizeof(icon)/sizeof(icon[0]) );
- safeStrCpy(title, FALCON, sizeof(title)/sizeof(title[0]) );
-#endif
- } else if (appData.noChessProgram) {
- safeStrCpy(icon, programName, sizeof(icon)/sizeof(icon[0]) );
- safeStrCpy(title, programName, sizeof(title)/sizeof(title[0]) );
- } else {
- safeStrCpy(icon, first.tidy, sizeof(icon)/sizeof(icon[0]) );
- snprintf(title,sizeof(title), "%s: %s", programName, first.tidy);
- }
i = 0;
XtSetArg(args[i], XtNiconName, (XtArgVal) icon); i++;
XtSetArg(args[i], XtNtitle, (XtArgVal) title); i++;
}
-void
-DisplayError (String message, int error)
-{
- char buf[MSG_SIZ];
-
- if (error == 0) {
- if (appData.debugMode || appData.matchMode) {
- fprintf(stderr, "%s: %s\n", programName, message);
- }
- } else {
- if (appData.debugMode || appData.matchMode) {
- fprintf(stderr, "%s: %s: %s\n",
- programName, message, strerror(error));
- }
- snprintf(buf, sizeof(buf), "%s: %s", message, strerror(error));
- message = buf;
- }
- ErrorPopUp(_("Error"), message, FALSE);
-}
-
-
-void
-DisplayMoveError (String message)
-{
- fromX = fromY = -1;
- ClearHighlights();
- DrawPosition(FALSE, NULL);
- if (appData.debugMode || appData.matchMode) {
- fprintf(stderr, "%s: %s\n", programName, message);
- }
- if (appData.popupMoveErrors) {
- ErrorPopUp(_("Error"), message, FALSE);
- } else {
- DisplayMessage(message, "");
- }
-}
-
-
-void
-DisplayFatalError (String message, int error, int status)
-{
- char buf[MSG_SIZ];
-
- errorExitStatus = status;
- if (error == 0) {
- fprintf(stderr, "%s: %s\n", programName, message);
- } else {
- fprintf(stderr, "%s: %s: %s\n",
- programName, message, strerror(error));
- snprintf(buf, sizeof(buf), "%s: %s", message, strerror(error));
- message = buf;
- }
- if (appData.popupExitMessage && boardWidget && XtIsRealized(boardWidget)) {
- ErrorPopUp(status ? _("Fatal Error") : _("Exiting"), message, TRUE);
- } else {
- ExitEvent(status);
- }
-}
-
-void
-DisplayInformation (String message)
-{
- ErrorPopDown();
- ErrorPopUp(_("Information"), message, TRUE);
-}
-
-void
-DisplayNote (String message)
-{
- ErrorPopDown();
- ErrorPopUp(_("Note"), message, FALSE);
-}
-
static int
NullXErrorCheck (Display *dpy, XErrorEvent *error_event)
{