eliminate the dupe copies of things in smpackage (registry, RageUtil) and share some of the directory logic
This commit is contained in:
+16
-17
@@ -1,11 +1,10 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 8.00
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZipArchive", "ZipArchive\ZipArchive-net2003.vcproj", "{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smpackage", "smpackage-net2003.vcproj", "{6B369A92-8DDF-487C-A589-614987544197}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "smpackage", "smpackage-net2003.vcproj", "{6B369A92-8DDF-487C-A589-614987544197}"
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZipArchive", "smpackage\ZipArchive\ZipArchive-net2003.vcproj", "{F8FE2773-87CB-402F-8DC8-A80837C3E24C}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1} = {A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
@@ -19,20 +18,6 @@ Global
|
||||
Unicode Static Release = Unicode Static Release
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfiguration) = postSolution
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Debug.ActiveCfg = Debug|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Debug.Build.0 = Debug|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Release.ActiveCfg = Release|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Release.Build.0 = Release|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Static Debug.ActiveCfg = Static Debug|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Static Debug.Build.0 = Static Debug|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Static Release.ActiveCfg = Static Release|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Static Release.Build.0 = Static Release|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Unicode Debug.ActiveCfg = Unicode Debug|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Unicode Debug.Build.0 = Unicode Debug|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Unicode Release.ActiveCfg = Unicode Release|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Unicode Release.Build.0 = Unicode Release|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Unicode Static Release.ActiveCfg = Unicode Static Release|Win32
|
||||
{A72BC5D6-08F5-453F-B8D2-1278A6DF60A1}.Unicode Static Release.Build.0 = Unicode Static Release|Win32
|
||||
{6B369A92-8DDF-487C-A589-614987544197}.Debug.ActiveCfg = Debug|Win32
|
||||
{6B369A92-8DDF-487C-A589-614987544197}.Debug.Build.0 = Debug|Win32
|
||||
{6B369A92-8DDF-487C-A589-614987544197}.Release.ActiveCfg = Release|Win32
|
||||
@@ -47,6 +32,20 @@ Global
|
||||
{6B369A92-8DDF-487C-A589-614987544197}.Unicode Release.Build.0 = Release|Win32
|
||||
{6B369A92-8DDF-487C-A589-614987544197}.Unicode Static Release.ActiveCfg = Release|Win32
|
||||
{6B369A92-8DDF-487C-A589-614987544197}.Unicode Static Release.Build.0 = Release|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Debug.ActiveCfg = Debug|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Debug.Build.0 = Debug|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Release.ActiveCfg = Release|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Release.Build.0 = Release|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Static Debug.ActiveCfg = Static Debug|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Static Debug.Build.0 = Static Debug|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Static Release.ActiveCfg = Static Release|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Static Release.Build.0 = Static Release|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Unicode Debug.ActiveCfg = Unicode Debug|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Unicode Debug.Build.0 = Unicode Debug|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Unicode Release.ActiveCfg = Unicode Release|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Unicode Release.Build.0 = Unicode Release|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Unicode Static Release.ActiveCfg = Unicode Static Release|Win32
|
||||
{F8FE2773-87CB-402F-8DC8-A80837C3E24C}.Unicode Static Release.Build.0 = Unicode Static Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
EndGlobalSection
|
||||
@@ -0,0 +1,328 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="smpackage"
|
||||
ProjectGUID="{67179F21-52DD-42E7-A797-67DBEAF9F4F4}"
|
||||
SccProjectName=""
|
||||
SccLocalPath=""
|
||||
Keyword="MFCProj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="../Program"
|
||||
IntermediateDirectory=".\Debug"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="2"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=".;"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="global.h"
|
||||
PrecompiledHeaderFile=".\Debug-smpackage/smpackage.pch"
|
||||
AssemblerListingLocation=".\../Debug-smpackage/"
|
||||
ObjectFile=".\../Debug-smpackage/"
|
||||
ProgramDataBaseFileName=".\../Debug-smpackage/"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="4"
|
||||
SuppressStartupBanner="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="../../Program/tools-debug.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile=".\../../Program/smpackage-debug.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MkTypLibCompatible="TRUE"
|
||||
SuppressStartupBanner="TRUE"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\../../Program/smpackage.tlb"
|
||||
HeaderFileName=""/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1033"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="../Program"
|
||||
IntermediateDirectory=".\Release"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="2"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
AdditionalIncludeDirectories=";"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="TRUE"
|
||||
UsePrecompiledHeader="2"
|
||||
PrecompiledHeaderThrough="global.h"
|
||||
PrecompiledHeaderFile=".\Release-smpackage/smpackage.pch"
|
||||
AssemblerListingLocation=".\../Release-smpackage/"
|
||||
ObjectFile=".\../Release-smpackage/"
|
||||
ProgramDataBaseFileName=".\../Release-smpackage/"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="4"
|
||||
SuppressStartupBanner="TRUE"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ZipArchive\Release\ZipArchive.lib"
|
||||
OutputFile=".\../../Program/tools.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
ProgramDatabaseFile=".\../../Program/smpackage.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
MkTypLibCompatible="TRUE"
|
||||
SuppressStartupBanner="TRUE"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\../../Program/smpackage.tlb"
|
||||
HeaderFileName=""/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1033"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="smpackage"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\smpackage\ChangeGameSettings.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\ChangeGameSettings.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\EditInsallations.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\EditInsallations.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\EditMetricsDlg.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\EditMetricsDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\EnterComment.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\EnterComment.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\EnterName.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\EnterName.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\MainMenuDlg.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\MainMenuDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\onvertThemeDlg.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\onvertThemeDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\resource.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\ShowComment.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\ShowComment.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\smpackage.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\smpackage.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\SmpackageExportDlg.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\SmpackageExportDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\SMPackageInstallDlg.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\SMPackageInstallDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\SMPackageUtil.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\smpackageUtil.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\StdAfx.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\StdAfx.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\TreeCtrlEx.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\TreeCtrlEx.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\UninstallOld.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\smpackage\UninstallOld.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resources"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath="converttheme.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="editmetrics.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="install.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="manage.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="menu.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="res\smpackage.ico">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="smpackage.ICO">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="smpackage.rc">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="res\smpackage.rc2">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="res\StepMania.ICO">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="StepMania"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\global.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\global.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\ProductInfo.h">
|
||||
</File>
|
||||
<Filter
|
||||
Name="system">
|
||||
<File
|
||||
RelativePath=".\archutils\Win32\RegistryAccess.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\archutils\Win32\RegistryAccess.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\archutils\Win32\SpecialDirs.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\archutils\Win32\SpecialDirs.h">
|
||||
</File>
|
||||
</Filter>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Rage"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath=".\RageLog.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\RageLog.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath="..\zlib\zdll.lib">
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
<Global
|
||||
Name="RESOURCE_FILE"
|
||||
Value="smpackage.rc"/>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
@@ -1,319 +0,0 @@
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
File: IniFile.h
|
||||
|
||||
Desc: Wrapper for reading and writing an .ini file.
|
||||
|
||||
Copyright (c) 2001-2002 by the persons listed below. All rights reserved.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "IniFile.h"
|
||||
#include "RageUtil.h"
|
||||
|
||||
|
||||
//constructor, can specify pathname here instead of using SetPath later
|
||||
IniFile::IniFile(CString inipath)
|
||||
{
|
||||
path = inipath;
|
||||
}
|
||||
|
||||
//default destructor
|
||||
IniFile::~IniFile()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// sets path of ini file to read and write from
|
||||
void IniFile::SetPath(CString newpath)
|
||||
{
|
||||
path = newpath;
|
||||
}
|
||||
|
||||
|
||||
void IniFile::ReadBuf( const CString &buf )
|
||||
{
|
||||
CString keyname;
|
||||
CStringArray lines;
|
||||
split(buf, "\n", lines, true);
|
||||
for( unsigned i = 0; i < lines.size(); ++i )
|
||||
{
|
||||
CString line = lines[i];
|
||||
|
||||
if(line.GetLength() >= 3 &&
|
||||
line[0] == '\xef' &&
|
||||
line[1] == '\xbb' &&
|
||||
line[2] == '\xbf'
|
||||
)
|
||||
{
|
||||
/* Obnoxious NT marker for UTF-8. Remove it. */
|
||||
line.Delete(0, 3);
|
||||
}
|
||||
|
||||
StripCrnl(line);
|
||||
|
||||
if( line.IsEmpty() )
|
||||
continue;
|
||||
if ((line.GetLength() >= 2 && line[0] == '/' && line[1] == '/') )
|
||||
continue; /* comment */
|
||||
if( line[0] == '#')
|
||||
continue; /* comment */
|
||||
|
||||
if (line[0] == '[' && line[line.GetLength()-1] == ']') //if a section heading
|
||||
{
|
||||
keyname = line;
|
||||
keyname.Delete(0);
|
||||
keyname.Delete(keyname.GetLength()-1);
|
||||
}
|
||||
else //if a value
|
||||
{
|
||||
int iEqualIndex = line.Find("=");
|
||||
if( iEqualIndex != -1 )
|
||||
{
|
||||
CString valuename = line.Left(iEqualIndex);
|
||||
CString value = line.Right(line.GetLength()-valuename.GetLength()-1);
|
||||
SetValue(keyname,valuename,value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void IniFile::WriteBuf( CString &buf ) const
|
||||
{
|
||||
buf = "";
|
||||
for (keymap::const_iterator k = keys.begin(); k != keys.end(); ++k)
|
||||
{
|
||||
if (k->second.empty())
|
||||
continue;
|
||||
|
||||
buf += ssprintf( "[%s]\r\n", (const char *) k->first );
|
||||
|
||||
for (key::const_iterator i = k->second.begin(); i != k->second.end(); ++i)
|
||||
buf += ssprintf( "%s=%s\r\n", (const char *)i->first, (const char *)i->second );
|
||||
|
||||
buf += ssprintf( "\r\n" );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// reads ini file specified using IniFile::SetPath()
|
||||
// returns true if successful, false otherwise
|
||||
bool IniFile::ReadFile()
|
||||
{
|
||||
FILE *f = fopen(path, "rb");
|
||||
|
||||
if (f == NULL)
|
||||
{
|
||||
error = ssprintf("Unable to open ini file: %s", strerror(errno));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int size = GetFileSizeInBytes(path);
|
||||
char *buf = new char[size+1];
|
||||
int ret = fread(buf, 1, size, f);
|
||||
if ( ret != size )
|
||||
{
|
||||
if( ferror(f) )
|
||||
error = ssprintf("Unable to read ini file: %s", strerror(errno));
|
||||
else
|
||||
error = ssprintf("Unexpected eof in INI");
|
||||
delete[] buf;
|
||||
fclose(f);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
ReadBuf(buf);
|
||||
|
||||
delete[] buf;
|
||||
fclose(f);
|
||||
return true;
|
||||
}
|
||||
|
||||
// writes data stored in class to ini file
|
||||
void IniFile::WriteFile()
|
||||
{
|
||||
CString buf;
|
||||
WriteBuf( buf );
|
||||
FILE* fp = fopen( path, "wb" );
|
||||
|
||||
if( fp == NULL )
|
||||
return;
|
||||
|
||||
fwrite(buf.GetBuffer(0), buf.GetLength(), 1, fp);
|
||||
fclose( fp );
|
||||
}
|
||||
|
||||
// deletes all stored ini data
|
||||
void IniFile::Reset()
|
||||
{
|
||||
keys.clear();
|
||||
}
|
||||
|
||||
// returns number of keys currently in the ini
|
||||
int IniFile::GetNumKeys() const
|
||||
{
|
||||
return keys.size();
|
||||
}
|
||||
|
||||
// returns number of values stored for specified key, or -1 if key not found
|
||||
int IniFile::GetNumValues(const CString &keyname) const
|
||||
{
|
||||
keymap::const_iterator k = keys.find(keyname);
|
||||
if (k == keys.end())
|
||||
return -1;
|
||||
|
||||
return k->second.size();
|
||||
}
|
||||
|
||||
// gets value of [keyname] valuename =
|
||||
bool IniFile::GetValue(const CString &keyname, const CString &valuename, CString& value) const
|
||||
{
|
||||
keymap::const_iterator k = keys.find(keyname);
|
||||
if (k == keys.end())
|
||||
{
|
||||
error = "Unable to locate specified key.";
|
||||
return false;
|
||||
}
|
||||
|
||||
key::const_iterator i = k->second.find(valuename);
|
||||
|
||||
if (i == k->second.end())
|
||||
{
|
||||
error = "Unable to locate specified value.";
|
||||
return false;
|
||||
}
|
||||
|
||||
value = i->second;
|
||||
return true;
|
||||
}
|
||||
|
||||
// gets value of [keyname] valuename =
|
||||
bool IniFile::GetValueI(const CString &keyname, const CString &valuename, int& value) const
|
||||
{
|
||||
CString sValue;
|
||||
if( !GetValue(keyname,valuename,sValue) )
|
||||
return false;
|
||||
sscanf( sValue, "%d", &value );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IniFile::GetValueU(const CString &keyname, const CString &valuename, unsigned &value) const
|
||||
{
|
||||
CString sValue;
|
||||
if( !GetValue(keyname,valuename,sValue) )
|
||||
return false;
|
||||
sscanf( sValue, "%u", &value );
|
||||
return true;
|
||||
}
|
||||
|
||||
// gets value of [keyname] valuename =
|
||||
bool IniFile::GetValueF(const CString &keyname, const CString &valuename, float& value) const
|
||||
{
|
||||
CString sValue;
|
||||
if( !GetValue(keyname,valuename,sValue) )
|
||||
return false;
|
||||
sscanf( sValue, "%f", &value );
|
||||
return true;
|
||||
}
|
||||
|
||||
// gets value of [keyname] valuename =
|
||||
bool IniFile::GetValueB(const CString &keyname, const CString &valuename, bool& value) const
|
||||
{
|
||||
CString sValue;
|
||||
if( !GetValue(keyname,valuename,sValue) )
|
||||
return false;
|
||||
value = atoi(sValue) != 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
// sets value of [keyname] valuename =.
|
||||
// specify the optional paramter as false (0) if you do not want it to create
|
||||
// the key if it doesn't exist. Returns true if data entered, false otherwise
|
||||
bool IniFile::SetValue(const CString &keyname, const CString &valuename, const CString &value, bool create)
|
||||
{
|
||||
if (!create && keys.find(keyname) == keys.end()) //if key doesn't exist
|
||||
return false; // stop entering this key
|
||||
|
||||
// find value
|
||||
if (!create && keys[keyname].find(valuename) == keys[keyname].end())
|
||||
return false;
|
||||
|
||||
keys[keyname][valuename] = value;
|
||||
return true;
|
||||
}
|
||||
|
||||
// sets value of [keyname] valuename =.
|
||||
// specify the optional paramter as false (0) if you do not want it to create
|
||||
// the key if it doesn't exist. Returns true if data entered, false otherwise
|
||||
bool IniFile::SetValueI(const CString &keyname, const CString &valuename, int value, bool create)
|
||||
{
|
||||
return SetValue(keyname, valuename, ssprintf("%d",value), create);
|
||||
}
|
||||
|
||||
bool IniFile::SetValueU(const CString &keyname, const CString &valuename, unsigned value, bool create)
|
||||
{
|
||||
return SetValue(keyname, valuename, ssprintf("%u",value), create);
|
||||
}
|
||||
|
||||
bool IniFile::SetValueF(const CString &keyname, const CString &valuename, float value, bool create)
|
||||
{
|
||||
return SetValue(keyname, valuename, ssprintf("%f",value), create);
|
||||
}
|
||||
|
||||
bool IniFile::SetValueB(const CString &keyname, const CString &valuename, bool value, bool create)
|
||||
{
|
||||
return SetValue(keyname, valuename, ssprintf("%d",value), create);
|
||||
}
|
||||
|
||||
// deletes specified value
|
||||
// returns true if value existed and deleted, false otherwise
|
||||
bool IniFile::DeleteValue(const CString &keyname, const CString &valuename)
|
||||
{
|
||||
keymap::iterator k = keys.find(keyname);
|
||||
if (k == keys.end())
|
||||
return false;
|
||||
|
||||
key::iterator i = k->second.find(valuename);
|
||||
if(i == k->second.end())
|
||||
return false;
|
||||
|
||||
k->second.erase(i);
|
||||
return true;
|
||||
}
|
||||
|
||||
// deletes specified key and all values contained within
|
||||
// returns true if key existed and deleted, false otherwise
|
||||
bool IniFile::DeleteKey(const CString &keyname)
|
||||
{
|
||||
keymap::iterator k = keys.find(keyname);
|
||||
if (k == keys.end())
|
||||
return false;
|
||||
|
||||
keys.erase(k);
|
||||
return true;
|
||||
}
|
||||
|
||||
const IniFile::key *IniFile::GetKey(const CString &keyname) const
|
||||
{
|
||||
keymap::const_iterator i = keys.find(keyname);
|
||||
if(i == keys.end()) return NULL;
|
||||
return &i->second;
|
||||
}
|
||||
|
||||
void IniFile::SetValue(const CString &keyname, const key &key)
|
||||
{
|
||||
keys[keyname]=key;
|
||||
}
|
||||
|
||||
void IniFile::RenameKey(const CString &from, const CString &to)
|
||||
{
|
||||
if(keys.find(from) == keys.end())
|
||||
return;
|
||||
if(keys.find(to) != keys.end())
|
||||
return;
|
||||
|
||||
keys[to] = keys[from];
|
||||
keys.erase(from);
|
||||
}
|
||||
@@ -1,111 +0,0 @@
|
||||
#ifndef INIFILE_H
|
||||
#define INIFILE_H
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
Class: IniFile
|
||||
|
||||
Desc: Wrapper for reading and writing an .ini file.
|
||||
|
||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||
Adam Clauss
|
||||
Chris Danford
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <map>
|
||||
using namespace std;
|
||||
|
||||
class IniFile
|
||||
{
|
||||
public:
|
||||
// all keys are of this type
|
||||
|
||||
typedef map<CString, CString> key;
|
||||
typedef map<CString, key> keymap;
|
||||
|
||||
typedef keymap::const_iterator const_iterator;
|
||||
const_iterator begin() const { return keys.begin(); }
|
||||
const_iterator end() const { return keys.end(); }
|
||||
|
||||
private:
|
||||
//stores pathname of ini file to read/write
|
||||
CString path;
|
||||
|
||||
// keys in ini
|
||||
keymap keys;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//will contain error info if one occurs
|
||||
//ended up not using much, just in ReadFile and GetValue
|
||||
mutable CString error;
|
||||
|
||||
//constructor, can specify pathname here instead of using SetPath later
|
||||
IniFile(CString inipath = "");
|
||||
|
||||
//default destructor
|
||||
virtual ~IniFile();
|
||||
|
||||
//sets path of ini file to read and write from
|
||||
void SetPath(CString newpath);
|
||||
CString GetPath() const { return path; }
|
||||
|
||||
//reads ini file specified using IniFile::SetPath()
|
||||
//returns true if successful, false otherwise
|
||||
bool ReadFile();
|
||||
|
||||
//writes data stored in class to ini file
|
||||
void WriteFile();
|
||||
|
||||
void ReadBuf( const CString &buf );
|
||||
void WriteBuf( CString &buf ) const;
|
||||
|
||||
//deletes all stored ini data
|
||||
void Reset();
|
||||
|
||||
//returns number of keys currently in the ini
|
||||
int GetNumKeys() const;
|
||||
|
||||
//returns number of values stored for specified key
|
||||
int GetNumValues(const CString &keyname) const;
|
||||
|
||||
//gets value of [keyname] valuename =
|
||||
//returns "", or 0 if key/value not found. Sets error member to show problem
|
||||
bool GetValue(const CString &key, const CString &valuename, CString& value) const;
|
||||
bool GetValueI(const CString &key, const CString &valuename, int& value) const;
|
||||
bool GetValueU(const CString &key, const CString &valuename, unsigned& value) const;
|
||||
bool GetValueF(const CString &key, const CString &valuename, float& value) const;
|
||||
bool GetValueB(const CString &key, const CString &valuename, bool& value) const;
|
||||
bool GetValue(const CString &key, const CString &valuename, int& value) const { return GetValueI(key, valuename, value); }
|
||||
bool GetValue(const CString &key, const CString &valuename, float& value) const { return GetValueF(key, valuename, value); }
|
||||
bool GetValue(const CString &key, const CString &valuename, bool& value) const { return GetValueB(key, valuename, value); }
|
||||
|
||||
//sets value of [keyname] valuename =.
|
||||
//specify the optional paramter as false (0) if you do not want it to create
|
||||
//the key if it doesn't exist. Returns true if data entered, false otherwise
|
||||
bool SetValue(const CString &key, const CString &valuename, const CString &value, bool create = 1);
|
||||
bool SetValueI(const CString &key, const CString &valuename, int value, bool create = 1);
|
||||
bool SetValueU(const CString &key, const CString &valuename, unsigned value, bool create = 1);
|
||||
bool SetValueF(const CString &key, const CString &valuename, float value, bool create = 1);
|
||||
bool SetValueB(const CString &key, const CString &valuename, bool value, bool create = 1);
|
||||
bool SetValue(const CString &key, const CString &valuename, int value, bool create = 1) { return SetValueI(key, valuename, value, create); }
|
||||
|
||||
//deletes specified value
|
||||
//returns true if value existed and deleted, false otherwise
|
||||
bool DeleteValue(const CString &keyname, const CString &valuename);
|
||||
|
||||
//deletes specified key and all values contained within
|
||||
//returns true if key existed and deleted, false otherwise
|
||||
bool DeleteKey(const CString &keyname);
|
||||
|
||||
const key *GetKey(const CString &keyname) const;
|
||||
void SetValue(const CString &keyname, const key &key);
|
||||
|
||||
/* Rename a key. For example, call RenameKey("foo", "main") after
|
||||
* reading an INI where [foo] is an alias to [main]. If to already
|
||||
* exists, nothing happens. */
|
||||
void RenameKey(const CString &from, const CString &to);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,623 +0,0 @@
|
||||
#include "stdafx.h"
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
File: RageUtil
|
||||
|
||||
Desc: See header.
|
||||
|
||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||
Chris Danford
|
||||
Peter S. May (GetHashForString implementation)
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "RageUtil.h"
|
||||
#include <algorithm>
|
||||
|
||||
ULONG randseed = time(NULL);
|
||||
|
||||
|
||||
|
||||
bool IsAnInt( LPCTSTR s )
|
||||
{
|
||||
if( strlen(s) == 0 )
|
||||
return false;
|
||||
|
||||
for( UINT i=0; i<strlen(s); i++ )
|
||||
if( s[i] < '0' || s[i] > '9' )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
float TimeToSeconds( CString sHMS )
|
||||
{
|
||||
CStringArray arrayBits;
|
||||
split( sHMS, ":", arrayBits, false );
|
||||
|
||||
while( arrayBits.size() < 3 )
|
||||
arrayBits.insert(arrayBits.begin(), "0" ); // pad missing bits
|
||||
|
||||
float fSeconds = 0;
|
||||
fSeconds += atoi( arrayBits[0] ) * 60 * 60;
|
||||
fSeconds += atoi( arrayBits[1] ) * 60;
|
||||
fSeconds += (float)atof( arrayBits[2] );
|
||||
|
||||
return fSeconds;
|
||||
}
|
||||
|
||||
CString SecondsToTime( float fSecs )
|
||||
{
|
||||
int iMinsDisplay = (int)fSecs/60;
|
||||
int iSecsDisplay = (int)fSecs - iMinsDisplay*60;
|
||||
int iLeftoverDisplay = int( (fSecs - iMinsDisplay*60 - iSecsDisplay) * 100 );
|
||||
return ssprintf( "%02d:%02d:%02d", iMinsDisplay, iSecsDisplay, iLeftoverDisplay );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: ssprintf()
|
||||
// Desc:
|
||||
//-----------------------------------------------------------------------------
|
||||
CString ssprintf( LPCTSTR fmt, ...)
|
||||
{
|
||||
va_list va;
|
||||
va_start(va, fmt);
|
||||
return vssprintf(fmt, va);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: vssprintf()
|
||||
// Desc:
|
||||
//-----------------------------------------------------------------------------
|
||||
CString vssprintf( LPCTSTR fmt, va_list argList)
|
||||
{
|
||||
CString str;
|
||||
str.FormatV(fmt, argList);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: join()
|
||||
// Desc:
|
||||
//-----------------------------------------------------------------------------
|
||||
CString join( const CString &Deliminator, const CStringArray& Source)
|
||||
{
|
||||
if( Source.empty() )
|
||||
return "";
|
||||
|
||||
CString csTmp;
|
||||
|
||||
// Loop through the Array and Append the Deliminator
|
||||
for( unsigned iNum = 0; iNum < Source.size()-1; iNum++ ) {
|
||||
csTmp += Source[iNum];
|
||||
csTmp += Deliminator;
|
||||
}
|
||||
csTmp += Source.back();
|
||||
return csTmp;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: split()
|
||||
// Desc:
|
||||
//-----------------------------------------------------------------------------
|
||||
void split( const CString &Source, const CString &Deliminator, CStringArray& AddIt, const bool bIgnoreEmpty )
|
||||
{
|
||||
CString newCString;
|
||||
CString tmpCString;
|
||||
CString AddCString;
|
||||
|
||||
int pos1 = 0;
|
||||
int pos = 0;
|
||||
|
||||
newCString = Source;
|
||||
do {
|
||||
pos1 = 0;
|
||||
pos = newCString.Find(Deliminator, pos1);
|
||||
if ( pos != -1 ) {
|
||||
CString AddCString = newCString.Left(pos);
|
||||
if( newCString.IsEmpty() && bIgnoreEmpty )
|
||||
; // do nothing
|
||||
else
|
||||
AddIt.push_back(AddCString);
|
||||
|
||||
tmpCString = newCString.Mid(pos + Deliminator.GetLength());
|
||||
newCString = tmpCString;
|
||||
}
|
||||
} while ( pos != -1 );
|
||||
|
||||
if( newCString.IsEmpty() && bIgnoreEmpty )
|
||||
; // do nothing
|
||||
else
|
||||
AddIt.push_back(newCString);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: splitpath()
|
||||
// Desc:
|
||||
//-----------------------------------------------------------------------------
|
||||
void splitpath( const bool UsingDirsOnly, const CString &Path, CString& Drive, CString& Dir, CString& FName, CString& Ext )
|
||||
{
|
||||
|
||||
int nSecond;
|
||||
|
||||
// Look for a UNC Name!
|
||||
if (Path.Left(2) == "\\\\")
|
||||
{
|
||||
int nFirst = Path.Find("\\",3);
|
||||
nSecond = Path.Find("\\",nFirst + 1);
|
||||
if (nSecond == -1) {
|
||||
Drive = Path;
|
||||
Dir = "";
|
||||
FName = "";
|
||||
Ext = "";
|
||||
}
|
||||
else if (nSecond > nFirst)
|
||||
Drive = Path.Left(nSecond);
|
||||
}
|
||||
else if (Path.Mid(1,1) == ":" ) // normal Drive Structure
|
||||
{
|
||||
nSecond = 2;
|
||||
Drive = Path.Left(2);
|
||||
}
|
||||
else // no UNC or drive letter
|
||||
{
|
||||
nSecond = -1;
|
||||
}
|
||||
|
||||
|
||||
if (UsingDirsOnly) {
|
||||
Dir = Path.Right((Path.GetLength() - nSecond) - 1);
|
||||
FName = "";
|
||||
Ext = "";
|
||||
}
|
||||
else {
|
||||
int nDirEnd = Path.ReverseFind('\\');
|
||||
if (nDirEnd == Path.GetLength()) {
|
||||
Dir = "";
|
||||
FName = "";
|
||||
Ext = "";
|
||||
}
|
||||
else {
|
||||
|
||||
Dir = Path.Mid(nSecond + 1, (nDirEnd - nSecond) - 1);
|
||||
|
||||
int nFileEnd = Path.ReverseFind('.');
|
||||
if (nFileEnd != -1) {
|
||||
|
||||
if (nDirEnd > nFileEnd) {
|
||||
FName = Path.Right(Path.GetLength() - nDirEnd);
|
||||
Ext = "";
|
||||
}
|
||||
else {
|
||||
FName = Path.Mid(nDirEnd + 1, (nFileEnd - nDirEnd) - 1);
|
||||
Ext = Path.Right((Path.GetLength() - nFileEnd) - 1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
FName = Path.Right((Path.GetLength() - nDirEnd) - 1);
|
||||
Ext = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: splitpath()
|
||||
// Desc:
|
||||
//-----------------------------------------------------------------------------
|
||||
void splitrelpath( const CString &Path, CString& Dir, CString& FName, CString& Ext )
|
||||
{
|
||||
/* Find the last slash or backslash. */
|
||||
int Last = max(Path.ReverseFind('/'), Path.ReverseFind('\\'));
|
||||
|
||||
/* Set 'Last' to the first character of the filename. If we have
|
||||
* no directory separators, this is the entire string, so set it
|
||||
* to 0. */
|
||||
if(Last == -1) Last = 0;
|
||||
else Last++;
|
||||
|
||||
CString sFNameAndExt = Path.Right(Path.GetLength()-Last);
|
||||
|
||||
// subtract the FNameAndExt from Path
|
||||
Dir = Path.Left( Path.GetLength()-sFNameAndExt.GetLength() ); // don't subtract out the trailing slash
|
||||
|
||||
CStringArray sFNameAndExtBits;
|
||||
split( sFNameAndExt, ".", sFNameAndExtBits, false );
|
||||
|
||||
if( sFNameAndExt.GetLength() == 0 ) // no file at the end of this path
|
||||
{
|
||||
FName = "";
|
||||
Ext = "";
|
||||
}
|
||||
else if( sFNameAndExtBits.size() == 1 ) // file doesn't have extension
|
||||
{
|
||||
FName = sFNameAndExtBits[0];
|
||||
Ext = "";
|
||||
}
|
||||
else if( sFNameAndExtBits.size() > 1 ) // file has extension and possibly multiple periods
|
||||
{
|
||||
Ext = sFNameAndExtBits[ sFNameAndExtBits.size()-1 ];
|
||||
|
||||
// subtract the Ext and last period from FNameAndExt
|
||||
FName = sFNameAndExt.Left( sFNameAndExt.GetLength()-Ext.GetLength()-1 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void GetDirListing( CString sPath, CStringArray &AddTo, bool bOnlyDirs, bool bReturnPathToo )
|
||||
{
|
||||
CString sDir, sThrowAway;
|
||||
splitrelpath( sPath, sDir, sThrowAway, sThrowAway );
|
||||
|
||||
WIN32_FIND_DATA fd;
|
||||
HANDLE hFind = ::FindFirstFile( sPath, &fd );
|
||||
|
||||
if( INVALID_HANDLE_VALUE == hFind ) // no files found
|
||||
return;
|
||||
|
||||
do
|
||||
{
|
||||
if( bOnlyDirs && !(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) )
|
||||
continue; // skip
|
||||
|
||||
CString sDirName( fd.cFileName );
|
||||
|
||||
if( sDirName == "." || sDirName == ".." )
|
||||
continue;
|
||||
|
||||
if( bReturnPathToo )
|
||||
AddTo.push_back( sDir + sDirName );
|
||||
else
|
||||
AddTo.push_back( sDirName );
|
||||
|
||||
|
||||
} while( ::FindNextFile( hFind, &fd ) );
|
||||
::FindClose( hFind );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Name: GetHashForString( CString s )
|
||||
// Desc: This new version of GetHashForString uses a stronger hashing algorithm
|
||||
// than the former, assuring to a greater degree that two distinct
|
||||
// strings do not produce the same result.
|
||||
// The hashing algorithm is a modified CRC-32 (modified in that the
|
||||
// characters in the CString are recast as unsigned char and that the
|
||||
// unsigned int result from the hash is recast as a signed int).
|
||||
//-----------------------------------------------------------------------------
|
||||
int GetHashForString ( CString string )
|
||||
{
|
||||
/*
|
||||
* RageCRC32.cpp
|
||||
*
|
||||
* Original code
|
||||
* COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or
|
||||
* code or tables extracted from it, as desired without restriction.
|
||||
*
|
||||
* Code was extracted from IETF Internet Draft
|
||||
* draft-ietf-tsvwg-sctpcsum-00 at URI
|
||||
* http://www.ietf.org/proceedings/01dec/I-D/draft-ietf-tsvwg-sctpcsum-00.txt
|
||||
*
|
||||
* Adaptation
|
||||
* Copyright (C) 2002 Peter S. May.
|
||||
* SourceForge ID: drokulix
|
||||
*
|
||||
* - Header file added
|
||||
* - Name of function changed to GetCrc32
|
||||
* - Values in table changed from long int to int
|
||||
*
|
||||
* Chris:
|
||||
* Moved this code out of RageCRC32 since it's not terribly long. Thanks Dro Kulix!
|
||||
*/
|
||||
|
||||
/*
|
||||
* COPYRIGHT (C) 1986 Gary S. Brown. You may use this program, or
|
||||
* code or tables extracted from it, as desired without restriction.
|
||||
*
|
||||
* First, the polynomial itself and its table of feedback terms. The
|
||||
* polynomial is
|
||||
* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0
|
||||
*
|
||||
* Note that we take it "backwards" and put the highest-order term in
|
||||
* the lowest-order bit. The X^32 term is "implied"; the LSB is the
|
||||
* X^31 term, etc. The X^0 term (usually shown as "+1") results in
|
||||
* the MSB being 1
|
||||
*
|
||||
* Note that the usual hardware shift register implementation, which
|
||||
* is what we're using (we're merely optimizing it by doing eight-bit
|
||||
* chunks at a time) shifts bits into the lowest-order term. In our
|
||||
* implementation, that means shifting towards the right. Why do we
|
||||
* do it this way? Because the calculated CRC must be transmitted in
|
||||
* order from highest-order term to lowest-order term. UARTs transmit
|
||||
* characters in order from LSB to MSB. By storing the CRC this way
|
||||
* we hand it to the UART in the order low-byte to high-byte; the UART
|
||||
* sends each low-bit to hight-bit; and the result is transmission bit
|
||||
* by bit from highest- to lowest-order term without requiring any bit
|
||||
* shuffling on our part. Reception works similarly
|
||||
*
|
||||
* The feedback terms table consists of 256, 32-bit entries. Notes
|
||||
*
|
||||
* The table can be generated at runtime if desired; code to do so
|
||||
* is shown later. It might not be obvious, but the feedback
|
||||
* terms simply represent the results of eight shift/xor opera
|
||||
* tions for all combinations of data and CRC register values
|
||||
*
|
||||
* The values must be right-shifted by eight bits by the "updcrc
|
||||
* logic; the shift must be unsigned (bring in zeroes). On some
|
||||
* hardware you could probably optimize the shift in assembler by
|
||||
* using byte-swap instructions
|
||||
* polynomial $edb88320
|
||||
*/
|
||||
|
||||
static const unsigned int crc32_tab[] = {
|
||||
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
|
||||
0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
|
||||
0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
|
||||
0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
|
||||
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
|
||||
0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
|
||||
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
|
||||
0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
|
||||
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
|
||||
0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
|
||||
0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
|
||||
0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
|
||||
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
|
||||
0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
|
||||
0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
|
||||
0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
|
||||
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
|
||||
0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
|
||||
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
|
||||
0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
|
||||
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
|
||||
0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
|
||||
0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
|
||||
0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
|
||||
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
|
||||
0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
|
||||
0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
|
||||
0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
|
||||
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
|
||||
0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
|
||||
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
|
||||
0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
|
||||
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
|
||||
0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
|
||||
0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
|
||||
0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
|
||||
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
|
||||
0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
|
||||
0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
|
||||
0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
|
||||
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
|
||||
0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
|
||||
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
|
||||
0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
|
||||
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
|
||||
0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
|
||||
0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
|
||||
0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
|
||||
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
|
||||
0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
|
||||
0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
|
||||
0x2d02ef8d
|
||||
};
|
||||
|
||||
/* Return a 32-bit CRC of the contents of the buffer. */
|
||||
|
||||
//unsigned int
|
||||
//GetCrc32(const unsigned char *s, unsigned int len)
|
||||
//{
|
||||
const char* s = string;
|
||||
int len = string.GetLength();
|
||||
|
||||
unsigned int crc32val = 0;
|
||||
for( int i=0; i<len; i++ )
|
||||
crc32val = crc32_tab[(crc32val ^ s[i]) & 0xff] ^ (crc32val >> 8);
|
||||
|
||||
return crc32val;
|
||||
//}
|
||||
}
|
||||
|
||||
int GetHashForFile( CString sPath )
|
||||
{
|
||||
int hash = 0;
|
||||
|
||||
hash += GetHashForString( sPath );
|
||||
|
||||
hash += GetFileSizeInBytes( sPath );
|
||||
|
||||
CFileStatus status;
|
||||
if( CFile::GetStatus(sPath, status) )
|
||||
hash += status.m_mtime.GetHour() * 3600 + status.m_mtime.GetMinute() * 60 + status.m_mtime.GetSecond();
|
||||
|
||||
return abs(hash);
|
||||
}
|
||||
|
||||
int GetHashForDirectory( CString sDir )
|
||||
{
|
||||
int hash = 0;
|
||||
|
||||
hash += GetHashForFile( sDir );
|
||||
|
||||
CStringArray arrayFiles;
|
||||
GetDirListing( sDir+"\\*.*", arrayFiles, false );
|
||||
for( unsigned i=0; i<arrayFiles.size(); i++ )
|
||||
{
|
||||
const CString sFilePath = sDir + arrayFiles[i];
|
||||
hash += GetHashForFile( sFilePath );
|
||||
}
|
||||
|
||||
return abs(hash);
|
||||
}
|
||||
|
||||
DWORD GetFileSizeInBytes( const CString &sFilePath )
|
||||
{
|
||||
HANDLE hFile = CreateFile(
|
||||
sFilePath, // pointer to name of the file
|
||||
GENERIC_READ, // access (read-write) mode
|
||||
FILE_SHARE_READ|FILE_SHARE_WRITE, // share mode
|
||||
NULL, // pointer to security attributes
|
||||
OPEN_EXISTING, // how to create
|
||||
FILE_ATTRIBUTE_NORMAL, // file attributes
|
||||
NULL // handle to file with attributes to
|
||||
);
|
||||
|
||||
DWORD dwSize = GetFileSize( hFile, NULL );
|
||||
CloseHandle( hFile );
|
||||
return dwSize;
|
||||
}
|
||||
|
||||
bool DoesFileExist( const CString &sPath )
|
||||
{
|
||||
DWORD dwAttr = GetFileAttributes( sPath );
|
||||
return bool(dwAttr != (DWORD)-1);
|
||||
}
|
||||
|
||||
bool IsAFile( const CString &sPath )
|
||||
{
|
||||
return DoesFileExist(sPath) && ! IsADirectory(sPath);
|
||||
}
|
||||
|
||||
bool IsADirectory( const CString &sPath )
|
||||
{
|
||||
DWORD dwAttr = GetFileAttributes( sPath );
|
||||
if( dwAttr == 0xFFFFFFFF ) // failed
|
||||
return false;
|
||||
else
|
||||
return (dwAttr & FILE_ATTRIBUTE_DIRECTORY) != 0;
|
||||
}
|
||||
|
||||
|
||||
bool CompareCStringsAsc(const CString &str1, const CString &str2)
|
||||
{
|
||||
return str1.CompareNoCase( str2 ) < 0;
|
||||
}
|
||||
|
||||
bool CompareCStringsDesc(const CString &str1, const CString &str2)
|
||||
{
|
||||
return str1.CompareNoCase( str2 ) > 0;
|
||||
}
|
||||
|
||||
void SortCStringArray( CStringArray &arrayCStrings, const bool bSortAscending )
|
||||
{
|
||||
sort( arrayCStrings.begin(), arrayCStrings.end(),
|
||||
CompareCStringsDesc);
|
||||
}
|
||||
|
||||
void StripCrnl(CString &s)
|
||||
{
|
||||
while( s.GetLength() && (s[s.GetLength()-1] == '\r' || s[s.GetLength()-1] == '\n') )
|
||||
s.Delete(s.GetLength()-1);
|
||||
}
|
||||
|
||||
LONG GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata)
|
||||
{
|
||||
HKEY hkey;
|
||||
LONG retval = RegOpenKeyEx(key, subkey, 0, KEY_QUERY_VALUE, &hkey);
|
||||
|
||||
if (retval == ERROR_SUCCESS) {
|
||||
long datasize = MAX_PATH;
|
||||
TCHAR data[MAX_PATH];
|
||||
RegQueryValue(hkey, "Favorites", data, &datasize);
|
||||
lstrcpy(retdata,data);
|
||||
RegCloseKey(hkey);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
HINSTANCE GotoURL(LPCTSTR url)
|
||||
{
|
||||
TCHAR key[MAX_PATH + MAX_PATH];
|
||||
|
||||
// First try ShellExecute()
|
||||
HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL,NULL, SW_SHOWDEFAULT);
|
||||
|
||||
// If it failed, get the .htm regkey and lookup the program
|
||||
if ((UINT)result <= HINSTANCE_ERROR) {
|
||||
|
||||
if (GetRegKey(HKEY_CLASSES_ROOT, _T(".htm"), key) == ERROR_SUCCESS) {
|
||||
lstrcat(key, _T("\\shell\\open\\command"));
|
||||
|
||||
if (GetRegKey(HKEY_CLASSES_ROOT,key,key) == ERROR_SUCCESS) {
|
||||
TCHAR *pos;
|
||||
pos = _tcsstr(key, _T("\"%1\""));
|
||||
if (pos == NULL) { // No quotes found
|
||||
pos = strstr(key, _T("%1")); // Check for %1, without quotes
|
||||
if (pos == NULL) // No parameter at all...
|
||||
pos = key+lstrlen(key)-1;
|
||||
else
|
||||
*pos = '\0'; // Remove the parameter
|
||||
}
|
||||
else
|
||||
*pos = '\0'; // Remove the parameter
|
||||
|
||||
lstrcat(pos, _T(" "));
|
||||
lstrcat(pos, url);
|
||||
result = (HINSTANCE) WinExec(key,SW_SHOWDEFAULT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void WriteStringToFile( FILE* file, CString s )
|
||||
{
|
||||
if( s == "" )
|
||||
s = "_";
|
||||
fprintf( file, "%s\n", s );
|
||||
}
|
||||
|
||||
void ReadStringFromFile( FILE* file, CString& s )
|
||||
{
|
||||
char szTemp[MAX_PATH];
|
||||
fscanf( file, "%[^\n]\n", szTemp );
|
||||
s = szTemp;
|
||||
if( s == "_" )
|
||||
s = "";
|
||||
}
|
||||
|
||||
|
||||
void WriteIntToFile( FILE* file, int i )
|
||||
{
|
||||
fprintf( file, "%d\n", i );
|
||||
}
|
||||
|
||||
void ReadIntFromFile( FILE* file, int& i )
|
||||
{
|
||||
fscanf( file, "%d\n", &i );
|
||||
}
|
||||
|
||||
|
||||
void WriteFloatToFile( FILE* file, float f )
|
||||
{
|
||||
fprintf( file, "%f\n", f );
|
||||
}
|
||||
|
||||
void ReadFloatFromFile( FILE* file, float& f )
|
||||
{
|
||||
fscanf( file, "%f\n", &f );
|
||||
}
|
||||
|
||||
|
||||
|
||||
void WriteUlongToFile( FILE* file, ULONG u )
|
||||
{
|
||||
fprintf( file, "%u\n", u );
|
||||
}
|
||||
|
||||
void ReadUlongFromFile( FILE* file, ULONG& u )
|
||||
{
|
||||
fscanf( file, "%u\n", &u );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,176 +0,0 @@
|
||||
#pragma once
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
File: RageUtil
|
||||
|
||||
Desc: Miscellaneous helper macros and functions.
|
||||
|
||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
||||
Chris Danford
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// SAFE_ Macros
|
||||
//-----------------------------------------------------------------------------
|
||||
#define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
|
||||
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p); (p)=NULL; } }
|
||||
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
|
||||
|
||||
#define ZERO(x) memset(&x, 0, sizeof(x))
|
||||
#define COPY(a,b) { ASSERT(sizeof(a)==sizeof(b)); memcpy(&a, &b, sizeof(a)); }
|
||||
#define ARRAYSIZE(a) (sizeof(a) / sizeof((a)[0]))
|
||||
|
||||
#define RECTWIDTH(rect) ((rect).right - (rect).left)
|
||||
#define RECTHEIGHT(rect) ((rect).bottom - (rect).top)
|
||||
inline int RECTCENTERX(RECT rect) { return rect.left + (rect.right-rect.left)/2; }
|
||||
inline int RECTCENTERY(RECT rect) { return rect.top + (rect.bottom-rect.top)/2; }
|
||||
|
||||
#ifndef max
|
||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#ifndef min
|
||||
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#ifndef MAX
|
||||
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
||||
#endif
|
||||
|
||||
#define clamp(val,low,high) ( max( (low), min((val),(high)) ) )
|
||||
|
||||
#define PI D3DX_PI
|
||||
#define DEG (PI / 180.0f)
|
||||
#define RAD (180.0f / PI)
|
||||
// Scales x so that l1 corresponds to l2 and h1 corresponds to h2. Does not modify x, MUST assign the result to something!
|
||||
#define SCALE(x, l1, h1, l2, h2) (((x) - (l1)) / ((h1) - (l1)) * ((h2) - (l2)) + (l2))
|
||||
// Clamps x
|
||||
#define CLAMP(x, l, h) {if (x > h) x = h; else if (x < l) x = l;}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Misc helper functions
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Fast random number generators
|
||||
// Taken from "Numerical Recipes in C"
|
||||
|
||||
extern ULONG randseed;
|
||||
|
||||
inline ULONG Random()
|
||||
{
|
||||
randseed = 1664525L * randseed + 1013904223L;
|
||||
return randseed;
|
||||
}
|
||||
|
||||
inline float RandomFloat()
|
||||
{
|
||||
randseed = 1664525L * randseed + 1013904223L;
|
||||
ULONG itemp = 0x3f800000 | (0x007fffff & randseed);
|
||||
return (*(float *)&itemp) - 1.0f;
|
||||
}
|
||||
|
||||
// Returns a float between dLow and dHigh inclusive
|
||||
inline float RandomFloat(float fLow, float fHigh)
|
||||
{
|
||||
return RandomFloat() * (fHigh - fLow) + fLow;
|
||||
}
|
||||
|
||||
// Returns an integer between nLow and nHigh inclusive
|
||||
inline int RandomInt(int nLow, int nHigh)
|
||||
{
|
||||
return ((Random() >> 2) % (nHigh - nLow + 1)) + nLow;
|
||||
}
|
||||
|
||||
// Debug new for memory leak tracing
|
||||
//#ifdef _DEBUG
|
||||
//#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
|
||||
//#endif
|
||||
|
||||
|
||||
// Simple function for generating random numbers
|
||||
inline float randomf( const float low=-1.0f, const float high=1.0f )
|
||||
{
|
||||
return low + ( high - low ) * ( (FLOAT)rand() ) / RAND_MAX;
|
||||
}
|
||||
inline int roundf( const float f ) { return (int)((f)+0.5f); };
|
||||
inline int roundf( const double f ) { return (int)((f)+0.5); };
|
||||
inline float froundf( const float f, const float fRoundInterval )
|
||||
{
|
||||
return int( (f + fRoundInterval/2)/fRoundInterval ) * fRoundInterval;
|
||||
}
|
||||
|
||||
bool IsAnInt( LPCTSTR s );
|
||||
float TimeToSeconds( CString sHMS );
|
||||
CString SecondsToTime( float fSecs );
|
||||
|
||||
CString ssprintf( LPCTSTR fmt, ...);
|
||||
CString vssprintf( LPCTSTR fmt, va_list argList );
|
||||
|
||||
|
||||
// Splits a Path into 4 parts (Directory, Drive, Filename, Extention). Supports UNC path names.
|
||||
// param1: Whether the Supplied Path (PARAM2) contains a directory name only
|
||||
// or a file name (Reason: some directories will end with "xxx.xxx"
|
||||
// which is like a file name).
|
||||
void splitpath(
|
||||
const bool UsingDirsOnly,
|
||||
const CString &Path,
|
||||
CString &Drive,
|
||||
CString &Dir,
|
||||
CString &FName,
|
||||
CString &Ext
|
||||
);
|
||||
|
||||
void splitrelpath(
|
||||
const CString &Path,
|
||||
CString& Dir,
|
||||
CString& FName,
|
||||
CString& Ext
|
||||
);
|
||||
|
||||
// Splits a CString into an CStringArray according the Deliminator.
|
||||
void split(
|
||||
const CString &Source,
|
||||
const CString &Deliminator,
|
||||
CStringArray& AddIt,
|
||||
const bool bIgnoreEmpty = true
|
||||
);
|
||||
|
||||
// Joins a CStringArray to create a CString according the Deliminator.
|
||||
CString join(
|
||||
const CString &Deliminator,
|
||||
const CStringArray& Source
|
||||
);
|
||||
|
||||
void GetDirListing( CString sPath, CStringArray &AddTo, bool bOnlyDirs=false, bool bReturnPathToo=false );
|
||||
int GetHashForString( CString s );
|
||||
int GetHashForFile( CString sPath );
|
||||
int GetHashForDirectory( CString sDir ); // a hash value that remains the same as long as nothing in the directory has changed
|
||||
|
||||
bool DoesFileExist( const CString &sPath );
|
||||
bool IsAFile( const CString &sPath );
|
||||
bool IsADirectory( const CString &sPath );
|
||||
DWORD GetFileSizeInBytes( const CString &sFilePath );
|
||||
|
||||
void SortCStringArray( CStringArray &AddTo, const bool bSortAcsending = true );
|
||||
void StripCrnl(CString &s);
|
||||
|
||||
|
||||
LONG GetRegKey(HKEY key, LPCTSTR subkey, LPTSTR retdata);
|
||||
HINSTANCE GotoURL(LPCTSTR url);
|
||||
|
||||
void WriteStringToFile( FILE* file, CString s );
|
||||
void ReadStringFromFile( FILE* file, CString& s );
|
||||
void WriteIntToFile( FILE* file, int i );
|
||||
void ReadIntFromFile( FILE* file, int& i );
|
||||
void WriteFloatToFile( FILE* file, float f );
|
||||
void ReadFloatFromFile( FILE* file, float& f );
|
||||
void WriteUlongToFile( FILE* file, ULONG u );
|
||||
void ReadUlongFromFile( FILE* file, ULONG& u );
|
||||
|
||||
@@ -1,804 +0,0 @@
|
||||
|
||||
|
||||
#include "stdafx.h"
|
||||
#include <winreg.h>
|
||||
#include "Registry.h"
|
||||
|
||||
#define CLASS_NAME_LENGTH 255
|
||||
|
||||
/* IMPORTANT NOTES ABOUT CREGISTRY:
|
||||
|
||||
CRegistry never keeps a key open past the end of a function call.
|
||||
This is incase the application crashes before the next call to close
|
||||
the registry
|
||||
|
||||
INCLUDE FILES
|
||||
"winreg.h" and "afxdisp.h" must be included in "stdafx.h"
|
||||
|
||||
KEY NAMES:
|
||||
Key names must not begin with a \ and only absolute strings are accepted
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
CRegistry::CRegistry()
|
||||
{
|
||||
m_hRootKey = HKEY_CURRENT_USER;
|
||||
m_bLazyWrite = TRUE;
|
||||
m_nLastError = ERROR_SUCCESS;
|
||||
}
|
||||
|
||||
CRegistry::~CRegistry()
|
||||
{
|
||||
ClearKey();
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::ClearKey()
|
||||
{
|
||||
/* Call CloseKey to write the current key to the registry and close the
|
||||
key. An application should not keep keys open any longer than necessary.
|
||||
Calling CloseKey when there is no current key has no effect.*/
|
||||
|
||||
m_strCurrentPath.Empty();
|
||||
m_hRootKey = HKEY_CURRENT_USER;
|
||||
m_bLazyWrite = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOL CRegistry::SetRootKey(HKEY hRootKey)
|
||||
{
|
||||
// sets the root key
|
||||
// make sure to set it to a valid key
|
||||
if (hRootKey != HKEY_CLASSES_ROOT &&
|
||||
hRootKey != HKEY_CURRENT_USER &&
|
||||
hRootKey != HKEY_LOCAL_MACHINE &&
|
||||
hRootKey != HKEY_USERS) return FALSE;
|
||||
|
||||
m_hRootKey = hRootKey;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::CreateKey(CString strKey)
|
||||
{
|
||||
/* Use CreateKey to add a new key to the registry.
|
||||
Key is the name of the key to create. Key must be
|
||||
an absolute name. An absolute key
|
||||
begins with a backslash (\) and is a subkey of
|
||||
the root key. */
|
||||
|
||||
ASSERT(strKey[0] != '\\');
|
||||
HKEY hKey;
|
||||
|
||||
DWORD dwDisposition = 0;
|
||||
|
||||
if (::RegCreateKeyEx(m_hRootKey, LPCTSTR(strKey), 0, NULL,
|
||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey,
|
||||
&dwDisposition) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
m_strCurrentPath = strKey;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::DeleteKey(CString strKey)
|
||||
{
|
||||
/* Call DeleteKey to remove a specified key and its associated data,
|
||||
if any, from the registry. Returns FALSE is there are subkeys
|
||||
Subkeys must be explicitly deleted by separate calls to DeleteKey.
|
||||
DeleteKey returns True if key deletion is successful. On error,
|
||||
DeleteKey returns False. */
|
||||
|
||||
// need to open the key first with RegOpenKeyEx
|
||||
// ASSERT(FALSE); // not yet implemented
|
||||
// ASSERT(strKey[0] != '\\');
|
||||
|
||||
if (!KeyExists(strKey)) return TRUE;
|
||||
if (::RegDeleteKey(m_hRootKey, strKey) != ERROR_SUCCESS) return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOL CRegistry::DeleteValue(CString strName)
|
||||
{
|
||||
/* Call DeleteValue to remove a specific data value
|
||||
associated with the current key. Name is string
|
||||
containing the name of the value to delete. Keys can contain
|
||||
multiple data values, and every value associated with a key
|
||||
has a unique name. */
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
HKEY hKey;
|
||||
LONG lResult;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_SET_VALUE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
lResult = ::RegDeleteValue(hKey, LPCTSTR(strName));
|
||||
::RegCloseKey(hKey);
|
||||
|
||||
if (lResult == ERROR_SUCCESS) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
int CRegistry::GetDataSize(CString strValueName)
|
||||
{
|
||||
/* Call GetDataSize to determine the size, in bytes, of
|
||||
a data value associated with the current key. ValueName
|
||||
is a string containing the name of the data value to query.
|
||||
On success, GetDataSize returns the size of the data value.
|
||||
On failure, GetDataSize returns -1. */
|
||||
|
||||
HKEY hKey;
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
LONG lResult;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS) return -1;
|
||||
|
||||
DWORD dwSize = 1;
|
||||
lResult = ::RegQueryValueEx(hKey, LPCTSTR(strValueName),
|
||||
NULL, NULL, NULL, &dwSize);
|
||||
::RegCloseKey(hKey);
|
||||
|
||||
if (lResult != ERROR_SUCCESS) return -1;
|
||||
return (int)dwSize;
|
||||
}
|
||||
|
||||
DWORD CRegistry::GetDataType(CString strValueName)
|
||||
{
|
||||
HKEY hKey;
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
|
||||
m_nLastError = ::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_QUERY_VALUE, &hKey);
|
||||
|
||||
if (m_nLastError != ERROR_SUCCESS) return 0;
|
||||
|
||||
DWORD dwType = 1;
|
||||
m_nLastError = ::RegQueryValueEx(hKey, LPCTSTR(strValueName),
|
||||
NULL, &dwType, NULL, NULL);
|
||||
::RegCloseKey(hKey);
|
||||
|
||||
if (m_nLastError == ERROR_SUCCESS) return dwType;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int CRegistry::GetSubKeyCount()
|
||||
{
|
||||
/* Call this function to determine the number of subkeys.
|
||||
the function returns -1 on error */
|
||||
HKEY hKey;
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) return -1;
|
||||
|
||||
LONG lResult;
|
||||
DWORD dwSubKeyCount, dwValueCount, dwClassNameLength,
|
||||
dwMaxSubKeyName, dwMaxValueName, dwMaxValueLength;
|
||||
FILETIME ftLastWritten;
|
||||
|
||||
_TCHAR szClassBuffer[CLASS_NAME_LENGTH];
|
||||
|
||||
dwClassNameLength = CLASS_NAME_LENGTH;
|
||||
lResult = ::RegQueryInfoKey(hKey, szClassBuffer, &dwClassNameLength,
|
||||
NULL, &dwSubKeyCount, &dwMaxSubKeyName, NULL, &dwValueCount,
|
||||
&dwMaxValueName, &dwMaxValueLength, NULL, &ftLastWritten);
|
||||
|
||||
::RegCloseKey(hKey);
|
||||
if (lResult != ERROR_SUCCESS) return -1;
|
||||
|
||||
return (int)dwSubKeyCount;
|
||||
}
|
||||
|
||||
|
||||
int CRegistry::GetValueCount()
|
||||
{
|
||||
/* Call this function to determine the number of subkeys.
|
||||
the function returns -1 on error */
|
||||
HKEY hKey;
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) return -1;
|
||||
|
||||
LONG lResult;
|
||||
DWORD dwSubKeyCount, dwValueCount, dwClassNameLength,
|
||||
dwMaxSubKeyName, dwMaxValueName, dwMaxValueLength;
|
||||
FILETIME ftLastWritten;
|
||||
|
||||
_TCHAR szClassBuffer[CLASS_NAME_LENGTH];
|
||||
|
||||
dwClassNameLength = CLASS_NAME_LENGTH;
|
||||
lResult = ::RegQueryInfoKey(hKey, szClassBuffer, &dwClassNameLength,
|
||||
NULL, &dwSubKeyCount, &dwMaxSubKeyName, NULL, &dwValueCount,
|
||||
&dwMaxValueName, &dwMaxValueLength, NULL, &ftLastWritten);
|
||||
|
||||
::RegCloseKey(hKey);
|
||||
if (lResult != ERROR_SUCCESS) return -1;
|
||||
|
||||
return (int)dwValueCount;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::KeyExists(CString strKey, HKEY hRootKey)
|
||||
{
|
||||
/* Call KeyExists to determine if a key of a specified name exists.
|
||||
Key is the name of the key for which to search. */
|
||||
|
||||
ASSERT(strKey[0] != '\\');
|
||||
HKEY hKey;
|
||||
|
||||
if (hRootKey == NULL) hRootKey = m_hRootKey;
|
||||
|
||||
LONG lResult = ::RegOpenKeyEx(hRootKey, LPCTSTR(strKey), 0,
|
||||
KEY_ALL_ACCESS, &hKey);
|
||||
::RegCloseKey(hKey);
|
||||
if (lResult == ERROR_SUCCESS) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CRegistry::SetKey(CString strKey, BOOL bCanCreate)
|
||||
{
|
||||
/* Call SetKey to make a specified key the current key. Key is the
|
||||
name of the key to open. If Key is null, the CurrentKey property
|
||||
is set to the key specified by the RootKey property.
|
||||
|
||||
CanCreate specifies whether to create the specified key if it does
|
||||
not exist. If CanCreate is True, the key is created if necessary.
|
||||
|
||||
Key is opened or created with the security access value KEY_ALL_ACCESS.
|
||||
OpenKey only creates non-volatile keys, A non-volatile key is stored in
|
||||
the registry and is preserved when the system is restarted.
|
||||
|
||||
OpenKey returns True if the key is successfully opened or created */
|
||||
|
||||
ASSERT(strKey[0] != '\\');
|
||||
HKEY hKey;
|
||||
|
||||
|
||||
// close the current key if it is open
|
||||
if (strKey.GetLength() == 0)
|
||||
{
|
||||
m_strCurrentPath.Empty();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
DWORD dwDisposition;
|
||||
if (bCanCreate) // open the key with RegCreateKeyEx
|
||||
{
|
||||
if (::RegCreateKeyEx(m_hRootKey, LPCTSTR(strKey), 0, NULL,
|
||||
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey,
|
||||
&dwDisposition) != ERROR_SUCCESS) return FALSE;
|
||||
m_strCurrentPath = strKey;
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// otherwise, open the key without creating
|
||||
// open key requires no initial slash
|
||||
m_nLastError = ::RegOpenKeyEx(m_hRootKey, LPCTSTR(strKey), 0,
|
||||
KEY_ALL_ACCESS, &hKey);
|
||||
if (m_nLastError != ERROR_SUCCESS) return FALSE;
|
||||
m_strCurrentPath = strKey;
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::ValueExists(CString strName)
|
||||
{
|
||||
/* Call ValueExists to determine if a particular key exists in
|
||||
the registry. Calling Value Exists is especially useful before
|
||||
calling other TRegistry methods that operate only on existing keys.
|
||||
|
||||
Name is the name of the data value for which to check.
|
||||
ValueExists returns True if a match if found, False otherwise. */
|
||||
|
||||
HKEY hKey;
|
||||
LONG lResult;
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
lResult = ::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
NULL, NULL, NULL);
|
||||
::RegCloseKey(hKey);
|
||||
|
||||
if (lResult == ERROR_SUCCESS) return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void CRegistry::RenameValue(CString strOldName, CString strNewName)
|
||||
{
|
||||
/* Call RenameValue to change the name of a data value associated
|
||||
with the current key. OldName is a string containing the current
|
||||
name of the data value. NewName is a string containing the replacement
|
||||
name for the data value.
|
||||
|
||||
If OldName is the name of an existing data value for the current key,
|
||||
and NewName is not the name of an existing data value for the current
|
||||
key, RenameValue changes the data value name as specified. Otherwise
|
||||
the current name remains unchanged.
|
||||
*/
|
||||
ASSERT(FALSE); // functionality not yet implemented
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
COleDateTime CRegistry::ReadDateTime(CString strName, COleDateTime dtDefault)
|
||||
{
|
||||
/* Call ReadDate to read a date value from a specified data value
|
||||
associated with the current key. Name is the name of the data value to read.
|
||||
If successful, ReadDate returns a Delphi TDateTime value. The integral part
|
||||
of a TDateTime value is the number of days that have passed since 12/30/1899.
|
||||
The fractional part of a TDateTime value is the time of day.
|
||||
On error, an exception is raised, and the value returned by this function
|
||||
should be discarded. */
|
||||
|
||||
DWORD dwType = REG_BINARY;
|
||||
COleDateTime dt;
|
||||
DWORD dwSize = sizeof(dt);
|
||||
HKEY hKey;
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS) return dtDefault;
|
||||
if (::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)&dt, &dwSize) != ERROR_SUCCESS) dt = dtDefault;
|
||||
::RegCloseKey(hKey);
|
||||
return dt;
|
||||
}
|
||||
|
||||
|
||||
double CRegistry::ReadFloat(CString strName, double fDefault)
|
||||
{
|
||||
/* Call ReadFloat to read a float value from a specified
|
||||
data value associated with the current key. Name is the name
|
||||
of the data value to read.
|
||||
|
||||
If successful, ReadFloat returns a double value.
|
||||
On error, an exception is raised, and the value returned by
|
||||
this function should be discarded. */
|
||||
|
||||
DWORD dwType = REG_BINARY;
|
||||
double d;
|
||||
DWORD dwSize = sizeof(d);
|
||||
HKEY hKey;
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS) return fDefault;
|
||||
|
||||
if (::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)&d, &dwSize) != ERROR_SUCCESS) d = fDefault;
|
||||
::RegCloseKey(hKey);
|
||||
return d;
|
||||
}
|
||||
|
||||
CString CRegistry::ReadString(CString strName, CString strDefault)
|
||||
{
|
||||
DWORD dwType = REG_SZ;
|
||||
DWORD dwSize = 255;
|
||||
BOOL bSuccess = TRUE;
|
||||
_TCHAR sz[255];
|
||||
HKEY hKey;
|
||||
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
|
||||
// make sure it is the proper type
|
||||
dwType = GetDataType(strName);
|
||||
|
||||
if (dwType != REG_SZ && dwType != REG_EXPAND_SZ)
|
||||
{
|
||||
return strDefault;
|
||||
}
|
||||
|
||||
m_nLastError = ::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey);
|
||||
if (m_nLastError != ERROR_SUCCESS) return strDefault;
|
||||
|
||||
m_nLastError = ::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)sz, &dwSize);
|
||||
if (m_nLastError != ERROR_SUCCESS) bSuccess = FALSE;
|
||||
::RegCloseKey(hKey);
|
||||
|
||||
if (!bSuccess) return strDefault;
|
||||
return CString((LPCTSTR)sz);
|
||||
}
|
||||
|
||||
DWORD CRegistry::ReadDword(CString strName, DWORD dwDefault)
|
||||
{
|
||||
DWORD dwType = REG_DWORD;
|
||||
DWORD dw;
|
||||
DWORD dwSize = sizeof(dw);
|
||||
HKEY hKey;
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS) return dwDefault;
|
||||
|
||||
if (::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)&dw, &dwSize) != ERROR_SUCCESS) dw = dwDefault;
|
||||
::RegCloseKey(hKey);
|
||||
return dw;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int CRegistry::ReadInt(CString strName, int nDefault)
|
||||
{
|
||||
DWORD dwType = REG_BINARY;
|
||||
int n;
|
||||
DWORD dwSize = sizeof(n);
|
||||
HKEY hKey;
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS) return nDefault;
|
||||
|
||||
if (::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)&n, &dwSize) != ERROR_SUCCESS) n = nDefault;
|
||||
::RegCloseKey(hKey);
|
||||
return n;
|
||||
}
|
||||
|
||||
bool CRegistry::Read(CString strName, bool &result)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
HKEY hKey;
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS)
|
||||
return false;
|
||||
|
||||
BOOL b;
|
||||
DWORD dwSize = sizeof(b);
|
||||
DWORD dwType = REG_BINARY;
|
||||
int ret = ::RegQueryValueEx(hKey, LPCTSTR(strName), NULL, &dwType, (LPBYTE)&b, &dwSize);
|
||||
::RegCloseKey(hKey);
|
||||
|
||||
if ( ret != ERROR_SUCCESS )
|
||||
return false;
|
||||
|
||||
result = !!b;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
COLORREF CRegistry::ReadColor(CString strName, COLORREF rgbDefault)
|
||||
{
|
||||
DWORD dwType = REG_BINARY;
|
||||
COLORREF rgb;
|
||||
DWORD dwSize = sizeof(rgb);
|
||||
HKEY hKey;
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS) return rgbDefault;
|
||||
|
||||
if (::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)&rgb, &dwSize) != ERROR_SUCCESS) rgb = rgbDefault;
|
||||
::RegCloseKey(hKey);
|
||||
return rgb;
|
||||
}
|
||||
|
||||
BOOL CRegistry::ReadFont(CString strName, CFont* pFont)
|
||||
{
|
||||
DWORD dwType = REG_BINARY;
|
||||
DWORD dwSize = sizeof(LOGFONT);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
LOGFONT lf;
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)&lf, &dwSize) != ERROR_SUCCESS) bSuccess = FALSE;
|
||||
::RegCloseKey(hKey);
|
||||
if (bSuccess)
|
||||
{
|
||||
pFont->Detach();
|
||||
pFont->CreateFontIndirect(&lf);
|
||||
}
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::ReadPoint(CString strName, CPoint* pPoint)
|
||||
{
|
||||
DWORD dwType = REG_BINARY;
|
||||
DWORD dwSize = sizeof(CPoint);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)pPoint, &dwSize) != ERROR_SUCCESS) bSuccess = FALSE;
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
BOOL CRegistry::ReadSize(CString strName, CSize* pSize)
|
||||
{
|
||||
DWORD dwType = REG_BINARY;
|
||||
DWORD dwSize = sizeof(CSize);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)pSize, &dwSize) != ERROR_SUCCESS) bSuccess = FALSE;
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
BOOL CRegistry::ReadRect(CString strName, CRect* pRect)
|
||||
{
|
||||
DWORD dwType = REG_BINARY;
|
||||
DWORD dwSize = sizeof(CRect);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_READ, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegQueryValueEx(hKey, LPCTSTR(strName), NULL,
|
||||
&dwType, (LPBYTE)pRect, &dwSize) != ERROR_SUCCESS) bSuccess = FALSE;
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
BOOL CRegistry::WriteBool(CString strName, BOOL bValue)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)&bValue, sizeof(bValue))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite)
|
||||
::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
BOOL CRegistry::WriteDateTime(CString strName, COleDateTime dtValue)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)&dtValue, sizeof(dtValue))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::WriteString(CString strName, CString strValue)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
_TCHAR sz[255];
|
||||
|
||||
if (strValue.GetLength() > 254) return FALSE;
|
||||
|
||||
#ifdef _UNICODE
|
||||
wstrcpy(sz, LPCTSTR(strValue));
|
||||
#else
|
||||
strcpy(sz, LPCTSTR(strValue));
|
||||
#endif
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
#ifdef _UNICODE
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_SZ, (LPBYTE)sz, wstrlen(sz) + 1)
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
#else
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_SZ, (LPBYTE)sz, strlen(sz) + 1)
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
#endif
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::WriteFloat(CString strName, double fValue)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)&fValue, sizeof(fValue))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
BOOL CRegistry::WriteInt(CString strName, int nValue)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)&nValue, sizeof(nValue))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
BOOL CRegistry::WriteDword(CString strName, DWORD dwValue)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)&dwValue, sizeof(dwValue))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
BOOL CRegistry::WriteColor(CString strName, COLORREF rgbValue)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)&rgbValue, sizeof(rgbValue))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::WriteFont(CString strName, CFont* pFont)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
LOGFONT lf;
|
||||
pFont->GetLogFont(&lf);
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)&lf, sizeof(lf))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::WritePoint(CString strName, CPoint* pPoint)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)pPoint, sizeof(CPoint))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
|
||||
BOOL CRegistry::WriteSize(CString strName, CSize* pSize)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)pSize, sizeof(CSize))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
BOOL CRegistry::WriteRect(CString strName, CRect* pRect)
|
||||
{
|
||||
ASSERT(m_strCurrentPath.GetLength() > 0);
|
||||
BOOL bSuccess = TRUE;
|
||||
HKEY hKey;
|
||||
|
||||
if (::RegOpenKeyEx(m_hRootKey, LPCTSTR(m_strCurrentPath), 0,
|
||||
KEY_WRITE, &hKey) != ERROR_SUCCESS) return FALSE;
|
||||
|
||||
if (::RegSetValueEx(hKey, LPCTSTR(strName), 0,
|
||||
REG_BINARY, (LPBYTE)pRect, sizeof(CRect))
|
||||
!= ERROR_SUCCESS) bSuccess = FALSE;
|
||||
|
||||
if (!m_bLazyWrite) ::RegFlushKey(hKey);
|
||||
::RegCloseKey(hKey);
|
||||
return bSuccess;
|
||||
}
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
#ifndef REGISTRY_H
|
||||
#define REGISTRY_H
|
||||
|
||||
class CRegistry
|
||||
{
|
||||
public:
|
||||
CRegistry();
|
||||
~CRegistry();
|
||||
|
||||
int m_nLastError;
|
||||
|
||||
// CRegistry properties
|
||||
protected:
|
||||
HKEY m_hRootKey;
|
||||
BOOL m_bLazyWrite;
|
||||
CString m_strCurrentPath;
|
||||
|
||||
public:
|
||||
inline BOOL PathIsValid() const { return m_strCurrentPath.GetLength() > 0; }
|
||||
inline CString GetCurrentPath() const { return m_strCurrentPath; }
|
||||
inline HKEY GetRootKey() const { return m_hRootKey; }
|
||||
|
||||
public:
|
||||
BOOL ClearKey();
|
||||
BOOL SetRootKey(HKEY hRootKey);
|
||||
BOOL CreateKey(CString strKey);
|
||||
BOOL DeleteKey(CString strKey);
|
||||
BOOL DeleteValue(CString strName);
|
||||
int GetDataSize(CString strValueName);
|
||||
DWORD GetDataType(CString strValueName);
|
||||
int GetSubKeyCount();
|
||||
int GetValueCount();
|
||||
BOOL KeyExists(CString strKey, HKEY hRootKey = NULL);
|
||||
BOOL SetKey(CString strKey, BOOL bCanCreate);
|
||||
BOOL ValueExists(CString strName);
|
||||
void RenameValue(CString strOldName, CString strNewName);
|
||||
|
||||
// data reading functions
|
||||
COleDateTime ReadDateTime(CString strName, COleDateTime dtDefault);
|
||||
double ReadFloat(CString strName, double fDefault);
|
||||
CString ReadString(CString strName, CString strDefault);
|
||||
int ReadInt(CString strName, int nDefault);
|
||||
BOOL ReadBool(CString strName, BOOL bDefault);
|
||||
COLORREF ReadColor(CString strName, COLORREF rgbDefault);
|
||||
BOOL ReadFont(CString strName, CFont* pFont);
|
||||
BOOL ReadPoint(CString strName, CPoint* pPoint);
|
||||
BOOL ReadSize(CString strName, CSize* pSize);
|
||||
BOOL ReadRect(CString strName, CRect* pRect);
|
||||
DWORD ReadDword(CString strName, DWORD dwDefault);
|
||||
|
||||
/* Readers converted to a less silly mechanism below (do these as needed):
|
||||
* return the value in result if found, otherwise return false. */
|
||||
bool Read(CString strName, bool &result);
|
||||
|
||||
// data writing functions
|
||||
BOOL WriteBool(CString strName, BOOL bValue);
|
||||
BOOL WriteDateTime(CString strName, COleDateTime dtValue);
|
||||
BOOL WriteString(CString strName, CString strValue);
|
||||
BOOL WriteFloat(CString strName, double fValue);
|
||||
BOOL WriteInt(CString strName, int nValue);
|
||||
BOOL WriteColor(CString strName, COLORREF rgbValue);
|
||||
BOOL WriteFont(CString strName, CFont* pFont);
|
||||
BOOL WritePoint(CString strName, CPoint* pPoint);
|
||||
BOOL WriteSize(CString strName, CSize* pSize);
|
||||
BOOL WriteRect(CString strName, CRect* pRect);
|
||||
BOOL WriteDword(CString strName, DWORD dwValue);
|
||||
|
||||
};// end of CRegistry class definition
|
||||
|
||||
|
||||
#endif
|
||||
@@ -1,613 +0,0 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="smpackage"
|
||||
SccProjectName=""
|
||||
SccLocalPath=""
|
||||
Keyword="MFCProj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory=".\../../Program"
|
||||
IntermediateDirectory=".\Debug"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="2"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
UsePrecompiledHeader="3"
|
||||
PrecompiledHeaderThrough="stdafx.h"
|
||||
PrecompiledHeaderFile=".\Debug/smpackage.pch"
|
||||
AssemblerListingLocation=".\Debug/"
|
||||
ObjectFile=".\Debug/"
|
||||
ProgramDataBaseFileName=".\Debug/"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="../../Program/tools-debug.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile=".\../../Program/smpackage-debug.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
MkTypLibCompatible="TRUE"
|
||||
SuppressStartupBanner="TRUE"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\../../Program/smpackage.tlb"
|
||||
HeaderFileName=""/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="_DEBUG"
|
||||
Culture="1033"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory=".\../../Program"
|
||||
IntermediateDirectory=".\Release"
|
||||
ConfigurationType="1"
|
||||
UseOfMFC="2"
|
||||
ATLMinimizesCRunTimeLibraryUsage="FALSE"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
InlineFunctionExpansion="1"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
StringPooling="TRUE"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="TRUE"
|
||||
UsePrecompiledHeader="3"
|
||||
PrecompiledHeaderThrough="stdafx.h"
|
||||
PrecompiledHeaderFile=".\Release/smpackage.pch"
|
||||
AssemblerListingLocation=".\Release/"
|
||||
ObjectFile=".\Release/"
|
||||
ProgramDataBaseFileName=".\Release/"
|
||||
BrowseInformation="1"
|
||||
WarningLevel="3"
|
||||
SuppressStartupBanner="TRUE"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ZipArchive\Release\ZipArchive.lib"
|
||||
OutputFile=".\../../Program/tools.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
ProgramDatabaseFile=".\../../Program/smpackage.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
MkTypLibCompatible="TRUE"
|
||||
SuppressStartupBanner="TRUE"
|
||||
TargetEnvironment="1"
|
||||
TypeLibraryName=".\../../Program/smpackage.tlb"
|
||||
HeaderFileName=""/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG"
|
||||
Culture="1033"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath="ChangeGameSettings.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="ChangeGameSettings.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="EditInsallations.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="EditInsallations.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="EditMetricsDlg.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="EditMetricsDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="EnterComment.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="EnterComment.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="EnterName.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="EnterName.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="IniFile.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="IniFile.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="MainMenuDlg.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="MainMenuDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="onvertThemeDlg.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="onvertThemeDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="RageUtil.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="RageUtil.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Registry.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Registry.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="Resource.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="ShowComment.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="ShowComment.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="smpackage.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="smpackage.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="SmpackageExportDlg.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="SmpackageExportDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="SMPackageInstallDlg.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="SMPackageInstallDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="SMPackageUtil.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="smpackageUtil.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="StdAfx.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
UsePrecompiledHeader="1"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
UsePrecompiledHeader="1"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="StdAfx.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="TreeCtrlEx.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="TreeCtrlEx.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="UninstallOld.cpp">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions=""
|
||||
BasicRuntimeChecks="3"
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
PreprocessorDefinitions=""
|
||||
BrowseInformation="1"/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="UninstallOld.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resources"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath="converttheme.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="editmetrics.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="install.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="manage.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="menu.bmp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="res\smpackage.ico">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="smpackage.ICO">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="smpackage.rc">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="res\smpackage.rc2">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="res\StepMania.ICO">
|
||||
</File>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath="..\zlib\zdll.lib">
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
<Global
|
||||
Name="RESOURCE_FILE"
|
||||
Value="smpackage.rc"/>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
Reference in New Issue
Block a user