00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef LUMIERA_ERROR_H
00022 #define LUMIERA_ERROR_H
00023
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #elif 0
00027 }
00028 #endif
00029
00030 #include <nobug.h>
00031 #include <stdlib.h>
00032
00038 typedef const char* lumiera_err;
00039
00044 #define LUMIERA_DIE(err) \
00045 do { NOBUG_ERROR(NOBUG_ON, "Fatal Error: %s ", strchr(LUMIERA_ERROR_##err, ':')); abort(); } while(0)
00046
00052 #define LUMIERA_ERROR_DECLARE(err) \
00053 extern lumiera_err LUMIERA_ERROR_##err
00054
00061 #define LUMIERA_ERROR_DEFINE(err, msg) \
00062 lumiera_err LUMIERA_ERROR_##err = "LUMIERA_ERROR_" #err ":" msg
00063
00072 #define LUMIERA_ERROR_SET(flag, err, extra) \
00073 do { \
00074 const char* theextra = extra; \
00075 ERROR (flag, "%s%s%s", strchr(LUMIERA_ERROR_##err, ':')+1, theextra?": ":"", theextra?theextra:""); \
00076 lumiera_error_set(LUMIERA_ERROR_##err, theextra); \
00077 } while (0)
00078
00087 #define LUMIERA_ERROR_SET_ALERT(flag, err, extra) \
00088 do { \
00089 const char* theextra = extra; \
00090 ALERT (flag, "%s%s%s", strchr(LUMIERA_ERROR_##err, ':')+1, theextra?": ":"", theextra?theextra:""); \
00091 lumiera_error_set(LUMIERA_ERROR_##err, theextra); \
00092 } while (0)
00093
00102 #define LUMIERA_ERROR_SET_CRITICAL(flag, err, extra) \
00103 do { \
00104 const char* theextra = extra; \
00105 CRITICAL (flag, "%s%s%s", strchr(LUMIERA_ERROR_##err, ':')+1, theextra?": ":"", theextra?theextra:"");\
00106 lumiera_error_set(LUMIERA_ERROR_##err, theextra); \
00107 } while (0)
00108
00117 #define LUMIERA_ERROR_SET_WARNING(flag, err, extra) \
00118 do { \
00119 const char* theextra = extra; \
00120 WARN (flag, "%s%s%s", strchr(LUMIERA_ERROR_##err, ':')+1, theextra?": ":"", theextra?theextra:""); \
00121 lumiera_error_set(LUMIERA_ERROR_##err, theextra); \
00122 } while (0)
00123
00132 lumiera_err
00133 lumiera_error_set (lumiera_err nerr, const char* extra);
00134
00139 const char*
00140 lumiera_error_extra (void);
00141
00148 lumiera_err
00149 lumiera_error (void);
00150
00151
00159 lumiera_err
00160 lumiera_error_peek (void);
00161
00162
00170 int
00171 lumiera_error_expect (lumiera_err expected);
00172
00173
00174
00175
00176
00177 LUMIERA_ERROR_DECLARE (ERRNO);
00178 LUMIERA_ERROR_DECLARE (UNKNOWN);
00179
00180 #ifdef __cplusplus
00181 }
00182 #endif
00183 #endif