Exemple #1
0
//--------------------------------------------------------------------------------------
// Name: main
// Desc: Entry point to the program
//--------------------------------------------------------------------------------------
VOID __cdecl main()
{
    bool keypush = false;
    console.Create("embed:\\font", 0x00000000, 0xFFFF6600);
    console.Format( "NXE2GOD V1.3 by Swizzy original source by Dstruktiv\n" );
    //genlog(); //<--- only use this when you're lazy ;)
    debuglog = FileExists("game:\\debug.log");
    mountdrives();
    console.Format("\n");
    for(unsigned int i = 0; i < devices.size(); i++)
    {
        if (devices.size() == 0)
            break;
        unsigned int tmpsize = allNXE.size();
        console.Format("Scanning %s\\ for NXE titles...", devices[i].c_str());
        string tmp = devices[i] + filePathzzz;
        ScanDir(tmp);
        if (allNXE.size() == tmpsize)
            console.Format("No NXE titles found!\n");
        else if (tmpsize != 0)
            console.Format("Found %d NXE titles!\n", allNXE.size() - tmpsize);
        else
            console.Format("Found %d NXE titles!\n", allNXE.size());
    }
    if ((allNXE.size() == 0) && (devices.size() == 0))
        console.Format("\nNo NXE titles found\n\nPush any key to exit" );
    else if (allNXE.size() == 0)
        console.Format("\n\nPush any key to exit" );
    else
    {
        console.Format("\nNXE Files found:\n\n");
        for(unsigned int i = 0; i < allNXE.size(); i++)
        {
            console.Format("%ls at location: %s%s\n", allNXE[i].title, allNXE[i].path.c_str(), allNXE[i].fileName.c_str());
        }
        console.Format("\nPush A to convert files from NXE to GOD or B to cancel and quit to NXE\n\n");
        while(!keypush)
        {
            ATG::GAMEPAD* pGamepad = ATG::Input::GetMergedInput();
            if( pGamepad->wPressedButtons & XINPUT_GAMEPAD_A)
                keypush = true;
            if( pGamepad->wPressedButtons & XINPUT_GAMEPAD_B)
                XLaunchNewImage(XLAUNCH_KEYWORD_DEFAULT_APP, 0);
        }
        console.Format("Converting NXE2GOD, please wait...\n\n");
        for(unsigned int i = 0; i < allNXE.size(); i++)
            nxetogod(allNXE[i]);
        console.Format( "\nProcessing complete, push any key to exit" );
    }
    keypush = false;
    while(!keypush)
    {
        ATG::GAMEPAD* pGamepad = ATG::Input::GetMergedInput();
        if( pGamepad->wPressedButtons)
            XLaunchNewImage(XLAUNCH_KEYWORD_DEFAULT_APP, 0);
    }
}
void AutoUpdater::RunInstaller( void )
{
	// Create predefined copy paths to easily change later
	string szDashPath = "game:\\";
	string szSkinPath = "game:\\skins\\";
	string szPluginPath = "game:\\plugins\\";
	
	// Create directories in case they don't exist
	CreateDirectory(szDashPath.c_str(), NULL);
	CreateDirectory(szSkinPath.c_str(), NULL);
	CreateDirectory(szPluginPath.c_str(), NULL);

	// Release current Direct 3D Device and initialize console view
	CFreestyleApp::getInstance().m_pd3dDevice->Release();
	ATG::Console console;

	DebugMsg("AutoUpdater", "Installer Running");
	
	// Locate the embedded font file in memory
	DWORD dwStoredDigest;
	VOID * pSectionData;

	
	BOOL retVal = XGetModuleSection( GetModuleHandle(NULL), "FSDFont", &pSectionData, &dwStoredDigest);
	if(retVal == FALSE)
	{
		// Font Section could not be found within Xex file- compiled wrong?
		DebugMsg("AutoUpdater", "Font File Could Not Be Extracted.");
		XNotifyQueueUICustom(L"Font Not Found - Update Manually");
		RestartDashboard(&console, true);
		return;
	}


	// Dump the file to a temporary file for use in this updater
	string szFontPath = "game:\\ConsoleFont.xpr";
	FILE * fHandle;
	fopen_s(&fHandle, szFontPath.c_str(), "wb");
	fwrite(pSectionData, dwStoredDigest, 1, fHandle);
	fclose(fHandle);
	
	// Verify that the font file was dumped and the file exists
	if(!FileExistsA(szFontPath))
	{
			XNotifyQueueUICustom(L"Font Not Found - Update Manually");
			RestartDashboard(&console, true);
			return;
	}

	// Font Extracted Fine- continue with updater.
	console.Create(szFontPath.c_str(), 0xFF000000, 0xFFFFFFFF );
	console.Clear();

	// Create and Display Intro along with all the version information...
	console.Format("Welcome to the Freestyle Dash Update Installer. (v.01a)\n\n");

	// Scan tempfolder for updates
	console.Format("** Checking system for downloaded updates....");
	bool hasDashFile = false, hasSkinFile = false, hasPluginFile = false;
	if(FileExistsA(getAutoupdaterTempXexPath(false))) hasDashFile = true;
	if(FileExistsA(getAutoupdaterTempSkinPath(false))) hasSkinFile = true;
	if(FileExistsA(getAutoupdaterTempPluginPath(false))) hasPluginFile = true;
	
	// Scan tempfolder for version files for updates that were found
	if(hasDashFile)
	{
		// Check Version File for display information
		string szVerFile = getAutoupdaterTempXexVerPath(false);
		string szUpdateDisplay = sprintfaA("\n\tFreestyle Dash Update Found ( Version: Unknown )");
		if(FileExistsA(szVerFile))
		{
			// File exists, so extract version information
			VERSION_DATA verInfo;
			FILE * fHandle;
			fopen_s(&fHandle, szVerFile.c_str(), "rb");
			fread(&verInfo, sizeof(VERSION_DATA), 1, fHandle);
			fclose(fHandle);
			szUpdateDisplay = sprintfaA("\n\tFreestyle Dash Update Found ( Version: %d.%d r%d %s )", verInfo.dwMajor, verInfo.dwMinor, verInfo.dwRevision, ConvertTypeToString(verInfo.dwVersionType).c_str());
		}
		// Output results to screen
		console.Format(szUpdateDisplay.c_str());
	}

	if(hasSkinFile)
	{
		// Check Version File for display information
		string szVerFile = getAutoupdaterTempSkinVerPath(false);
		string szUpdateDisplay = sprintfaA("\n\tFreestyle Skin Update Found ( Version: Unknown )");
		if(FileExistsA(szVerFile))
		{
			// File exists, so extract version information
			VERSION_DATA verInfo;
			FILE * fHandle;
			fopen_s(&fHandle, szVerFile.c_str(), "rb");
			fread(&verInfo, sizeof(VERSION_DATA), 1, fHandle);
			fclose(fHandle);
			szUpdateDisplay = sprintfaA("\n\tFreestyle Skin Update Found ( Version: %d.%d r%d %s )", verInfo.dwMajor, verInfo.dwMinor, verInfo.dwRevision, ConvertTypeToString(verInfo.dwVersionType).c_str());
		}
		// Output results to screen
		console.Format(szUpdateDisplay.c_str());
	}

	if(hasPluginFile)
	{
		// Check Version File for display information
		string szVerFile = getAutoupdaterTempPluginVerPath(false);
		string szUpdateDisplay = sprintfaA("\n\tFreestyle Plugin Update Found ( Version: Unknown )");
		if(FileExistsA(szVerFile))
		{
			// File exists, so extract version information
			VERSION_DATA verInfo;
			FILE * fHandle;
			fopen_s(&fHandle, szVerFile.c_str(), "rb");
			fread(&verInfo, sizeof(VERSION_DATA), 1, fHandle);
			fclose(fHandle);
			szUpdateDisplay = sprintfaA("\n\tFreestyle Plugin Update Found ( Version: %d.%d r%d %s )", verInfo.dwMajor, verInfo.dwMinor, verInfo.dwRevision, ConvertTypeToString(verInfo.dwVersionType).c_str());
		}
		// Output results to screen
		console.Format(szUpdateDisplay.c_str());
	}

	console.Format("\n\nTo Begin Installation - Press the 'Y' Button.");
	console.Format("\nTo Exit Installation - Press the 'Back' Button.");

	// Wait for Button Input to continue
	for( ; ; ) {
		ATG::Input::GetMergedInput();
		if(ATG::Input::m_DefaultGamepad.wPressedButtons & XINPUT_GAMEPAD_Y )
			break;
		if(ATG::Input::m_DefaultGamepad.wPressedButtons & XINPUT_GAMEPAD_BACK )
			RestartDashboard(&console, true);
	}

	// ExtractZip Files To Correct Location
	bool dashResult = false, skinResult = false, pluginResult = false;
	bool bError = false;
	if(hasDashFile)
	{
		dashResult = InstallDashUpdate(&console, szDashPath);
		if(!dashResult){
			bError = true;
			console.Format("\n An Error Occurred installing Dash Updates");
		}
	}
	if(hasSkinFile)
	{
		skinResult = InstallSkinUpdate(&console, szSkinPath);
		if(!skinResult){
			bError = true;
			console.Format("\n An Error Occurred installing Skin Updates");
		}
	}
	if(hasPluginFile)
	{
		pluginResult = InstallPluginUpdate(&console, szPluginPath);
		if(!pluginResult){
			bError = true;
			console.Format("\n An Error Occurred installing Plugin Updates");
		}
	}

	// Show Completion Message
	if(!bError)
	{
		console.Format("\n\nUpdate has completed successfully.");
	}
	else
	{
		console.Format("\n\nUpdate has not completed successfully- please update manually");
	}
	console.Format("\nPress Any Key to Reboot Dashboard.");

	// Reboot with changed files
	for( ; ; ) {
		ATG::Input::GetMergedInput();
		if(ATG::Input::m_DefaultGamepad.wPressedButtons )
			RestartDashboard(&console, true);
	}
	
	// Serious Error- should never get to this code - if we do, just restart.
}
void MakeConsole(const char* font, unsigned long BackgroundColor, unsigned long TextColor)
{
	g_console.Create(font, BackgroundColor, TextColor);
	g_console.SendOutputToDebugChannel(TRUE);
}