|
|
/****************************************************************************
Copyright (c) Microsoft Corporation 1997-1999 All rights reserved
***************************************************************************/
#include "pch.h"
DEFINE_MODULE("RISETUP")
//
// GetAutomatedOptions( )
//
HRESULT GetAutomatedOptions( ) { TraceFunc("GetAutomatedOptions( )\n" );
HRESULT hr = S_OK; BOOL b; DWORD dwSize; WCHAR szTemp[ 32 ]; DWORD pathlen,archlen; WCHAR archscratch[10];
INFCONTEXT SectionContext; INFCONTEXT context;
Assert( g_Options.hinfAutomated != INVALID_HANDLE_VALUE );
// make sure this is our automated file
b = SetupFindFirstLine( g_Options.hinfAutomated, L"risetup", NULL, &SectionContext ); if ( !b ) goto Cleanup;
// Tree Root
dwSize = ARRAYSIZE( g_Options.szIntelliMirrorPath ); b = SetupFindFirstLine( g_Options.hinfAutomated, L"risetup", L"RootDir", &context ); if ( !b ) goto Cleanup; b = SetupGetStringField( &context, 1, g_Options.szIntelliMirrorPath, dwSize, &dwSize ); if ( !b ) goto Cleanup; g_Options.fIMirrorDirectory = TRUE;
// Source Path
dwSize = ARRAYSIZE( g_Options.szSourcePath ); b = SetupFindFirstLine( g_Options.hinfAutomated, L"risetup", L"Source", &context ); if ( !b ) goto Cleanup; b = SetupGetStringField( &context, 1, g_Options.szSourcePath, dwSize, &dwSize ); if ( !b ) goto Cleanup;
// Installation Directory Name
dwSize = ARRAYSIZE( g_Options.szInstallationName ); b = SetupFindFirstLine( g_Options.hinfAutomated, L"risetup", L"Directory", &context ); if ( !b ) goto Cleanup; b = SetupGetStringField( &context, 1, g_Options.szInstallationName, dwSize, &dwSize ); if ( !b ) goto Cleanup;
// SIF Description
dwSize = ARRAYSIZE( g_Options.szDescription ); b = SetupFindFirstLine( g_Options.hinfAutomated, L"risetup", L"Description", &context ); if ( !b ) goto Cleanup; b = SetupGetStringField( &context, 1, g_Options.szDescription, dwSize, &dwSize ); if ( !b ) goto Cleanup; g_Options.fRetrievedWorkstationString = TRUE;
// SIF Help Text
dwSize = ARRAYSIZE( g_Options.szHelpText ); b = SetupFindFirstLine( g_Options.hinfAutomated, L"risetup", L"HelpText", &context ); if ( !b ) goto Cleanup; b = SetupGetStringField( &context, 1, g_Options.szHelpText, dwSize, &dwSize ); if ( !b ) goto Cleanup;
// language -- OPTIONAL --
dwSize = ARRAYSIZE( g_Options.szLanguage ); b = SetupFindFirstLine( g_Options.hinfAutomated, L"risetup", L"Language", &context ); if ( b ) { b = SetupGetStringField( &context, 1, g_Options.szLanguage, dwSize, &dwSize ); g_Options.fLanguageSet = TRUE; if (b) { g_Options.fLanguageOverRide = TRUE; } }
// OSC Screens - OPTIONAL - defaults to LeaveAlone
g_Options.fScreenLeaveAlone = FALSE; g_Options.fScreenOverwrite = FALSE; g_Options.fScreenSaveOld = FALSE; dwSize = ARRAYSIZE( szTemp ); b = SetupFindFirstLine( g_Options.hinfAutomated, L"risetup", L"Screens", &context ); if ( b ) { b = SetupGetStringField( &context, 1, szTemp, dwSize, &dwSize ); if ( b ) { if ( _wcsicmp( szTemp, L"overwrite" ) == 0 ) { DebugMsg( "AUTO: Overwrite existing screens\n" ); g_Options.fScreenOverwrite = TRUE; } else if ( _wcsicmp( szTemp, L"backup" ) == 0 ) { g_Options.fScreenSaveOld = TRUE; } } } if ( !g_Options.fScreenOverwrite && !g_Options.fScreenSaveOld ) { g_Options.fScreenLeaveAlone = TRUE; }
// Archtecture - OPTIONAL - defaults to INTEL
dwSize = ARRAYSIZE( szTemp ); b = SetupFindFirstLine( g_Options.hinfAutomated, L"risetup", L"Architecture", &context ); if ( b ) { b = SetupGetStringField( &context, 1, szTemp, dwSize, &dwSize ); if ( b ) { if ( _wcsicmp( szTemp, L"ia64" ) == 0 ) { g_Options.ProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64; wcscpy( g_Options.ProcessorArchitectureString, L"ia64" ); }
if ( _wcsicmp( szTemp, L"x86" ) == 0 ) { g_Options.ProcessorArchitecture = PROCESSOR_ARCHITECTURE_INTEL; wcscpy( g_Options.ProcessorArchitectureString, L"i386" ); } } }
if (g_Options.ProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL) { wcscpy( archscratch, L"\\i386"); archlen = 5; } else { wcscpy( archscratch, L"\\ia64"); archlen = 5; } pathlen = (DWORD)wcslen(g_Options.szSourcePath);
// Remove any trailing slashes
if ( g_Options.szSourcePath[ pathlen - 1 ] == L'\\' ) { g_Options.szSourcePath[ pathlen - 1 ] = L'\0'; pathlen -= 1; }
//
// remove any processor specific subdir at the end of the path
// if that's there as well, being careful not to underflow
// the array
//
if ( (pathlen > archlen) && (0 == _wcsicmp( &g_Options.szSourcePath[pathlen-archlen], archscratch))) { g_Options.szSourcePath[ pathlen - archlen ] = L'\0'; }
g_Options.fNewOS = TRUE; b = TRUE;
Cleanup: if ( !b ) { hr = THR( HRESULT_FROM_WIN32( GetLastError( ) ) ); ErrorBox( NULL, L"RISETUP" ); }
if ( g_Options.hinfAutomated != INVALID_HANDLE_VALUE ) SetupCloseInfFile( g_Options.hinfAutomated );
HRETURN(hr); }
|