1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#ifndef UCI_STATE_H
#define UCI_STATE_H
#include "../fen.h"
typedef struct {
char* data;
int length;
} str_t;
typedef bool check_t;
typedef int spin_t;
typedef int combo_t;
// the button isn't actually a value thing
// it's more like an event.
// so we parse a button type, we set this to true, handle it
// then set it to false again
typedef bool button_t;
typedef struct {
char** combination;
int count;
int default_index;
} option_combo_setting_t;
typedef struct {
int min;
int max;
int default_value;
} option_spin_setting_t;
enum { OPTION_SPIN, OPTION_COMBO, OPTION_CHECK, OPTION_STRING, OPTION_BUTTON };
typedef struct {
char option_name[32];
int type;
union {
option_combo_setting_t combo;
option_spin_setting_t spin;
bool check_default;
const char* string_default;
} data;
union {
combo_t *combo;
spin_t *spin;
check_t *check;
str_t *string;
button_t *button;
} value;
} option_setting_t;
option_setting_t option_setting_combo(
char* option_name,
char** combinations,
int combinations_count,
int default_index,
combo_t *combo
);
option_setting_t option_setting_spin(
const char* option_name,
int min,
int max,
int default_value,
spin_t *spin
);
option_setting_t option_setting_check(
const char* option_name,
bool default_value,
check_t *check
);
option_setting_t option_setting_string(
const char* option_name,
const char* default_value,
str_t *string
);
option_setting_t option_setting_button(
const char* option_name,
button_t *button
);
typedef struct {
char name[32];
char author[32];
bool debug;
struct fen_load position;
option_setting_t option_settings[11];
// options
spin_t threads;
spin_t hash;
button_t clear_hash;
// str_t nalimovpath;
// spin_t nalimovcache;
// check_t ponder;
// check_t ownbook;
// spin_t multipv;
check_t uci_showcurrline;
check_t uci_showrefutations;
check_t uci_limitstrength;
spin_t uci_elo;
check_t uci_analysemode;
str_t uci_opponent;
str_t uci_engineabout;
// str_t uci_shredderbasespath;
str_t uci_setpositionvalue;
} uci_state;
struct uci_move {
int from;
int to;
};
#endif // UCI_STATE_H
|