#include <windows.h>


BOOL GetRegVal(char *subKey, char *name, void *p, int len)
{
       HKEY hKey;
       DWORD valType, valSize = (DWORD)len;
       LONG r;

       if (! RegOpenKeyEx(HKEY_CURRENT_USER, subKey, 0, KEY_ALL_ACCESS,
                       &hKey)) {
               r = RegQueryValueEx(hKey, name, NULL, &valType, (LPBYTE)p, &valSize);
               RegCloseKey(hKey);
               if (r)
                       return FALSE;
               else
                       return TRUE;
       } else
               return FALSE;
}


void SetRegVal(char *subKey, char *name, void *p, int len)
{
       HKEY hKey;
       DWORD disposition;

       RegCreateKeyEx(HKEY_CURRENT_USER, subKey, 0, NULL,
                       REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey,
                       &disposition);
       RegSetValueEx(hKey, name, 0, REG_BINARY, (CONST BYTE*)p, (DWORD)len);
       RegCloseKey(hKey);
}


BOOL GetPlacement(char *subKey, RECT *rect)
{
       if (GetRegVal(subKey, "Placement", rect, sizeof(RECT)))
               return TRUE;
       else
               return FALSE;
}


void SavePlacement(HWND hwnd, char *subKey)
{
       RECT rect;

       GetWindowRect(hwnd, &rect);
       SetRegVal(subKey, "Placement", &rect, sizeof(RECT));
}


BOOL SaveKey(char *subKey, char *fileName)
{
       HKEY hKey;

       if (! RegOpenKeyEx(HKEY_CURRENT_USER, subKey, 0, KEY_ALL_ACCESS,
                       &hKey)) {
               if (RegSaveKey(hKey, (LPCTSTR)fileName, NULL)) {
                       RegCloseKey(hKey);
                       return FALSE;
               }
               RegCloseKey(hKey);
               return TRUE;
       } else
               return FALSE;
}


BOOL RestoreKey(char *subKey, char *fileName)
{
       HKEY hKey;

       if (! RegOpenKeyEx(HKEY_CURRENT_USER, subKey, 0, KEY_ALL_ACCESS,
                       &hKey)) {
               if (RegRestoreKey(hKey, (LPCTSTR)fileName, 0)) {
                       RegCloseKey(hKey);
                       return FALSE;
               }
               RegCloseKey(hKey);
               return TRUE;
       } else
               return FALSE;
}