#ifndef _MAIL_CONF_H_INCLUDED_
#define _MAIL_CONF_H_INCLUDED_
#define CONFIG_DICT "mail_dict"
#define CONF_ENV_PATH "MAIL_CONFIG"
#define CONF_ENV_VERB "MAIL_VERBOSE"
#define CONF_ENV_DEBUG "MAIL_DEBUG"
#define CONF_ENV_LOGTAG "MAIL_LOGTAG"
#define CONFIG_BOOL_YES "yes"
#define CONFIG_BOOL_NO "no"
extern void mail_conf_read(void);
extern void mail_conf_suck(void);
extern void mail_conf_flush(void);
extern void mail_conf_checkdir(const char *);
extern void mail_conf_update(const char *, const char *);
extern const char *mail_conf_lookup(const char *);
extern const char *mail_conf_eval(const char *);
extern const char *mail_conf_eval_once(const char *);
extern const char *mail_conf_lookup_eval(const char *);
extern char *get_mail_conf_str(const char *, const char *, int, int);
extern int get_mail_conf_int(const char *, int, int, int);
extern long get_mail_conf_long(const char *, long, long, long);
extern int get_mail_conf_bool(const char *, int);
extern int get_mail_conf_time(const char *, const char *, int, int);
extern int get_mail_conf_nint(const char *, const char *, int, int);
extern char *get_mail_conf_raw(const char *, const char *, int, int);
extern int get_mail_conf_nbool(const char *, const char *);
extern char *get_mail_conf_str2(const char *, const char *, const char *, int, int);
extern int get_mail_conf_int2(const char *, const char *, int, int, int);
extern long get_mail_conf_long2(const char *, const char *, long, long, long);
extern int get_mail_conf_time2(const char *, const char *, int, int, int, int);
extern int get_mail_conf_nint2(const char *, const char *, int, int, int);
extern void check_mail_conf_str(const char *, const char *, int, int);
extern void check_mail_conf_time(const char *, int, int, int);
extern void check_mail_conf_int(const char *, int, int, int);
extern char *get_mail_conf_str_fn(const char *, const char *(*) (void), int, int);
extern int get_mail_conf_int_fn(const char *, int (*) (void), int, int);
extern long get_mail_conf_long_fn(const char *, long (*) (void), long, long);
extern int get_mail_conf_bool_fn(const char *, int (*) (void));
extern int get_mail_conf_time_fn(const char *, const char *(*) (void), int, int, int);
extern int get_mail_conf_nint_fn(const char *, const char *(*) (void), int, int);
extern char *get_mail_conf_raw_fn(const char *, const char *(*) (void), int, int);
extern int get_mail_conf_nbool_fn(const char *, const char *(*) (void));
extern void set_mail_conf_str(const char *, const char *);
extern void set_mail_conf_int(const char *, int);
extern void set_mail_conf_long(const char *, long);
extern void set_mail_conf_bool(const char *, int);
extern void set_mail_conf_time(const char *, const char *);
extern void set_mail_conf_time_int(const char *, int);
extern void set_mail_conf_nint(const char *, const char *);
extern void set_mail_conf_nint_int(const char *, int);
extern void set_mail_conf_nbool(const char *, const char *);
#define set_mail_conf_nbool_int(name, value) \
set_mail_conf_nbool((name), (value) ? CONFIG_BOOL_YES : CONFIG_BOOL_NO)
typedef struct {
const char *name;
const char *defval;
char **target;
int min;
int max;
} CONFIG_STR_TABLE;
typedef struct {
const char *name;
const char *defval;
char **target;
int min;
int max;
} CONFIG_RAW_TABLE;
typedef struct {
const char *name;
int defval;
int *target;
int min;
int max;
} CONFIG_INT_TABLE;
typedef struct {
const char *name;
long defval;
long *target;
long min;
long max;
} CONFIG_LONG_TABLE;
typedef struct {
const char *name;
int defval;
int *target;
} CONFIG_BOOL_TABLE;
typedef struct {
const char *name;
const char *defval;
int *target;
int min;
int max;
} CONFIG_TIME_TABLE;
typedef struct {
const char *name;
const char *defval;
int *target;
int min;
int max;
} CONFIG_NINT_TABLE;
typedef struct {
const char *name;
const char *defval;
int *target;
} CONFIG_NBOOL_TABLE;
extern void get_mail_conf_str_table(const CONFIG_STR_TABLE *);
extern void get_mail_conf_int_table(const CONFIG_INT_TABLE *);
extern void get_mail_conf_long_table(const CONFIG_LONG_TABLE *);
extern void get_mail_conf_bool_table(const CONFIG_BOOL_TABLE *);
extern void get_mail_conf_time_table(const CONFIG_TIME_TABLE *);
extern void get_mail_conf_nint_table(const CONFIG_NINT_TABLE *);
extern void get_mail_conf_raw_table(const CONFIG_RAW_TABLE *);
extern void get_mail_conf_nbool_table(const CONFIG_NBOOL_TABLE *);
typedef struct {
const char *name;
const char *(*defval) (void);
char **target;
int min;
int max;
} CONFIG_STR_FN_TABLE;
typedef struct {
const char *name;
const char *(*defval) (void);
char **target;
int min;
int max;
} CONFIG_RAW_FN_TABLE;
typedef struct {
const char *name;
int (*defval) (void);
int *target;
int min;
int max;
} CONFIG_INT_FN_TABLE;
typedef struct {
const char *name;
long (*defval) (void);
long *target;
long min;
long max;
} CONFIG_LONG_FN_TABLE;
typedef struct {
const char *name;
int (*defval) (void);
int *target;
} CONFIG_BOOL_FN_TABLE;
typedef struct {
const char *name;
const char *(*defval) (void);
int *target;
int min;
int max;
} CONFIG_NINT_FN_TABLE;
typedef struct {
const char *name;
const char *(*defval) (void);
int *target;
} CONFIG_NBOOL_FN_TABLE;
extern void get_mail_conf_str_fn_table(const CONFIG_STR_FN_TABLE *);
extern void get_mail_conf_int_fn_table(const CONFIG_INT_FN_TABLE *);
extern void get_mail_conf_long_fn_table(const CONFIG_LONG_FN_TABLE *);
extern void get_mail_conf_bool_fn_table(const CONFIG_BOOL_FN_TABLE *);
extern void get_mail_conf_raw_fn_table(const CONFIG_RAW_FN_TABLE *);
extern void get_mail_conf_nint_fn_table(const CONFIG_NINT_FN_TABLE *);
extern void get_mail_conf_nbool_fn_table(const CONFIG_NBOOL_FN_TABLE *);
#endif