improved registry handling

This commit is contained in:
Ken Martin 2001-09-25 14:39:32 -04:00
parent b502515ad1
commit 1c283ee037

View File

@ -71,10 +71,10 @@ CMakeSetupDialog::CMakeSetupDialog(const CMakeCommandLineInfo& cmdInfo,
m_RegistryKey = "Software\\Kitware\\CMakeSetup\\Settings\\StartPath"; m_RegistryKey = "Software\\Kitware\\CMakeSetup\\Settings\\StartPath";
//{{AFX_DATA_INIT(CMakeSetupDialog) //{{AFX_DATA_INIT(CMakeSetupDialog)
m_WhereSource = cmdInfo.m_WhereSource; m_WhereSource = cmdInfo.m_WhereSource;
m_WhereBuild = cmdInfo.m_WhereBuild; m_WhereBuild = cmdInfo.m_WhereBuild;
m_GeneratorChoiceString = _T(""); m_GeneratorChoiceString = _T("");
//}}AFX_DATA_INIT //}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_BuildPathChanged = false; m_BuildPathChanged = false;
@ -271,49 +271,80 @@ void CMakeSetupDialog::SaveToRegistry()
} }
else else
{ {
// load some values // save some values
CString regvalue; CString regvalue;
this->ReadRegistryValue(hKey, &(regvalue),"WhereSource","C:\\"); this->ReadRegistryValue(hKey, &(regvalue),"WhereSource1","C:\\");
int shiftEnd = 9;
if(m_WhereSource != regvalue) if(m_WhereSource != regvalue)
{ {
regvalue = ""; char keyName[1024];
this->ReadRegistryValue(hKey, &(regvalue),"WhereSource3",""); char keyName2[1024];
RegSetValueEx(hKey, _T("WhereSource4"), 0, REG_SZ, int i;
(CONST BYTE *)(const char *)regvalue, for (i = 2; i < 10; ++i)
regvalue.GetLength()); {
regvalue = ""; regvalue = "";
this->ReadRegistryValue(hKey, &(regvalue),"WhereSource2",""); sprintf(keyName,"WhereSource%i",i);
RegSetValueEx(hKey, _T("WhereSource3"), 0, REG_SZ, this->ReadRegistryValue(hKey, &(regvalue),keyName,"");
(CONST BYTE *)(const char *)regvalue, // check for short circuit, if the new value is already in
regvalue.GetLength()); // the list then we stop
regvalue = ""; if (m_WhereSource == regvalue)
this->ReadRegistryValue(hKey, &(regvalue),"WhereSource",""); {
RegSetValueEx(hKey, _T("WhereSource2"), 0, REG_SZ, shiftEnd = i - 1;
(CONST BYTE *)(const char *)regvalue, }
regvalue.GetLength()); }
RegSetValueEx(hKey, _T("WhereSource"), 0, REG_SZ,
for (i = shiftEnd; i; --i)
{
regvalue = "";
sprintf(keyName,"WhereSource%i",i);
sprintf(keyName2,"WhereSource%i",i+1);
this->ReadRegistryValue(hKey, &(regvalue),keyName,"");
if (strlen(regvalue))
{
RegSetValueEx(hKey, _T(keyName2), 0, REG_SZ,
(CONST BYTE *)(const char *)regvalue,
regvalue.GetLength());
}
}
RegSetValueEx(hKey, _T("WhereSource1"), 0, REG_SZ,
(CONST BYTE *)(const char *)m_WhereSource, (CONST BYTE *)(const char *)m_WhereSource,
m_WhereSource.GetLength()); m_WhereSource.GetLength());
} }
this->ReadRegistryValue(hKey, &(regvalue),"WhereBuild","C:\\");
this->ReadRegistryValue(hKey, &(regvalue),"WhereBuild1","C:\\");
if(m_WhereBuild != regvalue) if(m_WhereBuild != regvalue)
{ {
regvalue = ""; int i;
this->ReadRegistryValue(hKey, &(regvalue),"WhereBuild3",""); char keyName[1024];
RegSetValueEx(hKey, _T("WhereBuild4"), 0, REG_SZ, char keyName2[1024];
(CONST BYTE *)(const char *)regvalue, for (i = 2; i < 10; ++i)
regvalue.GetLength()); {
regvalue = ""; regvalue = "";
this->ReadRegistryValue(hKey, &(regvalue),"WhereBuild2",""); sprintf(keyName,"WhereBuild%i",i);
RegSetValueEx(hKey, _T("WhereBuild3"), 0, REG_SZ, this->ReadRegistryValue(hKey, &(regvalue),keyName,"");
(CONST BYTE *)(const char *)regvalue, // check for short circuit, if the new value is already in
regvalue.GetLength()); // the list then we stop
regvalue = ""; if (m_WhereBuild == regvalue)
this->ReadRegistryValue(hKey, &(regvalue),"WhereBuild",""); {
RegSetValueEx(hKey, _T("WhereBuild2"), 0, REG_SZ, shiftEnd = i - 1;
(CONST BYTE *)(const char *)regvalue, }
regvalue.GetLength()); }
RegSetValueEx(hKey, _T("WhereBuild"), 0, REG_SZ, for (i = shiftEnd; i; --i)
{
regvalue = "";
sprintf(keyName,"WhereBuild%i",i);
sprintf(keyName2,"WhereBuild%i",i+1);
this->ReadRegistryValue(hKey, &(regvalue),keyName,"");
if (strlen(regvalue))
{
RegSetValueEx(hKey, _T(keyName2), 0, REG_SZ,
(CONST BYTE *)(const char *)regvalue,
regvalue.GetLength());
}
}
RegSetValueEx(hKey, _T("WhereBuild1"), 0, REG_SZ,
(CONST BYTE *)(const char *)m_WhereBuild, (CONST BYTE *)(const char *)m_WhereBuild,
m_WhereBuild.GetLength()); m_WhereBuild.GetLength());
} }
@ -360,35 +391,35 @@ void CMakeSetupDialog::LoadFromRegistry()
// load some values // load some values
if (m_WhereSource.IsEmpty()) if (m_WhereSource.IsEmpty())
{ {
this->ReadRegistryValue(hKey, &(m_WhereSource),"WhereSource","C:\\"); this->ReadRegistryValue(hKey, &(m_WhereSource),"WhereSource1","C:\\");
} }
if (m_WhereBuild.IsEmpty()) if (m_WhereBuild.IsEmpty())
{ {
this->ReadRegistryValue(hKey, &(m_WhereBuild),"WhereBuild","C:\\"); this->ReadRegistryValue(hKey, &(m_WhereBuild),"WhereBuild1","C:\\");
} }
m_WhereSourceControl.AddString(m_WhereSource); m_WhereSourceControl.AddString(m_WhereSource);
m_WhereBuildControl.AddString(m_WhereBuild); m_WhereBuildControl.AddString(m_WhereBuild);
char keyname[1024];
CString regvalue; CString regvalue;
this->ReadRegistryValue(hKey, &(regvalue),"WhereSource2","C:\\"); int i;
m_WhereSourceControl.AddString(regvalue); for (i = 2; i <= 10; ++i)
regvalue = ""; {
this->ReadRegistryValue(hKey, &(regvalue),"WhereBuild2","C:\\"); sprintf(keyname,"WhereSource%i",i);
m_WhereBuildControl.AddString(regvalue); regvalue = "";
this->ReadRegistryValue(hKey, &(regvalue),keyname,"C:\\");
regvalue = ""; if (strcmp("C:\\",regvalue))
this->ReadRegistryValue(hKey, &(regvalue),"WhereSource3","C:\\"); {
m_WhereSourceControl.AddString(regvalue); m_WhereSourceControl.AddString(regvalue);
regvalue = ""; }
this->ReadRegistryValue(hKey, &(regvalue),"WhereBuild3","C:\\"); sprintf(keyname,"WhereBuild%i",i);
m_WhereBuildControl.AddString(regvalue); regvalue = "";
this->ReadRegistryValue(hKey, &(regvalue),keyname,"C:\\");
regvalue = ""; if (strcmp("C:\\",regvalue))
this->ReadRegistryValue(hKey, &(regvalue),"WhereSource4","C:\\"); {
m_WhereSourceControl.AddString(regvalue); m_WhereBuildControl.AddString(regvalue);
regvalue = ""; }
this->ReadRegistryValue(hKey, &(regvalue),"WhereBuild4","C:\\"); }
m_WhereBuildControl.AddString(regvalue);
} }
RegCloseKey(hKey); RegCloseKey(hKey);
} }