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