Add Themes dialog (WB)
[xboard.git] / common.h
index decda5b..0a6a163 100644 (file)
--- a/common.h
+++ b/common.h
@@ -2,10 +2,10 @@
  * common.h -- Common definitions for X and Windows NT versions of XBoard
  *
  * Copyright 1991 by Digital Equipment Corporation, Maynard,
  * common.h -- Common definitions for X and Windows NT versions of XBoard
  *
  * Copyright 1991 by Digital Equipment Corporation, Maynard,
- * Massachusetts. 
+ * Massachusetts.
  *
  * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
  *
  * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
  *
  * Enhancements Copyright 2005 Alessandro Scotti
  *
  *
  * Enhancements Copyright 2005 Alessandro Scotti
  *
@@ -51,8 +51,8 @@
  *------------------------------------------------------------------------
  ** See the file ChangeLog for a revision history.  */
 
  *------------------------------------------------------------------------
  ** See the file ChangeLog for a revision history.  */
 
-#ifndef _COMMON
-#define _COMMON
+#ifndef XB_COMMON
+#define XB_COMMON
 
 
 /* Begin compatibility grunge  */
 
 
 /* Begin compatibility grunge  */
@@ -81,7 +81,14 @@ int pclose(FILE *);
 #endif
 
 #else
 #endif
 
 #else
+#ifdef X11
 #include <X11/Intrinsic.h>
 #include <X11/Intrinsic.h>
+#else
+typedef char Boolean;
+typedef char *String;
+#define True 1
+#define False 0
+#endif
 #endif
 #endif
 
 #endif
 #endif
 
@@ -128,14 +135,17 @@ int pclose(FILE *);
 #define BOARD_RANKS             11             /* [HGM] for in declarations  */
 #define BOARD_FILES             16             /* [HGM] for in declarations  */
 #define BOARD_HEIGHT (gameInfo.boardHeight)    /* [HGM] made user adjustable */
 #define BOARD_RANKS             11             /* [HGM] for in declarations  */
 #define BOARD_FILES             16             /* [HGM] for in declarations  */
 #define BOARD_HEIGHT (gameInfo.boardHeight)    /* [HGM] made user adjustable */
-#define BOARD_WIDTH  (gameInfo.boardWidth + 2*gameInfo.holdingsWidth)   
+#define BOARD_WIDTH  (gameInfo.boardWidth + 2*gameInfo.holdingsWidth)
 #define BOARD_LEFT   (gameInfo.holdingsWidth)  /* [HGM] play-board edges     */
 #define BOARD_RGHT   (gameInfo.boardWidth + gameInfo.holdingsWidth)
 #define CASTLING     (BOARD_RANKS-1)           /* [HGM] hide in upper rank   */
 #define BOARD_LEFT   (gameInfo.holdingsWidth)  /* [HGM] play-board edges     */
 #define BOARD_RGHT   (gameInfo.boardWidth + gameInfo.holdingsWidth)
 #define CASTLING     (BOARD_RANKS-1)           /* [HGM] hide in upper rank   */
+#define VIRGIN       (BOARD_RANKS-2)           /* [HGM] pieces not moved     */
 #define EP_STATUS    CASTLING][(BOARD_FILES-2) /* [HGM] in upper rank        */
 #define HOLDINGS_SET CASTLING][(BOARD_FILES-1) /* [HGM] in upper-right corner*/
 #define ONE          ('1'-(BOARD_HEIGHT>9))    /* [HGM] foremost board rank  */
 #define AAA          ('a'-BOARD_LEFT)          /* [HGM] leftmost board file  */
 #define EP_STATUS    CASTLING][(BOARD_FILES-2) /* [HGM] in upper rank        */
 #define HOLDINGS_SET CASTLING][(BOARD_FILES-1) /* [HGM] in upper-right corner*/
 #define ONE          ('1'-(BOARD_HEIGHT>9))    /* [HGM] foremost board rank  */
 #define AAA          ('a'-BOARD_LEFT)          /* [HGM] leftmost board file  */
+#define VIRGIN_W                 1             /* [HGM] flags in Board[VIRGIN][X] */
+#define VIRGIN_B                 2
 #define DROP_RANK               -3
 #define MAX_MOVES              1000
 #define MSG_SIZ                        512
 #define DROP_RANK               -3
 #define MAX_MOVES              1000
 #define MSG_SIZ                        512
@@ -215,6 +225,14 @@ int pclose(FILE *);
 #define ZIPPY_MAX_GAMES 0
 #define ZIPPY_REPLAY_TIMEOUT 120
 
 #define ZIPPY_MAX_GAMES 0
 #define ZIPPY_REPLAY_TIMEOUT 120
 
+typedef VOIDSTAR ProcRef;
+#define NoProc ((ProcRef) 0)
+typedef VOIDSTAR InputSourceRef;
+
+typedef void (*DelayedEventCallback) P((void));
+
+typedef enum { Press, Release } ClickType;
+
 typedef enum {
     BeginningOfGame, MachinePlaysWhite, MachinePlaysBlack,
     AnalyzeMode, AnalyzeFile, TwoMachinesPlay,
 typedef enum {
     BeginningOfGame, MachinePlaysWhite, MachinePlaysBlack,
     AnalyzeMode, AnalyzeFile, TwoMachinesPlay,
@@ -227,15 +245,15 @@ typedef enum {
     /* [HGM] the order here is crucial for Crazyhouse & Shogi: */
     /* only the first N pieces can go into the holdings, and   */
     /* promotions in those variants shift P-W to U-S           */
     /* [HGM] the order here is crucial for Crazyhouse & Shogi: */
     /* only the first N pieces can go into the holdings, and   */
     /* promotions in those variants shift P-W to U-S           */
-    WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen, 
-    WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan, 
+    WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen,
+    WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan,
     WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,
     WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,
     BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,
     WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,
     WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,
     BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,
-    BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan, 
+    BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan,
     BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
     BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,
     BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
     BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,
-    EmptySquare, 
+    EmptySquare,
     NoRights, // [HGM] gamestate: for castling rights hidden in board[CASTLING]
     ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/
   } ChessSquare;
     NoRights, // [HGM] gamestate: for castling rights hidden in board[CASTLING]
     ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/
   } ChessSquare;
@@ -254,14 +272,14 @@ typedef enum {
     EndOfFile = 0,
     WhiteKingSideCastle, WhiteQueenSideCastle,
     WhiteKingSideCastleWild, WhiteQueenSideCastleWild,
     EndOfFile = 0,
     WhiteKingSideCastle, WhiteQueenSideCastle,
     WhiteKingSideCastleWild, WhiteQueenSideCastleWild,
-    WhiteHSideCastleFR, WhiteASideCastleFR, 
+    WhiteHSideCastleFR, WhiteASideCastleFR,
     BlackKingSideCastle, BlackQueenSideCastle,
     BlackKingSideCastleWild, BlackQueenSideCastleWild,
     BlackKingSideCastle, BlackQueenSideCastle,
     BlackKingSideCastleWild, BlackQueenSideCastleWild,
-    BlackHSideCastleFR, BlackASideCastleFR, 
+    BlackHSideCastleFR, BlackASideCastleFR,
     WhitePromotion, WhiteNonPromotion,
     BlackPromotion, BlackNonPromotion,
     WhiteCapturesEnPassant, BlackCapturesEnPassant,
     WhitePromotion, WhiteNonPromotion,
     BlackPromotion, BlackNonPromotion,
     WhiteCapturesEnPassant, BlackCapturesEnPassant,
-    WhiteDrop, BlackDrop, 
+    WhiteDrop, BlackDrop,
     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
     WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,
     GNUChessGame, XBoardGame, MoveNumberOne, Open, Close, Nothing,
     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
     WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,
     GNUChessGame, XBoardGame, MoveNumberOne, Open, Close, Nothing,
@@ -310,7 +328,7 @@ typedef enum {
     VariantGothic,
     VariantCapablanca,
     VariantKnightmate,
     VariantGothic,
     VariantCapablanca,
     VariantKnightmate,
-    VariantFairy,        
+    VariantFairy,
     VariantCylinder,
     VariantFalcon,
     VariantCapaRandom,
     VariantCylinder,
     VariantFalcon,
     VariantCapaRandom,
@@ -384,6 +402,8 @@ typedef struct {
     char *jailSquareColor;
     char *highlightSquareColor;
     char *premoveHighlightColor;
     char *jailSquareColor;
     char *highlightSquareColor;
     char *premoveHighlightColor;
+    char *dialogColor;
+    char *buttonColor;
 #else
     int whitePieceColor;
     int blackPieceColor;
 #else
     int whitePieceColor;
     int blackPieceColor;
@@ -403,12 +423,15 @@ typedef struct {
     Boolean firstPlaysBlack;
     Boolean noChessProgram;
     char *host[ENGINES];
     Boolean firstPlaysBlack;
     Boolean noChessProgram;
     char *host[ENGINES];
-    char *bitmapDirectory;
+    char *themeNames;
+    char *pieceDirectory;
+    char *border;
     char *soundDirectory;
     char *remoteShell;
     char *remoteUser;
     float timeDelay;
     char *timeControl;
     char *soundDirectory;
     char *remoteShell;
     char *remoteUser;
     float timeDelay;
     char *timeControl;
+    Boolean trueColors;
     Boolean icsActive;
     char *icsHost;
     char *icsPort;
     Boolean icsActive;
     char *icsHost;
     char *icsPort;
@@ -434,6 +457,8 @@ typedef struct {
     Boolean debugMode;
     Boolean clockMode;
     char *boardSize;
     Boolean debugMode;
     Boolean clockMode;
     char *boardSize;
+    char *logoDir;
+    int logoSize;
     Boolean Iconic;
     char *searchTime;
     int searchDepth;
     Boolean Iconic;
     char *searchTime;
     int searchDepth;
@@ -461,15 +486,13 @@ typedef struct {
     Boolean autoComment;
     Boolean getMoveList;
     Boolean testLegality;
     Boolean autoComment;
     Boolean getMoveList;
     Boolean testLegality;
-    int borderXoffset; /* xboard only */
-    int borderYoffset; /* xboard only */
+    Boolean topLevel;      /* xboard, top-level auxiliary windows */
     Boolean titleInWindow; /* xboard only */
     Boolean localLineEditing; /* WinBoard only */
     Boolean zippyTalk;
     Boolean zippyPlay;
     int flashCount; /* Number of times to flash (xboard only) */
     int flashRate; /* Flashes per second (xboard only)  */
     Boolean titleInWindow; /* xboard only */
     Boolean localLineEditing; /* WinBoard only */
     Boolean zippyTalk;
     Boolean zippyPlay;
     int flashCount; /* Number of times to flash (xboard only) */
     int flashRate; /* Flashes per second (xboard only)  */
-    char *pixmapDirectory; /* Path to XPM/XIM files to use (xboard only) */
     int msLoginDelay;  /* Delay per character (in msec) while sending
                          ICS logon script (xboard only) */
     Boolean colorize;  /* If True, use the following colors to color text */
     int msLoginDelay;  /* Delay per character (in msec) while sending
                          ICS logon script (xboard only) */
     Boolean colorize;  /* If True, use the following colors to color text */
@@ -512,12 +535,12 @@ typedef struct {
     Boolean highlightLastMove;
     Boolean highlightDragging;
     Boolean blindfold;          /* if true, no pieces are drawn */
     Boolean highlightLastMove;
     Boolean highlightDragging;
     Boolean blindfold;          /* if true, no pieces are drawn */
-    Boolean premove;           /* true if premove feature enabled */ 
-    Boolean premoveWhite;      /* true if premoving White first move  */ 
-    char *premoveWhiteText;    /* text of White premove 1 */ 
-    Boolean premoveBlack;      /* true if premoving Black first move */ 
-    char *premoveBlackText;    /* text of Black premove 1 */ 
-    Boolean icsAlarm;          /* true if sounding alarm at a certain time */  
+    Boolean premove;           /* true if premove feature enabled */
+    Boolean premoveWhite;      /* true if premoving White first move  */
+    char *premoveWhiteText;    /* text of White premove 1 */
+    Boolean premoveBlack;      /* true if premoving Black first move */
+    char *premoveBlackText;    /* text of Black premove 1 */
+    Boolean icsAlarm;          /* true if sounding alarm at a certain time */
     int icsAlarmTime;          /* time to sound alarm, in milliseconds */
     Boolean autoRaiseBoard;
     int fontSizeTolerance; /* xboard only */
     int icsAlarmTime;          /* time to sound alarm, in milliseconds */
     Boolean autoRaiseBoard;
     int fontSizeTolerance; /* xboard only */
@@ -526,7 +549,7 @@ typedef struct {
     char *chatBoxes;
     int protocolVersion[ENGINES];
     Boolean showButtonBar;
     char *chatBoxes;
     int protocolVersion[ENGINES];
     Boolean showButtonBar;
-    Boolean icsEngineAnalyze; 
+    Boolean icsEngineAnalyze;
     Boolean variations;         /* [HGM] enable variation-tree walking */
 
     /* [AS] New properties (down to the "ZIPPY" part) */
     Boolean variations;         /* [HGM] enable variation-tree walking */
 
     /* [AS] New properties (down to the "ZIPPY" part) */
@@ -535,6 +558,7 @@ typedef struct {
     Boolean hideThinkingFromHuman; /* If true, program thinking is generated but not displayed in human/computer matches */
     Boolean useBitmaps;
     Boolean useFont;
     Boolean hideThinkingFromHuman; /* If true, program thinking is generated but not displayed in human/computer matches */
     Boolean useBitmaps;
     Boolean useFont;
+    Boolean useBorder;
     char * liteBackTextureFile; /* Name of texture bitmap for lite squares */
     char * darkBackTextureFile; /* Name of texture bitmap for dark squares */
     int liteBackTextureMode;
     char * liteBackTextureFile; /* Name of texture bitmap for lite squares */
     char * darkBackTextureFile; /* Name of texture bitmap for dark squares */
     int liteBackTextureMode;
@@ -559,6 +583,8 @@ typedef struct {
     int evalHistColorWhite;
     int evalHistColorBlack;
     Boolean highlightMoveWithArrow;
     int evalHistColorWhite;
     int evalHistColorBlack;
     Boolean highlightMoveWithArrow;
+    Boolean tourney;
+    char * tourneyOptions;
     int highlightArrowColor;
     Boolean useStickyWindows;
     Boolean bgObserve;   /* [HGM] bughouse */
     int highlightArrowColor;
     Boolean useStickyWindows;
     Boolean bgObserve;   /* [HGM] bughouse */
@@ -623,6 +649,7 @@ typedef struct {
     Boolean lowTimeWarning; /* [HGM] low time */
     char *lowTimeWarningColor;
 
     Boolean lowTimeWarning; /* [HGM] low time */
     char *lowTimeWarningColor;
 
+    char *serverFileName;
     char *serverMovesName;
     Boolean suppressLoadMoves;
     int serverPause;
     char *serverMovesName;
     Boolean suppressLoadMoves;
     int serverPause;
@@ -653,6 +680,7 @@ typedef struct {
     char *fenOverride[ENGINES];
     char *features[ENGINES];
     char *featureDefaults;
     char *fenOverride[ENGINES];
     char *features[ENGINES];
     char *featureDefaults;
+    char *sysOpen;
     Boolean keepAlive;  /* [HGM] alive     */
     Boolean forceIllegal;/*[HGM] illegal   */
     Boolean noJoin;     /* [HGM] join      */
     Boolean keepAlive;  /* [HGM] alive     */
     Boolean forceIllegal;/*[HGM] illegal   */
     Boolean noJoin;     /* [HGM] join      */
@@ -664,12 +692,15 @@ typedef struct {
     int evalThreshold;  /* [HGM] evalGraph */
     Boolean dropMenu;   /* [HGM] pv        */
     Boolean markers;    /* [HGM] markers   */
     int evalThreshold;  /* [HGM] evalGraph */
     Boolean dropMenu;   /* [HGM] pv        */
     Boolean markers;    /* [HGM] markers   */
+    Boolean autoCopyPV;
     Boolean pieceMenu;
     Boolean sweepSelect;
     Boolean whitePOV;
     Boolean scoreWhite;
     Boolean pvSAN[ENGINES];
 
     Boolean pieceMenu;
     Boolean sweepSelect;
     Boolean whitePOV;
     Boolean scoreWhite;
     Boolean pvSAN[ENGINES];
 
+    int recentEngines;
+    char *recentEngineList;
     char *tourneyFile;
     char *defName;
     char *processes;
     char *tourneyFile;
     char *defName;
     char *processes;
@@ -682,6 +713,7 @@ typedef struct {
     int seedBase;
     Boolean roundSync;
     Boolean cycleSync;
     int seedBase;
     Boolean roundSync;
     Boolean cycleSync;
+    Boolean numberTag;
 } AppData, *AppDataPtr;
 
 /*  PGN tags (for showing in the game list) */
 } AppData, *AppDataPtr;
 
 /*  PGN tags (for showing in the game list) */
@@ -756,11 +788,18 @@ extern WindowPlacement wpMoveHistory;
 extern WindowPlacement wpGameList;
 extern WindowPlacement wpTags;
 
 extern WindowPlacement wpGameList;
 extern WindowPlacement wpTags;
 
-// [HGM] chat  
+#define MAXENGINES 2000
+
+// [HGM] chat
 #define MAX_CHAT 5
 extern int chatCount;
 extern char chatPartner[MAX_CHAT][MSG_SIZ];
 
 #define MAX_CHAT 5
 extern int chatCount;
 extern char chatPartner[MAX_CHAT][MSG_SIZ];
 
+// Some prototypes of routines so general they should be available everywhere
+/* If status == 0, we are exiting with a benign message, not an error */
+void DisplayFatalError P((String message, int error, int status));
+void DisplayError P((String message, int error));
+
 // [HGM] generally useful macros; there are way too many memory leaks...
 #define FREE(x) if(x) free(x)
 #define ASSIGN(x, y) if(x) free(x); x = strdup(y)
 // [HGM] generally useful macros; there are way too many memory leaks...
 #define FREE(x) if(x) free(x)
 #define ASSIGN(x, y) if(x) free(x); x = strdup(y)