Implement ChuChess
[xboard.git] / common.h
index 05c1180..31be8b3 100644 (file)
--- a/common.h
+++ b/common.h
@@ -5,7 +5,7 @@
  * 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
  *
@@ -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,7 +132,7 @@ 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)
@@ -218,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,
@@ -233,12 +248,20 @@ typedef enum {
     WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen,
     WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan,
     WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,
-    WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,
+    WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteLion,
+    WhiteTokin, WhiteDagger, WhitePCardinal, WhitePDragon, WhiteCat,
+    WhitePSword, WhiteMonarch, WhiteMother, WhiteNothing, WhitePRook, WhitePDagger,
+    WhiteDolphin, WhiteStag, WhiteHorned, WhiteEagle, WhiteSword,
+    WhiteCrown, WhiteHCrown, WhiteHorse, WhiteDrunk, WhitePBishop, WhiteKing,
     BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,
     BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan,
     BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
-    BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,
-    EmptySquare,
+    BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackLion,
+    BlackTokin, BlackDagger, BlackPCardinal, BlackPDragon, BlackCat,
+    BlackPSword, BlackMonarch, BlackMother, BlackNothing, BlackPRook, BlackPDagger,
+    BlackDolphin, BlackStag, BlackHorned, BlackEagle, BlackSword,
+    BlackCrown, BlackHCrown, BlackHorse, BlackDrunk, BlackPBishop, BlackKing,
+    EmptySquare, DarkSquare,
     NoRights, // [HGM] gamestate: for castling rights hidden in board[CASTLING]
     ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/
   } ChessSquare;
@@ -249,6 +272,9 @@ typedef enum {
 #define PROMOTED       (int)WhiteDragon - (int)WhiteRook + (int)
 #define DEMOTED        (int)WhiteRook - (int)WhiteDragon + (int)
 #define SHOGI          (int)EmptySquare + (int)
+#define CHUPROMOTED    ((int)WhitePDragon - (int)WhiteDragon)*(gameInfo.variant == VariantChu) + PROMOTED
+#define IS_SHOGI(V)    ((V) == VariantShogi || (V) == VariantChu)
+#define IS_LION(V)     ((V) == WhiteLion || (V) == BlackLion)
 
 
 typedef ChessSquare Board[BOARD_RANKS][BOARD_FILES];
@@ -264,7 +290,7 @@ typedef enum {
     WhitePromotion, WhiteNonPromotion,
     BlackPromotion, BlackNonPromotion,
     WhiteCapturesEnPassant, BlackCapturesEnPassant,
-    WhiteDrop, BlackDrop,
+    WhiteDrop, BlackDrop, FirstLeg,
     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
     WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,
     GNUChessGame, XBoardGame, MoveNumberOne, Open, Close, Nothing,
@@ -278,7 +304,7 @@ typedef enum {
 } ColorClass;
 
 typedef enum {
-    SoundMove, SoundBell, SoundAlarm, SoundIcsWin, SoundIcsLoss,
+    SoundMove, SoundBell, SoundRoar, SoundAlarm, SoundIcsWin, SoundIcsLoss,
     SoundIcsDraw, SoundIcsUnfinished, NSoundClasses
 } SoundClass;
 
@@ -308,6 +334,7 @@ typedef enum {
     Variant35,           /* Temporary name for possible future ICC wild 35 */
     Variant36,           /* Temporary name for possible future ICC wild 36 */
     VariantShogi,        /* [HGM] added variants */
+    VariantChu,
     VariantXiangqi,
     VariantCourier,
     VariantGothic,
@@ -323,9 +350,12 @@ typedef enum {
     VariantGreat,
     VariantTwilight,
     VariantMakruk,
+    VariantASEAN,
     VariantSChess,
     VariantGrand,
     VariantSpartan,
+    VariantLion,
+    VariantChuChess,
     VariantUnknown       /* Catchall for other unknown variants */
 } VariantClass;
 
@@ -354,6 +384,7 @@ typedef enum {
   "wild35", \
   "wild36", \
   "shogi", \
+  "chu", \
   "xiangqi", \
   "courier", \
   "gothic", \
@@ -369,9 +400,12 @@ typedef enum {
   "great",\
   "twilight",\
   "makruk",\
+  "asean",\
   "seirawan",\
   "grand",\
   "spartan",\
+  "lion",\
+  "chuchess",\
   "unknown" \
 }
 
@@ -408,13 +442,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 */
@@ -430,6 +468,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;
@@ -465,6 +504,7 @@ typedef struct {
     Boolean ponderNextMove;
     Boolean periodicUpdates;
     Boolean autoObserve;
+    Boolean autoCreateLogon;
     Boolean autoComment;
     Boolean getMoveList;
     Boolean testLegality;
@@ -475,7 +515,6 @@ typedef struct {
     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 */
@@ -502,6 +541,7 @@ typedef struct {
     char *soundSeek;
     char *soundMove;     // [HGM] IMPORTANT: order must be as in SoundClass
     char *soundBell;
+    char *soundRoar;
     char *soundIcsAlarm;
     char *soundIcsWin;
     char *soundIcsLoss;
@@ -534,6 +574,7 @@ typedef struct {
     Boolean showButtonBar;
     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 */
@@ -541,6 +582,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;
@@ -565,6 +607,8 @@ typedef struct {
     int evalHistColorWhite;
     int evalHistColorBlack;
     Boolean highlightMoveWithArrow;
+    Boolean tourney;
+    char * tourneyOptions;
     int highlightArrowColor;
     Boolean useStickyWindows;
     Boolean bgObserve;   /* [HGM] bughouse */
@@ -627,10 +671,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];
@@ -775,6 +821,11 @@ extern WindowPlacement wpTags;
 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)
@@ -816,4 +867,3 @@ extern char chatPartner[MAX_CHAT][MSG_SIZ];
 #define secondOptions     engOptions[1]
 
 #endif
-