version 1.4.44b
[polyglot.git] / option.h
1 \r
2 // option.h\r
3 \r
4 #ifndef OPTION_H\r
5 #define OPTION_H\r
6 \r
7 // includes\r
8 \r
9 #include "util.h"\r
10 #include "ini.h"\r
11 \r
12 // defines\r
13 \r
14 #define VarNb    16\r
15 #define XBOARD   (1<<0)\r
16 #define UCI      (1<<1)\r
17 #define PG       (1<<2)\r
18 #define OptionNb 256\r
19 \r
20 #define IS_BUTTON(opt) (my_string_case_equal(opt->type,"button") ||      \\r
21                         my_string_case_equal(opt->type,"save")   ||      \\r
22                         my_string_case_equal(opt->type,"reset"))         \\r
23 \r
24 #define IS_SPIN(opt)   (my_string_case_equal(opt->type,"spin") ||        \\r
25                         my_string_case_equal(opt->type,"slider"))        \\r
26 \r
27 // types\r
28 \r
29 typedef struct {   // TODO: put back in more logical order\r
30     const char * name;\r
31     const char * type;\r
32     const char * min;\r
33     const char * max;\r
34     const char * default_;\r
35     const char * value;\r
36     int var_nb;\r
37     const char * var[VarNb];\r
38     int mode;\r
39 } option_t;\r
40 \r
41 // all non NULL data in an option_list_t should be malloc'ed\r
42 // use "my_string_set" to fill it. \r
43 \r
44 typedef struct {\r
45     option_t options[OptionNb];\r
46     int option_nb;\r
47     int iter;\r
48 } option_list_t;\r
49 \r
50 // variables\r
51 \r
52 extern option_list_t Option[1];\r
53 \r
54 // functions\r
55 \r
56 \r
57 extern void         option_init         (option_list_t *option);\r
58 \r
59 extern void         option_init_pg      ();\r
60 \r
61 extern bool         option_set          (option_list_t *option,\r
62                                          const char var[],\r
63                                          const char val[]);\r
64 extern bool         option_set_default  (option_list_t *option,\r
65                                          const char var[],\r
66                                          const char val[]);\r
67 \r
68 extern const char * option_get          (option_list_t *option, const char var[]);\r
69 extern const char * option_get_default  (option_list_t *option, const char var[]);\r
70 \r
71 extern bool         option_get_bool     (option_list_t *option, const char var[]);\r
72 extern double       option_get_double   (option_list_t *option, const char var[]);\r
73 extern int          option_get_int      (option_list_t *option, const char var[]);\r
74 extern const char * option_get_string   (option_list_t *option, const char var[]);\r
75 \r
76 extern void         option_from_ini     (option_list_t *option,\r
77                                          ini_t *ini,\r
78                                          const char *section);\r
79 \r
80 extern bool         option_is_ok        (const option_list_t *option);\r
81 extern option_t *   option_find         (option_list_t *option, const char var[]);\r
82 extern void         option_clear        (option_list_t *option);\r
83 extern void         option_insert       (option_list_t *option, option_t *new_option);\r
84 \r
85 extern void         option_start_iter   (option_list_t *option);\r
86 extern option_t *   option_next         (option_list_t *option);\r
87 \r
88 extern void         option_free         (option_t *option);\r
89 \r
90 #endif // !defined OPTION_H\r
91 \r
92 // end of option.h\r
93 \r