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_NODEFAULT 16
00096
#define CFGF_RESET 32
00097
#define CFGF_DEFINIT 64
00098
00100 #define CFG_SUCCESS 0
00101
#define CFG_FILE_ERROR -1
00102
#define CFG_PARSE_ERROR 1
00103
00104
typedef union cfg_value_t cfg_value_t;
00105
typedef struct cfg_opt_t cfg_opt_t;
00106
typedef struct cfg_t cfg_t;
00107
typedef struct cfg_defvalue_t cfg_defvalue_t;
00108
typedef int cfg_flag_t;
00109
00135 typedef int (*
cfg_func_t)(cfg_t *cfg, cfg_opt_t *opt,
00136
int argc,
const char **argv);
00137
00158 typedef void (*
cfg_print_func_t)(cfg_opt_t *opt,
unsigned int index, FILE *fp);
00159
00181 typedef int (*
cfg_callback_t)(cfg_t *cfg, cfg_opt_t *opt,
00182
const char *value,
void *result);
00183
00197 typedef int (*
cfg_validate_callback_t)(cfg_t *cfg, cfg_opt_t *opt);
00198
00207 typedef void (*
cfg_free_func_t)(
void *value);
00208
00210 typedef enum {cfg_false, cfg_true}
cfg_bool_t;
00211
00213 typedef void (*
cfg_errfunc_t)(cfg_t *cfg,
const char *fmt, va_list ap);
00214
00219 struct cfg_t {
00220 cfg_flag_t
flags;
00221 char *
name;
00224 cfg_opt_t *
opts;
00225 char *
title;
00227 char *
filename;
00228 int line;
00229 cfg_errfunc_t errfunc;
00232 };
00233
00236 union cfg_value_t {
00237 long int number;
00238 double fpnumber;
00239 cfg_bool_t boolean;
00240 char *
string;
00241 cfg_t *
section;
00242 void *
ptr;
00243 };
00244
00248 struct cfg_defvalue_t {
00249 long int number;
00250 double fpnumber;
00251 cfg_bool_t boolean;
00252 char *
string;
00253 char *
parsed;
00256 };
00257
00262 struct cfg_opt_t {
00263 char *
name;
00264 cfg_type_t
type;
00265 unsigned int nvalues;
00266 cfg_value_t **
values;
00267 cfg_flag_t
flags;
00268 cfg_opt_t *
subopts;
00269 cfg_defvalue_t
def;
00270 cfg_func_t func;
00271 void *
simple_value;
00274 cfg_callback_t parsecb;
00275 cfg_validate_callback_t validcb;
00276 cfg_print_func_t pf;
00277
cfg_free_func_t freecb;
00278 };
00279
00280
extern const char __export confuse_copyright[];
00281
extern const char __export confuse_version[];
00282
extern const char __export confuse_author[];
00283
00284
#define __CFG_STR(name, def, flags, svalue, cb) \
00285
{name,CFGT_STR,0,0,flags,0,{0,0,cfg_false,def,0},0,svalue,cb,0,0,0}
00286
#define __CFG_STR_LIST(name, def, flags, svalue, cb) \
00287
{name,CFGT_STR,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
00288
00291 #define CFG_STR(name, def, flags) \
00292
__CFG_STR(name, def, flags, 0, 0)
00293
00296 #define CFG_STR_LIST(name, def, flags) \
00297
__CFG_STR_LIST(name, def, flags, 0, 0)
00298
00301 #define CFG_STR_CB(name, def, flags, cb) \
00302
__CFG_STR(name, def, flags, 0, cb)
00303
00306 #define CFG_STR_LIST_CB(name, def, flags, cb) \
00307
__CFG_STR_LIST(name, def, flags, 0, cb)
00308
00361 #define CFG_SIMPLE_STR(name, svalue) \
00362
__CFG_STR(name, 0, CFGF_NONE, svalue, 0)
00363
00364
00365
#define __CFG_INT(name, def, flags, svalue, cb) \
00366
{name,CFGT_INT,0,0,flags,0,{def,0,cfg_false,0,0},0,svalue,cb,0,0,0}
00367
#define __CFG_INT_LIST(name, def, flags, svalue, cb) \
00368
{name,CFGT_INT,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
00369
00372 #define CFG_INT(name, def, flags) \
00373
__CFG_INT(name, def, flags, 0, 0)
00374
00377 #define CFG_INT_LIST(name, def, flags) \
00378
__CFG_INT_LIST(name, def, flags, 0, 0)
00379
00382 #define CFG_INT_CB(name, def, flags, cb) \
00383
__CFG_INT(name, def, flags, 0, cb)
00384
00387 #define CFG_INT_LIST_CB(name, def, flags, cb) \
00388
__CFG_INT_LIST(name, def, flags, 0, cb)
00389
00393 #define CFG_SIMPLE_INT(name, svalue) \
00394
__CFG_INT(name, 0, CFGF_NONE, svalue, 0)
00395
00396
00397
00398
#define __CFG_FLOAT(name, def, flags, svalue, cb) \
00399
{name,CFGT_FLOAT,0,0,flags,0,{0,def,cfg_false,0,0},0,svalue,cb,0,0,0}
00400
#define __CFG_FLOAT_LIST(name, def, flags, svalue, cb) \
00401
{name,CFGT_FLOAT,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
00402
00405 #define CFG_FLOAT(name, def, flags) \
00406
__CFG_FLOAT(name, def, flags, 0, 0)
00407
00410 #define CFG_FLOAT_LIST(name, def, flags) \
00411
__CFG_FLOAT_LIST(name, def, flags, 0, 0)
00412
00415 #define CFG_FLOAT_CB(name, def, flags, cb) \
00416
__CFG_FLOAT(name, def, flags, 0, cb)
00417
00420 #define CFG_FLOAT_LIST_CB(name, def, flags, cb) \
00421
__CFG_FLOAT_LIST(name, def, flags, 0, cb)
00422
00426 #define CFG_SIMPLE_FLOAT(name, svalue) \
00427
__CFG_FLOAT(name, 0, CFGF_NONE, svalue, 0)
00428
00429
00430
00431
#define __CFG_BOOL(name, def, flags, svalue, cb) \
00432
{name,CFGT_BOOL,0,0,flags,0,{0,0,def,0,0},0,svalue,cb,0,0,0}
00433
#define __CFG_BOOL_LIST(name, def, flags, svalue, cb) \
00434
{name,CFGT_BOOL,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,cb,0,0,0}
00435
00438 #define CFG_BOOL(name, def, flags) \
00439
__CFG_BOOL(name, def, flags, 0, 0)
00440
00443 #define CFG_BOOL_LIST(name, def, flags) \
00444
__CFG_BOOL_LIST(name, def, flags, 0, 0)
00445
00448 #define CFG_BOOL_CB(name, def, flags, cb) \
00449
__CFG_BOOL(name, def, flags, 0, cb)
00450
00453 #define CFG_BOOL_LIST_CB(name, def, flags, cb) \
00454
__CFG_BOOL_LIST(name, def, flags, 0, cb)
00455
00459 #define CFG_SIMPLE_BOOL(name, svalue) \
00460
__CFG_BOOL(name, cfg_false, CFGF_NONE, svalue, 0)
00461
00462
00463
00475 #define CFG_SEC(name, opts, flags) \
00476
{name,CFGT_SEC,0,0,flags,opts,{0,0,cfg_false,0,0},0,0,0,0,0,0}
00477
00478
00479
00486 #define CFG_FUNC(name, func) \
00487
{name,CFGT_FUNC,0,0,CFGF_NONE,0,{0,0,cfg_false,0,0},func,0,0,0,0,0}
00488
00489
00490
#define __CFG_PTR(name, def, flags, svalue, parsecb, freecb) \
00491
{name,CFGT_PTR,0,0,flags,0,{0,0,cfg_false,0,def},0,svalue,parsecb,0,0,freecb}
00492
#define __CFG_PTR_LIST(name, def, flags, svalue, parsecb, freecb) \
00493
{name,CFGT_PTR,0,0,flags | CFGF_LIST,0,{0,0,cfg_false,0,def},0,svalue,parsecb,0,0,freecb}
00494
00507 #define CFG_PTR_CB(name, def, flags, parsecb, freecb) \
00508
__CFG_PTR(name, def, flags, 0, parsecb, freecb)
00509
00512 #define CFG_PTR_LIST_CB(name, def, flags, parsecb, freecb) \
00513
__CFG_PTR(name, def, flags | CFGF_LIST, 0, parsecb, freecb)
00514
00515
00516
00517
00518
00522 #define CFG_END() \
00523
{0,CFGT_NONE,0,0,CFGF_NONE,0,{0,0,cfg_false,0,0},0,0,0,0,0,0}
00524
00525
00526
00543 DLLIMPORT cfg_t * __export cfg_init(cfg_opt_t *opts, cfg_flag_t flags);
00544
00558 DLLIMPORT
int __export cfg_parse(cfg_t *cfg,
const char *filename);
00559
00570 DLLIMPORT
int __export cfg_parse_fp(cfg_t *cfg, FILE *fp);
00571
00580 DLLIMPORT
int __export cfg_parse_buf(cfg_t *cfg,
const char *buf);
00581
00587 DLLIMPORT
void __export cfg_free_value(cfg_opt_t *opt);
00588
00592 DLLIMPORT
void __export cfg_free(cfg_t *cfg);
00593
00597 DLLIMPORT
cfg_errfunc_t __export cfg_set_error_function(cfg_t *cfg,
00598 cfg_errfunc_t errfunc);
00599
00603 DLLIMPORT
void __export cfg_error(cfg_t *cfg,
const char *fmt, ...);
00604
00610 DLLIMPORT
signed long cfg_opt_getnint(cfg_opt_t *opt,
unsigned int index);
00611
00618 DLLIMPORT
long int __export cfg_getnint(cfg_t *cfg,
const char *name,
00619
unsigned int index);
00620
00630 DLLIMPORT
long int __export cfg_getint(cfg_t *cfg,
const char *name);
00631
00637 DLLIMPORT
double cfg_opt_getnfloat(cfg_opt_t *opt,
unsigned int index);
00638
00645 DLLIMPORT
double __export cfg_getnfloat(cfg_t *cfg,
const char *name,
00646
unsigned int index);
00647
00656 DLLIMPORT
double __export cfg_getfloat(cfg_t *cfg,
const char *name);
00657
00663 DLLIMPORT
char *cfg_opt_getnstr(cfg_opt_t *opt,
unsigned int index);
00664
00671 DLLIMPORT
char * __export cfg_getnstr(cfg_t *cfg,
const char *name,
00672
unsigned int index);
00673
00682 DLLIMPORT
char * __export cfg_getstr(cfg_t *cfg,
const char *name);
00683
00689 DLLIMPORT
cfg_bool_t cfg_opt_getnbool(cfg_opt_t *opt,
unsigned int index);
00690
00698 DLLIMPORT
cfg_bool_t __export cfg_getnbool(cfg_t *cfg,
const char *name,
00699
unsigned int index);
00700
00709 DLLIMPORT
cfg_bool_t __export cfg_getbool(cfg_t *cfg,
const char *name);
00710
00711
00712 DLLIMPORT
void *cfg_opt_getnptr(cfg_opt_t *opt,
unsigned int index);
00713 DLLIMPORT
void *cfg_getnptr(cfg_t *cfg,
const char *name,
unsigned int indx);
00714
00723 DLLIMPORT
void *cfg_getptr(cfg_t *cfg,
const char *name);
00724
00725
00731 DLLIMPORT cfg_t *cfg_opt_getnsec(cfg_opt_t *opt,
unsigned int index);
00732
00741 DLLIMPORT cfg_t * __export cfg_getnsec(cfg_t *cfg,
const char *name,
00742
unsigned int index);
00743
00751 DLLIMPORT cfg_t *cfg_opt_gettsec(cfg_opt_t *opt,
const char *title);
00752
00762 DLLIMPORT cfg_t * __export cfg_gettsec(cfg_t *cfg,
const char *name,
00763
const char *title);
00764
00775 DLLIMPORT cfg_t * __export cfg_getsec(cfg_t *cfg,
const char *name);
00776
00782 DLLIMPORT
unsigned int cfg_opt_size(cfg_opt_t *opt);
00783
00796 DLLIMPORT
unsigned int __export cfg_size(cfg_t *cfg,
const char *name);
00797
00804 DLLIMPORT
const char * __export cfg_title(cfg_t *cfg);
00805
00812 DLLIMPORT
const char *cfg_name(cfg_t *cfg);
00813
00820 DLLIMPORT
const char *cfg_opt_name(cfg_opt_t *opt);
00821
00827 DLLIMPORT
int __export cfg_include(cfg_t *cfg, cfg_opt_t *opt,
int argc,
00828
const char **argv);
00829
00836 DLLIMPORT
char * __export cfg_tilde_expand(
const char *filename);
00837
00845 DLLIMPORT
int __export cfg_parse_boolean(
const char *s);
00846
00855 DLLIMPORT cfg_opt_t * __export cfg_getopt(cfg_t *cfg,
const char *name);
00856
00865 DLLIMPORT
void __export cfg_opt_setnint(cfg_opt_t *opt,
00866
long int value,
unsigned int index);
00867
00875 DLLIMPORT
void __export cfg_setint(cfg_t *cfg,
const char *name,
00876
long int value);
00877
00887 DLLIMPORT
void __export cfg_setnint(cfg_t *cfg,
const char *name,
00888
long int value,
unsigned int index);
00889
00898 DLLIMPORT
void __export cfg_opt_setnfloat(cfg_opt_t *opt,
00899
double value,
unsigned int index);
00900
00908 DLLIMPORT
void __export cfg_setfloat(cfg_t *cfg,
const char *name,
00909
double value);
00910
00920 DLLIMPORT
void __export cfg_setnfloat(cfg_t *cfg,
const char *name,
00921
double value,
unsigned int index);
00922
00931 DLLIMPORT
void __export cfg_opt_setnbool(cfg_opt_t *opt,
00932 cfg_bool_t value,
unsigned int index);
00933
00941 DLLIMPORT
void __export cfg_setbool(cfg_t *cfg,
const char *name,
00942 cfg_bool_t value);
00943
00953 DLLIMPORT
void __export cfg_setnbool(cfg_t *cfg,
const char *name,
00954 cfg_bool_t value,
unsigned int index);
00955
00965 DLLIMPORT
void __export cfg_opt_setnstr(cfg_opt_t *opt,
00966
const char *value,
unsigned int index);
00967
00976 DLLIMPORT
void __export cfg_setstr(cfg_t *cfg,
const char *name,
00977
const char *value);
00978
00989 DLLIMPORT
void __export cfg_setnstr(cfg_t *cfg,
const char *name,
00990
const char *value,
unsigned int index);
00991
01002 DLLIMPORT
void __export cfg_setlist(cfg_t *cfg,
const char *name,
01003
unsigned int nvalues, ...);
01004
01005
01016 DLLIMPORT
void __export cfg_addlist(cfg_t *cfg,
const char *name,
01017
unsigned int nvalues, ...);
01018
01031 DLLIMPORT
void cfg_opt_nprint_var(cfg_opt_t *opt,
unsigned int index,
01032 FILE *fp);
01033
01038 DLLIMPORT
void cfg_opt_print_indent(cfg_opt_t *opt, FILE *fp,
int indent);
01039
01050 DLLIMPORT
void cfg_opt_print(cfg_opt_t *opt, FILE *fp);
01051
01056 DLLIMPORT
void cfg_print_indent(cfg_t *cfg, FILE *fp,
int indent);
01057
01071 DLLIMPORT
void cfg_print(cfg_t *cfg, FILE *fp);
01072
01080 DLLIMPORT
cfg_print_func_t cfg_opt_set_print_func(cfg_opt_t *opt,
01081 cfg_print_func_t pf);
01082
01091 DLLIMPORT
cfg_print_func_t cfg_set_print_func(cfg_t *cfg,
const char *name,
01092 cfg_print_func_t pf);
01093
01102 DLLIMPORT
cfg_validate_callback_t cfg_set_validate_func(cfg_t *cfg,
01103
const char *name,
01104 cfg_validate_callback_t vf);
01105
01106
#ifdef __cplusplus
01107
}
01108
#endif
01109
01110
#endif
01111