reman3/Rayman_X/cpa/tempgrp/ldt/Src/Error.c

103 lines
3.0 KiB
C

/*------------------------------------------------------------------------------
FILE : Error.c
CREATED : 98/09/02
AUTHOR : Catalin Cocos
CONTENTS: LDT Error management
------------------------------------------------------------------------------*/
#include "StdInc.h"
#include "Error.h"
#include "Parser.h"
char LDT_ErrDesc[LDT_MAX_ERROR_DESCRIPTION +1];
FILE* pErrFile = NULL;
/*------------------------------------------------------------------------------
DESC. : initializes the error log file.
CREATED : 98/09/02
AUTHOR : Catalin Cocos
------------------------------------------------------------------------------*/
void InitErrFile()
{
static int count = 0;
pErrFile = fopen("LDT_ERR.log", count?"a+":"w");
count++;
if(pErrFile)
{
time_t strTime;
struct tm *newtime;
time( &strTime );
newtime = localtime( &strTime );
fprintf(pErrFile, "LDT error log session %u >>> %s \n", count, asctime( newtime ));
}
}
/*------------------------------------------------------------------------------
DESC. : Closes the eror log file
CREATED : 98/09/02
AUTHOR : Catalin Cocos
------------------------------------------------------------------------------*/
void CLoseErrFile()
{
if(pErrFile)
{
fprintf(pErrFile, "\n\n\n");
fclose(pErrFile);
}
pErrFile = NULL;
}
/*------------------------------------------------------------------------------
DESC. : Error treatment
CREATED : 98/09/02
AUTHOR : Catalin Cocos
------------------------------------------------------------------------------*/
void SignalError(int level, LDT_tdst_Link * pLink, int errorcode, char* szErrDesc, char* szSourceFile, int line)
{
char* buff = LDT_ErrDesc;
if(level > LDT_WARNING_LEVEL && level > LDT_ERROR_LEVEL) return;
buff += sprintf( buff,"\n%s\t(Level %u)\n" ,level>LDT_ERROR_LEVEL?"WARNING":"ERROR", level);
buff += sprintf( buff,"\nCODE :\t\t%i (%s)", errorcode, errorcode?"USER":"SYSTEM");
if(szErrDesc)
buff += sprintf( buff,"\nDESCRIPTION:\t%s\n", szErrDesc);
buff += sprintf( buff,"LOCATION:\t");
if(pLink)
{
buff += sprintf( buff,"(%s) ", (pLink->dwFlags & LDT_LF_FILE)?"FILE":"SECTION");
LDT_ComputeSectionName( pLink, buff);
buff+= strlen(buff);
}
else
if( g_FileDesc )
buff += sprintf( buff, "(FILE) %s", g_FileDesc->_pInfoMemFile->pName );
else
buff += sprintf( buff, "No information available" );
buff += sprintf( buff,"\nSOURCE FILE:\t %s\nLINE:\t\t %u\n",szSourceFile, line);
#ifdef LDT_LOG_ERRORS
if(pErrFile )
{
fprintf(pErrFile, LDT_ErrDesc );
fprintf(pErrFile, "\n");
}
#endif
#ifdef LDT_DISPLAY_ERRORS
#ifndef LDT_DISPLAY_WARNINGS
if(level > LDT_ERROR_LEVEL) return;
#endif
sprintf( buff,"\nPress 'Abort' to exit the application, 'Retry' to debug or 'Ignore' to continue.");
switch( MessageBox(NULL, LDT_ErrDesc, "LDT MESSAGE", MB_ABORTRETRYIGNORE |MB_TASKMODAL |MB_TOPMOST |
(level > LDT_ERROR_LEVEL?MB_ICONWARNING|MB_DEFBUTTON3:MB_ICONERROR|MB_DEFBUTTON2)))
{
case IDABORT: exit(errorcode); /* quit the application */
case IDRETRY: /* debug */
__asm
{
int 3h
};
}
#endif
}