#include <acknex.h>;
#include <windows.h>;
long __stdcall RegOpenKey(long hKey, char* lpSubKey, long phkResult);
#define PRAGMA_API RegOpenKey;advapi32!RegOpenKeyA
long __stdcall RegQueryValueEx(long hKey, char* lpValueName, long lpReserved, long lpType, long lpData, long lpcbData);
#define PRAGMA_API RegQueryValueEx;advapi32!RegQueryValueExA
long __stdcall RegCloseKey(long hKey);
#define PRAGMA_API RegCloseKey;advapi32!RegCloseKey
var reg_get_STRING(long HKEY, char* KEY, char* VALUE, STRING* *DATA)
{ long regPtr=0, DataType=0, DataLen=999;
if(RegOpenKey(HKEY, KEY, ®Ptr)) return(false);
if((RegQueryValueEx(regPtr,VALUE,0,&DataType,NULL,&DataLen))||(DataType!=1))
{ RegCloseKey(regPtr); return(false); }
STRING* tmpStr = str_create("");
str_cat_num(tmpStr, "\#%.0f", DataLen);
if(!*DATA) *DATA = str_create("");
str_cpy(*DATA, _chr(tmpStr)); str_remove(tmpStr);
//!!!!=>>following line causes error "invalid memory area STR"<<=!!!!
RegQueryValueEx(regPtr,VALUE,0,0,_chr(*DATA),&DataLen);
RegCloseKey(regPtr); return(true);
}
void getMyDocuments()
{
STRING* tmpStr = str_create("");
reg_get_STRING(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", "Personal", tmpStr);
str_cat(tmpStr, "\\My Game");
str_cpy(save_dir, tmpStr);
CreateDirectory(_chr(tmpStr),NULL);
ptr_remove(tmpStr);
error(save_dir);
}
void main()
{
warn_level=6;
getMyDocuments();
}