/* * Copyright © 2005 William Pitcock, et al. * Rights to this code are as documented in doc/pod/license.pod. * * Data structures for flags to bitmask processing routines. * * $Id: confparse.h,v 1.5 2007/09/09 20:05:51 pippijn Exp $ */ #ifndef CONFPARSE_H #define CONFPARSE_H #include #include #include struct config_file_t : zero_initialised { char *cf_filename; config_entry_t *cf_entries; config_file_t *cf_next; }; struct config_entry_t : zero_initialised { config_file_t *ce_fileptr; int ce_varlinenum; char *ce_varname; char *ce_vardata; int ce_vardatanum; int ce_fileposstart; int ce_fileposend; int ce_sectlinenum; config_entry_t *ce_entries; config_entry_t *ce_prevlevel; config_entry_t *ce_next; bool valid () { return ce_vardata != NULL; } template T vardata () { return vardata (types::get ()); } private: char *vardata (types::charptr_type) { return ce_vardata; } int vardata (types::int_type) { return ce_vardatanum; } }; struct Token { char const * const text; int const value; }; class ConfTable { struct callbacks { functor::callback0<> ready; }; public: // typedefs unsigned index; typedef indexing_vector list_type; public: // variables char const * const name; int const rehashable; int (*handler) (config_entry_t *); char *str_val; int *int_val; static callbacks callback; ConfTable (char const * const blockname, int const can_rehash, int (*handlerfunc) (config_entry_t *)) : name (blockname), rehashable (can_rehash), handler (handlerfunc), str_val (0), int_val (0) { } }; E void init_newconf (void); E void deinit_conf (void); E struct ConfTable *find_top_conf (char const * const name); E struct ConfTable *find_conf_item (char const * const name, ConfTable::list_type &conflist); E void add_top_conf (char const * const name, int (*handler) (config_entry_t *ce)); E void add_conf_item (char const * const name, ConfTable::list_type &conflist, int (*handler) (config_entry_t *ce)); E void del_top_conf (char const * const name); E void del_conf_item (char const * const name, ConfTable::list_type &conflist); E int subblock_handler (config_entry_t *ce, ConfTable::list_type &entries); #endif