303 lines
8.7 KiB
C
303 lines
8.7 KiB
C
/*
|
|
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
* SCR_Err.h
|
|
* Scripts, Beaudet Christophe
|
|
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
*
|
|
*/
|
|
|
|
#ifndef __SCR_Err_h__Types
|
|
#define __SCR_Err_h__Types
|
|
|
|
#ifndef __Only_Types__
|
|
#define __SCR_Err_h__Undef
|
|
#define __Only_Types__
|
|
#endif /* !__Only_Types__ */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Includes.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#include <setjmp.h>
|
|
#include "SCR_Cfg.h"
|
|
|
|
#ifdef __SCR_Err_h__Undef
|
|
#undef __Only_Types__
|
|
#undef __SCR_Err_h__Undef
|
|
#endif /* __SCR_Err_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 */
|
|
|
|
/*
|
|
* Mode for errors.
|
|
*/
|
|
#define SCR_CM_Err_Normal 0x0000 /* Normal mode */
|
|
#define SCR_CM_Err_NotDisplayInfos 0x0001 /* Not display info to user */
|
|
#define SCR_CM_Err_NotUpdateLog 0x0002 /* Not update log file */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Types.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
/*
|
|
* Enum that describes the list of all errors Id.
|
|
*/
|
|
typedef enum SCR_tde_Err_Identification_
|
|
{
|
|
SCR_EI_Err_None,
|
|
/*
|
|
* Errors.
|
|
*/
|
|
#ifdef _DEBUG
|
|
SCR_EI_Err_AssertionFailed,
|
|
#endif /* _DEBUG */
|
|
SCR_EI_Err_EndSectionAlone,
|
|
SCR_EI_Err_MissingEndSection,
|
|
SCR_EI_Err_MissingEndSectionMark,
|
|
SCR_EI_Err_MissingEndFormatMark,
|
|
SCR_EI_Err_MissingEndPostFormatMark,
|
|
SCR_EI_Err_MissingEndStringMark,
|
|
SCR_EI_Err_MissingEndVarMark,
|
|
SCR_EI_Err_MissingEndParamsMark,
|
|
SCR_EI_Err_MissingParameters,
|
|
SCR_EI_Err_MissingDirectiveName,
|
|
SCR_EI_Err_CorruptEndOfLine,
|
|
SCR_EI_Err_ReadFile,
|
|
SCR_EI_Err_OpenFile,
|
|
SCR_EI_Err_CloseFile,
|
|
SCR_EI_Err_WriteFile,
|
|
SCR_EI_Err_CreatePath,
|
|
SCR_EI_Err_UnknownSection,
|
|
SCR_EI_Err_NotEnoughMemory,
|
|
SCR_EI_Err_AlreadyRegistered,
|
|
SCR_EI_Err_UnknownDirective,
|
|
SCR_EI_Err_UnknownVariable,
|
|
SCR_EI_Err_UnknownFormat,
|
|
SCR_EI_Err_BadCharacter,
|
|
SCR_EI_Err_BadNumParamsAR,
|
|
SCR_EI_Err_UnknownDynamicFlag,
|
|
SCR_EI_Err_CantConvertScanfFormat,
|
|
SCR_EI_Err_BadNumParamsScanf,
|
|
|
|
/*
|
|
* Warnings.
|
|
* Error callback is not called.
|
|
* Dialog box not appeared.
|
|
. .LOG file is update if it is not disable.
|
|
*/
|
|
SCR_EI_Err_UnnecessaryDirective,
|
|
SCR_EI_Err_SectionWithoutCallback,
|
|
|
|
/*
|
|
* Others...
|
|
*/
|
|
SCR_EI_Err_BadFileName, /* Fatal error */
|
|
} SCR_tde_Err_Identification;
|
|
|
|
/*
|
|
* Structure that associated an error to an info string.
|
|
*/
|
|
typedef struct SCR_tdst_Err_Description_
|
|
{
|
|
SCR_tde_Err_Identification eErrorId; /* Id of error */
|
|
char *p_szInfoString; /* Info string of error */
|
|
} SCR_tdst_Err_Description;
|
|
|
|
/*
|
|
* To describe an error.
|
|
*/
|
|
typedef struct SCR_tdst_Err_GlobalError_
|
|
{
|
|
SCR_tde_Err_Identification eErrorId; /* Id of error */
|
|
char *p_szFileName; /* Source file where error occured */
|
|
int iLineInFile; /* Line in source file where error occured */
|
|
char a_szBufferOut[SCR_CV_ui_Cfg_MaxLenError]; /* To print all optionnal infos */
|
|
char a_szBufferTmp[SCR_CV_ui_Cfg_MaxLenError];
|
|
char a_szBufferTmp1[SCR_CV_ui_Cfg_MaxLenError]; /* Optionnal infos temp */
|
|
char a_szBufferTmp2[SCR_CV_ui_Cfg_MaxLenError]; /* Optionnal infos temp */
|
|
} SCR_tdst_Err_GlobalError;
|
|
|
|
/*
|
|
* To describe a script error handler.
|
|
*/
|
|
typedef void (* SCR_tdpfn_Err_Callback)(SCR_tdst_Err_GlobalError *);
|
|
|
|
/*
|
|
* An error context.
|
|
*/
|
|
typedef struct SCR_tdst_Err_Context_
|
|
{
|
|
unsigned int uiCurrentContext;
|
|
jmp_buf stMark;
|
|
} SCR_tdst_Err_Context;
|
|
|
|
|
|
#endif /* !__SCR_Err_h__Types */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Global variables.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#if !defined(__SCR_Err_h__Globals) && !defined(__Only_Types__)
|
|
#define __SCR_Err_h__Globals
|
|
|
|
extern SCR_tdst_Err_Description g_a_st_Err_ListErrors[];
|
|
CPA_EXPORT extern SCR_tdst_Err_GlobalError g_st_Err_GlobalError;
|
|
extern SCR_tdst_Err_Context g_a_st_Err_Context[];
|
|
extern int g_i_Err_CurrentContext;
|
|
CPA_EXPORT extern SCR_tdpfn_Err_Callback SCR_g_pfn_Err_Callback;
|
|
CPA_EXPORT extern unsigned short SCR_g_uw_Err_Mode;
|
|
CPA_EXPORT extern int g_i_Err_GlobalReturn;
|
|
|
|
|
|
#endif /* !__SCR_Err_h__Globals && !__Only_Types__ */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Macros.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#if !defined(__SCR_Err_h__Macros) && !defined(__Only_Types__)
|
|
#define __SCR_Err_h__Macros
|
|
|
|
/*
|
|
* To raise an error.
|
|
* _Error : Error id.
|
|
*/
|
|
#define SCR_M_Err_RaiseError(_Error)\
|
|
{\
|
|
g_st_Err_GlobalError.eErrorId = _Error;\
|
|
g_st_Err_GlobalError.p_szFileName = __FILE__;\
|
|
g_st_Err_GlobalError.iLineInFile = __LINE__;\
|
|
fn_v_Err_SetError();\
|
|
}
|
|
|
|
/*
|
|
* To raise a warning.
|
|
* _Error : Error id.
|
|
*/
|
|
#define SCR_M_Err_RaiseWarning(_Error)\
|
|
{\
|
|
g_st_Err_GlobalError.eErrorId = _Error;\
|
|
g_st_Err_GlobalError.p_szFileName = __FILE__;\
|
|
g_st_Err_GlobalError.iLineInFile = __LINE__;\
|
|
fn_v_Err_SetWarning();\
|
|
}
|
|
|
|
/*
|
|
* To update a_szBufferTmp of global error with the current parsed
|
|
* file.
|
|
*/
|
|
#define SCR_M_Err_UpdateSyntaxError()\
|
|
{\
|
|
SCR_tdst_Cxt_Description *_p_stContext_;\
|
|
_p_stContext_ = fnp_st_Cxt_Compute(0);\
|
|
SCR_M_Dbg_AssertStruct_P(SCR_tdst_Cxt_Description, _p_stContext_);\
|
|
sprintf\
|
|
(\
|
|
g_st_Err_GlobalError.a_szBufferTmp1,\
|
|
"Parser stopped in file \"%s\" at line \"%d\".\n",\
|
|
_p_stContext_->p_stOpenFile->stFile.a_szFileName,\
|
|
_p_stContext_->stPosition.uiLineInFile\
|
|
);\
|
|
*g_st_Err_GlobalError.a_szBufferTmp2 = '\0';\
|
|
}
|
|
|
|
/*
|
|
* Equivalent to try and catch of C++.
|
|
*/
|
|
#define SCR_BEGIN \
|
|
{\
|
|
g_i_Err_CurrentContext++;\
|
|
g_a_st_Err_Context[g_i_Err_CurrentContext].uiCurrentContext = SCR_g_st_Cxt_Array.uiNumValues;\
|
|
if(setjmp(g_a_st_Err_Context[g_i_Err_CurrentContext].stMark) == 0)\
|
|
{
|
|
|
|
/*--*/
|
|
#define SCR_CATCH \
|
|
}\
|
|
else\
|
|
{
|
|
|
|
/*--*/
|
|
#define SCR_END(_Return)\
|
|
if(g_i_Err_CurrentContext != -1)\
|
|
SCR_M_Err_RestoreContext();\
|
|
SCR_RETURN(_Return);\
|
|
}\
|
|
SCR_RETURN(_Return);\
|
|
}
|
|
|
|
/*--*/
|
|
#define SCR_CEND(_Return)\
|
|
SCR_CATCH\
|
|
if(g_i_Err_CurrentContext != -1)\
|
|
SCR_M_Err_RestoreContext();\
|
|
return _Return;\
|
|
}\
|
|
SCR_RETURN(_Return);\
|
|
}
|
|
|
|
/*--*/
|
|
#define SCR_RETURN(_Return)\
|
|
{\
|
|
g_i_Err_CurrentContext--;\
|
|
return _Return;\
|
|
}
|
|
|
|
/*
|
|
* To restore error context.
|
|
*/
|
|
#define SCR_M_Err_RestoreContext()\
|
|
{\
|
|
g_i_Err_CurrentContext--;\
|
|
SCR_g_st_Cxt_Array.uiNumValues = g_a_st_Err_Context[g_i_Err_CurrentContext + 1].uiCurrentContext;\
|
|
longjmp(g_a_st_Err_Context[g_i_Err_CurrentContext + 1].stMark, 1);\
|
|
}
|
|
|
|
#endif /* !__SCR_Err_h__Macros && !__Only_Types__ */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Protos.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#if !defined(__SCR_Err_h__Protos) && !defined(__Only_Types__)
|
|
#define __SCR_Err_h__Protos
|
|
|
|
extern void fn_v_Err_InitModule(void);
|
|
extern void fn_v_Err_CloseModule(void);
|
|
|
|
extern void fn_v_Err_InitGlobalError(void);
|
|
CPA_EXPORT extern void fn_v_Err_SetError(void);
|
|
CPA_EXPORT extern void fn_v_Err_SetWarning(void);
|
|
|
|
extern void fn_v_Err_UpdateLogFile(void);
|
|
extern int fn_i_Err_DisplayError(char *, char *);
|
|
|
|
#endif /* !__SCR_Err_h__Protos && !__Only_Types__ */
|