1 /* 2 Sjeng - a chess variants playing program 3 Copyright (C) 2000 Gian-Carlo Pascutto 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; if not, write to the Free Software 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 19 File: sjeng.h 20 Purpose: global definitions 21 22 */ 23 24 #ifndef SJENG_H 25 #define SJENG_H 26 27 #include "config.h" 28 #include <ctype.h> 29 #include <signal.h> 30 #include <stdlib.h> 31 #include <stdio.h> 32 #include <string.h> 33 #include <time.h> 34 35 #ifdef HAVE_SYS_TIMEB_H 36 #include <sys/timeb.h> 37 #endif 38 39 #define NDEBUG 40 #include <assert.h> 41 42 #define DIE (*(int *)(NULL) = 0) 43 44 /* GCP : my code uses WHITE=0 and BLACK=1 so reverse this */ 45 46 #define WHITE 0 47 #define BLACK 1 48 49 #define ToMove (white_to_move ? 0 : 1) 50 #define NotToMove (white_to_move ? 1 : 0) 51 52 #define Hash(x,y) (hash ^= zobrist[(x)][(y)]) 53 54 #define Crazyhouse 0 55 #define Bughouse 1 56 #define Normal 2 57 #define Suicide 3 58 #define Losers 4 59 60 #define Opening 0 61 #define Middlegame 1 62 #define Endgame 2 63 64 #define mindepth 2 65 66 /* define names for piece constants: */ 67 #define frame 0 68 #define wpawn 1 69 #define bpawn 2 70 #define wknight 3 71 #define bknight 4 72 #define wking 5 73 #define bking 6 74 #define wrook 7 75 #define brook 8 76 #define wqueen 9 77 #define bqueen 10 78 #define wbishop 11 79 #define bbishop 12 80 #define npiece 13 81 82 /* result flags: */ 83 #define no_result 0 84 #define stalemate 1 85 #define white_is_mated 2 86 #define black_is_mated 3 87 #define draw_by_fifty 4 88 #define draw_by_rep 5 89 90 /* arrays maybe ? */ 91 #undef FASTCALC 92 #ifdef FASTCALC 93 #define rank(square) ((((square)-26)/12)+1) 94 #define file(square) ((((square)-26)%12)+1) 95 #else 96 #define rank(square) (rank[(square)]) 97 #define file(square) (file[(square)]) 98 #endif 99 #define diagl(square) (diagl[(square)]) 100 #define diagr(square) (diagr[(square)]) 101 102 #ifndef INPROBECODE 103 typedef enum {FALSE, TRUE} bool; 104 #endif 105 106 /* castle flags: */ 107 #define no_castle 0 108 #define wck 1 109 #define wcq 2 110 #define bck 3 111 #define bcq 4 112 113 typedef struct { 114 int from; 115 int target; 116 int captured; 117 int promoted; 118 int castled; 119 int ep; 120 } move_s; 121 122 typedef struct { 123 int cap_num; 124 int was_promoted; 125 int epsq; 126 int fifty; 127 } move_x; 128 129 #if defined(HAVE_SYS_TIMEB_H) && (defined(HAVE_FTIME) || defined(HAVE_GETTIMEOFDAY)) 130 typedef struct timeb rtime_t; 131 #else 132 typedef time_t rtime_t; 133 #endif 134 135 #define STR_BUFF 256 136 #define MOVE_BUFF 512 137 #define INF 1000000 138 #define PV_BUFF 300 139 140 #define AddMaterial(x) Material += material[(x)] 141 #define RemoveMaterial(x) Material -= material[(x)] 142 143 #define UPPER 1 144 #define LOWER 2 145 #define EXACT 3 146 #define HMISS 4 147 #define DUMMY 0 148 149 #define LOSS 0 150 #define WIN 1 151 #define DRAW 2 152 153 #define max(x, y) ((x) > (y) ? (x) : (y)) 154 #define mix(x, y) ((x) < (y) ? (x) : (y)) 155 156 #endif 157