202 lines
7.2 KiB
C
202 lines
7.2 KiB
C
/*
|
|
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
* SCR_Anl.h
|
|
* Scripts, Beaudet Christophe
|
|
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
*
|
|
*/
|
|
|
|
#ifndef __SCR_Anl_h__Types
|
|
#define __SCR_Anl_h__Types
|
|
|
|
#ifndef __Only_Types__
|
|
#define __SCR_Anl_h__Undef
|
|
#define __Only_Types__
|
|
#endif /* !__Only_Types__ */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Includes.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#include "SCR_Cfg.h"
|
|
#include "SCR_Cxt.h"
|
|
#include "SCR_DyAr.h"
|
|
#include "SCR_File.h"
|
|
#include "SCR_Sect.h"
|
|
|
|
#ifdef __SCR_Anl_h__Undef
|
|
#undef __Only_Types__
|
|
#undef __SCR_Anl_h__Undef
|
|
#endif /* __SCR_Anl_h__Undef */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Constants.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
/*
|
|
* To export code.
|
|
*/
|
|
#undef CPA_EXPORT
|
|
#if defined(CPA_WANTS_IMPORT)
|
|
#define CPA_EXPORT __declspec(dllimport)
|
|
#elif defined(CPA_WANTS_EXPORT)
|
|
#define CPA_EXPORT __declspec(dllexport)
|
|
#else /* CPA_WANTS_IMPORT */
|
|
#define CPA_EXPORT
|
|
#endif /* CPA_WANTS_IMPORT */
|
|
|
|
/*
|
|
* To describe dynamic flags.
|
|
*/
|
|
#define SCR_CDF_uw_Anl_Normal 0x0000 /* Normal analyse */
|
|
#define SCR_CDF_c_Anl_Normal 'n' /* For automatic references */
|
|
#define SCR_CDF_uw_Anl_Comments 0x0001 /* It's a comment, don't care */
|
|
#define SCR_CDF_uw_Anl_ForceAnalyse 0x0002 /* To force analyse of section */
|
|
#define SCR_CDF_c_Anl_ForceAnalyse 'f' /* For automatic references */
|
|
#define SCR_CDF_uw_Anl_NotSaveSection 0x0004 /* To not save section in memory */
|
|
#define SCR_CDF_uw_Anl_WarnIfNotHere 0x0008 /* No error if section does not exist */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Types.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
/*
|
|
* Return value for callbacks.
|
|
*/
|
|
typedef enum SCR_tde_Anl_ReturnValue_
|
|
{
|
|
SCR_ERV_Anl_NormalReturn = 0,
|
|
SCR_ERV_Anl_TerminateCurrentSection,
|
|
SCR_ERV_Anl_TerminateParentSection,
|
|
SCR_ERV_Anl_TerminateMainSection,
|
|
SCR_ERV_Anl_TerminateFile,
|
|
} SCR_tde_Anl_ReturnValue;
|
|
|
|
/*
|
|
* Value for callback action.
|
|
*/
|
|
typedef enum SCR_tde_Anl_Action_
|
|
{
|
|
SCR_EA_Anl_Invalid = 0,
|
|
SCR_EA_Anl_BeginSection,
|
|
SCR_EA_Anl_Entry,
|
|
SCR_EA_Anl_BeginSubSection,
|
|
SCR_EA_Anl_EndSubSection,
|
|
SCR_EA_Anl_EndSection,
|
|
SCR_EA_Anl_AlreadyAnalysed,
|
|
} SCR_tde_Anl_Action;
|
|
|
|
/*
|
|
* A user callback for parser.
|
|
*/
|
|
typedef SCR_tde_Anl_ReturnValue (* SCR_tdpfn_Anl_Callback)(SCR_tdst_File_Description *, char *, char *[], SCR_tde_Anl_Action);
|
|
|
|
/*
|
|
* A structure to describe a saved callback.
|
|
*/
|
|
typedef struct SCR_tdst_Anl_Callback_
|
|
{
|
|
SCR_tdst_DyAr_Header stHeader; /* Header of element */
|
|
char a_szSectionName[SCR_CV_ui_Cfg_MaxLenAtomicName]; /* Action part of name */
|
|
SCR_tdpfn_Anl_Callback pfn_eCallback; /* Address of function */
|
|
char cForSection; /* Call back for a section */
|
|
} SCR_tdst_Anl_Callback;
|
|
|
|
/*
|
|
* Structure that describe a section in a file.
|
|
*/
|
|
typedef struct SCR_tdst_Anl_SectionDes_
|
|
{
|
|
SCR_tdst_DyAr_Header stHeader; /* Header of element */
|
|
SCR_tdst_Cxt_DynBuffers stBuffers; /* Buffers to describe section title */
|
|
SCR_tdst_Cxt_Position stBeginPosition; /* Position of section in file */
|
|
SCR_tdst_Cxt_Position stEndPosition; /* Position of section in file */
|
|
unsigned short uwDynamicFlags; /* Flags of section */
|
|
struct SCR_tdst_Anl_SectionDes_ *p_stParentSection; /* Parent section description */
|
|
unsigned int uiIndexOfHashValue; /* Index in hash table of that section */
|
|
SCR_tdst_Sect_Open *p_stOpenSection; /* Address of open section */
|
|
} SCR_tdst_Anl_SectionDes;
|
|
|
|
/*
|
|
* For the parser.
|
|
*/
|
|
typedef struct SCR_tdst_Anl_ParserValues_
|
|
{
|
|
SCR_tdst_Cxt_Description *p_stContext;
|
|
SCR_tdst_Anl_Callback *p_stCallback;
|
|
SCR_tde_Anl_ReturnValue eReturnValue;
|
|
} SCR_tdst_Anl_ParserValues;
|
|
|
|
#endif /* !__SCR_Anl_h__Types */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Global variables.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
CPA_EXPORT extern SCR_tdst_DyAr_Description SCR_g_st_Anl_ArrayCallbacks;
|
|
extern int g_iExitBeforeLevel;
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Macros.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#if !defined(__SCR_Anl_h__Macros) && !defined(__Only_Types__)
|
|
#define __SCR_Anl_h__Macros
|
|
|
|
/*
|
|
* Place the current context and the current file to a given position.
|
|
*/
|
|
#define SCR_M_Anl_CxtFileToPos(_Context, _Pos)\
|
|
{\
|
|
memcpy(&((_Context)->stPosition), &(_Pos), sizeof(SCR_tdst_Cxt_Position));\
|
|
SCR_M_File_Seek(&(_Context)->p_stOpenFile->stFile, (_Context)->stPosition.lAfterSeekInFile, SEEK_SET);\
|
|
}
|
|
|
|
#endif /* __SCR_Anl_h__Macros */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Protos.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#if !defined(__SCR_Anl_h__Protos) && !defined(__Only_Types__)
|
|
#define __SCR_Anl_h__Protos
|
|
|
|
extern void fn_v_Anl_InitModule(void);
|
|
extern void fn_v_Anl_CloseModule(void);
|
|
|
|
extern SCR_tdst_Anl_Callback *fnp_st_Anl_AddCallback(char *, SCR_tdpfn_Anl_Callback, char);
|
|
extern void fn_v_Anl_DeleteCallback(SCR_tdst_Anl_Callback *);
|
|
extern SCR_tdst_Anl_Callback *fnp_st_Anl_SearchCallback(char *, char);
|
|
|
|
extern SCR_tdst_Anl_SectionDes *fnp_st_Anl_AddSectionDes(SCR_tdst_Cxt_Description *, SCR_tdst_Anl_SectionDes *);
|
|
extern SCR_tdst_Anl_SectionDes *fnp_st_Anl_SearchSectionDes(SCR_tdst_File_Open *, char *, unsigned int, unsigned int);
|
|
|
|
extern SCR_tdst_Anl_SectionDes *fnp_st_Anl_ComputeCompleteName(SCR_tdst_Cxt_Description *, char);
|
|
extern void fn_v_Anl_ComputeSeekEnd(SCR_tdst_Cxt_Description *);
|
|
extern void fn_v_Anl_UpdateInfos(SCR_tdst_Cxt_Description *);
|
|
extern int fn_i_Anl_LineToContext(SCR_tdst_Cxt_Description *);
|
|
|
|
CPA_EXPORT extern void fn_v_Anl_ContextToSection(SCR_tdst_Cxt_Description *, char *);
|
|
CPA_EXPORT extern void fn_v_Anl_ContextToEndSection(SCR_tdst_Cxt_Description *);
|
|
CPA_EXPORT extern void fn_v_Anl_ContextToFile(SCR_tdst_Cxt_Description *);
|
|
|
|
extern char fn_c_Anl_CallToCallback(SCR_tdst_Anl_ParserValues *, SCR_tde_Anl_Action, int *);
|
|
extern void fn_v_Anl_ParseCurrentSection(unsigned short);
|
|
|
|
extern void fn_v_Anl_ReduceMemory(void);
|
|
extern void fn_v_Anl_DeleteWithMemLevel(unsigned char, unsigned char);
|
|
|
|
#endif /* !__SCR_Anl_h__Protos && !__Only_Types__ */
|