confuse.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00041
#ifndef _cfg_h_
00042
#define _cfg_h_
00043
00044
#ifdef __cplusplus
00045
extern "C" {
00046
#endif
00047
00048
#include <stdio.h>
00049
#include <stdarg.h>
00050
00051
#ifdef _WIN32
00052
00053
# ifdef HAVE__FILENO
00054
# define fileno _fileno
00055
# endif
00056
# include <io.h>
00057
# ifdef HAVE__ISATTY
00058
# define isatty _isatty
00059
# endif
00060
00061
# ifdef BUILDING_DLL
00062
# define DLLIMPORT __declspec (dllexport)
00063
# else
00064
# define DLLIMPORT __declspec (dllimport)
00065
# endif
00066
00067
#else
00068
# define DLLIMPORT
00069
00070
#endif
00071
00072
#ifndef __BORLANDC__
00073
# define __export
00074
#endif
00075
00077 enum cfg_type_t {
00078 CFGT_NONE,
00079
CFGT_INT,
00080
CFGT_FLOAT,
00081
CFGT_STR,
00082
CFGT_BOOL,
00083
CFGT_SEC,
00084
CFGT_FUNC,
00085
CFGT_PTR
00086 };
00087
typedef enum cfg_type_t cfg_type_t;
00088
00090 #define CFGF_NONE 0
00091 #define CFGF_MULTI 1
00092 #define CFGF_LIST 2
00093 #define CFGF_NOCASE 4
00094 #define CFGF_TITLE 8
00095
#define CFGF_RESET 32
00096
#define CFGF_DEFINIT 64
00097
00099 #define CFG_SUCCESS 0
00100
#define CFG_FILE_ERROR -1
00101
#define CFG_PARSE_ERROR 1
00102
00103
typedef union cfg_value_t cfg_value_t;
00104
typedef struct cfg_opt_t cfg_opt_t;
00105
typedef struct cfg_t cfg_t;
00106
typedef struct cfg_defvalue_t cfg_defvalue_t;
00107
typedef int cfg_flag_t;
00108
00134 typedef int (*
cfg_func_t)(cfg_t *cfg, cfg_opt_t *opt,
00135
int argc,
const char **argv);
00136
00157 typedef void (*cfg_print_func_t)(cfg_opt_t *opt,
unsigned int index, FILE *fp);
00158
00180 typedef int (*
cfg_callback_t)(cfg_t *cfg, cfg_opt_t *opt,
00181
const char *value,
void *result);
00182
00196 typedef int (*cfg_validate_callback_t)(cfg_t *cfg, cfg_opt_t *opt);
00197
00206 typedef void (*
cfg_free_func_t)(
void *value);
00207
00209 typedef enum {cfg_false, cfg_true}
cfg_bool_t;
00210
00212 typedef void (*
cfg_errfunc_t)(cfg_t *cfg,
const char *fmt, va_list ap);
00213
00218 struct cfg_t {
00219 cfg_flag_t
flags;
00220 char *
name;
00223 cfg_opt_t *
opts;
00224 char *
title;
00226 char *
filename;
00227 int line;
00228 cfg_errfunc_t errfunc;
00231 };
00232
00235 union cfg_value_t {
00236 long int number;
00237 double fpnumber;
00238 cfg_bool_t boolean;
00239 char *
string;
00240 cfg_t *
section;
00241 void *
ptr;
00242 };
00243
00247 struct cfg_defvalue_t {
00248 long int number;
00249 double fpnumber;
00250 cfg_bool_t boolean;
00251 char *
string;
00252 char *
parsed;
00255 };
00256
00261 struct cfg_opt_t {
00262 char *
name;
00263 cfg_type_t
type;
00264 unsigned int nvalues;
00265 cfg_value_t **
values;
00266 cfg_flag_t
flags;
00267 cfg_opt_t *
subopts;
00268 cfg_defvalue_t
def;
00269 cfg_func_t func;
00270 void *
simple_value;
00273 cfg_callback_t parsecb;
00274 cfg_validate_callback_t validcb;
00275 cfg_print_func_t pf;
00276
cfg_free_func_t freecb;
00277 };
00278
00279
extern const char __export confuse_copyright[];
00280
extern const char __export confuse_version[];
00281
extern const char __export confuse_author[];
00282
00283
#define __CFG_STR(name, def, flags, svalue, cb) \
00284
{name,CFGT_STR,0,0,flags,0,{0,0,cfg_false,def,0},0,svalue,cb,0,0,0}
00285
#define __CFG_STR_LIST(name, def, flags, svalue, cb) \
00286
{name,CFGT_STR,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
00287
00290 #define CFG_STR(name, def, flags) \
00291
__CFG_STR(name, def, flags, 0, 0)
00292
00295 #define CFG_STR_LIST(name, def, flags) \
00296
__CFG_STR_LIST(name, def, flags, 0, 0)
00297
00300 #define CFG_STR_CB(name, def, flags, cb) \
00301
__CFG_STR(name, def, flags, 0, cb)
00302
00305 #define CFG_STR_LIST_CB(name, def, flags, cb) \
00306
__CFG_STR_LIST(name, def, flags, 0, cb)
00307
00360 #define CFG_SIMPLE_STR(name, svalue) \
00361
__CFG_STR(name, 0, CFGF_NONE, svalue, 0)
00362
00363
00364
#define __CFG_INT(name, def, flags, svalue, cb) \
00365
{name,CFGT_INT,0,0,flags,0,{def,0,cfg_false,0,0},0,svalue,cb,0,0,0}
00366
#define __CFG_INT_LIST(name, def, flags, svalue, cb) \
00367
{name,CFGT_INT,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
00368
00371 #define CFG_INT(name, def, flags) \
00372
__CFG_INT(name, def, flags, 0, 0)
00373
00376 #define CFG_INT_LIST(name, def, flags) \
00377
__CFG_INT_LIST(name, def, flags, 0, 0)
00378
00381 #define CFG_INT_CB(name, def, flags, cb) \
00382
__CFG_INT(name, def, flags, 0, cb)
00383
00386 #define CFG_INT_LIST_CB(name, def, flags, cb) \
00387
__CFG_INT_LIST(name, def, flags, 0, cb)
00388
00392 #define CFG_SIMPLE_INT(name, svalue) \
00393
__CFG_INT(name, 0, CFGF_NONE, svalue, 0)
00394
00395
00396
00397
#define __CFG_FLOAT(name, def, flags, svalue, cb) \
00398
{name,CFGT_FLOAT,0,0,flags,0,{0,def,cfg_false,0,0},0,svalue,cb,0,0,0}
00399
#define __CFG_FLOAT_LIST(name, def, flags, svalue, cb) \
00400
{name,CFGT_FLOAT,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
00401
00404 #define CFG_FLOAT(name, def, flags) \
00405
__CFG_FLOAT(name, def, flags, 0, 0)
00406
00409 #define CFG_FLOAT_LIST(name, def, flags) \
00410
__CFG_FLOAT_LIST(name, def, flags, 0, 0)
00411
00414 #define CFG_FLOAT_CB(name, def, flags, cb) \
00415
__CFG_FLOAT(name, def, flags, 0, cb)
00416
00419 #define CFG_FLOAT_LIST_CB(name, def, flags, cb) \
00420
__CFG_FLOAT_LIST(name, def, flags, 0, cb)
00421
00425 #define CFG_SIMPLE_FLOAT(name, svalue) \
00426
__CFG_FLOAT(name, 0, CFGF_NONE, svalue, 0)
00427
00428
00429
00430
#define __CFG_BOOL(name, def, flags, svalue, cb) \
00431
{name,CFGT_BOOL,0,0,flags,0,{0,0,def,0,0},0,svalue,cb,0,0,0}
00432
#define __CFG_BOOL_LIST(name, def, flags, svalue, cb) \
00433
{name,CFGT_BOOL,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
00434
00437 #define CFG_BOOL(name, def, flags) \
00438
__CFG_BOOL(name, def, flags, 0, 0)
00439
00442 #define CFG_BOOL_LIST(name, def, flags) \
00443
__CFG_BOOL_LIST(name, def, flags, 0, 0)
00444
00447 #define CFG_BOOL_CB(name, def, flags, cb) \
00448
__CFG_BOOL(name, def, flags, 0, cb)
00449
00452 #define CFG_BOOL_LIST_CB(name, def, flags, cb) \
00453
__CFG_BOOL_LIST(name, def, flags, 0, cb)
00454
00458 #define CFG_SIMPLE_BOOL(name, svalue) \
00459
__CFG_BOOL(name, cfg_false, CFGF_NONE, svalue, 0)
00460
00461
00462
00474 #define CFG_SEC(name, opts, flags) \
00475
{name,CFGT_SEC,0,0,flags,opts,{0,0,cfg_false,0,0},0,0,0,0,0,0}
00476
00477
00478
00485 #define CFG_FUNC(name, func) \
00486
{name,CFGT_FUNC,0,0,CFGF_NONE,0,{0,0,cfg_false,0,0},func,0,0,0,0,0}
00487
00488
00489
#define __CFG_PTR(name, def, flags, svalue, parsecb, freecb) \
00490
{name,CFGT_PTR,0,0,flags,0,{0,0,cfg_false,0,def},0,svalue,parsecb,0,0,freecb}
00491
#define __CFG_PTR_LIST(name, def, flags, svalue, parsecb, freecb) \
00492
{name,CFGT_PTR,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,parsecb,0,0,freecb}
00493
00497 #define CFG_PTR_CB(name, def, flags, parsecb, freecb) \
00498
__CFG_PTR(name, def, flags, 0, parsecb, freecb)
00499
00500
#define CFG_PTR_LIST_CB(name, def, flags, parsecb, freecb) \
00501
__CFG_PTR(name, def, flags | CFGF_LIST, 0, parsecb, freecb)
00502
00503
00504
00505
00506
00510 #define CFG_END() \
00511
{0,CFGT_NONE,0,0,CFGF_NONE,0,{0,0,cfg_false,0,0},0,0,0,0,0,0}
00512
00513
00514
00531 DLLIMPORT cfg_t * __export cfg_init(cfg_opt_t *opts, cfg_flag_t flags);
00532
00546 DLLIMPORT
int __export cfg_parse(cfg_t *cfg,
const char *filename);
00547
00558 DLLIMPORT
int __export cfg_parse_fp(cfg_t *cfg, FILE *fp);
00559
00568 DLLIMPORT
int __export cfg_parse_buf(cfg_t *cfg,
const char *buf);
00569
00575 DLLIMPORT
void __export cfg_free_value(cfg_opt_t *opt);
00576
00580 DLLIMPORT
void __export cfg_free(cfg_t *cfg);
00581
00585 DLLIMPORT
cfg_errfunc_t __export cfg_set_error_function(cfg_t *cfg,
00586 cfg_errfunc_t errfunc);
00587
00591 DLLIMPORT
void __export cfg_error(cfg_t *cfg,
const char *fmt, ...);
00592
00598 DLLIMPORT
signed long cfg_opt_getnint(cfg_opt_t *opt,
unsigned int index);
00599
00606 DLLIMPORT
long int __export cfg_getnint(cfg_t *cfg,
const char *name,
00607
unsigned int index);
00608
00618 DLLIMPORT
long int __export cfg_getint(cfg_t *cfg,
const char *name);
00619
00625 DLLIMPORT
double cfg_opt_getnfloat(cfg_opt_t *opt,
unsigned int index);
00626
00633 DLLIMPORT
double __export cfg_getnfloat(cfg_t *cfg,
const char *name,
00634
unsigned int index);
00635
00644 DLLIMPORT
double __export cfg_getfloat(cfg_t *cfg,
const char *name);
00645
00651 DLLIMPORT
char *cfg_opt_getnstr(cfg_opt_t *opt,
unsigned int index);
00652
00659 DLLIMPORT
char * __export cfg_getnstr(cfg_t *cfg,
const char *name,
00660
unsigned int index);
00661
00670 DLLIMPORT
char * __export cfg_getstr(cfg_t *cfg,
const char *name);
00671
00677 DLLIMPORT
cfg_bool_t cfg_opt_getnbool(cfg_opt_t *opt,
unsigned int index);
00678
00686 DLLIMPORT
cfg_bool_t __export cfg_getnbool(cfg_t *cfg,
const char *name,
00687
unsigned int index);
00688
00697 DLLIMPORT
cfg_bool_t __export cfg_getbool(cfg_t *cfg,
const char *name);
00698
00699
00700 DLLIMPORT
void *cfg_opt_getnptr(cfg_opt_t *opt,
unsigned int index);
00701 DLLIMPORT
void *cfg_getnptr(cfg_t *cfg,
const char *name,
unsigned int indx);
00702 DLLIMPORT
void *cfg_getptr(cfg_t *cfg,
const char *name);
00703
00704
00710 DLLIMPORT cfg_t *cfg_opt_getnsec(cfg_opt_t *opt,
unsigned int index);
00711
00720 DLLIMPORT cfg_t * __export cfg_getnsec(cfg_t *cfg,
const char *name,
00721
unsigned int index);
00722
00730 DLLIMPORT cfg_t *cfg_opt_gettsec(cfg_opt_t *opt,
const char *title);
00731
00741 DLLIMPORT cfg_t * __export cfg_gettsec(cfg_t *cfg,
const char *name,
00742
const char *title);
00743
00754 DLLIMPORT cfg_t * __export cfg_getsec(cfg_t *cfg,
const char *name);
00755
00761 DLLIMPORT
unsigned int cfg_opt_size(cfg_opt_t *opt);
00762
00775 DLLIMPORT
unsigned int __export cfg_size(cfg_t *cfg,
const char *name);
00776
00783 DLLIMPORT
const char * __export cfg_title(cfg_t *cfg);
00784
00790 DLLIMPORT
int __export cfg_include(cfg_t *cfg, cfg_opt_t *opt,
int argc,
00791
const char **argv);
00792
00799 DLLIMPORT
char * __export cfg_tilde_expand(
const char *filename);
00800
00808 DLLIMPORT
int __export cfg_parse_boolean(
const char *s);
00809
00818 DLLIMPORT cfg_opt_t * __export cfg_getopt(cfg_t *cfg,
const char *name);
00819
00828 DLLIMPORT
void __export cfg_opt_setnint(cfg_opt_t *opt,
00829
long int value,
unsigned int index);
00830
00838 DLLIMPORT
void __export cfg_setint(cfg_t *cfg,
const char *name,
00839
long int value);
00840
00850 DLLIMPORT
void __export cfg_setnint(cfg_t *cfg,
const char *name,
00851
long int value,
unsigned int index);
00852
00861 DLLIMPORT
void __export cfg_opt_setnfloat(cfg_opt_t *opt,
00862
double value,
unsigned int index);
00863
00871 DLLIMPORT
void __export cfg_setfloat(cfg_t *cfg,
const char *name,
00872
double value);
00873
00883 DLLIMPORT
void __export cfg_setnfloat(cfg_t *cfg,
const char *name,
00884
double value,
unsigned int index);
00885
00894 DLLIMPORT
void __export cfg_opt_setnbool(cfg_opt_t *opt,
00895 cfg_bool_t value,
unsigned int index);
00896
00904 DLLIMPORT
void __export cfg_setbool(cfg_t *cfg,
const char *name,
00905 cfg_bool_t value);
00906
00916 DLLIMPORT
void __export cfg_setnbool(cfg_t *cfg,
const char *name,
00917 cfg_bool_t value,
unsigned int index);
00918
00928 DLLIMPORT
void __export cfg_opt_setnstr(cfg_opt_t *opt,
00929
const char *value,
unsigned int index);
00930
00939 DLLIMPORT
void __export cfg_setstr(cfg_t *cfg,
const char *name,
00940
const char *value);
00941
00952 DLLIMPORT
void __export cfg_setnstr(cfg_t *cfg,
const char *name,
00953
const char *value,
unsigned int index);
00954
00965 DLLIMPORT
void __export cfg_setlist(cfg_t *cfg,
const char *name,
00966
unsigned int nvalues, ...);
00967
00968
00979 DLLIMPORT
void __export cfg_addlist(cfg_t *cfg,
const char *name,
00980
unsigned int nvalues, ...);
00981
00994 DLLIMPORT
void cfg_opt_nprint_var(cfg_opt_t *opt,
unsigned int index,
00995 FILE *fp);
00996
01001 DLLIMPORT
void cfg_opt_print_indent(cfg_opt_t *opt, FILE *fp,
int indent);
01002
01013 DLLIMPORT
void cfg_opt_print(cfg_opt_t *opt, FILE *fp);
01014
01019 DLLIMPORT
void cfg_print_indent(cfg_t *cfg, FILE *fp,
int indent);
01020
01034 DLLIMPORT
void cfg_print(cfg_t *cfg, FILE *fp);
01035
01043 DLLIMPORT
cfg_print_func_t cfg_opt_set_print_func(cfg_opt_t *opt,
01044 cfg_print_func_t pf);
01045
01054 DLLIMPORT
cfg_print_func_t cfg_set_print_func(cfg_t *cfg,
const char *name,
01055 cfg_print_func_t pf);
01056
01065 DLLIMPORT
cfg_validate_callback_t cfg_set_validate_func(cfg_t *cfg,
01066
const char *name,
01067 cfg_validate_callback_t vf);
01068
01069
#ifdef __cplusplus
01070
}
01071
#endif
01072
01073
#endif
01074