From f02b8e3a3d6f05d6e42fab5d91c6aa96bfecfc91 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Thu, 8 Dec 2005 21:38:18 +0000 Subject: [PATCH] move FS mounting to ArchHooks if executable is under Program Files, then mount /Save to ~/PRODUCT_ID/Save --- stepmania/src/ProductInfo.h | 10 +++-- .../src/arch/ArchHooks/ArchHooks_Win32.cpp | 40 +++++++++++++++++++ 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/stepmania/src/ProductInfo.h b/stepmania/src/ProductInfo.h index e537abbf9b..e04b744d47 100644 --- a/stepmania/src/ProductInfo.h +++ b/stepmania/src/ProductInfo.h @@ -9,14 +9,18 @@ #define PRODUCT_NAME_BARE StepMania #define PRODUCT_VER_BARE 4.0 CVS //#define PRODUCT_VER_BARE 4.0 alpha 1 +// String used for the install directory and registry locations +// Official releases = "StepMania"; intermediate releases = "StepMania CVS". +#define PRODUCT_ID_BARE StepMania CVS // These cannot be #undef'd so make them unlikely to conflict with anything #define PRODUCT_STRINGIFY(x) #x #define PRODUCT_XSTRINGIFY(x) PRODUCT_STRINGIFY(x) -#define PRODUCT_NAME PRODUCT_XSTRINGIFY(PRODUCT_NAME_BARE) -#define PRODUCT_VER PRODUCT_XSTRINGIFY(PRODUCT_VER_BARE) -#define PRODUCT_NAME_VER PRODUCT_NAME " " PRODUCT_VER +#define PRODUCT_NAME PRODUCT_XSTRINGIFY(PRODUCT_NAME_BARE) +#define PRODUCT_VER PRODUCT_XSTRINGIFY(PRODUCT_VER_BARE) +#define PRODUCT_NAME_VER PRODUCT_NAME " " PRODUCT_VER +#define PRODUCT_ID PRODUCT_XSTRINGIFY(PRODUCT_ID_BARE) #define VIDEO_TROUBLESHOOTING_URL "http://www.stepmania.com/stepmania/mediawiki.php?title=Video_Driver_Troubleshooting" #define REPORT_BUG_URL "http://sourceforge.net/tracker/?func=add&group_id=37892&atid=421366" diff --git a/stepmania/src/arch/ArchHooks/ArchHooks_Win32.cpp b/stepmania/src/arch/ArchHooks/ArchHooks_Win32.cpp index a72e88e2ef..4115c9fc5e 100644 --- a/stepmania/src/arch/ArchHooks/ArchHooks_Win32.cpp +++ b/stepmania/src/arch/ArchHooks/ArchHooks_Win32.cpp @@ -406,6 +406,46 @@ int64_t ArchHooks::GetMicrosecondsSinceStart( bool bAccurate ) return ret; } +#include "archutils/Win32/RegistryAccess.h" +#include "ProductInfo.h" +#include "RageFileManager.h" +#include + +void ArchHooks_Win32::MountInitialFilesystems( const CString &sDirOfExecutable ) +{ + /* All Windows data goes in the directory one level above the executable. */ + CHECKPOINT_M( ssprintf( "DOE \"%s\"", sDirOfExecutable.c_str()) ); + CStringArray parts; + split( sDirOfExecutable, "/", parts ); + CHECKPOINT_M( ssprintf( "... %i parts", parts.size()) ); + ASSERT_M( parts.size() > 1, ssprintf("Strange sDirOfExecutable: %s", sDirOfExecutable.c_str()) ); + CString Dir = join( "/", parts.begin(), parts.end()-1 ); + FILEMAN->Mount( "dir", Dir, "/" ); + + CString sMyDocumentsDir; + { + bool bSuccess = RegistryAccess::GetRegValue( "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders", "Personal", sMyDocumentsDir ); + ASSERT( bSuccess ); + sMyDocumentsDir.Replace( '\\', '/' ); + sMyDocumentsDir += "/"; + } + + CString sProgramFilesDir; + { + bool bSuccess = RegistryAccess::GetRegValue( "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion", "ProgramFilesDir", sProgramFilesDir ); + ASSERT( bSuccess ); + sProgramFilesDir.Replace( '\\', '/' ); + sProgramFilesDir += "/"; + } + + bool bInstalledToProgramFiles = BeginsWith( sDirOfExecutable, sProgramFilesDir ); + if( bInstalledToProgramFiles ) + { + CString sPersonalDir = sMyDocumentsDir + PRODUCT_ID + "/"; + FILEMAN->Mount( "dir", sPersonalDir + "Save", "/Save" ); + } +} + /* * (c) 2003-2004 Glenn Maynard, Chris Danford * All rights reserved.