/*
 =======================================================================================
 Name:		DlgMain.cpp : implementation file
 Author:	Mihaela Tancu
 Date:		2 June 1998
 =======================================================================================
*/

#include <sys/stat.h>
#include <string.h>
#include <direct.h>
#include "stdafx.h"
#include "BinaryTool.h"
#include "DlgMain.h"
#include "IniData.h"
#include "io.h"
#include "GIItem.h"
#include "GIType.h"
#include "Levels.h"
#include "Anims.h"
#include "Binary.h"
#include "l_global_v6.h"
#include "makeanim.h"
#include "DlgWarning.h"

#include "stdafx.h"
#include "ERM.h"
#include "MMG.h"
#include "TMP.h"

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

#define   C_BinPass1			"2"
#define   C_BinPass2			"3"
#define   C_TemporaryDirectory	"TestCRB"
#define   C_CRBExecutable		"CRB.exe"
#define   C_World				"World"
#define   C_Levels				"Levels"
#define	NombreDanimationsParDirectory	1000
#define FAMILY_NAME_LENGTH				32

/*
 =======================================================================================
 * Color for line in Rich edit ctrl
 =======================================================================================
 */
BOOL bOneLevelMode, bLevelMode;
xString sLevel[100];
long lLevelNum=0;
char szDestBinDir[256];
char sInitialDir[256];
char szSource[256];
char sSource[256];
BOOL bOneTextureMode, bTextureMode;
xString sTextures[100];
long lTextureNum=0;

BOOL bOneAnimMode, bAnimMode;
xString sAnims[100];
long lAnimNum=0;

BOOL bYes = FALSE;

BOOL bBatch = TRUE;
BOOL bAll = TRUE;
BOOL bTbl = TRUE;

BOOL bBMP = TRUE;
BOOL bTGA = TRUE;
BOOL bConvert16 = TRUE;
BOOL bConvert32 = FALSE;

BOOL bAuto = FALSE; // YLG correction
char sMes[50], sOK[50], sCancel[50];

// When binarizaing first level, some special operations are done :
// texture copy, binarisation of fix.
BOOL bFirstLevel = TRUE;  

/////////////////////////////////////////////////////////////////////////////
// CDlgMain dialog
CDlgMain::CDlgMain(CWnd* pParent)
	: CDialog(CDlgMain::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgMain)
		// NOTE: the ClassWizard will add member initialization here

	//}}AFX_DATA_INIT

	//initialize the values for the edit controls and the 
	//push buttons from the right part of the window
	m_a_uiRadioButtons[0] = IDC_BUTTON_DEBUG;
	m_a_uiRadioButtons[1] = IDC_BUTTON_RELEASE;
	m_cNbRadioButtons = 2;

	m_a_uiEditControls[0] = IDC_EDIT_DESTBIND;
	m_a_uiEditControls[1] = IDC_EDIT_SOURCE;
	m_a_uiEditControls[2] = IDC_EDIT_EXEC;
	m_cNbEditBox = 3;

	m_a_uiRightButtons[0] = IDC_BUTTON_BROWSE2;
	m_a_uiRightButtons[1] = IDC_BUTTON_BROWSE3;
	m_a_uiRightButtons[2] = IDC_BUTTON_ALL;
	m_a_uiRightButtons[3] = IDC_BUTTON_ALLINLIST;
	m_a_uiRightButtons[4] = IDC_BUTTON_CLEAR;
	m_a_uiRightButtons[5] = IDC_BUTTON_CLEARALL;
	m_a_uiRightButtons[6] = IDC_BUTTON_CONVERT;
	m_a_uiRightButtons[7] = IDC_BUTTON_CHANGE;
	m_cNbRightButtons = 8;

	m_a_uiRightBut[0] = IDC_BUTTON_CONVANI;
	m_a_uiRightBut[1] = IDC_BUTTON_CONVTEX;
	m_a_uiRightBut[2] = IDC_BUTTON_CONVLEVEL;
	m_a_uiRightBut[3] = IDC_BUTTON_USED;
	m_a_uiRightBut[4] = IDC_BUTTON_A;
	m_a_uiRightBut[5] = IDC_BUTTON_Z;
	m_a_uiRightBut[6] = IDC_BUTTON_BMP;
	m_a_uiRightBut[7] = IDC_BUTTON_TGA;
	m_a_uiRightBut[8] = IDC_BUTTON_C16;
	m_a_uiRightBut[9] = IDC_BUTTON_C32;
	m_cNbRightBut = 10;

	// initialize also the group buttons for sizing the window
	m_a_uiGroupButtons[0] = IDC_STATIC_GR1;
	m_a_uiGroupButtons[1] = IDC_STATIC_GR2;
	m_a_uiGroupButtons[2] = IDC_STATIC_VERS;
	m_a_uiGroupButtons[3] = IDC_STATIC_EXEC;
	m_a_uiGroupButtons[4] = IDC_STATIC_DSC;
	m_a_uiGroupButtons[5] = IDC_BUTTON_FIX;
	m_cNbGroupButtons = 6;

	// initial is FALSE, and is putting on TRUE in the function OnInitDialog
	m_bInit = FALSE;

	//initialize for the cross
	m_bFirstShow = TRUE;
	m_oCrossDC.CreateCompatibleDC(NULL);
	m_oCrossBitmap.LoadBitmap(IDB_BITMAP_CROIX);
	m_oCrossDC.SelectObject(m_oCrossBitmap);

	//initial the total number of selections is 0
	m_iCountOfSelections=0;
    m_bConversion = FALSE;

	//and there are no types
	m_p_oTypeAnims = NULL;
	m_p_oTypeTextures = NULL;
	m_p_oTypeLevels = NULL;
}


CDlgMain::~CDlgMain()
{
	//delete the cross
	m_oCrossBitmap.DeleteObject();
	m_oCrossDC.DeleteDC();
	mfn_vFreeMemory();
}


void CDlgMain::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgMain)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	DDX_Control(pDX, IDC_PANEL, m_oPanel);
	DDX_Control(pDX, IDC_STATIC_PROGRESS, m_oProgress);
	//}}AFX_DATA_MAP
}


/*
 =======================================================================================
  Name:			On command
  Description:	intercept the ...
  Author:		Mihaela Tancu
 =======================================================================================
 */
BOOL CDlgMain::OnCommand(WPARAM wParam, LPARAM lParam) 
{
	if (HIWORD(wParam) == 0)
	{
	}
	return CDialog::OnCommand(wParam, lParam);
}


BEGIN_MESSAGE_MAP(CDlgMain, CDialog)
	//{{AFX_MSG_MAP(CDlgMain)
	ON_WM_DESTROY()
	ON_WM_PAINT()
	ON_WM_DRAWITEM()
	ON_WM_SIZING()
	ON_NOTIFY(TCN_SELCHANGE, IDC_PANEL, OnSelchangePanel)
	ON_BN_CLICKED(IDC_HELP, OnHelp)
	ON_BN_CLICKED(IDC_QUIT, OnQuit)
	ON_BN_CLICKED(IDC_BUTTON_ALL, OnSelectAll)
	ON_BN_CLICKED(IDC_BUTTON_ALLINLIST, OnSelectAllInList)
	ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnClear)
	ON_BN_CLICKED(IDC_BUTTON_CLEARALL, OnClearAll)
	ON_BN_CLICKED(IDC_BUTTON_BROWSE2, OnButtonBrowseDestBinD)
	ON_BN_CLICKED(IDC_BUTTON_BROWSE3, OnButtonBrowseSource)
	ON_BN_CLICKED(IDC_BUTTON_DEBUG, OnButtonDebug)
	ON_BN_CLICKED(IDC_BUTTON_RELEASE, OnButtonRelease)
	ON_BN_CLICKED(IDC_BUTTON_CONVANI, OnConvAnim)
	ON_BN_CLICKED(IDC_BUTTON_CONVTEX, OnConvTextures)
	ON_BN_CLICKED(IDC_BUTTON_CONVLEVEL, OnConvLevels)
	ON_BN_CLICKED(IDC_BUTTON_USED, OnUsed)
	ON_BN_CLICKED(IDC_BUTTON_A, OnAll)
	ON_BN_CLICKED(IDC_BUTTON_Z, OnTbl)
	ON_BN_CLICKED(IDC_BUTTON_BMP, OnBMP)
	ON_BN_CLICKED(IDC_BUTTON_TGA, OnTGA)
	ON_BN_CLICKED(IDC_BUTTON_C16, OnConvert16)
	ON_BN_CLICKED(IDC_BUTTON_C32, OnConvert32)
	ON_BN_CLICKED(IDC_BUTTON_AUTO, OnGenerateAuto)
//	ON_BN_CLICKED(IDC_BUTTON_D3D, OnButtonD3D)
//	ON_BN_CLICKED(IDC_BUTTON_DFX, OnButtonDFX)
	ON_BN_CLICKED(IDC_BUTTON_FIX, OnButtonFix)
	ON_BN_CLICKED(IDC_BUTTON_CONVERT, OnBinarise)
	ON_BN_CLICKED(IDC_BUTTON_CHANGE, OnButtonBrowseExeFile)
	ON_BN_CLICKED(IDC_BUTTON_BIN, OnButtonBin)
	ON_WM_SIZE()
	ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeListType)
	ON_LBN_SELCHANGE(IDC_LIST2, OnSelchangeListObject)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgMain message handlers


BOOL CDlgMain::PreTranslateMessage(MSG* pMsg)
{
    int iIndexAction = m_oListObject->GetCurSel();
    BOOL bResult = FALSE;    // default

    if ( pMsg->hwnd == GetDlgItem(IDC_LIST2)->m_hWnd )
    {
        switch ( pMsg->message )
        {
        case WM_LBUTTONDOWN:
            bResult = OnLButtonDownListBoxObject ( pMsg ) ;
            break;
        case WM_KEYDOWN:
            bResult = OnKeyDownListBoxObject( pMsg );
            break;
        default:
            bResult = CDialog::PreTranslateMessage(pMsg);
        }
    }

	return bResult;
}


/*
 =======================================================================================
  Name:			OnButtonBin
  Description:	Function for
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnButtonBin()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_BIN))->GetCheck())
		//if it is checked ...
	    bDsc = TRUE;
	else
	    bDsc = FALSE;
}



/*
 =======================================================================================
  Name:			OnDrawItem
  Description:	Handle function for message WM_DRAWITEM on List Box with Names (objects)
				and in the list box with types
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDIS)
{
    if ( (nIDCtl == IDC_LIST2) &&
         (m_oListObject->IsWindowEnabled() ) &&
         (lpDIS->itemID != LB_ERR) )
    	//draw for the second list box with objects
        m_fn_vOnDrawItemListBoxObject ( lpDIS ) ;
    else
		if ( (nIDCtl == IDC_LIST1) &&
			(m_oListType->IsWindowEnabled() ) &&
			(lpDIS->itemID != LB_ERR))
	    	//draw for the first list box with types
		    m_fn_vOnDrawItemListBoxType ( lpDIS ) ;
		else	
			CDialog::OnDrawItem(nIDCtl, lpDIS);
}


/*
 =======================================================================================
  Name:			OnButtonDebug
  Description:	Function for changing the result directory if the debug radio button is set
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnButtonDebug()
{
	char _szMessage[5000];
	BOOL bSet=TRUE, bDisplay=FALSE;
	if (((CButton *)GetDlgItem(IDC_BUTTON_DEBUG))->GetCheck())
	{
		((CButton *)GetDlgItem(IDC_BUTTON_DEBUG))->SetCheck(1);
		bDebug = TRUE;
/*		if (b3DCard)
			if (bDebug)
			{	if (!SetCurrentDirectory( g_stInitialData.szDestBinDD3D ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDD3D ),"DestBinDD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDD3D);
			}
			else
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinRD3D ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRD3D ),"DestBinRD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRD3D);
			}
		else*/
			if (bDebug)
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinDDFX ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDDFX ),"DestBinDDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDDFX);
			}
			else
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinRDFX ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRDFX ),"DestBinRDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRDFX);
			}
		GetDlgItem(IDC_EDIT_DESTBIND)->GetWindowText(szDestBinDir, 256);

		if (!bAuto) // YLG Correction
			fn_IniData_vGetDatasFromStartFile(TRUE);
		if (!strcmp(g_stInitialData.szExeFile, ""))
			GetDlgItem(IDC_EDIT_EXEC)->SetWindowText( "" );
		else
			GetDlgItem(IDC_EDIT_EXEC)->SetWindowText( g_stInitialData.szExeFile );
	}
}


/*
 =======================================================================================
  Name:			OnButtonD3D
  Description:	Function for changing the result directory if the debug radio button is set
  Author:		Mihaela Tancu
 =======================================================================================
 */
/*void CDlgMain::OnButtonD3D()
{
	char _szMessage[5000];
	BOOL bSet=TRUE, bDisplay=FALSE;
	if (((CButton *)GetDlgItem(IDC_BUTTON_D3D))->GetCheck())
	{
		((CButton *)GetDlgItem(IDC_BUTTON_D3D))->SetCheck(1);
		b3DCard = TRUE;
		if (b3DCard)
			if (bDebug)
			{	if (!SetCurrentDirectory( g_stInitialData.szDestBinDD3D ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDD3D ),"DestBinDD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDD3D);
			}
			else
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinRD3D ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRD3D ),"DestBinRD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRD3D);
			}
		else
			if (bDebug)
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinDDFX ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDDFX ),"DestBinDDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDDFX);
			}
			else
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinRDFX ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRDFX ),"DestBinRDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRDFX);
			}
		GetDlgItem(IDC_EDIT_DESTBIND)->GetWindowText(szDestBinDir, 256);
	}
}
*/

/*
 =======================================================================================
  Name:			OnButtonDFX
  Description:	Function for changing the result directory if the debug radio button is set
  Author:		Mihaela Tancu
 =======================================================================================
 */
/*void CDlgMain::OnButtonDFX()
{
	char _szMessage[5000];
	BOOL bSet=TRUE, bDisplay=FALSE;
	if (((CButton *)GetDlgItem(IDC_BUTTON_DFX))->GetCheck())
	{
		((CButton *)GetDlgItem(IDC_BUTTON_DFX))->SetCheck(1);
		b3DCard = FALSE;
		if (b3DCard)
			if (bDebug)
			{	if (!SetCurrentDirectory( g_stInitialData.szDestBinDD3D ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDD3D ),"DestBinDD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDD3D);
			}
			else
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinRD3D ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRD3D ),"DestBinRD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRD3D);
			}
		else
			if (bDebug)
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinDDFX ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDDFX ),"DestBinDDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDDFX);
			}
			else
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinRDFX ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRDFX ),"DestBinRDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRDFX);
			}
		GetDlgItem(IDC_EDIT_DESTBIND)->GetWindowText(szDestBinDir, 256);
	}
}
*/

/*
 =======================================================================================
  Name:			OnDestroy
  Description:	Handle function for message WM_DESTROY
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnDestroy()
{
	//if you want to save the modifications if you select the /\ button (to close the dialog)
	/*
     =======================================================================================
	 * save new position and size of the main window
     =======================================================================================
	*/

	if (m_bInit)
	{
		GetWindowRect( &g_stWinPosSize.stMainPos );
		fn_IniData_vWriteWindowPosSize();
		fn_IniData_vSetMode( bDebug );
		fn_IniData_vSetCompleteBinarization( bDsc );
		fn_IniData_vSetFix( bFix1 );
	}
	SCR_fn_v_RdL0_Close();

	CDialog::OnDestroy();
}


/*
 =======================================================================================
  Name:			m_fn_TabC_vDisableAllButtons
  Description:	Enable the buttons for all the tabs
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_TabC_vDisableAllButtons() 
{
	// Show or hide the buttons from the first panel 
	// according to the parameter bChange
	GetDlgItem(IDC_HELPBUTTON)->EnableWindow(FALSE);
	GetDlgItem(IDC_QUIT)->EnableWindow(FALSE);
}

/*
 =======================================================================================
  Name:			m_fn_TabC_vEnableButtons
  Description:	Enable the buttons for all the tabs
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_TabC_vEnableButtons() 
{
	// Show or hide the buttons from the first panel 
	// according to the parameter bChange
//	GetDlgItem(IDC_HELPBUTTON)->EnableWindow(TRUE);
	GetDlgItem(IDC_QUIT)->EnableWindow(TRUE);
}

/*
 =======================================================================================
  Name:			OnBinarise
  Description:	
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnBinarise()
{
  int i, k, j=2;

  m_bConversion = TRUE;
  m_fn_TabC_vDisableAllButtons();
  m_fn_TabC_vShowControlsPanelRes() ;
  m_oPanel.SetCurSel(2);
  m_fn_TabC_vShowControlsPanelRes() ;
  RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );

	if (!bYes)
	{
		m_fn_ComRes_vDeleteLines( &m_oRichEditCom);
		m_fn_ComRes_vDeleteLines( &m_oRichEditRes);
	}

	m_oProgress.SetRange( 0, m_iCountOfSelections+1 );
	m_oProgress.SetPos( 1 );

	// If "Force binarization of fix" is checked, the next level is treated as first level
	// (ie: binarisation of fix, copy of textures...)
	if( bFix1 )
		bFirstLevel = TRUE;

	//if the families are selected
	if (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected)
	{
		if(bOneAnimMode)
			bOneAnimMode = (m_p_oTypeAnims->m_iSelected != m_p_oTypeAnims->m_oList.GetCount());
		bAnimMode = TRUE;
		for (i=0; i<m_p_oTypeAnims->m_oList.GetCount(); i++)
		{
			GI_Item * p_oItem = m_p_oTypeAnims->m_oList.RemoveHead();
			if (p_oItem->m_bActived)
			{	strcpy(sAnims[lAnimNum], p_oItem->m_fn_p_oGetName());
				m_fn_ComRes_vWriteLine( "Binary Tool", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
				m_fn_ComRes_vWriteLine( " --> binarize animations for family ", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
				m_fn_ComRes_vWriteLine( sAnims[lAnimNum], C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
				m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
				m_fn_ComRes_vWriteLine( "Start binarizing animations for family ", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
				m_fn_ComRes_vWriteLine( sAnims[lAnimNum], C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
				m_fn_ComRes_vWriteLine( "...\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);

//Mihaela Tancu - New auto
				//fn_vBinarizeAnimations(sAnims[lAnimNum]);
				char szCurrentDir[256]/*, szAnimDir[256], szAnimDest[256]*/;
				GetCurrentDirectory(_MAX_PATH, szCurrentDir);
				SetCurrentDirectory(sInitialDir);
				fn_cExecuteMakeanim("Makeanim.exe", bBatch, bAll, bTbl, sAnims[lAnimNum]);
				m_fn_ComRes_vWriteLine( "Finish binarizing animations for family ", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
				m_fn_ComRes_vWriteLine( sAnims[lAnimNum], C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
				m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
/*			if (bAll)
			{	strcpy(szAnimDir, sInitialDir);
				strcat(szAnimDir, "\\gamedata\\world\\graphics\\anims\\");
				strcat(szAnimDir, sAnims[lAnimNum]);
				strcpy(szAnimDest, szDestBinDir);
				strcat(szAnimDest, "\\world\\graphics\\anims\\");
				strcat(szAnimDest, sAnims[lAnimNum]);
				SAVE_fn_bCopyDirectory(szAnimDir, szAnimDest, TRUE, "A3I");
			}
			if (bTbl)
			{
				strcpy(szAnimDir, sInitialDir);
				strcat(szAnimDir, "\\gamedata\\world\\levels\\_common\\families\\");
				strcat(szAnimDir, sAnims[lAnimNum]);
				strcpy(szAnimDest, szDestBinDir);
				strcat(szAnimDest, "\\world\\levels\\_common\\families\\");
				strcat(szAnimDest, sAnims[lAnimNum]);
				SAVE_fn_bCopyDirectory(szAnimDir, szAnimDest, TRUE, "TBL");
			}*/
				SetCurrentDirectory(szCurrentDir);
//Mihaela Tancu - New auto

				RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );
				lAnimNum++;
				k=i+j;
				m_oProgress.SetPos( k );
				MLT_vEraseSTALib();
			}
			m_p_oTypeAnims->m_oList.AddTail(p_oItem);
		}
		bOneAnimMode=TRUE;
		j=j+i;
	}

  

	//if the levels are selected
	if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)
	{
		BOOL bErrorOccuredWhileBinarizingLevel = FALSE;

		if(bOneLevelMode)
			bOneLevelMode = (m_p_oTypeLevels->m_iSelected != m_p_oTypeLevels->m_oList.GetCount());
		bLevelMode = TRUE;
		MLT_vInitALWLoad();
		MLT_vInitLVLLoad();
		MLT_vInitTEXLoad();

		// Convert anims.
		if( bConvAnim )
		{
			for (i=0; i<m_p_oTypeLevels->m_oList.GetCount(); i++)
			{
				GI_Item * p_oItem = m_p_oTypeLevels->m_oList.RemoveHead();
				if (p_oItem->m_bActived)
				{	strcpy(sLevel[lLevelNum], p_oItem->m_fn_p_oGetName());
					m_fn_ComRes_vWriteLine( "BinaryTool --> Animations\n", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
					m_fn_ComRes_vWriteLine( "Start binarizing...\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
					if (GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled())
					{	m_fn_ComRes_vWriteLine( "\n		binarize animations for the level ", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
						m_fn_ComRes_vWriteLine( sLevel[lLevelNum], C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
						m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
						m_fn_ComRes_vWriteLine( sLevel[lLevelNum], C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
						m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
						fn_vAnimationsOnly( sLevel[lLevelNum]);
					}
	//Mihaela Tancu - Makeanim new
				}
				m_p_oTypeLevels->m_oList.AddTail(p_oItem);
			}
		}

		/*
		 * Convert and Copy the graphics\Texture and Vignette directories
		 */
		if( bConvTextures || bFirstLevel )
		{
			m_fn_ComRes_vWriteLine( "BinaryTool --> Textures\n", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
			m_fn_ComRes_vWriteLine( "\nCopy textures to the bin directory \n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
			RedrawWindow(NULL, NULL, RDW_INVALIDATE |RDW_UPDATENOW );
			fn_vCopyTextures( sInitialDir, szDestBinDir, bConvTextures );
		}

		for (i=0; i<m_p_oTypeLevels->m_oList.GetCount(); i++)
		{
			GI_Item * p_oItem = m_p_oTypeLevels->m_oList.RemoveHead();
			m_p_oTypeLevels->m_oList.AddTail(p_oItem);
			if (p_oItem->m_bActived)
			{
				strcpy(sLevel[lLevelNum], p_oItem->m_fn_p_oGetName());
	//Mihaela Tancu - Makeanim new

				if (bConvLevels && GetDlgItem(IDC_BUTTON_CONVLEVEL)->IsWindowEnabled())	//the level should be converted
				{
					m_fn_ComRes_vWriteLine( "BinaryTool --> Level\n", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
					m_fn_ComRes_vWriteLine( "\n		binarize the level ", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
					m_fn_ComRes_vWriteLine( sLevel[lLevelNum], C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
					m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
					m_fn_ComRes_vWriteLine( "\nStart binarizing the level...\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
					RedrawWindow(NULL, NULL, RDW_INVALIDATE |RDW_UPDATENOW );
					if( m_fn_iInitBinGame(sLevel[lLevelNum], p_oItem) == -1 )
					{
						bErrorOccuredWhileBinarizingLevel = TRUE;
						break;
					}
					m_fn_ComRes_vWriteLine( "\nFinish binarizing the level...\n\n\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
					bFirstLevel = FALSE;
				}
				m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
				lLevelNum++;
				k=i+j;
				m_oProgress.SetPos( k );
				RedrawWindow(NULL, NULL, RDW_INVALIDATE |RDW_UPDATENOW );
			}
		}
		m_fn_ComRes_vWriteLine( "Finish binarizing...\n\n\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
		RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );
		bOneLevelMode=TRUE;
		j=j+i;

		if( ! bErrorOccuredWhileBinarizingLevel )
		{
			strcpy(g_szStartPrgIniFile, sInitialDir);
			if (g_szStartPrgIniFile[strlen(g_szStartPrgIniFile) - 1] != '\\')
				strcat( g_szStartPrgIniFile, "\\");
			strcat( g_szStartPrgIniFile, C_szStartPrgIniFile );

			char  szDir1[MAX_PATH] ;

			//Mihaela Tancu - Correction
			if ((g_szStartPrgIniFile[0]==toupper(szDestBinDir[0])) || (g_szStartPrgIniFile[0]==tolower(szDestBinDir[0]))) //the exe of the game and 
			//Mihaela Tancu - Correction
			//the destination directory are on the same drive
			{
				char /*szPath[ MAX_PATH ], */szDir[MAX_PATH] ;
				char *p_Char, *p_Char1;
				char szExeDir[ MAX_PATH ], szDestDir[MAX_PATH];
				int /*i,*/ j, iCounter=0, iCounter1=0;

				if ((p_Char=strstr(szDestBinDir, g_szStartPrgIniFile))!=NULL) //the destination directory is a 
					//sub-directory of the exe directory
				{	
					strcpy(szDir1, szDestBinDir+strlen(sInitialDir)+1);
				}
				else
				{
					strcpy(szExeDir, sInitialDir+2);
					p_Char = strstr(szExeDir, "\\");
					if (p_Char)
					{	strcpy(szDir, p_Char+1);
						p_Char1 = strstr(szDir, "\\");
						if (p_Char1) szDir[strlen(p_Char)-strlen(p_Char1)-1]='\0';
					}

					strcpy(szDestDir, szDestBinDir+2);
					p_Char = strstr(szDestDir, "\\");
					if (p_Char)
					{	strcpy(szDir1, p_Char+1);
						p_Char1 = strstr(szDir1, "\\");
						if (p_Char1) szDir1[strlen(p_Char)-strlen(p_Char1)-1]='\0';
					}

					while (!stricmp(szDir, szDir1))
					{
						iCounter++;

						strcpy(szExeDir, szExeDir+strlen(szDir)+1);
						p_Char = strstr(szExeDir, "\\");
						if (p_Char)
						{	strcpy(szDir, p_Char+1);
							p_Char1 = strstr(szDir, "\\");
							if (p_Char1) szDir[strlen(p_Char)-strlen(p_Char1)-1]='\0';
						}

						strcpy(szDestDir, szDestDir+strlen(szDir1)+1);
						p_Char = strstr(szDestDir, "\\");
						if (p_Char)
						{	strcpy(szDir1, p_Char+1);
							p_Char1 = strstr(szDir1, "\\");
							if (p_Char1) szDir1[strlen(p_Char)-strlen(p_Char1)-1]='\0';
						}
					}
					strcpy(szDir, p_Char+1);
					strcpy(szDir1, sInitialDir);
					while(p_Char=strstr(szDir1, "\\"))
					{	strcpy(szDir1, p_Char+1);
						iCounter1++;
					}
					strcpy(szDir1, "");
					for (j=0; j<iCounter1-iCounter; j++)
						strcat(szDir1, "..\\");
					strcat(szDir1, szDir);

				}
			}

			fn_IniData_vSetDscCreated(bDsc);
			fn_IniData_vSetAskAtEachTime( 1 );
			fn_IniData_vSetBinUseBinaryData( 1 );
			if (bDebug)
			{
				fn_IniData_vSetGDDebugBin( szDir1 );
				fn_IniData_vSetBinDebugIsOk( 1 );
			}
			else
			{
				fn_IniData_vSetGDReleaseBin( szDir1 );
				fn_IniData_vSetBinReleaseIsOk( 1 );
			}

	//Mihaela Tancu - New
			if (bDebug)
				fn_IniData_vSetSPDebug( g_stInitialData.szExeFile );
			else
				fn_IniData_vSetSPRelease( g_stInitialData.szExeFile );
	//Mihaela Tancu - New

		} // End if bErrorOccuredWhileBinarizingLevel
	} // End if m_p_oTypeLevels


	//if the textures are selected
	if (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected)
	{
		if(bOneTextureMode)
		bOneTextureMode = (m_p_oTypeTextures->m_iSelected != m_p_oTypeTextures->m_oList.GetCount());
	bTextureMode = TRUE;
    for (i=0; i<m_p_oTypeTextures->m_oList.GetCount(); i++)
	{
	   	GI_Item * p_oItem = m_p_oTypeTextures->m_oList.RemoveHead();
		if (p_oItem->m_bActived)
		{	strcpy(sTextures[lTextureNum], p_oItem->m_fn_p_oGetName());
			m_fn_ComRes_vWriteLine( "BinaryTool --> binarize the textures from ", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
			m_fn_ComRes_vWriteLine( sTextures[lTextureNum], C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
			m_fn_ComRes_vWriteLine( " directory\n", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);

//Mihaela Tancu - New auto
//			fn_vBinarizeTexturesDir(sTextures[lTextureNum]);
			char szCurrentDir[256];
			GetCurrentDirectory(_MAX_PATH, szCurrentDir);
			SetCurrentDirectory(sInitialDir);
			fn_cExecuteConvImg("ConvImg.exe", sSource, szDestBinDir, bBMP, bTGA, bConvert16, bConvert32, sTextures[lTextureNum]);
			SetCurrentDirectory(szCurrentDir);
			m_fn_ComRes_vWriteLine( "Finish binarization of textures...\n\n\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
//Mihaela Tancu - New auto

			RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );
			lTextureNum++;
		    k=i+j;
			m_oProgress.SetPos( k );
		}
		m_p_oTypeTextures->m_oList.AddTail(p_oItem);
	}
	bOneTextureMode=TRUE;
	j=j+i;
  }


  m_fn_vSelectAll(FALSE); 
  m_oListType->Invalidate(TRUE);
  m_fn_vEnableButtons(FALSE);
  m_fn_TabC_vEnableButtons(); 
  GetDlgItem(IDC_STATIC_PROGRESS)->ShowWindow(FALSE);
  m_bConversion = FALSE;
}


/*
 =======================================================================================
  Name:			m_fn_vInitBinTextures
  Description:	Copy files .gf from source corresponding directory to destination directory
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vInitBinTextures(char *sString)
{
	char szTempName[_MAX_PATH];
	char szCurrentDir[_MAX_PATH];
	char szDirName[_MAX_PATH];

	/*
	* Copy the graphics\Texture directory
	*/
	m_fn_ComRes_vWriteLine( "Binary Tool", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
	m_fn_ComRes_vWriteLine( " --> ", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
	m_fn_ComRes_vWriteLine( sString, C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);
	m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditCom, &m_stCharFormatCom);

	m_fn_ComRes_vWriteLine( "Copy all the files *.gf from the Texture directory", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	
	strcpy(szCurrentDir, sInitialDir);

	strcpy(szTempName,szDestBinDir);
	strcat(szTempName,"\\");
	strcat(szTempName,C_World);
	strcat(szTempName,"\\Graphics");
	SAVE_fn_bCreateDirectory(szTempName);
	strcat(szTempName,"\\Textures");
	strcat(szTempName, "\\");
	strcat(szTempName,sString);
	m_fn_ComRes_vWriteLine( " --> ", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	m_fn_ComRes_vWriteLine( sString, C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);

	strcpy(szDirName,szCurrentDir);
	strcat(szDirName,"\\GameData\\World\\Graphics\\Textures");
	strcat(szDirName, "\\");
	strcat(szDirName, sString);
	SAVE_fn_bCopyDirectory(szDirName, szTempName, TRUE, "GF");
}



/*
 =======================================================================================
  Name:			m_fn_iGetAllTextures
  Description:	Get all Textures
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_iGetAllTextures(GI_Item * p_oItem)
{
	char szFile[500];

	sprintf(szFile, "%s\\World\\Levels\\%s\\%s.tex", g_stInitialData.szSource, p_oItem->m_szName, p_oItem->m_szName);
	MLT_vLoadTEXFileInLib(szFile);
}


/*
 =======================================================================================
  Name:			m_fn_vInitBinGame
  Description:	Binarize the level give as parameter
  Author:		Mihaela Tancu
 =======================================================================================
 */
int CDlgMain::m_fn_iInitBinGame(char *sString, GI_Item *p_oItem)
{
	char szLevelName[_MAX_PATH], szDir[_MAX_PATH];
	char szLevelsDirectory[ _MAX_PATH ];
	char szProgramName[_MAX_PATH];
	char szBinDirectory[ _MAX_PATH ];
	char szCurrentDir[_MAX_PATH];

	char szFileName[_MAX_PATH];
	char szTempName[_MAX_PATH];
	char szTempDir[_MAX_PATH];
	char szDirName[_MAX_PATH];
	char szFile[ _MAX_PATH ];
	char szSoundDirectory[_MAX_PATH];

	char p_szCommanLine[500];
	char cChar;
//	char cFirst=1;
	char cDebug=1;
	char cErrorCode;
	FILE *pFile;
	char *p_cSeparator ;

	GetCurrentDirectory(_MAX_PATH, szDir);
	SetCurrentDirectory(sInitialDir);
	strcpy(szCurrentDir, sInitialDir);
	strcpy(p_szCommanLine, "-dir:");
	strcat(p_szCommanLine, szDestBinDir);
	strcat(p_szCommanLine, " -level:");
	strcat(p_szCommanLine, sString);
	strcat(p_szCommanLine, " -first:");
	if (!strcmp(sLevel[0], sString))
		strcat(p_szCommanLine, "1");
	else
		strcat(p_szCommanLine, "0");
	strcat(p_szCommanLine, " -version:Glide ");
	strcat(p_szCommanLine, "-debug:");
	if (bDebug)
		strcat(p_szCommanLine, "1");
	else
		strcat(p_szCommanLine, "0");

	strcat(p_szCommanLine, "-dsc:");
	if (bDsc)
		strcat(p_szCommanLine, "2");
	else
		strcat(p_szCommanLine, "1");

	/* directory of the binarized data */
	if(strstr(p_szCommanLine,"-dir:"))
		sscanf(strstr(p_szCommanLine,"-dir:")+5,"%s",szDirName);
	else 
		return 0;

	/* the level that we want to binarize*/
	if(strstr(p_szCommanLine,"-level:"))
	{		
		sscanf(strstr(p_szCommanLine,"-level:")+7,"%s",szTempName);
		strcpy(szLevelName, _strupr(szTempName));
	}
	else 
		return 0;
/*
	if(strstr(p_szCommanLine,"-first:"))
	{		
		sscanf(strstr(p_szCommanLine,"-first:")+7,"%s",cChar1);
		cChar1[1] = '\0';
		if (strcmp(cChar1, "0")==0)
			cFirst = 0;
	}
*/
	if(strstr(p_szCommanLine,"-debug:"))
	{		
		sscanf(strstr(p_szCommanLine,"-debug:")+7,"%c",&cChar);
		if (strcmp(&cChar, "0")==0)
			cDebug = 0;
	}

	if(strstr(p_szCommanLine,"-version:"))
	{		
		sscanf(strstr(p_szCommanLine,"-version:")+9,"%s",szTempName);
	}
	else 
		return 0;

	strcpy( szProgramName, g_stInitialData.szExeFile );

	/*
	* path of the binary directory
	*/
	strcpy(szBinDirectory, szDirName);

	/*
	* path of the levels directory (source)
	*/
	//dir source + World\\levels
	strcpy(szLevelsDirectory, g_stInitialData.szSource);
	strcat(szLevelsDirectory, "\\World\\levels");

//Mihaela Tancu - New	
	/*
		* Convert and Copy the graphics\Texture directory
		*/
//	if( cFirst )
//		fn_vCopyTextures( szCurrentDir, szDestBinDir, bConvTextures );
//Mihaela Tancu - New	
	
// ANNECY MT - 15/02/99 {
	/*
	 * path of sound directory (source)
	 */
	pFile = fopen("SoundVersion.ini","rt");
	if(pFile)
	{
		fgets(szSoundDirectory,_MAX_PATH,pFile);
		if(szSoundDirectory[ strlen(szSoundDirectory) - 1] == 0x0a)
			szSoundDirectory[ strlen(szSoundDirectory) - 1] = 0;
		fclose(pFile);
	}
	else
	{
		pFile = fopen("Version.ini","rt");
		if(pFile)
		{
			fgets(szSoundDirectory,255,pFile);
			p_cSeparator = strchr (szSoundDirectory,',');
			if (p_cSeparator)
			{
				*p_cSeparator = 0;
			}
			else if(szSoundDirectory[ strlen(szSoundDirectory) - 1] == 0x0a)
			{
				szSoundDirectory[ strlen(szSoundDirectory) - 1] = 0;
			}
		}
	}
// END ANNECY MT }

	
//Mihaela Tancu - Binary!!!
	strcpy(szFileName, szCurrentDir);
	strcat(szFileName, "\\StartPrg.ini");
	remove(szFileName);
//Mihaela Tancu - Binary!!!	

	/*	
	* First Pass
	*/
	m_fn_ComRes_vWriteLine( "	First Pass for ", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	m_fn_ComRes_vWriteLine( szProgramName, C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	SetCurrentDirectory(szCurrentDir);
	strcpy(szTempName, szCurrentDir);
	strcat(szTempName, "\\");
	strcat(szTempName, szProgramName);
//Mihaela Tancu
	if (bDsc)
		cErrorCode = fn_cExecuteGameFirst(szTempName, szLevelName, C_BinPass1);
	else
		cErrorCode = fn_cExecuteGame(szTempName, szLevelName, C_BinPass1);

	if (cErrorCode != 0)
	{
		char szErrorString[500];
		sprintf( szErrorString, "Error: Program exited with error code %i\n", (int)cErrorCode );
		m_fn_ComRes_vWriteLine( szErrorString, C_ComRes_cOkLine ,&m_oRichEditRes, &m_stCharFormatRes);
		return -1;
	}

//Mihaela Tancu
	
	RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW );
	/*
	* copy some files created in the level directory
	*/
	m_fn_ComRes_vWriteLine( "	Copy files from level directory...\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	strcpy(szTempDir, szLevelsDirectory);
	strcat(szTempDir, "\\");
	strcat(szTempDir, szLevelName);
	fn_cCopyAnyFilesOfADirectory(szTempDir,szCurrentDir,"0");
	
	/*
	* copy some files created in the Gamedata directory
	*/
	m_fn_ComRes_vWriteLine( "	Copy files from gamedata directory...\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	fn_cCopyAnyFilesOfADirectory(szLevelsDirectory,szCurrentDir,"0");

	/*
	* Second pass
	*/
	m_fn_ComRes_vWriteLine( "	Second Pass for ", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	m_fn_ComRes_vWriteLine( szProgramName, C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	m_fn_ComRes_vWriteLine( "\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);

	if ( (cErrorCode = fn_cExecuteGame(szTempName, szLevelName, C_BinPass2)) !=0 )
	{
		char szErrorString[500];
		sprintf( szErrorString, "	Error: Program exited with error code %i\n", (int)cErrorCode );
		m_fn_ComRes_vWriteLine( szErrorString, C_ComRes_cOkLine ,&m_oRichEditRes, &m_stCharFormatRes);
		return -1;
	}
	
	RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );

	/*
	* copy some files created in the level directory
	*/
	m_fn_ComRes_vWriteLine( "	Copy files from level directory...\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	fn_cCopyAnyFilesOfADirectory(szTempDir,szCurrentDir,"1");

	/*
	* copy some files created in the Gamedata directory
	*/
	m_fn_ComRes_vWriteLine( "	Copy files from gamedata directory...\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	fn_cCopyAnyFilesOfADirectory(szLevelsDirectory,szCurrentDir,"1");


	strcpy(szTempName,szCurrentDir); // YLG modif
	strcat(szTempName, "\\");
	strcat(szTempName, C_CRBExecutable);

//Mihaela Tancu - FIX
	if (bFirstLevel)
	{
		/*
		 * CRB on fix
		 */
		m_fn_ComRes_vWriteLine( "	Execute CRB on Fix\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
		fn_cExecuteCRB(szTempName, "Fix");		
		RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );
	}
//Mihaela Tancu - FIX
	/*
	* CRB on Level
	*/
	m_fn_ComRes_vWriteLine( "	Execute CRB on Level\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	fn_cExecuteCRB(szTempName, szLevelName);		
	RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );

	/*
	*  Create the bin directory and copy the binarized data
	*/

	m_fn_ComRes_vWriteLine( "	Copy the binarized files to the bin directory...\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
	SAVE_fn_bCreateDirectory(szBinDirectory);
	strcpy(szTempName,szBinDirectory);
	strcat(szTempName,"\\");
	strcat(szTempName,C_World);
	SAVE_fn_bCreateDirectory(szTempName);
	strcat(szTempName,"\\");
	strcat(szTempName,C_Levels);
	SAVE_fn_bCreateDirectory(szTempName);

	if (bFirstLevel)
//Mihaela Tancu - FIX
//	{
		fn_cCopyBinarizedFiles(szCurrentDir, szTempName,  "FIX");
	
	strcat(szTempName,"\\");
	strcat(szTempName,szLevelName);
	SAVE_fn_bCreateDirectory(szTempName);
	fn_cCopyBinarizedFiles(szCurrentDir, szTempName,  szLevelName);
//	}
//Mihaela Tancu - FIX

//Mihaela Tancu - FIX
//	if (bFirstLevel)
//	{
		//delete the files related with fix, from cpa/exe/main and cpa/exe/main/gamedata/world/levels
		WIN32_FIND_DATA stFindData;
		HANDLE			hFind;
		char			a256_cFileFound[256];
		char			a4_cFileExtension[256];
		char			a256_cSrcDirectory[256];
		char			a256_cTmpFile[256];
		char			a256_cFileName[256];

		strcpy(a256_cSrcDirectory,szCurrentDir);
		strcat(a256_cSrcDirectory,"\\*.*");
		if( (hFind = FindFirstFile(a256_cSrcDirectory, &stFindData )) == INVALID_HANDLE_VALUE)
			return 0;

		strcpy(a256_cTmpFile,szLevelName);
		strcat(a256_cTmpFile, "0");

		do
		{
			if(! ( stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ))
			{	
				strcpy(a256_cFileName, _strupr(stFindData.cFileName));
				fn_vGetFileExtension( a256_cFileName, a4_cFileExtension);
				if ((strcmp(a4_cFileExtension,"RTB")==0) ||
					(strcmp(a4_cFileExtension,"RTS")==0) ||
					(strcmp(a4_cFileExtension,"RTT")==0) ||
					(strcmp(a4_cFileExtension,"RTP")==0) ||
					(strcmp(a4_cFileExtension,"RTV")==0) ||
					(strcmp(a4_cFileExtension,"RTL")==0) 
					)
				{
					if (strstr(stFindData.cFileName, szLevelName))
					{
						strcpy(a256_cFileFound, szCurrentDir);
						strcat(a256_cFileFound,"\\");
						strcat(a256_cFileFound,a256_cFileName);
						remove(a256_cFileFound);
					}
					else
					{
						if (strcmp(a256_cFileName, "FIXLVL.RTB")==0)
						{
							strcpy(a256_cFileFound, szCurrentDir);
							strcat(a256_cFileFound,"\\");
							strcat(a256_cFileFound,a256_cFileName);
							remove(a256_cFileFound);
						}
					}
				}
				else
				{	if ((strcmp(a4_cFileExtension,"SNA")==0) ||
						(strcmp(a4_cFileExtension,"GPT")==0) ||
						(strcmp(a4_cFileExtension,"SND")==0) ||
						(strcmp(a4_cFileExtension,"PTX")==0) ||
						(strcmp(a4_cFileExtension,"VGM")==0) ||
						((strcmp(a4_cFileExtension,"DSB")==0) && bDsc) ||
						(strcmp(a4_cFileExtension,"LSY")==0) )
					{
						strcpy(a256_cFileFound, szCurrentDir);
						strcat(a256_cFileFound,"\\");
						strcat(a256_cFileFound,a256_cFileName);
						remove(a256_cFileFound);
					}
				}
			}
		} while(FindNextFile( hFind, &stFindData ));
		FindClose( hFind );

		strcpy(a256_cSrcDirectory,szCurrentDir);
		strcat(a256_cSrcDirectory,"\\gamedata\\world\\levels\\*.*");
		if( (hFind = FindFirstFile(a256_cSrcDirectory, &stFindData )) == INVALID_HANDLE_VALUE)
			return 0;

		strcpy(a256_cTmpFile,szLevelName);
		strcat(a256_cTmpFile, "0");

		do
		{
			if(! ( stFindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ))
			{	
				strcpy(a256_cFileName, _strupr(stFindData.cFileName));
				fn_vGetFileExtension( a256_cFileName, a4_cFileExtension);
				if ((strcmp(a4_cFileExtension,"RTB")==0) ||
					(strcmp(a4_cFileExtension,"RTS")==0) ||
					(strcmp(a4_cFileExtension,"RTT")==0) ||
					(strcmp(a4_cFileExtension,"RTP")==0) ||
					(strcmp(a4_cFileExtension,"RTV")==0) ||
					(strcmp(a4_cFileExtension,"RTL")==0) 
					)
				{
					strcpy(a256_cFileFound, szCurrentDir);
					strcat(a256_cFileFound,"\\gamedata\\world\\levels\\");
					strcat(a256_cFileFound,a256_cFileName);
					remove(a256_cFileFound);
				}
				else
				{
					if ((strcmp(a4_cFileExtension,"SNA")==0) ||
						(strcmp(a4_cFileExtension,"GPT")==0) ||
						(strcmp(a4_cFileExtension,"SND")==0) ||
						(strcmp(a4_cFileExtension,"PTX")==0) ||
						(strcmp(a4_cFileExtension,"VGM")==0) ||
						((strcmp(a4_cFileExtension,"DSB")==0) && bDsc) ||
						(strcmp(a4_cFileExtension,"LSY")==0) 
					)
					{
						strcpy(a256_cFileFound, szCurrentDir);
						strcat(a256_cFileFound,"\\gamedata\\world\\levels\\");
						strcat(a256_cFileFound,a256_cFileName);
						remove(a256_cFileFound);
					}
				}
			}
		} while(FindNextFile( hFind, &stFindData ));
		FindClose( hFind );
//	}
//Mihaela Tancu - FIX

	/*
	 * copy files from gamedata root
	 */
	RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );
	if (bFirstLevel)
	{
		strcpy(szTempDir,szBinDirectory);
		strcpy(szDirName,szCurrentDir);
		strcat(szDirName,"\\Gamedata");
		SAVE_fn_bMoveDirectory(szDirName, szTempDir, FALSE, "*.*");

		if (!bDsc)
		{
			strcpy(szFile, szDirName);
			strcat(szFile, "\\Game.dsb");
			remove(szFile);
		}

		m_fn_ComRes_vWriteLine( "	Copy Sound directory\n", C_ComRes_cErrorLine ,&m_oRichEditRes, &m_stCharFormatRes);
		/*
		* Copy sound directory
		*/
		strcpy(szTempName,szBinDirectory);
		strcat(szTempName,"\\");
		strcat(szTempName,C_World);
		strcpy(szTempDir, szTempName);	
		strcat(szTempDir,"\\Sound");

// ANNECY MT - 15/02/99 {
		// Copy GameData Directory
		strcpy(szDirName,szCurrentDir);
		strcat(szDirName,"\\GameData\\World\\Sound");
		SAVE_fn_bCopyDirectory(szDirName, szTempDir, TRUE, "*.*");

		// Copy Specific Directory
		strcpy(szDirName,szCurrentDir);
		strcat(szDirName,"\\");
		strcat(szDirName,szSoundDirectory);
		strcat(szDirName,"\\World\\Sound");
		SAVE_fn_bCopyDirectory(szDirName, szTempDir, TRUE, "*.*");
// END ANNECY MT }
	}

	fn_bDeleteTemporaryFiles(szCurrentDir, szLevelName);

	RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );
	SetCurrentDirectory(szDir);

	return 0;
}


/*
 =======================================================================================
  Name:			OnButtonRelease
  Description:	Function for changing the result directory if the release radio button is set
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnButtonRelease()
{
	char _szMessage[5000];
	BOOL bSet=TRUE, bDisplay=FALSE;
	if (((CButton *)GetDlgItem(IDC_BUTTON_RELEASE))->GetCheck())
	{
		((CButton *)GetDlgItem(IDC_BUTTON_RELEASE))->SetCheck(1);
		bDebug = FALSE;
/*		if (b3DCard)
			if (bDebug)
			{	if (!SetCurrentDirectory( g_stInitialData.szDestBinDD3D ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDD3D ),"DestBinDD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDD3D);
			}
			else
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinRD3D ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRD3D ),"DestBinRD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRD3D);
			}
		else
*/			if (bDebug)
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinDDFX ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDDFX ),"DestBinDDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDDFX);
			}
			else
			{
				if (!SetCurrentDirectory( g_stInitialData.szDestBinRDFX ))
					GetDlgItem(IDC_EDIT_DESTBIND)->SetWindowText( "" );
				m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRDFX ),"DestBinRDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRDFX);
			}
		GetDlgItem(IDC_EDIT_DESTBIND)->GetWindowText(szDestBinDir, 256);
		
		if (!bAuto) // YLG Correction
			fn_IniData_vGetDatasFromStartFile(TRUE);
		if (!strcmp(g_stInitialData.szExeFile, ""))
			GetDlgItem(IDC_EDIT_EXEC)->SetWindowText( "" );
		else
			GetDlgItem(IDC_EDIT_EXEC)->SetWindowText( g_stInitialData.szExeFile );
	}
}

/*
 =======================================================================================
  Name:			OnMeasureItem
  Description:	Handle function for message WM_MEASUREITEM
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) 
{
	CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}


/*
 =======================================================================================
  Name:			OnSelchangeListObject
  Description:	Handle function for message LBN_SELCHANGE in list box with objects
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnSelchangeListObject()
{
}


/*
 =======================================================================================
  Name:			OnLButtonDownListBoxObject
  Description:	Handle function for message WM_LBUTTONDOWN on ListBox Name (objects)
  Author:		Mihaela Tancu
 =======================================================================================
 */
BOOL CDlgMain::OnLButtonDownListBoxObject(MSG *pMsg)
{
    CListBox    *pLB = m_oListObject;
    POINT       xPos;
    CRect       oRect;
    BOOL        bOutside;
    int         iIndex;
    BOOL        bResult = TRUE;

	//get the x and y coordinates
    xPos.x = LOWORD(pMsg->lParam);
    xPos.y = HIWORD(pMsg->lParam);

    iIndex = pLB -> ItemFromPoint ( xPos, bOutside ) ;
    pLB -> GetItemRect ( iIndex , &oRect ) ;
    if( (oRect . PtInRect ( xPos ) ) && ( xPos.x < 16 )  )
    {	//determine the object under the cursor in front of which the user clicked
        GI_Item *p_oItem = (GI_Item*) pLB->GetItemData( iIndex );
        ASSERT( p_oItem ) ;
        //and if the user click in front change the activation (validate/invalidate the activation).
		if( m_fn_bOnChangeActivation ( p_oItem, iIndex ) )  
            bResult = TRUE;
        else
            bResult = CDialog::PreTranslateMessage(pMsg);
    }
    else
        bResult = CDialog::PreTranslateMessage(pMsg);
    return bResult;
}


/*
 =======================================================================================
  Name:			OnKeyDownListBoxObject
  Description:	Handle function for message WM_KEYDOWN on ListBox Name (objects)
  Author:		Mihaela Tancu
 =======================================================================================
 */
BOOL CDlgMain::OnKeyDownListBoxObject(MSG *pMsg)
{
	return TRUE;
}


/*
 =======================================================================================
  Name:			OnInitDialog
  Description:	Handle function for message WM_INITDIALOG
  Author:		Mihaela Tancu
 =======================================================================================
 */
BOOL CDlgMain::OnInitDialog()
{
	RECT stRect;
	RECT stDlgRect;
	long lDlgWidth;
	long lDlgHeight;
	char fVersion[9] = "1.0";
	char sConfFile[50];
	char sRead[256], *p_char;
	char sLevels[50][256];
	char szSel[50][50];
	int iNbSel=0, i, iNbSeq=0;
	GI_Item *p_oItem;
	GI_Type *p_oType;
	char szExeFile[50][256];
	char szSource[50][256];
	char szDestBinRDFX[50][256];
	char sVersion[50][256];
	char sOption[25][5];
	char sBinAnims[25][5];
	char sBinTextures[25][5];
	char sBinLevels[25][5];
	char sBatch[25][5];
	char sAll[25][5];
	char sTbl[25][5];
	char sBMP[25][5];
	char sTGA[25][5];
	char sConvert16[25][5];
	char sConvert32[25][5];

	//
	CDialog::OnInitDialog();

	MLT_vInitSystem();
	
	GetCurrentDirectory(256, sInitialDir);

	// obtained the height and the width of the main window
	GetClientRect( &stDlgRect );
	lDlgWidth  = stDlgRect.right - stDlgRect.left + 1;
	lDlgHeight = stDlgRect.bottom - stDlgRect.top + 1;

	// for every edit box in the window save its left position	
	for (int iEdit = 0; iEdit < m_cNbEditBox; iEdit ++)
	{
		GetDlgItem(m_a_uiEditControls[iEdit])->GetWindowRect( &stRect );
		m_a_iSizeLeft[iEdit] = lDlgWidth - (stRect.right - stRect.left + 1);
	}

	/*
     =======================================================================================
	 * Create RichEditControl result
     =======================================================================================
	 */
	// Create a richEdit control in the result panel
	GetDlgItem( IDC_STATIC_RESULTEDIT)->GetWindowRect( &stRect );
	m_oRichEditRes.Create
		( 
			WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | ES_AUTOHSCROLL | ES_READONLY, 
			stRect, 
			this, 
			IDC_RICHEDIT_RESULT 
		);
	m_oRichEditRes.SetBackgroundColor( FALSE, RGB( 255, 255,255) );
	m_oRichEditRes.GetDefaultCharFormat( m_stCharFormatRes );
	m_stCharFormatRes.dwEffects = 0;
	m_stCharFormatRes.crTextColor = RGB(255,255,255);
	strcpy ( m_stCharFormatRes.szFaceName, "Arial" );
	m_stCharFormatRes.dwMask = CFM_COLOR | CFM_BOLD | CFM_FACE;
	m_oRichEditRes.SetDefaultCharFormat( m_stCharFormatRes );

	/*
	 =======================================================================================
	 * Create RichEditControl command
     =======================================================================================
	 */
	// the same for the command rich edit control 
	GetDlgItem( IDC_STATIC_COMMANDEDIT)->GetWindowRect( &stRect );
	stRect.top -= 23;
	m_oRichEditCom.Create
		( 
			WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | ES_AUTOHSCROLL | ES_READONLY, 
			stRect, 
			this, 
			IDC_RICHEDIT_COMMAND 
		);
	m_oRichEditCom.SetBackgroundColor( FALSE, RGB( 255, 255,255) );
	m_oRichEditCom.GetDefaultCharFormat( m_stCharFormatCom );
	m_stCharFormatCom.dwEffects = 0;
	m_stCharFormatCom.crTextColor = RGB(0,0,0);
	strcpy ( m_stCharFormatCom.szFaceName, "Arial" );
	m_stCharFormatCom.dwMask = CFM_COLOR | CFM_BOLD | CFM_FACE;
	m_oRichEditCom.SetDefaultCharFormat( m_stCharFormatCom );

	// the position and size of the main window
//Mihaela Tancu - New auto
	strcpy(sConfFile, sInitialDir);
	strcat(sConfFile, "\\Auto.ini");
	FILE *f;
	if (_access( sConfFile, 0) != -1) // if the configuration file exists
	{	
//		fn_IniData_vGetDatasFromFile( TRUE );

		bAuto = TRUE; // YLG Correction
		bYes = TRUE;
		bDsc = TRUE;

		bBatch = FALSE; bAll = FALSE; bTbl = FALSE;
		bBMP = FALSE; bTGA = FALSE; bConvert16 = FALSE; bConvert32 = FALSE;

		// read the file
		f = fopen(sConfFile, "r");
		while(fgets(sRead, 256, f) != NULL)
		{
			if (strstr(sRead, "ExeFile"))
			{
				strcpy(szExeFile[iNbSeq], sRead+8);
				szExeFile[iNbSeq][strlen(szExeFile[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "SourceDir"))
			{
				strcpy(szSource[iNbSeq], sRead+10);
				szSource[iNbSeq][strlen(szSource[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "DestDir"))
			{
				strcpy(szDestBinRDFX[iNbSeq], sRead+8);
				szDestBinRDFX[iNbSeq][strlen(szDestBinRDFX[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "Version"))
			{
				strcpy(sVersion[iNbSeq], sRead+8);
				sVersion[iNbSeq][strlen(sVersion[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "Options"))
			{
				strcpy(sOption[iNbSeq], sRead+8);
				sOption[iNbSeq][strlen(sOption[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "BinAnims"))
			{
				strcpy(sBinAnims[iNbSeq], sRead+9);
				sBinAnims[iNbSeq][strlen(sBinAnims[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "Batch"))
			{
				strcpy(sBatch[iNbSeq], sRead+6);
				sBatch[iNbSeq][strlen(sBatch[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "All"))
			{
				strcpy(sAll[iNbSeq], sRead+4);
				sAll[iNbSeq][strlen(sAll[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "Tbl"))
			{
				strcpy(sTbl[iNbSeq], sRead+4);
				sTbl[iNbSeq][strlen(sTbl[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "BinTextures"))
			{
				strcpy(sBinTextures[iNbSeq], sRead+12);
				sBinTextures[iNbSeq][strlen(sBinTextures[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "BinLevels"))
			{
				strcpy(sBinLevels[iNbSeq], sRead+10);
				sBinLevels[iNbSeq][strlen(sBinLevels[iNbSeq])-1]='\0';
			}

/*			if (strstr(sRead, "Used"))
			{
				strcpy(sUsed[iNbSeq], sRead+5);
				sUsed[iNbSeq][strlen(sUsed[iNbSeq])-1]='\0';
			}
*/
			if (strstr(sRead, "BMP"))
			{
				strcpy(sBMP[iNbSeq], sRead+4);
				sBMP[iNbSeq][strlen(sBMP[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "TGA"))
			{
				strcpy(sTGA[iNbSeq], sRead+4);
				sTGA[iNbSeq][strlen(sTGA[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "Convert16"))
			{
				strcpy(sConvert16[iNbSeq], sRead+10);
				sConvert16[iNbSeq][strlen(sConvert16[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "Convert32"))
			{
				strcpy(sConvert32[iNbSeq], sRead+10);
				sConvert32[iNbSeq][strlen(sConvert32[iNbSeq])-1]='\0';
			}

			if (strstr(sRead, "Maps"))
			{	strcpy(sLevels[iNbSeq], sRead);
			}
			
			if (strstr(sRead, "END")) //it is the end of the sequence
			{
				iNbSeq++;
				//get all data
				// convert the levels
			}
		}
		strcpy(g_stInitialData.szExeFile, szExeFile[0]);
		strcpy(g_stInitialData.szSource, szSource[0]);
		strcpy(sSource, g_stInitialData.szSource);
//		if (!strcmp(sOption[0], "DFX"))
		{	//b3DCard = FALSE;
			if (!stricmp(sVersion[0], "Debug"))
			{	bDebug = TRUE;
				strcpy(g_stInitialData.szDestBinDDFX, szDestBinRDFX[0]);
				strcpy(szDestBinDir,  szDestBinRDFX[0]);
			}
			else if (!stricmp(sVersion[0], "Release"))
			{	bDebug = FALSE;
				strcpy(g_stInitialData.szDestBinRDFX, szDestBinRDFX[0]);
				strcpy(szDestBinDir,  szDestBinRDFX[0]);
			}
		}
/*		else if (!strcmp(sOption[0], "D3D"))
		{	b3DCard = TRUE;
			if (!stricmp(sVersion[0], "Debug"))
			{	bDebug = TRUE;
				strcpy(g_stInitialData.szDestBinDD3D, szDestBinRDFX[0]);
				strcpy(szDestBinDir,  szDestBinRDFX[0]);
			}
			else if (!stricmp(sVersion[0], "Release"))
			{	bDebug = FALSE;
				strcpy(g_stInitialData.szDestBinRD3D, szDestBinRDFX[0]);
				strcpy(szDestBinDir,  szDestBinRDFX[0]);
			}
		}
*/		
		if (!strcmp(sBinAnims[0], "1"))
		{	bConvAnim = TRUE;
			if (!strcmp(sBatch[0], "1")) 
				bBatch = TRUE;
			else
				bBatch = FALSE;
			if (!strcmp(sAll[0], "1")) 
				bAll = TRUE;
			else
				bAll = FALSE;
			if (!strcmp(sTbl[0], "1")) 
				bTbl = TRUE;
			else
				bTbl = FALSE;
		}
		else
			bConvAnim = FALSE;

		if (!strcmp(sBinTextures[0], "1"))
		{	bConvTextures = TRUE;
			if (!strcmp(sBMP[0], "1")) 
				bBMP = TRUE;
			else
				bBMP = FALSE;
			if (!strcmp(sTGA[0], "1")) 
				bTGA = TRUE;
			else
				bTGA = FALSE;
			if (!strcmp(sConvert16[0], "1")) 
				bConvert16 = TRUE;
			else
				bConvert16 = FALSE;
			if (!strcmp(sConvert32[0], "1")) 
				bConvert32 = TRUE;
			else
				bConvert32 = FALSE;
		}
		else
			bConvTextures = FALSE;
		if (!strcmp(sBinLevels[0], "1"))
			bConvLevels = TRUE;
		else
			bConvLevels = FALSE;

/*		if (!strcmp(sUsed[0], "1"))
			bUsed = TRUE;
		else
			bUsed = FALSE;
*/
		fclose(f);
		fn_IniData_vGetWindowPosSize();
		if (!bAuto) // YLG Correction
			fn_IniData_vGetDatasFromStartFile(TRUE);
	}
	else
//Mihaela Tancu - New auto
	{	
		bAuto = FALSE; // YLG Correction
		fn_IniData_vGetDatasFromFile( TRUE );
		strcpy(sSource, g_stInitialData.szSource);
	}
	m_fn_bWarningUser();

	//insert the panels 	
	TC_ITEM TabCtrlItem;
	TabCtrlItem.mask = TCIF_TEXT;
    TabCtrlItem.pszText = "Directories";
	m_oPanel.InsertItem( 0, &TabCtrlItem );
    TabCtrlItem.pszText = "Selection";
	m_oPanel.InsertItem( 1, &TabCtrlItem );
    TabCtrlItem.pszText = "Result";
	m_oPanel.InsertItem( 2, &TabCtrlItem );
	
	char szVersion[25], *p_szVersion;

	p_szVersion = szVersion + GetDlgItem( IDC_STATIC_VERS1)->GetWindowText( szVersion, 20);
	*p_szVersion++ = ' ';
	strcpy( p_szVersion, fVersion );
	GetDlgItem( IDC_STATIC_VERS1)->SetWindowText( szVersion);

	// at initializing show only the buttons for the first panel (Directories)
	m_fn_TabC_vShowControlsPanelDir() ;

	m_oListType = (CListBox *)GetDlgItem(IDC_LIST1);
	m_oListObject = (CListBox *)GetDlgItem(IDC_LIST2);

	m_fn_vUpdateAll();

	// show the window with its position and size
	m_bInit = TRUE;
	MoveWindow( &g_stWinPosSize.stMainPos );

	if (!bDebug)
		((CButton *)GetDlgItem(IDC_BUTTON_RELEASE))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_DEBUG))->SetCheck(1);

/*	if (!b3DCard)
		((CButton *)GetDlgItem(IDC_BUTTON_DFX))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_D3D))->SetCheck(1);
*/
	if (!bFix1)
		((CButton *)GetDlgItem(IDC_BUTTON_FIX))->SetCheck(0);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_FIX))->SetCheck(1);

	if (bConvAnim)
		((CButton *)GetDlgItem(IDC_BUTTON_CONVANI))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_CONVANI))->SetCheck(0);

	if (bConvTextures)
		((CButton *)GetDlgItem(IDC_BUTTON_CONVTEX))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_CONVTEX))->SetCheck(0);
	
	if (bConvLevels)
		((CButton *)GetDlgItem(IDC_BUTTON_CONVLEVEL))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_CONVLEVEL))->SetCheck(0);

	if (bBatch)
		((CButton *)GetDlgItem(IDC_BUTTON_USED))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_USED))->SetCheck(0);
	if (bAll)
		((CButton *)GetDlgItem(IDC_BUTTON_A))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_A))->SetCheck(0);
	if (bTbl)
		((CButton *)GetDlgItem(IDC_BUTTON_Z))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_Z))->SetCheck(0);
	if (bBMP)
		((CButton *)GetDlgItem(IDC_BUTTON_BMP))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_BMP))->SetCheck(0);
	if (bTGA)
		((CButton *)GetDlgItem(IDC_BUTTON_TGA))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_TGA))->SetCheck(0);
	if (bConvert16)
		((CButton *)GetDlgItem(IDC_BUTTON_C16))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_C16))->SetCheck(0);
	if (bConvert32)
		((CButton *)GetDlgItem(IDC_BUTTON_C32))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_C32))->SetCheck(0);

//Mihaela Tancu - New auto
	if (bDsc)
		((CButton *)GetDlgItem(IDC_BUTTON_BIN))->SetCheck(1);
	else
		((CButton *)GetDlgItem(IDC_BUTTON_BIN))->SetCheck(0);
//Mihaela Tancu - New auto

	GetDlgItem(IDC_EDIT_DESTBIND)->GetWindowText(szDestBinDir, 256);

	GetDlgItem(IDC_EDIT_EXEC)->SetWindowText(g_stInitialData.szExeFile );

	// init others modules (ERM MMG SCR)
	fn_v_InitMemV6i();

	//*** ACP initialisations ***
	TMP_fn_vFirstInit();
//	FIL_fn_vFirstInit();

//Mihaela Tancu - New auto
	if (bYes)
	{
	  m_oPanel.SetCurSel(1);
	  m_fn_TabC_vShowControlsPanelSel() ;
	  RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_UPDATENOW );
	  int iIndex = m_oListType->FindString(-1, "Levels");
	  if (iIndex==LB_ERR)
		if (AfxMessageBox( "There is nothing to convert! Please, choose another type of object for conversion", MB_OK))
			return FALSE;
	  m_oListType->SetCurSel(iIndex);
	  OnSelchangeListType() ;
	  for (int j=0; j<iNbSeq; j++)
	  {

		iNbSel = 0;
		p_char = strstr(sLevels[j], "=");
		strcpy(sLevels[j], p_char + 1); 

		while ( (p_char = strstr(sLevels[j], ",")) != NULL)
		{	strcpy(szSel[iNbSel], sLevels[j]);
			szSel[iNbSel][strlen(sLevels[j])-strlen(p_char)]='\0';
			strcpy(sLevels[j], p_char + 1); 
			iNbSel++;
		}
		strcpy(szSel[iNbSel], sLevels[j]);
		szSel[iNbSel][strlen(szSel[iNbSel])-1]='\0';
		iNbSel++;
		
		iIndex = m_oListType->GetCurSel( );
		p_oType = (GI_Type *)m_oListType->GetItemData( iIndex );
	
		for (i=0; i<iNbSel; i++)
		{
			iIndex= m_oListObject->FindStringExact( -1, szSel[i] );
			if (iIndex == LB_ERR)
				continue;
			p_oItem = (GI_Item *)m_oListObject->GetItemData( iIndex );
			if (!p_oItem->m_bActived)
			{	p_oType->m_iSelected++;
				m_iCountOfSelections++;
			}
			p_oItem->m_bActived = TRUE;
		}

		// after modifying the state of the objects, enable/disable the selection buttons
		m_fn_vEnableButtonAll();
		m_fn_vEnableButtonConvert();
		if (p_oType->m_iSelected==m_oListObject->GetCount())
			GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(FALSE);
		else
			GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(TRUE);
		if (p_oType->m_iSelected>0)
			GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(TRUE);
		else
			GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(FALSE);

		GetDlgItem(IDC_BUTTON_USED)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim) );
		GetDlgItem(IDC_BUTTON_A)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim) );
		GetDlgItem(IDC_BUTTON_Z)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim) );
		GetDlgItem(IDC_BUTTON_CONVANI)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));

		GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
		GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
		GetDlgItem(IDC_BUTTON_C16)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
		GetDlgItem(IDC_BUTTON_C32)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
		GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));

		GetDlgItem(IDC_BUTTON_AUTO)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));

		if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected || 
			/*bConvAnim && GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled() ||
			bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled()||*/
			m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected ||
			m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected)
				GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);
		else
			GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
		m_oListType->Invalidate(TRUE);
		OnBinarise();
		if (j != iNbSeq-1)
		{	strcpy(g_stInitialData.szExeFile, szExeFile[j+1]);
			strcpy(g_stInitialData.szSource, szSource[j+1]);
			strcpy(sSource, g_stInitialData.szSource);
//			strcpy(g_stInitialData.szDestBinRDFX, szDestBinRDFX[j+1]);
/*			if (!stricmp(sVersion[j+1], "Debug"))
			{	bDebug = TRUE;
				strcpy(g_stInitialData.szDestBinDDFX, szDestBinRDFX[j+1]);
			}
			else if (!stricmp(sVersion[j+1], "Release"))
			{	bDebug = FALSE;
				strcpy(g_stInitialData.szDestBinRDFX, szDestBinRDFX[j+1]);
			}
			strcpy(szDestBinDir,  szDestBinRDFX[j+1]);
*/
//			if (!strcmp(sOption[j+1], "DFX"))
			{	//b3DCard = FALSE;
				if (!stricmp(sVersion[j+1], "Debug"))
				{	bDebug = TRUE;
					strcpy(g_stInitialData.szDestBinDDFX, szDestBinRDFX[j+1]);
					strcpy(szDestBinDir,  szDestBinRDFX[j+1]);
				}
				else if (!stricmp(sVersion[j+1], "Release"))
				{	bDebug = FALSE;
					strcpy(g_stInitialData.szDestBinRDFX, szDestBinRDFX[j+1]);
					strcpy(szDestBinDir,  szDestBinRDFX[j+1]);
				}
			}
/*			else if (!strcmp(sOption[j+1], "D3D"))
			{	b3DCard = TRUE;
				if (!stricmp(sVersion[j+1], "Debug"))
				{	bDebug = TRUE;
					strcpy(g_stInitialData.szDestBinDD3D, szDestBinRDFX[j+1]);
					strcpy(szDestBinDir,  szDestBinRDFX[j+1]);
				}
				else if (!stricmp(sVersion[j+1], "Release"))
				{	bDebug = FALSE;
					strcpy(g_stInitialData.szDestBinRD3D, szDestBinRDFX[j+1]);
					strcpy(szDestBinDir,  szDestBinRDFX[j+1]);
				}
			}
*/
			GetDlgItem( IDC_EDIT_SOURCE )->SetWindowText( g_stInitialData.szSource );
			GetDlgItem( IDC_EDIT_DESTBIND )->SetWindowText( szDestBinDir );
			GetDlgItem( IDC_EDIT_EXEC )->SetWindowText( g_stInitialData.szExeFile );
			if (!bDebug)
			{	((CButton *)GetDlgItem(IDC_BUTTON_RELEASE))->SetCheck(1);
				((CButton *)GetDlgItem(IDC_BUTTON_DEBUG))->SetCheck(0);
			}
			else
			{	((CButton *)GetDlgItem(IDC_BUTTON_RELEASE))->SetCheck(0);
				((CButton *)GetDlgItem(IDC_BUTTON_DEBUG))->SetCheck(1);
			}
/*			if (!b3DCard)
			{	((CButton *)GetDlgItem(IDC_BUTTON_DFX))->SetCheck(1);
				((CButton *)GetDlgItem(IDC_BUTTON_D3D))->SetCheck(0);
			}
			else
			{	((CButton *)GetDlgItem(IDC_BUTTON_DFX))->SetCheck(0);
				((CButton *)GetDlgItem(IDC_BUTTON_D3D))->SetCheck(1);
			}
*/			if (!strcmp(sBinAnims[j+1], "1"))
			{	bConvAnim = TRUE;
				if (!strcmp(sBatch[j+1], "1")) 
				{	bBatch = TRUE;
					((CButton *)GetDlgItem(IDC_BUTTON_USED))->SetCheck(1);
				}
				else
				{	bBatch = FALSE;
					((CButton *)GetDlgItem(IDC_BUTTON_USED))->SetCheck(0);
				}
				if (!strcmp(sAll[j+1], "1")) 
				{	bAll = TRUE;
					((CButton *)GetDlgItem(IDC_BUTTON_A))->SetCheck(1);
				}
				else
				{	bAll = FALSE;
					((CButton *)GetDlgItem(IDC_BUTTON_A))->SetCheck(0);
				}
				if (!strcmp(sTbl[j+1], "1")) 
				{	bTbl = TRUE;
					((CButton *)GetDlgItem(IDC_BUTTON_Z))->SetCheck(1);
				}
				else
				{	bTbl = FALSE;
					((CButton *)GetDlgItem(IDC_BUTTON_Z))->SetCheck(0);
				}
				((CButton *)GetDlgItem(IDC_BUTTON_CONVANI))->SetCheck(1);
			}
			else
			{	bConvAnim = FALSE;
				((CButton *)GetDlgItem(IDC_BUTTON_CONVANI))->SetCheck(0);
			}
			if (!strcmp(sBinTextures[j+1], "1"))
			{	bConvTextures = TRUE;
				if (!strcmp(sBMP[j+1], "1")) 
				{	bBMP = TRUE;
					((CButton *)GetDlgItem(IDC_BUTTON_BMP))->SetCheck(1);
				}
				else
				{	bBMP = FALSE;
					((CButton *)GetDlgItem(IDC_BUTTON_BMP))->SetCheck(0);
				}
				if (!strcmp(sTGA[j+1], "1")) 
				{	bTGA = TRUE;
					((CButton *)GetDlgItem(IDC_BUTTON_TGA))->SetCheck(1);
				}
				else
				{	bTGA = FALSE;
					((CButton *)GetDlgItem(IDC_BUTTON_TGA))->SetCheck(0);
				}
				if (!strcmp(sConvert16[j+1], "1")) 
				{	bConvert16 = TRUE;
					((CButton *)GetDlgItem(IDC_BUTTON_C16))->SetCheck(1);
				}
				else
				{	bConvert16 = FALSE;
					((CButton *)GetDlgItem(IDC_BUTTON_C16))->SetCheck(0);
				}
				if (!strcmp(sConvert32[j+1], "1")) 
				{	bConvert32 = TRUE;
					((CButton *)GetDlgItem(IDC_BUTTON_C32))->SetCheck(1);
				}
				else
				{	bConvert32 = FALSE;
					((CButton *)GetDlgItem(IDC_BUTTON_C32))->SetCheck(0);
				}
				((CButton *)GetDlgItem(IDC_BUTTON_CONVTEX))->SetCheck(1);
			}
			else
			{	bConvTextures = FALSE;
				((CButton *)GetDlgItem(IDC_BUTTON_CONVTEX))->SetCheck(0);
			}
			if (!strcmp(sBinLevels[j+1], "1"))
			{	bConvLevels = TRUE;
				((CButton *)GetDlgItem(IDC_BUTTON_CONVLEVEL))->SetCheck(1);
			}
			else
			{	bConvLevels = FALSE;
				((CButton *)GetDlgItem(IDC_BUTTON_CONVLEVEL))->SetCheck(0);
			}
		}
		//fn_IniData_vSetSource( g_stInitialData.szSource );
	  }

	  bYes = FALSE;
	}
//Mihaela Tancu - New auto

	return TRUE;  // return TRUE  unless you set the focus to a control
}

/*
 =======================================================================================
  Name:			m_fn_vShowPartialWarning
  Description:	Show a message for the directories (if they don't exist or are not set)
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vShowPartialWarning(BOOL bSet, char *szPath, char *_szMessage, BOOL * bDisplay, int iID, char *szDir)	
{
	// if bSet, set the text in the edit box
	// else, inform user that the directory (sub-directory) does not exist
	if (bSet)
		GetDlgItem(iID)->SetWindowText( szDir );
	else
	{	int iSize= strlen(_szMessage);
		sprintf( _szMessage+iSize, "\tThe directory %s does not exist (or is not set). Please, choose another %s directory!\n\n", szPath, szPath );
		GetDlgItem( iID ) ->SetWindowText( "");
		strcpy(szDir, "");
		*bDisplay = TRUE;
	}
}



/*
 =======================================================================================
  Name:			OnHelp
  Description:	Handle function for message BN_CLICKED on Help button
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnHelp() 
{
	// TODO: Add your control notification handler code here
	
}


/*
 =======================================================================================
  Name:			OnSelectAll
  Description:	Handle function for message BN_CLICKED on All button
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnSelectAll() 
{
	// TODO: Add your control notification handler code here
	// select all the objects in all the lists associated with the types
	// enable (Clear, Clear All, Convert) / disable (All, AllInList)
	m_fn_vSelectAll(TRUE); 
	m_oListType->Invalidate(TRUE);
	m_fn_vEnableButtons(TRUE);

}


/*
 =======================================================================================
  Name:			OnSelectAllInList
  Description:	Handle function for message BN_CLICKED on AllInList button
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnSelectAllInList() 
{
	//change all the objects in active and enable/disable the buttons for selection
	m_fn_vSelectAllForType(TRUE);
	m_fn_vEnableButtonAll();
	GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTON_CLEARALL)->EnableWindow(TRUE);


	if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)
	{
		GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_CONVANI)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_AUTO)->EnableWindow(TRUE);
	}
	
	if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected) /* && 
		bConvAnim && GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled() ||
		bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled())*/
		GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(TRUE);
	

	if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && 
		bConvAnim && GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled())
	{		GetDlgItem(IDC_BUTTON_USED)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_A)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_Z)->EnableWindow(TRUE);
	}

	if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && 
		bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled())
	{		GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_C16)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_C32)->EnableWindow(TRUE);
	}

	if (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected)
	{	GetDlgItem(IDC_BUTTON_USED)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_A)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_Z)->EnableWindow(TRUE);
	}

	if (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected)
	{	GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_C16)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_C32)->EnableWindow(TRUE);
	}

	if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected /*&& 
		bConvAnim && GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled() ||
		bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled()) */||
		(m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) ||
		(m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected))
			GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);
	else
		GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);

}


/*
 =======================================================================================
  Name:			OnClear
  Description:	Handle function for message BN_CLICKED on Clear button
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnClear() 
{
	//change all the objects in the current list to inactive and enable/disable the buttons
	m_fn_vSelectAllForType(FALSE);
	m_fn_vEnableButtonConvert();
	m_fn_vEnableButtonAll();
	GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(TRUE);
}


/*
 =======================================================================================
  Name:			OnClearAll
  Description:	Handle function for message BN_CLICKED on ClearAll button
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnClearAll() 
{
	// change the state of all the objects to inactive and enable/disable selections buttons
	m_fn_vSelectAll(FALSE); 
	m_oListType->Invalidate(TRUE);
	m_fn_vEnableButtons(FALSE);
}


/*
 =======================================================================================
  Name:			OnQuit
  Description:	Handle function for message BN_CLICKED on Quit button
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnQuit() 
{
	// TODO: Add your control notification handler code here
	if (AfxMessageBox( "Are you sure you want to Quit ?", MB_YESNO | MB_ICONQUESTION) == IDNO)
		return;

	CDialog::OnCancel();
}


/*
 =======================================================================================
  Name:			OnPaint
  Description:	Handle function for message WM_PAINT
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	CDialog::OnPaint();
}


/*
 =======================================================================================
  Name:			OnSelchangePanel
  Description:	Handle function for message TCN_SELCHANGE
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnSelchangePanel(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int nPanel = m_oPanel.GetCurSel();
	//before changing the panel 0 to 1 or 2, test if the datas are valid
	BOOL bResult = m_fn_vTestIniDatas();

	// get the current panel and for it show only its controls 
	// and hide the others
	switch(nPanel)
	{
	case 0://the panels with directories
		m_fn_TabC_vShowControlsPanelDir() ;
		break;
	case 1: //the panel with selections
		if (bResult)
		{	m_fn_TabC_vShowControlsPanelDir() ;
			m_oPanel.SetCurSel(0);
		}
		else
			m_fn_TabC_vShowControlsPanelSel() ;
		break;
	case 2://the panel with the comands and results
		if (bResult)
		{	m_fn_TabC_vShowControlsPanelDir() ;
			m_oPanel.SetCurSel(0);
		}
		else
		m_fn_TabC_vShowControlsPanelRes() ;
		break;
	}
	
	*pResult = 0;
}


/*
 =======================================================================================
  Name:			OnButtonBrowseDestBinD
  Description:	Handle function for message BN_CLICKED on first ... button
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnButtonBrowseDestBinD() 
{
	// TODO: Add your control notification handler code here
	char szPath[ MAX_PATH ], szDir[MAX_PATH], szDir1[MAX_PATH] ;
	char *p_Char, *p_Char1;
	char szExeDir[ MAX_PATH ], szDestDir[MAX_PATH];

	int i, j, iCounter=0, iCounter1=0;
	// prepare the structure for the browsing
	m_fn_vBrowseDirectory(szPath, &i, NULL);

	if (i)
	{	// set that path for the Game Data directory
/*		if (b3DCard)
		{	if (bDebug)
			{	fn_IniData_vSetDestBinDD3D( szPath );
				strcpy(g_stInitialData.szDestBinDD3D, szPath);
			}
			else
			{	fn_IniData_vSetDestBinRD3D( szPath );
				strcpy(g_stInitialData.szDestBinRD3D, szPath);
			}
		}
		else
*/		{	if (bDebug)
			{	fn_IniData_vSetDestBinDDFX( szPath );
				strcpy(g_stInitialData.szDestBinDDFX, szPath);
			}
			else
			{	fn_IniData_vSetDestBinRDFX( szPath );
				strcpy(g_stInitialData.szDestBinRDFX, szPath);
			}
		}

		/* 
		 =======================================================================================
		 * write local path in the edit box control
		 =======================================================================================
		 */
		GetDlgItem( IDC_EDIT_DESTBIND )->SetWindowText( szPath );

		strcpy(szDestBinDir, szPath);

		strcpy(g_szStartPrgIniFile, sInitialDir);
//sInitialDir is the directory of the exe of the game
//szDestBinDir is the directory of the destination data
		if (g_szStartPrgIniFile[0]==szDestBinDir[0]) //the exe of the game and 
			//the destination directory are on the same drive
		{
			if ((p_Char=strstr(szDestBinDir, g_szStartPrgIniFile))!=NULL) //the destination directory is a 
				//sub-directory of the exe directory
			{	strcpy(szDir, szDestBinDir+strlen(sInitialDir)+1);
				if (g_szStartPrgIniFile[strlen(g_szStartPrgIniFile) - 1] != '\\')
					strcat( g_szStartPrgIniFile, "\\");
				strcat( g_szStartPrgIniFile, C_szStartPrgIniFile );
				if (bDebug)
					fn_IniData_vSetGDDebugBin(szDir);
				else
					fn_IniData_vSetGDReleaseBin(szDir);
			}
			else
			{
				strcpy(szExeDir, sInitialDir+2);
				p_Char = strstr(szExeDir, "\\");
				if (p_Char)
				{	strcpy(szDir, p_Char+1);
					p_Char1 = strstr(szDir, "\\");
					if (p_Char1) szDir[strlen(p_Char)-strlen(p_Char1)-1]='\0';
				}

				strcpy(szDestDir, szDestBinDir+2);
				p_Char = strstr(szDestDir, "\\");
				if (p_Char)
				{	strcpy(szDir1, p_Char+1);
					p_Char1 = strstr(szDir1, "\\");
					if (p_Char1) szDir1[strlen(p_Char)-strlen(p_Char1)-1]='\0';
				}

				while (!stricmp(szDir, szDir1))
				{
					iCounter++;

					strcpy(szExeDir, szExeDir+strlen(szDir)+1);
					p_Char = strstr(szExeDir, "\\");
					if (p_Char)
					{	strcpy(szDir, p_Char+1);
						p_Char1 = strstr(szDir, "\\");
						if (p_Char1) szDir[strlen(p_Char)-strlen(p_Char1)-1]='\0';
					}

					strcpy(szDestDir, szDestDir+strlen(szDir)+1);
					p_Char = strstr(szDestDir, "\\");
					if (p_Char)
					{	strcpy(szDir1, p_Char+1);
						p_Char1 = strstr(szDir1, "\\");
						if (p_Char1) szDir1[strlen(p_Char)-strlen(p_Char1)-1]='\0';
					}
				}
				strcpy(szDir, p_Char+1);
				strcpy(szDir1, sInitialDir);
				while(p_Char=strstr(szDir1, "\\"))
				{	strcpy(szDir1, p_Char+1);
					iCounter1++;
				}
				strcpy(szDir1, "");
				for (j=0; j<iCounter1-iCounter; j++)
					strcat(szDir1, "..\\");
				strcat(szDir1, szDir);

				if (g_szStartPrgIniFile[strlen(g_szStartPrgIniFile) - 1] != '\\')
					strcat( g_szStartPrgIniFile, "\\");
				strcat( g_szStartPrgIniFile, C_szStartPrgIniFile );
				if (bDebug)
					fn_IniData_vSetGDDebugBin(szDir1);
				else
					fn_IniData_vSetGDReleaseBin(szDir1);
			}
		}
		else
		{
			if (g_szStartPrgIniFile[strlen(g_szStartPrgIniFile) - 1] != '\\')
				strcat( g_szStartPrgIniFile, "\\");
			strcat( g_szStartPrgIniFile, C_szStartPrgIniFile );
			if (bDebug)
				fn_IniData_vSetGDDebugBin(szPath);
			else
				fn_IniData_vSetGDReleaseBin(szPath);
		}
	}
}

/*
 =======================================================================================
  Name:			OnButtonBrowseSource
  Description:	Handle function for message BN_CLICKED on second ... button (for RawData)
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnButtonBrowseSource() 
{
	// TODO: Add your control notification handler code here
	char szPath[ MAX_PATH ];
	int i;

	// prepare the structure for the browsing
	m_fn_vBrowseDirectory(szPath, &i, NULL);

	if (i)
	{	
		// set that path for the Raw Data directory
		fn_IniData_vSetSource( szPath );
		strcpy(g_stInitialData.szSource, szPath);
		strcpy(szSource, szPath);
		GetDlgItem( IDC_EDIT_SOURCE )->SetWindowText( szPath );
		//remove all the elements in the lists with objects
		mfn_vFreeMemory();

		m_p_oTypeAnims = NULL;
		m_p_oTypeLevels = NULL;
		m_p_oTypeTextures = NULL;
		
		//reset the contains of the list boxes
		((CListBox *)GetDlgItem(IDC_LIST1))->ResetContent();
		((CListBox *)GetDlgItem(IDC_LIST2))->ResetContent();

		m_fn_vUpdateAll();
		//reset the total number of selections
		m_iCountOfSelections = 0;
	}
}



/*
 =======================================================================================
  Name:			OnSize
  Description:	Handle function for message WM_SIZE
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	RECT	stRect;
	CWnd	*p_oWnd;
	int		iWnd;
	long	lWidth;

	if (m_bInit)
		if (nType != SIZE_MINIMIZED)
		{
			/*
			=======================================================================================
			* resize edit box controls
			=======================================================================================
			*/
			for (iWnd = 0; iWnd < m_cNbEditBox; iWnd ++)
			{
				p_oWnd = GetDlgItem( m_a_uiEditControls[iWnd] );
				p_oWnd->GetWindowRect( &stRect );
				ScreenToClient( &stRect );
				stRect.right = stRect.left + (cx - m_a_iSizeLeft[iWnd]);
				p_oWnd->MoveWindow(&stRect, FALSE);
			}

			/*
			=======================================================================================
			* resize right button controls
			=======================================================================================
			*/
			for (iWnd = 0; iWnd < m_cNbRightButtons; iWnd ++)
			{
				p_oWnd = GetDlgItem( m_a_uiRightButtons[iWnd] );
				p_oWnd->GetWindowRect( &stRect );
				ScreenToClient( &stRect );
				lWidth = stRect.right - stRect.left;
				stRect.right = cx-87; 
				stRect.left = stRect.right - lWidth;
				p_oWnd->MoveWindow(&stRect, FALSE);
			}

			for (iWnd = 0; iWnd < m_cNbRightBut; iWnd ++)
			{
				p_oWnd = GetDlgItem( m_a_uiRightBut[iWnd] );
				p_oWnd->GetWindowRect( &stRect );
				ScreenToClient( &stRect );
				lWidth = stRect.right - stRect.left;
				stRect.right = cx-69; 
				stRect.left = stRect.right - lWidth;
				p_oWnd->MoveWindow(&stRect, FALSE);
			}

			/*
			=======================================================================================
			* resize HELP and QUIT button controls
			=======================================================================================
			*/
			p_oWnd = GetDlgItem( IDC_QUIT );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			lWidth = stRect.right - stRect.left;
			stRect.bottom = cy - 15;
			stRect.top = stRect.bottom - 20;
			stRect.right = cx-27; 
			stRect.left = stRect.right - lWidth;
			p_oWnd->MoveWindow(&stRect, FALSE);

			p_oWnd = GetDlgItem( IDC_HELPBUTTON );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			stRect.bottom = cy - 15;
			stRect.top = stRect.bottom - 20;
			stRect.right = cx-117; 
			stRect.left = stRect.right - lWidth;
			p_oWnd->MoveWindow(&stRect, FALSE);

			/*
			=======================================================================================
			* resize the groups
			=======================================================================================
			*/
			for (iWnd = 0; iWnd < m_cNbGroupButtons; iWnd ++)
			{
				p_oWnd = GetDlgItem( m_a_uiGroupButtons[iWnd] );
				p_oWnd->GetWindowRect( &stRect );
				ScreenToClient( &stRect );
				stRect.right = cx-68; 
				p_oWnd->MoveWindow(&stRect, FALSE);
			}

			/*
			=======================================================================================
			* resize the panels
			=======================================================================================
			*/
			p_oWnd = GetDlgItem( IDC_PANEL );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			stRect.bottom = cy - 45;
			stRect.right = cx-27; 
			p_oWnd->MoveWindow(&stRect, FALSE);

			/*
			=======================================================================================
			* resize the group selection
			=======================================================================================
			*/
			p_oWnd = GetDlgItem( IDC_STATIC_GRALL );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			lWidth = stRect.right - stRect.left;
			stRect.right = cx-63; 
			stRect.left = stRect.right - lWidth;
			long lDim = stRect.left;
			p_oWnd->MoveWindow(&stRect, FALSE);

			p_oWnd = GetDlgItem( IDC_STATIC_OPT );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			lWidth = stRect.right - stRect.left;
			stRect.right = cx-63; 
			stRect.left = stRect.right - lWidth;
			p_oWnd->MoveWindow(&stRect, FALSE);
			p_oWnd = GetDlgItem( IDC_STATIC_COPT );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			lWidth = stRect.right - stRect.left;
			stRect.right = cx-63; 
			stRect.left = stRect.right - lWidth;
			p_oWnd->MoveWindow(&stRect, FALSE);
			p_oWnd = GetDlgItem( IDC_STATIC_MOPT );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			lWidth = stRect.right - stRect.left;
			stRect.right = cx-63; 
			stRect.left = stRect.right - lWidth;
			p_oWnd->MoveWindow(&stRect, FALSE);
			/*
			=======================================================================================
			* resize the lists
			=======================================================================================
			*/
			p_oWnd = GetDlgItem( IDC_LIST1 );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			stRect.right = cx/3 - 7; 
			stRect.bottom = cy - 65;
			p_oWnd->MoveWindow(&stRect, FALSE);

			p_oWnd = GetDlgItem( IDC_STATIC_LIST1 );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			stRect.right = cx/3 - 7; 
			stRect.bottom = cy - 65;
			p_oWnd->MoveWindow(&stRect, FALSE);

			p_oWnd = GetDlgItem( IDC_LIST2 );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			stRect.left = cx/3 + 7;
			stRect.right = lDim-17; 
			stRect.bottom = cy - 65;
			p_oWnd->MoveWindow(&stRect, FALSE);


			/*
			=======================================================================================
			* resize the result windows (Command and Result)
			=======================================================================================
			*/

			p_oWnd = GetDlgItem( IDC_STATIC_VERS1 );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			lWidth = stRect.right-stRect.left;
			stRect.bottom = cy - 10;
			stRect.top = stRect.bottom - 20;
			stRect.right = cx-197; 
			stRect.left = stRect.right - lWidth;
			p_oWnd->MoveWindow(&stRect, FALSE);

			p_oWnd = GetDlgItem( IDC_RICHEDIT_COMMAND );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			stRect.right = cx - 57; 
			stRect.bottom = cy/3;
			p_oWnd->MoveWindow(&stRect, FALSE);

			p_oWnd = GetDlgItem( IDC_STATIC_RES );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			stRect.top = cy/3 + 17;
			stRect.bottom = stRect.top + 20;
			p_oWnd->MoveWindow(&stRect, FALSE);
			
			p_oWnd = GetDlgItem( IDC_RICHEDIT_RESULT );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			stRect.right = cx - 57; 
			stRect.top = cy/3 + 34;
			stRect.bottom = cy-85;
			p_oWnd->MoveWindow(&stRect, FALSE);

			/*
			=======================================================================================
			* resize Progress Bar
			=======================================================================================
			*/
			p_oWnd = GetDlgItem( IDC_STATIC_PROGRESS );
			p_oWnd->GetWindowRect( &stRect );
			ScreenToClient( &stRect );
			lWidth = stRect.right - stRect.left;
			stRect.right = cx-64; 
			stRect.left = stRect.right - lWidth;
			stRect.top=cy-75;
			stRect.bottom=cy -52;
			p_oWnd->MoveWindow(&stRect, FALSE);


			Invalidate();
		}
}


/*
 =======================================================================================
  Name:			OnSizing
  Description:	Handle function for message WM_SIZING
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnSizing( UINT nSide, LPRECT lpRect )
{
	long lWidth = lpRect->right - lpRect->left + 1;
	long lHeight= lpRect->bottom - lpRect->top + 1;

	// do not permit to minimize the main window more than 
	// some predefined constants:C_iMainWindowWidth (520)
	// and C_iMainWindowHeight (423)

	// the width cannot be less than C_iMainWindowWidth
	if (lWidth < C_iMainWindowWidth)
	{
		switch (nSide)
		{
			case WMSZ_LEFT:
			case WMSZ_TOPLEFT:
			case WMSZ_BOTTOMLEFT:
				lpRect->left = lpRect->right - C_iMainWindowWidth;
				break;
			case WMSZ_RIGHT:
			case WMSZ_TOPRIGHT:
			case WMSZ_BOTTOMRIGHT:
				lpRect->right = lpRect->left + C_iMainWindowWidth;
				break;
		}
	}

	// the height cannot be less than C_iMainWindowHeight
	if (lHeight < C_iMainWindowHeight)
	{
		switch (nSide)
		{
			case WMSZ_BOTTOM:
			case WMSZ_BOTTOMLEFT:
			case WMSZ_BOTTOMRIGHT:
				lpRect->bottom = lpRect->top + C_iMainWindowHeight;
				break;
			case WMSZ_TOP:
			case WMSZ_TOPLEFT:
			case WMSZ_TOPRIGHT:
				lpRect->top = lpRect->bottom - C_iMainWindowHeight;
		}
	}

	CDialog::OnSizing( nSide, lpRect );
}


/*
 =======================================================================================
  Name:			mfn_vFreeMemoryForType()
  Description:	Freeing all the allocated memory for a type
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::mfn_vFreeMemoryForType(GI_Type **_p_oType) 
{
	if (*_p_oType)		
	{	int iSize=(*_p_oType)->m_oList.GetCount();
		//for all the elements in the list, remove them from list and delete the object
		for (int i=0; i<iSize; i++)
		{	GI_Item* p_oItem = (*_p_oType)->m_oList.RemoveHead();
			delete p_oItem;
		}
	}
	if (*_p_oType)		
		delete *_p_oType;
}

/*
 =======================================================================================
  Name:			mfn_vFreeMemory()
  Description:	Freeing all the allocated memory
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::mfn_vFreeMemory() 
{
	mfn_vFreeMemoryForType(&m_p_oTypeAnims ) ;
	mfn_vFreeMemoryForType(&m_p_oTypeLevels ) ;
	mfn_vFreeMemoryForType(&m_p_oTypeTextures ) ;
}



/*
 =======================================================================================
  Name:			OnSelchangeListType
  Description:	Handle function for message LBN_SELCHANGE on list box with types
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnSelchangeListType() 
{
	// TODO: Add your control notification handler code here
	char szPath[ MAX_PATH ];

	//reset the contents of the list box with objects
	m_oListObject->ResetContent();
	int iIndex = m_oListType->GetCurSel();
	m_oListType->GetText(iIndex, szPath);
	GI_Type *p_oType = (GI_Type *)m_oListType->GetItemData(iIndex);
	
	// update the list of objects corresponding to the type selected
	if (m_p_oTypeAnims) m_fn_vUpdateListBox(&m_p_oTypeAnims->m_oList, szPath, "Animations");
	if (m_p_oTypeTextures) m_fn_vUpdateListBox(&m_p_oTypeTextures->m_oList, szPath, "Textures");
	if (m_p_oTypeLevels) m_fn_vUpdateListBox(&m_p_oTypeLevels->m_oList, szPath, "Levels");
	
	// enable/disable the selection buttons corresponding with the current selections
	if (p_oType->m_iSelected==m_oListObject->GetCount())
		GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(FALSE);
	else
		GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(TRUE);
	if (p_oType->m_iSelected>0)
		GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(TRUE);
	else
		GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(FALSE);
}


/////////////////////////////////////////////////////////////////////
// Functions
/////////////////////////////////////////////////////////////////////


/*
 =======================================================================================
  Name:			m_fn_vOnDrawItemListBoxType
  Description:	Function for changing the color of one item in the list box with types
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vOnDrawItemListBoxType(LPDRAWITEMSTRUCT lpDIS) 
{
	// TODO: Add your message handler code here and/or call default
	CDC				*p_oDC = CDC::FromHandle(lpDIS->hDC);
	CBrush			oBrush;
	COLORREF		xTextColor;
	BOOL			bSelected = (lpDIS->itemState & ODS_SELECTED );
	GI_Type			*p_oType= (GI_Type *)m_oListType->GetItemData( lpDIS->itemID );

	oBrush.CreateSolidBrush( GetSysColor( bSelected ? COLOR_GRAYTEXT /*COLOR_HIGHLIGHT*/ : COLOR_WINDOW) );
	// change the color of the type in the list box according with:
	// if for that type are no objects selected, draw it in black
	// if for that type are some objects selected, draw it in blue
	// if of the type are all the objects selected, draw it in green
	if (p_oType->m_iSelected == 0)
		xTextColor = RGB(0, 0,0); //black
	int iSize = p_oType->m_oList.GetCount() ;
	if (p_oType->m_iSelected < iSize && p_oType->m_iSelected >0)
		xTextColor = RGB(0, 0, 255); //blue
	if (p_oType->m_iSelected == iSize && iSize>0)
		xTextColor = RGB(0, 127,0); //green
	p_oType->m_xTextColor = xTextColor;
	xTextColor = p_oType->m_xTextColor;
	p_oDC->FillRect( &lpDIS->rcItem, &oBrush );
	p_oDC->SetBkMode( TRANSPARENT);
	p_oDC->SetTextColor( xTextColor );
	p_oDC->DrawText( p_oType -> m_fn_p_oGetName(), &lpDIS->rcItem, DT_SINGLELINE | DT_LEFT | DT_VCENTER );

	oBrush.DeleteObject();
}


/*
 =======================================================================================
  Name:			m_fn_vOnDrawItemListBoxObject
  Description:	Function for drawing the cross before of one active item in the list box with objects
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vOnDrawItemListBoxObject(LPDRAWITEMSTRUCT lpDIS)
{
    CDC                 *pDC = CDC::FromHandle( lpDIS->hDC );
    CListBox            *pLB = m_oListObject;
    BOOL                bSelected = (lpDIS->itemState & ODS_SELECTED );
    GI_Item             *p_oItem = (GI_Item*)pLB->GetItemData( lpDIS->itemID );

    pDC->FillSolidRect( &lpDIS->rcItem, GetSysColor( COLOR_WINDOW ));

	//draw a cross in front of an active object
    if (p_oItem -> m_bActived)
        pDC->BitBlt( lpDIS->rcItem.left + 2, lpDIS->rcItem.top + 1, 12, 12, &m_oCrossDC, 0, 0, SRCAND );

    pDC->SetBkMode( TRANSPARENT);
    pDC->SetTextColor( GetSysColor( COLOR_WINDOWTEXT ) );

    lpDIS->rcItem.left += 16;
    pDC->DrawText( p_oItem -> m_fn_p_oGetName(), &lpDIS->rcItem, DT_SINGLELINE | DT_LEFT | DT_VCENTER );
	//invert 
    lpDIS->rcItem.left -= 1;
    if (bSelected)
        pDC->InvertRect( &lpDIS->rcItem );
}


/*
 =======================================================================================
  Name:			m_fn_TabC_vChangeShowControlsPanelDir
  Description:	Show Or Hide the buttons for the "Directories" tab
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_TabC_vChangeShowControlsPanelDir(BOOL bChange) 
{
	// Show or hide the buttons from the first panel 
	// according to the parameter bChange
	GetDlgItem(IDC_HELPBUTTON)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTON_BIN)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_DEBUG)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_RELEASE)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_BROWSE2)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_BROWSE3)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_CHANGE)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_RAW)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_GAME)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_GR1)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_GR2)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_EXEC)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_VERS)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_DSC)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_FIX)->ShowWindow(bChange);
	GetDlgItem(IDC_EDIT_DESTBIND)->ShowWindow(bChange);
	GetDlgItem(IDC_EDIT_SOURCE)->ShowWindow(bChange);
	GetDlgItem(IDC_EDIT_EXEC)->ShowWindow(bChange);
//	GetDlgItem(IDC_BUTTON_D3D)->ShowWindow(bChange);
//	GetDlgItem(IDC_BUTTON_DFX)->ShowWindow(bChange);
	if (m_bConversion && bChange)  //is conversion
			GetDlgItem(IDC_STATIC_PROGRESS)->ShowWindow(FALSE);
}


/*
 =======================================================================================
  Name:			OnConvAnim
  Description:	Handle function for message BN_CLICKED on Convert Animations
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnConvAnim()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_CONVANI))->GetCheck())
	{
		//if it is checked ...
	    bConvAnim = TRUE;
	}
	else
	{   bConvAnim = FALSE;
	}
	if ((m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim))
	{	GetDlgItem(IDC_BUTTON_USED)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_A)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_Z)->EnableWindow(TRUE);
	}
	else
	{	GetDlgItem(IDC_BUTTON_USED)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_A)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_Z)->EnableWindow(FALSE);
	}
/*	if ((m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && (bConvAnim || bConvTextures)))
		GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(TRUE);
	else
		GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(FALSE);

	if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && 
		bConvAnim && GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled() ||
		bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled()||
		m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected ||
		m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected)
			GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);
	else
		GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
*/
	if ((m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && !bConvAnim && !bConvTextures && !bConvLevels))
		GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
	else
		GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);

}


/*
 =======================================================================================
  Name:			OnUsed
  Description:	Handle function for message BN_CLICKED on Used
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnUsed()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_USED))->GetCheck())
	{
		//if it is checked ...
	    bBatch = TRUE;
	}
	else
	    bBatch = FALSE;

}

/*
 =======================================================================================
  Name:			OnAll
  Description:	Handle function for message BN_CLICKED on Used
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnAll()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_A))->GetCheck())
	{
		//if it is checked ...
	    bAll = TRUE;
	}
	else
	    bAll = FALSE;

}

/*
 =======================================================================================
  Name:			OnTbl
  Description:	Handle function for message BN_CLICKED on Tbl
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnTbl()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_Z))->GetCheck())
	{
		//if it is checked ...
	    bTbl = TRUE;
	}
	else
	    bTbl = FALSE;
}


/*
 =======================================================================================
  Name:			OnFix
  Description:	Handle function for message BN_CLICKED on Fix
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnButtonFix()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_FIX))->GetCheck())
		//if it is checked ...
	    bFix1 = TRUE;
	else
	    bFix1 = FALSE;
}

/*
 =======================================================================================
  Name:			OnBMP
  Description:	Handle function for message BN_CLICKED on BMP
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnBMP()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_BMP))->GetCheck())
	{
		//if it is checked ...
	    bBMP = TRUE;
	}
	else
	    bBMP = FALSE;

}


/*
 =======================================================================================
  Name:			OnTGA
  Description:	Handle function for message BN_CLICKED on TGA
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnTGA()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_TGA))->GetCheck())
	{
		//if it is checked ...
	    bTGA = TRUE;
	}
	else
	    bTGA = FALSE;

}


/*
 =======================================================================================
  Name:			OnConvert16
  Description:	Handle function for message BN_CLICKED on Convert16
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnConvert16()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_C16))->GetCheck())
	{
		//if it is checked ...
	    bConvert16 = TRUE;
	}
	else
	    bConvert16 = FALSE;

}


/*
 =======================================================================================
  Name:			OnConvert32
  Description:	Handle function for message BN_CLICKED on Convert32
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnConvert32()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_C32))->GetCheck())
	{
		//if it is checked ...
	    bConvert32 = TRUE;
	}
	else
	    bConvert32 = FALSE;

}


/*
 =======================================================================================
  Name:			OnGenerateAuto
  Description:	Handle function for message BN_CLICKED on Generate auto.ini
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnGenerateAuto()
{
	char szName[_MAX_PATH];
	FILE *file;
	int i, j;
	BOOL bOK;

	strcpy(szName, sInitialDir);
	strcat(szName, "\\Auto.ini");

	if (file = fopen(szName, "rt"))	//the file exist
	{
		strcpy(sMes, "\n\tThe file Auto.ini already exist.\n");
		strcat(sMes, "\nSelect yes for adding a sequence to the existing file, or no for creating a new file.");
		strcpy(sOK, "Yes");
		strcpy(sCancel, "No");
		CDlgWarning dlgWarning;
		int nResponse = dlgWarning.DoModal();
		if (nResponse == IDOK)
		{	bOK = TRUE;
			fclose(file);
		}
		else if (nResponse == IDCANCEL)
			{	bOK = FALSE;
				fclose(file);
				remove(szName);
			}
	}

	if (file=fopen(szName, "at"))
	{
		fprintf(file, "ExeFile=%s\n", g_stInitialData.szExeFile);
		fprintf(file, "SourceDir=%s\n", g_stInitialData.szSource);
		fprintf(file, "DestDir=%s\n", szDestBinDir);
		if (bDebug)
			fprintf(file, "Version=Debug\n");
		else
			fprintf(file, "Version=Release\n");
		fprintf(file, "Option=%d\n", bFix1);
		fprintf(file, "BinAnims=%d\n", bConvAnim);
		if (bConvAnim)
		{
			fprintf(file, "Batch=%d\n", bBatch);
			fprintf(file, "All=%d\n", bAll);
			fprintf(file, "Tbl=%d\n", bTbl);
		}
		fprintf(file, "BinTextures=%d\n", bConvTextures);
		if (bConvTextures)
		{
			fprintf(file, "BMP=%d\n", bBMP);
			fprintf(file, "TGA=%d\n", bTGA);
			fprintf(file, "Convert16=%d\n", bConvert16);
			fprintf(file, "Convert32=%d\n", bConvert32);
		}
		fprintf(file, "BinLevels=%d\n", bConvLevels);

		fprintf(file, "Maps=");

		j=0;
	    for (i=0; i<m_p_oTypeLevels->m_oList.GetCount(); i++)
		{
	   		GI_Item * p_oItem = m_p_oTypeLevels->m_oList.RemoveHead();
			if (p_oItem->m_bActived)
			{	if (!j) {	fprintf(file, p_oItem->m_fn_p_oGetName());
							j++;
						}
				else  fprintf(file,",%s", p_oItem->m_fn_p_oGetName());
			}
			m_p_oTypeLevels->m_oList.AddTail(p_oItem);
		}
		fprintf(file, "\nEND\n");
		fclose(file);
	}
}

/*
 =======================================================================================
  Name:			OnConvTextures
  Description:	Handle function for message BN_CLICKED on Convert Textures
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnConvTextures()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_CONVTEX))->GetCheck())
	{
		//if it is checked ...
	    bConvTextures = TRUE;
	}
	else
	    bConvTextures = FALSE;

	if ((m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures))
	{	GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_C16)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTON_C32)->EnableWindow(TRUE);
	}
	else
	{	GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_C16)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_C32)->EnableWindow(FALSE);
	}

/*	if ((m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && (bConvAnim || bConvTextures)))
		GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(TRUE);
	else
		GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(FALSE);

	if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && 
		bConvAnim && GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled() ||
		bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled()||
		m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected ||
		m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected)
			GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);
	else
		GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
*/
	if ((m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && !bConvAnim && !bConvTextures && !bConvLevels))
		GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
	else
		GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);

}


/*
 =======================================================================================
  Name:			OnConvLevels
  Description:	Handle function for message BN_CLICKED on Convert Levels
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnConvLevels()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_CONVLEVEL))->GetCheck())
	{
		//if it is checked ...
	    bConvLevels = TRUE;
	}
	else
	    bConvLevels = FALSE;
	
	if ((m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && !bConvAnim && !bConvTextures && !bConvLevels))
		GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
	else
		GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);

}


/*
 =======================================================================================
  Name:			mfn_vConvAnim
  Description:	Function for setting/resetting the flag telling if the animations are converted or not
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::mfn_vConvAnim()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_CONVANI))->GetCheck())
	{
		//if it is checked, set the flag 
	    bConvAnim = TRUE;
		((CButton *)GetDlgItem(IDC_BUTTON_CONVANI))->SetCheck(0);
	}
	else
	{
		//if it is not checked, reset the flag 
		bConvAnim = FALSE;
		((CButton *)GetDlgItem(IDC_BUTTON_CONVANI))->SetCheck(1);
	}
}

/*
 =======================================================================================
  Name:			mfn_vConvTextures
  Description:	Function for setting/resetting the flag telling if the textures are converted or not
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::mfn_vConvTextures()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_CONVTEX))->GetCheck())
	{
		//if it is checked, set the flag 
	    bConvTextures = TRUE;
		((CButton *)GetDlgItem(IDC_BUTTON_CONVTEX))->SetCheck(0);
	}
	else
	{
		//if it is not checked, reset the flag 
		bConvTextures = FALSE;
		((CButton *)GetDlgItem(IDC_BUTTON_CONVTEX))->SetCheck(1);
	}
}


/*
 =======================================================================================
  Name:			mfn_vConvLevels
  Description:	Function for setting/resetting the flag telling if the textures are converted or not
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::mfn_vConvLevels()
{
	if (((CButton *)GetDlgItem(IDC_BUTTON_CONVLEVEL))->GetCheck())
	{
		//if it is checked, set the flag 
	    bConvLevels = TRUE;
		((CButton *)GetDlgItem(IDC_BUTTON_CONVLEVEL))->SetCheck(0);
	}
	else
	{
		//if it is not checked, reset the flag 
		bConvLevels = FALSE;
		((CButton *)GetDlgItem(IDC_BUTTON_CONVLEVEL))->SetCheck(1);
	}
}


/*
 =======================================================================================
  Name:			m_fn_TabC_vChangeShowControlsPanelSel
  Description:	Show Or Hide the buttons for the "Selection" tab
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_TabC_vChangeShowControlsPanelSel(BOOL bChange) 
{
	// Show or hide the buttons from the second panel 
	// according to the parameter bChange
	GetDlgItem(IDC_HELPBUTTON)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTON_ALL)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_GRALL)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_OPT)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_COPT)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_MOPT)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_ALLINLIST)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_CONVERT)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_CONVTEX)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_CONVLEVEL)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_CONVANI)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_USED)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_A)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_Z)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_BMP)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_TGA)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_C16)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_C32)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_AUTO)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_CLEAR)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_CLEARALL)->ShowWindow(bChange);
	GetDlgItem(IDC_BUTTON_CONVANI)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));
	GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));
	GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& m_iCountOfSelections && (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected/* && (bConvAnim && GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled()) || (bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled())*/)
																										|| (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected)
																											|| (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected));

	GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected /*&& (bConvAnim || bConvTextures)*/)); // YLG Correction

	GetDlgItem(IDC_BUTTON_USED)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim) );
	GetDlgItem(IDC_BUTTON_A)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim) );
	GetDlgItem(IDC_BUTTON_Z)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim) );

	GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
	GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
	GetDlgItem(IDC_BUTTON_C16)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
	GetDlgItem(IDC_BUTTON_C32)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );

	GetDlgItem(IDC_BUTTON_AUTO)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));

	GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& m_iCountOfSelections);
	GetDlgItem(IDC_BUTTON_CLEARALL)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& m_iCountOfSelections);
	if (bChange)
	{	// show/hide the buttons or enable/disable buttons
		GetDlgItem(IDC_LIST1)->ShowWindow(!(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()==0));
		GetDlgItem(IDC_STATIC_LIST1)->ShowWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()==0);
		GetDlgItem(IDC_LIST2)->ShowWindow(!((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()==0);
		GetDlgItem(IDC_BUTTON_ALL)->EnableWindow(!((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()==0);
		GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(!((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()==0);
	}
	else
	{	GetDlgItem(IDC_LIST1)->ShowWindow(bChange);
		GetDlgItem(IDC_STATIC_LIST1)->ShowWindow(bChange);
		GetDlgItem(IDC_LIST2)->ShowWindow(bChange);
	}
	GetDlgItem(IDC_STATIC_PROGRESS)->ShowWindow(FALSE);
}


/*
 =======================================================================================
  Name:			m_fn_TabC_vChangeShowControlsPanelRes
  Description:	Show Or Hide the buttons for the "Result" tab
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_TabC_vChangeShowControlsPanelRes(BOOL bChange) 
{
	// Show or hide the buttons from the third panel 
	// according to the parameter bChange
	GetDlgItem(IDC_HELPBUTTON)->EnableWindow(FALSE);
	GetDlgItem(IDC_STATIC_RES)->ShowWindow(bChange);
	GetDlgItem(IDC_STATIC_COM)->ShowWindow(bChange);
	GetDlgItem(IDC_RICHEDIT_COMMAND)->ShowWindow(bChange);
	GetDlgItem(IDC_RICHEDIT_RESULT)->ShowWindow(bChange);
	if (m_bConversion && bChange)  //is conversion
			GetDlgItem(IDC_STATIC_PROGRESS)->ShowWindow(TRUE);
}


/*
 =======================================================================================
  Name:			m_fn_TabC_vShowControlsPanelDir
  Description:	Show only the buttons for the "Directories" tab
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_TabC_vShowControlsPanelDir() 
{
	// when is selected the first panel show only its controls
	m_fn_TabC_vChangeShowControlsPanelDir(TRUE);
	m_fn_TabC_vChangeShowControlsPanelSel(FALSE);
	m_fn_TabC_vChangeShowControlsPanelRes(FALSE);
}


/*
 =======================================================================================
  Name:			m_fn_TabC_vShowControlsPanelSel
  Description:	Show only the buttons for the "Selection" tab
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_TabC_vShowControlsPanelSel() 
{
	// when is selected the second panel show only its controls
	m_fn_TabC_vChangeShowControlsPanelDir(FALSE);
	m_fn_TabC_vChangeShowControlsPanelSel(TRUE);
	m_fn_TabC_vChangeShowControlsPanelRes(FALSE);
}


/*
 =======================================================================================
  Name:			m_fn_TabC_vShowControlsPanelRes
  Description:	Show only the buttons for the "Result" tab
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_TabC_vShowControlsPanelRes() 
{
	// when is selected the third panel show only its controls
	m_fn_TabC_vChangeShowControlsPanelDir(FALSE);
	m_fn_TabC_vChangeShowControlsPanelSel(FALSE);
	m_fn_TabC_vChangeShowControlsPanelRes(TRUE);
}


/*
 =======================================================================================
  Name:			m_fn_ComRes_vWriteLine
  Description:	Add a line of the specified color in the rich edit box specified 
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_ComRes_vWriteLine( char *szLine, char cLineType ,CRichEditCtrl* _oRichEdit, 
									CHARFORMAT* _stCharFormat)
{
	long	lOldLength;
	long	lNewLength;
	long	lSize;

	_stCharFormat->crTextColor = gs_a_xLineColor[ cLineType ];
	_stCharFormat->dwEffects = 0;

	// write a line in the rich edit control 
	// with different color (red or black) for Ok or for Error
	lOldLength = _oRichEdit->GetTextLength();
	lNewLength = lOldLength + strlen( szLine );
	lSize = _oRichEdit->GetLimitText();
	if (lNewLength > lSize)
	{
		lSize += 10000;
		_oRichEdit->LimitText( lSize );
	}
	_oRichEdit->ReplaceSel( szLine );
	
	_oRichEdit->SetSel( lOldLength, -1 );
	_oRichEdit->SetSelectionCharFormat( *_stCharFormat );
	_oRichEdit->SetSel( lNewLength, lNewLength ); 
}


/*
 =======================================================================================
  Name:			m_fn_ComRes_vDeleteLines
  Description:	Delete all the text in the rich edir box control
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_ComRes_vDeleteLines( CRichEditCtrl *_oRichEdit)
{
	//delete the content of the rich edit control (result and command)
	_oRichEdit->SetWindowText( "" );
}


/*
 =======================================================================================
  Name:			m_fn_vChange
  Description:	Change the state of one object (item), and the total/local number of selections
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vChange(GI_Item *p_oItem, GI_Type *p_oType, BOOL bSet )
{
	// set/reset the state of the object, 
	// increment/decrement the local (p_oType->m_iSelected) and
	// total number of selections (m_iCountOfSelections)
	if (!bSet)
	{	p_oItem->m_bActived = TRUE;
		m_iCountOfSelections++;
		p_oType->m_iSelected++;
	}
	else 
	{	p_oItem->m_bActived = FALSE;
		m_iCountOfSelections--;
		p_oType->m_iSelected--;
	}
}


/*
 =======================================================================================
  Name:			m_fn_bOnChangeActivation
  Description:	Change the state of an object similar with the selection from the vss checkout window under visual c
  Author:		Mihaela Tancu
 =======================================================================================
 */
BOOL CDlgMain::m_fn_bOnChangeActivation(GI_Item *_p_oItem, int iIndexItem )
{
    BOOL bResult = TRUE;
    CListBox *pLB = m_oListObject;
    int iNbSel = pLB -> GetSelCount();
    GI_Item *p_oItem;
	int iIndex = m_oListType->GetCurSel();
	GI_Type *p_oType = (GI_Type *)m_oListType->GetItemData(iIndex);
	int iSize = p_oType->m_oList.GetCount();

    if( iNbSel > 0 )
    {	// if there are selection(s) in the list box
        int *a_iSel = (int*) malloc( iNbSel * sizeof( int ) );
        pLB -> GetSelItems( iNbSel, a_iSel );
        if ( iNbSel == 1 )
        {
            // only one selection
            p_oItem = (GI_Item *) pLB -> GetItemData( a_iSel[0] );
			// change the state of the item in front of which the user clicked
			if (p_oItem==_p_oItem) 
				m_fn_vChange(p_oItem, p_oType, p_oItem->m_bActived );
			else
				m_fn_vChange(_p_oItem, p_oType, _p_oItem->m_bActived );
			pLB->Invalidate(TRUE);
		}
        else // several objects selected
        {
            BOOL bActivate = ! _p_oItem -> m_bActived;
		    GI_Item **p_oItemMul;
			p_oItemMul = (GI_Item **)malloc (iNbSel * sizeof( GI_Item* ) );
			BOOL bIs=FALSE;
            for ( int iIndex = 0 ; iIndex < iNbSel ; iIndex++ )
            {
                p_oItemMul[iIndex] = (GI_Item *) pLB -> GetItemData( a_iSel[iIndex] );
				if (p_oItemMul[iIndex]==_p_oItem) 
					bIs = TRUE;
			}
            for (iIndex = 0 ; iIndex < iNbSel ; iIndex++ )
            {
                if (bIs)	//if the user clicked in front of one of the selected items
				{	if( !bActivate && p_oItemMul[iIndex] -> m_bActived )
					{	p_oItemMul[iIndex]->m_bActived = FALSE;
						m_iCountOfSelections--;
						p_oType->m_iSelected--;
					}
					else if (bActivate && !p_oItemMul[iIndex] -> m_bActived )
					{	p_oItemMul[iIndex]->m_bActived = TRUE;
						m_iCountOfSelections++;
						p_oType->m_iSelected++;
					}
				}
				pLB->Invalidate(TRUE);
            }
			// if the user clicked in front of an item which is not 
			// selected
			if (!bIs) 
				m_fn_vChange(_p_oItem, p_oType, _p_oItem->m_bActived );
        }
        free( a_iSel );
		// after modifying the state of the objects, enable/disable the selection buttons
		m_fn_vEnableButtonAll();
		m_fn_vEnableButtonConvert();
		if (p_oType->m_iSelected==m_oListObject->GetCount())
			GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(FALSE);
		else
			GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(TRUE);
		if (p_oType->m_iSelected>0)
			GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(TRUE);
		else
			GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(FALSE);

		GetDlgItem(IDC_BUTTON_USED)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim) );
		GetDlgItem(IDC_BUTTON_A)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim) );
		GetDlgItem(IDC_BUTTON_Z)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim) );
		GetDlgItem(IDC_BUTTON_CONVANI)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));

		GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
		GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
		GetDlgItem(IDC_BUTTON_C16)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
		GetDlgItem(IDC_BUTTON_AUTO)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));
		GetDlgItem(IDC_BUTTON_C32)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount() && (m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures) );
		GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(((CListBox *)GetDlgItem(IDC_LIST1))->GetCount()&& (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected));

		if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected/* && 
			bConvAnim && GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled() ||
			bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled()*/||
			m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected ||
			m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected)
				GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);
		else
			GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
	}

	m_oListType->Invalidate(TRUE);

    return bResult ;
}


/*
 =======================================================================================
  Name:			m_fn_bWarningUser
  Description:	Inform the user, if the exe file and the directories does not exist or are not set 
  Author:		Mihaela Tancu
 =======================================================================================
 */
BOOL CDlgMain::m_fn_bWarningUser()
{	
	//init the strings for the edit box controls
	char _szMessage[5000];
	BOOL bSet=TRUE, bDisplay=FALSE;
	// tests if the local path for the executable file exists, if not inform user and set it to c:
	// if the executable file does not exist inform the user to choose an executable file
	//tests all the directories if they exist
	sprintf( _szMessage,"Warning(s) : \n\n");
	int iSize= strlen(_szMessage);
/*	if (b3DCard)
		if (bDebug)
			m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDD3D ),"DestBinDD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDD3D);
		else
			m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRD3D ),"DestBinRD3D", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRD3D);
	else
*/		if (bDebug)
			m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinDDFX ),"DestBinDDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinDDFX);
		else
			m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szDestBinRDFX ),"DestBinRDFX", _szMessage, &bDisplay, IDC_EDIT_DESTBIND, g_stInitialData.szDestBinRDFX);

	m_fn_vShowPartialWarning(SetCurrentDirectory( g_stInitialData.szSource ),"Source", _szMessage, &bDisplay, IDC_EDIT_SOURCE, g_stInitialData.szSource);
	if (!m_fn_bExistDirectories(g_stInitialData.szSource))
		sprintf( _szMessage,"\tYou have to select another source directory, because it does not contain any directories !\n\n");

	if (bDisplay) AfxMessageBox( _szMessage, MB_OK | MB_ICONSTOP );
	return bDisplay;
}


/*
 =======================================================================================
  Name:			m_fn_vTestIniDatas
  Description:	Call the function m_fn_bWarningUser
  Author:		Mihaela Tancu
 =======================================================================================
 */
BOOL CDlgMain::m_fn_vTestIniDatas()
{
	return m_fn_bWarningUser();
}


/*
 =======================================================================================
  Name:			m_fn_vUpdateListBox
  Description:	Add the objects from the list with objects to the list box with objects
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vUpdateListBox(CList<GI_Item *,GI_Item *> *_oListObjects,
									 char *szPath, char *szType)
{
	GI_Item *p_oItem;
	int iSize=_oListObjects->GetCount();
	// only if the szPath is the same as szType
	if (!strcmp(szPath, szType))
	{
		for (int i=0; i<iSize; i++)
		{
			// add the objects in the list box with objects
			p_oItem = _oListObjects->RemoveHead();
			int iIndex = m_oListObject -> AddString(p_oItem->m_fn_p_oGetName());
			if( iIndex != LB_ERR )
				m_oListObject -> SetItemData( iIndex, (DWORD) p_oItem );
			_oListObjects->AddTail(p_oItem);
		}
		// implicitly the first object in the second list box is selected!!!
		m_oListObject -> SetSel( 0);
	}
}



/*
 =======================================================================================
  Name:			m_fn_iAddTestDirType
  Description:	Find the number of elements for a type (written, because is possible to have a 
				Banks directory which can contain directories instead of files *.mod and in this way 
				it appeared in the list without any elements. Using this function every type appears 
				in the list box only if it contained the corresponding data!!!
  Author:		Mihaela Tancu
 =======================================================================================
 */
int CDlgMain::m_fn_iAddTestDirType(char* szFiles)
{
	HANDLE hHandle;
	WIN32_FIND_DATA stFindFileData;
	if (!m_fn_bGetFiles(szFiles, &hHandle, &stFindFileData)) return 0;
	int iTypes=0;
	// determine if in the directory is something useful for the selected type
	do if(stFindFileData.dwFileAttributes)
	{
		if(strlen(stFindFileData.cFileName) == 0) break;
		if(strcmp(stFindFileData.cFileName, ".") == 0) continue;
		if(strcmp(stFindFileData.cFileName, "..") == 0) continue;
		iTypes++;
	}
	while(FindNextFile(hHandle, &stFindFileData));
	// return the number of the useful information
	FindClose(hHandle);
	return iTypes;
}


/*
 =======================================================================================
  Name:			m_fn_vSetTypeInList
  Description:	If the number of useful information is not null, add that type in the list box with types
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vSetTypeInList(GI_Type ** _p_oType, char *szType, int iNumber)
{
	if (m_oListType->FindString(-1, szType)==LB_ERR  ) 
	{	
		if (iNumber)
		{	// only if the iNumber is not equal to 0
			int iIndex = m_oListType -> AddString(szType);
			GI_Type *p_oType = new GI_Type(szType, 0, RGB(0, 0, 0));
			if( iIndex != LB_ERR )
			{	// add the new type in the list box with types
				m_oListType -> SetItemData( iIndex, (DWORD) p_oType );
				*_p_oType = p_oType;
			}
		}
	}
}


/*
 =======================================================================================
  Name:			m_fn_vAddType
  Description:	Add a type in the list box with types
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vAddType(GI_Type * p_oType, char *szReturn, char *szType, char *szDir, int *iNumber)
{
	char _szType[MAX_PATH];

	strcpy(_szType, g_stInitialData.szSource);
	strcat (_szType, szDir);
	if (SetCurrentDirectory(_szType))
	{	// if the directory exist

		// if the directory contain datas (directories for anims, families and levels,
		// or files *.mod for banks and classes !!!

		int iTextures=0, iAnims=0, iLevels=0;
		// for Anims
		if (!strcmp(szType, "Animations")) 
		{	iAnims=m_fn_iAddTestDirType("*.*");
			m_fn_vSetTypeInList(&m_p_oTypeAnims, szType, iAnims);
		}
		// for Textures
		if (!strcmp(szType, "Textures")) 
		{	iTextures=m_fn_iAddTestDirType("*.*");
			m_fn_vSetTypeInList(&m_p_oTypeTextures, szType, iTextures);
		}
		// for Levels
		if (!strcmp(szType, "Levels")) 
		{	iLevels=m_fn_iAddTestDirType("*.*");
			m_fn_vSetTypeInList(&m_p_oTypeLevels, szType, iLevels);
		}
		(*iNumber)++;
		// increment the number of types
	}
	strcpy(szReturn, _szType);
}


/*
 =======================================================================================
  Name:			m_fn_vGetAllTypes
  Description:	Get all types for the list box with types.
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vGetAllTypes()
{	
	char szAnims[MAX_PATH];
	char szTextures[MAX_PATH];
	char szLevels[MAX_PATH];
	
	int iNumber=0;
	// set all the lists with objects
	m_fn_vAddType(m_p_oTypeAnims, szAnims, "Animations","\\World\\Levels\\_Common\\Families" , &iNumber);
	m_fn_vAddType(m_p_oTypeTextures, szTextures, "Textures","\\World\\Graphics\\Textures" , &iNumber);
	m_fn_vAddType(m_p_oTypeLevels, szLevels, "Levels","\\World\\Levels" , &iNumber);

	if (!iNumber )
	// in the list boxes will be nothing, so reset its contents
	{	((CListBox *)GetDlgItem(IDC_LIST1))->ResetContent();
		((CListBox *)GetDlgItem(IDC_LIST2))->ResetContent();
	}
	m_fn_vGetSetDatasInList(szAnims, szTextures, szLevels);
}


/*
 =======================================================================================
  Name:			m_fn_vGetSetDatasInList
  Description:	Get the datas from the directories and set the lists with objects
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vGetSetDatasInList( char *szAnims, char *szTextures, char *szLevels)
{
	if (m_oListType->GetCount())
	{	// get all datas for all the existing types in the list box with types
		m_fn_vGetDatas(strcat(szAnims, "\\*.*"));
		m_fn_vGetDatas(strcat(szLevels, "\\*.*"));
		m_fn_vGetDatas(strcat(szTextures, "\\*.*"));
	}
}


/*
 =======================================================================================
  Name:			m_fn_vCreateLists
  Description:	Add an item to the list, if is satisfied the following condition: the string szAnims is found in szPath
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vCreateLists(	CList<GI_Item *,GI_Item *> *_oListObject, char *szPath, char *szType, GI_Item * _p_oItem )
{
		char *Pdest = strstr( szPath, szType );  
		if (!Pdest) return; 

		if ((Pdest!=NULL) && (strstr(Pdest, "_Common")))
			return;

		// add an item to the list, if the szAnims is found in 
		// the szPath string
		if (!_p_oItem) return;
		if ( Pdest != NULL ) 
			_oListObject -> AddTail( _p_oItem);	
}


/*
 =======================================================================================
  Name:			m_fn_vGetDatas
  Description:	Get all datas (objects) for all the types
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vGetDatas(char *szPath)
{
	HANDLE hHandle;
	WIN32_FIND_DATA stFindFileData;
	if (!m_fn_bGetFiles(szPath, &hHandle, &stFindFileData)) return;
	// get the datas for the banks and classes
	// get the datas for the anims, textures and levels
	do if(stFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
	{
		if(strlen(stFindFileData.cFileName) == 0) break;
		if(strcmp(stFindFileData.cFileName, ".") == 0) continue;
		if(strcmp(stFindFileData.cFileName, "..") == 0) continue;
		if (m_oListObject -> FindString(-1,stFindFileData.cFileName)== LB_ERR ) 
		{	// create the lists with objects associated with a type, by looking in the 
			// directory and taking the names of the files it contains.	
			GI_Item * p_oItem = new GI_Item(FALSE, stFindFileData.cFileName);
			if (m_p_oTypeAnims) 
				m_fn_vCreateLists(&m_p_oTypeAnims->m_oList, szPath, "Families", p_oItem);
			if (m_p_oTypeTextures) 
				m_fn_vCreateLists(&m_p_oTypeTextures->m_oList, szPath, "Textures", p_oItem);
			if (m_p_oTypeLevels && strcmp(p_oItem->m_szName, "_Common")&& strcmp(p_oItem->m_szName, "_common")) 
				m_fn_vCreateLists(&m_p_oTypeLevels->m_oList, szPath, "Levels", p_oItem);
			if (!strcmp(p_oItem->m_szName, "_Common") || !strcmp(p_oItem->m_szName, "_common"))
				delete p_oItem;
		}
	}

	while(FindNextFile(hHandle, &stFindFileData));

	FindClose(hHandle);
}



/*
 =======================================================================================
  Name:			m_fn_iGetAllFamilies
  Description:	Get the total number of animations
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_iGetAllFamilies(GI_Item * p_oItem)
{
	int i;
	char szFile[500];

	sprintf(szFile, "%s\\World\\Levels\\%s\\%s.alw", g_stInitialData.szSource, p_oItem->m_szName, p_oItem->m_szName);
	MLT_vLoadALWFileInLib(szFile);
	for(i=0; i<g_lAlwaysIndex; i++)
		if (!p_oItem->m_oListOfFamilies.IsEmpty() && !p_oItem->m_oListOfFamilies.Find(g_hAlwaysInFile[i]->sLinkCharacter))
			p_oItem->m_oListOfFamilies.AddTail(g_hAlwaysInFile[i]->sLinkCharacter);
		else if (p_oItem->m_oListOfFamilies.IsEmpty())
				p_oItem->m_oListOfFamilies.AddTail(g_hAlwaysInFile[i]->sLinkCharacter);

	sprintf(szFile, "%s\\World\\Levels\\%s\\%s.lvl", g_stInitialData.szSource, p_oItem->m_szName, p_oItem->m_szName);
	MLT_vLoadLVLFileInLib(szFile);
	for(i=0; i<g_lInsertCharacterIndex; i++)
		if (!p_oItem->m_oListOfFamilies.IsEmpty() && !p_oItem->m_oListOfFamilies.Find(g_hInsertCharacterInFile[i]->sLinkCharacter))
			p_oItem->m_oListOfFamilies.AddTail(g_hInsertCharacterInFile[i]->sLinkCharacter);
		else if (p_oItem->m_oListOfFamilies.IsEmpty())
				p_oItem->m_oListOfFamilies.AddTail(g_hInsertCharacterInFile[i]->sLinkCharacter);
}


/*
 =======================================================================================
  Name:			m_fn_iGetAllAnimations
  Description:	Get the total number of animations
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_iGetAllAnimations(GI_Item * p_oItem)
{
	int i;
	char szFile[500];

	sprintf(szFile, "%s\\World\\Levels\\_Common\\Families\\%s\\%s.sta", g_stInitialData.szSource, p_oItem->m_szName, p_oItem->m_szName);
	MLT_vLoadSTAFileInLib(szFile);
	for(i=0; i<g_lAnimIndex; i++)
	{
		if ( strcmp(g_hAnimInFile[i]->sAnimation, "") && 
			 !p_oItem->m_oListOfAnimations.IsEmpty() &&
			(!p_oItem->m_oListOfAnimations.Find(g_hAnimInFile[i]->sAnimation)))
			p_oItem->m_oListOfAnimations.AddTail(g_hAnimInFile[i]->sAnimation);
		else
			if (p_oItem->m_oListOfAnimations.IsEmpty())
				p_oItem->m_oListOfAnimations.AddTail(g_hAnimInFile[i]->sAnimation);
	}
}


/*
 =======================================================================================
  Name:			m_fn_iGetAllObjects
  Description:	Get the total number of objects in all lists
  Author:		Mihaela Tancu
 =======================================================================================
 */
int CDlgMain::m_fn_iGetAllObjects()
{
	int iResult=0;
	// for all the types in the list box with types, add the size of the list box at the iResult
	if (m_p_oTypeAnims)
		iResult = m_p_oTypeAnims->m_oList.GetCount();
	if (m_p_oTypeTextures)
		iResult += m_p_oTypeTextures->m_oList.GetCount();
	if (m_p_oTypeLevels)
		iResult += m_p_oTypeLevels->m_oList.GetCount();

	return iResult;
}


/*
 =======================================================================================
  Name:			m_fn_vSelectAllInList
  Description:	Select/deselect the items in the list according with the parameter bSet
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vSelectAllInList(GI_Type * _p_oType, BOOL bSet) 
{
	int iSize, j=0;
	if (_p_oType)
	{	iSize = _p_oType->m_oList.GetCount();
		// for all the items (objects) in the list box, make them active/inactive according to the bSet flag.
		for (int i=0; i< iSize; i++)
		{
			GI_Item *p_oItem = _p_oType->m_oList.RemoveHead();
			if (p_oItem->m_bActived)
				j++;
			p_oItem->m_bActived = bSet;
			_p_oType->m_oList.AddTail(p_oItem);
		}
		// modify the number of selected objects in the list according with the flag bSet
		if (bSet)
			_p_oType->m_iSelected = _p_oType->m_oList.GetCount();
		else
			_p_oType->m_iSelected = 0;

		m_oListObject->Invalidate(TRUE);

		// update the total number of selections (for all the lists with objects)
		if (bSet)
			m_iCountOfSelections += iSize - j;
		else
			m_iCountOfSelections -= j; //Size;

	}
}


/*
 =======================================================================================
  Name:			m_fn_vSelectAll
  Description:	Select/deselect all the objects in all lists according with parameter bSet
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vSelectAll(BOOL bSet) 
{
	// call the function for all the existing types in the list box 
	// with type
	m_fn_vSelectAllInList(m_p_oTypeAnims, bSet); 
	m_fn_vSelectAllInList(m_p_oTypeLevels, bSet); 
	m_fn_vSelectAllInList(m_p_oTypeTextures, bSet); 
}


/*
 =======================================================================================
  Name:			m_fn_vEnableButtons
  Description:	Modify the state of the selection buttons
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vEnableButtons(BOOL bSet) 
{
	// enable/disable selections buttons according to bSet 
	GetDlgItem(IDC_BUTTON_ALLINLIST)->EnableWindow(!bSet);
	GetDlgItem(IDC_BUTTON_ALL)->EnableWindow(!bSet);
	GetDlgItem(IDC_BUTTON_CLEAR)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_CLEARALL)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_CONVANI)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_USED)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_A)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_Z)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_C16)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_C32)->EnableWindow(bSet);
	GetDlgItem(IDC_BUTTON_AUTO)->EnableWindow(bSet);
}


/*
 =======================================================================================
  Name:			m_fn_vSelectAllForType
  Description:	Select all the items (objects) for a selected type and change the color of the type (if it is necessary)
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vSelectAllForType(BOOL bSet) 
{
	char szPath[MAX_PATH];
	// get the selected type
	int iIndex = m_oListType->GetCurSel();
	m_oListType->GetText(iIndex, szPath);
	
	GI_Type *p_oType = (GI_Type *)m_oListType->GetItemData(iIndex);
	// for the selected type, select all its objects
	m_fn_vSelectAllInList(p_oType, bSet); 

	m_oListType->Invalidate(TRUE);
}


/*
 =======================================================================================
  Name:			m_fn_bGetFiles
  Description:	Test if the directory contain any data 
  Author:		Mihaela Tancu
 =======================================================================================
 */
BOOL CDlgMain::m_fn_bGetFiles(char *szFile, HANDLE *hHandle, WIN32_FIND_DATA *stFindFileData)
{
	memset(&(*stFindFileData),0,sizeof(*stFindFileData));
	*hHandle = FindFirstFile(szFile, &(*stFindFileData));
	//return a boolean for telling if some files *.* exists in the directory or not
	if( *hHandle == INVALID_HANDLE_VALUE)
		return FALSE;
	return TRUE;
}


/*
 =======================================================================================
  Name:			m_fn_vEnableButtonAll
  Description:	Change the state of the button All
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vEnableButtonAll() 
{	// enable/disable the All button according to total number of selections
	if (m_iCountOfSelections==m_fn_iGetAllObjects())
		GetDlgItem(IDC_BUTTON_ALL)->EnableWindow(FALSE);
	else
		GetDlgItem(IDC_BUTTON_ALL)->EnableWindow(TRUE);
}


/*
 =======================================================================================
  Name:			m_fn_vEnableButtonConvert
  Description:	Change the state for the Convert and Clear all buttons
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vEnableButtonConvert() 
{	
	// enable/disable the All button according to total number of selections
	if (!m_iCountOfSelections)
	{	GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_CONVANI)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_CLEARALL)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_USED)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_A)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_Z)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_C16)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_C32)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_AUTO)->EnableWindow(FALSE);
	}
	else
	{	// YLG Correction
/*
		if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)
			GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(TRUE);
		else
			GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(FALSE);
		if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && (bConvAnim || bConvTextures))
			GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(TRUE);
		else
			GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(FALSE);

		if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)
		{	GetDlgItem(IDC_BUTTON_CONVANI)->EnableWindow(TRUE);
		}
		else
		{	GetDlgItem(IDC_BUTTON_CONVANI)->EnableWindow(FALSE);
		}
		if ((m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || 
			(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim))
		{	GetDlgItem(IDC_BUTTON_USED)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_A)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_Z)->EnableWindow(TRUE);
		}
		else
		{	GetDlgItem(IDC_BUTTON_USED)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_A)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_Z)->EnableWindow(FALSE);
		}
		if ((m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || 
			(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures))
		{	GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_C16)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_C32)->EnableWindow(TRUE);
		}
		else
		{	GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_C16)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_C32)->EnableWindow(FALSE);
		}

		if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && 
			bConvAnim && GetDlgItem(IDC_BUTTON_CONVANI)->IsWindowEnabled() ||
			bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled()||
			m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected ||
			m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected)
				GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);
		else
			GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_CLEARALL)->EnableWindow(TRUE);
*/
		if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected)
		{	GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_AUTO)->EnableWindow(TRUE);
		}
		else
		{	GetDlgItem(IDC_BUTTON_CONVLEVEL)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_AUTO)->EnableWindow(FALSE);
		}

		if ((m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected) || 
			(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvAnim))
		{	GetDlgItem(IDC_BUTTON_USED)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_A)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_Z)->EnableWindow(TRUE);
		}
		else
		{	GetDlgItem(IDC_BUTTON_USED)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_A)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_Z)->EnableWindow(FALSE);
		}
		if ((m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected) || 
			(m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected && bConvTextures))
		{	GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_C16)->EnableWindow(TRUE);
			GetDlgItem(IDC_BUTTON_C32)->EnableWindow(TRUE);
		}
		else
		{	GetDlgItem(IDC_BUTTON_BMP)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_TGA)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_C16)->EnableWindow(FALSE);
			GetDlgItem(IDC_BUTTON_C32)->EnableWindow(FALSE);
		}

		if (bConvTextures)
			GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(TRUE);
		else
			GetDlgItem(IDC_BUTTON_CONVTEX)->EnableWindow(FALSE);

		if (m_p_oTypeLevels && m_p_oTypeLevels->m_iSelected || 
//			bConvTextures && GetDlgItem(IDC_BUTTON_CONVTEX)->IsWindowEnabled()||
			m_p_oTypeAnims && m_p_oTypeAnims->m_iSelected ||
			m_p_oTypeTextures && m_p_oTypeTextures->m_iSelected)
				GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(TRUE);
		else
			GetDlgItem(IDC_BUTTON_CONVERT)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTON_CLEARALL)->EnableWindow(TRUE);

	}
}



/*
 =======================================================================================
  Name:			m_fn_vBrowseDirectory()
  Description:	browse the directory
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vBrowseDirectory(char* szPath, int *p_iResult, ITEMIDLIST *p_stItemRoot) 
{
	BROWSEINFO stBI;
	ITEMIDLIST	*p_stItem;
	char szDisplayName[ MAX_PATH ];

	// prepare the structure for the browsing
	stBI.hwndOwner = this->GetSafeHwnd();
	stBI.pidlRoot = p_stItemRoot; 
    stBI.pszDisplayName = szDisplayName;
    stBI.lpszTitle = "Choose Target Path";
    stBI.ulFlags = 0;
    stBI.lpfn = NULL;
	*p_iResult = 0;
	if ((p_stItem = SHBrowseForFolder(  &stBI )) != NULL)
	{
		// obtain the new path 
		SHGetPathFromIDList( p_stItem, szPath );
		*p_iResult = 1;
	}
}


/*
 =======================================================================================
  Name:			m_fn_bExistDirectories
  Description:	Test if in a given directory are any directories (used for RawData directory, it have to have sub-directories)
  Author:		Mihaela Tancu
 =======================================================================================
 */
BOOL CDlgMain::m_fn_bExistDirectories(char *_szPath)
{
	int i=0;
	char szPath[MAX_PATH];
	strcpy(szPath, _szPath);
	strcat (szPath, "\\*");
	HANDLE hHandle;
	WIN32_FIND_DATA stFindFileData;
	if (!m_fn_bGetFiles(szPath, &hHandle, &stFindFileData)) return FALSE;

	// if there is a directory different from . and .. than increment 
	// the number of the sub-directories
	do if(stFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
	{
		if(strcmp(stFindFileData.cFileName, ".") == 0) continue;
		if(strcmp(stFindFileData.cFileName, "..") == 0) continue;
		i++;
	}
	while(FindNextFile(hHandle, &stFindFileData));
	FindClose(hHandle);

	return i;
}


/*
 =======================================================================================
  Name:			m_fn_vUpdateAll
  Description:	Update all the datas
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::m_fn_vUpdateAll()
{
	m_fn_vGetAllTypes();
	// select the first type in the list box
	m_oListType->SetCurSel( 0 );

	char szPath[MAX_PATH];
	m_oListType->GetText(0, szPath);
	
	// update the lists with objects (for the existing types).
	if (m_p_oTypeAnims) m_fn_vUpdateListBox(&m_p_oTypeAnims->m_oList, szPath, "Animations");
	if (m_p_oTypeLevels) m_fn_vUpdateListBox(&m_p_oTypeLevels->m_oList, szPath, "Levels");
	if (m_p_oTypeTextures) m_fn_vUpdateListBox(&m_p_oTypeTextures->m_oList, szPath, "Textures");
}


/*
 =======================================================================================
  Name:			OnButtonBrowseExeFile
  Description:	Handle function for message BN_CLICKED on Change button
  Author:		Mihaela Tancu
 =======================================================================================
 */
void CDlgMain::OnButtonBrowseExeFile() 
{
	// TODO: Add your control notification handler code here
	static char BASED_CODE	szFilter[] = "Executable file(*.exe)|*.exe||";
	char					szFileName[ _MAX_PATH ];
	char					*p_szShortName;
	DWORD					dwFlags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_NOCHANGEDIR; 
	CFileDialog				oFD( TRUE, "exe", g_stInitialData.szExeFile, dwFlags, szFilter, this);

	// changing the executable file

	if (SetCurrentDirectory( sInitialDir ))
	{
		if (oFD.DoModal() == IDOK)
		{
			strcpy ( szFileName, (char *) (LPCTSTR) oFD.GetPathName() );

			// obtain the name of the executable without its path
			p_szShortName = strrchr(szFileName,'\\');

			if( p_szShortName )
			{
				*p_szShortName = '\0';
				p_szShortName++;
			}
			else
				p_szShortName = szFileName;

			// after obtaining the local path and the name of the executable file 
			// set this value in the variable for it:g_stInitialData.szLocalPath
			// and set the new name of the executable in edit box control

			if (stricmp(szFileName, sInitialDir))  //_access( p_szShortName, 0) == -1)) //the file does not exist
				strcpy(p_szShortName, g_stInitialData.szExeFile);

			if (bDebug)
				fn_IniData_vSetSPDebug( p_szShortName );
			else
				fn_IniData_vSetSPRelease( p_szShortName );

			strcpy( g_stInitialData.szExeFile, p_szShortName);
			GetDlgItem( IDC_EDIT_EXEC )->SetWindowText( p_szShortName );
		}
	}
}



