void UploadProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void BackwardProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void ForwardProc 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 ToStartProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void ToEndProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void RevertProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void AboutProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void DebugProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void NothingProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void Iconify P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
void DisplayMove P((int moveNumber));
void DisplayTitle P((char *title));
void ICSInitScript P((void));
MenuItem buttonBar[] = {
{"<<", "<<", ToStartProc},
{"<", "<", BackwardProc},
- {PAUSE_BUTTON, PAUSE_BUTTON, PauseProc},
+ {N_(PAUSE_BUTTON), PAUSE_BUTTON, PauseProc},
{">", ">", ForwardProc},
{">>", ">>", ToEndProc},
{NULL, NULL, NULL}
{ "PieceMenuPopup", PieceMenuPopup },
{ "WhiteClock", WhiteClock },
{ "BlackClock", BlackClock },
- { "Iconify", Iconify },
{ "ResetProc", ResetProc },
{ "NewVariantProc", NewVariantProc },
{ "LoadGameProc", LoadGameProc },
{ "UploadProc", UploadProc },
{ "BackwardProc", BackwardProc },
{ "ForwardProc", ForwardProc },
+ { "TempBackwardProc", TempBackwardProc },
+ { "TempForwardProc", TempForwardProc },
{ "ToStartProc", ToStartProc },
{ "ToEndProc", ToEndProc },
{ "RevertProc", RevertProc },
:Ctrl<Key>H: HideThinkingProc() \n "
#endif
"\
- :<Key>-: Iconify() \n \
:<Key>F1: ManProc() \n \
:<Key>F2: FlipViewProc() \n \
- <KeyDown>.: BackwardProc() \n \
- <KeyUp>.: ForwardProc() \n \
- Shift<Key>1: AskQuestionProc(\"Direct command\",\
+ :Ctrl<KeyDown>.: TempBackwardProc() \n \
+ :Ctrl<KeyUp>.: TempForwardProc() \n \
+ :Ctrl<Key>1: AskQuestionProc(\"Direct command\",\
\"Send to chess program:\",,1) \n \
- Shift<Key>2: AskQuestionProc(\"Direct command\",\
+ :Ctrl<Key>2: AskQuestionProc(\"Direct command\",\
\"Send to second chess program:\",,2) \n";
char boardTranslations[] =
fileOpenMode = openMode; /* to use globals here */
{ // [HGM] use file-selector dialog stolen from Ghostview
int index; // this is not supported yet
- if(openFP = XsraSelFile(shellWidget, label, NULL, NULL, "could not open: ",
+ if(openFP = XsraSelFile(shellWidget, label, NULL, NULL, _("could not open: "),
(def[0] ? def : NULL), filter, openMode, NULL, &openName))
// [HGM] delay to give expose event opportunity to redraw board after browser-dialog popdown before lengthy load starts
ScheduleDelayedEvent(&DelayedLoad, 50);
Position x, y;
Dimension bw_width, pw_width;
int j;
+ char *PromoChars = "wglcqrbnkac+=\0";
j = 0;
XtSetArg(args[j], XtNwidth, &bw_width); j++;
if(gameInfo.variant != VariantShogi) {
if(gameInfo.variant == VariantSpartan && !WhiteOnMove(currentMove)) {
- XawDialogAddButton(dialog, _("Warlord"), PromotionCallback,
- (XtPointer) dialog);
- XawDialogAddButton(dialog, _("General"), PromotionCallback,
- (XtPointer) dialog);
- XawDialogAddButton(dialog, _("Lieutenant"), PromotionCallback,
- (XtPointer) dialog);
- XawDialogAddButton(dialog, _("Captain"), PromotionCallback,
- (XtPointer) dialog);
+ XawDialogAddButton(dialog, _("Warlord"), PromotionCallback, PromoChars + 0);
+ XawDialogAddButton(dialog, _("General"), PromotionCallback, PromoChars + 1);
+ XawDialogAddButton(dialog, _("Lieutenant"), PromotionCallback, PromoChars + 2);
+ XawDialogAddButton(dialog, _("Captain"), PromotionCallback, PromoChars + 3);
} else {
- XawDialogAddButton(dialog, _("Queen"), PromotionCallback,
- (XtPointer) dialog);
- XawDialogAddButton(dialog, _("Rook"), PromotionCallback,
- (XtPointer) dialog);
- XawDialogAddButton(dialog, _("Bishop"), PromotionCallback,
- (XtPointer) dialog);
- XawDialogAddButton(dialog, _("Knight"), PromotionCallback,
- (XtPointer) dialog);
+ XawDialogAddButton(dialog, _("Queen"), PromotionCallback, PromoChars + 4);
+ XawDialogAddButton(dialog, _("Rook"), PromotionCallback, PromoChars + 5);
+ XawDialogAddButton(dialog, _("Bishop"), PromotionCallback, PromoChars + 6);
+ XawDialogAddButton(dialog, _("Knight"), PromotionCallback, PromoChars + 7);
}
if (!appData.testLegality || gameInfo.variant == VariantSuicide ||
gameInfo.variant == VariantSpartan && !WhiteOnMove(currentMove) ||
gameInfo.variant == VariantGiveaway) {
- XawDialogAddButton(dialog, _("King"), PromotionCallback,
- (XtPointer) dialog);
+ XawDialogAddButton(dialog, _("King"), PromotionCallback, PromoChars + 8);
}
if(gameInfo.variant == VariantCapablanca ||
gameInfo.variant == VariantGothic ||
gameInfo.variant == VariantCapaRandom) {
- XawDialogAddButton(dialog, _("Archbishop"), PromotionCallback,
- (XtPointer) dialog);
- XawDialogAddButton(dialog, _("Chancellor"), PromotionCallback,
- (XtPointer) dialog);
+ XawDialogAddButton(dialog, _("Archbishop"), PromotionCallback, PromoChars + 9);
+ XawDialogAddButton(dialog, _("Chancellor"), PromotionCallback, PromoChars + 10);
}
} else // [HGM] shogi
{
- XawDialogAddButton(dialog, _("Promote"), PromotionCallback,
- (XtPointer) dialog);
- XawDialogAddButton(dialog, _("Defer"), PromotionCallback,
- (XtPointer) dialog);
+ XawDialogAddButton(dialog, _("Promote"), PromotionCallback, PromoChars + 11);
+ XawDialogAddButton(dialog, _("Defer"), PromotionCallback, PromoChars + 12);
}
- XawDialogAddButton(dialog, _("cancel"), PromotionCallback,
- (XtPointer) dialog);
+ XawDialogAddButton(dialog, _("cancel"), PromotionCallback, PromoChars + 13);
XtRealizeWidget(promotionShell);
CatchDeleteWindow(promotionShell, "PromotionPopDown");
Widget w;
XtPointer client_data, call_data;
{
- String name;
- Arg args[16];
- int promoChar;
-
- XtSetArg(args[0], XtNlabel, &name);
- XtGetValues(w, args, 1);
+ int promoChar = * (const char *) client_data;
PromotionPopDown();
if (fromX == -1) return;
- if (strcmp(name, _("cancel")) == 0) {
+ if (! promoChar) {
fromX = fromY = -1;
ClearHighlights();
return;
- } else if (strcmp(name, _("Knight")) == 0) {
- promoChar = 'n';
- } else if (strcmp(name, _("Promote")) == 0) {
- promoChar = '+';
- } else if (strcmp(name, _("Defer")) == 0) {
- promoChar = '=';
- } else {
- promoChar = ToLower(name[0]);
}
-
UserMoveEvent(fromX, fromY, toX, toY, promoChar);
if (!appData.highlightLastMove || gotPremove) ClearHighlights();
*value_return = targets_tmp;
*type_return = XA_ATOM;
*length_return = 2;
+#if 0
+ // This code leads to a read of value_return out of bounds on 64-bit systems.
+ // Other code which I have seen always sets *format_return to 32 independent of
+ // sizeof(Atom) without adjusting *length_return. For instance see TextConvertSelection()
+ // at http://cgit.freedesktop.org/xorg/lib/libXaw/tree/src/Text.c -- BJ
*format_return = 8 * sizeof(Atom);
if (*format_return > 32) {
*length_return *= *format_return / 32;
*format_return = 32;
}
+#else
+ *format_return = 32;
+#endif
return True;
} else {
return False;
*value_return = targets_tmp;
*type_return = XA_ATOM;
*length_return = 2;
+#if 0
+ // This code leads to a read of value_return out of bounds on 64-bit systems.
+ // Other code which I have seen always sets *format_return to 32 independent of
+ // sizeof(Atom) without adjusting *length_return. For instance see TextConvertSelection()
+ // at http://cgit.freedesktop.org/xorg/lib/libXaw/tree/src/Text.c -- BJ
*format_return = 8 * sizeof(Atom);
if (*format_return > 32) {
*length_return *= *format_return / 32;
*format_return = 32;
}
+#else
+ *format_return = 32;
+#endif
return True;
} else {
return False;
BackwardEvent();
}
+void TempBackwardProc(w, event, prms, nprms)
+ Widget w;
+ XEvent *event;
+ String *prms;
+ Cardinal *nprms;
+{
+ if (!TempBackwardActive) {
+ TempBackwardActive = True;
+ BackwardEvent();
+ }
+}
+
+void TempForwardProc(w, event, prms, nprms)
+ Widget w;
+ XEvent *event;
+ String *prms;
+ Cardinal *nprms;
+{
+ /* Check to see if triggered by a key release event for a repeating key.
+ * If so the next queued event will be a key press of the same key at the same time */
+ if (XEventsQueued(xDisplay, QueuedAfterReading)) {
+ XEvent next;
+ XPeekEvent(xDisplay, &next);
+ if (next.type == KeyPress && next.xkey.time == event->xkey.time &&
+ next.xkey.keycode == event->xkey.keycode)
+ return;
+ }
+ ForwardEvent();
+ TempBackwardActive = False;
+}
+
void ToStartProc(w, event, prms, nprms)
Widget w;
XEvent *event;
{
char buf[MSG_SIZ];
#if ZIPPY
- char *zippy = " (with Zippy code)";
+ char *zippy = _(" (with Zippy code)");
#else
char *zippy = "";
#endif
- snprintf(buf, sizeof(buf), "%s%s\n\n%s\n%s\n%s\n\n%s%s\n%s",
- programVersion, zippy,
- "Copyright 1991 Digital Equipment Corporation",
- "Enhancements Copyright 1992-2009 Free Software Foundation",
- "Enhancements Copyright 2005 Alessandro Scotti",
- PACKAGE, " is free software and carries NO WARRANTY;",
- "see the file COPYING for more information.");
+ snprintf(buf, sizeof(buf),
+_("%s%s\n\n"
+"Copyright 1991 Digital Equipment Corporation\n"
+"Enhancements Copyright 1992-2009 Free Software Foundation\n"
+"Enhancements Copyright 2005 Alessandro Scotti\n\n"
+"%s is free software and carries NO WARRANTY;"
+"see the file COPYING for more information."),
+ programVersion, zippy, PACKAGE);
ErrorPopUp(_("About XBoard"), buf, FALSE);
}
return;
}
-void Iconify(w, event, prms, nprms)
- Widget w;
- XEvent *event;
- String *prms;
- Cardinal *nprms;
-{
- Arg args[16];
-
- fromX = fromY = -1;
- XtSetArg(args[0], XtNiconic, True);
- XtSetValues(shellWidget, args, 1);
-}
-
void DisplayMessage(message, extMessage)
char *message, *extMessage;
{