Code:
#ifdef _WIN32
#define REGISTRY_KEY "Software\\shoecake\\Some Cool Game"
#endif
int load_setting_int(const char* name, int def)
{
#ifdef _WIN32
HKEY handle;
LONG err = ::RegOpenKeyEx(
HKEY_CURRENT_USER, REGISTRY_KEY, 0, KEY_QUERY_VALUE, &handle);
if (err != ERROR_SUCCESS) { return def; }
DWORD value;
DWORD size = sizeof(value);
DWORD type = REG_DWORD;
err = ::RegQueryValueEx(
handle, name, NULL, &type, (LPBYTE) &value, &size);
::RegCloseKey(handle);
if (err != ERROR_SUCCESS) { return def; }
return (int) value;
#else
# error Not implemented yet
#endif
}
////////////////////////////////////////////////////////////////////////////////
char* load_setting_string(const char* name)
{
#ifdef _WIN32
HKEY handle;
LONG err = ::RegOpenKeyEx
(HKEY_CURRENT_USER, REGISTRY_KEY, 0, KEY_QUERY_VALUE, &handle);
if (err != ERROR_SUCCESS) { return NULL; }
char* str = NULL;
DWORD size = 1;
err = ::RegQueryValueEx(handle, name, NULL, NULL, NULL, &size);
if (err == ERROR_SUCCESS)
{
str = (char*) malloc(size);
DWORD type = REG_SZ;
err = ::RegQueryValueEx(
handle, name, NULL, &type, (LPBYTE) str, (DWORD*) &size);
if (err != ERROR_SUCCESS)
{
free(str); str = NULL;
}
}
::RegCloseKey(handle);
return str;
#else
# error Not implemented yet
#endif
}
////////////////////////////////////////////////////////////////////////////////
void save_setting_int(const char* name, int value)
{
#ifdef _WIN32
HKEY handle;
DWORD disposition;
LONG err = ::RegCreateKeyEx(
HKEY_CURRENT_USER, REGISTRY_KEY, 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_WRITE, NULL, &handle, &disposition);
if (err != ERROR_SUCCESS) { return; }
err = ::RegSetValueEx(
handle, name, 0, REG_DWORD, (LPBYTE) &value, sizeof(value));
::RegCloseKey(handle);
#else
# error Not implemented yet
#endif
}
////////////////////////////////////////////////////////////////////////////////
void save_setting_string(const char* name, const char* str)
{
#ifdef _WIN32
HKEY handle;
DWORD disposition;
LONG err = ::RegCreateKeyEx(
HKEY_CURRENT_USER, REGISTRY_KEY, 0, NULL, REG_OPTION_NON_VOLATILE,
KEY_WRITE, NULL, &handle, &disposition);
if (err != ERROR_SUCCESS) { return; }
err = ::RegSetValueEx(
handle, name, 0, REG_SZ, (LPBYTE) str, strlen(str) + 1);
::RegCloseKey(handle);
#else
# error Not implemented yet
#endif
}