diff options
Diffstat (limited to 'Src/pfc/cfg_var.cpp')
-rw-r--r-- | Src/pfc/cfg_var.cpp | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/Src/pfc/cfg_var.cpp b/Src/pfc/cfg_var.cpp new file mode 100644 index 00000000..58ca463e --- /dev/null +++ b/Src/pfc/cfg_var.cpp @@ -0,0 +1,138 @@ +#define STRICT +#include <windows.h> +#include "cfg_var.h" +#include "string_unicode.h" + +static const char *m_inifile, *m_section; + +int cfg_var::reg_read_int(HKEY hk,int def) +{ + + return GetPrivateProfileIntA(m_section,var_get_name(),def,m_inifile); +} + +void cfg_var::reg_write_int(HKEY hk,int val) +{ +/* long temp=val; + RegSetValueEx(hk,var_get_name(),0,REG_DWORD,(const BYTE*)&temp,4);*/ + char tmp[512] = {0}; + wsprintfA(tmp,"%d",val); + WritePrivateProfileStringA(m_section,var_get_name(),tmp,m_inifile); +} + +void cfg_var::reg_write_struct(HKEY hk,const void * ptr,UINT size) +{ + + WritePrivateProfileStructA(m_section,var_get_name(),(void *)ptr,size,m_inifile); +} + +bool cfg_var::reg_read_struct(HKEY hk,void * ptr,UINT size) +{ + GetPrivateProfileStructA(m_section,var_get_name(),ptr,size,m_inifile); + return 1; +} + +int cfg_var::reg_get_struct_size(HKEY hk) +{ + DWORD sz=0,t=0; + if (RegQueryValueExA(hk,var_get_name(),0,&t,0,&sz)!=ERROR_SUCCESS) return 0; + return sz; +} + +bool string_a::reg_read(HKEY hk,const char * name) +{ + char tmp[4096] = {0}; + GetPrivateProfileStringA(m_section,name,"|||",tmp,sizeof(tmp)-1,m_inifile); + if(strstr(tmp,"|||")==tmp) return 0; + lstrcpyA(buffer_get(strlen(tmp)+1),tmp); + buffer_done(); + return 1; +} + +void string_a::reg_write(HKEY hk,const char * name) +{ + WritePrivateProfileStringA(m_section,name,(const char*)*this,m_inifile); +} + + +cfg_var * cfg_var::list=0; + +/*HKEY cfg_var::reg_open(const char * regname) +{ + HKEY hk; + RegCreateKey(HKEY_CURRENT_USER,regname,&hk); + return hk; +}*/ + + +void cfg_var::config_read(const char *inifile, const char *section) +{ + HKEY hk = 0; //reg_open(regname); + m_inifile=inifile; + m_section=section; + cfg_var * ptr; + for(ptr = list; ptr; ptr=ptr->next) ptr->read(hk); + //RegCloseKey(hk); +} + +void cfg_var::config_write(const char *inifile, const char *section) +{ + HKEY hk = 0; //reg_open(regname); + m_inifile=inifile; + m_section=section; + cfg_var * ptr; + for(ptr = list; ptr; ptr=ptr->next) ptr->write(hk); + //RegCloseKey(hk); +} + +void cfg_var::config_reset() +{ + cfg_var * ptr; + for(ptr = list; ptr; ptr=ptr->next) ptr->reset(); +} + +void cfg_int::read(HKEY hk) +{ + val = reg_read_int(hk,def); +} + +void cfg_int::write(HKEY hk) +{ + if (val!=reg_read_int(hk,def)) + reg_write_int(hk,val); +} + +void cfg_string::read(HKEY hk) +{ + string_a temp; + if (temp.reg_read(hk,var_get_name())) val=temp; +} + +void cfg_string::write(HKEY hk) +{ + string_a temp = def; + string_a name = var_get_name(); + + if (!temp.reg_read(hk,name) || lstrcmpA(val,temp)) + val.reg_write(hk,name); +} + +#ifdef PFC_UNICODE + +void cfg_string_w::read(HKEY hk) +{ + string_w temp; + if (temp.reg_read(hk,string_w(var_get_name()))) val=temp; +} + +void cfg_string_w::write(HKEY hk) +{ + string_w temp = def; + string_w name = var_get_name(); + string_w val_w = val; + + if (!temp.reg_read(hk,name) || wcscmp(val_w,temp)) + val_w.reg_write(hk,name); +} + +#endif
\ No newline at end of file |