void SaveConfiguration(const wchar *fname, const void *struct_base, const S_config_store_type *vals){ C_file fl; if(!fl.Open(fname, C_file::FILE_WRITE|C_file::FILE_WRITE_CREATE_PATH)){ return; } const byte *base = (byte*)struct_base; while(vals->type){ switch(vals->type){ case S_config_store_type::TYPE_DWORD: WriteConfigLine(fl, vals->name, *(dword*)(base+vals->offset)); break; case S_config_store_type::TYPE_WORD: WriteConfigLine(fl, vals->name, *(word*)(base+vals->offset)); break; case S_config_store_type::TYPE_BYTE: WriteConfigLine(fl, vals->name, *(base+vals->offset)); break; case S_config_store_type::TYPE_CSTR_W: WriteConfigLine(fl, vals->name, *(Cstr_w*)(base+vals->offset)); break; case S_config_store_type::TYPE_CSTR_C: WriteConfigLine(fl, vals->name, *(Cstr_c*)(base+vals->offset)); break; case S_config_store_type::TYPE_NEXT_VALS: vals = (S_config_store_type*)vals->offset; continue; default: assert(0); } ++vals; } }
int gxConfig::ChangeConfigValue(const gxString &parm, const gxString &value) // Modify the config file. NOTE: All parameter values should not contain // a parameter ID label at the end of the string. The parameter ID label // will be added to mark it as a config file parameter. By default an // equal sign will be used as a parameter ID. { int rv = ChangeConfigLine(parm, value, 1, 1); // Write the parameter if it does not exist if(!rv) return WriteConfigLine(parm, value); return rv; }
int gxConfig::WriteConfigLine(const char *parm, const char *value) { gxString p(parm); gxString v(value); return WriteConfigLine(p, v); }
//---------------------------- static void WriteConfigLine(C_file &fl, const char *attr, const wchar *val){ Cstr_c tmp; tmp.ToUtf8(val); WriteConfigLine(fl, attr, tmp); }
//---------------------------- static void WriteConfigLine(C_file &fl, const char *attr, int val){ Cstr_c s; s<<val; WriteConfigLine(fl, attr, s); }