mehrmann wb extensions
[xboard.git] / winboard-dm-beta4 / common.h
diff --git a/winboard-dm-beta4/common.h b/winboard-dm-beta4/common.h
new file mode 100755 (executable)
index 0000000..1a0e658
--- /dev/null
@@ -0,0 +1,488 @@
+/*
+ * 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