138 lines
2.8 KiB
C++
138 lines
2.8 KiB
C++
#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 |