added more callbacks
[xboard.git] / xboard.c
index 39ed7de..c0c505c 100644 (file)
--- a/xboard.c
+++ b/xboard.c
@@ -235,6 +235,13 @@ typedef struct {
     MenuItem *mi;
 } Menu;
 
+typedef struct {
+    char *name;
+    gboolean value;
+} Enables;
+
+
+
 int main P((int argc, char **argv));
 RETSIGTYPE CmailSigHandler P((int sig));
 RETSIGTYPE IntSigHandler P((int sig));
@@ -306,16 +313,10 @@ void SavePositionProc P((Widget w, XEvent *event,
 void MailMoveProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void ReloadCmailMsgProc P((Widget w, XEvent *event, String *prms,
                            Cardinal *nprms));
-void MachineBlackProc P((Widget w, XEvent *event, String *prms,
-                        Cardinal *nprms));
-void MachineWhiteProc P((Widget w, XEvent *event,
-                        String *prms, Cardinal *nprms));
 void AnalyzeModeProc P((Widget w, XEvent *event,
                         String *prms, Cardinal *nprms));
 void AnalyzeFileProc P((Widget w, XEvent *event,
                         String *prms, Cardinal *nprms));
-void TwoMachinesProc P((Widget w, XEvent *event, String *prms,
-                       Cardinal *nprms));
 void IcsClientProc P((Widget w, XEvent *event, String *prms,
                      Cardinal *nprms));
 void EditGameProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
@@ -326,14 +327,6 @@ void EditCommentProc P((Widget w, XEvent *event,
                        String *prms, Cardinal *nprms));
 void IcsInputBoxProc P((Widget w, XEvent *event,
                        String *prms, Cardinal *nprms));
-void AcceptProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void DeclineProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void RematchProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void CallFlagProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void DrawProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void AbortProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void AdjournProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
-void ResignProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void AdjuWhiteProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void AdjuBlackProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void AdjuDrawProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
@@ -351,7 +344,6 @@ void TruncateGameProc P((Widget w, XEvent *event, String *prms,
                         Cardinal *nprms));
 void RetractMoveProc P((Widget w, XEvent *event, String *prms,
                        Cardinal *nprms));
-void MoveNowProc P((Widget w, XEvent *event, String *prms, Cardinal *nprms));
 void AlwaysQueenProc P((Widget w, XEvent *event, String *prms,
                        Cardinal *nprms));
 void AnimateDraggingProc P((Widget w, XEvent *event, String *prms,
@@ -431,6 +423,8 @@ void UciPopDown P(());
 void TimeControlPopDown P(());
 void NewVariantPopDown P(());
 void SettingsPopDown P(());
+void SetMenuEnables P((Enables *enab));
+
 /*
 * XBoard depends on Xt R4 or higher
 */
@@ -531,6 +525,157 @@ static Pixmap xpmMask[BlackKing + 1];
 
 SizeDefaults sizeDefaults[] = SIZE_DEFAULTS;
 
+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 },
+#ifndef ZIPPY
+    { "menuHelp.Hint", False },
+    { "menuHelp.Book", False },
+    { "menuStep.Move Now", False },
+    { "menuOptions.Periodic Updates", False },
+    { "menuOptions.Hide Thinking", False },
+    { "menuOptions.Ponder Next Move", False },
+#endif
+    { 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.ICS Client", False },
+    { "menuMode.ICS Input Box", False },
+    { "Action", False },
+    { "menuStep.Revert", False },
+    { "menuStep.Move Now", False },
+    { "menuStep.Retract Move", False },
+    { "menuOptions.Auto Comment", False },
+    { "menuOptions.Auto Flag", False },
+    { "menuOptions.Auto Flip View", False },
+    { "menuOptions.Auto Observe", False },
+    { "menuOptions.Auto Raise Board", False },
+    { "menuOptions.Get Move List", False },
+    { "menuOptions.ICS Alarm", False },
+    { "menuOptions.Move Sound", False },
+    { "menuOptions.Quiet Play", False },
+    { "menuOptions.Hide Thinking", False },
+    { "menuOptions.Periodic Updates", False },
+    { "menuOptions.Ponder Next Move", False },
+    { "menuHelp.Hint", False },
+    { "menuHelp.Book", False },
+    { NULL, False }
+};
+
+Enables gnuEnables[] = {
+    { "menuMode.ICS Client", False },
+    { "menuMode.ICS Input Box", False },
+    { "menuAction.Accept", False },
+    { "menuAction.Decline", False },
+    { "menuAction.Rematch", False },
+    { "menuAction.Adjourn", False },
+    { "menuAction.Stop Examining", False },
+    { "menuAction.Stop Observing", False },
+    { "menuStep.Revert", False },
+    { "menuOptions.Auto Comment", False },
+    { "menuOptions.Auto Observe", False },
+    { "menuOptions.Auto Raise Board", False },
+    { "menuOptions.Get Move List", False },
+    { "menuOptions.Premove", False },
+    { "menuOptions.Quiet Play", 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 },
+    { 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 },
+  { "menuStep.Forward", False },
+  { "menuStep.Backward", False },
+  { "menuStep.Forward to End", False },
+  { "menuStep.Back to Start", False },
+  { "menuStep.Move Now", False },
+  { "menuStep.Truncate Game", False },
+  { NULL, False }
+};
+
+Enables trainingOffEnables[] = {
+  { "menuMode.Edit Comment", True },
+  { "menuMode.Pause", True },
+  { "menuStep.Forward", True },
+  { "menuStep.Backward", True },
+  { "menuStep.Forward to End", True },
+  { "menuStep.Back to Start", True },
+  { "menuStep.Move Now", True },
+  { "menuStep.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 },
+  { "menuFile.Paste Game", False },
+  { "menuFile.Load Position", False },
+  { "menuFile.Load Next Position", False },
+  { "menuFile.Load Previous Position", False },
+  { "menuFile.Reload Same Position", False },
+  { "menuFile.Paste Position", False },
+  { "menuMode.Machine White", False },
+  { "menuMode.Machine Black", False },
+  { "menuMode.Two Machines", False },
+  { "menuStep.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 },
+  { "menuFile.Paste Game", True },
+  { "menuFile.Load Position", True },
+  { "menuFile.Load Next Position", True },
+  { "menuFile.Load Previous Position", True },
+  { "menuFile.Reload Same Position", True },
+  { "menuFile.Paste Position", True },
+  { "menuMode.Machine White", True },
+  { "menuMode.Machine Black", True },
+  { "menuMode.Two Machines", True },
+  { "menuStep.Retract Move", True },
+  { NULL, False }
+};
+
+
+
 MenuItem fileMenu[] = {
     {N_("New Shuffle Game ..."), ShuffleMenuProc},
     {N_("New Variant ..."), NewVariantProc},      // [HGM] variant: not functional yet
@@ -556,9 +701,9 @@ MenuItem fileMenu[] = {
 };
 
 MenuItem modeMenu[] = {
-    {N_("Machine White"), MachineWhiteProc},
-    {N_("Machine Black"), MachineBlackProc},
-    {N_("Two Machines"), TwoMachinesProc},
+  //    {N_("Machine White"), MachineWhiteProc},
+  //    {N_("Machine Black"), MachineBlackProc},
+  //    {N_("Two Machines"), TwoMachinesProc},
     {N_("Analysis Mode"), AnalyzeModeProc},
     {N_("Analyze File"), AnalyzeFileProc },
     {N_("ICS Client"), IcsClientProc},
@@ -578,15 +723,15 @@ MenuItem modeMenu[] = {
 };
 
 MenuItem actionMenu[] = {
-    {N_("Accept"), AcceptProc},
-    {N_("Decline"), DeclineProc},
-    {N_("Rematch"), RematchProc},
-    {"----", NothingProc},
-    {N_("Call Flag"), CallFlagProc},
-    {N_("Draw"), DrawProc},
-    {N_("Adjourn"), AdjournProc},
-    {N_("Abort"), AbortProc},
-    {N_("Resign"), ResignProc},
+    //    {N_("Accept"), AcceptProc},
+    //    {N_("Decline"), DeclineProc},
+  //    {N_("Rematch"), RematchProc},
+  //    {"----", NothingProc},
+  //    {N_("Call Flag"), CallFlagProc},
+  //    {N_("Draw"), DrawProc},
+  //    {N_("Adjourn"), AdjournProc},
+  //    {N_("Abort"), AbortProc},
+  //    {N_("Resign"), ResignProc},
     {"----", NothingProc},
     {N_("Stop Observing"), StopObservingProc},
     {N_("Stop Examining"), StopExaminingProc},
@@ -605,7 +750,7 @@ MenuItem stepMenu[] = {
     {N_("Revert"), RevertProc},
     {N_("Truncate Game"), TruncateGameProc},
     {"----", NothingProc},
-    {N_("Move Now"), MoveNowProc},
+    //    {N_("Move Now"), MoveNowProc},
     {N_("Retract Move"), RetractMoveProc},
     {NULL, NULL}
 };
@@ -1770,11 +1915,11 @@ XtActionsRec boardActions[] = {
     { "SavePositionProc", SavePositionProc },
     { "MailMoveProc", MailMoveProc },
     { "ReloadCmailMsgProc", ReloadCmailMsgProc },
-    { "MachineWhiteProc", MachineWhiteProc },
-    { "MachineBlackProc", MachineBlackProc },
+    //    { "MachineWhiteProc", MachineWhiteProc },
+    //    { "MachineBlackProc", MachineBlackProc },
     { "AnalysisModeProc", AnalyzeModeProc },
     { "AnalyzeFileProc", AnalyzeFileProc },
-    { "TwoMachinesProc", TwoMachinesProc },
+    //    { "TwoMachinesProc", TwoMachinesProc },
     { "IcsClientProc", IcsClientProc },
     { "EditGameProc", EditGameProc },
     { "EditPositionProc", EditPositionProc },
@@ -1786,14 +1931,14 @@ XtActionsRec boardActions[] = {
     { "EditCommentProc", EditCommentProc },
     { "IcsAlarmProc", IcsAlarmProc },
     { "IcsInputBoxProc", IcsInputBoxProc },
-    { "AcceptProc", AcceptProc },
-    { "DeclineProc", DeclineProc },
-    { "RematchProc", RematchProc },
-    { "CallFlagProc", CallFlagProc },
-    { "DrawProc", DrawProc },
-    { "AdjournProc", AdjournProc },
-    { "AbortProc", AbortProc },
-    { "ResignProc", ResignProc },
+    //    { "AcceptProc", AcceptProc },
+    //    { "DeclineProc", DeclineProc },
+    //    { "RematchProc", RematchProc },
+    //    { "CallFlagProc", CallFlagProc },
+    //    { "DrawProc", DrawProc },
+    //    { "AdjournProc", AdjournProc },
+    //    { "AbortProc", AbortProc },
+    //    { "ResignProc", ResignProc },
     { "AdjuWhiteProc", AdjuWhiteProc },
     { "AdjuBlackProc", AdjuBlackProc },
     { "AdjuDrawProc", AdjuDrawProc },
@@ -1806,7 +1951,7 @@ XtActionsRec boardActions[] = {
     { "ToEndProc", ToEndProc },
     { "RevertProc", RevertProc },
     { "TruncateGameProc", TruncateGameProc },
-    { "MoveNowProc", MoveNowProc },
+    //    { "MoveNowProc", MoveNowProc },
     { "RetractMoveProc", RetractMoveProc },
     { "AlwaysQueenProc", AlwaysQueenProc },
     { "AnimateDraggingProc", AnimateDraggingProc },
@@ -2541,10 +2686,10 @@ main(argc, argv)
 
     if (appData.alwaysPromoteToQueen)
       gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_builder_get_object (builder, "menuOptions.Always Queen")),TRUE);
-    
+
     if (appData.animateDragging)
       gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_builder_get_object (builder, "menuOptions.Animate Dragging")),TRUE);
-    
+
     if (appData.animate)
       gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_builder_get_object (builder, "menuOptions.Animate Moving")),TRUE);
 
@@ -2627,7 +2772,7 @@ main(argc, argv)
       gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (gtk_builder_get_object (builder, "menuOptions.Test Legality")),TRUE);
 
     /* end setting check boxes */
-    
+
 
     /* load square colors */
     SVGLightSquare   = load_pixbuf("svg/LightSquare.svg",squareSize);
@@ -2641,7 +2786,7 @@ main(argc, argv)
     gtk_window_set_icon(GTK_WINDOW(GUI_Window),WindowIcon);
 
     /* do resizing to a fixed aspect ratio */
-    
+
     {
       int i,j;
     }
@@ -2768,11 +2913,6 @@ ResetFrontEnd()
     return;
 }
 
-typedef struct {
-    char *name;
-    gboolean value;
-} Enables;
-
 void
 SetMenuEnables(enab)
      Enables *enab;
@@ -2795,162 +2935,13 @@ SetMenuEnables(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 },
-#ifndef ZIPPY
-    { "menuHelp.Hint", False },
-    { "menuHelp.Book", False },
-    { "menuStep.Move Now", False },
-    { "menuOptions.Periodic Updates", False },
-    { "menuOptions.Hide Thinking", False },
-    { "menuOptions.Ponder Next Move", False },
-#endif
-    { 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.ICS Client", False },
-    { "menuMode.ICS Input Box", False },
-    { "Action", False },
-    { "menuStep.Revert", False },
-    { "menuStep.Move Now", False },
-    { "menuStep.Retract Move", False },
-    { "menuOptions.Auto Comment", False },
-    { "menuOptions.Auto Flag", False },
-    { "menuOptions.Auto Flip View", False },
-    { "menuOptions.Auto Observe", False },
-    { "menuOptions.Auto Raise Board", False },
-    { "menuOptions.Get Move List", False },
-    { "menuOptions.ICS Alarm", False },
-    { "menuOptions.Move Sound", False },
-    { "menuOptions.Quiet Play", False },
-    { "menuOptions.Hide Thinking", False },
-    { "menuOptions.Periodic Updates", False },
-    { "menuOptions.Ponder Next Move", False },
-    { "menuHelp.Hint", False },
-    { "menuHelp.Book", False },
-    { NULL, False }
-};
-
-Enables gnuEnables[] = {
-    { "menuMode.ICS Client", False },
-    { "menuMode.ICS Input Box", False },
-    { "menuAction.Accept", False },
-    { "menuAction.Decline", False },
-    { "menuAction.Rematch", False },
-    { "menuAction.Adjourn", False },
-    { "menuAction.Stop Examining", False },
-    { "menuAction.Stop Observing", False },
-    { "menuStep.Revert", False },
-    { "menuOptions.Auto Comment", False },
-    { "menuOptions.Auto Observe", False },
-    { "menuOptions.Auto Raise Board", False },
-    { "menuOptions.Get Move List", False },
-    { "menuOptions.Premove", False },
-    { "menuOptions.Quiet Play", 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 },
-    { 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 },
-  { "menuStep.Forward", False },
-  { "menuStep.Backward", False },
-  { "menuStep.Forward to End", False },
-  { "menuStep.Back to Start", False },
-  { "menuStep.Move Now", False },
-  { "menuStep.Truncate Game", False },
-  { NULL, False }
-};
-
-Enables trainingOffEnables[] = {
-  { "menuMode.Edit Comment", True },
-  { "menuMode.Pause", True },
-  { "menuStep.Forward", True },
-  { "menuStep.Backward", True },
-  { "menuStep.Forward to End", True },
-  { "menuStep.Back to Start", True },
-  { "menuStep.Move Now", True },
-  { "menuStep.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 },
-  { "menuFile.Paste Game", False },
-  { "menuFile.Load Position", False },
-  { "menuFile.Load Next Position", False },
-  { "menuFile.Load Previous Position", False },
-  { "menuFile.Reload Same Position", False },
-  { "menuFile.Paste Position", False },
-  { "menuMode.Machine White", False },
-  { "menuMode.Machine Black", False },
-  { "menuMode.Two Machines", False },
-  { "menuStep.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 },
-  { "menuFile.Paste Game", True },
-  { "menuFile.Load Position", True },
-  { "menuFile.Load Next Position", True },
-  { "menuFile.Load Previous Position", True },
-  { "menuFile.Reload Same Position", True },
-  { "menuFile.Paste Position", True },
-  { "menuMode.Machine White", True },
-  { "menuMode.Machine Black", True },
-  { "menuMode.Two Machines", True },
-  { "menuStep.Retract Move", True },
-  { NULL, False }
-};
-
 void SetICSMode()
 {
   SetMenuEnables(icsEnables);
 
 #ifdef ZIPPY
   if (appData.zippyPlay && !appData.noChessProgram)   /* [DM] icsEngineAnalyze */
-     XtSetSensitive(XtNameToWidget(menuBarWidget, "menuMode.Analysis Mode"), True);
+    {}; //     XtSetSensitive(XtNameToWidget(menuBarWidget, "menuMode.Analysis Mode"), True);
 #endif
 }
 
@@ -2977,7 +2968,7 @@ SetTrainingModeOn()
 {
   SetMenuEnables(trainingOnEnables);
   if (appData.showButtonBar) {
-    XtSetSensitive(buttonBarWidget, False);
+    //    XtSetSensitive(buttonBarWidget, False);
   }
   CommentPopDown();
 }
@@ -2987,7 +2978,7 @@ SetTrainingModeOff()
 {
   SetMenuEnables(trainingOffEnables);
   if (appData.showButtonBar) {
-    XtSetSensitive(buttonBarWidget, True);
+    //    XtSetSensitive(buttonBarWidget, True);
   }
 }
 
@@ -3007,8 +2998,8 @@ SetMachineThinkingEnables()
   case MachinePlaysBlack:
   case MachinePlaysWhite:
   case TwoMachinesPlay:
-    XtSetSensitive(XtNameToWidget(menuBarWidget,
-                                 ModeToWidgetName(gameMode)), True);
+//    XtSetSensitive(XtNameToWidget(menuBarWidget,
+//                               ModeToWidgetName(gameMode)), True);
     break;
   default:
     break;
@@ -3203,6 +3194,12 @@ void CreatePieces()
   WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen, WhiteKing,
   BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen, BlackKing,
   */
+  int i;
+
+  /* get some defaults going */
+  for(i=WhitePawn; i<DemotePiece+1; i++)
+    SVGpieces[i]   = load_pixbuf("svg/NeutralSquare.svg",squareSize);
+    
 
   SVGpieces[WhitePawn]   = load_pixbuf("svg/WhitePawn.svg",squareSize);
   SVGpieces[WhiteKnight] = load_pixbuf("svg/WhiteKnight.svg",squareSize);
@@ -3691,19 +3688,22 @@ static void BlankSquare(x, y, color, piece, dest)
      Drawable dest;
 {
       GdkPixbuf *pb;
-      switch (color) {
-      case 1: /* light */
-       pb = SVGLightSquare;
-       break;
-      case 0: /* dark */
-       pb = SVGDarkSquare;
-       break;
-      case 2: /* neutral */
-      default:
-       pb = SVGNeutralSquare;
-       break;
-      }
+
+      switch (color) 
+       {
+       case 0: /* dark */
+         pb = SVGDarkSquare;
+         break;
+       case 1: /* light */
+         pb = SVGLightSquare;
+         break;
+       case 2: /* neutral */
+       default:
+         pb = SVGNeutralSquare;
+         break;
+       }
       gdk_draw_pixbuf(GDK_WINDOW(GUI_Board->window),NULL,pb,0,0,x,y,-1,-1, GDK_RGB_DITHER_NORMAL, 0, 0);
+      return;
 }
 
 static void DrawPiece(piece, square_color, x, y, dest)
@@ -3777,7 +3777,7 @@ void DrawSquare(row, column, piece, do_flash)
         || (column == BOARD_RGHT+1 && row >= gameInfo.holdingsSize) )
       {
        BlankSquare(x, y, 2, EmptySquare, xBoardWindow);
-       
+
        // [HGM] print piece counts next to holdings
        string[1] = NULLCHAR;
        if(piece > 1)
@@ -3788,17 +3788,16 @@ void DrawSquare(row, column, piece, do_flash)
 
            /* get a cairo_t */
            cr = gdk_cairo_create (GDK_WINDOW(GUI_Board->window));
-           
+
            string[0] = '0' + piece;
-           
+
            /* TODO this has to go into the font-selection */
            cairo_select_font_face (cr, "Sans",
                                    CAIRO_FONT_SLANT_NORMAL,
                                    CAIRO_FONT_WEIGHT_NORMAL);
-           
+
            cairo_set_font_size (cr, 12.0);
            cairo_text_extents (cr, string, &extents);
-           
 
            if (column == (flipView ? BOARD_LEFT-1 : BOARD_RGHT) )
              {
@@ -3819,11 +3818,10 @@ void DrawSquare(row, column, piece, do_flash)
            cairo_set_source_rgb (cr, 0, 0, 0);
            cairo_set_line_width (cr, 0.1);
            cairo_stroke (cr);
-                   
+
            /* free memory */
            cairo_destroy (cr);
          }
-
       }
     else
       {
@@ -3862,13 +3860,13 @@ void DrawSquare(row, column, piece, do_flash)
                                CAIRO_FONT_SLANT_NORMAL,
                                CAIRO_FONT_WEIGHT_NORMAL);
        cairo_set_font_size (cr, 12.0);
-               
+
        string[1] = NULLCHAR;
 
        /* get a cairo_t */
        cr = gdk_cairo_create (GDK_WINDOW(GUI_Board->window));
-       
-       if (row == (flipView ? BOARD_HEIGHT-1 : 0) && 
+
+       if (row == (flipView ? BOARD_HEIGHT-1 : 0) &&
            column >= BOARD_LEFT && column < BOARD_RGHT)
          {
            string[0] = 'a' + column - BOARD_LEFT;
@@ -4167,8 +4165,8 @@ void HandleUserMove(w, event, prms, nprms)
 
     if (promotionUp) {
        if (event->type == ButtonPress) {
-           XtPopdown(promotionShell);
-           XtDestroyWidget(promotionShell);
+//         XtPopdown(promotionShell);
+//         XtDestroyWidget(promotionShell);
            promotionUp = False;
            ClearHighlights();
            fromX = fromY = -1;
@@ -4188,9 +4186,10 @@ void HandleUserMove(w, event, prms, nprms)
 
     /* [HGM] holdings: next 5 lines: ignore all clicks between board and holdings */
     if(event->type == ButtonPress
-            && ( x == BOARD_LEFT-1 || x == BOARD_RGHT
-              || x == BOARD_LEFT-2 && y < BOARD_HEIGHT-gameInfo.holdingsSize
-              || x == BOARD_RGHT+1 && y >= gameInfo.holdingsSize) )
+            && ( x == BOARD_LEFT-1 || 
+                x == BOARD_RGHT   || 
+                (x == BOARD_LEFT-2 && y < BOARD_HEIGHT-gameInfo.holdingsSize ) || 
+                (x == BOARD_RGHT+1 && y >= gameInfo.holdingsSize)) )
        return;
 
     if (fromX == -1) {
@@ -5103,37 +5102,41 @@ void ErrorPopDown()
 {
     if (!errorUp) return;
     errorUp = False;
-    XtPopdown(errorShell);
-    XtDestroyWidget(errorShell);
+
+    if(GUI_Error)
+      gtk_widget_destroy(GTK_WIDGET(GUI_Error));
+
     if (errorExitStatus != -1) ExitEvent(errorExitStatus);
+
+    return;
 }
 
 void ErrorPopUp(title, label, modal)
      char *title, *label;
      int modal;
 {
-  GtkWidget *dialog;
-
-  dialog = gtk_message_dialog_new(GTK_WINDOW(GUI_Window),
+  GUI_Error = gtk_message_dialog_new(GTK_WINDOW(GUI_Window),
                                   GTK_DIALOG_DESTROY_WITH_PARENT,
                                   GTK_MESSAGE_ERROR,
                                   GTK_BUTTONS_CLOSE,
                                   (gchar *)label);
 
-  gtk_window_set_title(GTK_WINDOW(dialog),(gchar *) title);
+  gtk_window_set_title(GTK_WINDOW(GUI_Error),(gchar *) title);
   if(modal)
     {
-      gtk_dialog_run(GTK_DIALOG(dialog));
-      gtk_widget_destroy(GTK_WIDGET(dialog));
+      gtk_dialog_run(GTK_DIALOG(GUI_Error));
+      gtk_widget_destroy(GTK_WIDGET(GUI_Error));
     }
   else
     {
-      g_signal_connect_swapped (dialog, "response",
+      g_signal_connect_swapped (GUI_Error, "response",
                                 G_CALLBACK (ErrorPopDownProc),
-                                dialog);
+                                GUI_Error);
       errorUp = True;
-      gtk_widget_show(GTK_WIDGET(dialog));
+      gtk_widget_show(GTK_WIDGET(GUI_Error));
     }
+
+  return;
 }
 
 /* Disable all user input other than deleting the window */
@@ -5521,24 +5524,6 @@ void AutoSaveGame()
     SaveGameProc(NULL, NULL, NULL, NULL);
 }
 
-void MachineBlackProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    MachineBlackEvent();
-}
-
-void MachineWhiteProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    MachineWhiteEvent();
-}
-
 void AnalyzeModeProc(w, event, prms, nprms)
      Widget w;
      XEvent *event;
@@ -5604,15 +5589,6 @@ void AnalyzeFileProc(w, event, prms, nprms)
     AnalysisPeriodicEvent(1);
 }
 
-void TwoMachinesProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    TwoMachinesEvent();
-}
-
 void IcsClientProc(w, event, prms, nprms)
      Widget w;
      XEvent *event;
@@ -5675,78 +5651,6 @@ void IcsInputBoxProc(w, event, prms, nprms)
     }
 }
 
-void AcceptProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    AcceptEvent();
-}
-
-void DeclineProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    DeclineEvent();
-}
-
-void RematchProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    RematchEvent();
-}
-
-void CallFlagProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    CallFlagEvent();
-}
-
-void DrawProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    DrawEvent();
-}
-
-void AbortProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    AbortEvent();
-}
-
-void AdjournProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    AdjournEvent();
-}
-
-void ResignProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    ResignEvent();
-}
-
 void AdjuWhiteProc(w, event, prms, nprms)
      Widget w;
      XEvent *event;
@@ -5866,16 +5770,6 @@ void RetractMoveProc(w, event, prms, nprms)
     RetractMoveEvent();
 }
 
-void MoveNowProc(w, event, prms, nprms)
-     Widget w;
-     XEvent *event;
-     String *prms;
-     Cardinal *nprms;
-{
-    MoveNowEvent();
-}
-
-
 void AlwaysQueenProc(w, event, prms, nprms)
      Widget w;
      XEvent *event;
@@ -6499,55 +6393,58 @@ void DisplayMessage(message, extMessage)
        }
     }
     gtk_label_set_text( GTK_LABEL(gtk_builder_get_object (builder, "Messages")),message);
+
+    return;
 }
 
 void DisplayTitle(text)
      char *text;
 {
-    Arg args[16];
-    int i;
-    char title[MSG_SIZ];
-    char icon[MSG_SIZ];
+    gchar title[MSG_SIZ];
 
     if (text == NULL) text = "";
 
-    if (appData.titleInWindow) {
-       i = 0;
-       XtSetArg(args[i], XtNlabel, text);   i++;
-       XtSetValues(titleWidget, args, i);
-    }
+    if (appData.titleInWindow)
+      {
+       /* TODO */
+      }
 
-    if (*text != NULLCHAR) {
-       strcpy(icon, text);
+    if (*text != NULLCHAR)
+      {
        strcpy(title, text);
-    } else if (appData.icsActive) {
-        snprintf(icon, sizeof(icon), "%s", appData.icsHost);
+      }
+    else if (appData.icsActive)
+      {
        snprintf(title, sizeof(title), "%s: %s", programName, appData.icsHost);
-    } else if (appData.cmailGameName[0] != NULLCHAR) {
-        snprintf(icon, sizeof(icon), "%s", "CMail");
+      }
+    else if (appData.cmailGameName[0] != NULLCHAR)
+      {
        snprintf(title,sizeof(title), "%s: %s", programName, "CMail");
 #ifdef GOTHIC
     // [HGM] license: This stuff should really be done in back-end, but WinBoard already had a pop-up for it
-    } else if (gameInfo.variant == VariantGothic) {
-       strcpy(icon, programName);
+      }
+    else if (gameInfo.variant == VariantGothic)
+      {
        strcpy(title, GOTHIC);
 #endif
 #ifdef FALCON
-    } else if (gameInfo.variant == VariantFalcon) {
-       strcpy(icon, programName);
+      }
+    else if (gameInfo.variant == VariantFalcon)
+      {
        strcpy(title, FALCON);
 #endif
-    } else if (appData.noChessProgram) {
-       strcpy(icon, programName);
+      }
+    else if (appData.noChessProgram)
+      {
        strcpy(title, programName);
-    } else {
-       strcpy(icon, first.tidy);
+      }
+    else
+      {
        snprintf(title,sizeof(title), "%s: %s", programName, first.tidy);
-    }
-    i = 0;
-    XtSetArg(args[i], XtNiconName, (XtArgVal) icon);    i++;
-    XtSetArg(args[i], XtNtitle, (XtArgVal) title);      i++;
-    XtSetValues(shellWidget, args, i);
+      }
+    gtk_window_set_title(GTK_WINDOW(GUI_Window),title);
+
+    return;
 }
 
 
@@ -6991,18 +6888,17 @@ ScheduleDelayedEvent(cb, millisec)
      DelayedEventCallback cb; long millisec;
 {
     delayedEventCallback = cb;
-    delayedEventTimerTag =
-      gtk_timeout_add(millisec,(GtkFunction) FireDelayedEvent, NULL);
+    delayedEventTimerTag = gtk_timeout_add(millisec,(GtkFunction) FireDelayedEvent, NULL);
 }
 
 DelayedEventCallback
 GetDelayedEvent()
 {
-  if (delayedEventTimerTag) 
+  if (delayedEventTimerTag)
     {
       return delayedEventCallback;
-    } 
-  else 
+    }
+  else
     {
       return NULL;
     }
@@ -7011,11 +6907,12 @@ GetDelayedEvent()
 void
 CancelDelayedEvent()
 {
-  if (delayedEventTimerTag) 
+  if (delayedEventTimerTag)
     {
       gtk_timeout_remove(delayedEventTimerTag);
       delayedEventTimerTag = 0;
     }
+
   return;
 }
 
@@ -7060,8 +6957,8 @@ AnalysisClockCallback(data)
      gpointer data;
 {
     if (gameMode == AnalyzeMode || gameMode == AnalyzeFile
-         || appData.icsEngineAnalyze) 
-      { 
+         || appData.icsEngineAnalyze)
+      {
        AnalysisPeriodicEvent(0);
        StartAnalysisClock();
       }
@@ -7083,13 +6980,13 @@ int ClockTimerRunning()
 
 int StopClockTimer()
 {
-    if (clockTimerTag != 0) 
+    if (clockTimerTag != 0)
       {
        gtk_timeout_remove(clockTimerTag);
        clockTimerTag = 0;
        return TRUE;
-      } 
-    else 
+      }
+    else
       {
        return FALSE;
       }
@@ -7166,7 +7063,7 @@ DisplayWhiteClock(timeRemaining, highlight)
   if(appData.noGUI) return;
 
   DisplayTimerLabel(GUI_Whiteclock, _("White"), timeRemaining, highlight);
-  if (highlight && WindowIcon == BlackIcon) 
+  if (highlight && WindowIcon == BlackIcon)
     {
       WindowIcon = WhiteIcon;
       gtk_window_set_icon(GTK_WINDOW(GUI_Window),WindowIcon);
@@ -7181,7 +7078,7 @@ DisplayBlackClock(timeRemaining, highlight)
     if(appData.noGUI) return;
 
     DisplayTimerLabel(GUI_Blackclock, _("Black"), timeRemaining, highlight);
-    if (highlight && WindowIcon == WhiteIcon) 
+    if (highlight && WindowIcon == WhiteIcon)
       {
         WindowIcon = BlackIcon;
         gtk_window_set_icon(GTK_WINDOW(GUI_Window),WindowIcon);
@@ -7796,7 +7693,7 @@ static void
 FrameDelay (time)
      int time;
 {
-  XSync(xDisplay, False);
+  //  XSync(xDisplay, False);
   if (time > 0)
     usleep(time * 1000);
 }
@@ -7992,7 +7889,7 @@ SelectGCMask(piece, clip, outline, mask)
     else
       source = blPieceGC;
   }
-  XCopyGC(xDisplay, source, 0xFFFFFFFF, *clip);
+  //  XCopyGC(xDisplay, source, 0xFFFFFFFF, *clip);
 
   /* Outline only used in mono mode and is not modified */
   if (White(piece))
@@ -8009,23 +7906,25 @@ OverlayPiece(piece, clip, outline,  dest)
 
   if (!useImages) {
     /* Draw solid rectangle which will be clipped to shape of piece */
-    XFillRectangle(xDisplay, dest, clip,
-                  0, 0, squareSize, squareSize);
+//    XFillRectangle(xDisplay, dest, clip,
+//                0, 0, squareSize, squareSize)
+;
     if (appData.monoMode)
       /* Also draw outline in contrasting color for black
         on black / white on white cases                */
-      XCopyPlane(xDisplay, *pieceToOutline(piece), dest, outline,
-                0, 0, squareSize, squareSize, 0, 0, 1);
+//      XCopyPlane(xDisplay, *pieceToOutline(piece), dest, outline,
+//              0, 0, squareSize, squareSize, 0, 0, 1)
+;
   } else {
     /* Copy the piece */
     if (White(piece))
       kind = 0;
     else
       kind = 2;
-    XCopyArea(xDisplay, xpmPieceBitmap[kind][piece],
-             dest, clip,
-             0, 0, squareSize, squareSize,
-             0, 0);
+//    XCopyArea(xDisplay, xpmPieceBitmap[kind][piece],
+//           dest, clip,
+//           0, 0, squareSize, squareSize,
+//           0, 0);
   }
 }
 
@@ -8045,8 +7944,8 @@ BeginAnimation(anim, piece, startColor, start)
   anim->prevFrame = *start;
 
   /* The piece will be drawn using its own bitmap as a matte   */
-  SelectGCMask(piece, &anim->pieceGC, &anim->outlineGC, &mask);
-  XSetClipMask(xDisplay, anim->pieceGC, mask);
+//  SelectGCMask(piece, &anim->pieceGC, &anim->outlineGC, &mask);
+//  XSetClipMask(xDisplay, anim->pieceGC, mask);
 }
 
 static void
@@ -8061,45 +7960,46 @@ AnimationFrame(anim, frame, piece)
   int       count, i;
 
   /* Save what we are about to draw into the new buffer */
-  XCopyArea(xDisplay, xBoardWindow, anim->newBuf, anim->blitGC,
-           frame->x, frame->y, squareSize, squareSize,
-           0, 0);
+//  XCopyArea(xDisplay, xBoardWindow, anim->newBuf, anim->blitGC,
+//         frame->x, frame->y, squareSize, squareSize,
+//         0, 0);
 
   /* Erase bits of the previous frame */
   if (Intersect(&anim->prevFrame, frame, squareSize, &overlap, &pt)) {
     /* Where the new frame overlapped the previous,
        the contents in newBuf are wrong. */
-    XCopyArea(xDisplay, anim->saveBuf, anim->newBuf, anim->blitGC,
-             overlap.x, overlap.y,
-             overlap.width, overlap.height,
-             pt.x, pt.y);
+//    XCopyArea(xDisplay, anim->saveBuf, anim->newBuf, anim->blitGC,
+//           overlap.x, overlap.y,
+//           overlap.width, overlap.height,
+//           pt.x, pt.y);
     /* Repaint the areas in the old that don't overlap new */
     CalcUpdateRects(&anim->prevFrame, frame, squareSize, updates, &count);
     for (i = 0; i < count; i++)
-      XCopyArea(xDisplay, anim->saveBuf, xBoardWindow, anim->blitGC,
-               updates[i].x - anim->prevFrame.x,
-               updates[i].y - anim->prevFrame.y,
-               updates[i].width, updates[i].height,
-               updates[i].x, updates[i].y);
+//      XCopyArea(xDisplay, anim->saveBuf, xBoardWindow, anim->blitGC,
+//             updates[i].x - anim->prevFrame.x,
+//             updates[i].y - anim->prevFrame.y,
+//             updates[i].width, updates[i].height,
+//             updates[i].x, updates[i].y)
+;
   } else {
     /* Easy when no overlap */
-    XCopyArea(xDisplay, anim->saveBuf, xBoardWindow, anim->blitGC,
-                 0, 0, squareSize, squareSize,
-                 anim->prevFrame.x, anim->prevFrame.y);
+//    XCopyArea(xDisplay, anim->saveBuf, xBoardWindow, anim->blitGC,
+//               0, 0, squareSize, squareSize,
+//               anim->prevFrame.x, anim->prevFrame.y);
   }
 
   /* Save this frame for next time round */
-  XCopyArea(xDisplay, anim->newBuf, anim->saveBuf, anim->blitGC,
-               0, 0, squareSize, squareSize,
-               0, 0);
+//  XCopyArea(xDisplay, anim->newBuf, anim->saveBuf, anim->blitGC,
+//             0, 0, squareSize, squareSize,
+//             0, 0);
   anim->prevFrame = *frame;
 
   /* Draw piece over original screen contents, not current,
      and copy entire rect. Wipes out overlapping piece images. */
   OverlayPiece(piece, anim->pieceGC, anim->outlineGC, anim->newBuf);
-  XCopyArea(xDisplay, anim->newBuf, xBoardWindow, anim->blitGC,
-               0, 0, squareSize, squareSize,
-               frame->x, frame->y);
+//  XCopyArea(xDisplay, anim->newBuf, xBoardWindow, anim->blitGC,
+//             0, 0, squareSize, squareSize,
+//             frame->x, frame->y);
 }
 
 static void
@@ -8117,15 +8017,16 @@ EndAnimation (anim, finish)
   if (Intersect(&anim->prevFrame, finish, squareSize, &overlap, &pt)) {
     CalcUpdateRects(&anim->prevFrame, finish, squareSize, updates, &count);
     for (i = 0; i < count; i++)
-      XCopyArea(xDisplay, anim->saveBuf, xBoardWindow, anim->blitGC,
-               updates[i].x - anim->prevFrame.x,
-               updates[i].y - anim->prevFrame.y,
-               updates[i].width, updates[i].height,
-               updates[i].x, updates[i].y);
+//      XCopyArea(xDisplay, anim->saveBuf, xBoardWindow, anim->blitGC,
+//             updates[i].x - anim->prevFrame.x,
+//             updates[i].y - anim->prevFrame.y,
+//             updates[i].width, updates[i].height,
+//             updates[i].x, updates[i].y)
+;
   } else {
-    XCopyArea(xDisplay, anim->saveBuf, xBoardWindow, anim->blitGC,
-               0, 0, squareSize, squareSize,
-               anim->prevFrame.x, anim->prevFrame.y);
+//    XCopyArea(xDisplay, anim->saveBuf, xBoardWindow, anim->blitGC,
+//             0, 0, squareSize, squareSize,
+//             anim->prevFrame.x, anim->prevFrame.y);
   }
 }
 
@@ -8256,9 +8157,9 @@ DragPieceBegin(x, y)
           as seen by opponent) the move hasn't been made yet. */
            if(boardX == BOARD_RGHT+1 && PieceForSquare(boardX-1, boardY) > 1 ||
               boardX == BOARD_LEFT-2 && PieceForSquare(boardX+1, boardY) > 1)
-           XCopyArea(xDisplay, xBoardWindow, player.saveBuf, player.blitGC,
-                    corner.x, corner.y, squareSize, squareSize,
-                    0, 0); // [HGM] zh: unstack in stead of grab
+//           XCopyArea(xDisplay, xBoardWindow, player.saveBuf, player.blitGC,
+//                  corner.x, corner.y, squareSize, squareSize,
+//                  0, 0); // [HGM] zh: unstack in stead of grab
        damage[boardY][boardX] = True;
     } else {
        player.dragActive = False;