* 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 Free Software Foundation, Inc.
+ * 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
*
* Enhancements Copyright 2005 Alessandro Scotti
*
*------------------------------------------------------------------------
** See the file ChangeLog for a revision history. */
-#ifndef _COMMON
-#define _COMMON
+#ifndef XB_COMMON
+#define XB_COMMON
/* Begin compatibility grunge */
#endif
#else
+#ifdef X11
#include <X11/Intrinsic.h>
+#else
+typedef char Boolean;
+typedef char *String;
+#define True 1
+#define False 0
+#endif
#endif
#endif
// [HGM] license: Messages that engines must print to satisfy their license requirements for patented variants
#define GOTHIC "Gothic Chess (see www.GothicChess.com) is licensed under U.S. Patent #6,481,716 by Ed Trice"
-#define NOFALCON "Falcon Chess (see www.chessvariants.com) is licensed under U.S. Patent #5,690,334 by George W. Duke"
+#define FALCON "Falcon Chess (see www.chessvariants.com) is licensed under U.S. Patent #5,690,334 by George W. Duke"
/* [HGM] Some notes about board sizes:
In games that allow piece drops, the holdings are considered part of the
#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 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
#define FIRST_HOST "localhost"
#define SECOND_HOST "localhost"
#define TELNET_PROGRAM "telnet"
-#define DEF_BITMAP_DIR "/usr/share/games/xboard/bitmaps.xchess" /* AP: shouldn't be hardcoded directory, but better than nothing at the moment */
+#define DEF_BITMAP_DIR BITMAPDIR
#define MATCH_MODE "False"
#define INIT_STRING "new\nrandom\n"
#define WHITE_STRING "white\ngo\n"
#define COMMENT_FONT 4
#define EDITTAGS_FONT 5
#define MOVEHISTORY_FONT 6
-#define NUM_FONTS 7
+#define GAMELIST_FONT 7
+#define NUM_FONTS 8
/* Default to no flashing (the "usual" XBoard behavior) */
#define FLASH_COUNT 0 /* Number of times to flash */
#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,
/* [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,
NoRights, // [HGM] gamestate: for castling rights hidden in board[CASTLING]
ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/
} ChessSquare;
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,
VariantGothic,
VariantCapablanca,
VariantKnightmate,
- VariantFairy,
+ VariantFairy,
VariantCylinder,
VariantFalcon,
VariantCapaRandom,
VariantGreat,
VariantTwilight,
VariantMakruk,
+ VariantSChess,
+ VariantGrand,
+ VariantSpartan,
VariantUnknown /* Catchall for other unknown variants */
} VariantClass;
"great",\
"twilight",\
"makruk",\
+ "seirawan",\
+ "grand",\
+ "spartan",\
"unknown" \
}
+#define ENGINES 2
+
typedef struct {
char *language;
#if !defined(_amigados)
char *jailSquareColor;
char *highlightSquareColor;
char *premoveHighlightColor;
+ char *dialogColor;
+ char *buttonColor;
#else
int whitePieceColor;
int blackPieceColor;
#endif
int movesPerSession;
float timeIncrement;
- char *initString;
- char *secondInitString;
- char *firstComputerString;
- char *secondComputerString;
- char *firstChessProgram;
- char *secondChessProgram;
- char *firstDirectory;
- char *secondDirectory;
+ char *engInitString[ENGINES];
+ char *computerString[ENGINES];
+ char *chessProgram[ENGINES];
+ char *directory[ENGINES];
+ char *pgnName[ENGINES];
Boolean firstPlaysBlack;
Boolean noChessProgram;
- char *firstHost;
- char *secondHost;
- char *bitmapDirectory;
+ char *host[ENGINES];
+ 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 */
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;
Boolean debugMode;
Boolean clockMode;
char *boardSize;
+ char *logoDir;
+ int logoSize;
Boolean Iconic;
char *searchTime;
int searchDepth;
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 */
char *soundIcsDraw;
char *soundIcsUnfinished;
Boolean disguise; /* [HGM] Promoted Pawns look like pieces in bughouse */
- Boolean reuseFirst;
- Boolean reuseSecond;
+ Boolean reuse[ENGINES];
Boolean animateDragging; /* If True, animate mouse dragging of pieces */
Boolean animate; /* If True, animate non-mouse moves */
int animSpeed; /* Delay in milliseconds between animation frames */
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 */
char *initialMode;
char *variant;
char *chatBoxes;
- int firstProtocolVersion;
- int secondProtocolVersion;
+ 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 firstScoreIsAbsolute; /* If true, engine score is always from white side */
- Boolean secondScoreIsAbsolute; /* If true, engine score is always from white side */
+ Boolean scoreIsAbsolute[ENGINES]; /* If true, engine score is always from white side */
Boolean saveExtendedInfoInPGN; /* If true, saved PGN games contain extended info */
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;
int evalHistColorWhite;
int evalHistColorBlack;
Boolean highlightMoveWithArrow;
+ Boolean tourney;
+ char * tourneyOptions;
int highlightArrowColor;
Boolean useStickyWindows;
Boolean bgObserve; /* [HGM] bughouse */
Boolean dualBoard; /* [HGM] dual */
+ Boolean viewer;
+ char * viewerOptions;
int adjudicateDrawMoves;
Boolean autoDisplayComment;
Boolean autoDisplayTags;
- Boolean firstIsUCI;
- Boolean secondIsUCI;
- Boolean firstHasOwnBookUCI;
- Boolean secondHasOwnBookUCI;
+ Boolean isUCI[ENGINES];
+ Boolean hasOwnBookUCI[ENGINES];
char * adapterCommand;
+ char * ucciAdapter;
char * polyglotDir;
Boolean usePolyglotBook;
+ Boolean defNoBook;
char * polyglotBook;
int bookDepth;
int bookStrength;
Boolean lowTimeWarning; /* [HGM] low time */
char *lowTimeWarningColor;
+ char *serverFileName;
char *serverMovesName;
Boolean suppressLoadMoves;
int serverPause;
- int firstTimeOdds;
- int secondTimeOdds;
+ int timeOdds[ENGINES];
int timeOddsMode;
- int firstAccumulateTC;
- int secondAccumulateTC;
- int firstNPS;
- int secondNPS;
+ int accumulateTC[ENGINES];
+ int NPS[ENGINES];
Boolean autoKibitz;
int engineComments;
+ int eloThreshold1; /* [HGM] select */
+ int eloThreshold2;
+ int dateThreshold;
+ int searchMode;
+ int stretch;
+ Boolean ignoreColors;
+ Boolean findMirror;
char *userName;
int rewindIndex; /* [HGM] autoinc */
int sameColorGames; /* [HGM] alternate */
int smpCores; /* [HGM] SMP */
char *egtFormats;
int niceEngines; /* [HGM] nice */
- char *firstLogo; /* [HGM] logo */
- char *secondLogo;
+ char *logo[ENGINES];/* [HGM] logo */
+ char *pairingEngine;/* [HGM] pairing */
Boolean autoLogo;
Boolean noGUI; /* [HGM] fast: suppress all display updates */
- char *firstOptions; /* [HGM] options */
- char *secondOptions;
- char *fenOverride1;
- char *fenOverride2;
+ char *engOptions[ENGINES]; /* [HGM] options */
+ char *fenOverride[ENGINES];
+ char *features[ENGINES];
+ char *featureDefaults;
+ char *sysOpen;
Boolean keepAlive; /* [HGM] alive */
Boolean forceIllegal;/*[HGM] illegal */
Boolean noJoin; /* [HGM] join */
Boolean useInternalWrap; /* use internal wrapping -- noJoin usurps this if set */
Boolean pasteSelection; /* paste X selection instead of clipboard */
int nrVariations; /* [HGM] multivar */
+ int zoom; /* [HGM] evalGraph */
+ 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];
+
+ int recentEngines;
+ char *recentEngineList;
+ char *tourneyFile;
+ char *defName;
+ char *processes;
+ char *results;
+ char *participants;
+ char *afterGame;
+ char *afterTourney;
+ int tourneyType;
+ int tourneyCycles;
+ int seedBase;
+ Boolean roundSync;
+ Boolean cycleSync;
+ Boolean numberTag;
} AppData, *AppDataPtr;
/* PGN tags (for showing in the game list) */
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];
+// 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] for now we use the kludge to redefine all the unstructured options by their array counterpart
+// in due time we would have to make the actual substitutions all through the source
+
+#define firstInitString engInitString[0]
+#define secondInitString engInitString[1]
+#define firstComputerString computerString[0]
+#define secondComputerString computerString[1]
+#define firstChessProgram chessProgram[0]
+#define secondChessProgram chessProgram[1]
+#define firstDirectory directory[0]
+#define secondDirectory directory[1]
+#define firstProtocolVersion protocolVersion[0]
+#define secondProtocolVersion protocolVersion[1]
+#define firstScoreIsAbsolute scoreIsAbsolute[0]
+#define secondScoreIsAbsolute scoreIsAbsolute[1]
+#define firstHasOwnBookUCI hasOwnBookUCI[0]
+#define secondHasOwnBookUCI hasOwnBookUCI[1]
+#define firstTimeOdds timeOdds[0]
+#define secondTimeOdds timeOdds[1]
+#define firstAccumulateTC accumulateTC[0]
+#define secondAccumulateTC accumulateTC[1]
+#define firstHost host[0]
+#define secondHost host[1]
+#define reuseFirst reuse[0]
+#define reuseSecond reuse[1]
+#define firstIsUCI isUCI[0]
+#define secondIsUCI isUCI[1]
+#define firstNPS NPS[0]
+#define secondNPS NPS[1]
+#define firstLogo logo[0]
+#define secondLogo logo[1]
+#define fenOverride1 fenOverride[0]
+#define fenOverride2 fenOverride[1]
+#define firstOptions engOptions[0]
+#define secondOptions engOptions[1]
#endif
-