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