// autoconfig.cpp : Defines the class behaviors for the application.
//

#include "stdafx.h"
#include "autoconfig.h"
#include "autoconfigDlg.h"

#if !defined(STUFF_STUFF_HPP)
	#include "Stuff\Stuff.hpp"
#endif


#include <GameOS\GameOS.hpp>
#include <MFCPlatform\MFCPlatform.hpp>




#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAutoconfigApp

BEGIN_MESSAGE_MAP(CAutoconfigApp, CWinApp)
	//{{AFX_MSG_MAP(CAutoconfigApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG
	ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAutoconfigApp construction

CAutoconfigApp::CAutoconfigApp()
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
}

/////////////////////////////////////////////////////////////////////////////
// The one and only CAutoconfigApp object

CAutoconfigApp theApp;

/////////////////////////////////////////////////////////////////////////////
// CAutoconfigApp initialization

BOOL CAutoconfigApp::InitInstance()
{
	AfxEnableControlContainer();

	// Standard initialization
	// If you are not using these features and wish to reduce the size
	//  of your final executable, you should remove from the following
	//  the specific initialization routines you do not need.

#ifdef _AFXDLL
	Enable3dControls();			// Call this when using MFC in a shared DLL
#else
	Enable3dControlsStatic();	// Call this when linking to MFC statically
#endif

	CString mutexstr;
		mutexstr.LoadString(AFX_IDS_APP_TITLE);
		HANDLE rst=CreateMutex(NULL,TRUE,mutexstr);
		if(ERROR_ALREADY_EXISTS==GetLastError())
		{	
			CString errmsg,title;
			errmsg.LoadString(IDS_APPRUNNING);
			title.LoadString(IDS_ERROR);
			if (MessageBox(NULL,errmsg,title,MB_ICONQUESTION | MB_YESNO) == IDNO)
			{
			exit(1);
			}
			ReleaseMutex(rst);
			CreateMutex(NULL,TRUE,mutexstr);
		}	

	CAutoconfigDlg dlg;
	m_pMainWnd = &dlg;
	int nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with OK
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: Place code here to handle when the dialog is
		//  dismissed with Cancel
	}

	// Since the dialog has been closed, return FALSE so that we exit the
	//  application, rather than start the application's message pump.
	return FALSE;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void _stdcall InitializeGameEngine()
{

	
	Stuff::InitializeClasses();


}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void _stdcall TerminateGameEngine()
{

	Stuff::TerminateClasses();
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void __stdcall GetGameOSEnvironment(char* CommandLine)
{
		//
	//----------------------------------------------------------
	// This is where to set GOS environment settings.
	//----------------------------------------------------------
	//
	Environment.applicationName			= "AutoConfig";
	Environment.directoryPath			= "\\Tools\\AutoConfig";	
	Environment.screenWidth				= 640;
	Environment.screenHeight			= 480;
	Environment.bitDepth				= 16;
	Environment.InitializeGameEngine    = InitializeGameEngine;
	Environment.TerminateGameEngine     = TerminateGameEngine;
	Environment.Renderer				= 3; // use blade to avoid Voodoo problems

}

