--- /dev/null
+/*
+ * 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 */
+
+#define PROTOVER 2 /* engine protocol version */
+
+#define BOARD_SIZE 8
+#define DROP_RANK -3
+#define MAX_MOVES 1000
+#define MSG_SIZ 2048
+#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_PASSWORD3 ""
+#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;
+
+GameMode 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;
+ /* daniel */
+ Boolean userVersion; /* programmer version */
+ Boolean icsAnalyze;
+ Boolean icsEngineKillPV;
+ Boolean icsEngineWhisper;
+ Boolean icsEngineKibitz;
+ Boolean icsEngineTell;
+ Boolean icsEngineNone;
+ Boolean icsAnalyzeWindow;
+ Boolean smartQueue; /* Live broadcast quere */
+ Boolean ICC_feature; /* Enable special ICC fetures */
+ Boolean windowMove; /* Drop fail high/low moves at icsAnalyzeOutPut */
+ int icsAnalyzeOutPut; /* 1=whisper 2=kibitz 3=tell 4=none */
+ int icsKillPVs;
+ char icsTells[MSG_SIZ]; /* handle/channel do we tell somthing */
+ Boolean icsWBprotoNorm;
+ Boolean icsWBprotoAgr;
+ int icsWBproto; /* dummy */
+ int icsSmartQueue; /* 0 = standard game 1 = Blitzgame */
+ /* Split smartQueue with int because i want more for the future */
+ Boolean icsSmartQueueStd;
+ Boolean icsSmartQueueBlitz;
+ Boolean icsShowBook; /* True = show book False = disable */
+ Boolean AnalysisWindow; /* Engine Room */
+ Boolean engineStart; /* EngineRoom Button */
+ Boolean engineTourneyMode; /* EngineRoom checkbox tourneyMode */
+ Boolean engineStatLine; /* EngineRoom Statline disable */
+ Boolean zippyDraw; /* active zippy draw Handling ? */
+ int SendOutPutToICS; /* Analysis window: Send thinking lines to ICS */
+ /* 0 none 1 whisper 2 kibitz */
+ Boolean ButtonSendOutPutToICS; /* Checkbox analysis window */
+ 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 *zippyPassword3;
+ 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