-/*\r
- * common.h -- Common definitions for X and Windows NT versions of XBoard\r
- * $Id: common.h,v 2.1 2003/10/27 19:21:00 mann Exp $\r
- *\r
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.\r
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.\r
- *\r
- * The following terms apply to Digital Equipment Corporation's copyright\r
- * interest in XBoard:\r
- * ------------------------------------------------------------------------\r
- * All Rights Reserved\r
- *\r
- * Permission to use, copy, modify, and distribute this software and its\r
- * documentation for any purpose and without fee is hereby granted,\r
- * provided that the above copyright notice appear in all copies and that\r
- * both that copyright notice and this permission notice appear in\r
- * supporting documentation, and that the name of Digital not be\r
- * used in advertising or publicity pertaining to distribution of the\r
- * software without specific, written prior permission.\r
- *\r
- * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING\r
- * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL\r
- * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR\r
- * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\r
- * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,\r
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS\r
- * SOFTWARE.\r
- * ------------------------------------------------------------------------\r
- *\r
- * The following terms apply to the enhanced version of XBoard distributed\r
- * by the Free Software Foundation:\r
- * ------------------------------------------------------------------------\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License\r
- * along with this program; if not, write to the Free Software\r
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
- * ------------------------------------------------------------------------\r
- */\r
-\r
-#ifndef _COMMON\r
-#define _COMMON\r
-\r
-\r
-/* Begin compatibility grunge */\r
-\r
-#if defined(__STDC__) || defined(WIN32) || defined(_amigados)\r
-#define P(args) args\r
-typedef void *VOIDSTAR;\r
-#else\r
-#define P(args) ()\r
-typedef char *VOIDSTAR;\r
-#endif\r
-\r
-#ifdef WIN32\r
-typedef char Boolean;\r
-typedef char *String;\r
-#define popen _popen\r
-#define pclose _pclose\r
-\r
-#else\r
-#ifdef _amigados /* It is important, that these types have */\r
-typedef int Boolean; /* a length of 4 bytes each, as we are */\r
-typedef char *String; /* using ReadArgs() for argument parsing. */\r
-#ifdef _DCC\r
-FILE *popen(const char *, const char *);\r
-int pclose(FILE *);\r
-#endif\r
-\r
-#else\r
-#include <X11/Intrinsic.h>\r
-#endif\r
-#endif\r
-\r
-\r
-#ifndef TRUE\r
-#define TRUE 1\r
-#define FALSE 0\r
-#endif\r
-\r
-#if !HAVE_RANDOM\r
-# if HAVE_RAND48\r
-# define srandom srand48\r
-# define random lrand48\r
-# else /* not HAVE_RAND48 */\r
-# define srandom srand\r
-# define random rand\r
-# endif /* not HAVE_RAND48 */\r
-#endif /* !HAVE_RANDOM */\r
-\r
-/* End compatibility grunge */\r
-\r
-#define PROTOVER 2 /* engine protocol version */\r
-\r
-/* [HGM] Some notes about board sizes:\r
- In games that allow piece drops, the holdings are considered part of the\r
- board, in the leftmost and rightmost two files. This way they are\r
- automatically part of the game-history states, and enjoy all display\r
- functions (including drag-drop and click-click moves to the regular part\r
- of the board). The drawback of this is that the internal numbering of\r
- files starts at 2 for the a-file if holdings are displayed. To ensure\r
- consistency, this shifted numbering system is used _everywhere_ in the\r
- code, and conversion to the 'normal' system only takes place when the\r
- file number is converted to or from ASCII (by redefining the character\r
- constant 'a'). This works because Winboard only communicates with the\r
- outside world in ASCII. In a similar way, the different rank numbering\r
- systems (starting at rank 0 or 1) are implemented by redefining '1'.\r
-*/\r
-#define BOARD_SIZE 16 /* [HGM] for in declarations */\r
-#define BOARD_HEIGHT (gameInfo.boardHeight) // [HGM] made user adjustable \r
-#define BOARD_WIDTH (gameInfo.boardWidth + 2*gameInfo.holdingsWidth) \r
-#define BOARD_LEFT (gameInfo.holdingsWidth) // [HGM] play-board edges \r
-#define BOARD_RGHT (gameInfo.boardWidth + gameInfo.holdingsWidth)\r
-#define ONE ('1'-(BOARD_HEIGHT>9)) // [HGM] foremost board rank \r
-#define AAA ('a'-BOARD_LEFT) // [HGM] leftmost board file \r
-#define DROP_RANK -3\r
-#define MAX_MOVES 1000\r
-#define MSG_SIZ 512\r
-#define DIALOG_SIZE 256\r
-#define STAR_MATCH_N 16\r
-#define MOVE_LEN 32\r
-#define TIME_CONTROL "5" /* in minutes */\r
-#define TIME_DELAY_QUOTE "1.0" /* seconds between moves */\r
-#define TIME_DELAY ((float) 1.0)\r
-#define MOVES_PER_SESSION 40 /* moves per TIME_CONTROL */\r
-#define TIME_INCREMENT -1 /* if >= 0, MOVES_PER_SESSION unused */\r
-#define WhiteOnMove(move) (((move) % 2) == 0)\r
-#define ICS_HOST "chessclub.com"\r
-#define ICS_PORT "5000"\r
-#define ICS_COMM_PORT ""\r
-#define FIRST_HOST "localhost"\r
-#define SECOND_HOST "localhost"\r
-#define TELNET_PROGRAM "telnet"\r
-#define MATCH_MODE "False"\r
-#define INIT_STRING "new\nrandom\n"\r
-#define WHITE_STRING "white\ngo\n"\r
-#define BLACK_STRING "black\ngo\n"\r
-#define COMPUTER_STRING "computer\n"\r
-#define REUSE_CHESS_PROGRAMS 1\r
-#define WHITE_PIECE_COLOR "#FFFFCC"\r
-#define BLACK_PIECE_COLOR "#202020"\r
-#define LIGHT_SQUARE_COLOR "#C8C365"\r
-#define DARK_SQUARE_COLOR "#77A26D"\r
-#define JAIL_SQUARE_COLOR "#808080"\r
-#define HIGHLIGHT_SQUARE_COLOR "#FFFF00"\r
-#define PREMOVE_HIGHLIGHT_COLOR "#FF0000"\r
-#define BELLCHAR '\007'\r
-#define NULLCHAR '\000'\r
-#define FEATURE_TIMEOUT 10000 /*ms*/\r
-\r
-/* Zippy defaults */\r
-#define ZIPPY_TALK FALSE\r
-#define ZIPPY_PLAY FALSE\r
-#define ZIPPY_LINES "yow.lines"\r
-#define ZIPPY_PINHEAD ""\r
-#define ZIPPY_PASSWORD ""\r
-#define ZIPPY_PASSWORD2 ""\r
-#define ZIPPY_WRONG_PASSWORD ""\r
-#define ZIPPY_ACCEPT_ONLY ""\r
-#define ZIPPY_USE_I TRUE\r
-#define ZIPPY_BUGHOUSE 0\r
-#define ZIPPY_NOPLAY_CRAFTY FALSE\r
-#define ZIPPY_GAME_END "gameend\n"\r
-#define ZIPPY_GAME_START ""\r
-#define ZIPPY_ADJOURN FALSE\r
-#define ZIPPY_ABORT FALSE\r
-#define ZIPPY_VARIANTS "normal,fischerandom,crazyhouse,losers,suicide,3checks,twokings,bughouse,shatranj"\r
-#define ZIPPY_MAX_GAMES 0\r
-#define ZIPPY_REPLAY_TIMEOUT 120\r
-\r
-typedef enum {\r
- BeginningOfGame, MachinePlaysWhite, MachinePlaysBlack,\r
- AnalyzeMode, AnalyzeFile, TwoMachinesPlay,\r
- EditGame, PlayFromGameFile, EndOfGame, EditPosition, Training,\r
- IcsIdle, IcsPlayingWhite, IcsPlayingBlack, IcsObserving,\r
- IcsExamining\r
- } GameMode;\r
-\r
-typedef enum {\r
- /* [HGM] the order here is crucial for Crazyhouse & Shogi: */\r
- /* only the first N pieces can go into the holdings, and */\r
- /* promotions in those variants shift P-W to U-S */\r
- WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen, \r
- WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan, \r
- WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,\r
- WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,\r
- BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,\r
- BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan, \r
- BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,\r
- BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,\r
- EmptySquare, \r
- ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/\r
- } ChessSquare;\r
-\r
-/* [HGM] some macros that can be used as prefixes to convert piece types */\r
-#define WHITE_TO_BLACK (int)BlackPawn - (int)WhitePawn + (int)\r
-#define BLACK_TO_WHITE (int)WhitePawn - (int)BlackPawn + (int)\r
-#define PROMOTED (int)WhiteDragon - (int)WhiteRook + (int)\r
-#define DEMOTED (int)WhiteRook - (int)WhiteDragon + (int)\r
-#define SHOGI (int)EmptySquare + (int)\r
-\r
-\r
-typedef ChessSquare Board[BOARD_SIZE][BOARD_SIZE];\r
-\r
-typedef enum {\r
- WhiteKingSideCastle = 1, WhiteQueenSideCastle,\r
- WhiteKingSideCastleWild, WhiteQueenSideCastleWild,\r
- WhiteHSideCastleFR, WhiteASideCastleFR, \r
- BlackKingSideCastle, BlackQueenSideCastle,\r
- BlackKingSideCastleWild, BlackQueenSideCastleWild,\r
- BlackHSideCastleFR, BlackASideCastleFR, \r
- WhitePromotionKnight, WhitePromotionBishop,\r
- WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing,\r
- WhitePromotionChancellor, WhitePromotionArchbishop,\r
- BlackPromotionKnight, BlackPromotionBishop,\r
- BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing,\r
- BlackPromotionChancellor, BlackPromotionArchbishop,\r
- WhiteCapturesEnPassant, BlackCapturesEnPassant,\r
- WhiteDrop, BlackDrop, \r
- NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,\r
- WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,\r
- GNUChessGame, XBoardGame, MoveNumberOne, \r
- Comment, PositionDiagram, ElapsedTime, PGNTag, NAG\r
- } ChessMove;\r
-\r
-typedef enum {\r
- ColorShout, ColorSShout, ColorChannel1, ColorChannel, ColorKibitz,\r
- ColorTell, ColorChallenge, ColorRequest, ColorSeek, ColorNormal,\r
- ColorNone, NColorClasses\r
-} ColorClass;\r
-\r
-typedef enum {\r
- SoundMove, SoundBell, SoundAlarm, SoundIcsWin, SoundIcsLoss,\r
- SoundIcsDraw, SoundIcsUnfinished, NSoundClasses\r
-} SoundClass;\r
-\r
-/* Names for chess variants, not necessarily supported */\r
-typedef enum {\r
- VariantNormal, /* Normal chess */\r
- VariantLoadable, /* "loadgame" command allowed (not really a variant)*/\r
- VariantWildCastle, /* Shuffle chess where king can castle from d file */\r
- VariantNoCastle, /* Shuffle chess with no castling at all */\r
- VariantFischeRandom, /* FischeRandom */\r
- VariantBughouse, /* Bughouse, ICC/FICS rules */\r
- VariantCrazyhouse, /* Crazyhouse, ICC/FICS rules */\r
- VariantLosers, /* Try to lose all pieces or get mated (ICC wild 17)*/\r
- VariantSuicide, /* Try to lose all pieces incl. king (FICS) */\r
- VariantGiveaway, /* Try to have no legal moves left (ICC wild 26) */\r
- VariantTwoKings, /* Weird ICC wild 9 */\r
- VariantKriegspiel, /* Kriegspiel; pawns can capture invisible pieces */\r
- VariantAtomic, /* Capturing piece explodes (ICC wild 27) */\r
- Variant3Check, /* Win by giving check 3 times (ICC wild 25) */\r
- VariantShatranj, /* Unsupported (ICC wild 28) */\r
- Variant29, /* Temporary name for possible future ICC wild 29 */\r
- Variant30, /* Temporary name for possible future ICC wild 30 */\r
- Variant31, /* Temporary name for possible future ICC wild 31 */\r
- Variant32, /* Temporary name for possible future ICC wild 32 */\r
- Variant33, /* Temporary name for possible future ICC wild 33 */\r
- Variant34, /* Temporary name for possible future ICC wild 34 */\r
- Variant35, /* Temporary name for possible future ICC wild 35 */\r
- Variant36, /* Temporary name for possible future ICC wild 36 */\r
- VariantShogi, /* [HGM] added variants */\r
- VariantXiangqi,\r
- VariantCourier,\r
- VariantGothic,\r
- VariantCapablanca,\r
- VariantKnightmate,\r
- VariantFairy, \r
- VariantCylinder,\r
- VariantFalcon,\r
- VariantUnknown /* Catchall for other unknown variants */\r
-} VariantClass;\r
-\r
-#define VARIANT_NAMES { \\r
- "normal", \\r
- "normal", \\r
- "wildcastle", \\r
- "nocastle", \\r
- "fischerandom", \\r
- "bughouse", \\r
- "crazyhouse", \\r
- "losers", \\r
- "suicide", \\r
- "giveaway", \\r
- "twokings", \\r
- "kriegspiel", \\r
- "atomic", \\r
- "3check", \\r
- "shatranj", \\r
- "wild29", \\r
- "wild30", \\r
- "wild31", \\r
- "wild32", \\r
- "wild33", \\r
- "wild34", \\r
- "wild35", \\r
- "wild36", \\r
- "shogi", \\r
- "xiangqi", \\r
- "courier", \\r
- "gothic", \\r
- "capablanca", \\r
- "knightmate", \\r
- "fairy", \\r
- "cylinder", \\r
- "falcon",\\r
- "unknown" \\r
-}\r
-\r
-typedef struct {\r
-#if !defined(_amigados)\r
- char *whitePieceColor;\r
- char *blackPieceColor;\r
- char *lightSquareColor;\r
- char *darkSquareColor;\r
- char *jailSquareColor;\r
- char *highlightSquareColor;\r
- char *premoveHighlightColor;\r
-#else\r
- int whitePieceColor;\r
- int blackPieceColor;\r
- int lightSquareColor;\r
- int darkSquareColor;\r
- int jailSquareColor;\r
- int highlightSquareColor;\r
- int premoveHighlightColor;\r
-#endif\r
- int movesPerSession;\r
- int timeIncrement;\r
- char *initString;\r
- char *secondInitString;\r
- char *firstComputerString;\r
- char *secondComputerString;\r
- char *firstChessProgram;\r
- char *secondChessProgram;\r
- char *firstDirectory;\r
- char *secondDirectory;\r
- Boolean firstPlaysBlack;\r
- Boolean noChessProgram;\r
- char *firstHost;\r
- char *secondHost;\r
- char *bitmapDirectory;\r
- char *remoteShell;\r
- char *remoteUser;\r
- float timeDelay;\r
- char *timeControl;\r
- Boolean icsActive;\r
- char *icsHost;\r
- char *icsPort;\r
- char *icsCommPort; /* if set, use serial port instead of tcp host/port */\r
- char *icsLogon; /* Hack to permit variable logon scripts. */\r
- char *icsHelper;\r
- Boolean icsInputBox;\r
- Boolean useTelnet;\r
- char *telnetProgram;\r
- char *gateway;\r
- char *loadGameFile;\r
- int loadGameIndex; /* game # within file */\r
- char *saveGameFile;\r
- Boolean autoSaveGames;\r
- char *loadPositionFile;\r
- int loadPositionIndex; /* position # within file */\r
- char *savePositionFile;\r
- Boolean matchMode;\r
- int matchGames;\r
- Boolean monoMode;\r
- Boolean debugMode;\r
- Boolean clockMode;\r
- char *boardSize;\r
- Boolean Iconic;\r
- char *searchTime;\r
- int searchDepth;\r
- Boolean showCoords;\r
- char *clockFont;\r
- char *messageFont; /* WinBoard only */\r
- char *coordFont;\r
- char *font; /* xboard only: all other fonts */\r
- char *tagsFont; /* WinBoard only */\r
- char *commentFont; /* WinBoard only */\r
- char *icsFont; /* WinBoard only */\r
- Boolean ringBellAfterMoves;\r
- Boolean autoCallFlag;\r
- Boolean flipView;\r
- Boolean autoFlipView;\r
- char *cmailGameName; /* xboard only */\r
- Boolean alwaysPromoteToQueen;\r
- Boolean oldSaveStyle;\r
- Boolean quietPlay;\r
- Boolean showThinking;\r
- Boolean ponderNextMove;\r
- Boolean periodicUpdates;\r
- Boolean autoObserve;\r
- Boolean autoComment;\r
- Boolean getMoveList;\r
- Boolean testLegality;\r
- int borderXoffset; /* xboard only */\r
- int borderYoffset; /* xboard only */\r
- Boolean titleInWindow; /* xboard only */\r
- Boolean localLineEditing; /* WinBoard only */\r
- Boolean zippyTalk;\r
- Boolean zippyPlay;\r
- int flashCount; /* Number of times to flash (xboard only) */\r
- int flashRate; /* Flashes per second (xboard only) */\r
- char *pixmapDirectory; /* Path to XPM/XIM files to use (xboard only) */\r
- int msLoginDelay; /* Delay per character (in msec) while sending\r
- ICS logon script (xboard only) */\r
- Boolean colorize; /* If True, use the following colors to color text */\r
- /* Strings for colors, as "fg, bg, bold" (strings used in xboard only) */\r
- char *colorShout;\r
- char *colorSShout;\r
- char *colorChannel1;\r
- char *colorChannel;\r
- char *colorKibitz;\r
- char *colorTell;\r
- char *colorChallenge;\r
- char *colorRequest;\r
- char *colorSeek;\r
- char *colorNormal;\r
- char *soundProgram; /* sound-playing program */\r
- char *soundShout;\r
- char *soundSShout;\r
- char *soundChannel1;\r
- char *soundChannel;\r
- char *soundKibitz;\r
- char *soundTell;\r
- char *soundChallenge;\r
- char *soundRequest;\r
- char *soundSeek;\r
- char *soundMove;\r
- char *soundIcsWin;\r
- char *soundIcsLoss;\r
- char *soundIcsDraw;\r
- char *soundIcsUnfinished;\r
- char *soundIcsAlarm;\r
- Boolean reuseFirst;\r
- Boolean reuseSecond;\r
- Boolean animateDragging; /* If True, animate mouse dragging of pieces */\r
- Boolean animate; /* If True, animate non-mouse moves */\r
- int animSpeed; /* Delay in milliseconds between animation frames */\r
- Boolean popupMoveErrors;\r
- Boolean popupExitMessage;\r
- int showJail;\r
- Boolean highlightLastMove;\r
- Boolean highlightDragging;\r
- Boolean blindfold; /* if true, no pieces are drawn */\r
- Boolean premove; /* true if premove feature enabled */ \r
- Boolean premoveWhite; /* true if premoving White first move */ \r
- char *premoveWhiteText; /* text of White premove 1 */ \r
- Boolean premoveBlack; /* true if premoving Black first move */ \r
- char *premoveBlackText; /* text of Black premove 1 */ \r
- Boolean icsAlarm; /* true if sounding alarm at a certain time */ \r
- int icsAlarmTime; /* time to sound alarm, in milliseconds */\r
- Boolean autoRaiseBoard;\r
- int fontSizeTolerance; /* xboard only */\r
- char *initialMode;\r
- char *variant;\r
- int firstProtocolVersion;\r
- int secondProtocolVersion;\r
- Boolean showButtonBar;\r
-\r
- /* [AS] New properties (down to the "ZIPPY" part) */\r
- Boolean firstScoreIsAbsolute; /* If true, engine score is always from white side */\r
- Boolean secondScoreIsAbsolute; /* If true, engine score is always from white side */\r
- Boolean saveExtendedInfoInPGN; /* If true, saved PGN games contain extended info */\r
- Boolean hideThinkingFromHuman; /* If true, program thinking is generated but not displayed in human/computer matches */\r
- char * liteBackTextureFile; /* Name of texture bitmap for lite squares */\r
- char * darkBackTextureFile; /* Name of texture bitmap for dark squares */\r
- int liteBackTextureMode;\r
- int darkBackTextureMode;\r
- char * renderPiecesWithFont; /* Name of font for rendering chess pieces */\r
- char * fontToPieceTable; /* Map to translate font character to chess pieces */\r
- int fontBackColorWhite;\r
- int fontForeColorWhite;\r
- int fontBackColorBlack;\r
- int fontForeColorBlack;\r
- int fontPieceSize; /* Size of font relative to square (percentage) */\r
- int overrideLineGap; /* If >= 0 overrides the lineGap value of the board size properties */\r
- int adjudicateLossThreshold; /* Adjudicate a two-machine game if both engines agree the score is below this for 6 plies */\r
- int delayBeforeQuit;\r
- int delayAfterQuit;\r
- char * nameOfDebugFile;\r
- char * pgnEventHeader;\r
- int defaultFrcPosition;\r
- char * gameListTags;\r
- Boolean saveOutOfBookInfo;\r
- Boolean showEvalInMoveHistory;\r
- int evalHistColorWhite;\r
- int evalHistColorBlack;\r
- Boolean highlightMoveWithArrow;\r
- int highlightArrowColor;\r
- Boolean useStickyWindows;\r
- int adjudicateDrawMoves;\r
- Boolean autoDisplayComment;\r
- Boolean autoDisplayTags;\r
- Boolean firstIsUCI;\r
- Boolean secondIsUCI;\r
- Boolean firstHasOwnBookUCI;\r
- Boolean secondHasOwnBookUCI;\r
- char * polyglotDir;\r
- Boolean usePolyglotBook;\r
- char * polyglotBook;\r
- int defaultHashSize;\r
- int defaultCacheSizeEGTB;\r
- char * defaultPathEGTB;\r
-\r
- /* [HGM] Board size */\r
- int NrFiles;\r
- int NrRanks;\r
- int holdingsSize;\r
- int matchPause;\r
- char * pieceToCharTable;\r
- Boolean allWhite;\r
- Boolean upsideDown;\r
- Boolean alphaRank;\r
- Boolean testClaims;\r
- Boolean checkMates;\r
- Boolean materialDraws;\r
- Boolean trivialDraws;\r
- int ruleMoves;\r
- int drawRepeats;\r
-\r
-#if ZIPPY\r
- char *zippyLines;\r
- char *zippyPinhead;\r
- char *zippyPassword;\r
- char *zippyPassword2;\r
- char *zippyWrongPassword;\r
- char *zippyAcceptOnly;\r
- int zippyUseI;\r
- int zippyBughouse;\r
- int zippyNoplayCrafty;\r
- char *zippyGameEnd;\r
- char *zippyGameStart;\r
- int zippyAdjourn;\r
- int zippyAbort;\r
- char *zippyVariants;\r
- int zippyMaxGames;\r
- int zippyReplayTimeout; /*seconds*/\r
-#endif\r
-\r
- char *serverMovesName;\r
- Boolean suppressLoadMoves;\r
- int serverPause;\r
- int firstTimeOdds;\r
- int secondTimeOdds;\r
- int timeOddsMode;\r
- int firstAccumulateTC;\r
- int secondAccumulateTC;\r
-} AppData, *AppDataPtr;\r
-\r
-/* [AS] PGN tags (for showing in the game list) */\r
-#define GLT_EVENT 'e'\r
-#define GLT_SITE 's'\r
-#define GLT_DATE 'd'\r
-#define GLT_ROUND 'o'\r
-#define GLT_PLAYERS 'p' /* I.e. white "-" black */\r
-#define GLT_RESULT 'r'\r
-#define GLT_WHITE_ELO 'w'\r
-#define GLT_BLACK_ELO 'b'\r
-#define GLT_TIME_CONTROL 't'\r
-#define GLT_VARIANT 'v'\r
-#define GLT_OUT_OF_BOOK 'a'\r
-\r
-#define GLT_DEFAULT_TAGS "eprd" /* Event, players, result, date */\r
-\r
-#define GLT_ALL_TAGS "esdoprwbtva"\r
-\r
-#define PGN_OUT_OF_BOOK "Annotator"\r
-\r
-extern AppData appData;\r
-\r
-typedef struct {\r
- /* PGN 7-tag info */\r
- char *event;\r
- char *site;\r
- char *date;\r
- char *round;\r
- char *white;\r
- char *black;\r
- ChessMove result;\r
- /* Additional info */\r
- char *fen; /* NULL or FEN for starting position; input only */\r
- char *resultDetails;\r
- char *timeControl;\r
- char *extraTags; /* NULL or "[Tag \"Value\"]\n", etc. */\r
- int whiteRating; /* -1 if unknown */\r
- int blackRating; /* -1 if unknown */\r
- VariantClass variant;\r
- char *outOfBook; /* [AS] Move and score when engine went out of book */\r
- int boardWidth; /* [HGM] adjustable board size */\r
- int boardHeight;\r
-/* [HGM] For Shogi and Crazyhouse: */\r
- int holdingsSize; /* number of different piece types in holdings */\r
- int holdingsWidth; /* number of files left and right of board, 0 or 2 */\r
-} GameInfo;\r
-\r
-\r
-#endif\r
-\r
+/*
+ * common.h -- Common definitions for X and Windows NT versions of XBoard
+ *
+ * Copyright 1991 by Digital Equipment Corporation, Maynard,
+ * Massachusetts.
+ *
+ * Enhancements Copyright 1992-2001, 2002, 2003, 2004, 2005, 2006,
+ * 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+ *
+ * Enhancements Copyright 2005 Alessandro Scotti
+ *
+ * The following terms apply to Digital Equipment Corporation's copyright
+ * interest in XBoard:
+ * ------------------------------------------------------------------------
+ * All Rights Reserved
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of Digital not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission.
+ *
+ * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ * ------------------------------------------------------------------------
+ *
+ * The following terms apply to the enhanced version of XBoard
+ * distributed by the Free Software Foundation:
+ * ------------------------------------------------------------------------
+ *
+ * GNU XBoard is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU XBoard is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/. *
+ *
+ *------------------------------------------------------------------------
+ ** See the file ChangeLog for a revision history. */
+
+#ifndef _COMMON
+#define _COMMON
+
+
+/* Begin compatibility grunge */
+
+#if defined(__STDC__) || defined(WIN32) || defined(_amigados)
+#define P(args) args
+typedef void *VOIDSTAR;
+#else
+#define P(args) ()
+typedef char *VOIDSTAR;
+#endif
+
+#ifdef WIN32
+typedef char Boolean;
+typedef char *String;
+#define popen _popen
+#define pclose _pclose
+
+#else
+#ifdef _amigados /* It is important, that these types have */
+typedef int Boolean; /* a length of 4 bytes each, as we are */
+typedef char *String; /* using ReadArgs() for argument parsing. */
+#ifdef _DCC
+FILE *popen(const char *, const char *);
+int pclose(FILE *);
+#endif
+
+#else
+#include <X11/Intrinsic.h>
+#endif
+#endif
+
+
+#ifndef TRUE
+#define TRUE 1
+#define FALSE 0
+#endif
+
+#define UNKNOWN -1 /* [HGM] nps */
+
+#if !HAVE_RANDOM
+# if HAVE_RAND48
+# define srandom srand48
+# define random lrand48
+# else /* not HAVE_RAND48 */
+# define srandom srand
+# define random rand
+# endif /* not HAVE_RAND48 */
+#endif /* !HAVE_RANDOM */
+
+/* End compatibility grunge */
+
+#define PROTOVER 2 /* engine protocol version */
+
+// [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"
+
+/* [HGM] Some notes about board sizes:
+ In games that allow piece drops, the holdings are considered part of the
+ board, in the leftmost and rightmost two files. This way they are
+ automatically part of the game-history states, and enjoy all display
+ functions (including drag-drop and click-click moves to the regular part
+ of the board). The drawback of this is that the internal numbering of
+ files starts at 2 for the a-file if holdings are displayed. To ensure
+ consistency, this shifted numbering system is used _everywhere_ in the
+ code, and conversion to the 'normal' system only takes place when the
+ file number is converted to or from ASCII (by redefining the character
+ constant 'a'). This works because Winboard only communicates with the
+ 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_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_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 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 DROP_RANK -3
+#define MAX_MOVES 1000
+#define MSG_SIZ 512
+#define DIALOG_SIZE 256
+#define STAR_MATCH_N 16
+#define MOVE_LEN 32
+#define TIME_CONTROL "5" /* in minutes */
+#define TIME_DELAY_QUOTE "1.0" /* seconds between moves */
+#define TIME_DELAY ((float) 1.0)
+#define MOVES_PER_SESSION 40 /* moves per TIME_CONTROL */
+#define TIME_INCREMENT -1 /* if >= 0, MOVES_PER_SESSION unused */
+#define WhiteOnMove(move) (((move) % 2) == 0)
+#define ICS_HOST "chessclub.com"
+#define ICS_PORT "5000"
+#define ICS_COMM_PORT ""
+#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 MATCH_MODE "False"
+#define INIT_STRING "new\nrandom\n"
+#define WHITE_STRING "white\ngo\n"
+#define BLACK_STRING "black\ngo\n"
+#define COMPUTER_STRING "computer\n"
+#define REUSE_CHESS_PROGRAMS 1
+#define WHITE_PIECE_COLOR "#FFFFCC"
+#define BLACK_PIECE_COLOR "#202020"
+#define LIGHT_SQUARE_COLOR "#C8C365"
+#define DARK_SQUARE_COLOR "#77A26D"
+#define JAIL_SQUARE_COLOR "#808080"
+#define HIGHLIGHT_SQUARE_COLOR "#FFFF00"
+#define PREMOVE_HIGHLIGHT_COLOR "#FF0000"
+#define LOWTIMEWARNING_COLOR "#FF0000"
+#define BELLCHAR '\007'
+#define NULLCHAR '\000'
+#define FEATURE_TIMEOUT 10000 /*ms*/
+
+#define CLOCK_FONT 0
+#define MESSAGE_FONT 1
+#define COORD_FONT 2
+#define CONSOLE_FONT 3
+#define COMMENT_FONT 4
+#define EDITTAGS_FONT 5
+#define MOVEHISTORY_FONT 6
+#define NUM_FONTS 7
+
+/* Default to no flashing (the "usual" XBoard behavior) */
+#define FLASH_COUNT 0 /* Number of times to flash */
+#define FLASH_RATE 5 /* Flashes per second */
+
+/* Default delay per character (in msec) while sending login script */
+#define MS_LOGIN_DELAY 0
+
+/* [AS] Support for background textures */
+#define BACK_TEXTURE_MODE_DISABLED 0
+#define BACK_TEXTURE_MODE_PLAIN 1
+#define BACK_TEXTURE_MODE_FULL_RANDOM 2
+
+/* Zippy defaults */
+#define ZIPPY_TALK FALSE
+#define ZIPPY_PLAY FALSE
+#define ZIPPY_LINES "yow.lines"
+#define ZIPPY_PINHEAD ""
+#define ZIPPY_PASSWORD ""
+#define ZIPPY_PASSWORD2 ""
+#define ZIPPY_WRONG_PASSWORD ""
+#define ZIPPY_ACCEPT_ONLY ""
+#define ZIPPY_USE_I TRUE
+#define ZIPPY_BUGHOUSE 0
+#define ZIPPY_NOPLAY_CRAFTY FALSE
+#define ZIPPY_GAME_END "gameend\n"
+#define ZIPPY_GAME_START ""
+#define ZIPPY_ADJOURN FALSE
+#define ZIPPY_ABORT FALSE
+#define ZIPPY_VARIANTS "normal,fischerandom,crazyhouse,losers,suicide,3checks,twokings,bughouse,shatranj"
+#define ZIPPY_MAX_GAMES 0
+#define ZIPPY_REPLAY_TIMEOUT 120
+
+typedef enum {
+ BeginningOfGame, MachinePlaysWhite, MachinePlaysBlack,
+ AnalyzeMode, AnalyzeFile, TwoMachinesPlay,
+ EditGame, PlayFromGameFile, EndOfGame, EditPosition, Training,
+ IcsIdle, IcsPlayingWhite, IcsPlayingBlack, IcsObserving,
+ IcsExamining
+ } GameMode;
+
+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,
+ WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,
+ WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,
+ BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,
+ BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan,
+ BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
+ BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,
+ EmptySquare,
+ NoRights, // [HGM] gamestate: for castling rights hidden in board[CASTLING]
+ ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/
+ } ChessSquare;
+
+/* [HGM] some macros that can be used as prefixes to convert piece types */
+#define WHITE_TO_BLACK (int)BlackPawn - (int)WhitePawn + (int)
+#define BLACK_TO_WHITE (int)WhitePawn - (int)BlackPawn + (int)
+#define PROMOTED (int)WhiteDragon - (int)WhiteRook + (int)
+#define DEMOTED (int)WhiteRook - (int)WhiteDragon + (int)
+#define SHOGI (int)EmptySquare + (int)
+
+
+typedef ChessSquare Board[BOARD_RANKS][BOARD_FILES];
+
+typedef enum {
+ WhiteKingSideCastle = 1, WhiteQueenSideCastle,
+ WhiteKingSideCastleWild, WhiteQueenSideCastleWild,
+ WhiteHSideCastleFR, WhiteASideCastleFR,
+ BlackKingSideCastle, BlackQueenSideCastle,
+ BlackKingSideCastleWild, BlackQueenSideCastleWild,
+ BlackHSideCastleFR, BlackASideCastleFR,
+ WhitePromotionKnight, WhitePromotionBishop,
+ WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing,
+ WhitePromotionChancellor, WhitePromotionArchbishop, WhitePromotionCentaur,
+ BlackPromotionKnight, BlackPromotionBishop,
+ BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing,
+ BlackPromotionChancellor, BlackPromotionArchbishop, BlackPromotionCentaur,
+ WhiteCapturesEnPassant, BlackCapturesEnPassant,
+ WhiteDrop, BlackDrop,
+ NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
+ WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,
+ GNUChessGame, XBoardGame, MoveNumberOne,
+ Comment, PositionDiagram, ElapsedTime, PGNTag, NAG
+ } ChessMove;
+
+typedef enum {
+ ColorShout, ColorSShout, ColorChannel1, ColorChannel, ColorKibitz,
+ ColorTell, ColorChallenge, ColorRequest, ColorSeek, ColorNormal,
+ ColorNone, NColorClasses
+} ColorClass;
+
+typedef enum {
+ SoundMove, SoundBell, SoundAlarm, SoundIcsWin, SoundIcsLoss,
+ SoundIcsDraw, SoundIcsUnfinished, NSoundClasses
+} SoundClass;
+
+/* Names for chess variants, not necessarily supported */
+typedef enum {
+ VariantNormal, /* Normal chess */
+ VariantLoadable, /* "loadgame" command allowed (not really a variant)*/
+ VariantWildCastle, /* Shuffle chess where king can castle from d file */
+ VariantNoCastle, /* Shuffle chess with no castling at all */
+ VariantFischeRandom, /* FischeRandom */
+ VariantBughouse, /* Bughouse, ICC/FICS rules */
+ VariantCrazyhouse, /* Crazyhouse, ICC/FICS rules */
+ VariantLosers, /* Try to lose all pieces or get mated (ICC wild 17)*/
+ VariantSuicide, /* Try to lose all pieces incl. king (FICS) */
+ VariantGiveaway, /* Try to have no legal moves left (ICC wild 26) */
+ VariantTwoKings, /* Weird ICC wild 9 */
+ VariantKriegspiel, /* Kriegspiel; pawns can capture invisible pieces */
+ VariantAtomic, /* Capturing piece explodes (ICC wild 27) */
+ Variant3Check, /* Win by giving check 3 times (ICC wild 25) */
+ VariantShatranj, /* Unsupported (ICC wild 28) */
+ Variant29, /* Temporary name for possible future ICC wild 29 */
+ Variant30, /* Temporary name for possible future ICC wild 30 */
+ Variant31, /* Temporary name for possible future ICC wild 31 */
+ Variant32, /* Temporary name for possible future ICC wild 32 */
+ Variant33, /* Temporary name for possible future ICC wild 33 */
+ Variant34, /* Temporary name for possible future ICC wild 34 */
+ Variant35, /* Temporary name for possible future ICC wild 35 */
+ Variant36, /* Temporary name for possible future ICC wild 36 */
+ VariantShogi, /* [HGM] added variants */
+ VariantXiangqi,
+ VariantCourier,
+ VariantGothic,
+ VariantCapablanca,
+ VariantKnightmate,
+ VariantFairy,
+ VariantCylinder,
+ VariantFalcon,
+ VariantCapaRandom,
+ VariantBerolina,
+ VariantJanus,
+ VariantSuper,
+ VariantGreat,
+ VariantTwilight,
+ VariantMakruk,
+ VariantUnknown /* Catchall for other unknown variants */
+} VariantClass;
+
+#define VARIANT_NAMES { \
+ "normal", \
+ "normal", \
+ "wildcastle", \
+ "nocastle", \
+ "fischerandom", \
+ "bughouse", \
+ "crazyhouse", \
+ "losers", \
+ "suicide", \
+ "giveaway", \
+ "twokings", \
+ "kriegspiel", \
+ "atomic", \
+ "3check", \
+ "shatranj", \
+ "wild29", \
+ "wild30", \
+ "wild31", \
+ "wild32", \
+ "wild33", \
+ "wild34", \
+ "wild35", \
+ "wild36", \
+ "shogi", \
+ "xiangqi", \
+ "courier", \
+ "gothic", \
+ "capablanca", \
+ "knightmate", \
+ "fairy", \
+ "cylinder", \
+ "falcon",\
+ "caparandom",\
+ "berolina",\
+ "janus",\
+ "super",\
+ "great",\
+ "twilight",\
+ "makruk",\
+ "unknown" \
+}
+
+typedef struct {
+#if !defined(_amigados)
+ char *whitePieceColor;
+ char *blackPieceColor;
+ char *lightSquareColor;
+ char *darkSquareColor;
+ char *jailSquareColor;
+ char *highlightSquareColor;
+ char *premoveHighlightColor;
+#else
+ int whitePieceColor;
+ int blackPieceColor;
+ int lightSquareColor;
+ int darkSquareColor;
+ int jailSquareColor;
+ int highlightSquareColor;
+ int premoveHighlightColor;
+#endif
+ int movesPerSession;
+ int timeIncrement;
+ char *initString;
+ char *secondInitString;
+ char *firstComputerString;
+ char *secondComputerString;
+ char *firstChessProgram;
+ char *secondChessProgram;
+ char *firstDirectory;
+ char *secondDirectory;
+ Boolean firstPlaysBlack;
+ Boolean noChessProgram;
+ char *firstHost;
+ char *secondHost;
+ char *bitmapDirectory;
+ char *remoteShell;
+ char *remoteUser;
+ float timeDelay;
+ char *timeControl;
+ Boolean icsActive;
+ char *icsHost;
+ char *icsPort;
+ char *icsCommPort; /* if set, use serial port instead of tcp host/port */
+ char *icsLogon; /* Hack to permit variable logon scripts. */
+ char *icsHelper;
+ Boolean icsInputBox;
+ Boolean useTelnet;
+ Boolean seekGraph;
+ Boolean autoRefresh;
+ char *telnetProgram;
+ char *gateway;
+ char *loadGameFile;
+ int loadGameIndex; /* game # within file */
+ char *saveGameFile;
+ Boolean autoSaveGames;
+ char *loadPositionFile;
+ int loadPositionIndex; /* position # within file */
+ char *savePositionFile;
+ Boolean matchMode;
+ int matchGames;
+ Boolean monoMode;
+ Boolean debugMode;
+ Boolean clockMode;
+ char *boardSize;
+ Boolean Iconic;
+ char *searchTime;
+ int searchDepth;
+ Boolean showCoords;
+ char *clockFont;
+ char *messageFont; /* WinBoard only */
+ char *coordFont;
+ char *font; /* xboard only: all other fonts */
+ char *tagsFont; /* WinBoard only */
+ char *commentFont; /* WinBoard only */
+ char *icsFont; /* WinBoard only */
+ Boolean ringBellAfterMoves;
+ Boolean autoCallFlag;
+ Boolean flipView;
+ Boolean autoFlipView;
+ char *cmailGameName; /* xboard only */
+ Boolean alwaysPromoteToQueen;
+ Boolean oldSaveStyle;
+ Boolean oneClick;
+ Boolean quietPlay;
+ Boolean showThinking;
+ Boolean ponderNextMove;
+ Boolean periodicUpdates;
+ Boolean autoObserve;
+ Boolean autoComment;
+ Boolean getMoveList;
+ Boolean testLegality;
+ int borderXoffset; /* xboard only */
+ int borderYoffset; /* 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 */
+ /* Strings for colors, as "fg, bg, bold" (strings used in xboard only) */
+ char *colorShout; // [HGM] IMPORTANT: order must conform to ColorClass definition
+ char *colorSShout;
+ char *colorChannel1;
+ char *colorChannel;
+ char *colorKibitz;
+ char *colorTell;
+ char *colorChallenge;
+ char *colorRequest;
+ char *colorSeek;
+ char *colorNormal;
+ char *soundProgram; /* sound-playing program */
+ char *soundShout; // [HGM] IMPORTANT: order must be as in ColorClass
+ char *soundSShout;
+ char *soundChannel1;
+ char *soundChannel;
+ char *soundKibitz;
+ char *soundTell;
+ char *soundChallenge;
+ char *soundRequest;
+ char *soundSeek;
+ char *soundMove; // [HGM] IMPORTANT: order must be as in SoundClass
+ char *soundBell;
+ char *soundIcsAlarm;
+ char *soundIcsWin;
+ char *soundIcsLoss;
+ char *soundIcsDraw;
+ char *soundIcsUnfinished;
+ Boolean reuseFirst;
+ Boolean reuseSecond;
+ 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 popupMoveErrors;
+ Boolean popupExitMessage;
+ int showJail;
+ 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 */
+ int icsAlarmTime; /* time to sound alarm, in milliseconds */
+ Boolean autoRaiseBoard;
+ int fontSizeTolerance; /* xboard only */
+ char *initialMode;
+ char *variant;
+ char *chatBoxes;
+ int firstProtocolVersion;
+ int secondProtocolVersion;
+ Boolean showButtonBar;
+ Boolean icsEngineAnalyze;
+
+ /* [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 saveExtendedInfoInPGN; /* If true, saved PGN games contain extended info */
+ Boolean hideThinkingFromHuman; /* If true, program thinking is generated but not displayed in human/computer matches */
+ char * liteBackTextureFile; /* Name of texture bitmap for lite squares */
+ char * darkBackTextureFile; /* Name of texture bitmap for dark squares */
+ int liteBackTextureMode;
+ int darkBackTextureMode;
+ char * renderPiecesWithFont; /* Name of font for rendering chess pieces */
+ char * fontToPieceTable; /* Map to translate font character to chess pieces */
+ int fontBackColorWhite;
+ int fontForeColorWhite;
+ int fontBackColorBlack;
+ int fontForeColorBlack;
+ int fontPieceSize; /* Size of font relative to square (percentage) */
+ int overrideLineGap; /* If >= 0 overrides the lineGap value of the board size properties */
+ int adjudicateLossThreshold; /* Adjudicate a two-machine game if both engines agree the score is below this for 6 plies */
+ int delayBeforeQuit;
+ int delayAfterQuit;
+ char * nameOfDebugFile;
+ char * pgnEventHeader;
+ int defaultFrcPosition;
+ char * gameListTags;
+ Boolean saveOutOfBookInfo;
+ Boolean showEvalInMoveHistory;
+ int evalHistColorWhite;
+ int evalHistColorBlack;
+ Boolean highlightMoveWithArrow;
+ int highlightArrowColor;
+ Boolean useStickyWindows;
+ Boolean bgObserve; /* [HGM] bughouse */
+ Boolean dualBoard; /* [HGM] dual */
+ int adjudicateDrawMoves;
+ Boolean autoDisplayComment;
+ Boolean autoDisplayTags;
+ Boolean firstIsUCI;
+ Boolean secondIsUCI;
+ Boolean firstHasOwnBookUCI;
+ Boolean secondHasOwnBookUCI;
+ char * adapterCommand;
+ char * polyglotDir;
+ Boolean usePolyglotBook;
+ char * polyglotBook;
+ int defaultHashSize;
+ int defaultCacheSizeEGTB;
+ char * defaultPathEGTB;
+
+ /* [HGM] Board size */
+ int NrFiles;
+ int NrRanks;
+ int holdingsSize;
+ int matchPause;
+ char * pieceToCharTable;
+ Boolean allWhite;
+ Boolean upsideDown;
+ Boolean alphaRank;
+ Boolean testClaims;
+ Boolean checkMates;
+ Boolean materialDraws;
+ Boolean trivialDraws;
+ int ruleMoves;
+ int drawRepeats;
+
+#if ZIPPY
+ char *zippyLines;
+ char *zippyPinhead;
+ char *zippyPassword;
+ char *zippyPassword2;
+ char *zippyWrongPassword;
+ char *zippyAcceptOnly;
+ int zippyUseI;
+ int zippyBughouse;
+ int zippyNoplayCrafty;
+ char *zippyGameEnd;
+ char *zippyGameStart;
+ int zippyAdjourn;
+ int zippyAbort;
+ char *zippyVariants;
+ int zippyMaxGames;
+ int zippyReplayTimeout; /*seconds*/
+ int zippyShortGame; /* [HGM] aborter */
+#endif
+ Boolean lowTimeWarning; /* [HGM] low time */
+ char *lowTimeWarningColor;
+
+ char *serverMovesName;
+ Boolean suppressLoadMoves;
+ int serverPause;
+ int firstTimeOdds;
+ int secondTimeOdds;
+ int timeOddsMode;
+ int firstAccumulateTC;
+ int secondAccumulateTC;
+ int firstNPS;
+ int secondNPS;
+ Boolean autoKibitz;
+ int engineComments;
+ 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;
+ Boolean autoLogo;
+ Boolean noGUI; /* [HGM] fast: suppress all display updates */
+ char *firstOptions; /* [HGM] options */
+ char *secondOptions;
+ char *fenOverride1;
+ char *fenOverride2;
+ Boolean keepAlive; /* [HGM] alive */
+ Boolean forceIllegal;/*[HGM] illegal */
+ Boolean noJoin; /* [HGM] join */
+ char *wrapContSeq; /* continuation sequence when xboard wraps text */
+ Boolean useInternalWrap; /* use internal wrapping -- noJoin usurps this if set */
+ Boolean pasteSelection; /* paste X selection instead of clipboard */
+ int nrVariations; /* [HGM] multivar */
+ Boolean dropMenu; /* [HGM] pv */
+ Boolean markers; /* [HGM] markers */
+} AppData, *AppDataPtr;
+
+/* [AS] PGN tags (for showing in the game list) */
+#define GLT_EVENT 'e'
+#define GLT_SITE 's'
+#define GLT_DATE 'd'
+#define GLT_ROUND 'o'
+#define GLT_PLAYERS 'p' /* I.e. white "-" black */
+#define GLT_RESULT 'r'
+#define GLT_WHITE_ELO 'w'
+#define GLT_BLACK_ELO 'b'
+#define GLT_TIME_CONTROL 't'
+#define GLT_VARIANT 'v'
+#define GLT_OUT_OF_BOOK 'a'
+#define GLT_RESULT_COMMENT 'c' /* [HGM] rescom */
+
+#define GLT_DEFAULT_TAGS "eprd" /* Event, players, result, date */
+
+#define GLT_ALL_TAGS "esdoprwbtvac"
+
+#define PGN_OUT_OF_BOOK "Annotator"
+
+extern AppData appData;
+
+typedef struct {
+ /* PGN 7-tag info */
+ char *event;
+ char *site;
+ char *date;
+ char *round;
+ char *white;
+ char *black;
+ ChessMove result;
+ /* Additional info */
+ char *fen; /* NULL or FEN for starting position; input only */
+ char *resultDetails;
+ char *timeControl;
+ char *extraTags; /* NULL or "[Tag \"Value\"]\n", etc. */
+ int whiteRating; /* -1 if unknown */
+ int blackRating; /* -1 if unknown */
+ VariantClass variant;
+ char *outOfBook; /* [AS] Move and score when engine went out of book */
+ int boardWidth; /* [HGM] adjustable board size */
+ int boardHeight;
+/* [HGM] For Shogi and Crazyhouse: */
+ int holdingsSize; /* number of different piece types in holdings */
+ int holdingsWidth; /* number of files left and right of board, 0 or 2 */
+} GameInfo;
+
+/* [AS] Search stats from chessprogram, for the played move */
+// [HGM] moved here from backend.h because it occurs in declarations of front-end functions
+typedef struct {
+ int score; /* Centipawns */
+ int depth; /* Plies */
+ int time; /* Milliseconds */
+} ChessProgramStats_Move;
+
+/* [AS] Layout management */
+typedef struct {
+ Boolean visible;
+ int x;
+ int y;
+ int width;
+ int height;
+} WindowPlacement;
+
+extern WindowPlacement wpEngineOutput;
+extern WindowPlacement wpEvalGraph;
+extern WindowPlacement wpMoveHistory;
+extern WindowPlacement wpGameList;
+extern WindowPlacement wpTags;
+
+// [HGM] chat
+#define MAX_CHAT 5
+extern int chatCount;
+extern char chatPartner[MAX_CHAT][MSG_SIZ];
+
+
+#endif
+