UBOOL USetupDefinition::CheckRequirement( FString Folder, USetupProduct* RequiredProduct, FString& FailMessage ) { guard(USetupDefinition::CheckRequirement); // Verify that requirements are met. FString ExistingVersion; FString R=RequiredProduct->Product; if( R==TEXT("Unreal Tournament") ) R = TEXT("UnrealTournament"); if( !GConfig->GetString( *R, TEXT("Version"), ExistingVersion, *(Folder + PATH_SEPARATOR TEXT("System") PATH_SEPARATOR SETUP_INI) ) ) { // See if old version file is there. if ( RequiredProduct->OldVersionInstallCheck!=TEXT("") && GFileManager->FileSize(*(Folder * RequiredProduct->OldVersionInstallCheck))>0 ) { // Old version found. ExistingVersion = RequiredProduct->OldVersionNumber; } else { // Can't install here. FailMessage = FString::Printf( LocalizeError(TEXT("MissingProduct")), Patch ? LocalizeError(TEXT("MissingProductThis")) : *LocalProduct, *RequiredProduct->Product, *RequiredProduct->Product ); return 0; } } if( appAtoi(*ExistingVersion) < appAtoi(*RequiredProduct->Version) ) { FailMessage = FString::Printf(LocalizeError(TEXT("OldVersion")), Patch ? LocalizeError(TEXT("MissingProductThis")) : *LocalProduct, *RequiredProduct->Product, appAtoi(*RequiredProduct->Version), appAtoi(*ExistingVersion), *RequiredProduct->Product, appAtoi(*RequiredProduct->Version) ); return 0; } return 1; unguard; }
void USetupDefinition::DoUninstallSteps( FInstallPoll* Poll ) { guard(USetupDefinition::DoInstallSteps); // Handle all uninstall steps. BeginSteps(); UninstallTotal=0, UninstallCount=0; UninstallTree( TEXT("ProcessUninstallCountTotal"), Poll, ProcessUninstallCountTotal ); UninstallTree( TEXT("ProcessUninstallRemove"), Poll, ProcessUninstallRemove ); TMultiMap<FString,FString>* Map = GConfig->GetSectionPrivate( TEXT("Setup"), 0, 0, *(DestPath * TEXT("System") * SETUP_INI) ); for( TArray<USetupGroup*>::TIterator GroupIt(UninstallComponents); GroupIt; ++GroupIt ) { (*GroupIt)->UninstallLog = TMultiMap<FString,FString>(); if( Map ) Map->RemovePair( TEXT("Group"), (*GroupIt)->GetName() ); } EndSteps(); // If reference counts exausted, delete unnecessary setup file so full directory can be removed. INT Refs=0; for( TMap<FString,FString>::TIterator It(RefCounts); It; ++It ) Refs += appAtoi( *It.Value() ); if( Refs==0 ) { GFileManager->Delete( *SetupIniFile ); RemoveEmptyDirectory( *BasePath(SetupIniFile) ); } unguard; }
INT FFileManagerWindows::UncompressedFileSize( const TCHAR* Filename ) { // default to not using the uncompressed file size INT Result = -1; // check for the presence of a .uncompressed_size manifest file which mirrors the Filename // if it exists, then the file was fully compressed, so we get the original uncompressed size for it FString UnCompressedSizeFilename = FString(Filename) + FString(TEXT(".uncompressed_size")); if( FileSize(*UnCompressedSizeFilename) != -1 ) { FString SizeString; appLoadFileToString(SizeString, *UnCompressedSizeFilename); check(SizeString.Len()); // get the uncompressed size from the file Result = appAtoi(*SizeString); } return Result; }
INT USetupDefinition::UpdateRefCount( const TCHAR* Key, const TCHAR* Value, INT Inc ) { guard(USetupDefinition::UpdateRefCount); // Increment reference count. FString RefKey = FString(Key) + TEXT(":") + Value; FString* CountPtr = RefCounts.Find( *RefKey ); if( CountPtr || Inc>0 ) { INT Count = (CountPtr ? appAtoi(**CountPtr) : 0) + Inc; if( Count>0 ) { RefCounts.Set( *RefKey, *FString::Printf(TEXT("%i"),Count) ); } else { RefCounts.Remove( *RefKey ); Count = 0; } return Count; } return 0; unguard; }
// // Command line. // UBOOL UXViewport::Exec( const TCHAR* Cmd, FOutputDevice& Ar ) { guard(UXViewport::Exec); if( UViewport::Exec( Cmd, Ar ) ) { return 1; } else if( ParseCommand(&Cmd,TEXT("EndFullscreen")) ) { EndFullscreen(); return 1; } else if( ParseCommand(&Cmd,TEXT("ToggleFullscreen")) ) { ToggleFullscreen(); return 1; } else if( ParseCommand(&Cmd,TEXT("Iconify")) ) { Iconify(); return 1; } else if( ParseCommand(&Cmd,TEXT("GetCurrentRes")) ) { Ar.Logf( TEXT("%ix%i"), SizeX, SizeY, (ColorBytes?ColorBytes:2)*8 ); return 1; } else if( ParseCommand(&Cmd,TEXT("GetCurrentColorDepth")) ) { Ar.Logf( TEXT("%i"), (ColorBytes?ColorBytes:2)*8 ); return 1; } else if( ParseCommand(&Cmd,TEXT("GetColorDepths")) ) { Ar.Log( TEXT("16 32") ); return 1; } else if( ParseCommand(&Cmd,TEXT("GetCurrentRenderDevice")) ) { Ar.Log( RenDev->GetClass()->GetPathName() ); return 1; } else if( ParseCommand(&Cmd,TEXT("SetRenderDevice")) ) { FString Saved = RenDev->GetClass()->GetPathName(); INT SavedSizeX=SizeX, SavedSizeY=SizeY, SavedColorBytes=ColorBytes, SavedFullscreen=((BlitFlags & BLIT_Fullscreen)!=0); TryRenderDevice( Cmd, SizeX, SizeY, ColorBytes, SavedFullscreen ); if( !RenDev ) { TryRenderDevice( *Saved, SavedSizeX, SavedSizeY, SavedColorBytes, SavedFullscreen ); check(RenDev); Ar.Log(TEXT("0")); } else Ar.Log(TEXT("1")); return 1; } else if( ParseCommand(&Cmd,TEXT("GetRes")) ) { return 1; } else if( ParseCommand(&Cmd,TEXT("SetRes")) ) { INT X=appAtoi(Cmd); TCHAR* CmdTemp = (TCHAR*) (appStrchr(Cmd,'x') ? appStrchr(Cmd,'x')+1 : appStrchr(Cmd,'X') ? appStrchr(Cmd,'X')+1 : TEXT("")); INT Y=appAtoi(CmdTemp); Cmd = CmdTemp; CmdTemp = (TCHAR*) (appStrchr(Cmd,'x') ? appStrchr(Cmd,'x')+1 : appStrchr(Cmd,'X') ? appStrchr(Cmd,'X')+1 : TEXT("")); INT C=appAtoi(CmdTemp); INT NewColorBytes = C ? C/8 : ColorBytes; if( X && Y ) { HoldCount++; UBOOL Result = RenDev->SetRes( X, Y, NewColorBytes, IsFullscreen() ); HoldCount--; if( !Result ) EndFullscreen(); } return 1; } else if( ParseCommand(&Cmd,TEXT("Preferences")) ) { // No preferences window. return 1; } else return 0; unguard; }
void USetupDefinition::Init() { guard(USetupDefinition::Init); // Figure out source folder. SrcPath = appBaseDir(); if( SrcPath.Right(1)==PATH_SEPARATOR ) SrcPath = SrcPath.LeftChop( 1 ); while( SrcPath.Len() && SrcPath.Right(1)!=PATH_SEPARATOR ) SrcPath = SrcPath.LeftChop( 1 ); if( SrcPath.Len() ) SrcPath = SrcPath.LeftChop( 1 ); // See if installing a packed .umod file. FString Token; const TCHAR* Cmd = appCmdLine(); ParseToken( Cmd, Token, 0 ); if( Token==TEXT("install") || (Token==TEXT("") && MasterProduct==TEXT("")) ) { // Installing. if( Token==TEXT("install") ) { // Verify that the specified module exists. ParseToken( Cmd, Token, 0 ); GFileManager = new FFileManagerArc(GFileManager,*Token,1); GFileManager->Init(0); Token = TEXT(""); ParseToken( Cmd, Token, 0 ); // Reload config from the new filer manager. GConfig->Flush(1,MANIFEST_FILE MANIFEST_EXT); LoadConfig(); LoadLocalized(); } // Detach configuration file so we can modify it locally. GConfig->Detach( *ConfigFile ); Manifest = 1; } else if( Token==TEXT("reallyuninstall") ) { // Running uninstaller from temp folder. ParseToken( Cmd, Product, 0 ); Parse( appCmdLine(), TEXT("PATH="), DestPath ); if( DestPath.Right(1)==PATH_SEPARATOR ) DestPath = DestPath.LeftChop( 1 ); while( DestPath.Len() && DestPath.Right(1)!=PATH_SEPARATOR ) DestPath = DestPath.LeftChop( 1 ); Uninstalling = 1; } else if( Token==TEXT("uninstall") || (Token==TEXT("") && MasterProduct!=TEXT("")) ) { // Running uninstaller for the first time. NoRun = 1; if( Token==TEXT("uninstall") ) ParseToken( Cmd, Product, 0 ); else Product = MasterProduct; PerformUninstallCopy(); } else appErrorf(TEXT("Setup: Unknown disposition")); // Validate everything. if( !appAtoi(*Version) && !Uninstalling && !NoRun ) appErrorf( TEXT("Setup: Missing version number") ); // Determine whether known to be installed. Exists = GetRegisteredProductFolder( Product, RegistryFolder ) && GFileManager->FileSize(*(RegistryFolder*TEXT("System")*SETUP_INI))>0; // If this is a mod, find required product's path. FolderExists = Exists; if( !Exists && !Uninstalling && !NoRun ) { FString RequiredProduct, FindFolder; for( TArray<FString>::TIterator It(Requires); It; ++It ) if( GConfig->GetString(**It, TEXT("Product"), RequiredProduct, *ConfigFile) ) { if( RequiredProduct==TEXT("Unreal Tournament") ) RequiredProduct = TEXT("UnrealTournament"); if( GetRegisteredProductFolder(RequiredProduct, FindFolder) && GFileManager->FileSize(*(FindFolder*TEXT("System")*SETUP_INI)) ) { RegistryFolder = FindFolder; FolderExists = 1; break; } } } // Figure language. FString Str; if( GConfig->GetString(TEXT("Engine.Engine"),TEXT("Language"),Str,*(RegistryFolder*TEXT("System\\Default.ini"))) ) UObject::SetLanguage( *Str ); LanguageChange(); unguard; }