Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
#include "stdafx.h"
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include "RegFunctions.h"
|
||||
|
||||
#include <fstream>
|
||||
|
||||
bool Registry::WriteString(const char *FileName_In, const char *Section_In,
|
||||
const char *KeyName_In, const char *Value_In)
|
||||
{
|
||||
return 0 != WritePrivateProfileString(Section_In, KeyName_In, Value_In, FileName_In);
|
||||
}
|
||||
|
||||
unsigned long Registry::ReadInt(const char *FileName_In, const char *Section_In, const char *KeyName_In)
|
||||
{
|
||||
return static_cast<unsigned long>(GetPrivateProfileInt(Section_In, KeyName_In, 0, FileName_In));
|
||||
}
|
||||
|
||||
bool Registry::ReadString(const char *FileName_In, const char *Section_In,
|
||||
const char *KeyName_In, char *Buffer_Out, int nBufferSize)
|
||||
{
|
||||
return 0 != GetPrivateProfileString(Section_In, KeyName_In,
|
||||
NULL, Buffer_Out, nBufferSize, FileName_In);
|
||||
}
|
||||
|
||||
bool Registry::WriteStruct(const char *FileName_In, const char *Section_In,
|
||||
const char *KeyName_In, void *Value_In, const int Size_in)
|
||||
{
|
||||
return 0 != WritePrivateProfileStruct(Section_In, KeyName_In, Value_In, Size_in, FileName_In);
|
||||
}
|
||||
|
||||
bool Registry::ReadStruct(const char *FileName_In, const char *Section_In,
|
||||
const char *KeyName_In, void *Value_Out, const int Size_in)
|
||||
{
|
||||
return 0 != GetPrivateProfileStruct(Section_In, KeyName_In, Value_Out, Size_in, FileName_In);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Registry::CSetupFile::CSetupFile()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
Registry::CSetupFile::CSetupFile(const char* szFileName)
|
||||
{
|
||||
Open(szFileName);
|
||||
}
|
||||
|
||||
Registry::CSetupFile::~CSetupFile()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
inline unsigned long sdbmHash(const unsigned char *str)
|
||||
{
|
||||
unsigned long hash = 0;
|
||||
int c;
|
||||
|
||||
while (c = *str++) { hash = c + (hash << 6) + (hash << 16) - hash; }
|
||||
return hash;
|
||||
}
|
||||
|
||||
bool Registry::CSetupFile::Open(const char* szFileName)
|
||||
{
|
||||
std::string fileLine;
|
||||
std::string szSection;
|
||||
std::string szKey;
|
||||
std::string szValue;
|
||||
|
||||
fileLine.reserve(4096);
|
||||
szSection.reserve(1024);
|
||||
szKey.reserve(1024);
|
||||
szValue.reserve(4096);
|
||||
|
||||
std::fstream file(szFileName, std::ios_base::in);
|
||||
|
||||
std::string::size_type nPosition = std::string::npos;
|
||||
std::string::size_type nEndPosition = std::string::npos;
|
||||
std::string::size_type nDataPosition = std::string::npos;
|
||||
std::string::size_type nDataEndPosition = std::string::npos;
|
||||
|
||||
unsigned long dwSectionValue = 0;
|
||||
|
||||
if(file.is_open())
|
||||
{
|
||||
while(std::getline(file, fileLine))
|
||||
{
|
||||
nPosition = fileLine.find_first_not_of(" \r\n\t");
|
||||
|
||||
if(std::string::npos != nPosition)
|
||||
{
|
||||
if('[' == fileLine[nPosition])
|
||||
{
|
||||
// <20><><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>
|
||||
nEndPosition = fileLine.find_first_of(']', nPosition);
|
||||
if(std::string::npos != nEndPosition)
|
||||
{
|
||||
szSection.assign(fileLine.begin() + nPosition + 1,
|
||||
fileLine.begin() + nEndPosition);
|
||||
|
||||
dwSectionValue = sdbmHash(reinterpret_cast<const unsigned char*>(szSection.c_str()));
|
||||
}
|
||||
}
|
||||
else if(0 != fileLine.compare(nPosition, sizeof(char) * 2, "//"))
|
||||
{
|
||||
// <20>ּ<EFBFBD> <20>ƴ<EFBFBD>
|
||||
nEndPosition = fileLine.find_first_of('=', nPosition);
|
||||
|
||||
if(std::string::npos != nEndPosition)
|
||||
{
|
||||
// nEndPosition <20>¿<EFBFBD><C2BF><EFBFBD> Key - Value Pair<69><72>.
|
||||
nDataEndPosition = fileLine.find_last_not_of("= \t", nEndPosition);
|
||||
|
||||
if(std::string::npos != nDataEndPosition)
|
||||
{
|
||||
// Ű <20>о<EFBFBD><D0BE><EFBFBD>.
|
||||
szKey.assign(fileLine.begin() + nPosition,
|
||||
fileLine.begin() + nDataEndPosition + 1);
|
||||
|
||||
nDataPosition = fileLine.find_first_not_of("= \t", nEndPosition);
|
||||
|
||||
if(std::string::npos != nDataPosition)
|
||||
{
|
||||
nDataEndPosition = fileLine.find_last_not_of(" \r\n\t");
|
||||
|
||||
if(std::string::npos != nDataEndPosition)
|
||||
{
|
||||
// <20><> <20>о<EFBFBD><D0BE><EFBFBD>
|
||||
m_SetupMap.insert(SetupMap::value_type(
|
||||
sdbmHash(reinterpret_cast<const unsigned char*>(szKey.c_str())) + dwSectionValue,
|
||||
Data(szSection, szKey,
|
||||
std::string(fileLine.begin() + nDataPosition, fileLine.begin() + nDataEndPosition + 1))));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void Registry::CSetupFile::Clear()
|
||||
{
|
||||
m_SetupMap.clear();
|
||||
}
|
||||
|
||||
const char* Registry::CSetupFile::GetString(const char* szSection, const char* szKey,
|
||||
const char* szDefaultValue)
|
||||
{
|
||||
DWORD dwHashValue = sdbmHash(reinterpret_cast<const unsigned char*>(szSection))
|
||||
+ sdbmHash(reinterpret_cast<const unsigned char*>(szKey));
|
||||
|
||||
std::pair<SetupMap::iterator, SetupMap::iterator> pos_pair = m_SetupMap.equal_range(dwHashValue);
|
||||
|
||||
for(; pos_pair.first != pos_pair.second; ++pos_pair.first)
|
||||
{
|
||||
Data& data = pos_pair.first->second;
|
||||
|
||||
if(0 == data.m_szSection.compare(szSection) &&
|
||||
0 == data.m_szKey.compare(szKey))
|
||||
{
|
||||
return data.m_szValue.c_str();
|
||||
}
|
||||
}
|
||||
|
||||
return szDefaultValue;
|
||||
}
|
||||
|
||||
unsigned int Registry::CSetupFile::GetInt(const char* szSection, const char* szKey,
|
||||
unsigned int nDefaultValue)
|
||||
{
|
||||
const char* szStr = GetString(szSection, szKey);
|
||||
|
||||
if(0 != szStr)
|
||||
{
|
||||
return atoi(szStr);
|
||||
}
|
||||
|
||||
return nDefaultValue;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
#ifndef _REGISTRY_FUNCTIONS_H_
|
||||
#define _REGISTRY_FUNCTIONS_H_
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
|
||||
namespace Registry
|
||||
{
|
||||
bool WriteString(const char *FileName_In, const char *Section_In,
|
||||
const char *KeyName_In, const char *Value_In);
|
||||
|
||||
unsigned long ReadInt(const char *FileName_In,
|
||||
const char *Section_In, const char *KeyName_In);
|
||||
|
||||
bool ReadString(const char *FileName_In, const char *Section_In,
|
||||
const char *KeyName_In, char *Buffer_Out, int nBufferSize);
|
||||
|
||||
bool WriteStruct(const char *FileName_In, const char *Section_In,
|
||||
const char *KeyName_In, void *Value_In, const int Size_in);
|
||||
|
||||
bool ReadStruct(const char *FileName_In, const char *Section_In,
|
||||
const char *KeyName_In, void *Value_Out, const int Size_in);
|
||||
|
||||
class CSetupFile
|
||||
{
|
||||
public:
|
||||
|
||||
CSetupFile();
|
||||
CSetupFile(const char* szFileName);
|
||||
~CSetupFile();
|
||||
|
||||
bool Open(const char* szFileName);
|
||||
void Clear();
|
||||
|
||||
const char* GetString(const char* szSection, const char* szKey, const char* szDefaultValue = 0);
|
||||
unsigned int GetInt(const char* szSection, const char* szKey, unsigned int nDefaultValue = 0);
|
||||
|
||||
private:
|
||||
|
||||
struct Data
|
||||
{
|
||||
std::string m_szSection;
|
||||
std::string m_szKey;
|
||||
std::string m_szValue;
|
||||
|
||||
Data(const std::string& szSection, const std::string& szKey, const std::string& szValue)
|
||||
: m_szSection(szSection), m_szKey(szKey), m_szValue(szValue)
|
||||
{
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
typedef std::multimap<unsigned long, Data> SetupMap;
|
||||
|
||||
SetupMap m_SetupMap;
|
||||
};
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user