Implement (inaccessible) dark squares
[xboard.git] / common.h
index 9e1c3dd..65eaa9c 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,
- * Massachusetts. 
+ * Massachusetts.
  *
  * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
- * 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
  *
  * Enhancements Copyright 2005 Alessandro Scotti
  *
@@ -51,8 +51,8 @@
  *------------------------------------------------------------------------
  ** See the file ChangeLog for a revision history.  */
 
-#ifndef _COMMON
-#define _COMMON
+#ifndef XB_COMMON
+#define XB_COMMON
 
 
 /* Begin compatibility grunge  */
@@ -81,7 +81,14 @@ int pclose(FILE *);
 #endif
 
 #else
+#ifdef X11
 #include <X11/Intrinsic.h>
+#else
+typedef char Boolean;
+typedef char *String;
+#define True 1
+#define False 0
+#endif
 #endif
 #endif
 
@@ -125,17 +132,20 @@ int pclose(FILE *);
    outside world in ASCII. In a similar way, the different rank numbering
    systems (starting at rank 0 or 1) are implemented by redefining '1'.
 */
-#define BOARD_RANKS             11             /* [HGM] for in declarations  */
+#define BOARD_RANKS             17            /* [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 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 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
@@ -215,6 +225,14 @@ int pclose(FILE *);
 #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,
@@ -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           */
-    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,
-    BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan, 
+    BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan,
     BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
     BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,
-    EmptySquare, 
+    EmptySquare, DarkSquare,
     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,
-    WhiteHSideCastleFR, WhiteASideCastleFR, 
+    WhiteHSideCastleFR, WhiteASideCastleFR,
     BlackKingSideCastle, BlackQueenSideCastle,
     BlackKingSideCastleWild, BlackQueenSideCastleWild,
-    BlackHSideCastleFR, BlackASideCastleFR, 
+    BlackHSideCastleFR, BlackASideCastleFR,
     WhitePromotion, WhiteNonPromotion,
     BlackPromotion, BlackNonPromotion,
     WhiteCapturesEnPassant, BlackCapturesEnPassant,
-    WhiteDrop, BlackDrop, 
+    WhiteDrop, BlackDrop,
     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
     WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,
     GNUChessGame, XBoardGame, MoveNumberOne, Open, Close, Nothing,
@@ -310,7 +328,7 @@ typedef enum {
     VariantGothic,
     VariantCapablanca,
     VariantKnightmate,
-    VariantFairy,        
+    VariantFairy,
     VariantCylinder,
     VariantFalcon,
     VariantCapaRandom,
@@ -320,6 +338,7 @@ typedef enum {
     VariantGreat,
     VariantTwilight,
     VariantMakruk,
+    VariantASEAN,
     VariantSChess,
     VariantGrand,
     VariantSpartan,
@@ -366,6 +385,7 @@ typedef enum {
   "great",\
   "twilight",\
   "makruk",\
+  "asean",\
   "seirawan",\
   "grand",\
   "spartan",\
@@ -384,6 +404,8 @@ typedef struct {
     char *jailSquareColor;
     char *highlightSquareColor;
     char *premoveHighlightColor;
+    char *dialogColor;
+    char *buttonColor;
 #else
     int whitePieceColor;
     int blackPieceColor;
@@ -403,13 +425,17 @@ typedef struct {
     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;
+    Boolean trueColors;
     Boolean icsActive;
+    Boolean autoBox;
     char *icsHost;
     char *icsPort;
     char *icsCommPort;  /* if set, use serial port instead of tcp host/port */
@@ -425,6 +451,7 @@ typedef struct {
     int loadGameIndex;      /* game # within file */
     char *saveGameFile;
     Boolean autoSaveGames;
+    Boolean onlyOwn;        /* [HGM] suppress auto-saving of observed games */
     char *loadPositionFile;
     int loadPositionIndex;  /* position # within file */
     char *savePositionFile;
@@ -434,6 +461,8 @@ typedef struct {
     Boolean debugMode;
     Boolean clockMode;
     char *boardSize;
+    char *logoDir;
+    int logoSize;
     Boolean Iconic;
     char *searchTime;
     int searchDepth;
@@ -458,18 +487,17 @@ typedef struct {
     Boolean ponderNextMove;
     Boolean periodicUpdates;
     Boolean autoObserve;
+    Boolean autoCreateLogon;
     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)  */
-    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 */
@@ -512,12 +540,12 @@ typedef struct {
     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 */
@@ -526,8 +554,9 @@ typedef struct {
     char *chatBoxes;
     int protocolVersion[ENGINES];
     Boolean showButtonBar;
-    Boolean icsEngineAnalyze; 
+    Boolean icsEngineAnalyze;
     Boolean variations;         /* [HGM] enable variation-tree walking */
+    Boolean autoExtend;         /* [HGM] enable playing move(s) of right-clicked PV in analysis mode */
 
     /* [AS] New properties (down to the "ZIPPY" part) */
     Boolean scoreIsAbsolute[ENGINES];  /* If true, engine score is always from white side */
@@ -535,6 +564,7 @@ typedef struct {
     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;
@@ -559,6 +589,8 @@ typedef struct {
     int evalHistColorWhite;
     int evalHistColorBlack;
     Boolean highlightMoveWithArrow;
+    Boolean tourney;
+    char * tourneyOptions;
     int highlightArrowColor;
     Boolean useStickyWindows;
     Boolean bgObserve;   /* [HGM] bughouse */
@@ -621,9 +653,12 @@ typedef struct {
     int zippyShortGame; /* [HGM] aborter   */
 #endif
     Boolean lowTimeWarning; /* [HGM] low time */
+    Boolean quitNext;
     char *lowTimeWarningColor;
 
+    char *serverFileName;
     char *serverMovesName;
+    char *finger;
     Boolean suppressLoadMoves;
     int serverPause;
     int timeOdds[ENGINES];
@@ -653,6 +688,7 @@ typedef struct {
     char *fenOverride[ENGINES];
     char *features[ENGINES];
     char *featureDefaults;
+    char *sysOpen;
     Boolean keepAlive;  /* [HGM] alive     */
     Boolean forceIllegal;/*[HGM] illegal   */
     Boolean noJoin;     /* [HGM] join      */
@@ -762,11 +798,16 @@ extern WindowPlacement wpTags;
 
 #define MAXENGINES 2000
 
-// [HGM] chat  
+// [HGM] chat
 #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)
@@ -808,4 +849,3 @@ extern char chatPartner[MAX_CHAT][MSG_SIZ];
 #define secondOptions     engOptions[1]
 
 #endif
-