This commit is contained in:
parent
bf05f15626
commit
af942304af
2 changed files with 419 additions and 0 deletions
300
source/system/dbg.cpp
Normal file
300
source/system/dbg.cpp
Normal file
|
@ -0,0 +1,300 @@
|
||||||
|
/*=========================================================================
|
||||||
|
|
||||||
|
dbg.cpp
|
||||||
|
|
||||||
|
Author: PKG
|
||||||
|
Created:
|
||||||
|
Project:
|
||||||
|
Purpose:
|
||||||
|
|
||||||
|
Copyright (c) 2000 Climax Development Ltd
|
||||||
|
|
||||||
|
===========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Includes
|
||||||
|
-------- */
|
||||||
|
|
||||||
|
#include "dbg.h"
|
||||||
|
|
||||||
|
#ifdef DBG_ACTIVE
|
||||||
|
|
||||||
|
#ifndef __SYSTEM_VSPRINTF_H__
|
||||||
|
#include "system\vsprintf.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Std Lib
|
||||||
|
------- */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* Data
|
||||||
|
---- */
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Tyepdefs && Defines
|
||||||
|
------------------- */
|
||||||
|
|
||||||
|
#ifdef __USER_charles__
|
||||||
|
#define DBG_OUTPUT_TO_DEBUGGER // Send output to the debugger console
|
||||||
|
#define DBG_OUTPUT_TO_LOG // Allow logging of messages
|
||||||
|
#define DBG_MAX_MESSAGE_LENGTH 256 // Max length of a message in the log
|
||||||
|
#define DBG_LOG_LINES 10 // Number of lines to log
|
||||||
|
#define DBG_SHOW_MESSAGE_ORIGIN // Pre-pend filename and line number to messages
|
||||||
|
#define DBG_FILENAME_LENGTH 16 // This many chars of the filename are used
|
||||||
|
#define DBG_DEFAULT_CHANNEL DC_CHARLES|DC_ALL_SYSTEM // Default channels to listen to
|
||||||
|
#elif __USER_dave__
|
||||||
|
#define DBG_OUTPUT_TO_DEBUGGER // Send output to the debugger console
|
||||||
|
#define DBG_OUTPUT_TO_LOG // Allow logging of messages
|
||||||
|
#define DBG_MAX_MESSAGE_LENGTH 256 // Max length of a message in the log
|
||||||
|
#define DBG_LOG_LINES 10 // Number of lines to log
|
||||||
|
#define DBG_SHOW_MESSAGE_ORIGIN // Pre-pend filename and line number to messages
|
||||||
|
#define DBG_FILENAME_LENGTH 16 // This many chars of the filename are used
|
||||||
|
#define DBG_DEFAULT_CHANNEL DC_DAVE|DC_ALL_SYSTEM // Default channels to listen to
|
||||||
|
#elif __USER_paul__
|
||||||
|
#define DBG_OUTPUT_TO_DEBUGGER // Send output to the debugger console
|
||||||
|
#define DBG_OUTPUT_TO_LOG // Allow logging of messages
|
||||||
|
#define DBG_MAX_MESSAGE_LENGTH 256 // Max length of a message in the log
|
||||||
|
#define DBG_LOG_LINES 10 // Number of lines to log
|
||||||
|
#define DBG_SHOW_MESSAGE_ORIGIN // Pre-pend filename and line number to messages
|
||||||
|
#define DBG_FILENAME_LENGTH 16 // This many chars of the filename are used
|
||||||
|
#define DBG_DEFAULT_CHANNEL DC_PAUL|DC_ALL_SYSTEM // Default channels to listen to
|
||||||
|
#else
|
||||||
|
#define DBG_OUTPUT_TO_DEBUGGER // Send output to the debugger console
|
||||||
|
#define DBG_DEFAULT_CHANNEL DC_ALL // Default channels to listen to
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Structure defintions
|
||||||
|
-------------------- */
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function Prototypes
|
||||||
|
------------------- */
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Vars
|
||||||
|
---- */
|
||||||
|
|
||||||
|
static DEBUG_CHANNEL_FLAG s_activeChannelFlags=(DEBUG_CHANNEL_FLAG)(DBG_DEFAULT_CHANNEL);
|
||||||
|
|
||||||
|
static int s_dbgChannelFlags=DC_NONE;
|
||||||
|
static char s_dbgFilename[DBG_FILENAME_LENGTH+1]="\0";
|
||||||
|
static int s_dbgLine=0;
|
||||||
|
|
||||||
|
#ifdef DBG_OUTPUT_TO_LOG
|
||||||
|
static char s_logLines[DBG_LOG_LINES][DBG_MAX_MESSAGE_LENGTH];
|
||||||
|
static int s_logLineCount=0;
|
||||||
|
static int s_logLinePtr=0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
void __setActiveDbgChannels(DEBUG_CHANNEL_FLAG _channelFlags)
|
||||||
|
{
|
||||||
|
s_activeChannelFlags=_channelFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
DEBUG_CHANNEL_FLAG __getActiveDbgChannels()
|
||||||
|
{
|
||||||
|
return s_activeChannelFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose: Used by the__DBGMSG() macro
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
void __setDbgChannels(DEBUG_CHANNEL_FLAG _channelFlags)
|
||||||
|
{
|
||||||
|
s_dbgChannelFlags=_channelFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose: Used by the__DBGMSG() macro
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
void __setDbgFilenameAndLine(const char *_filename,int _line)
|
||||||
|
{
|
||||||
|
int filenameLength;
|
||||||
|
int start,len;
|
||||||
|
filenameLength=strlen(_filename);
|
||||||
|
if(filenameLength<DBG_FILENAME_LENGTH)
|
||||||
|
{
|
||||||
|
for(int i=0;i<DBG_FILENAME_LENGTH-filenameLength;i++)
|
||||||
|
s_dbgFilename[i]=' ';
|
||||||
|
start=0;
|
||||||
|
len=filenameLength;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
start=strlen(_filename)-DBG_FILENAME_LENGTH;
|
||||||
|
len=DBG_FILENAME_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
strncpy(s_dbgFilename+DBG_FILENAME_LENGTH-len,_filename+start,len);
|
||||||
|
s_dbgLine=_line;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
void __writeDbgMessage(const char *_format,...)
|
||||||
|
{
|
||||||
|
if(s_dbgChannelFlags&s_activeChannelFlags)
|
||||||
|
{
|
||||||
|
char messageBuffer[DBG_MAX_MESSAGE_LENGTH+1];
|
||||||
|
__va_list va;
|
||||||
|
int start;//,len;
|
||||||
|
|
||||||
|
__va_start(va,_format);
|
||||||
|
#ifdef DBG_SHOW_MESSAGE_ORIGIN
|
||||||
|
sprintf(messageBuffer,"%s:%04d ",s_dbgFilename,s_dbgLine);
|
||||||
|
start=strlen(messageBuffer);
|
||||||
|
// len=DBG_MAX_MESSAGE_LENGTH-start;
|
||||||
|
#else
|
||||||
|
start=0;
|
||||||
|
// len=DBG_MAX_MESSAGE_LENGTH;
|
||||||
|
#endif
|
||||||
|
__vsprintf(messageBuffer+start,_format,va);
|
||||||
|
__va_end(va);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DBG_OUTPUT_TO_DEBUGGER
|
||||||
|
printf("%s\n",messageBuffer);
|
||||||
|
#endif
|
||||||
|
#ifdef DBG_OUTPUT_TO_LOG
|
||||||
|
strncpy(s_logLines[s_logLinePtr],messageBuffer,DBG_MAX_MESSAGE_LENGTH);
|
||||||
|
s_logLinePtr=(s_logLinePtr+1)%DBG_LOG_LINES;
|
||||||
|
if(s_logLineCount<DBG_LOG_LINES)s_logLineCount++;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
int __getNumberOfDbgLinesInLog()
|
||||||
|
{
|
||||||
|
#ifdef DBG_OUTPUT_TO_LOG
|
||||||
|
return s_logLineCount;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Function:
|
||||||
|
Purpose:
|
||||||
|
Params:
|
||||||
|
Returns:
|
||||||
|
---------------------------------------------------------------------- */
|
||||||
|
char *__getDbgLineFromLog(int _line)
|
||||||
|
{
|
||||||
|
#ifdef DBG_OUTPUT_TO_LOG
|
||||||
|
return s_logLines[_line];
|
||||||
|
#else
|
||||||
|
return "Damn fool..";
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define OnScreenDebug
|
||||||
|
#include "gfx\font.h"
|
||||||
|
#include "system\vid.h"
|
||||||
|
#include "gfx\prim.h"
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
void DoAssert( const char * Txt, const char * file, const int line )
|
||||||
|
{
|
||||||
|
printf( "%s", Txt );
|
||||||
|
|
||||||
|
#ifdef OnScreenDebug
|
||||||
|
|
||||||
|
FontBank F;
|
||||||
|
char Text[2048];
|
||||||
|
|
||||||
|
|
||||||
|
sprintf( Text, "%s\nLine %d in %s", Txt, line, file );
|
||||||
|
|
||||||
|
F.initialise( &standardFont );
|
||||||
|
F.setJustification( FontBank::JUST_CENTRE );
|
||||||
|
F.setOt( 0 );
|
||||||
|
|
||||||
|
ClearNTag(OtPtr, MAX_OT);
|
||||||
|
F.print( (512 >> 1), (256 >> 1), Text );
|
||||||
|
|
||||||
|
VSync(0);
|
||||||
|
VidSwapDraw();
|
||||||
|
PrimDisplay();
|
||||||
|
while(DrawSync(1));
|
||||||
|
|
||||||
|
ClearNTag(OtPtr, MAX_OT);
|
||||||
|
F.print( (512 >> 1), (256 >> 1), Text );
|
||||||
|
|
||||||
|
VSync(0);
|
||||||
|
VidSwapDraw();
|
||||||
|
PrimDisplay();
|
||||||
|
while(DrawSync(1));
|
||||||
|
|
||||||
|
F.dump();
|
||||||
|
|
||||||
|
#endif
|
||||||
|
PSYQpause();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
void DbgPollHost()
|
||||||
|
{
|
||||||
|
#if !defined(__USER_ART__)
|
||||||
|
#if __FILE_SYSTEM__==PC
|
||||||
|
pollhost();
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* DBG_ACTIVE */
|
||||||
|
|
||||||
|
/*===========================================================================
|
||||||
|
end */
|
||||||
|
|
119
source/system/dbg.h
Normal file
119
source/system/dbg.h
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
/*=========================================================================
|
||||||
|
|
||||||
|
dbg.h
|
||||||
|
|
||||||
|
Author: PKG
|
||||||
|
Created:
|
||||||
|
Project:
|
||||||
|
Purpose:
|
||||||
|
|
||||||
|
Copyright (c) 2000 Climax Development Ltd
|
||||||
|
|
||||||
|
===========================================================================*/
|
||||||
|
|
||||||
|
#ifndef __SYSTEM_DBG_H__
|
||||||
|
#define __SYSTEM_DBG_H__
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Includes
|
||||||
|
-------- */
|
||||||
|
|
||||||
|
/* Std Lib
|
||||||
|
------- */
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Tyepdefs && Defines
|
||||||
|
------------------- */
|
||||||
|
|
||||||
|
// Allow debug messaging
|
||||||
|
#if defined(__VERSION_DEBUG__)
|
||||||
|
#define DBG_ACTIVE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// Available channels
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
DC_CHARLES =1<<0,
|
||||||
|
DC_DAVE =1<<1,
|
||||||
|
DC_PAUL =1<<2,
|
||||||
|
|
||||||
|
DC_SYSTEM =1<<3,
|
||||||
|
DC_SOUND =1<<4,
|
||||||
|
|
||||||
|
|
||||||
|
DC_NONE =0,
|
||||||
|
DC_ALL =-1,
|
||||||
|
DC_ALL_SYSTEM =DC_SYSTEM|DC_SOUND,
|
||||||
|
|
||||||
|
} DEBUG_CHANNEL_FLAG;
|
||||||
|
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Structure defintions
|
||||||
|
-------------------- */
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Globals
|
||||||
|
------- */
|
||||||
|
|
||||||
|
/*----------------------------------------------------------------------
|
||||||
|
Functions
|
||||||
|
--------- */
|
||||||
|
|
||||||
|
#ifdef DBG_ACTIVE
|
||||||
|
void __setActiveDbgChannels(DEBUG_CHANNEL_FLAG _channelFlags);
|
||||||
|
DEBUG_CHANNEL_FLAG __getActiveDbgChannels();
|
||||||
|
|
||||||
|
void __setDbgChannels(DEBUG_CHANNEL_FLAG _channelFlags);
|
||||||
|
void __setDbgFilenameAndLine(const char *_filename,int _line);
|
||||||
|
void __writeDbgMessage(const char *_format,...);
|
||||||
|
|
||||||
|
int __getNumberOfDbgLinesInLog();
|
||||||
|
char *__getDbgLineFromLog(int _line);
|
||||||
|
|
||||||
|
#define __DBGMSG(channel) __setDbgChannels(channel);__setDbgFilenameAndLine(__FILE__,__LINE__);__writeDbgMessage
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DBG_ACTIVE
|
||||||
|
#define CHARLES_DBGMSG __DBGMSG(DC_CHARLES)
|
||||||
|
#define DAVE_DBGMSG __DBGMSG(DC_DAVE)
|
||||||
|
#define PAUL_DBGMSG __DBGMSG(DC_PAUL)
|
||||||
|
#define SYSTEM_DBGMSG __DBGMSG(DC_SYSTEM)
|
||||||
|
#define SOUND_DBGMSG __DBGMSG(DC_SOUND)
|
||||||
|
|
||||||
|
#define setActiveDbgChannels(_channelFlags) __setActiveDbgChannels(_channelFlags)
|
||||||
|
#define getActiveDbgChannels() __getActiveDbgChannels()
|
||||||
|
|
||||||
|
#define getNumberOfDbgLinesInLog() __getNumberOfDbgLinesInLog()
|
||||||
|
#define getDbgLineFromLog(_line) __getDbgLineFromLog(_line)
|
||||||
|
|
||||||
|
void DbgPollHost();
|
||||||
|
void DoAssert(const char * Txt, const char * file, const int line);
|
||||||
|
#define ASSERT(x) if (!(x)) DoAssert(#x,__FILE__,__LINE__);
|
||||||
|
#else
|
||||||
|
#define CHARLES_DBGMSG ;
|
||||||
|
#define DAVE_DBGMSG ;
|
||||||
|
#define PAUL_DBGMSG ;
|
||||||
|
#define SYSTEM_DBGMSG ;
|
||||||
|
#define SOUND_DBGMSG ;
|
||||||
|
|
||||||
|
#define setActiveDbgChannels(_channelFlags) ;
|
||||||
|
#define getActiveDbgChannels() ;
|
||||||
|
|
||||||
|
#define getNumberOfDbgLinesInLog() 0
|
||||||
|
#define getDbgLineFromLog(_line) NULL
|
||||||
|
|
||||||
|
#define ASSERT(x) ;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#endif /* __SYSTEM_DBG_H__ */
|
||||||
|
|
||||||
|
/*===========================================================================
|
||||||
|
end */
|
Loading…
Add table
Add a link
Reference in a new issue