reman3/Rayman_X/cpa/public/SCR/SCR_Err.h

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__ */