669 lines
22 KiB
C
669 lines
22 KiB
C
/*=========================================================================
|
|
* Memory.h : Contain the memory's functions.
|
|
* (based on CAP memory (see Pierrick))
|
|
* This is a part of the Game project.
|
|
*
|
|
* To use memory, use M_p_GameMalloc and M_GameFree macros
|
|
*
|
|
* Version 1.0
|
|
* Creation date 30/08/96
|
|
* Revision date
|
|
*
|
|
* That file needs to be compatible for all platforms.
|
|
*
|
|
* (c) Ubi Studios 1996
|
|
*=======================================================================*/
|
|
|
|
/*#define GAM_D_DebugMalloc*/
|
|
/*#define GAM_D_DebugStatistic*/
|
|
|
|
#include "ToolsCPA.h"
|
|
|
|
#include "Structur/ErrGame.h"
|
|
#include "Structur/MemGame.h"
|
|
#include "Structur/GameScpt.h"
|
|
#include "Structur/EngMode.h"
|
|
|
|
#include "Options/ActBlMal.h"
|
|
#include "LSMem.h"
|
|
|
|
#include "Basic.h"
|
|
#include "ZeMem.h"
|
|
|
|
/* XB 05/05/99 */
|
|
#include "TEX.H"
|
|
extern void INO_PrintUsedStaticMemory(void);
|
|
/* End XB 05/05/99 */
|
|
|
|
#ifdef GAM_USE_SNA
|
|
#include "sna.h"
|
|
#endif /* GAM_USE_SNA */
|
|
|
|
/*XB980825*/
|
|
#ifdef U64
|
|
extern unsigned long g_ulTotalMemoryUsed;
|
|
extern unsigned long g_ulTotalMemoryAllocated;
|
|
#endif /* U64 */
|
|
/*End XB*/
|
|
|
|
/**************************************************************************/
|
|
void fn_vFirstInitGameMemory(void)
|
|
{
|
|
/**** Check the ACP memory module ****/
|
|
Mmg_M_InitMmg(Game);
|
|
Mmg_fn_cCheckAlignmentValidity();
|
|
}
|
|
/**************************************************************************/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC 04/06/99 */
|
|
void fn_vLastDesinitGameMemory(void)
|
|
{
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC 04/06/99 */
|
|
|
|
/**************************************************************************/
|
|
void GAM_fn_vSetGameMemoryInFix(void)
|
|
{
|
|
GAM_g_ucHLMMemoryBlock = (unsigned char)E_ucGameFixMemory;
|
|
}
|
|
/**************************************************************************/
|
|
void GAM_fn_vSetGameMemoryInLevel(void)
|
|
{
|
|
GAM_g_ucHLMMemoryBlock = (unsigned char)E_ucGameLevelMemory;
|
|
}
|
|
/**************************************************************************/
|
|
#if defined (GAM_D_DebugMalloc)
|
|
/*unsigned long g_ulNumberOfAllocation;*/
|
|
#endif /* GAM_D_DebugMalloc */
|
|
|
|
#define GAM_C_NumberOfSource 200
|
|
|
|
#if defined(_DEBUG)&&(defined(GAM_D_DebugStatistic)||defined(GAM_D_DebugMalloc))
|
|
unsigned long GAM_g_ulNumberOfAllocation = 0;
|
|
#endif /* _DEBUG&&(GAM_D_DebugStatistic||GAM_D_DebugMalloc) */
|
|
|
|
#if defined(_DEBUG)&&defined(GAM_D_DebugStatistic)
|
|
unsigned long GAM_g_ulMaxSources = 0;
|
|
struct GAM_tdstAllocInformation_
|
|
{
|
|
char szSourceName[_MAX_PATH];
|
|
unsigned long ulSourceLine;
|
|
unsigned short usSourceBloc;
|
|
unsigned long ulSourceSize;
|
|
unsigned long ulSourceNumberOfAlloc;
|
|
unsigned long ulSourceNumberOfRealloc;
|
|
unsigned long ulSourceNumberOfFree;
|
|
} GAM_g_a_stAllocInformation[GAM_C_NumberOfSource];
|
|
#endif /*_DEBUG&&GAM_D_DebugStatistic*/
|
|
|
|
void GAM_fn_vMemoryLogFile(void *p_vPointer,unsigned char ucAction,char *szFile,unsigned long ulLine,unsigned long ulSize)
|
|
{
|
|
#if defined(_DEBUG)&&(defined(GAM_D_DebugStatistic)||defined(GAM_D_DebugMalloc))
|
|
/* static unsigned long GAM_s_ulNumberOfAllocation = 0;*/
|
|
unsigned short uwBlocId;
|
|
void *p_vBeginBloc;
|
|
#endif /* _DEBUG&&(GAM_D_DebugStatistic||GAM_D_DebugMalloc) */
|
|
|
|
#if defined(_DEBUG)&&defined(GAM_D_DebugStatistic)
|
|
unsigned long i;
|
|
#endif /*_DEBUG&&GAM_D_DebugStatistic*/
|
|
|
|
#if defined(_DEBUG)&& defined(GAM_D_DebugMalloc)
|
|
/* static unsigned long AI_s_ulNumberOfAllocation = 0;*/
|
|
FILE *p_stFile;
|
|
char szFileName[30];
|
|
#endif /* _DEBUG && GAM_D_DebugMalloc */
|
|
|
|
#if defined(_DEBUG)&&(defined(GAM_D_DebugStatistic)||defined(GAM_D_DebugMalloc))
|
|
Mmg_fn_vWhereIs((void*)p_vPointer,&uwBlocId,&p_vBeginBloc);
|
|
|
|
if (ucAction==GAM_C_ActionMalloc)
|
|
GAM_g_ulNumberOfAllocation++;
|
|
else if (ucAction==GAM_C_ActionFree)
|
|
GAM_g_ulNumberOfAllocation--;
|
|
#endif /* _DEBUG&&(GAM_D_DebugStatistic||GAM_D_DebugMalloc) */
|
|
|
|
#if defined(_DEBUG)&&defined(GAM_D_DebugStatistic)
|
|
for (i=0;i<GAM_g_ulMaxSources&&(stricmp(szFile,GAM_g_a_stAllocInformation[i].szSourceName)||GAM_g_a_stAllocInformation[i].ulSourceLine!=ulLine||GAM_g_a_stAllocInformation[i].usSourceBloc!=uwBlocId);i++);
|
|
if (i==GAM_g_ulMaxSources)
|
|
{
|
|
strcpy(GAM_g_a_stAllocInformation[i].szSourceName,szFile);
|
|
GAM_g_a_stAllocInformation[i].ulSourceLine=ulLine;
|
|
GAM_g_a_stAllocInformation[i].usSourceBloc = uwBlocId;
|
|
GAM_g_a_stAllocInformation[i].ulSourceSize=0;
|
|
GAM_g_a_stAllocInformation[i].ulSourceNumberOfAlloc=0;
|
|
GAM_g_a_stAllocInformation[i].ulSourceNumberOfRealloc=0;
|
|
GAM_g_a_stAllocInformation[i].ulSourceNumberOfFree=0;
|
|
GAM_g_ulMaxSources++;
|
|
if (GAM_g_ulMaxSources>=GAM_C_NumberOfSource)
|
|
M_GameFatalError(E_uwGameIncreaseNumberOfSource);
|
|
}
|
|
|
|
if (ucAction==GAM_C_ActionMalloc)
|
|
{
|
|
GAM_g_a_stAllocInformation[i].ulSourceSize+=ulSize;
|
|
GAM_g_a_stAllocInformation[i].ulSourceNumberOfAlloc++;
|
|
}
|
|
else if (ucAction==GAM_C_ActionRealloc)
|
|
{
|
|
GAM_g_a_stAllocInformation[i].ulSourceSize+=ulSize;
|
|
GAM_g_a_stAllocInformation[i].ulSourceNumberOfRealloc++;
|
|
}
|
|
else if (ucAction==GAM_C_ActionFree)
|
|
{
|
|
GAM_g_a_stAllocInformation[i].ulSourceNumberOfFree++;
|
|
}
|
|
#endif /*_DEBUG&&GAM_D_DebugStatistic*/
|
|
|
|
#if defined(_DEBUG)&&defined(GAM_D_DebugMalloc)
|
|
sprintf(szFileName,"Mem%04x.log",uwBlocId);
|
|
if ((p_stFile = fopen(szFileName,"rt"))!=NULL)
|
|
fclose(p_stFile);
|
|
else
|
|
GAM_g_ulNumberOfAllocation = 0;
|
|
p_stFile = fopen(szFileName,"at");
|
|
if (p_stFile!=NULL)
|
|
{
|
|
if (ucAction==GAM_C_ActionMalloc)
|
|
fprintf(p_stFile,"Malloc : Number=#%010d, Block=#%04x, Offset=%p (%20s,%10d)\n",GAM_g_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine);
|
|
else if (ucAction==GAM_C_ActionRealloc)
|
|
fprintf(p_stFile,"Realloc : Number=#%010d, Block=#%04x, Offset=%p (%20s,%10d)\n",GAM_g_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine);
|
|
else if (ucAction==GAM_C_ActionFree)
|
|
fprintf(p_stFile,"Free : Number=#%010d, Block=#%04x, Offset=%p (%20s,%10d)\n",GAM_g_ulNumberOfAllocation,uwBlocId,(long)p_vPointer-(long)p_vBeginBloc,szFile,ulLine);
|
|
fclose(p_stFile);
|
|
}
|
|
#endif /* _DEBUG && GAM_D_DebugMalloc */
|
|
}
|
|
/**************************************************************************/
|
|
#ifndef _FIRE_DEADCODE_U64_
|
|
int GAM_fn_vMemorySort(const void *elem1, const void *elem2)
|
|
{
|
|
#if defined(_DEBUG)&&defined(GAM_D_DebugStatistic)
|
|
return(((struct GAM_tdstAllocInformation_*)elem2)->ulSourceSize-((struct GAM_tdstAllocInformation_*)elem1)->ulSourceSize);
|
|
#else
|
|
return(0);
|
|
#endif /*_DEBUG&&GAM_D_DebugStatistic*/
|
|
}
|
|
/**************************************************************************/
|
|
void GAM_fn_vPrintMemoryInformation(void)
|
|
{
|
|
#if defined(_DEBUG)&&defined(GAM_D_DebugStatistic)
|
|
FILE *p_stFile;
|
|
unsigned long i;
|
|
|
|
qsort(GAM_g_a_stAllocInformation,GAM_g_ulMaxSources, sizeof(struct GAM_tdstAllocInformation_),GAM_fn_vMemorySort);
|
|
|
|
if ((p_stFile = fopen("GamMemInfo.log","wt"))!=NULL)
|
|
{
|
|
for (i=0;i<GAM_g_ulMaxSources;i++)
|
|
{
|
|
fprintf(p_stFile,"%s (line %d, bloc %04x) :\n",GAM_g_a_stAllocInformation[i].szSourceName,GAM_g_a_stAllocInformation[i].ulSourceLine,GAM_g_a_stAllocInformation[i].usSourceBloc);
|
|
fprintf(p_stFile," Number of allocations : %d\n",GAM_g_a_stAllocInformation[i].ulSourceNumberOfAlloc);
|
|
fprintf(p_stFile," Number of reallocations : %d\n",GAM_g_a_stAllocInformation[i].ulSourceNumberOfRealloc);
|
|
fprintf(p_stFile," Number of free : %d\n",GAM_g_a_stAllocInformation[i].ulSourceNumberOfFree);
|
|
fprintf(p_stFile," Total size of allocation : %d\n",GAM_g_a_stAllocInformation[i].ulSourceSize);
|
|
}
|
|
fprintf(p_stFile,"\nTotal number of allocation : %d\n",GAM_g_ulNumberOfAllocation);
|
|
}
|
|
fclose(p_stFile);
|
|
#endif /*_DEBUG&&GEO_D_DebugStatistic*/
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */
|
|
/**************************************************************************/
|
|
|
|
#ifndef RETAIL
|
|
void *fnp_vGameDebugMallocInHLM(unsigned long ulSize,char *szFile,unsigned long ulLine)
|
|
{
|
|
void *Var;
|
|
Var = fnp_vGameMallocInHLM(ulSize);
|
|
GAM_fn_vMemoryLogFile(Var,GAM_C_ActionMalloc,szFile,ulLine,ulSize);
|
|
return(Var);
|
|
}
|
|
#endif
|
|
|
|
/**************************************************************************/
|
|
void *fnp_vGameMallocInHLM(unsigned long ulSize)
|
|
{
|
|
void *p_vPointer = NULL;
|
|
#if defined(_DEBUG)
|
|
static unsigned char HLM_ucDynamicAlloc = FALSE;
|
|
#endif
|
|
|
|
/**** Check parameters ****/
|
|
if (ulSize==0)
|
|
{
|
|
M_GameFatalError(E_uwGameGameMallocBadSize);
|
|
}
|
|
|
|
if (GAM_g_ucHLMMemoryBlock<E_ucFirstMemoryBlock||GAM_g_ucHLMMemoryBlock>E_ucLastMemoryBlock)
|
|
{
|
|
M_GameFatalError(E_uwGameGameMallocBadBlock);
|
|
}
|
|
|
|
Mmg_M_SetModeAlloc4Ch(Game,(unsigned char)GAM_g_ucHLMMemoryBlock,C_ucMmgDefaultChannel);
|
|
|
|
#if defined(U64) && !defined(FINAL_VERSION)
|
|
g_ucModuleIdForDebug=2;
|
|
#endif
|
|
|
|
#if defined(_DEBUG)
|
|
if (HLM_ucDynamicAlloc||(p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel))==NULL)
|
|
{
|
|
if (!HLM_ucDynamicAlloc)
|
|
{
|
|
Erm_M_ClearLastError(C_ucErmDefaultChannel);
|
|
M_GameWarningError(E_uwGameDebugDynamicAllocation);
|
|
Erm_M_ClearLastError(C_ucErmDefaultChannel);
|
|
HLM_ucDynamicAlloc = TRUE;
|
|
}
|
|
Mmg_M_SetModeAlloc4Ch(Game,E_ucDynamic,C_ucMmgDefaultChannel);
|
|
if ((p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel))==NULL)
|
|
{
|
|
M_GameFatalError(E_uwGameGameMallocAlloc);
|
|
}
|
|
}
|
|
#else /* _DEBUG */
|
|
if( (p_vPointer = Mmg_fn_p_vAlloc4Ch(ulSize,C_ucMmgDefaultChannel)) == NULL )
|
|
M_GameFatalError(E_uwGameGameMallocAlloc);
|
|
#endif /* _DEBUG */
|
|
|
|
#if defined(U64) && !defined(FINAL_VERSION)
|
|
g_ucModuleIdForDebug=0xff;
|
|
#endif
|
|
memset(p_vPointer,0,ulSize);
|
|
|
|
return (p_vPointer);
|
|
}
|
|
/**************************************************************************/
|
|
void fn_vGameFreeInHLM(void *p_vPointer)
|
|
{
|
|
#if defined(_DEBUG)
|
|
struct tdstBlockInfo_ stMyBlockInfo;
|
|
#endif /* _DEBUG */
|
|
|
|
if (p_vPointer==NULL)
|
|
{
|
|
M_GameInformationError(E_uwGameGameFreeNullPointer);
|
|
/*ANNECY CT 20/02/98{*/
|
|
return;
|
|
/*ENDANNECY CT}*/
|
|
}
|
|
|
|
#if defined(_DEBUG)
|
|
/* Mmg_fn_vTestMallocIntegrityAt(p_vPointer);*/
|
|
#endif /*_DEBUG*/
|
|
|
|
Mmg_M_SetModeAlloc4Ch(Game,(unsigned char)GAM_g_ucHLMMemoryBlock,C_ucMmgDefaultChannel);
|
|
#if defined(_DEBUG)
|
|
Mmg_fn_vGiveInformationBlock(Erm_M_ucGiveModuleId(Game),(unsigned char)GAM_g_ucHLMMemoryBlock,&stMyBlockInfo);
|
|
if (p_vPointer<(void*)stMyBlockInfo.p_cBeginBlock||p_vPointer>(void*)stMyBlockInfo.p_cEndBlock)
|
|
Mmg_M_SetModeAlloc4Ch(Game,E_ucDynamic,C_ucMmgDefaultChannel);
|
|
#endif /* _DEBUG */
|
|
Mmg_fn_vFree4Ch(p_vPointer,C_ucMmgDefaultChannel);
|
|
}
|
|
/**************************************************************************/
|
|
#ifndef _FIRE_DEADCODE_U64_
|
|
void fn_vFreeFixAllowedMemory(void)
|
|
{
|
|
unsigned char i;
|
|
|
|
for (i=E_ucFirstFixMemoryBlock;i<=E_ucLastFixMemoryBlock;i++)
|
|
{
|
|
Mmg_M_FreeBlock(Game,i);
|
|
Mmg_M_DeleteBlock(Game,i);
|
|
}
|
|
GEO_xDeleteMemoryChannel(ACP_FixMemoryChannel);
|
|
fn_vFreeAIFixMemory();
|
|
fn_vDeleteAIFixMemory();
|
|
TMP_fn_vFreeFixMemory();
|
|
SAI_fn_vDeleteFixMemory();
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */
|
|
/**************************************************************************/
|
|
extern void SAI_fn_vFreeLevelMemory();
|
|
void fn_vFreeLevelAllowedMemory(void)
|
|
{
|
|
|
|
unsigned char i;
|
|
|
|
/* XB 22/06/99 */
|
|
#ifndef U64
|
|
GLI_TEX_vKillMemoryChannel(ACP_LevelMemoryChannel);
|
|
#endif /* U64 */
|
|
/* End XB 22/06/99 */
|
|
|
|
#if !defined(U64)
|
|
|
|
if (SNA_fn_ucGetLoadType()==SNA_LOAD_SCRIPT)
|
|
{
|
|
#endif /* U64 */
|
|
for (i=E_ucFirstLevelMemoryBlock;i<=E_ucLastLevelMemoryBlock;i++)
|
|
{
|
|
Mmg_M_FreeBlock(Game,i);
|
|
Mmg_M_DeleteBlock(Game,i);
|
|
}
|
|
GEO_xDeleteMemoryChannel(ACP_LevelMemoryChannel);
|
|
#if defined(U64)
|
|
GEO_xDeleteMemoryChannel(ACP_U64_LevelMemoryChannel);
|
|
#endif /* U64 */
|
|
|
|
fn_vFreeAILevelMemory();
|
|
fn_vDeleteAILevelMemory();
|
|
|
|
/* Free level saved values list and delete SAI level memory block*/
|
|
SAI_fn_vDeleteLevelMemory();
|
|
|
|
#ifdef U64
|
|
//XB 21 April 1999
|
|
TMP_fn_vFreeLevelMemory();
|
|
#endif
|
|
//End XB
|
|
#if !defined(U64)
|
|
}
|
|
else if( SNA_fn_ucGetLoadType() == SNA_LOAD_SNAPSHOT )
|
|
{
|
|
/* Here, we free the list of saved value for the level WITHOUT deleting SAI level memory block.*/
|
|
SAI_fn_vFreeLevelMemory();
|
|
}
|
|
/*
|
|
else if (SNA_fn_ucGetLoadType()==SNA_LOAD_SNAPSHOT)
|
|
{
|
|
for (i=E_ucFirstLevelMemoryBlock;i<=E_ucLastLevelMemoryBlock;i++)
|
|
{
|
|
Mmg_M_FreeBlock(Game,i);
|
|
}
|
|
Mmg_M_FreeBlock(GEO,2);
|
|
fn_vFreeAILevelMemory();
|
|
}
|
|
*/
|
|
#endif /* U64 */
|
|
|
|
/* MR0310*/
|
|
/* else
|
|
{
|
|
for (i=E_ucFirstLevelMemoryBlock;i<=E_ucLastLevelMemoryBlock;i++)
|
|
{
|
|
if(i%2==1)
|
|
Mmg_M_DeleteBlock(Game,i);
|
|
}
|
|
}*/
|
|
|
|
GEO_xSelectMemoryChannel(ACP_FixMemoryChannel);
|
|
AI_fn_vAIUseFixMemory();
|
|
GAM_fn_vSetGameMemoryInFix();
|
|
|
|
}
|
|
|
|
/**************************************************************************/
|
|
void fn_vGameTestMemory(void)
|
|
{
|
|
/**** Test the integrity of all memory already allocated ****/
|
|
Mmg_fn_vTestMalloc();
|
|
}
|
|
/**************************************************************************/
|
|
#if !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS)
|
|
void GAM_PrintUsedStaticMemory(void)
|
|
{
|
|
Mmg_M_PrintUsedStaticMemoryInModule(Game);
|
|
}
|
|
#endif /* !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS) */
|
|
/**************************************************************************/
|
|
/*XB*/
|
|
#ifdef CHECK_MEMORY
|
|
void GAM_CheckMemory(void)
|
|
{
|
|
Mmg_M_CheckMemory(Game);
|
|
}
|
|
#endif /* CHECK_MEMORY */
|
|
/*End XB*/
|
|
/**************************************************************************/
|
|
/* XB 02/06/99 */
|
|
#ifndef FINAL_VERSION
|
|
unsigned long GAM_fn_ulGetUsedStaticMemory(void)
|
|
{
|
|
return Mmg_M_GetUsedStaticMemory(Game);
|
|
}
|
|
#endif /* FINAL_VERSION */
|
|
/* End XB 02/06/99 */
|
|
/**************************************************************************/
|
|
#if !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS)
|
|
void GAM_PrintAllUsedStaticMemory(void)
|
|
{
|
|
/* MR0310 (anti-bug...)*/
|
|
#if !defined(U64)
|
|
/* if (SNA_fn_ucGetLoadType()!=SNA_LOAD_SNAPSHOT)*/
|
|
{
|
|
AI_PrintUsedStaticMemory();
|
|
/*BIN_fn_vPrintUsedStaticMemory();*/
|
|
#ifndef U64
|
|
FON_PrintUsedStaticMemory();
|
|
#endif
|
|
GAM_PrintUsedStaticMemory();
|
|
GEO_PrintUsedStaticMemory();
|
|
GLD_PrintUsedStaticMemory();
|
|
IPT_PrintUsedStaticMemory();
|
|
/* FBF {*/
|
|
/* MNU_PrintUsedStaticMemory();*/
|
|
/* FBF }*/
|
|
POS_fn_vPrintUsedStaticMemory();
|
|
RND_PrintUsedStaticMemory();
|
|
SAI_PrintUsedStaticMemory();
|
|
Scr_PrintUsedStaticMemory();
|
|
SND_PrintUsedStaticMemory();
|
|
TMP_PrintUsedStaticMemory();
|
|
}
|
|
#else /* U64 */
|
|
g_ulTotalMemoryUsed=0;
|
|
g_ulTotalMemoryAllocated=0;
|
|
osSyncPrintf(("------------> GAM <------------\n"));
|
|
GAM_PrintUsedStaticMemory();
|
|
osSyncPrintf(("------------> GEO <------------\n"));
|
|
GEO_PrintUsedStaticMemory();
|
|
osSyncPrintf(("------------> AI <------------\n"));
|
|
AI_PrintUsedStaticMemory();
|
|
osSyncPrintf(("------------> INO <------------\n"));
|
|
INO_PrintUsedStaticMemory();
|
|
osSyncPrintf(("------------> IPT <------------\n"));
|
|
IPT_PrintUsedStaticMemory();
|
|
osSyncPrintf(("------------> FON <------------\n"));
|
|
FON_PrintUsedStaticMemory();
|
|
osSyncPrintf(("------------> SAI <------------\n"));
|
|
SAI_PrintUsedStaticMemory();
|
|
osSyncPrintf(("------------> RND <------------\n"));
|
|
RND_PrintUsedStaticMemory();
|
|
osSyncPrintf(("------------> TMP <------------\n"));
|
|
TMP_PrintUsedStaticMemory();
|
|
osSyncPrintf(("------------> SND <------------\n"));
|
|
SND_PrintUsedStaticMemory();
|
|
osSyncPrintf("--> Total = %ld bytes used / %ld bytes allocated (lost %ld bytes)\n",
|
|
g_ulTotalMemoryUsed,
|
|
g_ulTotalMemoryAllocated,
|
|
g_ulTotalMemoryAllocated-g_ulTotalMemoryUsed);
|
|
LDR_fn_vPrintMemoryMapping();
|
|
#endif /*U64 */
|
|
}
|
|
#endif /* !defined(RETAIL) || defined(FINAL_VERSION_FOR_TESTERS) */
|
|
/**************************************************************************/
|
|
#if !defined(U64) && !defined(RETAIL)
|
|
/* Modif GuS 08/08/98 : binarisation des scripts.*/
|
|
SCR_tde_Anl_ReturnValue fn_eScriptCallBackMemoryDescription(SCR_tdst_File_Description *_p_stFile,char *_p_szName,char *_ap_szParams[],SCR_tde_Anl_Action _eAction)
|
|
{
|
|
SCR_tde_Anl_ReturnValue eReturnValue = SCR_ERV_Anl_NormalReturn;
|
|
static int iFirst=0;
|
|
static void *vTab[50];
|
|
static short wNbMalloc=0;
|
|
_p_stFile=_p_stFile;
|
|
|
|
if ( M_IsTitle )
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteNoParamEntryToCurrentDscFile( SNA_C_ul_MemoryDescTitle );
|
|
|
|
if (M_IsEntry)
|
|
{
|
|
if (M_ActionIs(C_Entry_GAM_FixMemory))
|
|
{
|
|
Mmg_M_InitBlock(Game,E_ucGameFixMemory,(unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
GAM_fn_vSetGameMemoryInFix();
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_GAMFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_GAM_LevelMemory))
|
|
{
|
|
if((iFirst<2)||(SNA_fn_ucGetLoadType()==SNA_LOAD_SCRIPT))
|
|
Mmg_M_InitBlock(Game,E_ucGameLevelMemory,(unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
if(iFirst>0)
|
|
GAM_fn_vSetGameMemoryInLevel();
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_GAMLevelMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_FontMemory))
|
|
{
|
|
M_CheckScriptParamNumber(1);
|
|
FON_fn_vFirstInitFONMemory((unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_FontMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_SAIFixMemory))
|
|
{
|
|
SAI_fn_vInitFixMemory((unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
SAI_fn_vSAIUseFixMemory();
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_SAIFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_SAILevelMemory))
|
|
{
|
|
SAI_fn_vInitLevelMemory((unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
SAI_fn_vSAIUseLevelMemory();
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_SAILevelMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_TMPFixMemory))
|
|
{
|
|
TMP_fn_vCreateFixMemory((unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_TMPFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_AIFixMemory))
|
|
{
|
|
fn_vInitAIFixMemory((unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
AI_fn_vAIUseFixMemory();
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_AIFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_AIMemory))
|
|
{
|
|
if((iFirst<2)||(SNA_fn_ucGetLoadType()==SNA_LOAD_SCRIPT))
|
|
fn_vInitAILevelMemory((unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
AI_fn_vAIUseLevelMemory();
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_AILevelMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_ACPTextMemory))
|
|
{
|
|
GEO_xCreateMemoryChannel(0,(unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_ACPTextMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_ACPFixMemory))
|
|
{
|
|
GEO_xCreateMemoryChannel(ACP_FixMemoryChannel,(unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
GEO_xSelectMemoryChannel(ACP_FixMemoryChannel);
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_ACPFixMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_ACPLevelMemory))
|
|
{
|
|
if((iFirst<2)||(SNA_fn_ucGetLoadType()==SNA_LOAD_SCRIPT))
|
|
GEO_xCreateMemoryChannel(ACP_LevelMemoryChannel,(unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
if(iFirst>0)
|
|
GEO_xSelectMemoryChannel(ACP_LevelMemoryChannel);
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_ACPLevelMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_POSMemory))
|
|
{
|
|
POS_fn_vInitPosMemory((unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_PositionMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
else if (M_ActionIs(C_Entry_ScriptMemory))
|
|
{
|
|
g_SCR_a9MemTable[fn_lAToI(_ap_szParams[0])] = fn_lAToI(_ap_szParams[1]);
|
|
SCR_fn_v_Mem_InitWithMemLevel(g_SCR_a9MemTable);
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
{
|
|
SNA_fn_vWrite2LongEntryToCurrentDscFile
|
|
(
|
|
SNA_C_ul_ScriptMemory,
|
|
(unsigned long)fn_lAToI(_ap_szParams[0]),
|
|
(unsigned long)fn_lAToI(_ap_szParams[1])
|
|
);
|
|
}
|
|
}
|
|
#ifdef D_USE_LIPSYNC
|
|
else if (M_ActionIs(C_Entry_LipsSynchMemory)) /* MR0912*/
|
|
{
|
|
LSY_fn_vFirstInitLSYMemory((unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
}
|
|
#endif /* D_USE_LIPSYNC*/
|
|
else if (M_ActionIs(C_Entry_IPTMemory))
|
|
{
|
|
IPT_fn_vInitMemory((unsigned long)fn_lAToI(_ap_szParams[0]));
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteLongEntryToCurrentDscFile ( SNA_C_ul_IPTMemory, (unsigned long)fn_lAToI(_ap_szParams[0]) );
|
|
}
|
|
/* For BIN*/
|
|
else if (M_ActionIs(C_Entry_UseMemorySnapshot)) /* MR0309*/
|
|
{
|
|
/*g_bMemorySnapshot=TRUE;*/
|
|
/*SNA_fn_vSetLoadType(SNA_LOAD_SNAPSHOT);*/
|
|
SNA_fn_vSetLoadType((unsigned char)fn_lAToI(_ap_szParams[0]));
|
|
}
|
|
else if (M_ActionIs("Gap")) /* MR0309*/
|
|
{
|
|
vTab[wNbMalloc]=malloc((unsigned long)atol(_ap_szParams[0]));
|
|
wNbMalloc++;
|
|
}
|
|
/* For BIN End*/
|
|
else
|
|
M_GameInformationError(E_uwGameScriptCallBackDescriptionUnknownAction);
|
|
}
|
|
else if ( M_IsEnd )
|
|
{
|
|
int i;
|
|
for(i=0;i<wNbMalloc;i++)
|
|
{
|
|
free(vTab[i]);
|
|
}
|
|
wNbMalloc=0;
|
|
iFirst++;
|
|
if( (iFirst>1)&&(SNA_fn_ucGetLoadType()==SNA_LOAD_SNAPSHOT) )
|
|
{
|
|
AI_fn_vAIUseLevelMemory();
|
|
GEO_xSelectMemoryChannel(ACP_LevelMemoryChannel);
|
|
GAM_fn_vSetGameMemoryInLevel();
|
|
}
|
|
|
|
if ( SNA_M_bTestSaveGameMemDesc() )
|
|
SNA_fn_vWriteNoParamEntryToCurrentDscFile ( SNA_C_ulEndOfDescSection );
|
|
}
|
|
|
|
return(eReturnValue);
|
|
}
|
|
#endif /* U64 */
|
|
|
|
/**************************************************************************/
|