/*=========================================================================
* _ProjApp.cpp :    Main CPP project.
* This is a part of the CPA project.
*
* Version           1.0
* Creation date     09/09/96
* Revision date
*
* (c) Ubi Studios 1996
*=======================================================================*/

/* here are the directive you must respect when changing this file :

* === don't use malloc, but use memory module functions
* === absolutely no file handling in this file
* === always specify 'void' keyword for functions parameters and return value
* === take care of upper / lower case for #include and other filenames
* === NO C++ style comentary
* === NO ASSERT, use error module equivalent function

*/

#include "MainCPA.h"
#include "ITF.h"
#include "GAM.h"
#include "sif.h"
#include "snd.h"
#include "VDO.h"

#include "_projapp.hpp"
#include "_projid.h"
#include "_EditId.h"

#ifdef WIN32

/* One instance of application*/
_ProjectApp theApp;

#ifdef ACTIVE_EDITOR
/*
 Keyboard config for application
*/

// add by jt 8/6/97
#include "ray.h"
// end jt 8/6/97

#define KA_APP_SWAP         1
#define KA_APP_RASTERS      2
#define KA_WD_DBACKWARD		3
#define KA_WD_DFORWARD		4
#define KA_WD_EBACKWARD		5
#define KA_WD_EFORWARD		6

#define KA_HED_HIERARCHY	7
#define KA_HED_ACTOR		8
#define KA_HED_GEOMETRY		9
#define KA_HED_PHYSICAL		10
#define KA_HED_IPO			11
#define KA_HED_LIGHT		12
#define KA_HED_SECTOR		13
#define KA_HED_WPWAYS		14
#define KA_HED_ZONE			15
#define KA_HED_ACTION		16
#define KA_HED_MATERIAL		17
#define KA_HED_MECHANIC		18
#define KA_HED_PARTICLE		19

#define KA_HED_UNDO         20
#define KA_HED_REDO         21

#define KA_APP_SWAPNOPREF   22

#define KA_APP_PAUSEENGINE	23
#define KA_APP_ONESTEPENGINE 24
#define KA_APP_FORCE3DVIEW 25
//CPA2 Corneliu Babiuc 06-05-98
#define KA_HED_SOUND        26
#define KA_APP_OPTIONS      27
#define KA_APP_SAVEALL      28
#define KA_APP_EXIT         29
#define KA_HED_IPT			30
//END CPA2 Corneliu Babiuc 20-05-98
#define KA_APP_REINIT		31
#define KA_APP_KEYBOARD		32

static tdstKeyboardActionDef gs_a_stAppKeys[] =
{
 {"Swap between Editor and Engine",			KA_APP_SWAP},
 {"Swap to Editor without Preferences",		KA_APP_SWAPNOPREF},
 {"Activate Hierarchy Editor",				KA_HED_HIERARCHY},
 {"Activate Actor Editor",					KA_HED_ACTOR},
 {"Activate Geometric Object Editor",		KA_HED_GEOMETRY},
 {"Activate Physical Object Editor",		KA_HED_PHYSICAL},
 {"Activate IPO Editor",					KA_HED_IPO},
 {"Activate Light Editor",					KA_HED_LIGHT},
 {"Activate Sector Editor",					KA_HED_SECTOR},
 {"Activate Waypoints & Ways Editor",		KA_HED_WPWAYS},
 {"Activate Zone Editor",					KA_HED_ZONE},
 {"Activate Actions Editor",				KA_HED_ACTION},
 {"Activate Material Editor",				KA_HED_MATERIAL},
 {"Activate Mechanic Editor",				KA_HED_MECHANIC},
 {"Activate Particle Editor",				KA_HED_PARTICLE},
 {"Activate Sound Editor",				    KA_HED_SOUND},
 {"Activate IPT Editor",					KA_HED_IPT},
 {"Save All",								KA_APP_SAVEALL},
 {"Reinit the map",							KA_APP_REINIT},
 {"Undo",									KA_HED_UNDO},
 {"Redo",									KA_HED_REDO},
 {"Options",								KA_APP_OPTIONS},
 {"Keyboard",								KA_APP_KEYBOARD},
 {"Exit",									KA_APP_EXIT},
 {"Pause Engine",							KA_APP_PAUSEENGINE},
 {"One Step Engine",						KA_APP_ONESTEPENGINE},
 {"Force 3D View",							KA_APP_FORCE3DVIEW},
 {NULL, 0}
};



#endif /* ACTIVE_EDITOR*/

BOOL bFocusLost=FALSE;
BOOL bManagingFocus=FALSE;
BOOL gbForce3DView=FALSE;

/*===========================================================================
/  Description:    Inits
/  Creation date:  09 Sep 96
/  Author:         CB
/---------------------------------------------------------------------------
/  Revision date:
/  Author:
/===========================================================================*/
BOOL _ProjectApp::InitApplication (void)
{
	if (!fn_bInitApplication())
		return FALSE;

 GMT_fn_vInitFor3DOS();
 SCR_fn_v_RdL0_Init();

 fn_vInitEngineWhenInitApplication();
 
 #ifdef ACTIVE_EDITOR
	HIE_fn_vCreateMatrixStack();

	/* Create keyboard config*/
 mp_oAppKeyboard = new CPA_KeyActionConfiguration("CPAApp.ini", gs_a_stAppKeys);
 mp_oAppKeyboard->mfn_vSetObjectName("Application");
 m_csApplicationName = C_szMainFullName;
 m_csApplicationVersion = C_szMainVersion;
 #endif

	return CPA_ProjectApp::InitApplication();
}

BOOL _ProjectApp::InitInstance (void)
{
	return CPA_ProjectApp::InitInstance();
}

void _ProjectApp::ExitApplication (void)
{
#ifdef ACTIVE_EDITOR
    /* Delete keyboard config*/
    delete mp_oAppKeyboard;

	/////////////////////////////////////////////////////////////
	// BIDOUILLE :  To force some functions to be in export.LIB
	//				FORCE LINK
	/////////////////////////////////////////////////////////////
	int a = -1;
	if (++a)
	{
  // Bidouilles are here (the "a" is just here to avoid
  // following code to be executed)
  WP_tdhWayPoint hWayPoint = WP_fnh_WayPoint_Create();
  WP_fnv_WayPoint_Destroy(hWayPoint);

  CSplitFrame     split;
		DD_bSearchReference(NULL,NULL,0,NULL);
  CPA_ToolDLLBase *p_oDLL;
  DEV_SingleDevice3D oSgl3D(MD_ONEDEVICE);

  p_oDLL->fn_vSetReceivingEvtEditorMessages();
  p_oDLL->fn_vSetReceivingWindowMessages();
		GEO_xGetCenterPointOfIndexedSphere(NULL,NULL,NULL);

		g_oCoherenceManager.m_fn_vAddALink( NULL, NULL);

  DNM_fn_vInitLinkTableOfMecMatCharacteristics();

  SIF_fn_iGetSoundInfosCount();

  RAY_vComputeAllSector(NULL);

  SAI_fn_p_vGetTableValuePointerOf(NULL, SAI_eTypeXX);

  GLI_xDraw3DLine16(NULL,NULL,NULL,NULL);
		
//ANNECY CT 20/02/98{
//  fn_vFreeJustStructAnim( NULL );
//ENDANNECY CT}

#if defined(ACTIVE_AIDEBUG)
	fn_pstSetValidBreakPoint( NULL, NULL, 0 );
#endif

	}
	///////////////// END BIDOUILLE /////////////////////////////
#endif

	fn_vExitApplication();

	CPA_ProjectApp::ExitApplication();
	fn_vDesinitEngineWhenLeaveApplication();

}

//===========================================================================
//      Description:    To activate the given DLL
//      Creation date:  13 Feb 97
//      Author:         MT
//---------------------------------------------------------------------------
//      szDLLName       Name of DLL to activate
//      Return BOOL to indicate if dll has to be activated
//---------------------------------------------------------------------------
//      Revision date:
//      Author:
//===========================================================================
#ifdef ACTIVE_EDITOR
BOOL _ProjectApp::fn_bActivateDLL(char *szDLLName)
{
 if ( M_bEditorsActive() )
 {
  CPA_DLLBase *p_oDLL = m_p_oMainWorld->GetObjectDLLWithName(szDLLName);
  if ( p_oDLL ) // DLL founded
  {
   m_p_oMainWorld->fn_bActivateEditor(p_oDLL,NULL);
   return TRUE;
  }
  else
  {
   p_oDLL = m_p_oMainWorld->GetToolDLLWithName(szDLLName);
   if ( p_oDLL ) // DLL founded
   {
    m_p_oMainWorld->fn_bActivateEditor(p_oDLL,NULL);
    return TRUE;
   }
   else // there's no DLL with that name!!
   {
    CString oCst;
    oCst . Format ( "the DLL ' %s ' does not exist!" , szDLLName);
    AfxMessageBox(oCst,MB_ICONEXCLAMATION | MB_OK);
   }
  }
 }
 return FALSE;
}

//===========================================================================
//      Description:    To update dynamic lights
//      Creation date:  
//      Author:         
//---------------------------------------------------------------------------
//      Revision date:  
//      Author:
//===========================================================================
void _ProjectApp::fn_vUpdateDynamicLights (void)
{
	m_p_oMainWorld->m_lNbDynamicLights = 0;
	fn_vFindDynamicLights(gp_stDynamicWorld, &m_p_oMainWorld->m_lNbDynamicLights, m_p_oMainWorld->m_a_tdxhArrayOfDynamicLights);
}

void _ProjectApp::fn_vFindDynamicLights (HIE_tdxHandleToSuperObject hCharacter, long *lNbLights, GLI_tdxHandleToLight a_hLights[])
{
	HIE_tdxHandleToSuperObject hChild;
	long i;
	
	if (!hCharacter)
		return;
	
	// character ?
	if (HIE_fn_ulGetSuperObjectType(hCharacter) == HIE_C_ulActor)
	{
		// is there dynamic light ?
		if ((M_GetEngineObject(hCharacter)->h_MSLight)&&(fn_ucMSLightGetOnOff(M_GetEngineObject(hCharacter)->h_MSLight)))
		{
			a_hLights[(*lNbLights)++] = fn_p_stMSLightGetLight(M_GetEngineObject(hCharacter)->h_MSLight);
		}
	}

	// next level of dynamic hierarchy
	HIE_M_ForEachChildOf(hCharacter, hChild, i)
	{
		fn_vFindDynamicLights(hChild, lNbLights, a_hLights);
	}
}

#endif // ACTIVE_EDITOR

//===========================================================================
//      Description:    To treat application keys even if engine is running.
//      Creation date:  17 Jul 96
//      Author:         CB
//---------------------------------------------------------------------------
//      nChar           Key to treat
//      Return BOOL to indicate if key has been treated
//---------------------------------------------------------------------------
//      Revision date:
//      Author:
//===========================================================================
#ifdef ACTIVE_EDITOR
BOOL _ProjectApp::fn_bTreatAppKeyboard(UINT nChar)
{
    CPA_EditorBase	*p_oEditor; 
	BOOL			bUp = FALSE;
	BOOL			bShint = FALSE;

	if(nChar & 0x40000000)
	{
		nChar &= 0xbfffffff;
		bShint = TRUE;
	}

	if (!M_bEditorsActive())
		gbForce3DView = FALSE;

	if(nChar & 0x80000000)
	{
		bUp = TRUE;
		nChar &= 0x7FFFFFFF;
		if(mp_oAppKeyboard->mfn_uwKeyToAction(nChar) == KA_APP_FORCE3DVIEW)
		{
			gbForce3DView = FALSE;
			return TRUE;
		}
	}
	if(gbForce3DView)
	{
		if(bUp)
			M_GetMainDevice2()->GetDevice(0)->GetViewPort()->SendMessage(WM_KEYUP, nChar);
		else
			M_GetMainDevice2()->GetDevice(0)->GetViewPort()->SendMessage(WM_KEYDOWN, nChar);
		return TRUE;
	}
	if(bUp)
		return FALSE;

    // In edit mode, transform key to action
    switch(mp_oAppKeyboard->mfn_uwKeyToAction(nChar))
    {
        // To swap beetween edit and engine mode
        case KA_APP_SWAP:
//            if(M_GetMainWnd()->m_bEnableEditors)
//            {
//        	    if (!(M_GetMainDevice()->GetDevice(0)->IsFullScreen()))
        		    M_GetMainWnd()->SendMessage(WM_COMMAND, CPA_IDCB_SWAPTOEDITORS, 0);
//            }
    	    return TRUE;
    	break;

		case KA_APP_FORCE3DVIEW:
			if (!M_bEditorsActive())
				return TRUE;
			gbForce3DView = TRUE;
			return TRUE;

        case KA_APP_PAUSEENGINE:
			if (M_bEditorsActive())
				return FALSE;
			M_GetMainWnd()->SendMessage(WM_COMMAND, CPA_IDCB_PAUSEENGINE, 0);
			return TRUE;

        case KA_APP_ONESTEPENGINE:
			if (M_bEditorsActive())
				return FALSE;
			M_GetMainWnd()->SendMessage(WM_COMMAND, CPA_IDCB_ONESTEPENGINE, 0);
			return TRUE;

        case KA_APP_SWAPNOPREF:
			GetInterface()->fn_vUseUserPreferences(FALSE);
			M_GetMainWnd()->SendMessage(WM_COMMAND, CPA_IDCB_SWAPTOEDITORS, 0);
    	    return TRUE;
    	break;
		// the next 4 are for walking through the datas and the editors
		// in the reverse order they were edited or open
	/*	case KA_WD_DBACKWARD:
			if (!M_bEditorsActive())
				return FALSE;
			m_oAppliWalkDataMgr.DBackward();
			return TRUE;
		break;

		case KA_WD_DFORWARD:
			if (!M_bEditorsActive())
				return FALSE;
			m_oAppliWalkDataMgr.DForward();
			return TRUE;
		break;

		case KA_WD_EBACKWARD:
			if (!M_bEditorsActive())
				return FALSE;
			m_oAppliWalkDataMgr.EBackward();
			return TRUE;
		break;

		case KA_WD_EFORWARD:
			if (!M_bEditorsActive())
				return FALSE;
			m_oAppliWalkDataMgr.EForward();
			return TRUE;
		break;*/

        // undo/redo
        case KA_HED_UNDO:
			if(bShint)
				return FALSE;
			if (!M_bEditorsActive())
				return FALSE;
            if(M_GetEditManager()->CanUndo())
                M_GetEditManager()->Undo();
			GetInterface()->GetFrameBase()->fn_vInitGeneralDialogBarWithContext();
			return TRUE;
            break;

        case KA_HED_REDO:
			if(bShint)
				return FALSE;
			if (!M_bEditorsActive())
				return FALSE;
            if(M_GetEditManager()->CanRedo())
                M_GetEditManager()->Redo();
			GetInterface()->GetFrameBase()->fn_vInitGeneralDialogBarWithContext();
			return TRUE;
            break;

		// and now, editors activation
		case KA_HED_HIERARCHY:
			if (!M_bEditorsActive())
				return FALSE;
            
//ANNECY Shaitan Correction 03/02/98 {
            p_oEditor = m_p_oMainWorld -> GetEditorByName("Hierarchy");
//ENDANNECY Shaitan Correction }
            if(p_oEditor)
            {
			    m_p_oMainWorld->fn_bActivateEditor(p_oEditor,NULL);
                return TRUE;
            }
            return FALSE;
			break;

		case KA_HED_ACTOR:
            return fn_bActivateDLL ( C_szDLLActorName );
			break;
		case KA_HED_GEOMETRY:
            return fn_bActivateDLL ( C_szDLLGeometryName );
			break;
		case KA_HED_PHYSICAL:
            return fn_bActivateDLL ( C_szDLLPhysicalObjectName );
			break;
//ANNECY Shaitan NewInterface 24/03/98 {
		case KA_HED_IPO:
            return fn_bActivateDLL ( C_szDLLInstanciatedPhysicalObjectName );
			break;
//ENDANNECY Shaitan NewInterface }
		case KA_HED_LIGHT:
            return fn_bActivateDLL ( C_szDLLLightName );
			break;
		case KA_HED_SECTOR:
            return fn_bActivateDLL ( C_szDLLSectorName );
			break;
		case KA_HED_WPWAYS:
            return fn_bActivateDLL ( C_szDLLWayPointName );
			break;
		case KA_HED_ZONE:
            return fn_bActivateDLL ( C_szDLLZDxName );
			break;

		// tool editor activation
		case KA_HED_ACTION:
            return fn_bActivateDLL ( C_szDLLActionName );
			break;
		case KA_HED_MATERIAL:
            return fn_bActivateDLL ( C_szDLLMaterialName );
			break;
		case KA_HED_MECHANIC:
            return fn_bActivateDLL ( C_szDLLMecaName );
			break;
//ANNECY Shaitan NewInterface 24/03/98 {
		case KA_HED_PARTICLE:
            return fn_bActivateDLL ( C_szDLLPartGenName );
			break;
//ENDANNECY Shaitan NewInterface }
//CPA2 Corneliu Babiuc 06-05-98
		case KA_HED_SOUND:
            return fn_bActivateDLL ( C_szDLLSoundName );
		case KA_HED_IPT:
			return fn_bActivateDLL ( "IPTEditor" );
		case KA_APP_OPTIONS:
			GetInterface()->fn_vDoDialogOptions();
			return TRUE;
		case KA_APP_KEYBOARD:
		{
		    A3d_KeyboardAllConfDlg  oDialog;

		    oDialog.DoModal();
			return TRUE;
		}
		case KA_APP_SAVEALL:
			GetInterface()->GetFrameBase()->SendMessage(WM_COMMAND, CPA_IDM_SAVEALL);
			return TRUE;
		case KA_APP_REINIT:
			GetInterface()->GetFrameBase()->SendMessage(WM_COMMAND, CPA_IDM_INITMAP);
			return TRUE;
		case KA_APP_EXIT:
			M_GetMainWnd()->SendMessage(WM_COMMAND, CPA_ID_APP_EXIT);
			return TRUE;
//END CPA2 Corneliu Babiuc 20-05-98
    }
    return FALSE;
}
#endif // ACTIVE_EDITOR

//===========================================================================
//  Description:    Get the project name and version.
//  Creation date:  09 Sep 96
//  Author:         CB
//---------------------------------------------------------------------------
//  Revision date:
//  Author:
//===========================================================================
void _ProjectApp::fn_vUpdateFrameTitle(void)
{
#ifdef ACTIVE_EDITOR
	sprintf(M_GetMainWnd()->m_szProjectName, "Rayman II - %s", __DATE__);
#endif
}

//===========================================================================
//      Description:    Create a thread for engine.
//      Creation date:  11 Jun 96
//      Author:         CB
//---------------------------------------------------------------------------
//      Return void
//---------------------------------------------------------------------------
//      Revision date:
//      Author:
//===========================================================================
UINT fn_uiPCEngineInterface(LPVOID pt)
{
    UINT    uiRes;

    #ifdef ACTIVE_EDITOR
    // Bidouille (je suis poussé à ces extrémités)
    // Permet à la thread courante d'accéder aux objets C++ de la thread
    // interface.
	   AFX_MODULE_THREAD_STATE *pState = AfxGetModuleThreadState();
    CHandleMap              *pLast = pState->m_pmapHWND;
    pState->m_pmapHWND = ((AFX_MODULE_THREAD_STATE*)pt)->m_pmapHWND;
    #endif // ACTIVE_EDITOR

    // Call main C engine loop
	fn_vResetEngineFromPaused();
    uiRes = fn_uiEngineMainLoop();

    #ifdef ACTIVE_EDITOR
	   pState->m_pmapHWND = pLast;
    #endif // ACTIVE_EDITOR
    return uiRes;
}

//===========================================================================
//      Description:    Create a thread for engine.
//      Creation date:  11 Jun 96
//      Author:         CB
//---------------------------------------------------------------------------
//      Return void
//---------------------------------------------------------------------------
//      Revision date:
//      Author:
//===========================================================================
void _ProjectApp::fn_vCreateEngineThread(void)
{
    // Task will be run at the first pain update of the directdraw surface.
    // It will avoid some strange bug in some PCs.
    // => So task ic created suspended
    m_p_oEngineThread = AfxBeginThread
        (fn_uiPCEngineInterface, (LPVOID)AfxGetModuleThreadState(), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
}

//===========================================================================
//  Description:    When main window gains or loose windows focus.
//  Creation date:  09 Sep 96
//  Author:         CB
//---------------------------------------------------------------------------
//  Revision date:
//  Author:
//===========================================================================
void _ProjectApp::fn_vWhenAppGainFocus(void)
{
	if (!bManagingFocus && bFocusLost)
	{
		//SND
		bManagingFocus=TRUE;
		bFocusLost=FALSE;
		SND_fn_vRestoreDriverSound();
		bManagingFocus=FALSE;

#ifdef GAM_VIDEO
		//AVI
		VDO_fn_xResumeVideoAVI();
#endif
	}

}

void _ProjectApp::fn_vWhenAppLooseFocus(void)
{
	if (!bManagingFocus && !bFocusLost)
	{
		//AVI
#ifdef GAM_VIDEO
		VDO_fn_xPauseVideoAVI();
#endif

		//SND
		bManagingFocus=TRUE;
		bFocusLost=TRUE;
		SND_fn_vReleaseDriverSound();
		bManagingFocus=FALSE;
	}
}

//===========================================================================
//  Description:    called when engine is about to start
//  Creation date:  04 feb 97
//  Author:         FBF
//---------------------------------------------------------------------------
//  Revision date:
//  Author:
//===========================================================================
void _ProjectApp::fn_vBeforeEngineStarts(void)
{
	// resume all sound
	SND_fn_vResumeSound();
    // TODO : Add your code here
}

//===========================================================================
//  Description:    called just after engine stops
//  Creation date:  04 feb 97
//  Author:         FBF
//---------------------------------------------------------------------------
//  Revision date:
//  Author:
//===========================================================================
void _ProjectApp::fn_vAfterEngineStops(void)
{
	// stop all sound
	SND_fn_vPauseSound();

 #if defined(ACTIVE_EDITOR)
 fn_vKillAllAlways();
 #endif /* ACTIVE_EDITOR */
}


//===========================================================================
//      Description:    Do a fatal error.
//                      Display a message box et exit application with code -1.
//      Creation date:  25 Jun 96
//      Author:         CB
//---------------------------------------------------------------------------
//      p_szError       Error message
//      Return void
//---------------------------------------------------------------------------
//      Revision date:
//      Author:
//===========================================================================
void _ProjectApp::fn_vDynaFatalError(char *p_szError)
{
    char    szTemp[512];

    sprintf(szTemp, "%s says fatal error !\n\n%s", C_szMainFullName, p_szError);
    AfxMessageBox((LPCTSTR) szTemp, MB_ICONEXCLAMATION | MB_OK);
    if(m_p_oEngineThread)
    	::TerminateThread(m_p_oEngineThread->m_hThread, 255);
    ::ExitThread(255);
}

#else	// WIN32 : other platform than WIN32

/*===========================================================================
/      Description:    main function : project entrance for non WIN32 platform
/      Creation date:  13 January 1997
/      Author:         VL
/---------------------------------------------------------------------------
/      argc			number of args
/      argv			array of args
/		return			application exit code
/---------------------------------------------------------------------------
/      Revision date:
/      Author:
/===========================================================================*/
int main( int argc, char *argv[] )
{
	/* initialize application*/
	if (!fn_bInitApplication())
		return -1;
	/* create screen display*/
	if (!fn_bCreateMainDisplayScreen())
		return -1;
	/* call engine loop*/
	fn_uiEngineMainLoop();
	/* exit application*/
	fn_vExitApplication();
	return 0;
}


/*===========================================================================
/      Description:    initialize/create main viewport
/      Creation date:  13 January 1997
/      Author:         VL
/---------------------------------------------------------------------------
/      Return			TRUE if success
/---------------------------------------------------------------------------
/      Revision date:
/      Author:
/===========================================================================*/
GLD_tdhDevice		g_hDeviceHandle;
GLD_tdhViewport		g_hViewport;

BOOL fn_bCreateMainDisplayScreen( void )
{
	/* variable for Device*/
	GLD_tdstDeviceAttributes	stDevAttrib;
	/*GLD_tdhDevice				hDeviceHandle;		*/

	/* variable for ViewPort*/
	GLD_tdstViewportAttributes	stViewAttrib;
	/*GLD_tdhViewport				hViewport;*/

	/* create device*/
	stDevAttrib.dwFullScreenModeX	= C_dwScreenWidth;
	stDevAttrib.dwFullScreenModeY	= C_dwScreenHeight;
	stDevAttrib.dwFullScreenModeBpp	= C_dwScreenDepth;

	if (!GLD_bCreateDevice( &stDevAttrib, &g_hDeviceHandle ))
		return FALSE;

	/* create viewport*/
	stViewAttrib.dwTopInPercent		= 0;
	stViewAttrib.dwBottomInPercent	= 100;
	stViewAttrib.dwLeftInPercent	= 0;
	stViewAttrib.dwRightInPercent	= 100;

	if (!GLD_bCreateViewport( g_hDeviceHandle, &stViewAttrib, &g_hViewport ))
		return FALSE;

	return TRUE;
}

#endif	/*WIN32*/

/*===========================================================================
/      Description:    Initialize appliaction
/      Creation date:  13 January 1997
/      Author:         VL
/---------------------------------------------------------------------------
/      Return			state of initialization (TRUE = success, FALSE : error)
/---------------------------------------------------------------------------
/      Revision date:
/      Author:
/===========================================================================*/
BOOL fn_bInitApplication( void )
{
	return TRUE;
}

/*===========================================================================
/      Description:    called before application ends
/      Creation date:  13 January 1997
/      Author:         VL
/---------------------------------------------------------------------------
/      Return void
/---------------------------------------------------------------------------
/      Revision date:
/      Author:
/===========================================================================*/
void fn_vExitApplication( void )
{
}


void _ProjectApp::fn_vReinitCurrentMap(void)
{
 #if defined(ACTIVE_EDITOR)
 fn_vReinitTheMap();
 #endif /* ACTIVE_EDITOR */
}
