1 /* ----------------------------- MNI Header ----------------------------------- 2 @NAME : minc_error.h 3 @DESCRIPTION: File containing error codes for minc package. 4 @GLOBALS : 5 @CALLS : 6 @CREATED : 17 Feburary, 2004 (Robert Vincent) 7 @MODIFIED : 8 * 9 * $Log: minc_error.h,v $ 10 * Revision 6.4 2008-04-11 05:15:00 rotor 11 * * rewrote error code (Claude) to remove global defs that were 12 * causing build problems with DYLIB on OSX 13 * 14 * Revision 6.3 2004/12/03 21:52:35 bert 15 * Minor changes for Windows build 16 * 17 * Revision 6.2 2004/10/15 13:46:15 bert 18 * Minor changes for Windows compatibility 19 * 20 * Revision 6.1 2004/04/27 15:42:47 bert 21 * Define MINC logging codes 22 * 23 * 24 @COPYRIGHT : 25 Copyright 2004 Robert Vincent, McConnell Brain Imaging Centre, 26 Montreal Neurological Institute, McGill University. 27 Permission to use, copy, modify, and distribute this 28 software and its documentation for any purpose and without 29 fee is hereby granted, provided that the above copyright 30 notice appear in all copies. The author and McGill University 31 make no representations about the suitability of this 32 software for any purpose. It is provided "as is" without 33 express or implied warranty. 34 ---------------------------------------------------------------------------- */ 35 #ifndef MINC_ERROR_H 36 #define MINC_ERROR_H 37 38 /* minc1 message levels */ 39 #define MI_MSG_FATAL 0 40 #define MI_MSG_ERROR 1 41 #define MI_MSG_WARNING 2 42 #define MI_MSG_INFO 3 43 #define MI_MSG_DEBUG 4 44 45 /* minc2 message levels */ 46 #define MI2_MSG_FATAL 0 47 #define MI2_MSG_ERROR 1 48 #define MI2_MSG_WARNING 2 49 #define MI2_MSG_INFO 3 50 #define MI2_MSG_DEBUG 4 51 52 #define MI_MSG_BASE (10000) 53 54 typedef enum mimsgcode { 55 MI_MSG_UNCMPFAIL = MI_MSG_BASE, 56 MI_MSG_NOWRITECMP, 57 MI_MSG_OPENFILE, 58 MI_MSG_CREATEFILE, 59 MI_MSG_CLOSEFILE, 60 MI_MSG_FINDATTR, 61 MI_MSG_ATTRNOTNUM, 62 MI_MSG_READATTR, 63 MI_MSG_NOMEMATTR, 64 MI_MSG_CONVATTR, 65 MI_MSG_ATTRNOTSCALAR, 66 MI_MSG_ATTRNOTSTR, 67 MI_MSG_WRITEATTR, 68 MI_MSG_READVAR, 69 MI_MSG_WRITEVAR, 70 MI_MSG_FINDVAR, 71 MI_MSG_ATTRCOUNT, 72 MI_MSG_ATTRNAME, 73 MI_MSG_COPYATTR, 74 MI_MSG_VARINQ, 75 MI_MSG_UNLIMDIM, 76 MI_MSG_DIMINQ, 77 MI_MSG_VARCONFLICT, 78 MI_MSG_DIMDEF, 79 MI_MSG_VARDEF, 80 MI_MSG_VARMISMATCH, 81 MI_MSG_VARDIFFSIZE, 82 MI_MSG_VARCOUNT, 83 MI_MSG_OUTPUTVAR, 84 MI_MSG_COPYVAR, 85 MI_MSG_VARNOTNUM, 86 MI_MSG_OUTOFMEM, 87 MI_MSG_ATTRNOTPTR, 88 MI_MSG_VARNOTSTD, 89 MI_MSG_DIMWIDTH, 90 MI_MSG_MAXMINVARY, 91 MI_MSG_SNH, 92 MI_MSG_INTSIZE, 93 MI_MSG_FLTSIZE, 94 MI_MSG_TYPECLASS, 95 MI_MSG_NOTIMPL, 96 MI_MSG_BADTYPE, 97 MI_MSG_OPENDSET, 98 MI_MSG_READDSET, 99 MI_MSG_WRITEDSET, 100 MI_MSG_TOOMANYDIMS, 101 MI_MSG_ICVATTACHED, 102 MI_MSG_BADICV, 103 MI_MSG_BADPROP, 104 MI_MSG_ICVNOTATTACHED, 105 MI_MSG_ICVCOORDS, 106 MI_MSG_BADOP, 107 MI_MSG_NCOPTS_STACK_OVER, 108 MI_MSG_NCOPTS_STACK_UNDER, 109 MI_MSG_VOLUME_IO, 110 111 MI2_MSG_UNCMPFAIL, 112 MI2_MSG_NOWRITECMP, 113 MI2_MSG_OPENFILE, 114 MI2_MSG_CREATEFILE, 115 MI2_MSG_CLOSEFILE, 116 MI2_MSG_FINDATTR, 117 MI2_MSG_ATTRNOTNUM, 118 MI2_MSG_READATTR, 119 MI2_MSG_NOMEMATTR, 120 MI2_MSG_CONVATTR, 121 MI2_MSG_ATTRNOTSCALAR, 122 MI2_MSG_ATTRNOTSTR, 123 MI2_MSG_WRITEATTR, 124 MI2_MSG_READVAR, 125 MI2_MSG_WRITEVAR, 126 MI2_MSG_FINDVAR, 127 MI2_MSG_ATTRCOUNT, 128 MI2_MSG_ATTRNAME, 129 MI2_MSG_COPYATTR, 130 MI2_MSG_VARINQ, 131 MI2_MSG_UNLIMDIM, 132 MI2_MSG_DIMINQ, 133 MI2_MSG_VARCONFLICT, 134 MI2_MSG_DIMDEF, 135 MI2_MSG_VARDEF, 136 MI2_MSG_VARMISMATCH, 137 MI2_MSG_VARDIFFSIZE, 138 MI2_MSG_VARCOUNT, 139 MI2_MSG_OUTPUTVAR, 140 MI2_MSG_COPYVAR, 141 MI2_MSG_VARNOTNUM, 142 MI2_MSG_OUTOFMEM, 143 MI2_MSG_ATTRNOTPTR, 144 MI2_MSG_VARNOTSTD, 145 MI2_MSG_DIMWIDTH, 146 MI2_MSG_MAXMINVARY, 147 MI2_MSG_SNH, 148 MI2_MSG_INTSIZE, 149 MI2_MSG_FLTSIZE, 150 MI2_MSG_TYPECLASS, 151 MI2_MSG_NOTIMPL, 152 MI2_MSG_BADTYPE, 153 MI2_MSG_OPENDSET, 154 MI2_MSG_READDSET, 155 MI2_MSG_WRITEDSET, 156 MI2_MSG_TOOMANYDIMS, 157 MI2_MSG_ICVATTACHED, 158 MI2_MSG_BADICV, 159 MI2_MSG_BADPROP, 160 MI2_MSG_ICVNOTATTACHED, 161 MI2_MSG_ICVCOORDS, 162 MI2_MSG_BADOP, 163 MI2_MSG_HDF5, 164 MI2_MSG_GENERIC 165 } mimsgcode_t; 166 167 int milog_message(mimsgcode_t code, ...); 168 int mi2log_message(const char *file,int line, mimsgcode_t code, ...); 169 170 int MI2_save_routine_name(char *name); 171 int MI2_return(void); 172 int MI2_return_error(void); 173 void MI2_log_pkg_error2(int p1, char *p2); 174 void MI2_log_pkg_error3(int p1, char *p2, char *p3); 175 void MI2_log_sys_error1(char *p1); 176 void mi2log_init(const char *name); 177 int mi2log_set_verbosity ( int lvl ); 178 179 int MI_save_routine_name(char *name); 180 int MI_return(void); 181 int MI_return_error(void); 182 void MI_log_pkg_error2(int p1, char *p2); 183 void MI_log_pkg_error3(int p1, char *p2, char *p3); 184 void MI_log_sys_error1(char *p1); 185 186 187 #define MI_LOG_ERROR(code,...) mi2log_message(__FILE__, __LINE__, code, ##__VA_ARGS__ ) 188 #define MI_CHECK_HDF_CALL(var,call) {if((var)<0) MI_LOG_ERROR(MI2_MSG_HDF5,call);} 189 #define MI_CHECK_HDF_CALL_RET(var,call) {if((var)<0) return MI_LOG_ERROR(MI2_MSG_HDF5,call);} 190 191 192 /* Macros for logging errors. All routines should start with MI_SAVE_ROUTINE 193 and exit with MI_RETURN (which includes MI_RETURN_ERROR and 194 MI_CHK_ERROR). All the macros except MI_CHK_ERROR are single line 195 commands. MI_CHK_ERROR is in a block and so should not be followed by 196 a ';' */ 197 #define MI_SAVE_ROUTINE_NAME(name) MI_save_routine_name(name) 198 #define MI_RETURN(value) \ 199 return( MI_return() ? (value) : (value) ) 200 #define MI_RETURN_ERROR(error) \ 201 return( MI_return_error() ? (error) : (error) ) 202 #define MI_LOG_PKG_ERROR2(p1,p2) MI_log_pkg_error2(p1, p2) 203 #define MI_LOG_PKG_ERROR3(p1,p2,p3) MI_log_pkg_error3(p1, p2, p3) 204 #define MI_LOG_SYS_ERROR1(p1) MI_log_sys_error1(p1) 205 #define MI_CHK_ERR(expr) {if ((expr)<0) MI_RETURN_ERROR(MI_ERROR);} 206 207 /* NetCDF routine name variable (for error logging) */ 208 /*extern char *cdf_routine_name ;*/ /* defined in globdef.c */ 209 /*#define MI_NC_ROUTINE_VAR cdf_routine_name*/ 210 211 212 #endif /* MINC_ERROR_H not defined */ 213