Create new (empty) branch for board themes
[xboard.git] / common.h
diff --git a/common.h b/common.h
deleted file mode 100644 (file)
index c557257..0000000
--- a/common.h
+++ /dev/null
@@ -1,947 +0,0 @@
-/*
- * 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, 2011, 2012, 2013, 2014, 2015, 2016 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 XB_COMMON
-#define XB_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
-#ifdef X11
-#include <X11/Intrinsic.h>
-#else
-typedef char Boolean;
-typedef char *String;
-#define True 1
-#define False 0
-#endif
-#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 */
-
-/* unsigned int 64 for engine nodes work and display */
-#ifdef WIN32
-       /* I don't know the name for this type of other compiler
-        * If it not work, just modify here
-        * This is for MS Visual Studio
-        */
-       #ifdef _MSC_VER
-               #define u64 unsigned __int64
-               #define s64 signed __int64
-               #define u64Display "%I64u"
-               #define s64Display "%I64d"
-               #define u64Const(c) (c ## UI64)
-               #define s64Const(c) (c ## I64)
-       #else
-               /* place holder
-                * or dummy types for other compiler
-                * [HGM] seems that -mno-cygwin comple needs %I64?
-                */
-               #define u64 unsigned long long
-               #define s64 signed long long
-               #ifdef USE_I64
-                  #define u64Display "%I64u"
-                  #define s64Display "%I64d"
-               #else
-                  #define u64Display "%llu"
-                  #define s64Display "%lld"
-               #endif
-               #define u64Const(c) (c ## ULL)
-               #define s64Const(c) (c ## LL)
-       #endif
-#else
-       /* GNU gcc */
-       #define u64 unsigned long long
-       #define s64 signed long long
-       #define u64Display "%llu"
-       #define s64Display "%lld"
-       #define u64Const(c) (c ## ull)
-       #define s64Const(c) (c ## ll)
-#endif
-
-#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 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
-   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             17            /* [HGM] for in declarations  */
-#define BOARD_FILES             16             /* [HGM] for in declarations  */
-#define BOARD_HEIGHT (gameInfo.boardHeight)    /* [HGM] made user adjustable */
-#define BOARD_WIDTH  (gameInfo.boardWidth + 2*gameInfo.holdingsWidth)
-#define BOARD_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 TOUCHED_W    CASTLING][(BOARD_FILES-6) /* [HGM] in upper rank        */
-#define TOUCHED_B    CASTLING][(BOARD_FILES-5) /* [HGM] in upper rank        */
-#define EP_RANK      CASTLING][(BOARD_FILES-4) /* [HGM] in upper rank        */
-#define EP_FILE      CASTLING][(BOARD_FILES-3) /* [HGM] 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==10)-appData.rankOffset)  /* [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 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          BITMAPDIR
-#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 MATE_SCORE              100000
-
-#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 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 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 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,
-    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, WhiteLion,
-    WhiteSword, WhiteZebra, WhiteCamel, WhiteTower, WhiteWolf,
-    WhiteHat, WhiteDuck, WhiteAmazon, WhiteFlying, WhiteGnu, WhiteCub,
-    WhiteShield, WhiteHorse, WhiteWizard, WhiteCopper, WhiteIron,
-    WhiteViking, WhiteFlag, WhiteAxe, WhiteDolphin, WhiteCat, WhiteClaw,
-    WhiteWheel, WhiteButterfly, WhitePBishop, WhitePRook, WhiteHCrown,
-    WhiteShierd, WhiteMonarch, WhiteMother, WhiteNothing, WhiteDrunk, WhiteWheer,
-    WhiteTokin, WhitePKnight, WhitePCardinal, WhitePDragon, WhitePLance,
-    WhitePSilver, WhiteDagger, WhitePSword, WhitePDagger, WhiteCrown, WhiteKing,
-    BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,
-    BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan,
-    BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
-    BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackLion,
-    BlackSword, BlackZebra, BlackCamel, BlackTower, BlackWolf,
-    BlackHat, BlackDuck, BlackAmazon, BlackFlying, BlackGnu, BlackCub,
-    BlackShield, BlackHorse, BlackWizard, BlackCopper, BlackIron,
-    BlackViking, BlackFlag, BlackAxe, BlackDolphin, BlackCat, BlackClaw,
-    BlackWheel, BlackButterfly, BlackPBishop, BlackPRook, BlackHCrown,
-    BlackShierd, BlackMonarch, BlackMother, BlackNothing, BlackDrunk, BlackWheer,
-    BlackTokin, BlackPKnight, BlackPCardinal, BlackPDragon, BlackPLance,
-    BlackPSilver, BlackDagger, BlackPSword, BlackPDagger, BlackCrown, BlackKing,
-    EmptySquare, DarkSquare,
-    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 PROMO          (int)WhiteDragon - (int)WhiteRook + (int)
-#define PROMOTED(X)    (promoPartner[X])
-#define DEMOTED(X)     (promoPartner[X])
-#define SHOGI          (int)EmptySquare + (int)
-#define CHUPROMOTED(X) (promoPartner[X])
-#define CHUDEMOTED(X)  (promoPartner[X])
-#define IS_SHOGI(V)    ((V) == VariantShogi || (V) == VariantChu)
-#define IS_LION(V)     ((V) == WhiteLion || (V) == BlackLion)
-
-
-typedef ChessSquare Board[BOARD_RANKS][BOARD_FILES];
-
-typedef enum {
-    EndOfFile = 0,
-    WhiteKingSideCastle, WhiteQueenSideCastle,
-    WhiteKingSideCastleWild, WhiteQueenSideCastleWild,
-    WhiteHSideCastleFR, WhiteASideCastleFR,
-    BlackKingSideCastle, BlackQueenSideCastle,
-    BlackKingSideCastleWild, BlackQueenSideCastleWild,
-    BlackHSideCastleFR, BlackASideCastleFR,
-    WhitePromotion, WhiteNonPromotion,
-    BlackPromotion, BlackNonPromotion,
-    WhiteCapturesEnPassant, BlackCapturesEnPassant,
-    WhiteDrop, BlackDrop, FirstLeg,
-    NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
-    WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,
-    GNUChessGame, XBoardGame, MoveNumberOne, Open, Close, Nothing,
-    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, SoundRoar, 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 */
-    VariantChu,
-    VariantCourier,
-    VariantGothic,
-    VariantCapablanca,
-    VariantKnightmate,
-    VariantFairy,
-    VariantCylinder,
-    VariantFalcon,
-    VariantCapaRandom,
-    VariantBerolina,
-    VariantJanus,
-    VariantSuper,
-    VariantGreat,
-    VariantTwilight,
-    VariantMakruk,
-    VariantSChess,
-    VariantGrand,
-    VariantSpartan,
-    VariantXiangqi,
-    VariantASEAN,
-    VariantLion,
-    VariantChuChess,
-    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", \
-  "chu", \
-  "courier", \
-  "gothic", \
-  "capablanca", \
-  "knightmate", \
-  "fairy", \
-  "cylinder", \
-  "falcon",\
-  "caparandom",\
-  "berolina",\
-  "janus",\
-  "super",\
-  "great",\
-  "twilight",\
-  "makruk",\
-  "seirawan",\
-  "grand",\
-  "spartan",\
-  "xiangqi", \
-  "asean",\
-  "lion",\
-  "elven",\
-  "unknown" \
-}
-
-#define ENGINES 2
-
-typedef struct {
-    char *language;
-#if !defined(_amigados)
-    char *whitePieceColor;
-    char *blackPieceColor;
-    char *lightSquareColor;
-    char *darkSquareColor;
-    char *jailSquareColor;
-    char *highlightSquareColor;
-    char *premoveHighlightColor;
-    char *dialogColor;
-    char *buttonColor;
-#else
-    int whitePieceColor;
-    int blackPieceColor;
-    int lightSquareColor;
-    int darkSquareColor;
-    int jailSquareColor;
-    int highlightSquareColor;
-    int premoveHighlightColor;
-#endif
-    int movesPerSession;
-    float timeIncrement;
-    char *engInitString[ENGINES];
-    char *computerString[ENGINES];
-    char *chessProgram[ENGINES];
-    char *directory[ENGINES];
-    char *pgnName[ENGINES];
-    Boolean firstPlaysBlack;
-    Boolean noChessProgram;
-    char *positionDir;
-    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 */
-    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;
-    char *autoInstall;
-    Boolean autoSaveGames;
-    Boolean onlyOwn;        /* [HGM] suppress auto-saving of observed games */
-    char *loadPositionFile;
-    int loadPositionIndex;  /* position # within file */
-    char *savePositionFile;
-    Boolean fischerCastling;/* [HGM] fischer: allow Fischr castling in any variant */
-    Boolean matchMode;
-    int matchGames;
-    Boolean epd;
-    Boolean monoMode;
-    Boolean debugMode;
-    Boolean clockMode;
-    char *boardSize;
-    char *logoDir;
-    int logoSize;
-    Boolean Iconic;
-    char *searchTime;
-    int searchDepth;
-    Boolean showCoords;
-    char *clockFont;
-    char *messageFont; /* WinBoard only */
-    char *coordFont;
-    char *font; /* xboard only */
-    char *tagsFont;
-    char *commentFont;
-    char *historyFont;
-    char *gameListFont;
-    char *icsFont;
-    int analysisBell;
-    Boolean ringBellAfterMoves;
-    Boolean autoCallFlag;
-    Boolean flipView;
-    Boolean autoFlipView;
-    char *cmailGameName; /* xboard only */
-    Boolean headers;
-    Boolean alwaysPromoteToQueen;
-    Boolean oldSaveStyle;
-    Boolean oneClick;
-    Boolean quietPlay;
-    Boolean showThinking;
-    Boolean ponderNextMove;
-    Boolean periodicUpdates;
-    Boolean autoObserve;
-    Boolean autoCreateLogon;
-    Boolean autoComment;
-    Boolean getMoveList;
-    Boolean testLegality;
-    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)  */
-    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 *soundRoar;
-    char *soundIcsAlarm;
-    char *soundIcsWin;
-    char *soundIcsLoss;
-    char *soundIcsDraw;
-    char *soundIcsUnfinished;
-    Boolean disguise;        /* [HGM] Promoted Pawns look like pieces in bughouse */
-    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 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 protocolVersion[ENGINES];
-    Boolean showButtonBar;
-    Boolean icsEngineAnalyze;
-    Boolean variations;         /* [HGM] enable variation-tree walking */
-    Boolean autoExtend;         /* [HGM] enable playing move(s) of right-clicked PV in analysis mode */
-
-    /* [AS] New properties (down to the "ZIPPY" part) */
-    Boolean scoreIsAbsolute[ENGINES];  /* If true, engine score is always from white side */
-    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 darkBackTextureMode;
-    char * renderPiecesWithFont; /* Name of font for rendering chess pieces */
-    char * fontToPieceTable; /* Map to translate font character to chess pieces */
-    char * inscriptions;         /* text (kanji) to write on top of a piece     */
-    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;
-    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 pseudo[ENGINES]; /* [HGM] pseudo-engines */
-    Boolean isUCI[ENGINES];
-    Boolean hasOwnBookUCI[ENGINES];
-    char * adapterCommand;
-    char * ucciAdapter;
-    char * polyglotDir;
-    Boolean usePolyglotBook;
-    Boolean defNoBook;
-    char * polyglotBook;
-    int bookDepth;
-    int bookStrength;
-    int defaultHashSize;
-    int defaultCacheSizeEGTB;
-    char * defaultPathEGTB;
-    int defaultMatchGames;
-
-    /* [HGM] Board size */
-    int NrFiles;
-    int NrRanks;
-    int rankOffset;
-    int holdingsSize;
-    int matchPause;
-    char * pieceToCharTable;
-    char * pieceNickNames;
-    char * colorNickNames;
-    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 */
-    Boolean quitNext;
-    char *lowTimeWarningColor;
-
-    char *serverFileName;
-    char *serverMovesName;
-    char *finger;
-    Boolean suppressLoadMoves;
-    int serverPause;
-    int timeOdds[ENGINES];
-    int drawDepth[ENGINES];
-    int timeOddsMode;
-    int accumulateTC[ENGINES];
-    int NPS[ENGINES];
-    Boolean autoKibitz;
-    int engineComments;
-    int eloThreshold1;  /* [HGM] select   */
-    int eloThreshold2;
-    int dateThreshold;
-    int searchMode;
-    int stretch;
-    int minPieces;
-    int maxPieces;
-    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 *logo[ENGINES];/* [HGM] logo      */
-    char *pairingEngine;/* [HGM] pairing   */
-    Boolean autoLogo;
-    Boolean fixedSize;
-    Boolean noGUI;      /* [HGM] fast: suppress all display updates */
-    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      */
-    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  */
-    int zoom;           /* [HGM] evalGraph */
-    int evalThreshold;  /* [HGM] evalGraph */
-    Boolean dropMenu;   /* [HGM] pv        */
-    Boolean markers;    /* [HGM] markers   */
-    Boolean autoCopyPV;
-    Boolean pieceMenu;
-    Boolean sweepSelect;
-    Boolean monoMouse;
-    Boolean whitePOV;
-    Boolean scoreWhite;
-    Boolean pvSAN[ENGINES];
-
-    int recentEngines;
-    char *recentEngineList;
-    char *message;
-    char *suppress;
-    char *fen;
-    char *men;
-    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) */
-#define LPUSERGLT_SIZE      64
-
-#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 *variantName;
-    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;
-extern WindowPlacement wpTextMenu;
-
-#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