aboutsummaryrefslogtreecommitdiff
path: root/Src/pfc/cfg_var.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/pfc/cfg_var.cpp')
-rw-r--r--Src/pfc/cfg_var.cpp138
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