//////////////////////////////////////////
// ToolBoxDebug - Debugging assistance  //
//////////////////////////////////////////


#ifndef TOOL_BOX_DEBUG_SETTINGS_HEADER
#define TOOL_BOX_DEBUG_SETTINGS_HEADER

// All available TBD_CLASS_TYPEs
//enum TBD_CLASS_TYPE { TBDCT_NULL = 0, TBDCT_ALL, TBDCT_ALL_FUNCTIONS, TBDCT_ALL_MEMORY, /*TBDCT_TEST_FUNCTIONS,*/ TBDCT_LAST };
enum TBD_CLASS_TYPE { TBDCT_NULL = 0, TBDCT_ALL, TBDCT_ALL_FUNCTIONS, TBDCT_ALL_MEMORY, TBDCT_INFO, TBDCT_READ, TBDCT_LAST };

#ifdef TBD_DEBUG

#define TBD_OUTPUT_FILE_MAX_SIZE	100000000

#define TBD_OUTPUT_FILE_NAME_TBD	TEXT("ToolBoxDebug.txt")
#define TBD_OUTPUT_TITLE_TBD		TEXT("ToolBoxDebug")

// Optional output-prefix
#ifdef UNDER_CE
#define TBD_OUTPUT_TITLE			TEXT("swipsa ce")
#else // UNDER_CE
#define TBD_OUTPUT_TITLE			TEXT("swipsa")
#endif // UNDER_CE

// Optional output file name
#ifdef UNDER_CE
    #define TBD_OUTPUT_FILE_NAME	TEXT("swipsace.txt")
#else
    #define TBD_OUTPUT_FILE_NAME	TEXT("swipsa.txt")
#endif

#if defined (DEBUG) || defined (_DEBUG)
	// Optionally use MessageBeep and MessageBox when asserts fire
	#define ASSERT_USES_MESSAGExxx 1
#elif defined (NDEBUG)
	#define ASSERT_USES_MESSAGExxx 0
#else
	#define ASSERT_USES_MESSAGExxx 0
#endif

// User-configurable settings (of type bool)
// Send output to a file
#define TBD_OUTPUT_TO_FILE true
// Send output to the debugger
#define TBD_OUTPUT_TO_DEBUG false
// Display the current date and time in the output header
#define TBD_OUTPUT_DATE_TIME_IN_HEADER true
// Display thread IDs in output
#define TBD_OUTPUT_THREAD_ID true
// Display system tick-count in output
#define TBD_OUTPUT_TICK_COUNT false
// Use message boxes when TBD_ASSERT fires
#define TBD_USE_ASSERT_UI true
// Call DebugBreak() when an TBD_ASSERT fires (ignored if (TBD_USE_ASSERT_UI == true))
#define TBD_ASSERTS_BREAK_INTO_DEBUGGER true

// REQUIRED strings for TBD_CLASS_TYPEs
extern const TCHAR* psClassTypeNames[];

// REQUIRED TBD_CLASS_TYPEs
extern const TBD_CLASS_TYPE TBDC_NULL[];
extern const TBD_CLASS_TYPE TBDC_ALL[];
extern const TBD_CLASS_TYPE TBDC_ALL_FUNCTIONS[];
extern const TBD_CLASS_TYPE TBDC_ALL_MEMORY[];

// Custom TBD_CLASS_TYPEs
// extern const TBD_CLASS_TYPE TBDC_TEST_FUNCTIONS[];

// TBD_CLASS_TYPE hierarchy
extern const TBD_CLASS_TYPE* tbdcHierarchy[];

#endif // TBD_DEBUG

#endif // TOOL_BOX_DEBUG_SETTINGS_HEADER
