X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=option.h;h=7a842e678f8359f1501a6963c033d3f4a0ad0bdc;hb=de010509fa0e57ba955da6512c714fbff8606af3;hp=c57438c09239b255ff678f68a2492ac2f2223c52;hpb=e7a2abd9bd4fce9ebbd70793b00d9d5f99886348;p=polyglot.git diff --git a/option.h b/option.h index c57438c..7a842e6 100644 --- a/option.h +++ b/option.h @@ -7,20 +7,31 @@ // includes #include "util.h" +#include "ini.h" -// constants +// defines -const int VarNb = 16; +#define VarNb 16 +#define XBOARD (1<<0) +#define UCI (1<<1) +#define PG (1<<2) +#define XBSEL (1<<3) +#define OptionNb 256 -// defines +#define IS_BUTTON(str) (my_string_case_equal(str,"button") || \ + my_string_case_equal(str,"save") || \ + my_string_case_equal(str,"reset")) \ + +#define IS_SPIN(str) (my_string_case_equal(str,"spin") || \ + my_string_case_equal(str,"slider")) \ -#define XBOARD 1 -#define UCI 2 -#define PG 4 +#define IS_STRING(str) (my_string_case_equal(str,"string") || \ + my_string_case_equal(str,"path") || \ + my_string_case_equal(str,"file")) \ // types -struct option_t { // TODO: put back in more logical order +typedef struct { // TODO: put back in more logical order const char * name; const char * type; const char * min; @@ -30,25 +41,56 @@ struct option_t { // TODO: put back in more logical order int var_nb; const char * var[VarNb]; int mode; -}; +} option_t; + +// all non NULL data in an option_list_t should be malloc'ed +// use "my_string_set" to fill it. + +typedef struct { + option_t options[OptionNb]; + int option_nb; + int iter; +} option_list_t; // variables -extern option_t Option[]; +extern option_list_t Option[1]; // functions -extern void option_init (); -extern bool option_set (const char var[], const char val[]); -extern bool option_set_default(const char var[], const char val[]); -extern const char * option_get (const char var[]); -extern const char * option_get_default(const char var[]); +extern void option_init (option_list_t *option); + +extern void option_init_pg (); + +extern bool option_set (option_list_t *option, + const char var[], + const char val[]); +extern bool option_set_default (option_list_t *option, + const char var[], + const char val[]); + +extern const char * option_get (option_list_t *option, const char var[]); +extern const char * option_get_default (option_list_t *option, const char var[]); + +extern bool option_get_bool (option_list_t *option, const char var[]); +extern double option_get_double (option_list_t *option, const char var[]); +extern int option_get_int (option_list_t *option, const char var[]); +extern const char * option_get_string (option_list_t *option, const char var[]); + +extern void option_from_ini (option_list_t *option, + ini_t *ini, + const char *section); + +extern bool option_is_ok (const option_list_t *option); +extern option_t * option_find (option_list_t *option, const char var[]); +extern void option_clear (option_list_t *option); +extern void option_insert (option_list_t *option, option_t *new_option); + +extern void option_start_iter (option_list_t *option); +extern option_t * option_next (option_list_t *option); -extern bool option_get_bool (const char var[]); -extern double option_get_double (const char var[]); -extern int option_get_int (const char var[]); -extern const char * option_get_string (const char var[]); +extern void option_free (option_t *option); #endif // !defined OPTION_H