1 /*
2  * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
3  *
4  * This software may be freely used, copied, modified, and distributed
5  * provided that the above copyright notice is preserved in all copies of the
6  * software.
7  */
8 
9 /* -*-C-*-
10  *
11  * $Revision: 1.3 $
12  *     $Date: 2004/12/27 14:00:54 $
13  *
14  *
15  * logging.h - methods for logging warnings, errors and trace info
16  */
17 
18 #ifndef angel_logging_h
19 #define angel_logging_h
20 
21 #include <stdarg.h>
22 
23 /*
24  * __rt_warning
25  * ------------
26  * Provides a standard method of generating run-time system
27  * warnings. The actual action taken by this code can be board or
28  * target application specific, e.g. internal logging, debug message,
29  * etc.
30  */
31 extern void __rt_warning(char *format, ...);
32 
33 /*---------------------------------------------------------------------------*/
34 
35 /*
36  * __rt_error
37  * ----------
38  * Raise an internal Angel error. The parameters are passed directly
39  * to "__rt_warning" for display, and the code then raises a debugger
40  * event and stops the target processing.
41  */
42 extern void __rt_error(char *format, ...);
43 
44 /*
45  * Some macros for debugging and warning messages
46  */
47 
48 typedef enum WarnLevel {
49     WL_TRACE,
50     WL_WARN,
51     WL_ERROR
52 } WarnLevel;
53 
54 void va_warn(WarnLevel level, char *format, va_list args);
55 
56 #ifdef _WINGDI_
57 /* stupidity in MSVC <wingdi.h> (in <windows.h> in <winsock.h>) */
58 # undef ERROR
59 #endif
60 
61 #ifndef ERROR
62 # define ERROR_FORMAT "Error \"%s\" in %s at line %d\n"
63 # define ERROR(e) __rt_error(ERROR_FORMAT, (e), __FILE__, __LINE__)
64 #endif
65 
66 #ifndef ASSERT
67 # ifdef ASSERTIONS_ENABLED
68 #   define ASSERT(x, y) ((x) ? (void)(0) : ERROR((y)))
69 # else
70 #   define ASSERT(x, y) ((void)(0))
71 # endif
72 #endif
73 
74 #ifndef WARN
75 # ifdef ASSERTIONS_ENABLED
76 #   define WARN_FORMAT "Warning \"%s\" in %s at line %d\n"
77 #   define WARN(w) __rt_warning(WARN_FORMAT, (w), __FILE__, __LINE__)
78 # else
79 #   define WARN(w) ((void)(0))
80 # endif
81 #endif
82 
83 
84 #ifdef NO_INFO_MESSAGES
85 # define __rt_info (void)
86 # ifndef INFO
87 #   define INFO(w)
88 # endif
89 #else
90 # define __rt_info __rt_warning
91 # ifndef INFO
92 #  ifdef DEBUG
93 #   define INFO(w) __rt_warning("%s\n", (w))
94 #  else
95 #   define INFO(w) ((void)(0))
96 #  endif
97 # endif
98 #endif
99 
100 
101 #if defined(DEBUG) && !defined(NO_IDLE_CHITCHAT)
102 # ifndef DO_TRACE
103 #   define DO_TRACE (1)
104 # endif
105 #endif
106 
107 #ifdef DO_TRACE
108 extern void __rt_trace(char *format, ...);
109 #endif
110 
111 #ifndef TRACE
112 # ifdef DO_TRACE
113 #   define TRACE(w) __rt_trace("%s ", (w))
114 # else
115 #   define TRACE(w) ((void)(0))
116 # endif
117 #endif
118 
119 #endif /* ndef angel_logging_h */
120 
121 /* EOF logging.h */
122