BOOL GetSetting(char* pszGameName, char* pszName, VARIANT *pVal) { if ( !pszName && !*pszName ) return FALSE; if ( (pszGameName && IsGlobalSetting(pszName)) || IgnoreSetting(pszName) ) return FALSE; struct rc_option *option; if(!(option = rc_get_option2(opts, pszName))) return FALSE; HKEY hKey = 0; char szKey[MAX_PATH]; lstrcpy(szKey, REG_BASEKEY); lstrcat(szKey, "\\"); if ( !pszGameName ) lstrcat(szKey, REG_GLOBALS); else lstrcat(szKey, REG_DEFAULT); if ( RegOpenKeyEx(HKEY_CURRENT_USER, szKey, 0, KEY_QUERY_VALUE, &hKey)!=ERROR_SUCCESS ) hKey = 0; HKEY hGameKey = 0; if ( pszGameName && *pszGameName ) { char szGameKey[MAX_PATH]; lstrcpy(szGameKey, REG_BASEKEY); lstrcat(szGameKey, "\\"); lstrcat(szGameKey, pszGameName); if ( RegOpenKeyEx(HKEY_CURRENT_USER, szGameKey, 0, KEY_QUERY_VALUE, &hGameKey)!=ERROR_SUCCESS ) hGameKey = 0; } char szValue[4096]; char szHelp[4096]; lstrcpy(szHelp, ""); if ( IsPathOrFile(option->name) ) { GetInstallDir(szHelp, sizeof szHelp); lstrcat(szHelp, "\\"); } lstrcat(szHelp, option->deflt); char szDefault[4096]; RegLoadOpts(hKey, option, szHelp, szDefault); RegLoadOpts(hGameKey, option, szDefault, szValue); CComVariant vValue(szValue); switch ( option->type ) { case rc_int: VariantChangeType(&vValue, &vValue, 0, VT_I4); break; case rc_bool: VariantChangeType(&vValue, &vValue, 0, VT_BOOL); break; case rc_float: VariantChangeType(&vValue, &vValue, 0, VT_R4); break; } if ( hGameKey ) RegCloseKey(hGameKey); if ( hKey ) RegCloseKey(hKey); vValue.Detach(pVal); return TRUE; }
BOOL CloFile::IsDirectoryExists(LPCTSTR lpszFileName) { return ( 0 != IsPathOrFile(lpszFileName) ) ? FALSE: TRUE; }
void LoadGlobalSettings() { bool fNew = false; char szInstallDir[MAX_PATH]; GetInstallDir(szInstallDir, sizeof szInstallDir); lstrcat(szInstallDir, "\\"); char szKey[MAX_PATH]; lstrcpy(szKey, REG_BASEKEY); lstrcat(szKey, "\\"); lstrcat(szKey, REG_GLOBALS); HKEY hKey = 0; if ( RegOpenKeyEx(HKEY_CURRENT_USER, szKey, 0, KEY_QUERY_VALUE, &hKey)!=ERROR_SUCCESS ) hKey = 0; rc_option* opts[10]; int sp = 0; char szValue[4096]; opts[sp] = ::opts; while ( sp>=0 ) { switch ( opts[sp]->type ) { case rc_bool: case rc_string: case rc_int: case rc_float: if ( !IsGlobalSetting(opts[sp]->name) || IgnoreSetting(opts[sp]->name) ) break; char szDefault[512]; lstrcpy(szDefault, ""); if ( IsPathOrFile(opts[sp]->name) ) lstrcpy(szDefault, szInstallDir); lstrcat(szDefault, opts[sp]->deflt); fNew |= RegLoadOpts(hKey, opts[sp], szDefault, szValue); rc_set_option3(opts[sp], szValue, 0); break; case rc_end: sp--; continue; case rc_link: opts[sp+1] = (rc_option*) opts[sp]->dest; opts[sp]++; sp++; continue; } opts[sp]++; } if ( hKey ) RegCloseKey(hKey); if ( fNew ) SaveGlobalSettings(); }
BOOL CloFile::IsFileExists(LPCTSTR lpszFileName) { return ( 1 != IsPathOrFile(lpszFileName) ) ? FALSE : TRUE; }