00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _WIZARDS_TOOLKIT_EXCEPTION_PRIVATE_H
00019 #define _WIZARDS_TOOLKIT_EXCEPTION_PRIVATE_H
00020
00021 #if defined(__cplusplus) || defined(c_plusplus)
00022 extern "C" {
00023 #endif
00024
00025 #include "wizard/log.h"
00026
00027 #define CatchWizardException(severity,tag,context) \
00028 { \
00029 ExceptionInfo \
00030 *exception; \
00031 \
00032 exception=AcquireExceptionInfo(); \
00033 (void) ThrowWizardException(exception,GetWizardModule(),severity,tag,context); \
00034 CatchException(exception); \
00035 exception=DestroyExceptionInfo(exception); \
00036 }
00037
00038 #if defined(WizardDebug)
00039 #define WizardAssert(domain,predicate) \
00040 { \
00041 assert(predicate); \
00042 }
00043 #else
00044 #define WizardAssert(domain,predicate) \
00045 { \
00046 if ((WizardBooleanType) (predicate) == WizardFalse) \
00047 ThrowWizardFatalError(domain,AssertError); \
00048 }
00049 #endif
00050
00051 #define ThrowFileException(exception,severity,context) \
00052 { \
00053 (void) ThrowWizardException(exception,GetWizardModule(),severity, \
00054 "file exception `%s': %s",context,strerror(errno)); \
00055 }
00056
00057 #define ThrowWizardFatalError(domain,error) \
00058 { \
00059 char \
00060 context[MaxTextExtent], \
00061 tag[MaxTextExtent]; \
00062 \
00063 (void) FormatWizardString(tag,MaxTextExtent,"%ld\n",(long) domain); \
00064 (void) FormatWizardString(context,MaxTextExtent,"%ld\n",(long) error); \
00065 CatchWizardException(UndefinedException,tag,context); \
00066 _exit((domain << 3) | error); \
00067 }
00068
00069 #define ThrowFatalException(severity,tag) \
00070 { \
00071 CatchWizardException(severity,tag,strerror(errno)); \
00072 _exit(127); \
00073 }
00074
00075 #if defined(__cplusplus) || defined(c_plusplus)
00076 }
00077 #endif
00078
00079 #endif