00001
00002
00003 #ifndef NPS_MSG_H
00004 #define NPS_MSG
00005
00006 #include <stdarg.h>
00007 #include <string.h>
00008 #include <errno.h>
00009
00010
00011 #define DIE die=1 ; val=0
00012 #define WRN wrn=1 ; val=0
00013 #define ABT abt=1 ; val=0
00014
00015
00016 #define MSG_(x) nps_msg_##x
00017
00018 void MSG_(die)(long code,const char *file,const long line,const char *s,...);
00019
00020 static long MSG_(level);
00021
00022
00023
00024
00025
00026
00027 #define MSG(level_statement,args...) { \
00028 long die=0,wrn=0,abt=0,val=0; \
00029 level_statement; \
00030 val = (val >= 0 ? val : -val); \
00031 if (die) { nps_msg_die(val,__FILE__,__LINE__, ##args); } \
00032 else if (wrn) { nps_msg_wrn(val,__FILE__,__LINE__, ##args); } \
00033 else if (abt && !val) { nps_msg_die(0, __FILE__, __LINE__,##args); } \
00034 else { \
00035 fprintf(stderr,"ill-formed MSG... %s:%d\n",__FILE__,__LINE__); \
00036 abort(); \
00037 } \
00038 } \
00039
00040
00041
00042
00043 #define ZOD(x) { \
00044 char errsert_msg[2048]; \
00045 if ((x)) MSG(DIE-1,"%s in %s:%d\n", strerror_r(errno,errsert_msg,256),__FILE__,__LINE__); \
00046 }
00047
00048 #define DOZ(x) { \
00049 char errsert_msg[2048]; \
00050 if (!(x)) MSG(DIE-1,"%s in %s:%d\n", strerror_r(errno,errsert_msg,256),__FILE__,__LINE__); \
00051 }
00052
00053 #ifndef NPS_MSG_KEEP
00054 #include "msg_undef.h"
00055 #endif
00056 #endif