haiku/headers/private/graphics/common/debug_ext.h
Ingo Weinhold 758b1d0e05 Fixes that make Haiku build with gcc 4. Mainly out of the following
categories:
* Missing includes (like <stdlib.h> and <string.h>).
* Linking against $(TARGET_LIBSTDC++) instead of libstdc++.r4.so.
* Local variables shadowing parameters.
* Default parameters in function definitions (as opposed to function
  declarations).
* All C++ stuff (nothrow, map, set, vector, min, max,...) must be imported
  explicitly from the std:: namespace now.
* "new (sometype)[...]" must read "new sometype[...]", even if sometype is
  something like "const char *".
* __FUNCTION__ is no longer a string literal (but a string expression), i.e.
  'printf(__FUNCTION__ ": ...\n")' is invalid code.
* A type cast results in a non-lvalue. E.g. "(char *)buffer += bytes"
  is an invalid expression.
* "friend class SomeClass" only works when SomeClass is known before.
  Otherwise the an inner class with that name is considered as friend.
  gcc 4 is much pickier about scopes.
* gcc 4 is generally stricter with respect to type conversions in C.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14878 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-12 23:27:14 +00:00

109 lines
3.0 KiB
C

/*
Copyright (c) 2002, Thomas Kurschel
Part of Radeon driver
Extended debugging functions
*/
#ifndef __DEBUG_EXT_H__
#define __DEBUG_EXT_H__
// this is a dprintf wrapper
//
// there are three kinds of messages:
// flow: used to trace execution
// info: tells things that are important but not an error
// error: used if something has gone wrong
//
// common usage is
// SHOW_{FLOW,INFO,ERROR}( seriousness, format string, parameters... );
// SHOW_{FLOW,INFO,ERROR}0( seriousness, string );
//
// with
// seriousness: the smaller the more serious (0..3)
// format string, parameters: normal printf stuff
//
// to specify the module that created the message you have
// to define a string called
// DEBUG_MSG_PREFIX
// you dynamically speficify the maximum seriousness level by defining
// the following variables/macros
// debug_level_flow
// debug_level_info
// debug_level_error
//
// you _can_ statically specify the maximum seriuosness level by defining
// DEBUG_MAX_LEVEL_FLOW
// DEBUG_MAX_LEVEL_INFO
// DEBUG_MAX_LEVEL_ERRROR
//
// you _can_ ask to delay execution after each printed message
// by defining the duration (in ms) via
// DEBUG_WAIT_ON_MSG (for flow and info)
// DEBUG_WAIT_ON_ERROR (for error)
#ifdef DEBUG_WAIT_ON_MSG
#define DEBUG_WAIT snooze( DEBUG_WAIT_ON_MSG );
#else
#define DEBUG_WAIT
#endif
#ifdef DEBUG_WAIT_ON_ERROR
#define DEBUG_WAIT_ERROR snooze( DEBUG_WAIT_ON_ERROR );
#else
#define DEBUG_WAIT_ERROR
#endif
#ifndef DEBUG_MAX_LEVEL_FLOW
#define DEBUG_MAX_LEVEL_FLOW 4
#endif
#ifndef DEBUG_MAX_LEVEL_INFO
#define DEBUG_MAX_LEVEL_INFO 4
#endif
#ifndef DEBUG_MAX_LEVEL_ERROR
#define DEBUG_MAX_LEVEL_ERROR 4
#endif
#ifndef DEBUG_MSG_PREFIX
#error you need to define DEBUG_MSG_PREFIX with the module name
#endif
#define FUNC_NAME DEBUG_MSG_PREFIX, __FUNCTION__
#define SHOW_FLOW(seriousness, format, param...) \
do { if( seriousness <= debug_level_flow && seriousness <= DEBUG_MAX_LEVEL_FLOW ) { \
dprintf( "%s%s: "format"\n", FUNC_NAME, param ); DEBUG_WAIT \
}} while( 0 )
#define SHOW_FLOW0(seriousness, format) \
do { if( seriousness <= debug_level_flow && seriousness <= DEBUG_MAX_LEVEL_FLOW ) { \
dprintf( "%s%s: "format"\n", FUNC_NAME); DEBUG_WAIT \
}} while( 0 )
#define SHOW_INFO(seriousness, format, param...) \
do { if( seriousness <= debug_level_info && seriousness <= DEBUG_MAX_LEVEL_INFO ) { \
dprintf( "%s%s: "format"\n", FUNC_NAME, param ); DEBUG_WAIT \
}} while( 0 )
#define SHOW_INFO0(seriousness, format) \
do { if( seriousness <= debug_level_info && seriousness <= DEBUG_MAX_LEVEL_INFO ) { \
dprintf( "%s%s: "format"\n", FUNC_NAME); DEBUG_WAIT \
}} while( 0 )
#define SHOW_ERROR(seriousness, format, param...) \
do { if( seriousness <= debug_level_error && seriousness <= DEBUG_MAX_LEVEL_ERROR ) { \
dprintf( "%s%s: "format"\n", FUNC_NAME, param ); DEBUG_WAIT_ERROR \
}} while( 0 )
#define SHOW_ERROR0(seriousness, format) \
do { if( seriousness <= debug_level_error && seriousness <= DEBUG_MAX_LEVEL_ERROR ) { \
dprintf( "%s%s: "format"\n", FUNC_NAME); DEBUG_WAIT_ERROR \
}} while( 0 )
#endif