Browse Source

Implement register and ini via Radon

pull/25/head
Anders Jenbo 7 years ago
parent
commit
a050754339
  1. 5
      CMakeLists.txt
  2. 1
      Stub/dx.cpp
  3. 11
      Stub/miniwin.cpp
  4. 2
      Stub/miniwin.h
  5. 81
      Stub/storm.cpp

5
CMakeLists.txt

@ -163,6 +163,11 @@ set(STUB_SOURCES
3rdParty/libsmacker/smk_hufftree.c
3rdParty/libsmacker/smacker.c
3rdParty/Radon/Radon/source/File.cpp
3rdParty/Radon/Radon/source/Key.cpp
3rdParty/Radon/Radon/source/Named.cpp
3rdParty/Radon/Radon/source/Section.cpp
3rdParty/StormLib/src/FileStream.cpp
3rdParty/StormLib/src/SBaseCommon.cpp
3rdParty/StormLib/src/SBaseFileTable.cpp

1
Stub/dx.cpp

@ -361,6 +361,7 @@ void __fastcall dx_init(HWND hWnd)
lpDDSPrimary = &stub_surface;
lpDDSBackBuf = &stub_surface;
lpDDPalette = &stub_palette;
LoadGamma();
}
void __cdecl dx_cleanup()

11
Stub/miniwin.cpp

@ -107,7 +107,7 @@ DWORD WINAPI GetModuleFileNameA(HMODULE hModule, LPSTR lpFilename, DWORD nSize)
SDL_free(name);
int len = strlen(lpFilename);
lpFilename[len-1] = '\\';
lpFilename[len - 1] = '\\';
return len;
}
@ -290,11 +290,10 @@ DWORD WINAPI GetWindowThreadProcessId(HWND hWnd, LPDWORD lpdwProcessId)
DWORD WINAPI GetPrivateProfileStringA(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString,
DWORD nSize, LPCSTR lpFileName)
{
DUMMY();
strncpy(lpReturnedString, lpDefault, nSize);
return strlen(lpReturnedString);
if (!SRegLoadString(lpAppName, lpKeyName, 0, lpReturnedString, nSize)) {
strncpy(lpReturnedString, lpDefault, nSize);
SRegSaveString(lpAppName, lpKeyName, 0, lpReturnedString);
}
}
int MessageBoxA(HWND hWnd, const char *Text, const char *Title, UINT Flags)

2
Stub/miniwin.h

@ -41,8 +41,6 @@
#define VOID void
extern void *prealpha_mpq;
typedef char CHAR;
typedef uint16_t SHORT;
typedef int32_t LONG;

81
Stub/storm.cpp

@ -1,7 +1,20 @@
#include "../3rdParty/Radon/Radon/include/Radon.hpp"
#include "../types.h"
DWORD nLastError = 0;
std::string getIniPath()
{
char path[280];
int len = GetModuleFileName(ghInst, path, 260);
path[len - 1] = '/';
strcat(path, "diablo.ini");
return path;
}
radon::File ini(getIniPath());
// BOOL STORMAPI SFileCloseArchive(HANDLE hArchive)
// {
// UNIMPLEMENTED();
@ -254,37 +267,87 @@ void *STORMAPI SMemReAlloc(void *location, unsigned int amount, char *logfilenam
UNIMPLEMENTED();
}
BOOL STORMAPI SRegLoadData(const char *keyname, const char *valuename, int size, LPBYTE lpData, BYTE flags,
LPDWORD lpcbData)
bool getIniValue(const char *sectionName, const char *keyName, char *string, int stringSize, int *dataSize = NULL)
{
DUMMY();
return 0;
radon::Section* section = ini.getSection(sectionName);
if (!section)
return false;
radon::Key *key = section->getKey(keyName);
if (!key)
return false;
std::string value = key->getStringValue();
if (dataSize)
*dataSize = value.length();
if (string)
strncpy(string, value.c_str(), stringSize);
return true;
}
void setIniValue(const char *sectionName, const char *keyName, char *value, int len = 0)
{
radon::Section* section = ini.getSection(sectionName);
if (!section) {
ini.addSection(sectionName);
section = ini.getSection(sectionName);
}
std::string stringValue(value, len ?: strlen(value));
radon::Key *key = section->getKey(keyName);
if (!key) {
section->addKey(radon::Key(keyName, stringValue));
} else {
key->setValue(stringValue);
}
ini.saveToFile();
}
BOOL STORMAPI SRegLoadData(const char *keyname, const char *valuename, int size, LPBYTE lpData, BYTE flags, LPDWORD lpcbData)
{
return getIniValue(keyname, valuename, lpData, size, lpcbData);
}
BOOL STORMAPI SRegLoadString(const char *keyname, const char *valuename, BYTE flags, char *buffer, unsigned int buffersize)
{
UNIMPLEMENTED();
return getIniValue(keyname, valuename, buffer, buffersize);
}
BOOL STORMAPI SRegLoadValue(const char *keyname, const char *valuename, BYTE flags, int *value)
{
DUMMY_PRINT("key: %s value: %s", keyname, valuename);
char string[10];
if (getIniValue(keyname, valuename, string, 10)) {
*value = strtol(string, NULL, 10);
return TRUE;
}
return FALSE;
}
BOOL STORMAPI SRegSaveData(const char *keyname, const char *valuename, int size, BYTE *lpData, DWORD cbData)
{
UNIMPLEMENTED();
setIniValue(keyname, valuename, (char *)lpData, cbData);
return TRUE;
}
BOOL STORMAPI SRegSaveString(const char *keyname, const char *valuename, BYTE flags, char *string)
{
UNIMPLEMENTED();
setIniValue(keyname, valuename, string);
return TRUE;
}
BOOL STORMAPI SRegSaveValue(const char *keyname, const char *valuename, BYTE flags, DWORD result)
{
DUMMY_PRINT("key: %s value: %s", keyname, valuename);
char str[10];
sprintf(str, "%d", result);
setIniValue(keyname, valuename, str);
return TRUE;
}

Loading…
Cancel
Save