-/*
- * common.h -- Common definitions for X and Windows NT versions of XBoard
- * $Id$
- *
- * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
- * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
- *
- * 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:
- * ------------------------------------------------------------------------
- * This program 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 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- * ------------------------------------------------------------------------
- */
-
-#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
-
-#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 */
-
+/*\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
+#define UNKNOWN -1 /* [HGM] nps */\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 */
-#define BOARD_SIZE 8
-#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 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 BELLCHAR '\007'
-#define NULLCHAR '\000'
-#define FEATURE_TIMEOUT 10000 /*ms*/
-
-/* 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"
-#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 {
- WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen, WhiteKing,
- BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen, BlackKing,
- EmptySquare,
- ClearBoard, WhitePlay, BlackPlay /*for use on EditPosition menus*/
- } ChessSquare;
-
-typedef ChessSquare Board[BOARD_SIZE][BOARD_SIZE];
-
-typedef enum {
- WhiteKingSideCastle = 1, WhiteQueenSideCastle,
- WhiteKingSideCastleWild, WhiteQueenSideCastleWild,
- WhiteHSideCastleFR, WhiteASideCastleFR,
- BlackKingSideCastle, BlackQueenSideCastle,
- BlackKingSideCastleWild, BlackQueenSideCastleWild,
- BlackHSideCastleFR, BlackASideCastleFR,
- WhitePromotionKnight, WhitePromotionBishop,
- WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing,
- BlackPromotionKnight, BlackPromotionBishop,
- BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing,
- 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 */
- 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", \
- "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;
- 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 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;
- 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;
- char *soundSShout;
- char *soundChannel1;
- char *soundChannel;
- char *soundKibitz;
- char *soundTell;
- char *soundChallenge;
- char *soundRequest;
- char *soundSeek;
- char *soundMove;
- char *soundIcsWin;
- char *soundIcsLoss;
- char *soundIcsDraw;
- char *soundIcsUnfinished;
- char *soundIcsAlarm;
- 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;
- int firstProtocolVersion;
- int secondProtocolVersion;
- Boolean showButtonBar;
-#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*/
-#endif
-} AppData, *AppDataPtr;
-
-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;
-} GameInfo;
-
-
-#endif
+// [HGM] license: Messages that engines must print to satisfy their license requirements for patented variants\r
+#define GOTHIC "Gothic Chess (see www.GothicChess.com) is licensed under U.S. Patent #6,481,716 by Ed Trice"\r
+#define NOFALCON "Falcon Chess (see www.chessvariants.com) is licensed under U.S. Patent #5,690,334 by George W. Duke"\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, WhitePromotionCentaur,\r
+ BlackPromotionKnight, BlackPromotionBishop,\r
+ BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing,\r
+ BlackPromotionChancellor, BlackPromotionArchbishop, BlackPromotionCentaur,\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
+ VariantCapaRandom,\r
+ VariantBerolina,\r
+ VariantJanus,\r
+ VariantSuper,\r
+ VariantGreat,\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
+ "caparandom",\\r
+ "berolina",\\r
+ "janus",\\r
+ "super",\\r
+ "great",\\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
+ Boolean icsEngineAnalyze; \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
+ int firstNPS;\r
+ int secondNPS;\r
+ Boolean autoKibitz;\r
+ int engineComments;\r
+ char *userName;\r
+ int rewindIndex; /* [HGM] autoinc */\r
+ int sameColorGames; /* [HGM] alternate */\r
+ int smpCores; /* [HGM] SMP */\r
+ char *egtFormats;\r
+ int niceEngines; /* [HGM] nice */\r
+ char *firstLogo; /* [HGM] logo */\r
+ char *secondLogo;\r
+ Boolean autoLogo;\r
+ Boolean noGUI; /* [HGM] fast: suppress all display updates */\r
+ char *firstOptions; /* [HGM] options */\r
+ char *secondOptions;\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