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
;
55 SearchGui
* search_gui
;
57 SearchRoot
* current_root
;
65 /* the max depth of the engine */
69 /* the color of the engine */
70 uint8_t st_computer_color
;
72 /* the time the engine will use to think */
75 /* if there is a fixed time for a move, or else 0 */
78 /* time move per section, time per section and inc... */
83 /* clok and other clock in sec/100 */
85 int time_oth_clock_csec
;
87 /* flags for options of the engine */
93 uint64_t processed_nodes
;
96 /* flag for output behaviour */
104 const char *status_string
;
106 int start_think_time
;
107 uint8_t analysis_color
;
111 VariableSet variables
;
114 HashEntry
*hash_table
;
118 typedef std::map
<HashKey
, std::map
<Move
, int> > Lines
;
125 void set(const char* e
, const char* n
) {
126 if(eco
) free((void*)eco
); if(name
) free((void*)name
);
127 eco
= e
? strdup(e
) : NULL
; name
= n
? strdup(n
) : NULL
; }
128 OpeningInfo(const OpeningInfo
& o
)
129 : eco(o
.eco
? strdup(o
.eco
) : NULL
), name(o
.name
? strdup(o
.name
) : NULL
) {}
130 OpeningInfo() : eco(NULL
), name(NULL
) {}
131 ~OpeningInfo(){ if(eco
) free((void*)eco
); if(name
) free((void*)name
); }
133 typedef std::map
<HashKey
, OpeningInfo
> Openings
;
140 static Engine
* instance
;
143 int v_book_creation_max_depth
;
144 int v_book_creation_max_alternatives
;
145 int v_book_creation_min_games
;
146 int v_book_creation_min_probability
;
147 int v_book_creation_weigh_win
;
148 int v_book_creation_weigh_draw
;
149 int v_book_creation_weigh_lose
;
151 int v_search_null_reduction
;
152 int v_search_threat_extension
;
153 int v_search_threat_threshold
;
157 void cmd__check(int argc
, char *argv
[]);
158 void cmd__attacks(int argc
, char *argv
[]);
159 void cmd__see(int argc
, char *argv
[]);
160 void cmd__shat(int argc
, char *argv
[]);
161 void cmd__find_moves(int argc
, char *argv
[]);
162 void cmd__gen_hash(int argc
, char *argv
[]);
163 void cmd__gon(int argc
, char *argv
[]);
164 void cmd__goff(int argc
, char *argv
[]);
165 void cmd_quit(int argc
, char *argv
[]);
166 void cmd_ping(int argc
, char *argv
[]);
167 void cmd_bench(int argc
, char *argv
[]);
168 void cmd_perft(int argc
, char *argv
[]);
169 void cmd_perftall(int argc
, char *argv
[]);
170 void cmd_sd(int argc
, char *argv
[]);
171 void cmd_st(int argc
, char *argv
[]);
172 void cmd_sn(int argc
, char *argv
[]);
173 void cmd_otim(int argc
, char *argv
[]);
174 void cmd_time(int argc
, char *argv
[]);
175 void cmd_level(int argc
, char *argv
[]);
176 void cmd_help(int argc
, char *argv
[]);
177 void cmd_force(int argc
, char *argv
[]);
178 void cmd_undo(int argc
, char *argv
[]);
179 void cmd_remove(int argc
, char *argv
[]);
180 void cmd_new(int argc
, char *argv
[]);
181 void cmd_white(int argc
, char *argv
[]);
182 void cmd_black(int argc
, char *argv
[]);
183 void cmd_go(int argc
, char *argv
[]);
184 void cmd_setboard(int argc
, char *argv
[]);
185 void cmd_edit(int argc
, char *argv
[]);
186 void cmd_load(int argc
, char *argv
[]);
187 void cmd_save(int argc
, char *argv
[]);
188 void cmd_load_pgn(int argc
, char *argv
[]);
189 void cmd_epdtest(int argc
, char *argv
[]);
190 void cmd_challenge(int argc
, char *argv
[]);
191 void cmd_create_book(int argc
, char *argv
[]);
192 void cmd_open_book(int argc
, char *argv
[]);
193 void cmd_close_book(int argc
, char *argv
[]);
194 void cmd_open_lines(int argc
, char *argv
[]);
195 void cmd_close_lines(int argc
, char *argv
[]);
196 void cmd_open_eco(int argc
, char *argv
[]);
197 void cmd_close_eco(int argc
, char *argv
[]);
198 void cmd_test(int argc
, char *argv
[]);
199 void cmd_protover(int argc
, char *argv
[]);
200 void cmd_accepted(int argc
, char *argv
[]);
201 void cmd_rejected(int argc
, char *argv
[]);
202 void cmd_xboard(int argc
, char *argv
[]);
203 void cmd_analyze(int argc
, char *argv
[]);
204 void cmd_exit(int argc
, char *argv
[]);
205 void cmd_easy(int argc
, char *argv
[]);
206 void cmd_hard(int argc
, char *argv
[]);
207 void cmd_post(int argc
, char *argv
[]);
208 void cmd_nopost(int argc
, char *argv
[]);
209 void cmd_result(int argc
, char *argv
[]);
210 void cmd_DOT(int argc
, char *argv
[]);
211 void cmd_QUESTION(int argc
, char *argv
[]);
212 void cmd_name(int argc
, char *argv
[]);
213 void cmd_rating(int argc
, char *argv
[]);
214 void cmd_var(int argc
, char *argv
[]);
215 void cmd_varhelp(int argc
, char *argv
[]);
216 void cmd_set(int argc
, char *argv
[]);
220 void make_old_hash();
222 HashEntry
* probe_hash(const HashKey
& hk
);
223 void prefetch_hash(const HashKey
& hk
);
224 void write_hash(const HashKey
& hk
, int16_t lo
, int16_t up
, int depth
, int best_cont
, bool no_good_moves
);
228 bool check_repetition(int nfold
);
232 static void sort_moves(Move
* m
,int num
);
233 static void incremental_sort_moves(Move
* m
,int num
);
235 void calc_best_time();
242 static Engine
*eng();
244 void run_command(int argc
, char** argv
);
247 uint8_t color_to_move();
248 uint8_t computer_color();
252 void register_commands();
253 void register_variables();
255 void process_input();
256 void output(const char* fmt
, ...) PRINTF(2, 3);
258 Move
find_best_move();
264 void start(unsigned char color
);
269 uint64_t perft(int lev
);
270 void set_depth(int depth
);
271 void set_max_nodes(int nodes
);
272 void set_time_control(int mps
, int basesec
, int inc
);
273 void set_time_fixed(int time
);
274 void set_my_clock(int time
);
275 void set_other_clock(int time
);
278 void save_pgn(FILE *f
, const char *result1
, const char *result
);
279 void print_moves(Move
* m
, int num
, bool nums
=true, bool walk_ht
=false);
280 void print_board(); //prints colored board to stdout
281 void read_board(char* brd
, char* color
, char* castle
,
282 char* passing
, int moves_to_draw
, int num_moves
);
283 void read_board(char* str
);//reads from f a Forsythe-Edwards notation board
284 void read_board(FILE* f
); //reads from f a Forsythe-Edwards notation board
285 void write_board(FILE* f
); //writes to f a Forsythe-Edwards notation board
286 int load_pgn(FILE *f
);
287 int run_epd_prog(const char* prog
, int time
, const char* file
, bool quiet
= true);
288 void challenge(const char* prog
, int time
, const char* file
);
290 void create_book(int argc
, char *argv
[]);
291 bool open_book(const char *f
);
293 Move
probe_book(Board
*b
);
295 bool open_lines(const char *f
);
297 Move
probe_lines(Board
*b
);
299 bool open_openings(const char *f
);
300 void close_openings();
301 OpeningInfo
* probe_openings(Board
*b
);
303 bool parse_command(char *str
);
308 #endif //__ENGINE_H__