X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=windows.c;fp=windows.c;h=df04aa0f2a198ffaa88731dac85a3b72b5d4b415;hb=671f6544ac8b4a6eb68576b37344e84808511eb8;hp=0000000000000000000000000000000000000000;hpb=cf6e0e7ca1ef74f4090f660484bdc4726609b5d3;p=ext%2Fsubsurface.git diff --git a/windows.c b/windows.c new file mode 100644 index 0000000..df04aa0 --- /dev/null +++ b/windows.c @@ -0,0 +1,77 @@ +/* windows.c */ +/* implements Windows specific functions */ +#include "display-gtk.h" +#include + +static HKEY hkey; + +static int get_from_registry(HKEY hkey, const char *key) +{ + DWORD value; + DWORD len = 4; + LONG success; + + success = RegQueryValueEx(hkey, TEXT(key), NULL, NULL, + (LPBYTE) &value, &len ); + if (success != ERROR_SUCCESS) + return FALSE; /* that's what happens the first time we start */ + return value; +} + +void subsurface_open_conf(void) +{ + LONG success; + + success = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("Software\\subsurface"), 0, + KEY_QUERY_VALUE, &hkey); + if (success != ERROR_SUCCESS) { + success = RegCreateKeyEx(HKEY_CURRENT_USER, TEXT("Software\\subsurface"), + 0L, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, + NULL, &hkey, NULL); + if (success != ERROR_SUCCESS) + printf("CreateKey Software\\subsurface failed %ld\n", success); + } +} + +void subsurface_set_conf(char *name, pref_type_t type, const void *value) +{ + switch (type) { + case PREF_BOOL: + /* we simply store the value as DWORD */ + RegSetValueEx(hkey, TEXT(name), 0, REG_DWORD, (DWORD)value, 4); + break; + case PREF_STRING: + RegSetValueEx(hkey, TEXT(name), 0, REG_SZ, value, strlen(value)); + } +} + +const void *subsurface_get_conf(char *name, pref_type_t type) +{ + char *string; + int len; + + switch (type) { + case PREF_BOOL: + return get_from_registry(hkey, name) ? (void *) 1 : NULL; + case PREF_STRING: + string = malloc(80); + len = 80; + success = RegQueryValueEx(hkey, TEXT(name), NULL, NULL, + (LPBYTE) string, &len ); + if (success != ERROR_SUCCESS) { + /* that's what happens the first time we start - just return NULL */ + free(string); + return NULL; + } + return string; + } + /* we shouldn't get here */ + return NULL; +} + +void subsurface_close_conf(void) +{ + if (RegFlushKey(hkey) != ERROR_SUCCESS) + printf("RegFlushKey failed %ld\n"); + RegCloseKey(hkey); +}