reman3/Rayman_X/cpa/Appli/ChkData/Src/Scr_Fct.cpp

1270 lines
41 KiB
C++

/*
=======================================================================================
Name : Scr_Fct.cpp
Author : vincent lhullier Date :08/09/97
Description : script function to parse a file
=======================================================================================
*/
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#include "inidata.h"
#include "SCR_Fct.h"
#include "SpecRef.h"
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
=======================================================================================
Globals
=======================================================================================
*/
SCR_tdst_Link_Table g_stSectionTypeLinkTable; /* link table for section type */
SCR_tdst_Link_Table g_stSectionLinkTable; /* link table for section */
SCR_tdst_Link_Table g_stRefLinkTable; /* link table for references */
SCR_tdst_Link_Table g_stFileLinkTable; /* Link table for files */
/*
=======================================================================================
load/save functions
=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : save all entry to describe all section entry
_p_stFileDes -> file
_p_stSection -> section
----------------------------------------------------------------------------------------
*/
void fn_Scr_vSaveSectionEntry( SCR_tdst_File_Description *_p_stFileDes, SCR_tdst_DyAr_Description *_p_stSectionEntryDyAr )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
tdstEntry *p_stEntry;
unsigned int uiEntry;
char szParamString[21], szText[1024], *p_szText;
char cParam, cParamState;
char *a_szParam[3] = { NULL, szParamString, szText };
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* for each entry
*/
for (uiEntry = 0; uiEntry < _p_stSectionEntryDyAr->uiNumValues; uiEntry ++)
{
SCR_M_DyAr_GetElement( tdstEntry, uiEntry, p_stEntry, (*_p_stSectionEntryDyAr) );
/*
* save entry name
*/
SCR_M_SvL0_SaveEntry( _p_stFileDes, "Entry", SCR_CC_C_Cfg_NoChar );
/*
* compute first parameter : entry name
*/
a_szParam[0] = p_stEntry->szName;
/*
* compute second parameter : perameter states
*/
for (cParam = 0; cParam < p_stEntry->cNumberOfParams; cParam++)
{
cParamState = p_stEntry->a_cIsRef[cParam];
szParamString[cParam] = (cParamState == 0) ? '_' : (cParamState == 1) ? 'R' : 'S';
}
szParamString[cParam] = 0;
/*
* compute third param : entry sample
*/
strcpy( szText, p_stEntry->szSample );
p_szText = szText;
while( *p_szText != 0)
{
if (*p_szText == '"') *p_szText = 39;
p_szText++;
}
/*
* save parameters
*/
SCR_fn_v_SvL0_SaveParameters_AP( _p_stFileDes, SCR_EF_SvL0_Normal, 3, a_szParam );
}
}
/*
----------------------------------------------------------------------------------------
Description : save all section types in a script file
----------------------------------------------------------------------------------------
*/
void fn_Scr_vSaveSectionTypes( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_FILE xFile;
SCR_tdst_File_Description stFileDes;
SCR_tdst_DyAr_Description *p_stDyAr;
SCR_tdst_Link_Value *p_stValue;
unsigned int uiSection;
char szText[256];
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* Open file and init file des
*/
xFile = SCR_M_p_x_File_OpenWrite( g_stIniData.szSectionFile );
SCR_fn_v_File_InitFileDes( &stFileDes, g_stIniData.szSectionFile, xFile );
/*
* save script header
*/
SCR_M_SvL0_SaveScriptFileHeader( &stFileDes );
/*
* save each section
*/
p_stDyAr = &g_stSectionTypeLinkTable.stLinkArray;
for (uiSection = 0; uiSection < p_stDyAr->uiNumValues; uiSection ++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiSection, p_stValue, g_stSectionTypeLinkTable.stLinkArray );
/*
* save section beginning
*/
sprintf( szText, "SectionType:%s", p_stValue->p_szKey );
SCR_M_SvL0_SaveBeginSection( &stFileDes, szText, SCR_CC_C_Cfg_EOL );
/*
* save all entries in section
*/
fn_Scr_vSaveSectionEntry( &stFileDes, (SCR_tdst_DyAr_Description *) p_stValue->ulValue );
/*
* save end of section
*/
SCR_M_SvL0_SaveEndSection( &stFileDes, SCR_CC_C_Cfg_EOL );
}
/*
* Close file
*/
SCR_fn_v_File_CloseFileDes( &stFileDes );
}
/*
----------------------------------------------------------------------------------------
4 Description : Callback to analyse a SectionType section
----------------------------------------------------------------------------------------
*/
SCR_tde_Anl_ReturnValue fn_Scr_eCallbackForSectionType(SCR_tdst_File_Description *_p_stFile, char *_szAction, char *_szParams[], SCR_tde_Anl_Action _eType)
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_Link_Value *p_stLinkValue;
SCR_tdst_DyAr_Description *p_stSectionEntryDyAr;
tdstEntry *p_stEntry;
char cParam;
unsigned int uiPos;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
switch ( _eType )
{
case SCR_EA_Anl_BeginSection:
p_stLinkValue = SCR_fnp_st_Link_CreateOrGetLinkFromKey( &g_stSectionTypeLinkTable, _szAction );
if (p_stLinkValue->eState == SCR_ELS_Link_NotInitialized)
{
p_stSectionEntryDyAr = (SCR_tdst_DyAr_Description *) malloc (sizeof( SCR_tdst_DyAr_Description ) );
fn_v_DyAr_InitArray( p_stSectionEntryDyAr );
p_stLinkValue->eState = SCR_ELS_Link_Initialized;
p_stLinkValue->ulValue = (unsigned long) p_stSectionEntryDyAr;
p_stLinkValue->stInfos.ulLong1 = 0;
p_stLinkValue->stInfos.ulLong2 = 0;
}
else
{
p_stSectionEntryDyAr = (SCR_tdst_DyAr_Description *) p_stLinkValue->ulValue;
}
SCR_M_RdL0_SetContextLong(0,0, p_stSectionEntryDyAr);
break;
case SCR_EA_Anl_Entry:
SCR_M_RdL0_GetContextLong(0,0, SCR_tdst_DyAr_Description *, p_stSectionEntryDyAr);
p_stEntry = fn_Scr_p_stFindEntry( p_stSectionEntryDyAr, _szParams[0] );
if (p_stEntry == NULL)
{
/*
* add entry in entry array of section
*/
SCR_M_DyAr_AddElement( tdstEntry, uiPos, p_stEntry, (*p_stSectionEntryDyAr) );
/*
* set entry data member
*/
p_stEntry->szName = (char *) malloc (strlen( _szParams[0] ) + 1);
strcpy( p_stEntry->szName, _szParams[0] );
p_stEntry->szSample = (char *) malloc (strlen( _szParams[2] ) + 1);
strcpy( p_stEntry->szSample, _szParams[2] );
p_stEntry->cNumberOfParams = strlen( _szParams[1] );
p_stEntry->cNumberOfRefs = 0;
for (cParam = 0; cParam < p_stEntry->cNumberOfParams; cParam++)
{
if ( _szParams[1][ cParam ] != '_' )
{
p_stEntry->cNumberOfRefs++;
p_stEntry->a_cIsRef[ cParam ] = (_szParams[1][cParam] == 'R') ? 1 : 2;
}
else
{
p_stEntry->a_cIsRef[ cParam ] = 0;
}
}
}
break;
}
return R_SCRIPT_NormalReturn;
}
/*
----------------------------------------------------------------------------------------
Description : load all section types from a script file
----------------------------------------------------------------------------------------
*/
void fn_Scr_vLoadSectionTypes( void )
{
/*
* Register callback for "SectionType" script section
*/
SCR_fn_v_RdL0_RegisterCallback( "SectionType", fn_Scr_eCallbackForSectionType, SCR_CRC_c_RdL0_ForSection);
/*
* analyse section type file
*/
SCR_fnp_st_RdL0_AnalyseSection( g_stIniData.szSectionFile, SCR_CDF_uw_Anl_Normal );
/*
* delete callback
*/
SCR_fn_v_RdL0_DeleteRegisterCallback( "SectionType", SCR_CRC_c_RdL0_ForSection, SCR_CDR_c_RdL0_Match );
}
/*
=======================================================================================
data functions
=======================================================================================
*/
/*
----------------------------------------------------------------------------------------
Description : load an find an entry in a section type
_p_stSection -> pointer on a section type structure
_szEntryName -> name of entry to find
Returns (tdstEntry) pointer on entry if found, otherwise NULL
----------------------------------------------------------------------------------------
*/
tdstEntry *fn_Scr_p_stFindEntry( SCR_tdst_DyAr_Description *_p_stSectionEntryDyAr, char *_szEntryName )
{
tdstEntry *p_stEntry;
unsigned int uiPos;
SCR_M_DyAr_SearchElement( tdstEntry, uiPos, p_stEntry, (*_p_stSectionEntryDyAr), strcmp( _szEntryName, p_stEntry->szName) == 0 );
return p_stEntry;
}
/*
----------------------------------------------------------------------------------------
Description : Add an entry to a section
_p_stSection -> section
_p_stContext -> context that describe entry
----------------------------------------------------------------------------------------
*/
void fn_Scr_vAddEntryToSection( SCR_tdst_DyAr_Description *_p_stSectionEntryDyAr, SCR_tdst_Cxt_Description *_p_stContext )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
tdstEntry *p_stEntry;
char szSample[512], *p_szSample;
char *szParam;
size_t xLenght;
unsigned int uiPos;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
p_stEntry = fn_Scr_p_stFindEntry( _p_stSectionEntryDyAr, _p_stContext->stBuffers.a_szBufferNameExt );
if (p_stEntry == NULL)
{
/*
* add and init entry
*/
SCR_M_DyAr_AddElement( tdstEntry, uiPos, p_stEntry, (*_p_stSectionEntryDyAr) );
memset( p_stEntry, 0, sizeof( tdstEntry) );
/*
* allocate and set name
*/
p_stEntry->szName = (char *) malloc ( strlen(_p_stContext->stBuffers.a_szBufferNameExt) + 1 );
strcpy( p_stEntry->szName, _p_stContext->stBuffers.a_szBufferNameExt );
/*
* build sample and count parameters
*/
p_szSample = szSample + sprintf( szSample, "%s", p_stEntry->szName );
if ( *_p_stContext->stBuffers.a_szBufferFormat != 0)
p_szSample += sprintf( p_szSample, "%c%s%c", SCR_CC_c_Cfg_FormatBegMark, _p_stContext->stBuffers.a_szBufferFormat, SCR_CC_c_Cfg_FormatEndMark );
if ( *(szParam = _p_stContext->stBuffers.a_szBufferParams) != 0)
{
*p_szSample++ = SCR_CC_c_Cfg_ParamBegMark;
*p_szSample++ = ' ';
while ( 1 )
{
xLenght = strlen( szParam );
/* detect a reference ? */
if ( strcspn( szParam, "^\\") < xLenght)
{
p_stEntry->cNumberOfRefs++;
p_stEntry->a_cIsRef[ p_stEntry->cNumberOfParams ] = 1;
}
p_stEntry->cNumberOfParams++;
memcpy( p_szSample, szParam, xLenght );
p_szSample += xLenght;
szParam += xLenght + 1;
if (*szParam == 0)
break;
*p_szSample++ = SCR_CC_c_Cfg_ParamSeparator;
*p_szSample++ = ' ';
}
*p_szSample++ = SCR_CC_c_Cfg_ParamEndMark;
*p_szSample = 0;
}
p_stEntry->szSample = (char *) malloc ( p_szSample - szSample + 1 );
memcpy( p_stEntry->szSample, szSample, p_szSample - szSample + 1 );
}
}
/*
----------------------------------------------------------------------------------------
Description : set to 0 all used value
----------------------------------------------------------------------------------------
*/
void fn_Scr_vResetUsedCounters( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_DyAr_Description *p_stDyAr;
SCR_tdst_Link_Value *p_stValue;
unsigned int uiSection;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
p_stDyAr = &g_stSectionTypeLinkTable.stLinkArray;
for (uiSection = 0; uiSection < p_stDyAr->uiNumValues; uiSection ++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiSection, p_stValue, g_stSectionTypeLinkTable.stLinkArray );
SCR_M_v_Link_SetAdditionalLong( p_stValue, 1, 0 );
}
}
/*
----------------------------------------------------------------------------------------
Description : compute all section has ref flag. this flag is set if a section
can have at least one entry with one ref.
----------------------------------------------------------------------------------------
*/
void fn_Scr_vComputeSectionTypeHasRef( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_DyAr_Description *p_stDyAr;
SCR_tdst_Link_Value *p_stValue;
SCR_tdst_DyAr_Description *p_stSectionEntryDyAr;
tdstEntry *p_stEntry;
unsigned int uiSection;
unsigned int uiPos;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
p_stDyAr = &g_stSectionTypeLinkTable.stLinkArray;
for (uiSection = 0; uiSection < p_stDyAr->uiNumValues; uiSection ++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiSection, p_stValue, g_stSectionTypeLinkTable.stLinkArray );
p_stSectionEntryDyAr = (SCR_tdst_DyAr_Description *) SCR_M_ul_Link_GetValue( p_stValue );
SCR_M_DyAr_SearchElement( tdstEntry, uiPos, p_stEntry, (*p_stSectionEntryDyAr), p_stEntry->cNumberOfRefs != 0 );
SCR_M_v_Link_SetAdditionalLong( p_stValue, 2, (p_stEntry == NULL) ? 0 : 1 );
}
}
/*
----------------------------------------------------------------------------------------
Description : free section type list
----------------------------------------------------------------------------------------
*/
void fn_Scr_vFreeSectionTypeList( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_Link_Value *p_stValue;
unsigned int uiSection;
SCR_tdst_DyAr_Description *p_stSectionEntryDyAr;
tdstEntry *p_stEntry;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
for (uiSection = 0; uiSection < g_stSectionTypeLinkTable.stLinkArray.uiNumValues; uiSection ++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiSection, p_stValue, g_stSectionTypeLinkTable.stLinkArray );
p_stSectionEntryDyAr = (SCR_tdst_DyAr_Description *) p_stValue->ulValue;
SCR_M_DyAr_DeleteAllElements( tdstEntry, p_stSectionEntryDyAr, p_stEntry = (tdstEntry *) _p_stElement_->d_vElement; free( p_stEntry->szName ); free( p_stEntry->szSample); );
free ( p_stSectionEntryDyAr );
}
}
/*
----------------------------------------------------------------------------------------
Description : free section type list
----------------------------------------------------------------------------------------
*/
void fn_Scr_vFreeSectionList( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_DyAr_Description *p_stRefDyAr;
SCR_tdst_Link_Value *p_stValue;
unsigned int uiSection;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
for (uiSection = 0; uiSection < g_stSectionLinkTable.stLinkArray.uiNumValues; uiSection ++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiSection, p_stValue, g_stSectionLinkTable.stLinkArray );
if ( p_stValue->ulValue )
{
p_stRefDyAr = (SCR_tdst_DyAr_Description *) p_stValue->ulValue;
SCR_M_DyAr_DeleteAllElements( tdstReference, p_stRefDyAr, ; );
free ( p_stRefDyAr );
}
}
}
/*
----------------------------------------------------------------------------------------
Description : free file list
----------------------------------------------------------------------------------------
*/
void fn_Scr_vFreeLTFile( void )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_Link_Value *p_stLVFile;
unsigned int uiFile;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
for (uiFile = 0; uiFile < g_stFileLinkTable.stLinkArray.uiNumValues; uiFile++)
{
SCR_M_DyAr_GetElement( SCR_tdst_Link_Value, uiFile, p_stLVFile, g_stFileLinkTable.stLinkArray );
if (p_stLVFile->ulValue)
{
SCR_fn_v_Link_CloseTable( (SCR_tdst_Link_Table *) p_stLVFile->ulValue );
}
}
}
/*
=======================================================================================
Parsing functions
=======================================================================================
*/
/*
*-------------------------------------------------------------------------------------------------
* To parse a line to current context.
* _p_stContext : Current context.
*-------------------------------------------------------------------------------------------------
*/
int fn_Scr_iLineToContext(SCR_tdst_Cxt_Description *_p_stContext)
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
int iRead;
unsigned int uiNbRead;
int iCpt;
char a_szTempBuffer[SCR_CV_ui_Cfg_MaxLenLine + 1];
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//SCR_M_Dbg_AssertStruct_P(SCR_tdst_Cxt_Description, _p_stContext);
//SCR_M_Dbg_AssertStruct_P(SCR_tdst_File_Open, _p_stContext->p_stOpenFile);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* Parse one line of file.
*/
_p_stContext->stBuffers.a_szBufferCompleteName[0] = 0;
_p_stContext->stPosition.uiLineInFile++;
/*
* If current parsing directive is ignore, we swap the line like a comment
* (except if it is the $EndComments directive).
*/
if(_p_stContext->p_stOpenFile->stParsingInfos.uwDynamicFlags & SCR_CDF_uw_Anl_Comments)
{
/*
* Get the current line.
*/
iCpt = 0;
SCR_g_ui_Pars_NbRead = 0;
SCR_M_Pars_GetNextNonSpaceChar(&_p_stContext->p_stOpenFile->stFile, iRead);
while((iRead != '\n') && (iRead != EOF))
{
if(!SCR_M_Pars_IsSpace(iRead))
a_szTempBuffer[iCpt++] = (char) iRead;
SCR_M_Pars_ReadChar(&_p_stContext->p_stOpenFile->stFile, iRead);
}
a_szTempBuffer[iCpt] = '\0';
uiNbRead = SCR_g_ui_Pars_NbRead;
/*
* Test for end of comment directive.
*/
if
(
(*a_szTempBuffer != SCR_CC_c_Cfg_DirectiveMark)
|| (strcmpi(a_szTempBuffer + 1, SCR_CD_sz_Cfg_EndComments))
)
{
_p_stContext->eParseType = SCR_EPT_Cxt_None;
_p_stContext->stBuffers.a_szBufferName[0] = '\0';
}
else
_p_stContext->p_stOpenFile->stParsingInfos.uwDynamicFlags &= ~SCR_CDF_uw_Anl_Comments;
}
else
{
iRead = (char) fn_i_Pars_Line
(
&_p_stContext->p_stOpenFile->stFile,
_p_stContext->stBuffers.a_szBufferName,
_p_stContext->stBuffers.a_szBufferNameExt,
_p_stContext->stBuffers.a_szBufferFormat,
_p_stContext->stBuffers.a_szBufferParams,
&_p_stContext->eParseType,
&uiNbRead
);
}
/*
* Update seek after reading.
*/
_p_stContext->stPosition.lAfterSeekInFile += uiNbRead;
/* Return last character read */
return iRead;
}
/*
*-------------------------------------------------------------------------------------------------
* parse a file to get the section type
* _p_szFileName : file name
*-------------------------------------------------------------------------------------------------
*/
void fn_Scr_vParseFileToBuildListOfSectionTypes(char *_p_szFileName)
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_Cxt_Description *p_stContext;
int iRead;
int cIndent = -1;
SCR_tdst_DyAr_Description *a_p_stSectionEntryDyAr[ 16 ];
SCR_tdst_Link_Value *p_stLinkValue;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_M_Dbg_Assert_D(_p_szFileName != NULL);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* One more context.
*/
p_stContext = fnp_st_Cxt_Add();
/*
* Open the file.
*/
p_stContext->p_stOpenFile = fnp_st_File_OpenFile(_p_szFileName);
/*
* Place file to its SCR_BEGINing.
* Parse to the end.
*/
fn_v_Anl_ContextToFile(p_stContext);
do
{
iRead = fn_Scr_iLineToContext( p_stContext );
if ( p_stContext->eParseType == SCR_EPT_Cxt_BeginSection )
{
cIndent++;
p_stLinkValue = SCR_fnp_st_Link_CreateOrGetLinkFromKey( &g_stSectionTypeLinkTable, p_stContext->stBuffers.a_szBufferName );
if (p_stLinkValue->eState == SCR_ELS_Link_NotInitialized)
{
a_p_stSectionEntryDyAr[ cIndent ] = ( SCR_tdst_DyAr_Description *) malloc (sizeof( SCR_tdst_DyAr_Description ) );
fn_v_DyAr_InitArray( a_p_stSectionEntryDyAr[ cIndent ] );
p_stLinkValue->eState = SCR_ELS_Link_Initialized;
p_stLinkValue->ulValue = (unsigned long) a_p_stSectionEntryDyAr[ cIndent ];
p_stLinkValue->stInfos.ulLong1 = 1;
p_stLinkValue->stInfos.ulLong2 = 0;
}
else
{
a_p_stSectionEntryDyAr[ cIndent ] = ( SCR_tdst_DyAr_Description *) p_stLinkValue->ulValue;
p_stLinkValue->stInfos.ulLong1++;
}
}
else if ( p_stContext->eParseType == SCR_EPT_Cxt_EndSection )
{
cIndent--;
}
else if ( p_stContext->eParseType == SCR_EPT_Cxt_Entry )
{
if (cIndent >= 0)
fn_Scr_vAddEntryToSection( a_p_stSectionEntryDyAr[ cIndent ], p_stContext );
}
} while(iRead != EOF);
SCR_fn_v_RdL0_DeleteOpenFile( _p_szFileName, SCR_CDR_c_RdL0_Match );
/*
* Delete context. It's finish...
*/
fn_v_Cxt_DeleteLast();
}
/*
*-------------------------------------------------------------------------------------------------
* parse a file to get all sections and references
* _p_szFileName : file name
*-------------------------------------------------------------------------------------------------
*/
void fn_Scr_vParseFileToBuildListOfSectionsAndRefs(char *_p_szFileName)
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_Cxt_Description *p_stContext;
int iRead;
int cIndent = -1;
char *a_szSectionName[ 16 ];
char szSectionName[ SCR_CV_ui_Cfg_MaxLenName ];
SCR_tdst_Link_Value *a_p_stSection[ 16 ];
SCR_tdst_Link_Value *p_stSectionType;
SCR_tdst_Link_Value *p_stRefValue;
SCR_tdst_DyAr_Description *p_stSectionEntryDyAr;
tdstEntry *p_stEntry;
SCR_tdst_DyAr_Description *p_stDyAr;
unsigned int uiPos;
tdstReference *p_stRef;
char cRef, cIndex;
char *szParam;
char *szRefFileName;
char szRefName[ SCR_CV_ui_Cfg_MaxLenName ], *p_szRefName, *p_szEndRefFileName;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// SCR_M_Dbg_Assert_D(_p_szFileName != NULL);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* One more context.
*/
p_stContext = fnp_st_Cxt_Add();
/*
* Open the file.
*/
p_stContext->p_stOpenFile = fnp_st_File_OpenFile(_p_szFileName);
cIndent = -1;
szRefFileName = _p_szFileName + g_stIniData.lRootForSectionLength;
p_szEndRefFileName = szRefFileName + strlen( szRefFileName );
strcpy( szSectionName, szRefFileName );
a_szSectionName[ 0 ] = szSectionName + ( p_szEndRefFileName - szRefFileName );
/*
* Place file to its SCR_BEGINing.
* Parse to the end.
*/
fn_v_Anl_ContextToFile(p_stContext);
do
{
iRead = fn_Scr_iLineToContext( p_stContext );
if ( p_stContext->eParseType == SCR_EPT_Cxt_BeginSection )
{
cIndent++;
/*
* get section type
*/
p_stSectionType = SCR_fnp_st_Link_SearchKey( &g_stSectionTypeLinkTable, p_stContext->stBuffers.a_szBufferName );
/*
* build full section name
*/
*a_szSectionName[ cIndent ] = SCR_CC_c_Cfg_NameSeparator;
strcpy( a_szSectionName[ cIndent ] + 1, p_stContext->stBuffers.a_szBufferName );
a_szSectionName[ cIndent + 1 ] = a_szSectionName[ cIndent ] + strlen( a_szSectionName[ cIndent ] );
if ( *p_stContext->stBuffers.a_szBufferNameExt)
{
*a_szSectionName[cIndent + 1]++ = SCR_CC_c_Cfg_SectionIdMark;
strcpy (a_szSectionName[cIndent + 1], p_stContext->stBuffers.a_szBufferNameExt );
a_szSectionName[ cIndent + 1 ] += strlen( a_szSectionName[ cIndent + 1 ] );
}
/*
* get or create section link value
*/
a_p_stSection[ cIndent ] = SCR_fnp_st_Link_CreateOrGetLinkFromKey( &g_stSectionLinkTable, szSectionName );
if (a_p_stSection[ cIndent ]->eState == SCR_ELS_Link_NotInitialized)
{
a_p_stSection[ cIndent ]->eState = SCR_ELS_Link_Initialized;
a_p_stSection[ cIndent ]->stInfos.ulLong1 = p_stContext->stPosition.uiLineInFile;
a_p_stSection[ cIndent ]->stInfos.ulLong2 = 0;
if (p_stSectionType->stInfos.ulLong2)
{
a_p_stSection[ cIndent ]->stInfos.ulLong3 = (unsigned long) p_stSectionType;
p_stDyAr = (SCR_tdst_DyAr_Description *) malloc( sizeof(SCR_tdst_DyAr_Description) );
fn_v_DyAr_InitArray( p_stDyAr );
a_p_stSection[ cIndent ]->ulValue = (unsigned long) p_stDyAr;
}
else
a_p_stSection[ cIndent ]->ulValue = 0;
}
}
else if ( p_stContext->eParseType == SCR_EPT_Cxt_EndSection )
{
*a_szSectionName[ cIndent ] = 0;
cIndent--;
}
else if ( p_stContext->eParseType == SCR_EPT_Cxt_Entry )
{
if ( (cIndent >= 0) && (a_p_stSection[ cIndent ]->ulValue ) )
{
p_stSectionType = (SCR_tdst_Link_Value *) a_p_stSection[ cIndent ]->stInfos.ulLong3;
p_stSectionEntryDyAr = (SCR_tdst_DyAr_Description *) p_stSectionType->ulValue;
if ( (p_stEntry = fn_Scr_p_stFindEntry( p_stSectionEntryDyAr, p_stContext->stBuffers.a_szBufferNameExt )) != NULL)
{
p_stDyAr = (SCR_tdst_DyAr_Description *) a_p_stSection[ cIndent ]->ulValue;
cRef = p_stEntry->cNumberOfRefs;
cIndex = 0;
szParam = p_stContext->stBuffers.a_szBufferParams;
while (cRef)
{
if ( p_stEntry->a_cIsRef[ cIndex ] )
{
cRef--;
if ( p_stEntry->a_cIsRef[cIndex] == 1)
{
if (*szParam == '*')
{
p_szRefName = szRefFileName;
strcpy( p_szEndRefFileName, szParam + 1);
}
else
{
p_szRefName = szParam;
}
}
else
{
p_szRefName = strcpy( szRefName, szParam );
fn_SpRef_vTransformSpecialRef( p_stSectionType->p_szKey, p_stEntry->szName, cIndex, szRefName );
}
p_stRefValue = SCR_fnp_st_Link_CreateOrGetLinkFromKey( &g_stRefLinkTable, p_szRefName );
if (p_stRefValue->eState == SCR_ELS_Link_NotInitialized)
{
p_stRefValue->eState = SCR_ELS_Link_Initialized;
p_stRefValue->stInfos.ulLong1 = 1;
}
else
{
p_stRefValue->stInfos.ulLong1++;
}
SCR_M_DyAr_AddElement( tdstReference, uiPos, p_stRef, (*p_stDyAr) );
p_stRef->uiLine = p_stContext->stPosition.uiLineInFile;
p_stRef->p_stRef = p_stRefValue;
}
cIndex ++;
szParam += strlen( szParam ) + 1;
}
}
}
}
} while(iRead != EOF);
SCR_fn_v_RdL0_DeleteOpenFile( _p_szFileName, SCR_CDR_c_RdL0_Match );
/*
* Delete context. It's finish...
*/
fn_v_Cxt_DeleteLast();
}
/*
*-------------------------------------------------------------------------------------------------
* parse a file to get all sections and references
* _p_szFileName : file name
*-------------------------------------------------------------------------------------------------
*/
void fn_Scr_vNewParseFileToBuildListOfSectionsAndRefs( char *_szFileName, SCR_tdst_Link_Value *_p_stLVFile )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_Link_Table *p_stLTSection;
SCR_tdst_Cxt_Description *p_stContext;
int iRead;
int cIndent = -1;
char *a_szSectionName[ 16 ];
char szSectionName[ SCR_CV_ui_Cfg_MaxLenName ];
SCR_tdst_Link_Value *a_p_stSection[ 16 ];
SCR_tdst_Link_Value *p_stSectionType;
SCR_tdst_Link_Value *p_stRefValue;
SCR_tdst_DyAr_Description *p_stSectionEntryDyAr;
tdstEntry *p_stEntry;
SCR_tdst_DyAr_Description *p_stDyAr;
unsigned int uiPos;
tdstReference *p_stRef;
char cRef, cIndex;
char *szParam;
char *szRefFileName;
char szRefName[ SCR_CV_ui_Cfg_MaxLenName ], *p_szRefName, *p_szEndRefFileName;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// SCR_M_Dbg_Assert_D(_p_szFileName != NULL);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* One more context.
*/
p_stContext = fnp_st_Cxt_Add();
/*
* Open the file.
*/
p_stContext->p_stOpenFile = fnp_st_File_OpenFile(_szFileName);
cIndent = -1;
szRefFileName = _szFileName + g_stIniData.lRootForSectionLength;
p_szEndRefFileName = szRefFileName + strlen( szRefFileName );
//strcpy( szSectionName, szRefFileName );
a_szSectionName[ 0 ] = szSectionName;// + ( p_szEndRefFileName - szRefFileName );
p_stLTSection = (SCR_tdst_Link_Table *) _p_stLVFile->ulValue;
/*
* Place file to its SCR_BEGINing.
* Parse to the end.
*/
fn_v_Anl_ContextToFile(p_stContext);
do
{
iRead = fn_Scr_iLineToContext( p_stContext );
if ( p_stContext->eParseType == SCR_EPT_Cxt_BeginSection )
{
if (p_stLTSection == NULL)
{
p_stLTSection = (SCR_tdst_Link_Table *) malloc (sizeof( SCR_tdst_Link_Table) );
SCR_fn_v_Link_InitTable( p_stLTSection );
_p_stLVFile->ulValue = (unsigned long) p_stLTSection;
}
cIndent++;
/*
* get section type
*/
p_stSectionType = SCR_fnp_st_Link_SearchKey( &g_stSectionTypeLinkTable, p_stContext->stBuffers.a_szBufferName );
/*
* build full section name
*/
if (cIndent)
{
*a_szSectionName[ cIndent ] = SCR_CC_c_Cfg_NameSeparator;
strcpy( a_szSectionName[ cIndent ] + 1, p_stContext->stBuffers.a_szBufferName );
}
else
{
strcpy( a_szSectionName[ 0 ], p_stContext->stBuffers.a_szBufferName );
}
a_szSectionName[ cIndent + 1 ] = a_szSectionName[ cIndent ] + strlen( a_szSectionName[ cIndent ] );
if ( *p_stContext->stBuffers.a_szBufferNameExt)
{
*a_szSectionName[cIndent + 1]++ = SCR_CC_c_Cfg_SectionIdMark;
strcpy (a_szSectionName[cIndent + 1], p_stContext->stBuffers.a_szBufferNameExt );
a_szSectionName[ cIndent + 1 ] += strlen( a_szSectionName[ cIndent + 1 ] );
}
/*
* get or create section link value
*/
//a_p_stSection[ cIndent ] = SCR_fnp_st_Link_CreateOrGetLinkFromKey( &g_stSectionLinkTable, szSectionName );
a_p_stSection[ cIndent ] = SCR_fnp_st_Link_CreateOrGetLinkFromKey( p_stLTSection, szSectionName );
if (a_p_stSection[ cIndent ]->eState == SCR_ELS_Link_NotInitialized)
{
a_p_stSection[ cIndent ]->eState = SCR_ELS_Link_Initialized;
a_p_stSection[ cIndent ]->stInfos.ulLong1 = p_stContext->stPosition.uiLineInFile;
a_p_stSection[ cIndent ]->stInfos.ulLong2 = 0;
if (p_stSectionType->stInfos.ulLong2)
{
a_p_stSection[ cIndent ]->stInfos.ulLong3 = (unsigned long) p_stSectionType;
p_stDyAr = (SCR_tdst_DyAr_Description *) malloc( sizeof(SCR_tdst_DyAr_Description) );
fn_v_DyAr_InitArray( p_stDyAr );
a_p_stSection[ cIndent ]->ulValue = (unsigned long) p_stDyAr;
}
else
a_p_stSection[ cIndent ]->ulValue = 0;
}
}
else if ( p_stContext->eParseType == SCR_EPT_Cxt_EndSection )
{
*a_szSectionName[ cIndent ] = 0;
cIndent--;
}
else if ( p_stContext->eParseType == SCR_EPT_Cxt_Entry )
{
if ( (cIndent >=0) && (a_p_stSection[ cIndent ]->ulValue ) )
{
p_stSectionType = (SCR_tdst_Link_Value *) a_p_stSection[ cIndent ]->stInfos.ulLong3;
p_stSectionEntryDyAr = (SCR_tdst_DyAr_Description *) p_stSectionType->ulValue;
if ( (p_stEntry = fn_Scr_p_stFindEntry( p_stSectionEntryDyAr, p_stContext->stBuffers.a_szBufferNameExt )) != NULL)
{
p_stDyAr = (SCR_tdst_DyAr_Description *) a_p_stSection[ cIndent ]->ulValue;
cRef = p_stEntry->cNumberOfRefs;
cIndex = 0;
szParam = p_stContext->stBuffers.a_szBufferParams;
while (cRef)
{
if ( p_stEntry->a_cIsRef[ cIndex ] )
{
cRef--;
if ( p_stEntry->a_cIsRef[cIndex] == 1)
{
if (*szParam == '*')
{
p_szRefName = szRefFileName;
strcpy( p_szEndRefFileName, szParam + 1);
}
else
{
p_szRefName = szParam;
}
}
else
{
p_szRefName = strcpy( szRefName, szParam );
fn_SpRef_vTransformSpecialRef( p_stSectionType->p_szKey, p_stEntry->szName, cIndex, szRefName );
}
p_stRefValue = SCR_fnp_st_Link_CreateOrGetLinkFromKey( &g_stRefLinkTable, p_szRefName );
if (p_stRefValue->eState == SCR_ELS_Link_NotInitialized)
{
p_stRefValue->eState = SCR_ELS_Link_Initialized;
p_stRefValue->stInfos.ulLong1 = 1;
}
else
{
p_stRefValue->stInfos.ulLong1++;
}
SCR_M_DyAr_AddElement( tdstReference, uiPos, p_stRef, (*p_stDyAr) );
p_stRef->uiLine = p_stContext->stPosition.uiLineInFile;
p_stRef->p_stRef = p_stRefValue;
}
cIndex ++;
szParam += strlen( szParam ) + 1;
}
}
}
}
} while(iRead != EOF);
SCR_fn_v_RdL0_DeleteOpenFile( _szFileName, SCR_CDR_c_RdL0_Match );
/*
* Delete context. It's finish...
*/
fn_v_Cxt_DeleteLast();
}
/*
*-------------------------------------------------------------------------------------------------
* init a stat structure
* _p_szFileName : file name
*-------------------------------------------------------------------------------------------------
*/
void fn_Scr_vInitStat( tdstScriptStat *_stStat )
{
memset( _stStat, 0, sizeof( tdstScriptStat ) );
_stStat->ulSectionNameMinLength = 0xFFFFFF;
_stStat->ulEntryMinLength = 0xFFFFFF;;
}
/*
*-------------------------------------------------------------------------------------------------
* parse a file to get stats on scripts
* _p_szFileName : file name
*-------------------------------------------------------------------------------------------------
*/
void fn_Scr_vParseFileForStat(char *_p_szFileName, tdstScriptStat *_stStat )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_Cxt_Description *p_stContext;
unsigned long ulLength;
int iRead;
char *szParam;
char cParam;
unsigned long ulNumberOfSections = 0;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_M_Dbg_Assert_D(_p_szFileName != NULL);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* One more context.
*/
p_stContext = fnp_st_Cxt_Add();
/*
* Open the file.
*/
p_stContext->p_stOpenFile = fnp_st_File_OpenFile(_p_szFileName);
_stStat->ulNbFiles++;
/*
* Place file to its SCR_BEGINing.
* Parse to the end.
*/
fn_v_Anl_ContextToFile(p_stContext);
do
{
iRead = fn_Scr_iLineToContext( p_stContext );
if ( p_stContext->eParseType == SCR_EPT_Cxt_BeginSection )
{
_stStat->ulNbBeginSectionLines++;
ulNumberOfSections++;
ulLength = strlen( p_stContext->stBuffers.a_szBufferName );
if (ulLength > _stStat->ulSectionNameMaxLength)
{
_stStat->ulSectionNameMaxLength = ulLength;
strcpy( _stStat->szSectionNameMax, p_stContext->stBuffers.a_szBufferName );
}
if (ulLength < _stStat->ulSectionNameMinLength)
{
_stStat->ulSectionNameMinLength = ulLength;
strcpy( _stStat->szSectionNameMin, p_stContext->stBuffers.a_szBufferName );
}
ulLength = strlen( p_stContext->stBuffers.a_szBufferNameExt );
_stStat->fSectionExtAverageLength = (_stStat->fSectionExtAverageLength * (_stStat->ulNbBeginSectionLines - 1) + ulLength) / _stStat->ulNbBeginSectionLines;
if (ulLength > _stStat->ulSectionExtMaxLength)
{
_stStat->ulSectionExtMaxLength = ulLength;
strcpy( _stStat->szSectionExtMax, p_stContext->stBuffers.a_szBufferNameExt );
}
ulLength = strlen( p_stContext->stBuffers.a_szBufferFormat );
if (ulLength > _stStat->ulFormatMaxLength)
_stStat->ulFormatMaxLength = ulLength;
szParam = p_stContext->stBuffers.a_szBufferParams;
cParam = 0;
ulLength = 0;
while (szParam[ulLength] != 0)
{
cParam++;
ulLength += strlen( &szParam[ulLength] ) + 1;
}
ulLength ++;
if (cParam > _stStat->cMaxParams)
_stStat->cMaxParams = cParam;
if (ulLength > _stStat->ulParamsMaxLength)
_stStat->ulParamsMaxLength = ulLength;
}
else if ( p_stContext->eParseType == SCR_EPT_Cxt_EndSection )
{
_stStat->ulNbEndSectionLines++;
}
else if ( p_stContext->eParseType == SCR_EPT_Cxt_Directive )
{
_stStat->ulNbDirectiveLines++;
}
else if ( p_stContext->eParseType == SCR_EPT_Cxt_Entry )
{
_stStat->ulNbEntryLines++;
ulLength = strlen( p_stContext->stBuffers.a_szBufferNameExt );
if (ulLength > _stStat->ulEntryMaxLength)
{
_stStat->ulEntryMaxLength = ulLength;
strcpy( _stStat->szEntryMax, p_stContext->stBuffers.a_szBufferNameExt );
}
if (ulLength < _stStat->ulEntryMinLength)
{
_stStat->ulEntryMinLength = ulLength;
strcpy( _stStat->szEntryMin, p_stContext->stBuffers.a_szBufferNameExt );
}
ulLength = strlen( p_stContext->stBuffers.a_szBufferFormat );
if (ulLength > _stStat->ulFormatMaxLength)
_stStat->ulFormatMaxLength = ulLength;
szParam = p_stContext->stBuffers.a_szBufferParams;
cParam = 0;
ulLength = 0;
while (szParam[ulLength] != 0)
{
cParam++;
ulLength += strlen( &szParam[ulLength] ) + 1;
}
ulLength ++;
if (cParam > _stStat->cMaxParams)
_stStat->cMaxParams = cParam;
if (ulLength > _stStat->ulParamsMaxLength)
_stStat->ulParamsMaxLength = ulLength;
}
} while(iRead != EOF);
if (ulNumberOfSections > _stStat->ulNbMaxSectionInAFile)
{
_stStat->ulNbMaxSectionInAFile = ulNumberOfSections;
strcpy( _stStat->szFileWithMaxSection, _p_szFileName );
}
_stStat->ulNbLines += p_stContext->stPosition.uiLineInFile;
_stStat->ulNbChars += p_stContext->stPosition.lAfterSeekInFile;
ulLength = p_stContext->stPosition.lAfterSeekInFile;
if (ulLength > _stStat->ulMaxSize)
{
_stStat->ulMaxSize = ulLength;
strcpy( _stStat->szBiggestFile, _p_szFileName );
}
SCR_fn_v_RdL0_DeleteOpenFile( _p_szFileName, SCR_CDR_c_RdL0_Match );
/*
* Delete context. It's finish...
*/
fn_v_Cxt_DeleteLast();
}
/*
*-------------------------------------------------------------------------------------------------
* parse a file to get stats on mod files
* _p_szFileName : file name
*-------------------------------------------------------------------------------------------------
*/
void fn_Scr_vInitModStat( tdstModStat *_pst_Stat )
{
memset( _pst_Stat, 0, sizeof( tdstModStat ) );
_pst_Stat->ulMinPoints = 0xFFFFFF;
_pst_Stat->ulMinEdges = 0xFFFFFF;
_pst_Stat->ulMinElement = 0xFFFFFF;
}
/*
*-------------------------------------------------------------------------------------------------
* parse a file to get stats on mod files
* _p_szFileName : file name
*-------------------------------------------------------------------------------------------------
*/
void fn_Scr_vParseFileToCountModData( char *_sz_FileName, tdstModStat *_pst_Stat )
{
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_tdst_Cxt_Description *p_stContext;
unsigned long ulLength;
int iRead;
char *szParam;
char cParam;
unsigned long ulNumberOfSections = 0;
unsigned long ulValue;
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
SCR_M_Dbg_Assert_D(_sz_FileName != NULL);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
* One more context.
*/
p_stContext = fnp_st_Cxt_Add();
/*
* Open the file.
*/
p_stContext->p_stOpenFile = fnp_st_File_OpenFile(_sz_FileName);
/*
* Place file to its SCR_BEGINing.
* Parse to the end.
*/
fn_v_Anl_ContextToFile(p_stContext);
do
{
iRead = fn_Scr_iLineToContext( p_stContext );
if ( p_stContext->eParseType == SCR_EPT_Cxt_BeginSection )
{
if ( stricmp( p_stContext->stBuffers.a_szBufferName, "Geometric" ) == 0)
{
_pst_Stat->ulNumber++;
szParam = p_stContext->stBuffers.a_szBufferParams;
if (szParam)
{
ulValue = (unsigned long) atoi( szParam );
if (_pst_Stat->ulMaxPoints < ulValue )
_pst_Stat->ulMaxPoints = ulValue;
if (_pst_Stat->ulMinPoints > ulValue )
_pst_Stat->ulMinPoints = ulValue;
}
szParam += strlen( szParam ) + 1;
if (szParam)
{
ulValue = atoi( szParam );
if (_pst_Stat->ulMaxEdges < ulValue )
_pst_Stat->ulMaxEdges = ulValue;
if (_pst_Stat->ulMinEdges > ulValue )
_pst_Stat->ulMinEdges = ulValue;
}
szParam += strlen( szParam ) + 1;
if (szParam)
{
ulValue = atoi( szParam );
if (_pst_Stat->ulMaxElement < ulValue )
_pst_Stat->ulMaxElement = ulValue;
if (_pst_Stat->ulMinElement > ulValue )
_pst_Stat->ulMinElement = ulValue;
}
}
}
} while(iRead != EOF);
SCR_fn_v_RdL0_DeleteOpenFile( _sz_FileName, SCR_CDR_c_RdL0_Match );
/*
* Delete context. It's finish...
*/
fn_v_Cxt_DeleteLast();
}