#pragma once // Max length of line in config file. #define MAX_CONF_LEN 1024 // Supported config value-types. enum cf_type_t { CF_NONE = 0, CF_INT, CF_BOOL, CF_STR, CF_PATH, }; struct option_t { char *name; // option name cf_type_t type; // option type void *dest; // addr of destination variable, or handler function char *init; // initial value, as a string, just as config file would }; class MConfig { public: MConfig(); void init(option_t *global_options); bool load(const char *filename); bool set(const char *key, const char *value) const; void show() const; void set_directory(); const char *directory() const; int m_debuglevel; // to use for meta_debug char *m_gamedll; // string if specified in config.ini char *m_exec_cfg; // ie exec.cfg int m_clientmeta; private: option_t *m_list; char *m_filename; char m_directory[MAX_PATH]; option_t *find(const char *lookup) const; static bool set(option_t *setp, const char *value); }; inline const char *MConfig::directory() const { return m_directory; }