Move more back-endish menu-related stuff from xboard.c to menus.c
[xboard.git] / xboard.c
index f344499..9b89ce7 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -308,14 +308,11 @@ void ManInner P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void DisplayMove P((int moveNumber));
 void DisplayTitle P((char *title));
 void ICSInitScript P((void));
-int LoadGamePopUp P((FILE *f, int gameNumber, char *title));
 void ErrorPopUp P((char *title, char *text, int modal));
 void ErrorPopDown P((void));
 static char *ExpandPathName P((char *path));
-static void CreateAnimVars P((void));
 static void DragPieceMove P((int x, int y));
 static void DrawDragPiece P((void));
-char *ModeToWidgetName P((GameMode mode));
 void SelectMove P((Widget w, XEvent * event, String * params, Cardinal * nParams));
 void GameListOptionsPopDown P(());
 void GenericPopDown P(());
@@ -382,11 +379,8 @@ int squareSize, smallLayout = 0, tinyLayout = 0,
 Dimension textHeight;
 Pixel timerForegroundPixel, timerBackgroundPixel;
 Pixel buttonForegroundPixel, buttonBackgroundPixel;
-char *chessDir, *programName, *programVersion,
-  *gameCopyFilename, *gamePasteFilename;
+char *chessDir, *programName, *programVersion;
 Boolean alwaysOnTop = False;
-Boolean saveSettingsOnExit;
-char *settingsFileName;
 char *icsTextMenuString;
 char *icsNames;
 char *firstChessProgramNames;
@@ -2069,104 +2063,7 @@ XBoard square size (hint): %d\n\
      */
     ReadBitmap(&xMarkPixmap, "checkmark.bm",
               checkmark_bits, checkmark_width, checkmark_height);
-    XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-#ifndef OPTIONSDIALOG
-    if (appData.alwaysPromoteToQueen) {
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Always Queen"),
-                   args, 1);
-    }
-    if (appData.animateDragging) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Animate Dragging"),
-                   args, 1);
-    }
-    if (appData.animate) {
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Animate Moving"),
-                   args, 1);
-    }
-    if (appData.autoCallFlag) {
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Flag"),
-                   args, 1);
-    }
-    if (appData.autoFlipView) {
-       XtSetValues(XtNameToWidget(menuBarWidget,"menuOptions.Auto Flip View"),
-                   args, 1);
-    }
-    if (appData.blindfold) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Blindfold"), args, 1);
-    }
-    if (appData.flashCount > 0) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Flash Moves"),
-                   args, 1);
-    }
-#if HIGHDRAG
-    if (appData.highlightDragging) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Highlight Dragging"),
-                   args, 1);
-    }
-#endif
-    if (appData.highlightLastMove) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Highlight Last Move"),
-                   args, 1);
-    }
-    if (appData.highlightMoveWithArrow) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Arrow"),
-                   args, 1);
-    }
-//    if (appData.icsAlarm) {
-//     XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.ICS Alarm"),
-//                 args, 1);
-//    }
-    if (appData.ringBellAfterMoves) {
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Move Sound"),
-                   args, 1);
-    }
-    if (appData.oneClick) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.OneClick"), args, 1);
-    }
-    if (appData.periodicUpdates) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Periodic Updates"), args, 1);
-    }
-    if (appData.ponderNextMove) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Ponder Next Move"), args, 1);
-    }
-    if (appData.popupExitMessage) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Popup Exit Message"), args, 1);
-    }
-    if (appData.popupMoveErrors) {
-       XtSetValues(XtNameToWidget(menuBarWidget,
-                                  "menuOptions.Popup Move Errors"), args, 1);
-    }
-//    if (appData.premove) {
-//     XtSetValues(XtNameToWidget(menuBarWidget,
-//                                "menuOptions.Premove"), args, 1);
-//    }
-    if (appData.showCoords) {
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Show Coords"),
-                   args, 1);
-    }
-    if (appData.hideThinkingFromHuman) {
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Hide Thinking"),
-                   args, 1);
-    }
-    if (appData.testLegality) {
-       XtSetValues(XtNameToWidget(menuBarWidget,"menuOptions.Test Legality"),
-                   args, 1);
-    }
-#endif
-    if (saveSettingsOnExit) {
-       XtSetValues(XtNameToWidget(menuBarWidget,"menuOptions.Save Settings on Exit"),
-                   args, 1);
-    }
+    InitMenuMarkers();
 
     /*
      * Create an icon.
@@ -2262,6 +2159,7 @@ XBoard square size (hint): %d\n\
            signal(SIGUSR1, CmailSigHandler);
        }
     }
+
     gameInfo.boardWidth = 0; // [HGM] pieces: kludge to ensure InitPosition() calls InitDrawingSizes()
     InitPosition(TRUE);
 //    XtSetKeyboardFocus(shellWidget, formWidget);
@@ -2361,294 +2259,6 @@ ResetFrontEnd ()
     return;
 }
 
-typedef struct {
-    char *name;
-    Boolean value;
-} Enables;
-
-void
-GreyRevert (Boolean grey)
-{
-    Widget w;
-    if (!menuBarWidget) return;
-    w = XtNameToWidget(menuBarWidget, "menuEdit.Revert");
-    if (w == NULL) {
-      DisplayError("menuEdit.Revert", 0);
-    } else {
-      XtSetSensitive(w, !grey);
-    }
-    w = XtNameToWidget(menuBarWidget, "menuEdit.Annotate");
-    if (w == NULL) {
-      DisplayError("menuEdit.Annotate", 0);
-    } else {
-      XtSetSensitive(w, !grey);
-    }
-}
-
-void
-SetMenuEnables (Enables *enab)
-{
-  Widget w;
-  if (!menuBarWidget) return;
-  while (enab->name != NULL) {
-    w = XtNameToWidget(menuBarWidget, enab->name);
-    if (w == NULL) {
-      DisplayError(enab->name, 0);
-    } else {
-      XtSetSensitive(w, enab->value);
-    }
-    enab++;
-  }
-}
-
-Enables icsEnables[] = {
-    { "menuFile.Mail Move", False },
-    { "menuFile.Reload CMail Message", False },
-    { "menuMode.Machine Black", False },
-    { "menuMode.Machine White", False },
-    { "menuMode.Analysis Mode", False },
-    { "menuMode.Analyze File", False },
-    { "menuMode.Two Machines", False },
-    { "menuMode.Machine Match", False },
-#ifndef ZIPPY
-    { "menuEngine.Hint", False },
-    { "menuEngine.Book", False },
-    { "menuEngine.Move Now", False },
-#ifndef OPTIONSDIALOG
-    { "menuOptions.Periodic Updates", False },
-    { "menuOptions.Hide Thinking", False },
-    { "menuOptions.Ponder Next Move", False },
-#endif
-#endif
-    { "menuEngine.Engine #1 Settings", False },
-    { "menuEngine.Engine #2 Settings", False },
-    { "menuEngine.Load Engine", False },
-    { "menuEdit.Annotate", False },
-    { "menuOptions.Match", False },
-    { NULL, False }
-};
-
-Enables ncpEnables[] = {
-    { "menuFile.Mail Move", False },
-    { "menuFile.Reload CMail Message", False },
-    { "menuMode.Machine White", False },
-    { "menuMode.Machine Black", False },
-    { "menuMode.Analysis Mode", False },
-    { "menuMode.Analyze File", False },
-    { "menuMode.Two Machines", False },
-    { "menuMode.Machine Match", False },
-    { "menuMode.ICS Client", False },
-    { "menuView.ICStex", False },
-    { "menuView.ICS Input Box", False },
-    { "Action", False },
-    { "menuEdit.Revert", False },
-    { "menuEdit.Annotate", False },
-    { "menuEngine.Engine #1 Settings", False },
-    { "menuEngine.Engine #2 Settings", False },
-    { "menuEngine.Move Now", False },
-    { "menuEngine.Retract Move", False },
-    { "menuOptions.ICS", False },
-#ifndef OPTIONSDIALOG
-    { "menuOptions.Auto Flag", False },
-    { "menuOptions.Auto Flip View", False },
-//    { "menuOptions.ICS Alarm", False },
-    { "menuOptions.Move Sound", False },
-    { "menuOptions.Hide Thinking", False },
-    { "menuOptions.Periodic Updates", False },
-    { "menuOptions.Ponder Next Move", False },
-#endif
-    { "menuEngine.Hint", False },
-    { "menuEngine.Book", False },
-    { NULL, False }
-};
-
-Enables gnuEnables[] = {
-    { "menuMode.ICS Client", False },
-    { "menuView.ICStex", False },
-    { "menuView.ICS Input Box", False },
-    { "menuAction.Accept", False },
-    { "menuAction.Decline", False },
-    { "menuAction.Rematch", False },
-    { "menuAction.Adjourn", False },
-    { "menuAction.Stop Examining", False },
-    { "menuAction.Stop Observing", False },
-    { "menuAction.Upload to Examine", False },
-    { "menuEdit.Revert", False },
-    { "menuEdit.Annotate", False },
-    { "menuOptions.ICS", False },
-
-    /* The next two options rely on SetCmailMode being called *after*    */
-    /* SetGNUMode so that when GNU is being used to give hints these     */
-    /* menu options are still available                                  */
-
-    { "menuFile.Mail Move", False },
-    { "menuFile.Reload CMail Message", False },
-    // [HGM] The following have been added to make a switch from ncp to GNU mode possible
-    { "menuMode.Machine White", True },
-    { "menuMode.Machine Black", True },
-    { "menuMode.Analysis Mode", True },
-    { "menuMode.Analyze File", True },
-    { "menuMode.Two Machines", True },
-    { "menuMode.Machine Match", True },
-    { "menuEngine.Engine #1 Settings", True },
-    { "menuEngine.Engine #2 Settings", True },
-    { "menuEngine.Hint", True },
-    { "menuEngine.Book", True },
-    { "menuEngine.Move Now", True },
-    { "menuEngine.Retract Move", True },
-    { "Action", True },
-    { NULL, False }
-};
-
-Enables cmailEnables[] = {
-    { "Action", True },
-    { "menuAction.Call Flag", False },
-    { "menuAction.Draw", True },
-    { "menuAction.Adjourn", False },
-    { "menuAction.Abort", False },
-    { "menuAction.Stop Observing", False },
-    { "menuAction.Stop Examining", False },
-    { "menuFile.Mail Move", True },
-    { "menuFile.Reload CMail Message", True },
-    { NULL, False }
-};
-
-Enables trainingOnEnables[] = {
-  { "menuMode.Edit Comment", False },
-  { "menuMode.Pause", False },
-  { "menuEdit.Forward", False },
-  { "menuEdit.Backward", False },
-  { "menuEdit.Forward to End", False },
-  { "menuEdit.Back to Start", False },
-  { "menuEngine.Move Now", False },
-  { "menuEdit.Truncate Game", False },
-  { NULL, False }
-};
-
-Enables trainingOffEnables[] = {
-  { "menuMode.Edit Comment", True },
-  { "menuMode.Pause", True },
-  { "menuEdit.Forward", True },
-  { "menuEdit.Backward", True },
-  { "menuEdit.Forward to End", True },
-  { "menuEdit.Back to Start", True },
-  { "menuEngine.Move Now", True },
-  { "menuEdit.Truncate Game", True },
-  { NULL, False }
-};
-
-Enables machineThinkingEnables[] = {
-  { "menuFile.Load Game", False },
-//  { "menuFile.Load Next Game", False },
-//  { "menuFile.Load Previous Game", False },
-//  { "menuFile.Reload Same Game", False },
-  { "menuEdit.Paste Game", False },
-  { "menuFile.Load Position", False },
-//  { "menuFile.Load Next Position", False },
-//  { "menuFile.Load Previous Position", False },
-//  { "menuFile.Reload Same Position", False },
-  { "menuEdit.Paste Position", False },
-  { "menuMode.Machine White", False },
-  { "menuMode.Machine Black", False },
-  { "menuMode.Two Machines", False },
-//  { "menuMode.Machine Match", False },
-  { "menuEngine.Retract Move", False },
-  { NULL, False }
-};
-
-Enables userThinkingEnables[] = {
-  { "menuFile.Load Game", True },
-//  { "menuFile.Load Next Game", True },
-//  { "menuFile.Load Previous Game", True },
-//  { "menuFile.Reload Same Game", True },
-  { "menuEdit.Paste Game", True },
-  { "menuFile.Load Position", True },
-//  { "menuFile.Load Next Position", True },
-//  { "menuFile.Load Previous Position", True },
-//  { "menuFile.Reload Same Position", True },
-  { "menuEdit.Paste Position", True },
-  { "menuMode.Machine White", True },
-  { "menuMode.Machine Black", True },
-  { "menuMode.Two Machines", True },
-//  { "menuMode.Machine Match", True },
-  { "menuEngine.Retract Move", True },
-  { NULL, False }
-};
-
-void
-SetICSMode ()
-{
-  SetMenuEnables(icsEnables);
-
-#if ZIPPY
-  if (appData.zippyPlay && !appData.noChessProgram) { /* [DM] icsEngineAnalyze */
-     XtSetSensitive(XtNameToWidget(menuBarWidget, "menuMode.Analysis Mode"), True);
-     XtSetSensitive(XtNameToWidget(menuBarWidget, "menuEngine.Engine #1 Settings"), True);
-  }
-#endif
-}
-
-void
-SetNCPMode ()
-{
-  SetMenuEnables(ncpEnables);
-}
-
-void
-SetGNUMode ()
-{
-  SetMenuEnables(gnuEnables);
-}
-
-void
-SetCmailMode ()
-{
-  SetMenuEnables(cmailEnables);
-}
-
-void
-SetTrainingModeOn ()
-{
-  SetMenuEnables(trainingOnEnables);
-  if (appData.showButtonBar) {
-    XtSetSensitive(buttonBarWidget, False);
-  }
-  CommentPopDown();
-}
-
-void
-SetTrainingModeOff ()
-{
-  SetMenuEnables(trainingOffEnables);
-  if (appData.showButtonBar) {
-    XtSetSensitive(buttonBarWidget, True);
-  }
-}
-
-void
-SetUserThinkingEnables ()
-{
-  if (appData.noChessProgram) return;
-  SetMenuEnables(userThinkingEnables);
-}
-
-void
-SetMachineThinkingEnables ()
-{
-  if (appData.noChessProgram) return;
-  SetMenuEnables(machineThinkingEnables);
-  switch (gameMode) {
-  case MachinePlaysBlack:
-  case MachinePlaysWhite:
-  case TwoMachinesPlay:
-    XtSetSensitive(XtNameToWidget(menuBarWidget,
-                                 ModeToWidgetName(gameMode)), True);
-    break;
-  default:
-    break;
-  }
-}
-
 // [HGM] code borrowed from winboard.c (which should thus go to backend.c!)
 #define HISTORY_SIZE 64
 static char *history[HISTORY_SIZE];
@@ -3453,6 +3063,7 @@ CreateGrid ()
 }
 
 int nrOfMenuItems = 7;
+Widget menuWidget[150];
 MenuListItem menuItemList[150] = {
     { "LoadNextGameProc", LoadNextGameProc },
     { "LoadPrevGameProc", LoadPrevGameProc },
@@ -3487,6 +3098,40 @@ MenuListItem menuItemList[150] = {
   {NULL, NothingProc}
 };
 
+void
+MarkMenuItem (char *menuRef, int state)
+{
+    int nr = MenuToNumber(menuRef);
+    if(nr >= 0) {
+       Arg args[2];
+       XtSetArg(args[0], XtNleftBitmap, state ? xMarkPixmap : None);
+       XtSetValues(menuWidget[nr], args, 1);
+    }
+}
+
+void
+EnableMenuItem (char *menuRef, int state)
+{
+    int nr = MenuToNumber(menuRef);
+    if(nr >= 0) XtSetSensitive(menuWidget[nr], state);
+}
+
+void
+EnableButtonBar (int state)
+{
+    XtSetSensitive(buttonBarWidget, state);
+}
+
+
+void
+SetMenuEnables (Enables *enab)
+{
+  while (enab->name != NULL) {
+    EnableMenuItem(enab->name, enab->value);
+    enab++;
+  }
+}
+
 int
 Equal(char *p, char *s)
 {   // compare strings skipping spaces in second
@@ -3549,6 +3194,7 @@ AppendMenuItem (char *text, char *name, MenuProc *action)
            XtAddCallback(entry, XtNcallback,
                          (XtCallbackProc) (strcmp(name, "recent") ? MenuBarSelect : MenuEngineSelect),
                          (caddr_t) action);
+           menuWidget[nrOfMenuItems] = entry;
        }
 }
 
@@ -4480,9 +4126,7 @@ XDrawPosition (Widget w, int repaint, Board board)
        board = lastBoard[nr];
     }
     if (!lastBoardValid[nr] || (nr == 0 && lastFlipView != flipView)) {
-       XtSetArg(args[0], XtNleftBitmap, (flipView ? xMarkPixmap : None));
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuView.Flip View"),
-                   args, 1);
+       MarkMenuItem("Flip View", flipView);
     }
 
     /*
@@ -5010,48 +4654,6 @@ ThawUI ()
   frozen = 0;
 }
 
-char *
-ModeToWidgetName (GameMode mode)
-{
-    switch (mode) {
-      case BeginningOfGame:
-       if (appData.icsActive)
-         return "menuMode.ICS Client";
-       else if (appData.noChessProgram ||
-                *appData.cmailGameName != NULLCHAR)
-         return "menuMode.Edit Game";
-       else
-         return "menuMode.Machine Black";
-      case MachinePlaysBlack:
-       return "menuMode.Machine Black";
-      case MachinePlaysWhite:
-       return "menuMode.Machine White";
-      case AnalyzeMode:
-       return "menuMode.Analysis Mode";
-      case AnalyzeFile:
-       return "menuMode.Analyze File";
-      case TwoMachinesPlay:
-       return "menuMode.Two Machines";
-      case EditGame:
-       return "menuMode.Edit Game";
-      case PlayFromGameFile:
-       return "menuFile.Load Game";
-      case EditPosition:
-       return "menuMode.Edit Position";
-      case Training:
-       return "menuMode.Training";
-      case IcsPlayingWhite:
-      case IcsPlayingBlack:
-      case IcsObserving:
-      case IcsIdle:
-      case IcsExamining:
-       return "menuMode.ICS Client";
-      default:
-      case EndOfGame:
-       return NULL;
-    }
-}
-
 void
 ModeHighlight ()
 {
@@ -5064,13 +4666,7 @@ ModeHighlight ()
 
     if (pausing != oldPausing) {
        oldPausing = pausing;
-       if (pausing) {
-           XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-       } else {
-           XtSetArg(args[0], XtNleftBitmap, None);
-       }
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Pause"),
-                   args, 1);
+       MarkMenuItem("Pause", pausing);
 
        if (appData.showButtonBar) {
          /* Always toggle, don't set.  Previous code messes up when
@@ -5091,21 +4687,17 @@ ModeHighlight ()
 
     wname = ModeToWidgetName(oldmode);
     if (wname != NULL) {
-       XtSetArg(args[0], XtNleftBitmap, None);
-       XtSetValues(XtNameToWidget(menuBarWidget, wname), args, 1);
+       MarkMenuItem(wname, False);
     }
     wname = ModeToWidgetName(gameMode);
     if (wname != NULL) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-       XtSetValues(XtNameToWidget(menuBarWidget, wname), args, 1);
+       MarkMenuItem(wname, True);
     }
     oldmode = gameMode;
-    XtSetArg(args[0], XtNleftBitmap, matchMode && matchGame < appData.matchGames ? xMarkPixmap : None);
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuMode.Machine Match"), args, 1);
+    MarkMenuItem("Machine Match", matchMode && matchGame < appData.matchGames);
 
     /* Maybe all the enables should be handled here, not just this one */
-    XtSetSensitive(XtNameToWidget(menuBarWidget, "menuMode.Training"),
-                  gameMode == Training || gameMode == PlayFromGameFile);
+    EnableMenuItem("Training", gameMode == Training || gameMode == PlayFromGameFile);
 }
 
 
@@ -5131,84 +4723,6 @@ LoadGamePopUp (FILE *f, int gameNumber, char *title)
     return LoadGame(f, gameNumber, title, FALSE);
 }
 
-void
-LoadGameProc ()
-{
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
-       Reset(FALSE, TRUE);
-    }
-    FileNamePopUp(_("Load game file name?"), "", ".pgn .game", LoadGamePopUp, "rb");
-}
-
-void
-LoadNextGameProc ()
-{
-    ReloadGame(1);
-}
-
-void
-LoadPrevGameProc ()
-{
-    ReloadGame(-1);
-}
-
-void
-ReloadGameProc ()
-{
-    ReloadGame(0);
-}
-
-void
-LoadNextPositionProc ()
-{
-    ReloadPosition(1);
-}
-
-void
-LoadPrevPositionProc ()
-{
-    ReloadPosition(-1);
-}
-
-void
-ReloadPositionProc ()
-{
-    ReloadPosition(0);
-}
-
-void
-LoadPositionProc() 
-{
-    if (gameMode == AnalyzeMode || gameMode == AnalyzeFile) {
-       Reset(FALSE, TRUE);
-    }
-    FileNamePopUp(_("Load position file name?"), "", ".fen .epd .pos", LoadPosition, "rb");
-}
-
-void
-SaveGameProc ()
-{
-    FileNamePopUp(_("Save game file name?"),
-                 DefaultFileName(appData.oldSaveStyle ? "game" : "pgn"),
-                 appData.oldSaveStyle ? ".game" : ".pgn",
-                 SaveGame, "a");
-}
-
-void
-SavePositionProc ()
-{
-    FileNamePopUp(_("Save position file name?"),
-                 DefaultFileName(appData.oldSaveStyle ? "pos" : "fen"),
-                 appData.oldSaveStyle ? ".pos" : ".fen",
-                 SavePosition, "a");
-}
-
-void
-ReloadCmailMsgProc ()
-{
-    ReloadCmailMsgEvent(FALSE);
-}
-
 /* this variable is shared between CopyPositionProc and SendPositionSelection */
 char *selected_fen_position=NULL;
 
@@ -5285,12 +4799,6 @@ CopyPositionProc ()
                   NULL/* transfer_done_proc */);
 }
 
-void
-CopyFENToClipboard ()
-{ // wrapper to make call from back-end possible
-  CopyPositionProc();
-}
-
 /* function called when the data to Paste is ready */
 static void
 PastePositionCB (Widget w, XtPointer client_data, Atom *selection,
@@ -5398,24 +4906,6 @@ CopySomething ()
 /* note: when called from menu all parameters are NULL, so no clue what the
  * Widget which was clicked on was, or what the click event was
  */
-void
-CopyGameProc ()
-{
-  int ret;
-
-  ret = SaveGameToFile(gameCopyFilename, FALSE);
-  if (!ret) return;
-
-  CopySomething();
-}
-
-void
-CopyGameListProc ()
-{
-  if(!SaveGameListAsText(fopen(gameCopyFilename, "w"))) return;
-  CopySomething();
-}
-
 /* function called when the data to Paste is ready */
 static void
 PasteGameCB (Widget w, XtPointer client_data, Atom *selection,
@@ -5456,137 +4946,12 @@ PasteGameProc ()
 
 
 void
-AutoSaveGame ()
-{
-    SaveGameProc();
-}
-
-
-void
-QuitProc ()
-{
-    ExitEvent(0);
-}
-
-void
 QuitWrapper (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 {
     QuitProc();
 }
 
 void
-AnalyzeModeProc ()
-{
-    char buf[MSG_SIZ];
-
-    if (!first.analysisSupport) {
-      snprintf(buf, sizeof(buf), _("%s does not support analysis"), first.tidy);
-      DisplayError(buf, 0);
-      return;
-    }
-    /* [DM] icsEngineAnalyze [HGM] This is horrible code; reverse the gameMode and isEngineAnalyze tests! */
-    if (appData.icsActive) {
-        if (gameMode != IcsObserving) {
-         snprintf(buf, MSG_SIZ, _("You are not observing a game"));
-            DisplayError(buf, 0);
-            /* secure check */
-            if (appData.icsEngineAnalyze) {
-                if (appData.debugMode)
-                    fprintf(debugFP, _("Found unexpected active ICS engine analyze \n"));
-                ExitAnalyzeMode();
-                ModeHighlight();
-            }
-            return;
-        }
-        /* if enable, use want disable icsEngineAnalyze */
-        if (appData.icsEngineAnalyze) {
-                ExitAnalyzeMode();
-                ModeHighlight();
-                return;
-        }
-        appData.icsEngineAnalyze = TRUE;
-        if (appData.debugMode)
-            fprintf(debugFP, _("ICS engine analyze starting... \n"));
-    }
-#ifndef OPTIONSDIALOG
-    if (!appData.showThinking)
-      ShowThinkingProc();
-#endif
-
-    AnalyzeModeEvent();
-}
-
-void
-AnalyzeFileProc ()
-{
-    if (!first.analysisSupport) {
-      char buf[MSG_SIZ];
-      snprintf(buf, sizeof(buf), _("%s does not support analysis"), first.tidy);
-      DisplayError(buf, 0);
-      return;
-    }
-//    Reset(FALSE, TRUE);
-#ifndef OPTIONSDIALOG
-    if (!appData.showThinking)
-      ShowThinkingProc();
-#endif
-    AnalyzeFileEvent();
-//    FileNamePopUp(_("File to analyze"), "", ".pgn .game", LoadGamePopUp, "rb");
-    AnalysisPeriodicEvent(1);
-}
-
-void
-MatchProc ()
-{
-    MatchEvent(2);
-}
-
-void
-EditCommentProc ()
-{
-    Arg args[5];
-    int j;
-    if (PopDown(1)) { // popdown succesful
-       j = 0;
-       XtSetArg(args[j], XtNleftBitmap, None); j++;
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuEdit.Edit Comment"), args, j);
-       XtSetValues(XtNameToWidget(menuBarWidget, "menuView.Show Comments"), args, j);
-    } else // was not up
-       EditCommentEvent();
-}
-
-void
-IcsInputBoxProc ()
-{
-    if (!PopDown(4)) ICSInputBoxPopUp();
-}
-
-void
-AdjuWhiteProc ()
-{
-    UserAdjudicationEvent(+1);
-}
-
-void
-AdjuBlackProc ()
-{
-    UserAdjudicationEvent(-1);
-}
-
-void
-AdjuDrawProc ()
-{
-    UserAdjudicationEvent(0);
-}
-
-void
-EnterKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
-{
-    if (shellUp[4] == True)
-      ICSInputSendText();
-}
-
-void
 UpKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 {   // [HGM] input: let up-arrow recall previous line from history
     Widget edit;
@@ -5630,6 +4995,13 @@ DownKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 }
 
 void
+EnterKeyProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
+{
+    if (shellUp[4] == True)
+      ICSInputSendText();
+}
+
+void
 TempBackwardProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 {
        if (!TempBackwardActive) {
@@ -5655,420 +5027,6 @@ TempForwardProc (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 }
 
 void
-RevertProc ()
-{
-    RevertEvent(False);
-}
-
-void
-AnnotateProc ()
-{
-    RevertEvent(True);
-}
-
-void
-FlipViewProc ()
-{
-    flipView = !flipView;
-    DrawPosition(True, NULL);
-}
-
-void
-PonderNextMoveProc ()
-{
-    Arg args[16];
-
-    PonderNextMoveEvent(!appData.ponderNextMove);
-#ifndef OPTIONSDIALOG
-    if (appData.ponderNextMove) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Ponder Next Move"),
-               args, 1);
-#endif
-}
-
-#ifndef OPTIONSDIALOG
-void
-AlwaysQueenProc ()
-{
-    Arg args[16];
-
-    appData.alwaysPromoteToQueen = !appData.alwaysPromoteToQueen;
-
-    if (appData.alwaysPromoteToQueen) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Always Queen"),
-               args, 1);
-}
-
-void
-AnimateDraggingProc ()
-{
-    Arg args[16];
-
-    appData.animateDragging = !appData.animateDragging;
-
-    if (appData.animateDragging) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-        CreateAnimVars();
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Animate Dragging"),
-               args, 1);
-}
-
-void
-AnimateMovingProc ()
-{
-    Arg args[16];
-
-    appData.animate = !appData.animate;
-
-    if (appData.animate) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-        CreateAnimVars();
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Animate Moving"),
-               args, 1);
-}
-
-void
-AutoflagProc ()
-{
-    Arg args[16];
-
-    appData.autoCallFlag = !appData.autoCallFlag;
-
-    if (appData.autoCallFlag) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Flag"),
-               args, 1);
-}
-
-void
-AutoflipProc ()
-{
-    Arg args[16];
-
-    appData.autoFlipView = !appData.autoFlipView;
-
-    if (appData.autoFlipView) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Auto Flip View"),
-               args, 1);
-}
-
-void
-BlindfoldProc ()
-{
-    Arg args[16];
-
-    appData.blindfold = !appData.blindfold;
-
-    if (appData.blindfold) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Blindfold"),
-               args, 1);
-
-    DrawPosition(True, NULL);
-}
-
-void
-TestLegalityProc ()
-{
-    Arg args[16];
-
-    appData.testLegality = !appData.testLegality;
-
-    if (appData.testLegality) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Test Legality"),
-               args, 1);
-}
-
-
-void
-FlashMovesProc ()
-{
-    Arg args[16];
-
-    if (appData.flashCount == 0) {
-       appData.flashCount = 3;
-    } else {
-       appData.flashCount = -appData.flashCount;
-    }
-
-    if (appData.flashCount > 0) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Flash Moves"),
-               args, 1);
-}
-
-#if HIGHDRAG
-void
-HighlightDraggingProc ()
-{
-    Arg args[16];
-
-    appData.highlightDragging = !appData.highlightDragging;
-
-    if (appData.highlightDragging) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget,
-                              "menuOptions.Highlight Dragging"), args, 1);
-}
-#endif
-
-void
-HighlightLastMoveProc ()
-{
-    Arg args[16];
-
-    appData.highlightLastMove = !appData.highlightLastMove;
-
-    if (appData.highlightLastMove) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget,
-                              "menuOptions.Highlight Last Move"), args, 1);
-}
-
-void
-HighlightArrowProc ()
-{
-    Arg args[16];
-
-    appData.highlightMoveWithArrow = !appData.highlightMoveWithArrow;
-
-    if (appData.highlightMoveWithArrow) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget,
-                              "menuOptions.Arrow"), args, 1);
-}
-
-#if 0
-void
-IcsAlarmProc ()
-{
-    Arg args[16];
-
-    appData.icsAlarm = !appData.icsAlarm;
-
-    if (appData.icsAlarm) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget,
-                              "menuOptions.ICS Alarm"), args, 1);
-}
-#endif
-
-void
-MoveSoundProc ()
-{
-    Arg args[16];
-
-    appData.ringBellAfterMoves = !appData.ringBellAfterMoves;
-
-    if (appData.ringBellAfterMoves) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Move Sound"),
-               args, 1);
-}
-
-void
-OneClickProc ()
-{
-    Arg args[16];
-
-    appData.oneClick = !appData.oneClick;
-
-    if (appData.oneClick) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.OneClick"),
-               args, 1);
-}
-
-void
-PeriodicUpdatesProc ()
-{
-    Arg args[16];
-
-    PeriodicUpdatesEvent(!appData.periodicUpdates);
-
-    if (appData.periodicUpdates) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Periodic Updates"),
-               args, 1);
-}
-
-void
-PopupExitMessageProc ()
-{
-    Arg args[16];
-
-    appData.popupExitMessage = !appData.popupExitMessage;
-
-    if (appData.popupExitMessage) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget,
-                              "menuOptions.Popup Exit Message"), args, 1);
-}
-
-void
-PopupMoveErrorsProc ()
-{
-    Arg args[16];
-
-    appData.popupMoveErrors = !appData.popupMoveErrors;
-
-    if (appData.popupMoveErrors) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Popup Move Errors"),
-               args, 1);
-}
-
-#if 0
-void
-PremoveProc ()
-{
-    Arg args[16];
-
-    appData.premove = !appData.premove;
-
-    if (appData.premove) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget,
-                              "menuOptions.Premove"), args, 1);
-}
-#endif
-
-void
-ShowCoordsProc ()
-{
-    Arg args[16];
-
-    appData.showCoords = !appData.showCoords;
-
-    if (appData.showCoords) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Show Coords"),
-               args, 1);
-
-    DrawPosition(True, NULL);
-}
-
-void
-ShowThinkingProc ()
-{
-    appData.showThinking = !appData.showThinking; // [HGM] thinking: tken out of ShowThinkingEvent
-    ShowThinkingEvent();
-}
-
-void
-HideThinkingProc ()
-{
-    Arg args[16];
-
-    appData.hideThinkingFromHuman = !appData.hideThinkingFromHuman; // [HGM] thinking: tken out of ShowThinkingEvent
-    ShowThinkingEvent();
-
-    if (appData.hideThinkingFromHuman) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Hide Thinking"),
-               args, 1);
-}
-#endif
-
-void
-SaveOnExitProc ()
-{
-    Arg args[16];
-
-    saveSettingsOnExit = !saveSettingsOnExit;
-
-    if (saveSettingsOnExit) {
-       XtSetArg(args[0], XtNleftBitmap, xMarkPixmap);
-    } else {
-       XtSetArg(args[0], XtNleftBitmap, None);
-    }
-    XtSetValues(XtNameToWidget(menuBarWidget, "menuOptions.Save Settings on Exit"),
-               args, 1);
-}
-
-void
-SaveSettingsProc ()
-{
-     SaveSettings(settingsFileName);
-}
-
-void
-InfoProc ()
-{
-    char buf[MSG_SIZ];
-    snprintf(buf, sizeof(buf), "xterm -e info --directory %s --directory . -f %s &",
-           INFODIR, INFOFILE);
-    system(buf);
-}
-
-void
 ManInner (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 {   // called as key binding
     char buf[MSG_SIZ];
@@ -6082,80 +5040,6 @@ ManInner (Widget w, XEvent *event, String *prms, Cardinal *nprms)
 }
 
 void
-ManProc ()
-{   // called from menu
-    ManInner(NULL, NULL, NULL, NULL);
-}
-
-void
-BugReportProc ()
-{
-    char buf[MSG_SIZ];
-    snprintf(buf, MSG_SIZ, "%s mailto:bug-xboard@gnu.org", appData.sysOpen);
-    system(buf);
-}
-
-void
-GuideProc ()
-{
-    char buf[MSG_SIZ];
-    snprintf(buf, MSG_SIZ, "%s http://www.gnu.org/software/xboard/user_guide/UserGuide.html", appData.sysOpen);
-    system(buf);
-}
-
-void
-HomePageProc ()
-{
-    char buf[MSG_SIZ];
-    snprintf(buf, MSG_SIZ, "%s http://www.gnu.org/software/xboard/", appData.sysOpen);
-    system(buf);
-}
-
-void
-NewsPageProc ()
-{
-    char buf[MSG_SIZ];
-    snprintf(buf, MSG_SIZ, "%s http://www.gnu.org/software/xboard/whats_new/portal.html", appData.sysOpen);
-    system(buf);
-}
-
-void
-AboutProc ()
-{
-    char buf[2 * MSG_SIZ];
-#if ZIPPY
-    char *zippy = _(" (with Zippy code)");
-#else
-    char *zippy = "";
-#endif
-    snprintf(buf, sizeof(buf), 
-_("%s%s\n\n"
-"Copyright 1991 Digital Equipment Corporation\n"
-"Enhancements Copyright 1992-2012 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.\n\n"
-"Visit XBoard on the web at: http://www.gnu.org/software/xboard/\n"
-"Check out the newest features at: http://www.gnu.org/software/xboard/whats_new.html\n\n"
-"Report bugs via email at: <bug-xboard@gnu.org>\n\n"
-  ),
-           programVersion, zippy, PACKAGE);
-    ErrorPopUp(_("About XBoard"), buf, FALSE);
-}
-
-void
-DebugProc ()
-{
-    appData.debugMode = !appData.debugMode;
-}
-
-void
-NothingProc ()
-{
-    return;
-}
-
-void
 DisplayMessage (char *message, char *extMessage)
 {
   /* display a message in the message widget */
@@ -7390,7 +6274,7 @@ InitAnimState (AnimState *anim, XWindowAttributes *info)
   anim->outlineGC = None;
 }
 
-static void
+void
 CreateAnimVars ()
 {
   XWindowAttributes info;