X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=xoptions.c;h=2ca6c3b7e002e4539c8420404270bf90978ec0ee;hb=70fcaa9016951f1a0c6f63e62846cb411be48b76;hp=ec9a81b2c63fef539bc0c4ce5c01970010255795;hpb=fc750721a9bcb72acdaab32a09fe651c5ba5bb72;p=xboard.git diff --git a/xoptions.c b/xoptions.c index ec9a81b..2ca6c3b 100644 --- a/xoptions.c +++ b/xoptions.c @@ -80,22 +80,6 @@ extern char *getenv(); # define N_(s) s #endif -extern void SendToProgram P((char *message, ChessProgramState *cps)); -FILE * XsraSelFile P((Widget w, char *prompt, char *ok, char *cancel, char *failed, - char *init_path, char *filter, char *mode, int (*show_entry)(), char **name_return)); - -extern Widget formWidget, shellWidget, boardWidget, menuBarWidget; -extern Display *xDisplay; -extern int squareSize; -extern Pixmap xMarkPixmap; -extern char *layoutName; -extern Window xBoardWindow; -extern Arg layoutArgs[2], formArgs[2]; -Pixel timerForegroundPixel, timerBackgroundPixel; -extern int searchTime; -extern Atom wm_delete_window; -extern int lineGap; - // [HGM] the following code for makng menu popups was cloned from the FileNamePopUp routines static Widget previous = NULL; @@ -119,8 +103,6 @@ void SetFocus(Widget w, XtPointer data, XEvent *event, Boolean *b) } //--------------------------- New Shuffle Game -------------------------------------------- -extern int shuffleOpenings; -extern int startedFromPositionFile; int shuffleUp; Widget shuffleShell; @@ -332,7 +314,7 @@ void TimeControlCallback(w, client_data, call_data) return; } if (strcmp(name, _(" OK ")) == 0) { - int inc, mps, ok; + int inc, mps, ok=0; XtSetArg(args[0], XtNstring, &txt); XtGetValues(tcData, args, 1); switch(tcInc) { @@ -620,11 +602,13 @@ void TimeControlProc(w, event, prms, nprms) //--------------------------- Engine-specific options menu ---------------------------------- +typedef void ButtonCallback(int n); + int values[MAX_OPTIONS]; ChessProgramState *currentCps; static Option *currentOption; -extern Widget shells[]; static Boolean browserUp; +ButtonCallback *comboCallback; void CheckCallback(Widget ww, XtPointer data, XEvent *event, Boolean *b) { @@ -694,8 +678,10 @@ void ComboSelect(w, addr, index) // callback for all combo items int j = 255 & (intptr_t) addr; values[i] = j; // store in temporary, for transfer at OK - XtSetArg(args[0], XtNlabel, ((char**)currentOption[i].textValue)[j]); + XtSetArg(args[0], XtNlabel, _(((char**)currentOption[i].textValue)[j])); XtSetValues(currentOption[i].handle, args, 1); + + if(currentOption[i].min & 1 && !currentCps && comboCallback) (comboCallback)(i); } void CreateComboPopup(parent, name, n, mb) @@ -712,6 +698,7 @@ void CreateComboPopup(parent, name, n, mb) parent, NULL, 0); j = 0; XtSetArg(args[j], XtNwidth, 100); j++; + XtSetArg(args[j], XtNlabel, _(mb[i])); j++; // XtSetArg(args[j], XtNright, XtChainRight); j++; while (mb[i] != NULL) { entry = XtCreateManagedWidget(mb[i], smeBSBObjectClass, @@ -728,16 +715,13 @@ void CreateComboPopup(parent, name, n, mb) // cloned from Engine Settings dialog (and later merged with it) -typedef void ButtonCallback(int n); - extern WindowPlacement wpComment, wpTags; char *trialSound; static int oldCores, oldPonder; int MakeColors P((void)); void CreateGCs P((int redo)); -void CreateXPMBoard P((char *s, int kind)); -void CreateXPMPieces P((void)); -void GenericReadout(); +void CreateAnyPieces P((void)); +void GenericReadout P((int selected)); Widget shells[10]; Widget marked[10]; Boolean shellUp[10]; @@ -787,19 +771,18 @@ void GenericPopDown(w, event, prms, nprms) String *prms; Cardinal *nprms; { - int n; if(browserUp) return; // prevent closing dialog when it has an open file-browse daughter PopDown(prms[0][0] - '0'); } Option matchOptions[] = { -{ 0, 2, 1000000000, NULL, (void*) &appData.defaultMatchGames, "", NULL, Spin, _("Default Number of Games in Match:") }, -{ 0, 0, 1000000000, NULL, (void*) &appData.matchPause, "", NULL, Spin, _("Pause between Match Games (msec):") }, -{ 0, 0, 0, NULL, (void*) &appData.loadGameFile, "", NULL, FileName, _("Game File with Opening Lines:") }, -{ 0, -2, 1000000000, NULL, (void*) &appData.loadGameIndex, "", NULL, Spin, _("Game Number (-1 or -2 = Auto-Increment):") }, -{ 0, 0, 0, NULL, (void*) &appData.loadPositionFile, "", NULL, FileName, _("File with Start Positions:") }, -{ 0, -2, 1000000000, NULL, (void*) &appData.loadPositionIndex, "", NULL, Spin, _("Position Number (-1 or -2 = Auto-Increment):") }, -{ 0, 0, 1000000000, NULL, (void*) &appData.rewindIndex, "", NULL, Spin, _("Rewind Index after this many Games (0 = never):") }, +{ 0, 2, 1000000000, NULL, (void*) &appData.defaultMatchGames, "", NULL, Spin, N_("Default Number of Games in Match:") }, +{ 0, 0, 1000000000, NULL, (void*) &appData.matchPause, "", NULL, Spin, N_("Pause between Match Games (msec):") }, +{ 0, 0, 0, NULL, (void*) &appData.loadGameFile, "", NULL, FileName, N_("Game File with Opening Lines:") }, +{ 0, -2, 1000000000, NULL, (void*) &appData.loadGameIndex, "", NULL, Spin, N_("Game Number (-1 or -2 = Auto-Increment):") }, +{ 0, 0, 0, NULL, (void*) &appData.loadPositionFile, "", NULL, FileName, N_("File with Start Positions:") }, +{ 0, -2, 1000000000, NULL, (void*) &appData.loadPositionIndex, "", NULL, Spin, N_("Position Number (-1 or -2 = Auto-Increment):") }, +{ 0, 0, 1000000000, NULL, (void*) &appData.rewindIndex, "", NULL, Spin, N_("Rewind Index after this many Games (0 = never):") }, { 0, 0, 0, NULL, NULL, "", NULL, EndMark , "" } }; @@ -811,29 +794,29 @@ void GeneralOptionsOK(int n) } Option generalOptions[] = { -{ 0, 0, 0, NULL, (void*) &appData.sweepSelect, "", NULL, CheckBox, _("Almost Always Queen (Detour Under-Promote)") }, -{ 0, 0, 0, NULL, (void*) &appData.animateDragging, "", NULL, CheckBox, _("Animate Dragging") }, -{ 0, 0, 0, NULL, (void*) &appData.animate, "", NULL, CheckBox, _("Animate Moving") }, -{ 0, 0, 0, NULL, (void*) &appData.autoCallFlag, "", NULL, CheckBox, _("Auto Flag") }, -{ 0, 0, 0, NULL, (void*) &appData.autoFlipView, "", NULL, CheckBox, _("Auto Flip View") }, -{ 0, 0, 0, NULL, (void*) &appData.blindfold, "", NULL, CheckBox, _("Blindfold") }, -{ 0, 0, 0, NULL, (void*) &appData.dropMenu, "", NULL, CheckBox, _("Drop Menu") }, -{ 0, 0, 0, NULL, (void*) &appData.highlightDragging, "", NULL, CheckBox, _("Highlight Dragging (Show Move Targets)") }, -{ 0, 0, 0, NULL, (void*) &appData.highlightLastMove, "", NULL, CheckBox, _("Highlight Last Move") }, -{ 0, 0, 0, NULL, (void*) &appData.highlightMoveWithArrow, "", NULL, CheckBox, _("Highlight with Arrow") }, -{ 0, 0, 0, NULL, (void*) &appData.ringBellAfterMoves, "", NULL, CheckBox, _("Move Sound") }, -{ 0, 0, 0, NULL, (void*) &appData.oneClick, "", NULL, CheckBox, _("One-Click Moving") }, -{ 0, 0, 0, NULL, (void*) &appData.periodicUpdates, "", NULL, CheckBox, _("Periodic Updates (in Analysis Mode)") }, -{ 0, 0, 0, NULL, (void*) &appData.ponderNextMove, "", NULL, CheckBox, _("Ponder Next Move") }, -{ 0, 0, 0, NULL, (void*) &appData.popupExitMessage, "", NULL, CheckBox, _("Popup Exit Messages") }, -{ 0, 0, 0, NULL, (void*) &appData.popupMoveErrors, "", NULL, CheckBox, _("Popup Move Errors") }, -{ 0, 0, 0, NULL, (void*) &appData.showCoords, "", NULL, CheckBox, _("Show Coordinates") }, -{ 0, 0, 0, NULL, (void*) &appData.markers, "", NULL, CheckBox, _("Show Target Squares") }, -{ 0, 0, 0, NULL, (void*) &appData.hideThinkingFromHuman, "", NULL, CheckBox, _("Hide Thinking from Human") }, -{ 0, 0, 0, NULL, (void*) &appData.testLegality, "", NULL, CheckBox, _("Test Legality") }, -{ 0, 0, 10, NULL, (void*) &appData.flashCount, "", NULL, Spin, _("Flash Moves (0 = no flashing):") }, -{ 0, 1, 10, NULL, (void*) &appData.flashRate, "", NULL, Spin, _("Flash Rate (high = fast):") }, -{ 0, 5, 100,NULL, (void*) &appData.animSpeed, "", NULL, Spin, _("Animation Speed (high = slow):") }, +{ 0, 0, 0, NULL, (void*) &appData.sweepSelect, "", NULL, CheckBox, N_("Almost Always Queen (Detour Under-Promote)") }, +{ 0, 0, 0, NULL, (void*) &appData.animateDragging, "", NULL, CheckBox, N_("Animate Dragging") }, +{ 0, 0, 0, NULL, (void*) &appData.animate, "", NULL, CheckBox, N_("Animate Moving") }, +{ 0, 0, 0, NULL, (void*) &appData.autoCallFlag, "", NULL, CheckBox, N_("Auto Flag") }, +{ 0, 0, 0, NULL, (void*) &appData.autoFlipView, "", NULL, CheckBox, N_("Auto Flip View") }, +{ 0, 0, 0, NULL, (void*) &appData.blindfold, "", NULL, CheckBox, N_("Blindfold") }, +{ 0, 0, 0, NULL, (void*) &appData.dropMenu, "", NULL, CheckBox, N_("Drop Menu") }, +{ 0, 0, 0, NULL, (void*) &appData.highlightDragging, "", NULL, CheckBox, N_("Highlight Dragging (Show Move Targets)") }, +{ 0, 0, 0, NULL, (void*) &appData.highlightLastMove, "", NULL, CheckBox, N_("Highlight Last Move") }, +{ 0, 0, 0, NULL, (void*) &appData.highlightMoveWithArrow, "", NULL, CheckBox, N_("Highlight with Arrow") }, +{ 0, 0, 0, NULL, (void*) &appData.ringBellAfterMoves, "", NULL, CheckBox, N_("Move Sound") }, +{ 0, 0, 0, NULL, (void*) &appData.oneClick, "", NULL, CheckBox, N_("One-Click Moving") }, +{ 0, 0, 0, NULL, (void*) &appData.periodicUpdates, "", NULL, CheckBox, N_("Periodic Updates (in Analysis Mode)") }, +{ 0, 0, 0, NULL, (void*) &appData.ponderNextMove, "", NULL, CheckBox, N_("Ponder Next Move") }, +{ 0, 0, 0, NULL, (void*) &appData.popupExitMessage, "", NULL, CheckBox, N_("Popup Exit Messages") }, +{ 0, 0, 0, NULL, (void*) &appData.popupMoveErrors, "", NULL, CheckBox, N_("Popup Move Errors") }, +{ 0, 0, 0, NULL, (void*) &appData.showCoords, "", NULL, CheckBox, N_("Show Coordinates") }, +{ 0, 0, 0, NULL, (void*) &appData.markers, "", NULL, CheckBox, N_("Show Target Squares") }, +{ 0, 0, 0, NULL, (void*) &appData.hideThinkingFromHuman, "", NULL, CheckBox, N_("Hide Thinking from Human") }, +{ 0, 0, 0, NULL, (void*) &appData.testLegality, "", NULL, CheckBox, N_("Test Legality") }, +{ 0, 0, 10, NULL, (void*) &appData.flashCount, "", NULL, Spin, N_("Flash Moves (0 = no flashing):") }, +{ 0, 1, 10, NULL, (void*) &appData.flashRate, "", NULL, Spin, N_("Flash Rate (high = fast):") }, +{ 0, 5, 100,NULL, (void*) &appData.animSpeed, "", NULL, Spin, N_("Animation Speed (high = slow):") }, { 0, 0, 0, NULL, (void*) &GeneralOptionsOK, "", NULL, EndMark , "" } }; @@ -854,7 +837,7 @@ void Pick(int n) } } - GenericReadout(); // make sure ranks and file settings are read + GenericReadout(-1); // make sure ranks and file settings are read gameInfo.variant = v; appData.variant = VariantName(v); @@ -899,12 +882,12 @@ Option variantDescriptors[] = { { VariantGiveaway, 0, 135, NULL, (void*) &Pick, "#FFFFBF", NULL, Button, N_("give-away")}, { VariantSpartan, 1, 135, NULL, (void*) &Pick, "#FF0000", NULL, Button, N_("Spartan")}, { VariantLosers, 0, 135, NULL, (void*) &Pick, "#FFFFBF", NULL, Button, N_("losers")}, -{ 0, 0, 0, NULL, NULL, NULL, NULL, Label, _("Board size ( -1 = default for selected variant):")}, +{ 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("Board size ( -1 = default for selected variant):")}, { 0, -1, BOARD_RANKS-1, NULL, (void*) &appData.NrRanks, "", NULL, Spin, N_("Number of Board Ranks:") }, { 0, -1, BOARD_FILES, NULL, (void*) &appData.NrFiles, "", NULL, Spin, N_("Number of Board Files:") }, { 0, -1, BOARD_RANKS-1, NULL, (void*) &appData.holdingsSize, "", NULL, Spin, N_("Holdings Size:") }, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, - _("WARNING: variants with un-orthodox\n" + N_("WARNING: variants with un-orthodox\n" "pieces only have built-in bitmaps\n" "for -boardSize middling, bulky and\n" "petite, and substitute king or amazon\n" @@ -927,32 +910,32 @@ void CommonOptionsOK(int n) } Option commonEngineOptions[] = { -{ 0, 0, 0, NULL, (void*) &appData.ponderNextMove, "", NULL, CheckBox, _("Ponder Next Move") }, -{ 0, 0, 1000, NULL, (void*) &appData.smpCores, "", NULL, Spin, _("Maximum Number of CPUs per Engine:") }, -{ 0, 0, 0, NULL, (void*) &appData.polyglotDir, "", NULL, PathName, _("Polygot Directory:") }, -{ 0, 0, 16000, NULL, (void*) &appData.defaultHashSize, "", NULL, Spin, _("Hash-Table Size (MB):") }, -{ 0, 0, 0, NULL, (void*) &appData.defaultPathEGTB, "", NULL, PathName, _("Nalimov EGTB Path:") }, -{ 0, 0, 1000, NULL, (void*) &appData.defaultCacheSizeEGTB, "", NULL, Spin, _("EGTB Cache Size (MB):") }, -{ 0, 0, 0, NULL, (void*) &appData.usePolyglotBook, "", NULL, CheckBox, _("Use GUI Book") }, -{ 0, 0, 0, NULL, (void*) &appData.polyglotBook, "", NULL, FileName, _("Opening-Book Filename:") }, -{ 0, 0, 100, NULL, (void*) &appData.bookDepth, "", NULL, Spin, _("Book Depth (moves):") }, -{ 0, 0, 100, NULL, (void*) &appData.bookStrength, "", NULL, Spin, _("Book Variety (0) vs. Strength (100):") }, -{ 0, 0, 0, NULL, (void*) &appData.firstHasOwnBookUCI, "", NULL, CheckBox, _("Engine #1 Has Own Book") }, -{ 0, 0, 0, NULL, (void*) &appData.secondHasOwnBookUCI, "", NULL, CheckBox, _("Engine #2 Has Own Book ") }, +{ 0, 0, 0, NULL, (void*) &appData.ponderNextMove, "", NULL, CheckBox, N_("Ponder Next Move") }, +{ 0, 0, 1000, NULL, (void*) &appData.smpCores, "", NULL, Spin, N_("Maximum Number of CPUs per Engine:") }, +{ 0, 0, 0, NULL, (void*) &appData.polyglotDir, "", NULL, PathName, N_("Polygot Directory:") }, +{ 0, 0, 16000, NULL, (void*) &appData.defaultHashSize, "", NULL, Spin, N_("Hash-Table Size (MB):") }, +{ 0, 0, 0, NULL, (void*) &appData.defaultPathEGTB, "", NULL, PathName, N_("Nalimov EGTB Path:") }, +{ 0, 0, 1000, NULL, (void*) &appData.defaultCacheSizeEGTB, "", NULL, Spin, N_("EGTB Cache Size (MB):") }, +{ 0, 0, 0, NULL, (void*) &appData.usePolyglotBook, "", NULL, CheckBox, N_("Use GUI Book") }, +{ 0, 0, 0, NULL, (void*) &appData.polyglotBook, "", NULL, FileName, N_("Opening-Book Filename:") }, +{ 0, 0, 100, NULL, (void*) &appData.bookDepth, "", NULL, Spin, N_("Book Depth (moves):") }, +{ 0, 0, 100, NULL, (void*) &appData.bookStrength, "", NULL, Spin, N_("Book Variety (0) vs. Strength (100):") }, +{ 0, 0, 0, NULL, (void*) &appData.firstHasOwnBookUCI, "", NULL, CheckBox, N_("Engine #1 Has Own Book") }, +{ 0, 0, 0, NULL, (void*) &appData.secondHasOwnBookUCI, "", NULL, CheckBox, N_("Engine #2 Has Own Book ") }, { 0, 1, 0, NULL, (void*) &CommonOptionsOK, "", NULL, EndMark , "" } }; Option adjudicationOptions[] = { -{ 0, 0, 0, NULL, (void*) &appData.checkMates, "", NULL, CheckBox, _("Detect all Mates") }, -{ 0, 0, 0, NULL, (void*) &appData.testClaims, "", NULL, CheckBox, _("Verify Engine Result Claims") }, -{ 0, 0, 0, NULL, (void*) &appData.materialDraws, "", NULL, CheckBox, _("Draw if Insufficient Mating Material") }, -{ 0, 0, 0, NULL, (void*) &appData.trivialDraws, "", NULL, CheckBox, _("Adjudicate Trivial Draws (3-Move Delay)") }, -{ 0, 0, 100, NULL, (void*) &appData.ruleMoves, "", NULL, Spin, _("N-Move Rule:") }, -{ 0, 0, 6, NULL, (void*) &appData.drawRepeats, "", NULL, Spin, _("N-fold Repeats:") }, -{ 0, 0, 1000, NULL, (void*) &appData.adjudicateDrawMoves, "", NULL, Spin, _("Draw after N Moves Total:") }, -{ 0,-5000, 0, NULL, (void*) &appData.adjudicateLossThreshold, "", NULL, Spin, _("Win / Loss Threshold:") }, -{ 0, 0, 0, NULL, (void*) &first.scoreIsAbsolute, "", NULL, CheckBox, _("Negate Score of Engine #1") }, -{ 0, 0, 0, NULL, (void*) &second.scoreIsAbsolute, "", NULL, CheckBox, _("Negate Score of Engine #2") }, +{ 0, 0, 0, NULL, (void*) &appData.checkMates, "", NULL, CheckBox, N_("Detect all Mates") }, +{ 0, 0, 0, NULL, (void*) &appData.testClaims, "", NULL, CheckBox, N_("Verify Engine Result Claims") }, +{ 0, 0, 0, NULL, (void*) &appData.materialDraws, "", NULL, CheckBox, N_("Draw if Insufficient Mating Material") }, +{ 0, 0, 0, NULL, (void*) &appData.trivialDraws, "", NULL, CheckBox, N_("Adjudicate Trivial Draws (3-Move Delay)") }, +{ 0, 0, 100, NULL, (void*) &appData.ruleMoves, "", NULL, Spin, N_("N-Move Rule:") }, +{ 0, 0, 6, NULL, (void*) &appData.drawRepeats, "", NULL, Spin, N_("N-fold Repeats:") }, +{ 0, 0, 1000, NULL, (void*) &appData.adjudicateDrawMoves, "", NULL, Spin, N_("Draw after N Moves Total:") }, +{ 0,-5000, 0, NULL, (void*) &appData.adjudicateLossThreshold, "", NULL, Spin, N_("Win / Loss Threshold:") }, +{ 0, 0, 0, NULL, (void*) &first.scoreIsAbsolute, "", NULL, CheckBox, N_("Negate Score of Engine #1") }, +{ 0, 0, 0, NULL, (void*) &second.scoreIsAbsolute, "", NULL, CheckBox, N_("Negate Score of Engine #2") }, { 0, 1, 0, NULL, NULL, "", NULL, EndMark , "" } }; @@ -962,54 +945,54 @@ void IcsOptionsOK(int n) } Option icsOptions[] = { -{ 0, 0, 0, NULL, (void*) &appData.autoKibitz, "", NULL, CheckBox, _("Auto-Kibitz") }, -{ 0, 0, 0, NULL, (void*) &appData.autoComment, "", NULL, CheckBox, _("Auto-Comment") }, -{ 0, 0, 0, NULL, (void*) &appData.autoObserve, "", NULL, CheckBox, _("Auto-Observe") }, -{ 0, 0, 0, NULL, (void*) &appData.autoRaiseBoard, "", NULL, CheckBox, _("Auto-Raise Board") }, -{ 0, 0, 0, NULL, (void*) &appData.bgObserve, "", NULL, CheckBox, _("Background Observe while Playing") }, -{ 0, 0, 0, NULL, (void*) &appData.dualBoard, "", NULL, CheckBox, _("Dual Board for Background-Observed Game") }, -{ 0, 0, 0, NULL, (void*) &appData.getMoveList, "", NULL, CheckBox, _("Get Move List") }, -{ 0, 0, 0, NULL, (void*) &appData.quietPlay, "", NULL, CheckBox, _("Quiet Play") }, -{ 0, 0, 0, NULL, (void*) &appData.seekGraph, "", NULL, CheckBox, _("Seek Graph") }, -{ 0, 0, 0, NULL, (void*) &appData.autoRefresh, "", NULL, CheckBox, _("Auto-Refresh Seek Graph") }, -{ 0, 0, 0, NULL, (void*) &appData.premove, "", NULL, CheckBox, _("Premove") }, -{ 0, 0, 0, NULL, (void*) &appData.premoveWhite, "", NULL, CheckBox, _("Premove for White") }, -{ 0, 0, 0, NULL, (void*) &appData.premoveWhiteText, "", NULL, TextBox, _("First White Move:") }, -{ 0, 0, 0, NULL, (void*) &appData.premoveBlack, "", NULL, CheckBox, _("Premove for Black") }, -{ 0, 0, 0, NULL, (void*) &appData.premoveBlackText, "", NULL, TextBox, _("First Black Move:") }, +{ 0, 0, 0, NULL, (void*) &appData.autoKibitz, "", NULL, CheckBox, N_("Auto-Kibitz") }, +{ 0, 0, 0, NULL, (void*) &appData.autoComment, "", NULL, CheckBox, N_("Auto-Comment") }, +{ 0, 0, 0, NULL, (void*) &appData.autoObserve, "", NULL, CheckBox, N_("Auto-Observe") }, +{ 0, 0, 0, NULL, (void*) &appData.autoRaiseBoard, "", NULL, CheckBox, N_("Auto-Raise Board") }, +{ 0, 0, 0, NULL, (void*) &appData.bgObserve, "", NULL, CheckBox, N_("Background Observe while Playing") }, +{ 0, 0, 0, NULL, (void*) &appData.dualBoard, "", NULL, CheckBox, N_("Dual Board for Background-Observed Game") }, +{ 0, 0, 0, NULL, (void*) &appData.getMoveList, "", NULL, CheckBox, N_("Get Move List") }, +{ 0, 0, 0, NULL, (void*) &appData.quietPlay, "", NULL, CheckBox, N_("Quiet Play") }, +{ 0, 0, 0, NULL, (void*) &appData.seekGraph, "", NULL, CheckBox, N_("Seek Graph") }, +{ 0, 0, 0, NULL, (void*) &appData.autoRefresh, "", NULL, CheckBox, N_("Auto-Refresh Seek Graph") }, +{ 0, 0, 0, NULL, (void*) &appData.premove, "", NULL, CheckBox, N_("Premove") }, +{ 0, 0, 0, NULL, (void*) &appData.premoveWhite, "", NULL, CheckBox, N_("Premove for White") }, +{ 0, 0, 0, NULL, (void*) &appData.premoveWhiteText, "", NULL, TextBox, N_("First White Move:") }, +{ 0, 0, 0, NULL, (void*) &appData.premoveBlack, "", NULL, CheckBox, N_("Premove for Black") }, +{ 0, 0, 0, NULL, (void*) &appData.premoveBlackText, "", NULL, TextBox, N_("First Black Move:") }, { 0, 0, 0, NULL, NULL, NULL, NULL, Break, "" }, -{ 0, 0, 0, NULL, (void*) &appData.icsAlarm, "", NULL, CheckBox, _("Alarm") }, -{ 0, 0, 100000000, NULL, (void*) &appData.icsAlarmTime, "", NULL, Spin, _("Alarm Time (msec):") }, -//{ 0, 0, 0, NULL, (void*) &appData.chatBoxes, "", NULL, TextBox, _("Startup Chat Boxes:") }, -{ 0, 0, 0, NULL, (void*) &appData.colorize, "", NULL, CheckBox, _("Colorize Messages") }, -{ 0, 0, 0, NULL, (void*) &appData.colorShout, "", NULL, TextBox, _("Shout Text Colors:") }, -{ 0, 0, 0, NULL, (void*) &appData.colorSShout, "", NULL, TextBox, _("S-Shout Text Colors:") }, -{ 0, 0, 0, NULL, (void*) &appData.colorChannel1, "", NULL, TextBox, _("Channel #1 Text Colors:") }, -{ 0, 0, 0, NULL, (void*) &appData.colorChannel, "", NULL, TextBox, _("Other Channel Text Colors:") }, -{ 0, 0, 0, NULL, (void*) &appData.colorKibitz, "", NULL, TextBox, _("Kibitz Text Colors:") }, -{ 0, 0, 0, NULL, (void*) &appData.colorTell, "", NULL, TextBox, _("Tell Text Colors:") }, -{ 0, 0, 0, NULL, (void*) &appData.colorChallenge, "", NULL, TextBox, _("Challenge Text Colors:") }, -{ 0, 0, 0, NULL, (void*) &appData.colorRequest, "", NULL, TextBox, _("Request Text Colors:") }, -{ 0, 0, 0, NULL, (void*) &appData.colorSeek, "", NULL, TextBox, _("Seek Text Colors:") }, +{ 0, 0, 0, NULL, (void*) &appData.icsAlarm, "", NULL, CheckBox, N_("Alarm") }, +{ 0, 0, 100000000, NULL, (void*) &appData.icsAlarmTime, "", NULL, Spin, N_("Alarm Time (msec):") }, +//{ 0, 0, 0, NULL, (void*) &appData.chatBoxes, "", NULL, TextBox, N_("Startup Chat Boxes:") }, +{ 0, 0, 0, NULL, (void*) &appData.colorize, "", NULL, CheckBox, N_("Colorize Messages") }, +{ 0, 0, 0, NULL, (void*) &appData.colorShout, "", NULL, TextBox, N_("Shout Text Colors:") }, +{ 0, 0, 0, NULL, (void*) &appData.colorSShout, "", NULL, TextBox, N_("S-Shout Text Colors:") }, +{ 0, 0, 0, NULL, (void*) &appData.colorChannel1, "", NULL, TextBox, N_("Channel #1 Text Colors:") }, +{ 0, 0, 0, NULL, (void*) &appData.colorChannel, "", NULL, TextBox, N_("Other Channel Text Colors:") }, +{ 0, 0, 0, NULL, (void*) &appData.colorKibitz, "", NULL, TextBox, N_("Kibitz Text Colors:") }, +{ 0, 0, 0, NULL, (void*) &appData.colorTell, "", NULL, TextBox, N_("Tell Text Colors:") }, +{ 0, 0, 0, NULL, (void*) &appData.colorChallenge, "", NULL, TextBox, N_("Challenge Text Colors:") }, +{ 0, 0, 0, NULL, (void*) &appData.colorRequest, "", NULL, TextBox, N_("Request Text Colors:") }, +{ 0, 0, 0, NULL, (void*) &appData.colorSeek, "", NULL, TextBox, N_("Seek Text Colors:") }, { 0, 0, 0, NULL, (void*) &IcsOptionsOK, "", NULL, EndMark , "" } }; Option loadOptions[] = { -{ 0, 0, 0, NULL, (void*) &appData.autoDisplayTags, "", NULL, CheckBox, _("Auto-Display Tags") }, -{ 0, 0, 0, NULL, (void*) &appData.autoDisplayComment, "", NULL, CheckBox, _("Auto-Display Comment") }, -{ 0, 0, 0, NULL, NULL, NULL, NULL, Label, _("Auto-Play speed of loaded games\n(0 = instant, -1 = off):") }, -{ 0, -1, 10000000, NULL, (void*) &appData.timeDelay, "", NULL, Fractional, _("Seconds per Move:") }, +{ 0, 0, 0, NULL, (void*) &appData.autoDisplayTags, "", NULL, CheckBox, N_("Auto-Display Tags") }, +{ 0, 0, 0, NULL, (void*) &appData.autoDisplayComment, "", NULL, CheckBox, N_("Auto-Display Comment") }, +{ 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("Auto-Play speed of loaded games\n(0 = instant, -1 = off):") }, +{ 0, -1, 10000000, NULL, (void*) &appData.timeDelay, "", NULL, Fractional, N_("Seconds per Move:") }, { 0, 0, 0, NULL, NULL, "", NULL, EndMark , "" } }; Option saveOptions[] = { -{ 0, 0, 0, NULL, (void*) &appData.autoSaveGames, "", NULL, CheckBox, _("Auto-Save Games") }, -{ 0, 0, 0, NULL, (void*) &appData.saveGameFile, "", NULL, FileName, _("Save Games on File:") }, -{ 0, 0, 0, NULL, (void*) &appData.savePositionFile, "", NULL, FileName, _("Save Final Positions on File:") }, -{ 0, 0, 0, NULL, (void*) &appData.pgnEventHeader, "", NULL, TextBox, _("PGN Event Header:") }, -{ 0, 0, 0, NULL, (void*) &appData.oldSaveStyle, "", NULL, CheckBox, _("Old Save Style (as opposed to PGN)") }, -{ 0, 0, 0, NULL, (void*) &appData.saveExtendedInfoInPGN, "", NULL, CheckBox, _("Save Score/Depth Info in PGN") }, -{ 0, 0, 0, NULL, (void*) &appData.saveOutOfBookInfo, "", NULL, CheckBox, _("Save Out-of-Book Info in PGN ") }, +{ 0, 0, 0, NULL, (void*) &appData.autoSaveGames, "", NULL, CheckBox, N_("Auto-Save Games") }, +{ 0, 0, 0, NULL, (void*) &appData.saveGameFile, "", NULL, FileName, N_("Save Games on File:") }, +{ 0, 0, 0, NULL, (void*) &appData.savePositionFile, "", NULL, FileName, N_("Save Final Positions on File:") }, +{ 0, 0, 0, NULL, (void*) &appData.pgnEventHeader, "", NULL, TextBox, N_("PGN Event Header:") }, +{ 0, 0, 0, NULL, (void*) &appData.oldSaveStyle, "", NULL, CheckBox, N_("Old Save Style (as opposed to PGN)") }, +{ 0, 0, 0, NULL, (void*) &appData.saveExtendedInfoInPGN, "", NULL, CheckBox, N_("Save Score/Depth Info in PGN") }, +{ 0, 0, 0, NULL, (void*) &appData.saveOutOfBookInfo, "", NULL, CheckBox, N_("Save Out-of-Book Info in PGN ") }, { 0, 1, 0, NULL, NULL, "", NULL, EndMark , "" } }; @@ -1017,16 +1000,16 @@ char *soundNames[] = { N_("No Sound"), N_("Default Beep"), N_("Above WAV File"), - N_("Ching"), - N_("Click"), + N_("Car Horn"), + N_("Cymbal"), N_("Ding"), N_("Gong"), N_("Laser"), N_("Penalty"), N_("Phone"), - N_("Thud"), - N_("Challenge"), - N_("Tell"), + N_("Pop"), + N_("Slap"), + N_("Wood Thunk"), NULL, N_("User File") }; @@ -1035,46 +1018,47 @@ char *soundFiles[] = { // sound files corresponding to above names "", "$", "*", // kludge alert: as first thing in the dialog readout this is replaced with the user-given .WAV filename - "ching.wav", - "click.wav", + "honkhonk.wav", + "cymbal.wav", "ding1.wav", "gong.wav", "laser.wav", "penalty.wav", "phone.wav", - "thud.wav", - "challenge.wav", - "tell.wav", + "pop2.wav", + "slap.wav", + "woodthunk.wav", NULL, NULL }; void Test(int n) { + GenericReadout(2); if(soundFiles[values[3]]) PlaySound(soundFiles[values[3]]); } Option soundOptions[] = { -{ 0, 0, 0, NULL, (void*) &appData.soundProgram, "", NULL, TextBox, _("Sound Program:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundDirectory, "", NULL, PathName, _("Sounds Directory:") }, -{ 0, 0, 0, NULL, (void*) (soundFiles+2) /* kludge! */, "", NULL, FileName, _("User WAV File:") }, -{ 0, 0, 0, NULL, (void*) &trialSound, (char*) soundNames, soundFiles, ComboBox, _("Try-Out Sound:") }, -{ 0, 1, 0, NULL, (void*) &Test, NULL, NULL, Button, _("Play") }, -{ 0, 0, 0, NULL, (void*) &appData.soundMove, (char*) soundNames, soundFiles, ComboBox, _("Move:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundIcsWin, (char*) soundNames, soundFiles, ComboBox, _("Win:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundIcsLoss, (char*) soundNames, soundFiles, ComboBox, _("Lose:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundIcsDraw, (char*) soundNames, soundFiles, ComboBox, _("Draw:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundIcsUnfinished, (char*) soundNames, soundFiles, ComboBox, _("Unfinished:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundIcsAlarm, (char*) soundNames, soundFiles, ComboBox, _("Alarm:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundShout, (char*) soundNames, soundFiles, ComboBox, _("Shout:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundSShout, (char*) soundNames, soundFiles, ComboBox, _("S-Shout:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundChannel, (char*) soundNames, soundFiles, ComboBox, _("Channel:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundChannel1, (char*) soundNames, soundFiles, ComboBox, _("Channel 1:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundTell, (char*) soundNames, soundFiles, ComboBox, _("Tell:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundKibitz, (char*) soundNames, soundFiles, ComboBox, _("Kibitz:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundChallenge, (char*) soundNames, soundFiles, ComboBox, _("Challenge:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundRequest, (char*) soundNames, soundFiles, ComboBox, _("Request:") }, -{ 0, 0, 0, NULL, (void*) &appData.soundSeek, (char*) soundNames, soundFiles, ComboBox, _("Seek:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundProgram, "", NULL, TextBox, N_("Sound Program:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundDirectory, "", NULL, PathName, N_("Sounds Directory:") }, +{ 0, 0, 0, NULL, (void*) (soundFiles+2) /* kludge! */, "", NULL, FileName, N_("User WAV File:") }, +{ 0, 0, 0, NULL, (void*) &trialSound, (char*) soundNames, soundFiles, ComboBox, N_("Try-Out Sound:") }, +{ 0, 1, 0, NULL, (void*) &Test, NULL, NULL, Button, N_("Play") }, +{ 0, 0, 0, NULL, (void*) &appData.soundMove, (char*) soundNames, soundFiles, ComboBox, N_("Move:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundIcsWin, (char*) soundNames, soundFiles, ComboBox, N_("Win:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundIcsLoss, (char*) soundNames, soundFiles, ComboBox, N_("Lose:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundIcsDraw, (char*) soundNames, soundFiles, ComboBox, N_("Draw:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundIcsUnfinished, (char*) soundNames, soundFiles, ComboBox, N_("Unfinished:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundIcsAlarm, (char*) soundNames, soundFiles, ComboBox, N_("Alarm:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundShout, (char*) soundNames, soundFiles, ComboBox, N_("Shout:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundSShout, (char*) soundNames, soundFiles, ComboBox, N_("S-Shout:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundChannel, (char*) soundNames, soundFiles, ComboBox, N_("Channel:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundChannel1, (char*) soundNames, soundFiles, ComboBox, N_("Channel 1:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundTell, (char*) soundNames, soundFiles, ComboBox, N_("Tell:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundKibitz, (char*) soundNames, soundFiles, ComboBox, N_("Kibitz:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundChallenge, (char*) soundNames, soundFiles, ComboBox, N_("Challenge:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundRequest, (char*) soundNames, soundFiles, ComboBox, N_("Request:") }, +{ 0, 0, 0, NULL, (void*) &appData.soundSeek, (char*) soundNames, soundFiles, ComboBox, N_("Seek:") }, { 0, 1, 0, NULL, NULL, "", NULL, EndMark , "" } }; @@ -1092,7 +1076,7 @@ void SetColor(char *colorName, Widget box) } else { buttonColor = *(Pixel *) vTo.addr; } - } + } else buttonColor = (Pixel) 0; XtSetArg(args[0], XtNbackground, buttonColor);; XtSetValues(box, args, 1); } @@ -1149,72 +1133,71 @@ void AdjustColor(int i) void BoardOptionsOK(int n) { - extern int defaultLineGap; if(appData.overrideLineGap >= 0) lineGap = appData.overrideLineGap; else lineGap = defaultLineGap; + useImages = useImageSqs = 0; MakeColors(); CreateGCs(True); - CreateXPMPieces(); - CreateXPMBoard(appData.liteBackTextureFile, 1); - CreateXPMBoard(appData.darkBackTextureFile, 0); + CreateAnyPieces(); InitDrawingSizes(-1, 0); DrawPosition(True, NULL); } Option boardOptions[] = { -{ 0, 0, 70, NULL, (void*) &appData.whitePieceColor, "", NULL, TextBox, _("White Piece Color:") }, +{ 0, 0, 70, NULL, (void*) &appData.whitePieceColor, "", NULL, TextBox, N_("White Piece Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#FFFFCC", Button, " " }, { 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, { 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, { 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, { 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, -{ 0, 0, 70, NULL, (void*) &appData.blackPieceColor, "", NULL, TextBox, _("Black Piece Color:") }, +{ 0, 0, 70, NULL, (void*) &appData.blackPieceColor, "", NULL, TextBox, N_("Black Piece Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#202020", Button, " " }, { 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, { 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, { 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, { 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, -{ 0, 0, 70, NULL, (void*) &appData.lightSquareColor, "", NULL, TextBox, _("Light Square Color:") }, +{ 0, 0, 70, NULL, (void*) &appData.lightSquareColor, "", NULL, TextBox, N_("Light Square Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#C8C365", Button, " " }, { 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, { 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, { 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, { 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, -{ 0, 0, 70, NULL, (void*) &appData.darkSquareColor, "", NULL, TextBox, _("Dark Square Color:") }, +{ 0, 0, 70, NULL, (void*) &appData.darkSquareColor, "", NULL, TextBox, N_("Dark Square Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#77A26D", Button, " " }, { 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, { 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, { 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, { 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, -{ 0, 0, 70, NULL, (void*) &appData.highlightSquareColor, "", NULL, TextBox, _("Highlight Color:") }, +{ 0, 0, 70, NULL, (void*) &appData.highlightSquareColor, "", NULL, TextBox, N_("Highlight Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#FFFF00", Button, " " }, { 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, { 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, { 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, { 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, -{ 0, 0, 70, NULL, (void*) &appData.premoveHighlightColor, "", NULL, TextBox, _("Premove Highlight Color:") }, +{ 0, 0, 70, NULL, (void*) &appData.premoveHighlightColor, "", NULL, TextBox, N_("Premove Highlight Color:") }, { 1000, 1, 0, NULL, (void*) &DefColor, NULL, (char**) "#FF0000", Button, " " }, { 1, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "R" }, { 2, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "G" }, { 3, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "B" }, { 4, 1, 0, NULL, (void*) &AdjustColor, NULL, NULL, Button, "D" }, -{ 0, 0, 0, NULL, (void*) &appData.upsideDown, "", NULL, CheckBox, _("Flip Pieces Shogi Style (Colored buttons restore default)") }, -//{ 0, 0, 0, NULL, (void*) &appData.allWhite, "", NULL, CheckBox, _("Use Outline Pieces for Black") }, -{ 0, 0, 0, NULL, (void*) &appData.monoMode, "", NULL, CheckBox, _("Mono Mode") }, -{ 0,-1, 5, NULL, (void*) &appData.overrideLineGap, "", NULL, Spin, _("Line Gap ( -1 = default for board size):") }, -{ 0, 0, 0, NULL, (void*) &appData.liteBackTextureFile, "", NULL, FileName, _("Light-Squares Texture File:") }, -{ 0, 0, 0, NULL, (void*) &appData.darkBackTextureFile, "", NULL, FileName, _("Dark-Squares Texture File:") }, -{ 0, 0, 0, NULL, (void*) &appData.bitmapDirectory, "", NULL, PathName, _("Directory with Bitmap Pieces:") }, -{ 0, 0, 0, NULL, (void*) &appData.pixmapDirectory, "", NULL, PathName, _("Directory with Pixmap Pieces:") }, +{ 0, 0, 0, NULL, (void*) &appData.upsideDown, "", NULL, CheckBox, N_("Flip Pieces Shogi Style (Colored buttons restore default)") }, +//{ 0, 0, 0, NULL, (void*) &appData.allWhite, "", NULL, CheckBox, N_("Use Outline Pieces for Black") }, +{ 0, 0, 0, NULL, (void*) &appData.monoMode, "", NULL, CheckBox, N_("Mono Mode") }, +{ 0,-1, 5, NULL, (void*) &appData.overrideLineGap, "", NULL, Spin, N_("Line Gap ( -1 = default for board size):") }, +{ 0, 0, 0, NULL, (void*) &appData.liteBackTextureFile, "", NULL, FileName, N_("Light-Squares Texture File:") }, +{ 0, 0, 0, NULL, (void*) &appData.darkBackTextureFile, "", NULL, FileName, N_("Dark-Squares Texture File:") }, +{ 0, 0, 0, NULL, (void*) &appData.bitmapDirectory, "", NULL, PathName, N_("Directory with Bitmap Pieces:") }, +{ 0, 0, 0, NULL, (void*) &appData.pixmapDirectory, "", NULL, PathName, N_("Directory with Pixmap Pieces:") }, { 0, 0, 0, NULL, (void*) &BoardOptionsOK, "", NULL, EndMark , "" } }; -void GenericReadout() +void GenericReadout(int selected) { int i, j; - String name, val; + String val; Arg args[16]; char buf[MSG_SIZ], **dest; float x; for(i=0; ; i++) { // send all options that had to be OK-ed to engine + if(selected >= 0) { if(i < selected) continue; else if(i > selected) break; } switch(currentOption[i].type) { case TextBox: case FileName: @@ -1292,10 +1275,9 @@ void GenericCallback(w, client_data, call_data) Widget w; XtPointer client_data, call_data; { - String name, val; + String name; Arg args[16]; char buf[MSG_SIZ]; - int i, j; int data = (intptr_t) client_data; currentOption = dialogOptions[data>>16]; data &= 0xFFFF; @@ -1308,12 +1290,12 @@ void GenericCallback(w, client_data, call_data) return; } if (strcmp(name, _("OK")) == 0) { // save buttons imply OK - GenericReadout(); + GenericReadout(-1); PopDown(data); return; } if(currentCps) { - if(currentOption[data].type == SaveButton) GenericReadout(); + if(currentOption[data].type == SaveButton) GenericReadout(-1); snprintf(buf, MSG_SIZ, "option %s\n", name); SendToProgram(buf, currentCps); } else ((ButtonCallback*) currentOption[data].target)(data); @@ -1325,7 +1307,7 @@ int GenericPopUp(Option *option, char *title, int dlgNr) { Arg args[16]; - Widget popup, layout, dialog, edit=NULL, form, last, b_ok, b_cancel, leftMargin = NULL, textField = NULL; + Widget popup, layout, dialog=NULL, edit=NULL, form, last, b_ok, b_cancel, leftMargin = NULL, textField = NULL; Window root, child; int x, y, i, j, height=999, width=1, h, c, w; int win_x, win_y, maxWidth, maxTextWidth; @@ -1397,6 +1379,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNright, XtChainLeft); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; + XtSetArg(args[j], XtNlabel, _(option[i].name)); j++; texts[h] = dialog = XtCreateManagedWidget(option[i].name, labelWidgetClass, form, args, j); } else texts[h] = dialog = NULL; @@ -1439,7 +1422,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNleft, XtChainRight); j++; XtSetArg(args[j], XtNright, XtChainRight); j++; if(option[i].type == FileName || option[i].type == PathName) { - w = 50; msg = "browse"; + w = 50; msg = _("browse"); } else { XtSetArg(args[j], XtNheight, 10); j++; w = 20; msg = "+"; @@ -1481,6 +1464,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNleft, XtChainLeft); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; + XtSetArg(args[j], XtNlabel, _(msg)); j++; last = XtCreateManagedWidget(msg, labelWidgetClass, form, args, j); if(option[i].type == CheckBox) XtAddEventHandler(last, ButtonPressMask, False, CheckCallback, (XtPointer)(intptr_t) i); @@ -1489,6 +1473,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) case Button: j=0; XtSetArg(args[j], XtNfromVert, option[i].min & 1 ? lastrow : last); j++; + XtSetArg(args[j], XtNlabel, _(option[i].name)); j++; if(option[i].min & 1) { XtSetArg(args[j], XtNfromHoriz, last); j++; } else { XtSetArg(args[j], XtNfromHoriz, NULL); j++; lastrow = forelast; } if(option[i].max) XtSetArg(args[j], XtNwidth, option[i].max); j++; @@ -1515,6 +1500,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNright, XtChainLeft); j++; XtSetArg(args[j], XtNborderWidth, 0); j++; XtSetArg(args[j], XtNjustify, XtJustifyLeft); j++; + XtSetArg(args[j], XtNlabel, _(option[i].name)); j++; texts[h] = dialog = XtCreateManagedWidget(option[i].name, labelWidgetClass, form, args, j); if(currentCps) option[i].choice = (char**) option[i].textValue; else { @@ -1529,7 +1515,7 @@ GenericPopUp(Option *option, char *title, int dlgNr) XtSetArg(args[j], XtNwidth, option[i].max && !currentCps ? option[i].max : 100); j++; XtSetArg(args[j], XtNleft, XtChainLeft); j++; XtSetArg(args[j], XtNmenuName, XtNewString(option[i].name)); j++; - XtSetArg(args[j], XtNlabel, ((char**)option[i].textValue)[option[i].value]); j++; + XtSetArg(args[j], XtNlabel, _(((char**)option[i].textValue)[option[i].value])); j++; option[i].handle = (void*) (last = XtCreateManagedWidget(" ", menuButtonWidgetClass, form, args, j)); CreateComboPopup(last, option[i].name, i, (char **) option[i].textValue); @@ -1587,7 +1573,19 @@ GenericPopUp(Option *option, char *title, int dlgNr) if(!(option[i].min & 2)) { j=0; - if(option[i].min & 1) { XtSetArg(args[j], XtNfromHoriz, last); last = forelast; } else + if(option[i].min & 1) { + for(j=i-1; option[j+1].min&1 && option[j].type == Button; j--) { + XtSetArg(args[0], XtNtop, XtChainBottom); + XtSetArg(args[1], XtNbottom, XtChainBottom); + XtSetValues(option[j].handle, args, 2); + } + if(option[j].type == TextBox && option[j].name[0] == NULLCHAR) { + XtSetArg(args[0], XtNbottom, XtChainBottom); + XtSetValues(option[j].handle, args, 1); + } + j = 0; + XtSetArg(args[j], XtNfromHoriz, last); last = forelast; + } else XtSetArg(args[j], XtNfromHoriz, widest ? widest : dialog); j++; XtSetArg(args[j], XtNfromVert, anchor ? anchor : last); j++; XtSetArg(args[j], XtNbottom, XtChainBottom); j++; @@ -1724,10 +1722,9 @@ void MatchOptionsProc(w, event, prms, nprms) } Option textOptions[100]; -extern char *icsTextMenuString; void PutText P((char *text, int pos)); -SendString(char *p) +void SendString(char *p) { char buf[MSG_SIZ], *q; if(q = strstr(p, "$input")) { @@ -1864,13 +1861,13 @@ void changeTags(int n) { Arg args[16]; XtSetArg(args[0], XtNstring, &tagsText); - XtGetValues(currentOption[0].handle, args, 1); + XtGetValues(currentOption[1].handle, args, 1); ReplaceTags(tagsText, &gameInfo); } Option tagsOptions[] = { -{ 0xD, 200, 250, NULL, (void*) &tagsText, "", NULL, TextBox, "" }, { 0, 0, 0, NULL, NULL, NULL, NULL, Label, "" }, +{ 0xD, 200, 250, NULL, (void*) &tagsText, "", NULL, TextBox, "" }, { 0, 0, 0, NULL, (void*) &changeTags, NULL, NULL, Button, "save changes" }, { 0, 1, 0, NULL, (void*) &NewTagsCallback, "", NULL, EndMark , "" } }; @@ -1882,15 +1879,14 @@ void NewTagsPopup(char *text, char *msg) if(shells[2]) { // if already exists, alter title and content XtSetArg(args[0], XtNstring, text); - XtSetValues(tagsOptions[0].handle, args, 1); + XtSetValues(tagsOptions[1].handle, args, 1); } tagsText = text; - tagsOptions[1].textValue = msg; + tagsOptions[0].textValue = msg; MarkMenu("menuView.Show Tags", 2); GenericPopUp(tagsOptions, _("Tags"), 2); } -extern char ICSInputTranslations[]; char *icsText; Option boxOptions[] = { @@ -1900,7 +1896,6 @@ Option boxOptions[] = { void PutText(char *text, int pos) { - Widget edit; Arg args[16]; char buf[MSG_SIZ], *p; @@ -1981,7 +1976,7 @@ void FirstSettingsProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { - SettingsPopUp(&first); + SettingsPopUp(&first); } void SecondSettingsProc(w, event, prms, nprms) @@ -1990,10 +1985,136 @@ void SecondSettingsProc(w, event, prms, nprms) String *prms; Cardinal *nprms; { - if(WaitForSecond(SettingsMenuIfReady)) return; + if(WaitForEngine(&second, SettingsMenuIfReady)) return; SettingsPopUp(&second); } +char *engineName, *engineDir, *engineChoice, *engineLine; +Boolean isUCI, hasBook, storeVariant, v1, addToList; +extern Option installOptions[]; +extern char *firstChessProgramNames; +char *engineNr[] = { N_("First Engine"), N_("Second Engine"), NULL }; +char *engineList[100] = {" "}, *engineMnemonic[100] = {""}; + +void NamesToList(char *names) +{ + char buf[MSG_SIZ], *p, *q; + int i=1; + while(*names) { + p = names; q = buf; + while(*p && *p != '\n') *q++ = *p++; + *q = 0; + if(engineList[i]) free(engineList[i]); + engineList[i] = strdup(buf); + if(*p == '\n') p++; + TidyProgramName(engineList[i], "localhost", buf); + if(engineMnemonic[i]) free(engineMnemonic[i]); + if(q = strstr(engineList[i], " -variant ")) { + strcat(buf, "("); + sscanf(q + 10, "%s", buf + strlen(buf)); + strcat(buf, ")"); + } + engineMnemonic[i] = strdup(buf); + names = p; i++; + } + engineList[i] = NULL; +} + +// following implemented as macro to avoid type limitations +#define SWAP(item, temp) temp = appData.item[0]; appData.item[0] = appData.item[n]; appData.item[n] = temp; + +void SwapEngines(int n) +{ // swap settings for first engine and other engine (so far only some selected options) + int h; + char *p; + if(n == 0) return; + SWAP(directory, p) + SWAP(chessProgram, p) + SWAP(isUCI, h) + SWAP(hasOwnBookUCI, h) + SWAP(protocolVersion, h) + SWAP(reuse, h) + SWAP(scoreIsAbsolute, h) + SWAP(timeOdds, h) +} + +void Load(ChessProgramState *cps, int i) +{ + char *p, *q, buf[MSG_SIZ]; + if(engineLine[0]) { // an engine was selected from the combo box + snprintf(buf, MSG_SIZ, "-fcp %s", engineLine); + SwapEngines(i); // kludge to parse -f* / -first* like it is -s* / -second* + ParseArgsFromString(buf); + SwapEngines(i); + ReplaceEngine(cps, i); + return; + } + p = engineName; + while(q = strchr(p, '/')) p = q+1; + if(*p== NULLCHAR) return; + appData.chessProgram[i] = strdup(p); + if(engineDir[0] != NULLCHAR) + appData.directory[i] = engineDir; + else if(p != engineName) { // derive directory from engine path, when not given + p[-1] = 0; + appData.directory[i] = strdup(engineName); + p[-1] = '/'; + } else appData.directory[i] = "."; + appData.isUCI[i] = isUCI; + appData.protocolVersion[i] = v1 ? 1 : PROTOVER; + appData.hasOwnBookUCI[i] = hasBook; + if(addToList) { + int len; + q = firstChessProgramNames; + snprintf(buf, MSG_SIZ, "\"%s\" -fd \"%s\"%s%s%s%s%s\n", p, appData.directory[i], + v1 ? " -firstProtocolVersion 1" : "", + hasBook ? "" : " -fNoOwnBookUCI", + isUCI ? " -fUCI" : "", + storeVariant ? " -variant " : "", + storeVariant ? VariantName(gameInfo.variant) : ""); +printf("new line: %s", buf); + firstChessProgramNames = malloc(len = strlen(q) + strlen(buf) + 1); + snprintf(firstChessProgramNames, len, "%s%s", q, buf); + if(q) free(q); + } + ReplaceEngine(cps, i); +} + +void InstallOK(int n) +{ + PopDown(0); // early popdown, to allow FreezeUI to instate grab + if(engineChoice[0] == engineNr[0][0]) Load(&first, 0); else Load(&second, 1); +} + +Option installOptions[] = { +{ 0, 0, 0, NULL, (void*) &engineLine, (char*) engineMnemonic, engineList, ComboBox, N_("Select engine from list:") }, +{ 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("or specify one below:") }, +{ 0, 0, 0, NULL, (void*) &engineDir, NULL, NULL, PathName, N_("Engine Directory:") }, +{ 0, 0, 0, NULL, (void*) &engineName, NULL, NULL, FileName, N_("Engine Command:") }, +{ 0, 0, 0, NULL, NULL, NULL, NULL, Label, N_("(Directory will be derived from engine path when empty)") }, +{ 0, 0, 0, NULL, (void*) &isUCI, NULL, NULL, CheckBox, N_("UCI") }, +{ 0, 0, 0, NULL, (void*) &v1, NULL, NULL, CheckBox, N_("WB protocol v1 (do not wait for engine features)") }, +{ 0, 0, 0, NULL, (void*) &hasBook, NULL, NULL, CheckBox, N_("Must not use GUI book") }, +{ 0, 0, 0, NULL, (void*) &addToList, NULL, NULL, CheckBox, N_("Add this engine to the list") }, +{ 0, 0, 0, NULL, (void*) &storeVariant, NULL, NULL, CheckBox, N_("Force current variant with this engine") }, +{ 0, 0, 0, NULL, (void*) &engineChoice, (char*) engineNr, engineNr, ComboBox, N_("Load mentioned engine as") }, +{ 0, 1, 0, NULL, (void*) &InstallOK, "", NULL, EndMark , "" } +}; + +void LoadEngineProc(w, event, prms, nprms) + Widget w; + XEvent *event; + String *prms; + Cardinal *nprms; +{ + isUCI = addToList = storeVariant = v1 = False; hasBook = True; // defaults + engineDir = ""; + if(engineChoice) free(engineChoice); engineChoice = strdup(engineNr[0]); + if(engineLine) free(engineLine); engineLine = strdup(""); + NamesToList(firstChessProgramNames); + GenericPopUp(installOptions, _("Load engine"), 0); +} + //---------------------------- Chat Windows ---------------------------------------------- void OutputChatMessage(int partner, char *mess)