reman3/Rayman_X/cpa/Appli/BinaryTool/src/IniData.cpp

745 lines
24 KiB
C++

/*
=======================================================================================
Name: IniData.cpp : implementation file(functions for getting ini data, check this data, write them ...)
Author: Mihaela Tancu
Date: 2 June 1998
=======================================================================================
*/
#include "stdafx.h"
#include "winbase.h"
#include "io.h"
#include "IniData.h"
#include <sys/stat.h>
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "Scr.h"
#include "Print.h"
BOOL bDebug;
BOOL bConvAnim = FALSE;
BOOL bConvTextures = FALSE;
BOOL bConvLevels = TRUE;
BOOL bFix1;
BOOL bStartPrg = TRUE;
//BOOL b3DCard;
//BOOL bUsed = TRUE;
BOOL bDsc = FALSE;
/*
=======================================================================================
* Macro to bound size of a rect
=======================================================================================
*/
#define M_vVerifyRect( _p_stRect, _iMinWidth, _iMinHeight )\
{\
if (_p_stRect->right - _p_stRect->left + 1 < _iMinWidth )\
_p_stRect->right = _p_stRect->left + _iMinWidth ;\
if (_p_stRect->bottom - _p_stRect->top + 1 < _iMinHeight )\
_p_stRect->bottom = _p_stRect->top + _iMinHeight;\
}
/*
=======================================================================================
Globals
=======================================================================================
*/
tdstInitialValue g_stInitialData; // data in ini file
tdstInitialValue g_stDefaultData = // default value for data
{
"d:\\cpa\\appli\\BinaryTool\\GameDataBinDD3D", // default temp path for game data debug(computed)
"none", // default game data path (computed if none)
"d:\\cpa\\appli\\BinaryTool\\GameData", // default temp path for source directory (computed)
"none", // default source directory path (computed if none)
"d:\\cpa\\appli\\BinaryTool\\GameDataBinRD3D", // default temp path for game data release(computed)
"none", // default game data release path (computed if none)
"d:\\cpa\\appli\\BinaryTool\\GameDataBinDDFX", // default temp path for game data release(computed)
"none", // default game data release path (computed if none)
"d:\\cpa\\appli\\BinaryTool\\GameDataBinRDFX", // default temp path for game data release(computed)
"none", // default game data release path (computed if none)
"Debug", // default temp for debug
"none", // default
"D3D", // default temp for debug
"none", // default
"MainWinR.exe", // default temp for exe file
"none", // default
};
char g_szIniFile[MAX_PATH];
tdstWindowsPosSize g_stWinPosSize;
char g_szStartPrgIniFile[MAX_PATH];
/*
=======================================================================================
Name: fn_IniData_vSetDestBinDD3D
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetDestBinDD3D( char *_szPath )
{
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
WritePrivateProfileString( "General directories", "DirNameDestBinDD3D", _szPath, g_szIniFile );
}
/*
=======================================================================================
Name: MLT_vOutput
Description: Write a string in the rich edit
Author: Mihaela Tancu
=======================================================================================
*/
void MLT_vOutput( char cLineType, char *szFormat, ... )
{
va_list argptr;
char szLine[256];
va_start( argptr, szFormat );
vsprintf( szLine, szFormat, argptr );
va_end( argptr );
#ifndef _WINDOWS
cLineType = cLineType; // to avoid warning
fprintf( stderr, szLine );
#else
fn_vAfxOutputStringRes( szLine, cLineType);
#endif
}
/*
=======================================================================================
Name: fn_IniData_vSetSPDebug
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetSPDebug( char *_szPath )
{
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
WritePrivateProfileString( "Glide", "Debug", _szPath, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetSPRelease
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetSPRelease( char *_szPath )
{
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
WritePrivateProfileString( "Glide", "Release", _szPath, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetAskAtEachTime
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetAskAtEachTime( char *_szPath )
{
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
WritePrivateProfileString( "Start", "AskAtEachTime", _szPath, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetAskAtEachTime
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetAskAtEachTime( int iValue )
{
char szValue[2];
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
if (iValue)
strcpy( szValue, "1");
else
strcpy( szValue, "0");
WritePrivateProfileString( "Start", "AskAtEachTime", szValue, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetBinDebugIsOk
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetBinDebugIsOk( int iValue )
{
char szValue[2];
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
if (iValue)
strcpy( szValue, "1");
else
strcpy( szValue, "0");
WritePrivateProfileString( "Start", "BinDebugIsOk", szValue, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetBinReleaseIsOk
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetBinReleaseIsOk( int iValue )
{
char szValue[2];
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
if (iValue)
strcpy( szValue, "1");
else
strcpy( szValue, "0");
WritePrivateProfileString( "Start", "BinReleaseIsOk", szValue, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetUseBinaryData
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetBinUseBinaryData( int iValue )
{
char szValue[2];
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
if (iValue)
strcpy( szValue, "1");
else
strcpy( szValue, "0");
WritePrivateProfileString( "Start", "UseBinaryData", szValue, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetGDDebugBin
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetGDDebugBin( char *_szPath )
{
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
WritePrivateProfileString( "Start", "GDDebugBin", _szPath, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetGDReleaseBin
Description: Change the rights of the file to write
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetGDReleaseBin( char *_szPath )
{
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
WritePrivateProfileString( "Start", "GDReleaseBin", _szPath, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetSource
Description: Change the rights of the file to write
(write the path for RawData Directory in the .ini file)
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetSource( char *_szPath )
{
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
WritePrivateProfileString( "General directories", "DirNameSource", _szPath, g_szIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetDestBinR
Description: Change the rights of the file to write
(write the path for Textures Sub-directory in the .ini file)
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetDestBinRD3D( char *_szPath )
{
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
WritePrivateProfileString( "General directories", "DirNameDestBinRD3D", _szPath, g_szIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetGameData
Description: Change the rights of the file to write
(write the path for Game Data Directory in the .ini file)
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetDestBinDDFX( char *_szPath )
{
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
WritePrivateProfileString( "General directories", "DirNameDestBinDDFX", _szPath, g_szIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetDestBinR
Description: Change the rights of the file to write
(write the path for Textures Sub-directory in the .ini file)
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetDestBinRDFX( char *_szPath )
{
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
WritePrivateProfileString( "General directories", "DirNameDestBinRDFX", _szPath, g_szIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vGetDatasFromStartFile
Description: Get all datas saved in the .ini file
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vGetDatasFromStartFile( BOOL _bFirst )
{
if (_bFirst)
{
// GetCurrentDirectory( MAX_PATH, g_szStartPrgIniFile );
strcpy(g_szStartPrgIniFile, sInitialDir);
if (g_szStartPrgIniFile[strlen(g_szStartPrgIniFile) - 1] != '\\')
strcat( g_szStartPrgIniFile, "\\");
strcat( g_szStartPrgIniFile, C_szStartPrgIniFile );
}
if (bDebug)
GetPrivateProfileString( "Glide", "Debug", g_stDefaultData.szExeFile, g_stInitialData.szExeFile, MAX_PATH, g_szStartPrgIniFile );
else
GetPrivateProfileString( "Glide", "Release", g_stDefaultData.szExeFile, g_stInitialData.szExeFile, MAX_PATH, g_szStartPrgIniFile );
HANDLE hHandle;
WIN32_FIND_DATA stFindFileData;
memset(&stFindFileData,0,sizeof(stFindFileData));
hHandle = FindFirstFile(g_szStartPrgIniFile, &stFindFileData);
//return a boolean for telling if some files *.* exists in the directory or not
if( hHandle == INVALID_HANDLE_VALUE)
{ char _szMessage[50];
sprintf(_szMessage, "The %s file does not exist, so the datas will be taken from the Default structure!", g_szStartPrgIniFile);
bStartPrg=FALSE;
AfxMessageBox( _szMessage, MB_OK | MB_ICONSTOP );
}
FindClose(hHandle);
if (strcmp( g_stInitialData.szExeFile, g_stDefaultData.szExeFile) == 0)
strcpy( g_stInitialData.szExeFile, g_stInitialData.szTempPath8);
}
/*
=======================================================================================
Name: fn_IniData_vGetDatasFromFile
Description: Get all datas saved in the .ini file
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vGetDatasFromFile( BOOL _bFirst )
{
char szCompleteBinarization[10];
if (_bFirst)
{
GetCurrentDirectory( MAX_PATH, g_szIniFile );
if (g_szIniFile[strlen(g_szIniFile) - 1] != '\\')
strcat( g_szIniFile, "\\");
strcat( g_szIniFile, C_szIniFile );
/*
* set all ini data with default data
*/
memcpy( &g_stInitialData, &g_stDefaultData, sizeof( tdstInitialValue ) );
}
/*
* get the informations for name of the executable, local path, game data, rawdata, textures and default directories
*/
GetPrivateProfileString( "General directories", "DirNameDestBinDD3D", g_stDefaultData.szDestBinDD3D, g_stInitialData.szDestBinDD3D, MAX_PATH, g_szIniFile );
GetPrivateProfileString( "General directories", "DirNameSource", g_stDefaultData.szSource, g_stInitialData.szSource, MAX_PATH, g_szIniFile );
GetPrivateProfileString( "General directories", "DirNameDestBinRD3D", g_stDefaultData.szDestBinRD3D, g_stInitialData.szDestBinRD3D, MAX_PATH, g_szIniFile );
GetPrivateProfileString( "General directories", "DirNameDestBinDDFX", g_stDefaultData.szDestBinDDFX, g_stInitialData.szDestBinDDFX, MAX_PATH, g_szIniFile );
GetPrivateProfileString( "General directories", "DirNameDestBinRDFX", g_stDefaultData.szDestBinRDFX, g_stInitialData.szDestBinRDFX, MAX_PATH, g_szIniFile );
GetPrivateProfileString( "Mode", "Mode", g_stDefaultData.szMode, g_stInitialData.szMode, MAX_PATH, g_szIniFile );
GetPrivateProfileString( "Fix", "Fix", g_stDefaultData.szFix, g_stInitialData.szFix, MAX_PATH, g_szIniFile );
GetPrivateProfileString( "Mode", "CompleteBinarization", "1", szCompleteBinarization, 10, g_szIniFile );
// GetPrivateProfileString( "Executable File", "Executable File", g_stDefaultData.szExeFile, g_stInitialData.szExeFile, MAX_PATH, g_szIniFile );
/*
* set executable name, local path...
*/
HANDLE hHandle;
WIN32_FIND_DATA stFindFileData;
memset(&stFindFileData,0,sizeof(stFindFileData));
hHandle = FindFirstFile(g_szIniFile, &stFindFileData);
//return a boolean for telling if some files *.* exists in the directory or not
if( hHandle == INVALID_HANDLE_VALUE)
{ char _szMessage[50];
sprintf(_szMessage, "The %s file does not exist, so the datas will be taken from the Default structure!", g_szIniFile);
AfxMessageBox( _szMessage, MB_OK | MB_ICONSTOP );
}
FindClose(hHandle);
if (strcmp( g_stInitialData.szDestBinDD3D, g_stDefaultData.szDestBinDD3D) == 0)
strcpy( g_stInitialData.szDestBinDD3D, g_stInitialData.szTempPath1);
if (strcmp( g_stInitialData.szSource, g_stDefaultData.szSource) == 0)
strcpy( g_stInitialData.szSource, g_stInitialData.szTempPath2);
if (strcmp( g_stInitialData.szDestBinRD3D, g_stDefaultData.szDestBinRD3D) == 0)
strcpy( g_stInitialData.szDestBinRD3D, g_stInitialData.szTempPath3);
if (strcmp( g_stInitialData.szMode, g_stDefaultData.szMode) == 0)
strcpy( g_stInitialData.szMode, g_stInitialData.szTempPath4);
if (strcmp( g_stInitialData.szDestBinDDFX, g_stDefaultData.szDestBinDDFX) == 0)
strcpy( g_stInitialData.szDestBinDDFX, g_stInitialData.szTempPath5);
if (strcmp( g_stInitialData.szDestBinRDFX, g_stDefaultData.szDestBinRDFX) == 0)
strcpy( g_stInitialData.szDestBinRDFX, g_stInitialData.szTempPath6);
if (strcmp( g_stInitialData.szFix, g_stDefaultData.szFix) == 0)
strcpy( g_stInitialData.szFix, g_stInitialData.szTempPath7);
// if (strcmp( g_stInitialData.szExeFile, g_stDefaultData.szExeFile) == 0)
// strcpy( g_stInitialData.szExeFile, g_stInitialData.szTempPath8);
strcpy(szSource, g_stInitialData.szSource);
strcpy(sSource, g_stInitialData.szSource);
if (!stricmp(g_stInitialData.szMode, "Debug"))
bDebug = TRUE;
else
bDebug = FALSE;
if (!stricmp(g_stInitialData.szFix, "0"))
bFix1 = FALSE;
else
bFix1 = TRUE;
if (!stricmp(szCompleteBinarization, "0"))
bDsc = FALSE;
else
bDsc = TRUE;
/*
* Get the position and the size of the main window
*/
fn_IniData_vGetWindowPosSize();
if (!bAuto)
fn_IniData_vGetDatasFromStartFile(TRUE);
}
/*
=======================================================================================
Name: fn_IniData_vSetMode
Description: Set the entry in the .ini file for Version
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetMode( BOOL bSetIgnore )
{
char szValue[9];
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
if (bSetIgnore)
strcpy( szValue, "Debug");
else
strcpy( szValue, "Release");
WritePrivateProfileString( "Mode", "Mode", szValue, g_szIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetFix
Description: Set the entry in the .ini file for Fix
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetFix( BOOL bFix )
{
char szValue[9];
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
if (bFix)
strcpy( szValue, "1");
else
strcpy( szValue, "0");
WritePrivateProfileString( "Fix", "Fix", szValue, g_szIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetCompleteBinarization
Description: Change the rights of the file to write
Set the entry in the .ini file for Complete binarization (=generation of dsb files)
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetCompleteBinarization( BOOL bDsc )
{
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
if( bDsc )
WritePrivateProfileString( "Mode", "CompleteBinarization", "1", g_szIniFile );
else
WritePrivateProfileString( "Mode", "CompleteBinarization", "0", g_szIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSet3DCard
Description: Set the entry in the .ini file for Version
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSet3DCard( BOOL bSetIgnore )
{
char szValue[9];
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
if (bSetIgnore)
strcpy( szValue, "D3D");
else
strcpy( szValue, "DFX");
WritePrivateProfileString( "3DCard", "3DCard", szValue, g_szIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vSetDscCreated
Description:
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vSetDscCreated(BOOL bDsc)
{
char szValue[2];
if (_access( g_szStartPrgIniFile, 2) == -1)
_chmod ( g_szStartPrgIniFile, _S_IWRITE );
if (bDsc)
strcpy( szValue, "1");
else
strcpy( szValue, "0");
WritePrivateProfileString( "Start", "DscCreated", szValue, g_szStartPrgIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vGetWindowPosSize
Description: Get the position andd the size of the main window from the .ini file
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vGetWindowPosSize( void )
{
char szString[100];
GetPrivateProfileString( "WinPref", "Main", "", szString, 100, g_szIniFile );
fn_IniData_vStudyRect( szString, &g_stWinPosSize.stMainPos );
M_vVerifyRect( (&g_stWinPosSize.stMainPos), C_iMainWindowWidth, C_iMainWindowHeight );
}
/*
=======================================================================================
Name: fn_IniData_vWriteWindowPosSize
Description: Save the new position and size of the main window
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vWriteWindowPosSize( void )
{
char szValue[50];
RECT *p_stRect;
if (_access( g_szIniFile, 2) == -1)
_chmod ( g_szIniFile, _S_IWRITE );
//writing the new values for the position and size of the main window
p_stRect = &g_stWinPosSize.stMainPos;
sprintf( szValue, "(%4d,%4d,%4d,%4d)", p_stRect->left, p_stRect->top, p_stRect->right, p_stRect->bottom );
WritePrivateProfileString( "WinPref", "Main ", szValue, g_szIniFile );
}
/*
=======================================================================================
Name: fn_IniData_vStudyRect
Description: Verify that the values are correct (can be integers)
Author: Mihaela Tancu
=======================================================================================
*/
void fn_IniData_vStudyRect( char *_szString, RECT *_p_stRect )
{
char *p_szValue[5], *p_szEnd;
char cVal;
//study if the values can be integers
memset( _p_stRect, 0, sizeof( RECT ) );
if ( (p_szValue[0] = strchr(_szString, '(' )) == NULL)
return;
if ( (p_szValue[1] = strchr (++p_szValue[0], ',')) == NULL)
return;
if ( (p_szValue[2] = strchr (++p_szValue[1], ',')) == NULL)
return;
if ( (p_szValue[3] = strchr (++p_szValue[2], ',')) == NULL)
return;
p_szValue[3] ++;
p_szValue[4] = _szString + strlen( _szString );
for (cVal = 0; cVal < 4; cVal ++)
{
while ( !isdigit(*p_szValue[cVal]) )
{
if (p_szValue[cVal] == p_szValue[cVal+1])
return;
p_szValue[cVal]++;
}
p_szEnd = p_szValue[cVal] + 1;
while ( isdigit(*p_szEnd))
{
if (p_szEnd == p_szValue[cVal+1])
return;
p_szEnd++;
}
*p_szEnd = 0;
}
//convert to integer the ascii values
_p_stRect->left = atoi( p_szValue[0] );
_p_stRect->top = atoi( p_szValue[1] );
_p_stRect->right = atoi( p_szValue[2] );
_p_stRect->bottom = atoi( p_szValue[3] );
}
/*
=======================================================================================
Name: fn_ComRes_vDeleteLines
Description: Delete all the text in the rich edir box control
Author: Mihaela Tancu
=======================================================================================
*/
void fn_ComRes_vDeleteLines( CRichEditCtrl *_oRichEdit)
{
//delete the content of the rich edit control (result and command)
_oRichEdit->SetWindowText( "" );
}
/*
=======================================================================================
Name: fn_ComRes_vWriteLine
Description: Write a line in a rich edit
Author: Mihaela Tancu
=======================================================================================
*/
void 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 );
_oRichEdit->RedrawWindow(NULL,NULL, RDW_INVALIDATE |RDW_FRAME| RDW_UPDATENOW );
}