174 lines
5.8 KiB
C
174 lines
5.8 KiB
C
/*
|
|
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
* SCR_Mem.h
|
|
* Scripts, Beaudet Christophe
|
|
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
*
|
|
*/
|
|
|
|
#ifndef __SCR_Mem_h__Types
|
|
#define __SCR_Mem_h__Types
|
|
|
|
#ifndef __Only_Types__
|
|
#define __SCR_Mem_h__Undef
|
|
#define __Only_Types__
|
|
#endif /* !__Only_Types__ */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Includes.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#include "ErrScr.h" /* ERM */
|
|
#include "MmgScr.h" /* MMG */
|
|
#include "Malloc.h"
|
|
|
|
#ifdef __SCR_Mem_h__Undef
|
|
#undef __Only_Types__
|
|
#undef __SCR_Mem_h__Undef
|
|
#endif /* __SCR_Mem_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 */
|
|
|
|
#endif /* !__SCR_Mem_h__Types */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Global variables.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#if !defined(__SCR_Mem_h__Globals) && !defined(__Only_Types__)
|
|
#define __SCR_Mem_h__Globals
|
|
|
|
extern unsigned char g_uc_Mem_CurrentAllocationType;
|
|
extern unsigned long g_a_ul_Mem_BlocAllocationSize[E_ucScrMaxBlocksNb];
|
|
extern unsigned long g_a_ul_Mem_MemoryAllocated[256];
|
|
extern unsigned char g_uc_Mem_CurrentMemLevel;
|
|
extern unsigned char g_uc_Mem_CurrentLinkLevel;
|
|
extern unsigned char g_uc_Mem_LastMemLevel;
|
|
|
|
#endif /* !__SCR_Mem_h__Globals && !__Only_Types__ */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Macros.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#if !defined(__SCR_Mem_h__Macros) && !defined(__Only_Types__)
|
|
#define __SCR_Mem_h__Macros
|
|
|
|
/*
|
|
* A macro for a simple malloc.
|
|
* A macro for a simple malloc with an init of allocated memory.
|
|
* A macro for a realloc.
|
|
* A macro to free.
|
|
*/
|
|
#define SCR_M_Mem_Alloc(_Cast, _Pointer, _Size)\
|
|
{\
|
|
_Pointer = NULL;\
|
|
if(_Size)\
|
|
{\
|
|
g_a_ul_Mem_MemoryAllocated[g_uc_Mem_LastMemLevel] += (_Size * sizeof(_Cast));\
|
|
Mmg_M_SetModeAlloc4Ch(Scr, g_uc_Mem_CurrentAllocationType, C_ucMmgDefaultChannel);\
|
|
MMG_fn_vAddMemoryInfo(MMG_C_lTypeScript, MMG_C_lSubTypeScript, NULL);\
|
|
_Pointer = (_Cast *) Mmg_fn_p_vAlloc4Ch(_Size * sizeof(_Cast), C_ucMmgDefaultChannel);\
|
|
if(Erm_M_uwCheckError(Mmg, C_ucErmDefaultChannel))\
|
|
Erm_M_ClearLastError(C_ucErmDefaultChannel);\
|
|
if(_Pointer == NULL)\
|
|
{\
|
|
*g_st_Err_GlobalError.a_szBufferTmp1 = '\0';\
|
|
*g_st_Err_GlobalError.a_szBufferTmp2 = '\0';\
|
|
SCR_M_Err_RaiseError(SCR_EI_Err_NotEnoughMemory);\
|
|
}\
|
|
}\
|
|
}
|
|
|
|
#define SCR_M_Mem_AllocAndSet(_Cast, _Pointer, _Size)\
|
|
{\
|
|
SCR_M_Mem_Alloc(_Cast, _Pointer, _Size);\
|
|
if(_Pointer == NULL)\
|
|
{\
|
|
*g_st_Err_GlobalError.a_szBufferTmp1 = '\0';\
|
|
*g_st_Err_GlobalError.a_szBufferTmp2 = '\0';\
|
|
SCR_M_Err_RaiseError(SCR_EI_Err_NotEnoughMemory);\
|
|
}\
|
|
memset(_Pointer, 0, _Size * sizeof(_Cast));\
|
|
}
|
|
|
|
#define SCR_M_Mem_Realloc(_Cast, _PointerSrc, _PointerDest, _Size, _AddSize)\
|
|
{\
|
|
g_a_ul_Mem_MemoryAllocated[g_uc_Mem_LastMemLevel] += (_AddSize * sizeof(_Cast));\
|
|
Mmg_M_SetModeAlloc4Ch(Scr, g_uc_Mem_CurrentAllocationType, C_ucMmgDefaultChannel);\
|
|
_PointerSrc = (_Cast *) Mmg_fn_p_vRealloc4Ch(_PointerDest, _Size * sizeof(_Cast), C_ucMmgDefaultChannel);\
|
|
if(Erm_M_uwCheckError(Mmg, C_ucErmDefaultChannel))\
|
|
Erm_M_ClearLastError(C_ucErmDefaultChannel);\
|
|
if(_PointerSrc == NULL)\
|
|
{\
|
|
*g_st_Err_GlobalError.a_szBufferTmp1 = '\0';\
|
|
*g_st_Err_GlobalError.a_szBufferTmp2 = '\0';\
|
|
SCR_M_Err_RaiseError(SCR_EI_Err_NotEnoughMemory);\
|
|
}\
|
|
}
|
|
|
|
#define SCR_M_Mem_Free(_Pointer)\
|
|
{\
|
|
if(_Pointer)\
|
|
{\
|
|
/*g_a_ul_Mem_MemoryAllocated[g_uc_Mem_LastMemLevel] -= _msize(((char *) _Pointer) - 1);*/\
|
|
Mmg_M_SetModeAlloc4Ch(Scr, g_uc_Mem_CurrentAllocationType, C_ucMmgDefaultChannel);\
|
|
if(Erm_M_uwCheckError(Mmg, C_ucErmDefaultChannel))\
|
|
Erm_M_ClearLastError(C_ucErmDefaultChannel);\
|
|
Mmg_fn_vFree4Ch(_Pointer, C_ucMmgDefaultChannel);\
|
|
_Pointer = NULL;\
|
|
}\
|
|
}
|
|
|
|
#endif /* !__SCR_Mem_h__Macros && !__Only_Types__ */
|
|
|
|
/*
|
|
*=================================================================================================
|
|
* Protos.
|
|
*=================================================================================================
|
|
*/
|
|
|
|
#if !defined(__SCR_Mem_h__Protos) && !defined(__Only_Types__)
|
|
#define __SCR_Mem_h__Protos
|
|
|
|
extern void fn_v_Mem_InitModule(void);
|
|
extern void fn_v_Mem_CloseModule(void);
|
|
|
|
CPA_EXPORT extern void SCR_fn_v_Mem_InitWithMemLevel(unsigned long *);
|
|
CPA_EXPORT extern void SCR_fn_v_Mem_DeleteWithMemLevel(unsigned char, unsigned char);
|
|
CPA_EXPORT extern void SCR_fn_v_Mem_ReduceMemory(void);
|
|
|
|
CPA_EXPORT extern unsigned char SCR_fn_uc_Mem_GetCurrentLevel(void);
|
|
CPA_EXPORT extern void SCR_fn_v_Mem_SetCurrentLevel(unsigned char);
|
|
CPA_EXPORT extern unsigned char SCR_fn_uc_Mem_GetCurrentLinkLevel(void);
|
|
CPA_EXPORT extern void SCR_fn_v_Mem_SetCurrentLinkLevel(unsigned char);
|
|
|
|
extern void fn_v_Mem_SetMode(unsigned char);
|
|
CPA_EXPORT extern unsigned long SCR_fn_ul_Mem_GetAllocationSize(unsigned char, unsigned long);
|
|
|
|
CPA_EXPORT extern void Scr_PrintUsedStaticMemory(void);
|
|
|
|
#endif /* !__SCR_Mem_h__Protos && !__Only_Types__ */
|