X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=common.h;h=788318460e688751421a090f6856e3ea87c50907;hb=fbc553e01f81123465d606732caecdc0567ce06d;hp=fc2b999e0f7393ca76f2a68878365d5d0b569b50;hpb=056614196635a4730170261fe0e638191f14c620;p=xboard.git diff --git a/common.h b/common.h index fc2b999..7883184 100644 --- a/common.h +++ b/common.h @@ -86,6 +86,8 @@ int pclose(FILE *); #define FALSE 0 #endif +#define UNKNOWN -1 /* [HGM] nps */ + #if !HAVE_RANDOM # if HAVE_RAND48 # define srandom srand48 @@ -98,12 +100,33 @@ int pclose(FILE *); /* End compatibility grunge */ -#define PROTOVER 2 /* engine protocol version */ - -#define BOARD_SIZE 12 /* [HGM] for in declarations */ -#define BOARD_WIDTH (appData.NrFiles) /* [HGM] made user adjustable */ -#define BOARD_HEIGHT (appData.NrRanks) -#define ONE ('1'-(BOARD_HEIGHT>9)) /* [HGM] foremost board rank */ +#define PROTOVER 2 /* engine protocol version */ + +// [HGM] license: Messages that engines must print to satisfy their license requirements for patented variants +#define GOTHIC "Gothic Chess (see www.GothicChess.com) is licensed under U.S. Patent #6,481,716 by Ed Trice" +#define NOFALCON "Falcon Chess (see www.chessvariants.com) is licensed under U.S. Patent #5,690,334 by George W. Duke" + +/* [HGM] Some notes about board sizes: + In games that allow piece drops, the holdings are considered part of the + board, in the leftmost and rightmost two files. This way they are + automatically part of the game-history states, and enjoy all display + functions (including drag-drop and click-click moves to the regular part + of the board). The drawback of this is that the internal numbering of + files starts at 2 for the a-file if holdings are displayed. To ensure + consistency, this shifted numbering system is used _everywhere_ in the + code, and conversion to the 'normal' system only takes place when the + file number is converted to or from ASCII (by redefining the character + constant 'a'). This works because Winboard only communicates with the + outside world in ASCII. In a similar way, the different rank numbering + systems (starting at rank 0 or 1) are implemented by redefining '1'. +*/ +#define BOARD_SIZE 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 ONE ('1'-(BOARD_HEIGHT>9)) // [HGM] foremost board rank +#define AAA ('a'-BOARD_LEFT) // [HGM] leftmost board file #define DROP_RANK -3 #define MAX_MOVES 1000 #define MSG_SIZ 512 @@ -155,7 +178,7 @@ int pclose(FILE *); #define ZIPPY_GAME_START "" #define ZIPPY_ADJOURN FALSE #define ZIPPY_ABORT FALSE -#define ZIPPY_VARIANTS "normal" +#define ZIPPY_VARIANTS "normal,fischerandom,crazyhouse,losers,suicide,3checks,twokings,bughouse,shatranj" #define ZIPPY_MAX_GAMES 0 #define ZIPPY_REPLAY_TIMEOUT 120 @@ -168,24 +191,29 @@ typedef enum { } GameMode; typedef enum { - WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, -#ifdef FAIRY - WhiteCardinal, WhiteMarshall, WhiteFairyPawn, WhiteFairyKnight, - WhiteFairyBishop, WhiteFairyRook, WhiteFairyCardinal, WhiteFairyMarshall, - WhiteFairyQueen, WhiteFairyKing, -#endif - WhiteQueen, WhiteKing, - BlackPawn, BlackKnight, BlackBishop, BlackRook, -#ifdef FAIRY - BlackCardinal, BlackMarshall, BlackFairyPawn, BlackFairyKnight, - BlackFairyBishop, BlackFairyRook, BlackFairyCardinal, BlackFairyMarshall, - BlackFairyQueen, BlackFairyKing, -#endif - BlackQueen, BlackKing, + /* [HGM] the order here is crucial for Crazyhouse & Shogi: */ + /* only the first N pieces can go into the holdings, and */ + /* promotions in those variants shift P-W to U-S */ + WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen, + WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan, + WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper, + WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing, + BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen, + BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan, + BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper, + BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing, EmptySquare, - ClearBoard, WhitePlay, BlackPlay /*for use on EditPosition menus*/ + ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/ } ChessSquare; +/* [HGM] some macros that can be used as prefixes to convert piece types */ +#define WHITE_TO_BLACK (int)BlackPawn - (int)WhitePawn + (int) +#define BLACK_TO_WHITE (int)WhitePawn - (int)BlackPawn + (int) +#define PROMOTED (int)WhiteDragon - (int)WhiteRook + (int) +#define DEMOTED (int)WhiteRook - (int)WhiteDragon + (int) +#define SHOGI (int)EmptySquare + (int) + + typedef ChessSquare Board[BOARD_SIZE][BOARD_SIZE]; typedef enum { @@ -197,14 +225,10 @@ typedef enum { BlackHSideCastleFR, BlackASideCastleFR, WhitePromotionKnight, WhitePromotionBishop, WhitePromotionRook, WhitePromotionQueen, WhitePromotionKing, -#ifdef FAIRY - WhitePromotionChancellor, WhitePromotionArchbishop, -#endif + WhitePromotionChancellor, WhitePromotionArchbishop, WhitePromotionCentaur, BlackPromotionKnight, BlackPromotionBishop, BlackPromotionRook, BlackPromotionQueen, BlackPromotionKing, -#ifdef FAIRY - BlackPromotionChancellor, BlackPromotionArchbishop, -#endif + BlackPromotionChancellor, BlackPromotionArchbishop, BlackPromotionCentaur, WhiteCapturesEnPassant, BlackCapturesEnPassant, WhiteDrop, BlackDrop, NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove, @@ -243,52 +267,29 @@ typedef enum { VariantShatranj, /* Unsupported (ICC wild 28) */ Variant29, /* Temporary name for possible future ICC wild 29 */ Variant30, /* Temporary name for possible future ICC wild 30 */ -#ifdef FAIRY - VariantShogi, /* [HGM] To be supported in next version */ - VariantXiangqi, - VariantCourier, - VariantGothic, - VariantCapablanca, - VariantFairy, /* [HGM] allow more piece types */ -#else Variant31, /* Temporary name for possible future ICC wild 31 */ Variant32, /* Temporary name for possible future ICC wild 32 */ - Variant33, + 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 */ -#endif + VariantShogi, /* [HGM] added variants */ + VariantXiangqi, + VariantCourier, + VariantGothic, + VariantCapablanca, + VariantKnightmate, + VariantFairy, + VariantCylinder, + VariantFalcon, + VariantCapaRandom, + VariantBerolina, + VariantJanus, + VariantSuper, + VariantGreat, VariantUnknown /* Catchall for other unknown variants */ } VariantClass; -#ifdef FAIRY -#define VARIANT_NAMES { \ - "normal", \ - "normal", \ - "wildcastle", \ - "nocastle", \ - "fischerandom", \ - "bughouse", \ - "crazyhouse", \ - "losers", \ - "suicide", \ - "giveaway", \ - "twokings", \ - "kriegspiel", \ - "atomic", \ - "3check", \ - "shatranj", \ - "wild29", \ - "wild30", \ - "shogi", \ - "xiangqi", \ - "courier", \ - "gothic", \ - "capablanca", \ - "fairy", \ - "unknown" \ -} -#else #define VARIANT_NAMES { \ "normal", \ "normal", \ @@ -313,9 +314,22 @@ typedef enum { "wild34", \ "wild35", \ "wild36", \ + "shogi", \ + "xiangqi", \ + "courier", \ + "gothic", \ + "capablanca", \ + "knightmate", \ + "fairy", \ + "cylinder", \ + "falcon",\ + "caparandom",\ + "berolina",\ + "janus",\ + "super",\ + "great",\ "unknown" \ } -#endif typedef struct { #if !defined(_amigados) @@ -467,6 +481,7 @@ typedef struct { int firstProtocolVersion; int secondProtocolVersion; Boolean showButtonBar; + Boolean icsEngineAnalyze; /* [AS] New properties (down to the "ZIPPY" part) */ Boolean firstScoreIsAbsolute; /* If true, engine score is always from white side */ @@ -516,8 +531,16 @@ typedef struct { /* [HGM] Board size */ int NrFiles; int NrRanks; + int holdingsSize; int matchPause; + char * pieceToCharTable; + Boolean allWhite; + Boolean upsideDown; + Boolean alphaRank; Boolean testClaims; + Boolean checkMates; + Boolean materialDraws; + Boolean trivialDraws; int ruleMoves; int drawRepeats; @@ -539,6 +562,29 @@ typedef struct { int zippyMaxGames; int zippyReplayTimeout; /*seconds*/ #endif + + char *serverMovesName; + Boolean suppressLoadMoves; + int serverPause; + int firstTimeOdds; + int secondTimeOdds; + int timeOddsMode; + int firstAccumulateTC; + int secondAccumulateTC; + int firstNPS; + int secondNPS; + Boolean autoKibitz; + int engineComments; + char *userName; + int rewindIndex; /* [HGM] autoinc */ + int sameColorGames; /* [HGM] alternate */ + int smpCores; /* [HGM] SMP */ + char *egtFormats; + int niceEngines; /* [HGM] nice */ + char *firstLogo; /* [HGM] logo */ + char *secondLogo; + Boolean autoLogo; + Boolean noGUI; /* [HGM] fast: suppress all display updates */ } AppData, *AppDataPtr; /* [AS] PGN tags (for showing in the game list) */ @@ -580,7 +626,13 @@ typedef struct { int blackRating; /* -1 if unknown */ VariantClass variant; char *outOfBook; /* [AS] Move and score when engine went out of book */ + int boardWidth; /* [HGM] adjustable board size */ + int boardHeight; +/* [HGM] For Shogi and Crazyhouse: */ + int holdingsSize; /* number of different piece types in holdings */ + int holdingsWidth; /* number of files left and right of board, 0 or 2 */ } GameInfo; #endif +