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 ***************************************************************************/
51 typedef std::map
<std::string
, Cmd
> CmdSet
;
52 typedef std::map
<std::string
, Variable
> VariableSet
;
56 SearchGui
* search_gui
;
64 /* the max depth of the engine */
68 /* the color of the engine */
69 uint8_t st_computer_color
;
71 /* the time the engine will use to think */
74 /* if there is a fixed time for a move, or else 0 */
77 /* time move per section, time per section and inc... */
82 /* clok and other clock in sec/100 */
84 int time_oth_clock_csec
;
86 /* flags for options of the engine */
92 uint64_t processed_nodes
;
95 /* flag for output behaviour */
103 const char *status_string
;
105 int start_think_time
;
106 uint8_t analysis_color
;
110 VariableSet variables
;
113 HashEntry
*hash_table
;
121 static Engine
* instance
;
124 int v_book_creation_max_depth
;
125 int v_book_creation_max_alternatives
;
126 int v_book_creation_min_games
;
127 int v_book_creation_min_probability
;
128 int v_book_creation_weigh_win
;
129 int v_book_creation_weigh_draw
;
130 int v_book_creation_weigh_lose
;
132 int v_search_null_reduction
;
133 int v_search_threat_extension
;
134 int v_search_threat_threshold
;
138 void cmd__check(int argc
, char *argv
[]);
139 void cmd__attacks(int argc
, char *argv
[]);
140 void cmd__see(int argc
, char *argv
[]);
141 void cmd__shat(int argc
, char *argv
[]);
142 void cmd__find_moves(int argc
, char *argv
[]);
143 void cmd__gen_hash(int argc
, char *argv
[]);
144 void cmd__gon(int argc
, char *argv
[]);
145 void cmd__goff(int argc
, char *argv
[]);
146 void cmd_quit(int argc
, char *argv
[]);
147 void cmd_ping(int argc
, char *argv
[]);
148 void cmd_bench(int argc
, char *argv
[]);
149 void cmd_perft(int argc
, char *argv
[]);
150 void cmd_perftall(int argc
, char *argv
[]);
151 void cmd_sd(int argc
, char *argv
[]);
152 void cmd_st(int argc
, char *argv
[]);
153 void cmd_sn(int argc
, char *argv
[]);
154 void cmd_otim(int argc
, char *argv
[]);
155 void cmd_time(int argc
, char *argv
[]);
156 void cmd_level(int argc
, char *argv
[]);
157 void cmd_help(int argc
, char *argv
[]);
158 void cmd_force(int argc
, char *argv
[]);
159 void cmd_undo(int argc
, char *argv
[]);
160 void cmd_remove(int argc
, char *argv
[]);
161 void cmd_new(int argc
, char *argv
[]);
162 void cmd_white(int argc
, char *argv
[]);
163 void cmd_black(int argc
, char *argv
[]);
164 void cmd_go(int argc
, char *argv
[]);
165 void cmd_setboard(int argc
, char *argv
[]);
166 void cmd_edit(int argc
, char *argv
[]);
167 void cmd_load(int argc
, char *argv
[]);
168 void cmd_save(int argc
, char *argv
[]);
169 void cmd_load_pgn(int argc
, char *argv
[]);
170 void cmd_epdtest(int argc
, char *argv
[]);
171 void cmd_challenge(int argc
, char *argv
[]);
172 void cmd_create_book(int argc
, char *argv
[]);
173 void cmd_open_book(int argc
, char *argv
[]);
174 void cmd_close_book(int argc
, char *argv
[]);
175 void cmd_test(int argc
, char *argv
[]);
176 void cmd_protover(int argc
, char *argv
[]);
177 void cmd_accepted(int argc
, char *argv
[]);
178 void cmd_rejected(int argc
, char *argv
[]);
179 void cmd_xboard(int argc
, char *argv
[]);
180 void cmd_analyze(int argc
, char *argv
[]);
181 void cmd_exit(int argc
, char *argv
[]);
182 void cmd_easy(int argc
, char *argv
[]);
183 void cmd_hard(int argc
, char *argv
[]);
184 void cmd_post(int argc
, char *argv
[]);
185 void cmd_nopost(int argc
, char *argv
[]);
186 void cmd_result(int argc
, char *argv
[]);
187 void cmd_DOT(int argc
, char *argv
[]);
188 void cmd_QUESTION(int argc
, char *argv
[]);
189 void cmd_name(int argc
, char *argv
[]);
190 void cmd_rating(int argc
, char *argv
[]);
191 void cmd_var(int argc
, char *argv
[]);
192 void cmd_varhelp(int argc
, char *argv
[]);
196 void make_old_hash();
198 HashEntry
* probe_hash(const HashKey
& hk
);
199 void prefetch_hash(const HashKey
& hk
);
200 void write_hash(const HashKey
& hk
, int16_t lo
, int16_t up
, int depth
, int best_cont
, bool no_good_moves
);
204 bool check_repetition(int nfold
);
208 static void sort_moves(Move
* m
,int num
);
209 static void incremental_sort_moves(Move
* m
,int num
);
211 void calc_best_time();
218 static Engine
*eng();
220 uint8_t color_to_move();
221 uint8_t computer_color();
225 void register_commands();
226 void register_variables();
228 void process_input();
229 void output(const char* fmt
, ...) PRINTF(2, 3);
231 Move
find_best_move();
237 void start(unsigned char color
);
242 uint64_t perft(int lev
);
243 void set_depth(int depth
);
244 void set_max_nodes(int nodes
);
245 void set_time_control(int mps
, int basesec
, int inc
);
246 void set_time_fixed(int time
);
247 void set_my_clock(int time
);
248 void set_other_clock(int time
);
251 void save_pgn(FILE *f
, const char *result1
, const char *result
);
252 void print_moves(Move
* m
,int num
,bool nums
=1);
253 void print_board(); //prints colored board to stdout
254 void read_board(char* brd
, char* color
, char* castle
,
255 char* passing
, int moves_to_draw
, int num_moves
);
256 void read_board(char* str
);//reads from f a Forsythe-Edwards notation board
257 void read_board(FILE* f
); //reads from f a Forsythe-Edwards notation board
258 void write_board(FILE* f
); //writes to f a Forsythe-Edwards notation board
259 int load_pgn(FILE *f
);
260 int run_epd_prog(const char* prog
, int time
, const char* file
, bool quiet
= true);
261 void challenge(const char* prog
, int time
, const char* file
);
263 void create_book(int argc
, char *argv
[]);
264 bool open_book(const char *f
);
266 Move
probe_book(Board
*b
);
268 typedef std::map
<HashKey
, std::map
<Move
, int> > Lines
;
270 bool open_lines(const char *f
);
272 Move
probe_lines(Board
*b
);
274 bool parse_command(char *str
);
279 #endif //__ENGINE_H__