Subversion Repositories Games.Chess Giants

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.     Protector -- a UCI chess engine
  3.  
  4.     Copyright (C) 2009-2010 Raimund Heid (Raimund_Heid@yahoo.com)
  5.  
  6.     This program is free software: you can redistribute it and/or modify
  7.     it under the terms of the GNU General Public License as published by
  8.     the Free Software Foundation, either version 3 of the License, or
  9.     (at your option) any later version.
  10.  
  11.     This program is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.     GNU General Public License for more details.
  15.  
  16.     You should have received a copy of the GNU General Public License
  17.     along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  
  19. */
  20.  
  21. #ifndef _protector_h_
  22. #define _protector_h_
  23.  
  24. #include "tools.h"
  25.  
  26. /* #define USE_BOOK 1 */
  27.  
  28. /*
  29.  * Constants
  30.  */
  31.  
  32. #define MAX_THREADS 32
  33. #define DEPTH_RESOLUTION 2
  34.  
  35. #define _64_ 64
  36. #define FALSE 0
  37. #define TRUE 1
  38.  
  39. #define VALUE_MATED (-30000)
  40. #define VALUE_ALMOST_MATED (-29900)
  41. #define MAX_MOVES_PER_POSITION (250)
  42.  
  43. /* #define SEND_HASH_ENTRIES 1 */
  44.  
  45. extern int _distance[_64_][_64_];
  46. extern int _horizontalDistance[_64_][_64_];
  47. extern int _verticalDistance[_64_][_64_];
  48. extern int _taxiDistance[_64_][_64_];
  49. extern const int colorSign[2];
  50. extern int pieceIndex[16];
  51. extern int debugOutput;
  52. extern int numPvs;              /* for multi pv mode; default is 1 */
  53.  
  54. #define MAX_NUM_PV 8
  55.  
  56. /**
  57.  * Types
  58.  */
  59. typedef unsigned char BYTE;
  60. typedef char INT8;
  61. typedef unsigned char UINT8;
  62. typedef short INT16;
  63. typedef unsigned short UINT16;
  64. typedef int INT32;
  65. typedef unsigned int UINT32;
  66.  
  67. #define ULONG_ZERO 0
  68. /* #define ICC */
  69. #define wV(x,w) (((x)*(w))/256)
  70. typedef long long INT64;
  71. typedef unsigned long long UINT64;
  72. typedef unsigned char bool;
  73. extern UINT64 statCount1, statCount2;
  74. extern const char *programVersionNumber;
  75.  
  76. typedef enum
  77. {
  78.    WHITE, BLACK
  79. }
  80. Color;
  81.  
  82. typedef enum
  83. {
  84.    DARK, LIGHT, ALL
  85. }
  86. SquareColor;
  87.  
  88. typedef enum
  89. {
  90.    RESULT_UNKNOWN, RESULT_WHITE_WINS, RESULT_DRAW, RESULT_BLACK_WINS
  91. }
  92. GameResult;
  93.  
  94. typedef enum
  95. {
  96.    TS_FALSE = 0, TS_UNKNOWN = 1, TS_TRUE = 2
  97. }
  98. TriStateType;
  99.  
  100. /* Gameresult values */
  101. #define GAMERESULT_UNKNOWN    "*"
  102. #define GAMERESULT_WHITE_WINS "1-0"
  103. #define GAMERESULT_DRAW       "1/2-1/2"
  104. #define GAMERESULT_BLACK_WINS "0-1"
  105.  
  106. /* Game termination reasons */
  107. #define GAMERESULT_WHITE_MATES           "White mates"
  108. #define GAMERESULT_BLACK_MATES           "Black mates"
  109. #define GAMERESULT_WHITE_RESIGNS         "White resigns"
  110. #define GAMERESULT_BLACK_RESIGNS         "Black resigns"
  111. #define GAMERESULT_WHITE_TIME_FORFEIT    "White forfeits on time"
  112. #define GAMERESULT_BLACK_TIME_FORFEIT    "Black forfeits on time"
  113. #define GAMERESULT_DRAW_AGREED           "Draw agreed"
  114. #define GAMERESULT_STALEMATE             "Stalemate"
  115. #define GAMERESULT_REPETITION            "Draw by repetion"
  116. #define GAMERESULT_50_MOVE_RULE          "Draw by 50 move rule"
  117. #define GAMERESULT_INSUFFICIENT_MATERIAL "Insufficient material"
  118.  
  119. typedef struct
  120. {
  121.    char result[10];
  122.    char reason[128];
  123. }
  124. Gameresult;
  125.  
  126. #define PP_BLACK_PIECE   0x01
  127. #define PP_SLIDING_PIECE 0x02
  128. #define PP_ORTHOPIECE    0x04
  129. #define PP_SPECIALPIECE  0x04
  130. #define PP_DIAPIECE      0x08
  131. #define PP_NONKINGPIECE  0x08
  132.  
  133. typedef enum
  134. {
  135.    NO_PIECETYPE = 0x00,
  136.    KING = PP_SPECIALPIECE,
  137.    QUEEN = PP_SLIDING_PIECE | PP_ORTHOPIECE | PP_DIAPIECE,
  138.    ROOK = PP_SLIDING_PIECE | PP_ORTHOPIECE,
  139.    BISHOP = PP_SLIDING_PIECE | PP_DIAPIECE,
  140.    KNIGHT = PP_NONKINGPIECE,
  141.    PAWN = PP_SPECIALPIECE | PP_NONKINGPIECE
  142. }
  143. PieceType;
  144.  
  145. typedef enum
  146. {
  147.    NO_PIECE = 0x00,
  148.    WHITE_KING = KING,
  149.    WHITE_QUEEN = QUEEN,
  150.    WHITE_ROOK = ROOK,
  151.    WHITE_BISHOP = BISHOP,
  152.    WHITE_KNIGHT = KNIGHT,
  153.    WHITE_PAWN = PAWN,
  154.    BLACK_KING = BLACK | KING,
  155.    BLACK_QUEEN = BLACK | QUEEN,
  156.    BLACK_ROOK = BLACK | ROOK,
  157.    BLACK_BISHOP = BLACK | BISHOP,
  158.    BLACK_KNIGHT = BLACK | KNIGHT,
  159.    BLACK_PAWN = BLACK | PAWN
  160. }
  161. Piece;
  162.  
  163. typedef enum
  164. {
  165.    WHITE_BISHOP_DARK = 2,
  166.    WHITE_BISHOP_LIGHT = WHITE_BISHOP,
  167.    BLACK_BISHOP_DARK = 3,
  168.    BLACK_BISHOP_LIGHT = BLACK_BISHOP
  169. }
  170. BishopPiece;
  171.  
  172. typedef enum
  173. {
  174.    NO_SQUARE = -1,
  175.    A1, B1, C1, D1, E1, F1, G1, H1,
  176.    A2, B2, C2, D2, E2, F2, G2, H2,
  177.    A3, B3, C3, D3, E3, F3, G3, H3,
  178.    A4, B4, C4, D4, E4, F4, G4, H4,
  179.    A5, B5, C5, D5, E5, F5, G5, H5,
  180.    A6, B6, C6, D6, E6, F6, G6, H6,
  181.    A7, B7, C7, D7, E7, F7, G7, H7,
  182.    A8, B8, C8, D8, E8, F8, G8, H8
  183. }
  184. Square;
  185.  
  186. typedef enum
  187. {
  188.    FILE_A, FILE_B, FILE_C, FILE_D, FILE_E, FILE_F, FILE_G, FILE_H
  189. }
  190. File;
  191.  
  192. typedef enum
  193. {
  194.    RANK_1, RANK_2, RANK_3, RANK_4, RANK_5, RANK_6, RANK_7, RANK_8
  195. }
  196. Rank;
  197.  
  198. typedef enum
  199. {
  200.    NO_CASTLINGS = 0,
  201.    WHITE_00 = 1, WHITE_000 = 2,
  202.    BLACK_00 = 4, BLACK_000 = 8
  203. }
  204. Castlings;
  205.  
  206. /**
  207.  * Functions
  208.  */
  209.  
  210. #define pieceColor( piece ) ((Color) ( (piece) & 0x01 ))
  211. #define pieceType( piece ) ((PieceType) ( (piece) & 0x0E ))
  212. #define opponents( piece1, piece2 ) ( ((piece1)^(piece2)) & 0x01 )
  213. #define squareColor( square ) ((SquareColor)( (file(square) + rank(square)) % 2 ))
  214.  
  215. #define file( square ) ((File) ( (square) & 0x07 ))
  216. #define rank( square ) ((Rank) ( (square) >> 3 ))
  217. #define colorRank( color, square ) (Rank) \
  218.         ( (color) == WHITE ? rank(square) : 7-rank(square) )
  219. #define squareIsValid( square ) ( (square) >= A1 && (square) <= H8  )
  220. #define getSquare( file, rank ) ((Square) ( (file) + ((rank) << 3) ))
  221. #define getFlippedSquare( square ) \
  222.         ( getSquare ( file(square), (RANK_8-rank(square)) ) )
  223. #define getHflippedSquare( square ) \
  224.         ( getSquare ( (FILE_H-file(square)), rank(square) ) )
  225. #define fileName( file ) ( 'a' + (file) )
  226. #define rankName( rank ) ( '1' + (rank) )
  227. #define distance(sq1,sq2) (_distance[(sq1)][(sq2)])
  228. #define horizontalDistance(sq1,sq2) (_horizontalDistance[(sq1)][(sq2)])
  229. #define verticalDistance(sq1,sq2) (_verticalDistance[(sq1)][(sq2)])
  230. #define taxiDistance(sq1,sq2) (_taxiDistance[(sq1)][(sq2)])
  231. #define hasCastlings(color, castlings)(castlingsOfColor[(color)]&(castlings))
  232. #define upward(color, square)((square)+((color)==WHITE?8:-8))
  233. #define downward(color, square)((square)+((color)==WHITE?-8:8))
  234.  
  235. /**
  236.  * Iteration shortcuts
  237.  */
  238. #define ITERATE(sq) for ( sq = A1; sq <= H8; sq++ )
  239.  
  240. typedef struct
  241. {
  242.    bool processModuleTest;
  243.    bool xboardMode;
  244.    bool dumpEvaluation;
  245.    char *testfile, *bookfile;
  246.    char *tablebasePath;
  247. }
  248. CommandlineOptions;
  249.  
  250. extern CommandlineOptions commandlineOptions;
  251.  
  252. #endif
  253.