summaryrefslogtreecommitdiffstats
path: root/Src/pfc/cfg_var.cpp
blob: 58ca463e0df6f5f9951570ac7e4d4fd59e01f30d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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