61a14112f9915b93d3cf095a5884298df054cd59
[apps/madmutt.git] / lib / debug.h
1 /*
2  * written for mutt-ng by:
3  * Rocco Rutte <pdmef@cs.tu-berlin.de>
4  *
5  * This file is part of mutt-ng, see http://www.muttng.org/.
6  * It's licensed under the GNU General Public License,
7  * please see the file GPL in the top level source directory.
8  */
9
10 /* generic interface for debug messages */
11
12 #ifndef _LIB_DEBUG_H
13 #define _LIB_DEBUG_H
14
15 #include <stdio.h>
16
17 #define DEBUG_MIN_LEVEL         1
18 #define DEBUG_MIN_LEVEL_S       "1"
19 #define DEBUG_MAX_LEVEL         5
20 #define DEBUG_MAX_LEVEL_S       "5"
21
22 #ifdef DEBUG
23
24 extern short DebugLevel;
25 extern FILE* DebugFile;
26
27 void debug_setlevel (short);
28 void debug_start (const char*);
29
30 void _debug_print_intro (const char*, int, const char*, int);
31 void _debug_print_msg (const char*, ...);
32
33 /*
34  * the debug_print() macro will (in the end) print debug messages of the
35  * following format:
36  *
37  *      (file:line:function:level): message
38  *
39  * for GCC and:
40  *
41  *      (file:line:level): message
42  *
43  * otherwise
44  */
45 #ifdef __GNUC__
46 #define debug_print(level,msg) do { \
47   if (DebugLevel >= level) { \
48     _debug_print_intro (__FILE__,__LINE__,__FUNCTION__,level); \
49     _debug_print_msg msg; \
50   } \
51 } while(0)
52 #else /* __GNUC__ */
53 #define debug_print(level,msg) do { \
54   if (DebugLevel >= level) { \
55     _debug_print_intro (__FILE__,__LINE__,NULL,level); \
56     _debug_print_msg msg; \
57   } \
58 } while(0)
59 #endif /* !__GNUC__ */
60
61 #else /* DEBUG */
62
63 /*
64  * without debug support, we don't need these
65  * (this also kills the dozens of #ifdef for debug...
66  */
67 #define debug_start(basedir)
68 #define debug_setlevel(level)
69 #define debug_print(level,msg)
70
71 #endif /* !DEBUG */
72
73 #endif /* !_LIB_DEBUG_H */