1 /***************************************************************************
4 begin : mer ott 23 2002
5 copyright : (C) 2002-2005 by Maurizio Monge
6 email : monge@linuz.sns.it
7 ***************************************************************************/
9 /***************************************************************************
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
16 ***************************************************************************/
50 typedef std::map
<std::string
, Cmd
> CmdSet
;
51 typedef std::map
<std::string
, Variable
> VariableSet
;
58 /* the max depth of the engine */
62 /* the color of the engine */
63 uint8_t st_computer_color
;
65 /* the time the engine will use to think */
68 /* if there is a fixed time for a move, or else 0 */
71 /* time move per section, time per section and inc... */
76 /* clok and other clock in sec/100 */
78 int time_oth_clock_csec
;
80 /* flags for options of the engine */
86 uint64_t processed_nodes
;
89 /* flag for output behaviour */
97 const char *status_string
;
100 uint8_t analysis_color
;
101 //bool can_claim_draw;
105 VariableSet variables
;
108 HashEntry
*hash_table
;
116 static Engine
* instance
;
119 int v_book_creation_max_depth
;
120 int v_book_creation_max_alternatives
;
121 int v_book_creation_min_games
;
122 int v_book_creation_min_probability
;
123 int v_book_creation_weigh_win
;
124 int v_book_creation_weigh_draw
;
125 int v_book_creation_weigh_lose
;
127 int v_search_null_reduction
;
128 int v_search_threat_extension
;
129 int v_search_threat_threshold
;
133 void cmd__check(int argc
, char *argv
[]);
134 void cmd__attacks(int argc
, char *argv
[]);
135 void cmd__see(int argc
, char *argv
[]);
136 void cmd__shat(int argc
, char *argv
[]);
137 void cmd__find_moves(int argc
, char *argv
[]);
138 void cmd__gen_hash(int argc
, char *argv
[]);
139 void cmd__rewrite_hash(int argc
, char *argv
[]);
140 void cmd_quit(int argc
, char *argv
[]);
141 void cmd_ping(int argc
, char *argv
[]);
142 void cmd_bench(int argc
, char *argv
[]);
143 void cmd_perft(int argc
, char *argv
[]);
144 void cmd_perftall(int argc
, char *argv
[]);
145 void cmd_sd(int argc
, char *argv
[]);
146 void cmd_st(int argc
, char *argv
[]);
147 void cmd_sn(int argc
, char *argv
[]);
148 void cmd_otim(int argc
, char *argv
[]);
149 void cmd_time(int argc
, char *argv
[]);
150 void cmd_level(int argc
, char *argv
[]);
151 void cmd_help(int argc
, char *argv
[]);
152 void cmd_force(int argc
, char *argv
[]);
153 void cmd_undo(int argc
, char *argv
[]);
154 void cmd_remove(int argc
, char *argv
[]);
155 void cmd_new(int argc
, char *argv
[]);
156 void cmd_white(int argc
, char *argv
[]);
157 void cmd_black(int argc
, char *argv
[]);
158 void cmd_go(int argc
, char *argv
[]);
159 void cmd_setboard(int argc
, char *argv
[]);
160 void cmd_edit(int argc
, char *argv
[]);
161 void cmd_load(int argc
, char *argv
[]);
162 void cmd_save(int argc
, char *argv
[]);
163 void cmd_load_pgn(int argc
, char *argv
[]);
164 void cmd_epdtest(int argc
, char *argv
[]);
165 void cmd_challenge(int argc
, char *argv
[]);
166 void cmd_create_book(int argc
, char *argv
[]);
167 void cmd_open_book(int argc
, char *argv
[]);
168 void cmd_close_book(int argc
, char *argv
[]);
169 void cmd_test(int argc
, char *argv
[]);
170 void cmd_protover(int argc
, char *argv
[]);
171 void cmd_accepted(int argc
, char *argv
[]);
172 void cmd_rejected(int argc
, char *argv
[]);
173 void cmd_xboard(int argc
, char *argv
[]);
174 void cmd_analyze(int argc
, char *argv
[]);
175 void cmd_exit(int argc
, char *argv
[]);
176 void cmd_easy(int argc
, char *argv
[]);
177 void cmd_hard(int argc
, char *argv
[]);
178 void cmd_post(int argc
, char *argv
[]);
179 void cmd_nopost(int argc
, char *argv
[]);
180 void cmd_result(int argc
, char *argv
[]);
181 void cmd_DOT(int argc
, char *argv
[]);
182 void cmd_QUESTION(int argc
, char *argv
[]);
183 void cmd_name(int argc
, char *argv
[]);
184 void cmd_rating(int argc
, char *argv
[]);
185 void cmd_var(int argc
, char *argv
[]);
186 void cmd_varhelp(int argc
, char *argv
[]);
190 void make_old_hash();
192 HashEntry
* probe_hash(const HashKey
& hk
);
193 void prefetch_hash(const HashKey
& hk
);
194 void write_hash(int16_t lo
, int16_t up
, int depth
, int best_cont
);
198 bool insufficient_material();
200 void rewind_thinking();
201 void restore_thinking();
205 int16_t search(int ply
, int depth
, bool pv
,
206 int16_t alpha
, int16_t beta
);
207 void moves_heuristic(Move
*mv
, int num_mv
, int ply
,
208 int orig_depth
, Move best_mv_hash
, bool quiesce
, Move
* prev
);
209 void moves_quiescence_heuristic(Move
*mv
, int num_mv
, const Move
& hash
,
210 int static_eval
, int alpha
, int beta
, int depth
, Move
* prev
);
211 static void sort_moves(Move
* m
,int num
);
212 static void incremental_sort_moves(Move
* m
,int num
);
214 void calc_best_time();
221 static Engine
*eng();
223 uint8_t color_to_move();
224 uint8_t computer_color();
228 void register_commands();
229 void register_variables();
231 void process_input();
232 void output(const char* fmt
, ...) PRINTF(2, 3);
234 Move
find_best_move();
240 void start(unsigned char color
);
245 uint64_t perft(int lev
);
246 void set_depth(int depth
);
247 void set_max_nodes(int nodes
);
248 void set_time_control(int mps
, int basesec
, int inc
);
249 void set_time_fixed(int time
);
250 void set_my_clock(int time
);
251 void set_other_clock(int time
);
253 int parse_move(Move
* mv
,char* str
);
254 char* move_to_coord(char* str
,Move
* mv
);
255 char* move_to_alg(char* str
,Move
* mv
);
258 void save_pgn(FILE *f
, const char *result1
, const char *result
);
259 void print_moves(Move
* m
,int num
,bool nums
=1);
260 void print_board(); //prints colored board to stdout
261 void read_board(char* brd
, char* color
, char* castle
,
262 char* passing
, int moves_to_draw
, int num_moves
);
263 void read_board(char* str
);//reads from f a Forsythe-Edwards notation board
264 void read_board(FILE* f
); //reads from f a Forsythe-Edwards notation board
265 void write_board(FILE* f
); //writes to f a Forsythe-Edwards notation board
266 int load_pgn(FILE *f
);
267 int run_epd_prog(const char* prog
, int time
, const char* file
, bool quiet
= true);
268 void challenge(const char* prog
, int time
, const char* file
);
270 void create_book(int argc
, char *argv
[]);
271 bool open_book(const char *f
);
273 bool probe_book(const HashKey
& h
, Move
* m
);
275 typedef std::map
< HashKey
, std::list
< Move
> > Lines
;
277 bool open_lines(const char *f
);
279 bool probe_lines(const HashKey
& h
, Move
* m
);
281 bool parse_command(char *str
);
286 #endif //__ENGINE_H__