fixed autoheader warings, remove depreciated acconfig.h
[xboard.git] / xoptions.c
index 1165a09..6dc6e6d 100644 (file)
@@ -72,6 +72,15 @@ extern char *getenv();
 #include "common.h"\r
 #include "backend.h"\r
 #include "xboard.h"\r
+#include "gettext.h"\r
+\r
+#ifdef ENABLE_NLS\r
+# define  _(s) gettext (s)\r
+# define N_(s) gettext_noop (s)\r
+#else\r
+# define  _(s) (s)\r
+# define N_(s)  s\r
+#endif\r
 \r
 extern Widget formWidget, shellWidget, boardWidget, menuBarWidget;\r
 extern Display *xDisplay;\r
@@ -127,24 +136,24 @@ void ShuffleCallback(w, client_data, call_data)
     XtSetArg(args[0], XtNlabel, &name);\r
     XtGetValues(w, args, 1);\r
     \r
-    if (strcmp(name, "cancel") == 0) {\r
+    if (strcmp(name, _("cancel")) == 0) {\r
         ShufflePopDown();\r
         return;\r
     }\r
-    if (strcmp(name, "off") == 0) {\r
+    if (strcmp(name, _("off")) == 0) {\r
         ShufflePopDown();\r
        shuffleOpenings = False; // [HGM] should be moved to New Variant menu, once we have it!\r
        ResetGameEvent();\r
        AnalysisPopDown();\r
         return;\r
     }\r
-    if (strcmp(name, "random") == 0) {\r
+    if (strcmp(name, _("random")) == 0) {\r
        sprintf(buf, "%d", rand());\r
        XtSetArg(args[0],XtNvalue, buf); // erase bad (non-numeric) value\r
        XtSetValues(XtParent(w), args, 1);\r
         return;\r
     }\r
-    if (strcmp(name, "ok") == 0) {\r
+    if (strcmp(name, _("ok")) == 0) {\r
        int nr; String name;\r
         name = XawDialogGetValueString(w2 = XtParent(w));\r
        if(sscanf(name ,"%d",&nr) != 1) {\r
@@ -176,7 +185,7 @@ void ShufflePopUp()
     XtSetArg(args[i], XtNresizable, True); i++;\r
     XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;\r
     shuffleShell = popup =\r
-      XtCreatePopupShell("New Shuffle Game", transientShellWidgetClass,\r
+      XtCreatePopupShell(_("New Shuffle Game"), transientShellWidgetClass,\r
                         shellWidget, args, i);\r
     \r
     layout =\r
@@ -185,20 +194,20 @@ void ShufflePopUp()
   \r
     sprintf(def, "%d\n", appData.defaultFrcPosition);\r
     i = 0;\r
-    XtSetArg(args[i], XtNlabel, "Start-position number:"); i++;\r
+    XtSetArg(args[i], XtNlabel, _("Start-position number:")); i++;\r
     XtSetArg(args[i], XtNvalue, def); i++;\r
     XtSetArg(args[i], XtNborderWidth, 0); i++;\r
-    dialog = XtCreateManagedWidget("Shuffle", dialogWidgetClass,\r
+    dialog = XtCreateManagedWidget(_("Shuffle"), dialogWidgetClass,\r
                                   layout, args, i);\r
     \r
 //    XtSetArg(args[0], XtNeditType, XawtextEdit);  // [HGM] can't get edit to work decently\r
 //    XtSetArg(args[1], XtNuseStringInPlace, False);\r
 //    XtSetValues(dialog, args, 2);\r
 \r
-    XawDialogAddButton(dialog, "ok", ShuffleCallback, (XtPointer) dialog);\r
-    XawDialogAddButton(dialog, "cancel", ShuffleCallback, (XtPointer) dialog);\r
-    XawDialogAddButton(dialog, "random", ShuffleCallback, (XtPointer) dialog);\r
-    XawDialogAddButton(dialog, "off", ShuffleCallback, (XtPointer) dialog);\r
+    XawDialogAddButton(dialog, _("ok"), ShuffleCallback, (XtPointer) dialog);\r
+    XawDialogAddButton(dialog, _("cancel"), ShuffleCallback, (XtPointer) dialog);\r
+    XawDialogAddButton(dialog, _("random"), ShuffleCallback, (XtPointer) dialog);\r
+    XawDialogAddButton(dialog, _("off"), ShuffleCallback, (XtPointer) dialog);\r
     \r
     XtRealizeWidget(popup);\r
     CatchDeleteWindow(popup, "ShufflePopDown");\r
@@ -259,13 +268,13 @@ void TimeControlCallback(w, client_data, call_data)
     XtSetArg(args[0], XtNlabel, &name);\r
     XtGetValues(w, args, 1);\r
     \r
-    if (strcmp(name, "classical") == 0) {\r
+    if (strcmp(name, _("classical")) == 0) {\r
        if(!tcInc) return;\r
        j=0;\r
-       XtSetArg(args[j], XtNlabel, "minutes for each"); j++;\r
+       XtSetArg(args[j], XtNlabel, _("minutes for each")); j++;\r
        XtSetValues(tcMess1, args, j);\r
        j=0;\r
-       XtSetArg(args[j], XtNlabel, "moves"); j++;\r
+       XtSetArg(args[j], XtNlabel, _("moves")); j++;\r
        XtSetValues(tcMess2, args, j);\r
        j=0;\r
        XtSetArg(args[j], XtNstring, &name); j++;\r
@@ -278,13 +287,13 @@ void TimeControlCallback(w, client_data, call_data)
        tcInc = False;\r
         return;\r
     }\r
-    if (strcmp(name, "incremental") == 0) {\r
+    if (strcmp(name, _("incremental")) == 0) {\r
        if(tcInc) return;\r
        j=0;\r
-       XtSetArg(args[j], XtNlabel, "minutes, plus"); j++;\r
+       XtSetArg(args[j], XtNlabel, _("minutes, plus")); j++;\r
        XtSetValues(tcMess1, args, j);\r
        j=0;\r
-       XtSetArg(args[j], XtNlabel, "sec/move"); j++;\r
+       XtSetArg(args[j], XtNlabel, _("sec/move")); j++;\r
        XtSetValues(tcMess2, args, j);\r
        j=0;\r
        XtSetArg(args[j], XtNstring, &name); j++;\r
@@ -297,7 +306,7 @@ void TimeControlCallback(w, client_data, call_data)
        tcInc = True;\r
         return;\r
     }\r
-    if (strcmp(name, " OK ") == 0) {\r
+    if (strcmp(name, _(" OK ")) == 0) {\r
        int inc, mps, tc, ok;\r
        XtSetArg(args[0], XtNstring, &txt);\r
        XtGetValues(tcData, args, 1);\r
@@ -319,7 +328,7 @@ void TimeControlCallback(w, client_data, call_data)
        if(!ParseTimeControl(txt, inc, mps)) {\r
            XtSetArg(args[0], XtNstring, ""); // erase any offending input\r
            XtSetValues(tcTime, args, 1);\r
-           DisplayError("Bad Time-Control String", 0);\r
+           DisplayError(_("Bad Time-Control String"), 0);\r
            return;\r
        }\r
        appData.movesPerSession = mps;\r
@@ -358,7 +367,7 @@ void TimeControlPopUp()
     XtSetArg(args[i], XtNresizable, True); i++;\r
 //    XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;\r
     TimeControlShell = popup =\r
-      XtCreatePopupShell("TimeControl Menu", transientShellWidgetClass,\r
+      XtCreatePopupShell(_("TimeControl Menu"), transientShellWidgetClass,\r
                         shellWidget, args, i);\r
     \r
     layout =\r
@@ -391,7 +400,7 @@ void TimeControlPopUp()
     XtAddEventHandler(tcTime, ButtonPressMask, False, SetFocus, (XtPointer) popup);\r
 \r
     j= 0;\r
-    XtSetArg(args[j], XtNlabel, tcInc ? "   minutes, plus   " : "minutes for each"); j++;\r
+    XtSetArg(args[j], XtNlabel, tcInc ? _("   minutes, plus   ") : _("minutes for each")); j++;\r
     XtSetArg(args[j], XtNborderWidth, 0); j++;\r
     XtSetArg(args[j], XtNfromHoriz, tcTime); j++;\r
     XtSetArg(args[j], XtNtop, XtChainTop);  j++;\r
@@ -420,7 +429,7 @@ void TimeControlPopUp()
     XtAddEventHandler(tcData, ButtonPressMask, False, SetFocus, (XtPointer) popup);\r
 \r
     j= 0;\r
-    XtSetArg(args[j], XtNlabel, tcInc ? "sec/move" : "moves     "); j++;\r
+    XtSetArg(args[j], XtNlabel, tcInc ? _("sec/move") : _("moves     ")); j++;\r
     XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++;\r
     XtSetArg(args[j], XtNborderWidth, 0); j++;\r
     XtSetArg(args[j], XtNfromHoriz, tcData); j++;\r
@@ -469,7 +478,7 @@ void TimeControlPopUp()
     XtAddEventHandler(tcOdds2, ButtonPressMask, False, SetFocus, (XtPointer) popup);\r
 \r
     j= 0;\r
-    XtSetArg(args[j], XtNlabel, "Engine #1 and #2 Time-Odds Factors"); j++;\r
+    XtSetArg(args[j], XtNlabel, _("Engine #1 and #2 Time-Odds Factors")); j++;\r
     XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++;\r
     XtSetArg(args[j], XtNborderWidth, 0); j++;\r
     XtSetArg(args[j], XtNfromVert, tcTime); j++;\r
@@ -488,7 +497,7 @@ void TimeControlPopUp()
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
     XtSetArg(args[j], XtNleft, XtChainLeft);  j++;\r
     XtSetArg(args[j], XtNright, XtChainLeft);  j++;\r
-    b_clas= XtCreateManagedWidget("classical", commandWidgetClass,\r
+    b_clas= XtCreateManagedWidget(_("classical"), commandWidgetClass,\r
                                   form, args, j);   \r
     XtAddCallback(b_clas, XtNcallback, TimeControlCallback, (XtPointer) 0);\r
 \r
@@ -499,7 +508,7 @@ void TimeControlPopUp()
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
     XtSetArg(args[j], XtNleft, XtChainLeft);  j++;\r
     XtSetArg(args[j], XtNright, XtChainLeft);  j++;\r
-    b_inc = XtCreateManagedWidget("incremental", commandWidgetClass,\r
+    b_inc = XtCreateManagedWidget(_("incremental"), commandWidgetClass,\r
                                   form, args, j);   \r
     XtAddCallback(b_inc, XtNcallback, TimeControlCallback, (XtPointer) 0);\r
 \r
@@ -510,7 +519,7 @@ void TimeControlPopUp()
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
     XtSetArg(args[j], XtNleft, XtChainRight);  j++;\r
     XtSetArg(args[j], XtNright, XtChainRight);  j++;\r
-    b_ok= XtCreateManagedWidget(" OK ", commandWidgetClass,\r
+    b_ok= XtCreateManagedWidget(_(" OK "), commandWidgetClass,\r
                                   form, args, j);   \r
     XtAddCallback(b_ok, XtNcallback, TimeControlCallback, (XtPointer) 0);\r
 \r
@@ -521,7 +530,7 @@ void TimeControlPopUp()
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
     XtSetArg(args[j], XtNleft, XtChainRight);  j++;\r
     XtSetArg(args[j], XtNright, XtChainRight);  j++;\r
-    b_cancel= XtCreateManagedWidget("cancel", commandWidgetClass,\r
+    b_cancel= XtCreateManagedWidget(_("cancel"), commandWidgetClass,\r
                                   form, args, j);   \r
     XtAddCallback(b_cancel, XtNcallback, TimeControlPopDown, (XtPointer) 0);\r
 \r
@@ -593,7 +602,7 @@ void EngineCallback(w, client_data, call_data)
     XtSetArg(args[0], XtNlabel, &name);\r
     XtGetValues(w, args, 1);\r
     \r
-    if (strcmp(name, "OK") == 0) {\r
+    if (strcmp(name, _("OK")) == 0) {\r
        // read all switches\r
        appData.periodicUpdates = ReadToggle(w1);\r
 //     appData.hideThinkingFromHuman = ReadToggle(w2);\r
@@ -647,7 +656,7 @@ void EnginePopUp()
     XtSetArg(args[i], XtNresizable, True); i++;\r
 //    XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;\r
     EngineShell = popup =\r
-      XtCreatePopupShell("Adjudications", transientShellWidgetClass,\r
+      XtCreatePopupShell(_("Adjudications"), transientShellWidgetClass,\r
                         shellWidget, args, i);\r
     \r
     layout =\r
@@ -670,41 +679,41 @@ void EnginePopUp()
     XtSetArg(args[j], XtNright,       (XtArgVal) XtChainRight); j++;\r
     XtSetArg(args[j], XtNstate,       appData.periodicUpdates); j++;\r
 //    XtSetArg(args[j], XtNjustify,     (XtArgVal) XtJustifyLeft); j++;\r
-    w1 = XtCreateManagedWidget("Periodic Updates (Analysis Mode)", toggleWidgetClass, form, args, j);\r
+    w1 = XtCreateManagedWidget(_("Periodic Updates (Analysis Mode)"), toggleWidgetClass, form, args, j);\r
 \r
     XtSetArg(args[j], XtNwidth,       (XtArgVal) &width);\r
     XtGetValues(w1, &args[j], 1);\r
 \r
 //    XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w1);\r
 //    XtSetArg(args[j-3], XtNstate,       appData.hideThinkingFromHuman);\r
-//    w2 = XtCreateManagedWidget("Hide Thinking from Human", toggleWidgetClass, form, args, j);\r
+//    w2 = XtCreateManagedWidget(_("Hide Thinking from Human"), toggleWidgetClass, form, args, j);\r
 \r
     XtSetArg(args[j], XtNwidth,       (XtArgVal) width); j++;\r
     XtSetArg(args[j-2], XtNstate,     appData.firstScoreIsAbsolute);\r
     XtSetArg(args[j], XtNfromVert,    (XtArgVal) w1); j++;\r
-    w3 = XtCreateManagedWidget("Engine #1 Score is Absolute", toggleWidgetClass, form, args, j);\r
+    w3 = XtCreateManagedWidget(_("Engine #1 Score is Absolute"), toggleWidgetClass, form, args, j);\r
 \r
     XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w3);\r
     XtSetArg(args[j-3], XtNstate,       appData.secondScoreIsAbsolute);\r
-    w4 = XtCreateManagedWidget("Engine #2 Score is Absolute", toggleWidgetClass, form, args, j);\r
+    w4 = XtCreateManagedWidget(_("Engine #2 Score is Absolute"), toggleWidgetClass, form, args, j);\r
 \r
-    s1 = XtCreateManagedWidget("\nEngine-Engine Adjudications:", labelWidgetClass, form, args, 3);\r
+    s1 = XtCreateManagedWidget(_("\nEngine-Engine Adjudications:"), labelWidgetClass, form, args, 3);\r
 \r
     XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) s1);\r
     XtSetArg(args[j-3], XtNstate,       appData.testClaims);\r
-    w5 = XtCreateManagedWidget("Verify Engine Result Claims", toggleWidgetClass, form, args, j);\r
+    w5 = XtCreateManagedWidget(_("Verify Engine Result Claims"), toggleWidgetClass, form, args, j);\r
 \r
     XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w5);\r
     XtSetArg(args[j-3], XtNstate,       appData.checkMates);\r
-    w6 = XtCreateManagedWidget("Detect All Mates", toggleWidgetClass, form, args, j);\r
+    w6 = XtCreateManagedWidget(_("Detect All Mates"), toggleWidgetClass, form, args, j);\r
 \r
     XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w6);\r
     XtSetArg(args[j-3], XtNstate,       appData.materialDraws);\r
-    w7 = XtCreateManagedWidget("Draw when Insuff. Mating Material", toggleWidgetClass, form, args, j);\r
+    w7 = XtCreateManagedWidget(_("Draw when Insuff. Mating Material"), toggleWidgetClass, form, args, j);\r
 \r
     XtSetArg(args[j-1], XtNfromVert,  (XtArgVal) w7);\r
     XtSetArg(args[j-3], XtNstate,       appData.trivialDraws);\r
-    w8 = XtCreateManagedWidget("Adjudicate Trivial Draws", toggleWidgetClass, form, args, j);\r
+    w8 = XtCreateManagedWidget(_("Adjudicate Trivial Draws"), toggleWidgetClass, form, args, j);\r
 \r
     XtSetArg(args[0], XtNfromVert,  (XtArgVal) w4);\r
     XtSetArg(args[1], XtNborderWidth, (XtArgVal) 0);\r
@@ -729,7 +738,7 @@ void EnginePopUp()
     XtAddEventHandler(engDrawMoves, ButtonPressMask, False, SetFocus, (XtPointer) popup);\r
 \r
     j= 0;\r
-    XtSetArg(args[j], XtNlabel, " moves maximum, then draw"); j++;\r
+    XtSetArg(args[j], XtNlabel, _(" moves maximum, then draw")); j++;\r
     XtSetArg(args[j], XtNjustify,     (XtArgVal) XtJustifyLeft); j++;\r
     XtSetArg(args[j], XtNborderWidth, 0); j++;\r
     XtSetArg(args[j], XtNfromVert, w8); j++;\r
@@ -761,7 +770,7 @@ void EnginePopUp()
     XtAddEventHandler(engThreshold, ButtonPressMask, False, SetFocus, (XtPointer) popup);\r
 \r
     j= 0;\r
-    XtSetArg(args[j], XtNlabel, "-centiPawn lead is win"); j++;\r
+    XtSetArg(args[j], XtNlabel, _("-centiPawn lead is win")); j++;\r
     XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++;\r
     XtSetArg(args[j], XtNborderWidth, 0); j++;\r
     XtSetArg(args[j], XtNfromVert, engDrawMoves); j++;\r
@@ -793,7 +802,7 @@ void EnginePopUp()
     XtAddEventHandler(engRule, ButtonPressMask, False, SetFocus, (XtPointer) popup);\r
 \r
     j= 0;\r
-    XtSetArg(args[j], XtNlabel, "-move rule applied"); j++;\r
+    XtSetArg(args[j], XtNlabel, _("-move rule applied")); j++;\r
     XtSetArg(args[j], XtNjustify,     (XtArgVal) XtJustifyLeft); j++;\r
     XtSetArg(args[j], XtNborderWidth, 0); j++;\r
     XtSetArg(args[j], XtNfromVert, engThreshold); j++;\r
@@ -825,7 +834,7 @@ void EnginePopUp()
     XtAddEventHandler(engRepeat, ButtonPressMask, False, SetFocus, (XtPointer) popup);\r
 \r
     j= 0;\r
-    XtSetArg(args[j], XtNlabel, "-fold repeat is draw"); j++;\r
+    XtSetArg(args[j], XtNlabel, _("-fold repeat is draw")); j++;\r
     XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++;\r
     XtSetArg(args[j], XtNborderWidth, 0); j++;\r
     XtSetArg(args[j], XtNfromVert, engRule); j++;\r
@@ -845,7 +854,7 @@ void EnginePopUp()
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
     XtSetArg(args[j], XtNleft, XtChainRight);  j++;\r
     XtSetArg(args[j], XtNright, XtChainRight);  j++;\r
-    b_ok= XtCreateManagedWidget("OK", commandWidgetClass, form, args, j);   \r
+    b_ok= XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j);   \r
     XtAddCallback(b_ok, XtNcallback, EngineCallback, (XtPointer) 0);\r
 \r
     j=0;\r
@@ -855,7 +864,7 @@ void EnginePopUp()
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
     XtSetArg(args[j], XtNleft, XtChainRight);  j++;\r
     XtSetArg(args[j], XtNright, XtChainRight);  j++;\r
-    b_cancel= XtCreateManagedWidget("cancel", commandWidgetClass,\r
+    b_cancel= XtCreateManagedWidget(_("cancel"), commandWidgetClass,\r
                                   form, args, j);   \r
     XtAddCallback(b_cancel, XtNcallback, EnginePopDown, (XtPointer) 0);\r
 \r
@@ -894,35 +903,35 @@ struct NewVarButton {
 };\r
 \r
 struct NewVarButton buttonDesc[] = {\r
-    {"normal",            "#FFFFFF", 0, VariantNormal},\r
-    {"FRC",               "#FFFFFF", 0, VariantFischeRandom},\r
-    {"wild castle",       "#FFFFFF", 0, VariantWildCastle},\r
-    {"no castle",         "#FFFFFF", 0, VariantNoCastle},\r
-    {"knightmate",        "#FFFFFF", 0, VariantKnightmate},\r
-    {"berolina",          "#FFFFFF", 0, VariantBerolina},\r
-    {"cylinder",          "#FFFFFF", 0, VariantCylinder},\r
-    {"shatranj",          "#FFFFFF", 0, VariantShatranj},\r
-    {"atomic",            "#FFFFFF", 0, VariantAtomic},\r
-    {"two kings",         "#FFFFFF", 0, VariantTwoKings},\r
-    {"3-checks",          "#FFFFFF", 0, Variant3Check},\r
-    {"suicide",           "#FFFFBF", 0, VariantSuicide},\r
-    {"give-away",         "#FFFFBF", 0, VariantGiveaway},\r
-    {"losers",            "#FFFFBF", 0, VariantLosers},\r
-    {"fairy",             "#BFBFBF", 0, VariantFairy},\r
-    {"Superchess",        "#FFBFBF", 0, VariantSuper},\r
-    {"crazyhouse",        "#FFBFBF", 0, VariantCrazyhouse},\r
-    {"bughouse",          "#FFBFBF", 0, VariantBughouse},\r
-    {"shogi (9x9)",       "#BFFFFF", 0, VariantShogi},\r
-    {"xiangqi (9x10)",    "#BFFFFF", 0, VariantXiangqi},\r
-    {"courier (12x8)",    "#BFFFBF", 0, VariantCourier},\r
-    {"janus (10x8)",      "#BFBFFF", 0, VariantJanus},\r
-    {"Capablanca (10x8)", "#BFBFFF", 0, VariantCapablanca},\r
-    {"CRC (10x8)",        "#BFBFFF", 0, VariantCapaRandom},\r
+    {N_("normal"),            "#FFFFFF", 0, VariantNormal},\r
+    {N_("FRC"),               "#FFFFFF", 0, VariantFischeRandom},\r
+    {N_("wild castle"),       "#FFFFFF", 0, VariantWildCastle},\r
+    {N_("no castle"),         "#FFFFFF", 0, VariantNoCastle},\r
+    {N_("knightmate"),        "#FFFFFF", 0, VariantKnightmate},\r
+    {N_("berolina"),          "#FFFFFF", 0, VariantBerolina},\r
+    {N_("cylinder"),          "#FFFFFF", 0, VariantCylinder},\r
+    {N_("shatranj"),          "#FFFFFF", 0, VariantShatranj},\r
+    {N_("atomic"),            "#FFFFFF", 0, VariantAtomic},\r
+    {N_("two kings"),         "#FFFFFF", 0, VariantTwoKings},\r
+    {N_("3-checks"),          "#FFFFFF", 0, Variant3Check},\r
+    {N_("suicide"),           "#FFFFBF", 0, VariantSuicide},\r
+    {N_("give-away"),         "#FFFFBF", 0, VariantGiveaway},\r
+    {N_("losers"),            "#FFFFBF", 0, VariantLosers},\r
+    {N_("fairy"),             "#BFBFBF", 0, VariantFairy},\r
+    {N_("Superchess"),        "#FFBFBF", 0, VariantSuper},\r
+    {N_("crazyhouse"),        "#FFBFBF", 0, VariantCrazyhouse},\r
+    {N_("bughouse"),          "#FFBFBF", 0, VariantBughouse},\r
+    {N_("shogi (9x9)"),       "#BFFFFF", 0, VariantShogi},\r
+    {N_("xiangqi (9x10)"),    "#BFFFFF", 0, VariantXiangqi},\r
+    {N_("courier (12x8)"),    "#BFFFBF", 0, VariantCourier},\r
+    {N_("janus (10x8)"),      "#BFBFFF", 0, VariantJanus},\r
+    {N_("Capablanca (10x8)"), "#BFBFFF", 0, VariantCapablanca},\r
+    {N_("CRC (10x8)"),        "#BFBFFF", 0, VariantCapaRandom},\r
 #ifdef GOTHIC\r
-    {"Gothic (10x8)",     "#BFBFFF", 0, VariantGothic},\r
+    {N_("Gothic (10x8)"),     "#BFBFFF", 0, VariantGothic},\r
 #endif\r
 #ifdef FALCON\r
-    {"Falcon (10x8)",     "#BFBFFF", 0, VariantFalcon},\r
+    {N_("Falcon (10x8)"),     "#BFBFFF", 0, VariantFalcon},\r
 #endif\r
     {NULL,                0, 0, (VariantClass) 0}\r
 };\r
@@ -952,7 +961,7 @@ void NewVariantCallback(w, client_data, call_data)
     XtSetArg(args[0], XtNlabel, &name);\r
     XtGetValues(w, args, 1);\r
     \r
-    if (strcmp(name, "  OK  ") == 0) {\r
+    if (strcmp(name, _("  OK  ")) == 0) {\r
        int nr = (int) XawToggleGetCurrent(buttonDesc[0].handle) - 1;\r
        if(nr < 0) return;\r
        v = buttonDesc[nr].variant;\r
@@ -960,13 +969,13 @@ void NewVariantCallback(w, client_data, call_data)
            char *name = VariantName(v), buf[MSG_SIZ];\r
            if (first.protocolVersion > 1 && StrStr(first.variants, name) == NULL) {\r
                /* [HGM] in protocol 2 we check if variant is suported by engine */\r
-               sprintf(buf, "Variant %s not supported by %s", name, first.tidy);\r
+               sprintf(buf, _("Variant %s not supported by %s"), name, first.tidy);\r
                DisplayError(buf, 0);\r
 //             NewVariantPopDown();\r
                return; /* ignore OK if first engine does not support it */\r
            } else\r
            if (second.initDone && second.protocolVersion > 1 && StrStr(second.variants, name) == NULL) {\r
-               sprintf(buf, "Warning: second engine (%s) does not support this!", second.tidy);\r
+               sprintf(buf, _("Warning: second engine (%s) does not support this!"), second.tidy);\r
                DisplayError(buf, 0);   /* use of second engine is optional; only warn user */\r
            }\r
        }\r
@@ -999,7 +1008,7 @@ void NewVariantPopUp()
 //    XtSetArg(args[i], XtNwidth, 250); i++;\r
 //    XtSetArg(args[i], XtNheight, 300); i++;\r
     NewVariantShell = popup =\r
-      XtCreatePopupShell("NewVariant Menu", transientShellWidgetClass,\r
+      XtCreatePopupShell(_("NewVariant Menu"), transientShellWidgetClass,\r
                         shellWidget, args, i);\r
     \r
     layout =\r
@@ -1045,7 +1054,7 @@ void NewVariantPopUp()
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
     XtSetArg(args[j], XtNleft, XtChainRight);  j++;\r
     XtSetArg(args[j], XtNright, XtChainRight);  j++;\r
-    b_cancel= XtCreateManagedWidget("CANCEL", commandWidgetClass, form, args, j);   \r
+    b_cancel= XtCreateManagedWidget(_("CANCEL"), commandWidgetClass, form, args, j);   \r
     XtAddCallback(b_cancel, XtNcallback, NewVariantPopDown, (XtPointer) 0);\r
 \r
     j=0;\r
@@ -1057,7 +1066,7 @@ void NewVariantPopUp()
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
     XtSetArg(args[j], XtNleft, XtChainRight);  j++;\r
     XtSetArg(args[j], XtNright, XtChainRight);  j++;\r
-    b_ok= XtCreateManagedWidget("  OK  ", commandWidgetClass, form, args, j);   \r
+    b_ok= XtCreateManagedWidget(_("  OK  "), commandWidgetClass, form, args, j);   \r
     XtAddCallback(b_ok, XtNcallback, NewVariantCallback, (XtPointer) 0);\r
 \r
     XtRealizeWidget(popup);\r
@@ -1094,12 +1103,12 @@ struct UciControl {
 };\r
 \r
 struct UciControl controlDesc[] = {\r
-  {"maximum nr of CPUs:", 0, &appData.smpCores},\r
-  {"Polyglot Directory:", 0, &appData.polyglotDir},\r
-  {"Hash Size (MB):",     0, &appData.defaultHashSize},\r
-  {"EGTB Path:",          0, &appData.defaultPathEGTB},\r
-  {"EGTB Cache (MB):",    0, &appData.defaultCacheSizeEGTB},\r
-  {"Polyglot Book:",      0, &appData.polyglotBook},\r
+  {N_("maximum nr of CPUs:"), 0, &appData.smpCores},\r
+  {N_("Polyglot Directory:"), 0, &appData.polyglotDir},\r
+  {N_("Hash Size (MB):"),     0, &appData.defaultHashSize},\r
+  {N_("EGTB Path:"),          0, &appData.defaultPathEGTB},\r
+  {N_("EGTB Cache (MB):"),    0, &appData.defaultCacheSizeEGTB},\r
+  {N_("Polyglot Book:"),      0, &appData.polyglotBook},\r
   {NULL, 0, NULL},\r
 };\r
 \r
@@ -1124,7 +1133,7 @@ void UciCallback(w, client_data, call_data)
     XtSetArg(args[0], XtNlabel, &name);\r
     XtGetValues(w, args, 1);\r
     \r
-    if (strcmp(name, "OK") == 0) {\r
+    if (strcmp(name, _("OK")) == 0) {\r
        int nr, i, j; String name;\r
        for(i=0; i<6; i++) {\r
            XtSetArg(args[0], XtNstring, &name);\r
@@ -1179,7 +1188,7 @@ void UciPopUp()
     XtSetArg(args[i], XtNresizable, True); i++;\r
 //    XtSetArg(args[i], XtNwidth, 300); i++;\r
     UciShell = popup =\r
-      XtCreatePopupShell("Engine Settings", transientShellWidgetClass,\r
+      XtCreatePopupShell(_("Engine Settings"), transientShellWidgetClass,\r
                         shellWidget, args, i);\r
     \r
     layout =\r
@@ -1234,7 +1243,7 @@ void UciPopUp()
     XtSetArg(args[j], XtNleft, XtChainRight);  j++;\r
     XtSetArg(args[j], XtNright, XtChainRight);  j++;\r
     XtSetArg(args[j], XtNstate, appData.ponderNextMove);  j++;\r
-    w4 = XtCreateManagedWidget("Ponder", toggleWidgetClass, form, args, j);   \r
+    w4 = XtCreateManagedWidget(_("Ponder"), toggleWidgetClass, form, args, j);   \r
 \r
     j=0;\r
     XtSetArg(args[j], XtNfromVert, last);  j++;\r
@@ -1242,29 +1251,29 @@ void UciPopUp()
     XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
     XtSetArg(args[j], XtNleft, XtChainLeft);  j++;\r
     XtSetArg(args[j], XtNright, XtChainLeft);  j++;\r
-    b_ok = XtCreateManagedWidget("OK", commandWidgetClass, form, args, j);   \r
+    b_ok = XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j);   \r
     XtAddCallback(b_ok, XtNcallback, UciCallback, (XtPointer) 0);\r
 \r
     XtSetArg(args[j], XtNfromHoriz, b_ok);  j++;\r
-    b_cancel = XtCreateManagedWidget("cancel", commandWidgetClass, form, args, j);   \r
+    b_cancel = XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j);   \r
     XtAddCallback(b_cancel, XtNcallback, UciPopDown, (XtPointer) 0);\r
 \r
     j = 5;\r
     XtSetArg(args[j], XtNfromHoriz, upperLeft);  j++;\r
     XtSetArg(args[j], XtNstate, appData.usePolyglotBook);  j++;\r
-    w1 = XtCreateManagedWidget(" use book ", toggleWidgetClass, form, args, j);   \r
+    w1 = XtCreateManagedWidget(_(" use book "), toggleWidgetClass, form, args, j);   \r
 //    XtAddCallback(w1, XtNcallback, UciCallback, (XtPointer) 0);\r
 \r
     j = 5;\r
     XtSetArg(args[j], XtNfromHoriz, w1);  j++;\r
     XtSetArg(args[j], XtNstate, appData.firstHasOwnBookUCI);  j++;\r
-    w2 = XtCreateManagedWidget("own book 1", toggleWidgetClass, form, args, j);   \r
+    w2 = XtCreateManagedWidget(_("own book 1"), toggleWidgetClass, form, args, j);   \r
 //    XtAddCallback(w2, XtNcallback, UciCallback, (XtPointer) 0);\r
 \r
     j = 5;\r
     XtSetArg(args[j], XtNfromHoriz, w2);  j++;\r
     XtSetArg(args[j], XtNstate, appData.secondHasOwnBookUCI);  j++;\r
-    w3 = XtCreateManagedWidget("own book 2", toggleWidgetClass, form, args, j);   \r
+    w3 = XtCreateManagedWidget(_("own book 2"), toggleWidgetClass, form, args, j);   \r
 //    XtAddCallback(w3, XtNcallback, UciCallback, (XtPointer) 0);\r
 \r
     XtRealizeWidget(popup);\r
@@ -1294,6 +1303,328 @@ void UciMenuProc(w, event, prms, nprms)
    UciPopUp();\r
 }\r
 \r
+//--------------------------- Engine-specific options menu ----------------------------------\r
+\r
+int SettingsUp;\r
+Widget SettingsShell;\r
+int values[MAX_OPTIONS];\r
+ChessProgramState *currentCps;\r
+\r
+void SettingsPopDown()\r
+{\r
+    if (!SettingsUp) return;\r
+    XtPopdown(SettingsShell);\r
+    XtDestroyWidget(SettingsShell);\r
+    SettingsUp = False;\r
+    ModeHighlight();\r
+}\r
+\r
+void SpinCallback(w, client_data, call_data)\r
+     Widget w;\r
+     XtPointer client_data, call_data;\r
+{\r
+    String name, val;\r
+    Widget w2;\r
+    Arg args[16];\r
+    char buf[MSG_SIZ];\r
+    int i, j;\r
+    \r
+    XtSetArg(args[0], XtNlabel, &name);\r
+    XtGetValues(w, args, 1);\r
+    \r
+    j = 0;\r
+    XtSetArg(args[0], XtNstring, &val);\r
+    XtGetValues(currentCps->option[(int)client_data].handle, args, 1);\r
+    sscanf(val, "%d", &j);\r
+    if (strcmp(name, "+") == 0) {\r
+       if(++j > currentCps->option[(int)client_data].max) return;\r
+    } else\r
+    if (strcmp(name, "-") == 0) {\r
+       if(--j < currentCps->option[(int)client_data].min) return;\r
+    } else return;\r
+    sprintf(buf, "%d", j);\r
+    XtSetArg(args[0], XtNstring, buf);\r
+    XtSetValues(currentCps->option[(int)client_data].handle, args, 1);\r
+}\r
+\r
+void SettingsCallback(w, client_data, call_data)\r
+     Widget w;\r
+     XtPointer client_data, call_data;\r
+{\r
+    String name, val;\r
+    Widget w2;\r
+    Arg args[16];\r
+    char buf[MSG_SIZ];\r
+    int i, j;\r
+    \r
+    XtSetArg(args[0], XtNlabel, &name);\r
+    XtGetValues(w, args, 1);\r
+    \r
+    if (strcmp(name, _("cancel")) == 0) {\r
+        SettingsPopDown();\r
+        return;\r
+    }\r
+    if (strcmp(name, _("OK")) == 0 || (int)client_data) { // save buttons imply OK\r
+       int nr;\r
+\r
+       for(i=0; i<currentCps->nrOptions; i++) { // send all options that had to be OK-ed to engine\r
+           switch(currentCps->option[i].type) {\r
+               case TextBox:\r
+                   XtSetArg(args[0], XtNstring, &val);\r
+                   XtGetValues(currentCps->option[i].handle, args, 1);\r
+                   if(strcmp(currentCps->option[i].textValue, val)) {\r
+                       strcpy(currentCps->option[i].textValue, val);\r
+                       sprintf(buf, _("option %s %s\n"), currentCps->option[i].name, val);\r
+                       SendToProgram(buf, currentCps);\r
+                   }\r
+                   break;\r
+               case Spin:\r
+                   XtSetArg(args[0], XtNstring, &val);\r
+                   XtGetValues(currentCps->option[i].handle, args, 1);\r
+                   sscanf(val, "%d", &j);\r
+                   if(j > currentCps->option[i].max) j = currentCps->option[i].max;\r
+                   if(j < currentCps->option[i].min) j = currentCps->option[i].min;\r
+                   if(currentCps->option[i].value != j) {\r
+                       currentCps->option[i].value = j;\r
+                       sprintf(buf, _("option %s %d\n"), currentCps->option[i].name, j);\r
+                       SendToProgram(buf, currentCps);\r
+                   }\r
+                   break;\r
+               case CheckBox:\r
+                   j = 0;\r
+                   XtSetArg(args[0], XtNstate, &j);\r
+                   XtGetValues(currentCps->option[i].handle, args, 1);\r
+                   if(currentCps->option[i].value != j) {\r
+                       currentCps->option[i].value = j;\r
+                       sprintf(buf, _("option %s %d\n"), currentCps->option[i].name, j);\r
+                       SendToProgram(buf, currentCps);\r
+                   }\r
+                   break;\r
+               case ComboBox:\r
+                   if(currentCps->option[i].value != values[i]) {\r
+                       currentCps->option[i].value = values[i];\r
+                       sprintf(buf, _("option %s %s\n"), currentCps->option[i].name, \r
+                               ((char**)currentCps->option[i].textValue)[values[i]]);\r
+                       SendToProgram(buf, currentCps);\r
+                   }\r
+                   break;\r
+           }\r
+       }\r
+       if((int)client_data) { // send save-button command to engine\r
+           sprintf(buf, _("option %s\n"), name);\r
+           SendToProgram(buf, currentCps);\r
+       }\r
+        SettingsPopDown();\r
+        return;\r
+    }\r
+    sprintf(buf, _("option %s\n"), name);\r
+    SendToProgram(buf, currentCps);\r
+}\r
+\r
+void ComboSelect(w, addr, index) // callback for all combo items\r
+     Widget w;\r
+     caddr_t addr;\r
+     caddr_t index;\r
+{\r
+    Arg args[16];\r
+    int i = ((int)addr)>>8;\r
+    int j = 255 & (int) addr;\r
+\r
+    values[i] = j; // store in temporary, for transfer at OK\r
+    XtSetArg(args[0], XtNlabel, ((char**)currentCps->option[i].textValue)[j]);\r
+    XtSetValues(currentCps->option[i].handle, args, 1);\r
+}\r
+\r
+void CreateComboPopup(parent, name, n, mb)\r
+     Widget parent;\r
+     String name;\r
+     int n;\r
+     char *mb[];\r
+{\r
+    int i=0, j;\r
+    Widget menu, entry;\r
+    Arg args[16];\r
+\r
+    menu = XtCreatePopupShell(name, simpleMenuWidgetClass,\r
+                             parent, NULL, 0);\r
+    j = 0;\r
+    XtSetArg(args[j], XtNwidth, 100);  j++;\r
+//    XtSetArg(args[j], XtNright, XtChainRight);  j++;\r
+    while (mb[i] != NULL) {\r
+           entry = XtCreateManagedWidget(mb[i], smeBSBObjectClass,\r
+                                         menu, args, j);\r
+           XtAddCallback(entry, XtNcallback,\r
+                         (XtCallbackProc) ComboSelect,\r
+                         (caddr_t) (256*n+i));\r
+       i++;\r
+    }\r
+}      \r
+\r
+void SettingsPopUp(ChessProgramState *cps)\r
+{\r
+    Arg args[16];\r
+    Widget popup, layout, dialog, edit, form, oldform, last, b_ok, b_cancel;\r
+    Window root, child;\r
+    int x, y, i, j;\r
+    int win_x, win_y;\r
+    unsigned int mask;\r
+    char def[80], *p, *q;\r
+\r
+    // to do: start up second engine if needed\r
+    if(!cps->initDone || !cps->nrOptions) return; // nothing to be done\r
+    currentCps = cps;\r
+\r
+    i = 0;\r
+    XtSetArg(args[i], XtNresizable, True); i++;\r
+    SettingsShell = popup =\r
+      XtCreatePopupShell(_("Settings Menu"), transientShellWidgetClass,\r
+                        shellWidget, args, i);\r
+    \r
+    layout =\r
+      XtCreateManagedWidget(layoutName, formWidgetClass, popup,\r
+                           layoutArgs, XtNumber(layoutArgs));\r
+  \r
+    form =\r
+      XtCreateManagedWidget(layoutName, formWidgetClass, layout,\r
+                           formArgs, XtNumber(formArgs));\r
+  \r
+    last = NULL;\r
+    for(i=0; i<cps->nrOptions; i++) {\r
+       Widget box;\r
+       switch(cps->option[i].type) {\r
+         case Spin:\r
+           sprintf(def, "%d", cps->option[i].value);\r
+         case TextBox:\r
+           j=0;\r
+           XtSetArg(args[j], XtNfromVert, last);  j++;\r
+           XtSetArg(args[j], XtNborderWidth, 0);  j++;\r
+           XtSetArg(args[j], XtNjustify, XtJustifyLeft);  j++;\r
+           dialog = XtCreateManagedWidget(cps->option[i].name, labelWidgetClass, form, args, j);   \r
+           j=0;\r
+           XtSetArg(args[j], XtNfromVert, last);  j++;\r
+           XtSetArg(args[j], XtNfromHoriz, dialog);  j++;\r
+           XtSetArg(args[j], XtNborderWidth, 1); j++;\r
+           XtSetArg(args[j], XtNwidth, cps->option[i].type == Spin ? 40 : 100); j++;\r
+           XtSetArg(args[j], XtNeditType, XawtextEdit);  j++;\r
+           XtSetArg(args[j], XtNuseStringInPlace, False);  j++;\r
+           XtSetArg(args[j], XtNdisplayCaret, False);  j++;\r
+           XtSetArg(args[j], XtNright, XtChainRight);  j++;\r
+           XtSetArg(args[j], XtNresizable, True);  j++;\r
+           XtSetArg(args[j], XtNstring, cps->option[i].type==Spin ? def : cps->option[i].textValue);  j++;\r
+           edit = last;\r
+           cps->option[i].handle = (void*)\r
+               (last = XtCreateManagedWidget("text", asciiTextWidgetClass, form, args, j));   \r
+           XtAddEventHandler(box, ButtonPressMask, False, SetFocus, (XtPointer) popup);\r
+           if(cps->option[i].type == TextBox) break;\r
+           // add increment and decrement controls for spin\r
+           j=0;\r
+           XtSetArg(args[j], XtNfromVert, edit);  j++;\r
+           XtSetArg(args[j], XtNfromHoriz, box);  j++;\r
+           XtSetArg(args[j], XtNheight, 10);  j++;\r
+           XtSetArg(args[j], XtNwidth, 20);  j++;\r
+           edit = XtCreateManagedWidget("+", commandWidgetClass, form, args, j);\r
+           XtAddCallback(edit, XtNcallback, SpinCallback, (XtPointer) i);\r
+           j=0;\r
+           XtSetArg(args[j], XtNfromVert, edit);  j++;\r
+           XtSetArg(args[j], XtNfromHoriz, last);  j++;\r
+           XtSetArg(args[j], XtNheight, 10);  j++;\r
+           XtSetArg(args[j], XtNwidth, 20);  j++;\r
+           last = XtCreateManagedWidget("-", commandWidgetClass, form, args, j);\r
+           XtAddCallback(last, XtNcallback, SpinCallback, (XtPointer) i);\r
+           break;\r
+         case CheckBox:\r
+           j=0;\r
+           XtSetArg(args[j], XtNfromVert, last);  j++;\r
+           XtSetArg(args[j], XtNwidth, 10);  j++;\r
+           XtSetArg(args[j], XtNheight, 10);  j++;\r
+           XtSetArg(args[j], XtNstate, cps->option[i].value);  j++;\r
+           cps->option[i].handle = (void*) \r
+               (dialog = XtCreateManagedWidget(" ", toggleWidgetClass, form, args, j));   \r
+           j=0;\r
+           XtSetArg(args[j], XtNfromVert, last);  j++;\r
+           XtSetArg(args[j], XtNfromHoriz, dialog);  j++;\r
+           XtSetArg(args[j], XtNborderWidth, 0);  j++;\r
+           XtSetArg(args[j], XtNjustify, XtJustifyLeft);  j++;\r
+           last = XtCreateManagedWidget(cps->option[i].name, labelWidgetClass, form, args, j);\r
+           break;\r
+         case SaveButton:\r
+         case Button:\r
+           j=0;\r
+           XtSetArg(args[j], XtNfromVert, last);  j++;\r
+           XtSetArg(args[j], XtNstate, cps->option[i].value);  j++;\r
+           cps->option[i].handle = (void*) \r
+               (last = XtCreateManagedWidget(cps->option[i].name, commandWidgetClass, form, args, j));   \r
+           XtAddCallback(last, XtNcallback, SettingsCallback, (XtPointer) (cps->option[i].type == SaveButton));\r
+           break;\r
+         case ComboBox:\r
+           j=0;\r
+           XtSetArg(args[j], XtNfromVert, last);  j++;\r
+           XtSetArg(args[j], XtNborderWidth, 0);  j++;\r
+           XtSetArg(args[j], XtNjustify, XtJustifyLeft);  j++;\r
+           dialog = XtCreateManagedWidget(cps->option[i].name, labelWidgetClass, form, args, j);\r
+\r
+           j=0;\r
+           XtSetArg(args[j], XtNfromVert, last);  j++;\r
+           XtSetArg(args[j], XtNfromHoriz, dialog);  j++;\r
+           XtSetArg(args[j], XtNwidth, 100);  j++;\r
+           XtSetArg(args[j], XtNmenuName, XtNewString(cps->option[i].name));  j++;\r
+           XtSetArg(args[j], XtNlabel, ((char**)cps->option[i].textValue)[cps->option[i].value]);  j++;\r
+           cps->option[i].handle = (void*) \r
+               (last = XtCreateManagedWidget(" ", menuButtonWidgetClass, form, args, j));   \r
+           CreateComboPopup(last, cps->option[i].name, i, (char **) cps->option[i].textValue);\r
+           values[i] = cps->option[i].value;\r
+           break;\r
+       }\r
+    }\r
+\r
+    j=0;\r
+    XtSetArg(args[j], XtNfromVert, last);  j++;\r
+    XtSetArg(args[j], XtNbottom, XtChainBottom);  j++;\r
+    XtSetArg(args[j], XtNtop, XtChainBottom);  j++;\r
+    XtSetArg(args[j], XtNleft, XtChainLeft);  j++;\r
+    XtSetArg(args[j], XtNright, XtChainLeft);  j++;\r
+    b_ok = XtCreateManagedWidget(_("OK"), commandWidgetClass, form, args, j);   \r
+    XtAddCallback(b_ok, XtNcallback, SettingsCallback, (XtPointer) 0);\r
+\r
+    XtSetArg(args[j], XtNfromHoriz, b_ok);  j++;\r
+    b_cancel = XtCreateManagedWidget(_("cancel"), commandWidgetClass, form, args, j);   \r
+    XtAddCallback(b_cancel, XtNcallback, SettingsPopDown, (XtPointer) 0);\r
+\r
+    XtRealizeWidget(popup);\r
+    CatchDeleteWindow(popup, "SettingsPopDown");\r
+    \r
+    XQueryPointer(xDisplay, xBoardWindow, &root, &child,\r
+                 &x, &y, &win_x, &win_y, &mask);\r
+    \r
+    XtSetArg(args[0], XtNx, x - 10);\r
+    XtSetArg(args[1], XtNy, y - 30);\r
+    XtSetValues(popup, args, 2);\r
+    \r
+    XtPopup(popup, XtGrabExclusive);\r
+    SettingsUp = True;\r
+\r
+    previous = NULL;\r
+    SetFocus(edit, popup, (XEvent*) NULL, False);\r
+}\r
+\r
+void FirstSettingsProc(w, event, prms, nprms)\r
+     Widget w;\r
+     XEvent *event;\r
+     String *prms;\r
+     Cardinal *nprms;\r
+{\r
+   SettingsPopUp(&first);\r
+}\r
+\r
+void SecondSettingsProc(w, event, prms, nprms)\r
+     Widget w;\r
+     XEvent *event;\r
+     String *prms;\r
+     Cardinal *nprms;\r
+{\r
+   SettingsPopUp(&second);\r
+}\r
+\r
 //--------------------------- General Popup for Cloning ----------------------------------\r
 #if 0\r
 int XXXUp;\r
@@ -1320,11 +1651,11 @@ void XXXCallback(w, client_data, call_data)
     XtSetArg(args[0], XtNlabel, &name);\r
     XtGetValues(w, args, 1);\r
     \r
-    if (strcmp(name, "cancel") == 0) {\r
+    if (strcmp(name, _("cancel")) == 0) {\r
         XXXPopDown();\r
         return;\r
     }\r
-    if (strcmp(name, "ok") == 0) {\r
+    if (strcmp(name, _("ok")) == 0) {\r
        int nr; String name;\r
         name = XawDialogGetValueString(w2 = XtParent(w));\r
        if(sscanf(name ,"%d",&nr) != 1) {\r
@@ -1352,7 +1683,7 @@ void XXXPopUp()
     XtSetArg(args[i], XtNresizable, True); i++;\r
     XtSetArg(args[i], XtNwidth, DIALOG_SIZE); i++;\r
     XXXShell = popup =\r
-      XtCreatePopupShell("XXX Menu", transientShellWidgetClass,\r
+      XtCreatePopupShell(_("XXX Menu"), transientShellWidgetClass,\r
                         shellWidget, args, i);\r
     \r
     layout =\r
@@ -1367,8 +1698,8 @@ void XXXPopUp()
     dialog = XtCreateManagedWidget("XXX", dialogWidgetClass,\r
                                   layout, args, i);\r
     \r
-    XawDialogAddButton(dialog, "ok", XXXCallback, (XtPointer) dialog);\r
-    XawDialogAddButton(dialog, "cancel", XXXCallback, (XtPointer) dialog);\r
+    XawDialogAddButton(dialog, _("ok"), XXXCallback, (XtPointer) dialog);\r
+    XawDialogAddButton(dialog, _("cancel"), XXXCallback, (XtPointer) dialog);\r
     \r
     XtRealizeWidget(popup);\r
     CatchDeleteWindow(popup, "XXXPopDown");\r