annotate libsrc/minc_basic.h @ 2278:380ee8551b73

Added script test.
author baghdadi <baghdadi>
date Fri, 28 Jul 2006 17:28:09 +0000
parents 411f50377e67
children 63bc51e187a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
1
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
2 #ifndef MINC_BASIC_HEADER_FILE
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
3 #define MINC_BASIC_HEADER_FILE
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
4
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
5 /* ----------------------------- MNI Header -----------------------------------
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
6 @NAME : minc_basic.h
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
7 @INPUT :
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
8 @OUTPUT :
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
9 @RETURNS :
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
10 @DESCRIPTION: Constants and macros for private use by MINC routines.
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
11 @METHOD :
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
12 @GLOBALS :
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
13 @CALLS :
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
14 @CREATED : August 28, 1992 (Peter Neelin)
1232
0e93a7d6edd4 Fixed Log subsitutions for CVS
neelin <neelin>
parents: 1112
diff changeset
15 @MODIFIED :
0e93a7d6edd4 Fixed Log subsitutions for CVS
neelin <neelin>
parents: 1112
diff changeset
16 * $Log: minc_basic.h,v $
1756
411f50377e67 Minor changes
bert <bert>
parents: 1336
diff changeset
17 * Revision 6.3 2004-04-27 15:48:15 bert
411f50377e67 Minor changes
bert <bert>
parents: 1336
diff changeset
18 * Minor changes
411f50377e67 Minor changes
bert <bert>
parents: 1336
diff changeset
19 *
411f50377e67 Minor changes
bert <bert>
parents: 1336
diff changeset
20 * Revision 6.2 2001/04/17 18:40:13 neelin
1336
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
21 * Modifications to work with NetCDF 3.x
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
22 * In particular, changed NC_LONG to NC_INT (and corresponding longs to ints).
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
23 * Changed NC_UNSPECIFIED to NC_NAT.
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
24 * A few fixes to the configure script.
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
25 *
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
26 * Revision 6.1 1999/10/19 14:45:08 neelin
1232
0e93a7d6edd4 Fixed Log subsitutions for CVS
neelin <neelin>
parents: 1112
diff changeset
27 * Fixed Log subsitutions for CVS
0e93a7d6edd4 Fixed Log subsitutions for CVS
neelin <neelin>
parents: 1112
diff changeset
28 *
0e93a7d6edd4 Fixed Log subsitutions for CVS
neelin <neelin>
parents: 1112
diff changeset
29 * Revision 6.0 1997/09/12 13:24:54 neelin
0e93a7d6edd4 Fixed Log subsitutions for CVS
neelin <neelin>
parents: 1112
diff changeset
30 * Release of minc version 0.6
0e93a7d6edd4 Fixed Log subsitutions for CVS
neelin <neelin>
parents: 1112
diff changeset
31 *
1112
e4f09594b751 Release of minc version 0.6
neelin <neelin>
parents: 1094
diff changeset
32 * Revision 5.0 1997/08/21 13:25:53 neelin
e4f09594b751 Release of minc version 0.6
neelin <neelin>
parents: 1094
diff changeset
33 * Release of minc version 0.5
e4f09594b751 Release of minc version 0.6
neelin <neelin>
parents: 1094
diff changeset
34 *
1094
c59a8e32ffd3 Release of minc version 0.5
neelin <neelin>
parents: 1062
diff changeset
35 * Revision 4.0 1997/05/07 20:07:52 neelin
c59a8e32ffd3 Release of minc version 0.5
neelin <neelin>
parents: 1062
diff changeset
36 * Release of minc version 0.4
c59a8e32ffd3 Release of minc version 0.5
neelin <neelin>
parents: 1062
diff changeset
37 *
1062
8bdf69dc4681 Release of minc version 0.4
neelin <neelin>
parents: 870
diff changeset
38 * Revision 3.0 1995/05/15 19:33:12 neelin
8bdf69dc4681 Release of minc version 0.4
neelin <neelin>
parents: 870
diff changeset
39 * Release of minc version 0.3
8bdf69dc4681 Release of minc version 0.4
neelin <neelin>
parents: 870
diff changeset
40 *
870
5f8f02f6f168 Release of minc version 0.3
neelin <neelin>
parents: 619
diff changeset
41 * Revision 2.0 1994/09/28 10:38:01 neelin
5f8f02f6f168 Release of minc version 0.3
neelin <neelin>
parents: 619
diff changeset
42 * Release of minc version 0.2
5f8f02f6f168 Release of minc version 0.3
neelin <neelin>
parents: 619
diff changeset
43 *
619
96821ec9dfac Release of minc version 0.2
neelin <neelin>
parents: 618
diff changeset
44 * Revision 1.8 94/09/28 10:37:26 neelin
96821ec9dfac Release of minc version 0.2
neelin <neelin>
parents: 618
diff changeset
45 * Pre-release
96821ec9dfac Release of minc version 0.2
neelin <neelin>
parents: 618
diff changeset
46 *
618
9de05be4c965 Pre-release
neelin <neelin>
parents: 416
diff changeset
47 * Revision 1.7 93/10/28 10:18:23 neelin
9de05be4c965 Pre-release
neelin <neelin>
parents: 416
diff changeset
48 * Added FILLVALUE_EPSILON for doing fillvalue checking in icv's.
9de05be4c965 Pre-release
neelin <neelin>
parents: 416
diff changeset
49 *
416
bf610f6d6480 Added FILLVALUE_EPSILON for doing fillvalue checking in icv's.
neelin <neelin>
parents: 298
diff changeset
50 * Revision 1.6 93/08/11 12:06:37 neelin
bf610f6d6480 Added FILLVALUE_EPSILON for doing fillvalue checking in icv's.
neelin <neelin>
parents: 298
diff changeset
51 * Added RCS logging in source.
bf610f6d6480 Added FILLVALUE_EPSILON for doing fillvalue checking in icv's.
neelin <neelin>
parents: 298
diff changeset
52 *
247
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
53 @COPYRIGHT :
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
54 Copyright 1993 Peter Neelin, McConnell Brain Imaging Centre,
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
55 Montreal Neurological Institute, McGill University.
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
56 Permission to use, copy, modify, and distribute this
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
57 software and its documentation for any purpose and without
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
58 fee is hereby granted, provided that the above copyright
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
59 notice appear in all copies. The author and McGill University
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
60 make no representations about the suitability of this
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
61 software for any purpose. It is provided "as is" without
4558f342fef8 Added copyright notice.
neelin <neelin>
parents: 31
diff changeset
62 express or implied warranty.
1756
411f50377e67 Minor changes
bert <bert>
parents: 1336
diff changeset
63 @RCSID : $Header: /private-cvsroot/minc/libsrc/minc_basic.h,v 6.3 2004-04-27 15:48:15 bert Exp $ MINC (MNI)
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
64 ---------------------------------------------------------------------------- */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
65
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
66 /* --------- MINC specific constants ------------- */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
67
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
68 /* Maximum buffer size for conversions. Should not be a power of 2 - this
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
69 can cause poor performance on some systems (e.g. SGI) due to caching-
14
77b221a348a2 bug fixes after icv testing
neelin <neelin>
parents: 0
diff changeset
70 related inefficiencies */
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
71 #define MI_MAX_VAR_BUFFER_SIZE 10000
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
72
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
73 /* Possible values for sign of a value */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
74 #define MI_PRIV_DEFSIGN 0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
75 #define MI_PRIV_SIGNED 1
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
76 #define MI_PRIV_UNSIGNED 2
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
77
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
78 /* Operations for MI_varaccess */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
79 #define MI_PRIV_GET 10
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
80 #define MI_PRIV_PUT 11
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
81
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
82 /* Suffix for dimension width variable names */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
83 #define MI_WIDTH_SUFFIX "-width"
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
84
416
bf610f6d6480 Added FILLVALUE_EPSILON for doing fillvalue checking in icv's.
neelin <neelin>
parents: 298
diff changeset
85 /* Epsilon for detecting fillvalues */
bf610f6d6480 Added FILLVALUE_EPSILON for doing fillvalue checking in icv's.
neelin <neelin>
parents: 298
diff changeset
86 #define FILLVALUE_EPSILON (10.0 * FLT_EPSILON)
bf610f6d6480 Added FILLVALUE_EPSILON for doing fillvalue checking in icv's.
neelin <neelin>
parents: 298
diff changeset
87
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
88 /* NetCDF routine name variable (for error logging) */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
89 extern char *cdf_routine_name ; /* defined in globdef.c */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
90 #define MI_NC_ROUTINE_VAR cdf_routine_name
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
91
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
92 /* MINC routine name variable, call depth counter (for keeping track of
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
93 minc routines calling minc routines) and variable for keeping track
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
94 of callers ncopts. All of these are for error logging. They are
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
95 defined in minc_globdef.c */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
96 extern char *minc_routine_name;
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
97 extern int minc_call_depth;
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
98 extern int minc_trash_var; /* Just for getting rid of lint messages */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
99 #define MI_ROUTINE_VAR minc_routine_name
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
100 #define MI_CALL_DEPTH minc_call_depth
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
101 #define MI_TRASH_VAR minc_trash_var
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
102
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
103 /* Macros for logging errors. All routines should start with MI_SAVE_ROUTINE
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
104 and exit with MI_RETURN (which includes MI_RETURN_ERROR and
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
105 MI_CHK_ERROR). All the macros except MI_CHK_ERROR are single line
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
106 commands. MI_CHK_ERROR is in a block and so should not be followed by
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
107 a ';' */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
108 #define MI_SAVE_ROUTINE_NAME(name) \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
109 (MI_TRASH_VAR = (((MI_CALL_DEPTH++)==0) ? \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
110 MI_save_routine_name(name) : MI_NOERROR))
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
111 #define MI_RETURN(value) \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
112 return( (((--MI_CALL_DEPTH)!=0) || MI_return()) ? (value) : (value))
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
113 #define MI_RETURN_ERROR(error) \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
114 return( (((--MI_CALL_DEPTH)!=0) || MI_return_error()) ? (error) : (error))
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
115 #define MI_LOG_PKG_ERROR2(p1,p2) MI_log_pkg_error2(p1, p2)
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
116 #define MI_LOG_PKG_ERROR3(p1,p2,p3) MI_log_pkg_error3(p1, p2, p3)
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
117 #define MI_LOG_SYS_ERROR1(p1) MI_log_sys_error1(p1)
1756
411f50377e67 Minor changes
bert <bert>
parents: 1336
diff changeset
118 #define MI_CHK_ERR(expr) {if ((expr)<0) MI_RETURN_ERROR(MI_ERROR);}
411f50377e67 Minor changes
bert <bert>
parents: 1336
diff changeset
119
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
120
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
121 /* Macros for converting data types. These macros are compound statements,
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
122 so don't put a semi-colon after them. dvalue should be a double, type
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
123 is an int NetCDF type, sign is one of MI_PRIV_UNSIGNED and
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
124 MI_PRIV_SIGNED and ptr is a void pointer */
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
125
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
126 #define MI_TO_DOUBLE(dvalue, type, sign, ptr) \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
127 switch (type) { \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
128 case NC_BYTE : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
129 switch (sign) { \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
130 case MI_PRIV_UNSIGNED : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
131 dvalue = (double) *((unsigned char *) ptr); break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
132 case MI_PRIV_SIGNED : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
133 dvalue = (double) *((signed char *) ptr); break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
134 } \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
135 break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
136 case NC_SHORT : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
137 switch (sign) { \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
138 case MI_PRIV_UNSIGNED : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
139 dvalue = (double) *((unsigned short *) ptr); break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
140 case MI_PRIV_SIGNED : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
141 dvalue = (double) *((signed short *) ptr); break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
142 } \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
143 break; \
1336
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
144 case NC_INT : \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
145 switch (sign) { \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
146 case MI_PRIV_UNSIGNED : \
1336
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
147 dvalue = (double) *((unsigned int *) ptr); break; \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
148 case MI_PRIV_SIGNED : \
1336
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
149 dvalue = (double) *((signed int *) ptr); break; \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
150 } \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
151 break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
152 case NC_FLOAT : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
153 dvalue = (double) *((float *) ptr); \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
154 break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
155 case NC_DOUBLE : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
156 dvalue = (double) *((double *) ptr); \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
157 break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
158 }
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
159
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
160 #define MI_FROM_DOUBLE(dvalue, type, sign, ptr) \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
161 switch (type) { \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
162 case NC_BYTE : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
163 switch (sign) { \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
164 case MI_PRIV_UNSIGNED : \
16
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
165 dvalue = MAX(0, dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
166 dvalue = MIN(UCHAR_MAX, dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
167 *((unsigned char *) ptr) = ROUND(dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
168 break; \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
169 case MI_PRIV_SIGNED : \
16
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
170 dvalue = MAX(SCHAR_MIN, dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
171 dvalue = MIN(SCHAR_MAX, dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
172 *((signed char *) ptr) = ROUND(dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
173 break; \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
174 } \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
175 break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
176 case NC_SHORT : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
177 switch (sign) { \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
178 case MI_PRIV_UNSIGNED : \
16
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
179 dvalue = MAX(0, dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
180 dvalue = MIN(USHRT_MAX, dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
181 *((unsigned short *) ptr) = ROUND(dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
182 break; \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
183 case MI_PRIV_SIGNED : \
16
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
184 dvalue = MAX(SHRT_MIN, dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
185 dvalue = MIN(SHRT_MAX, dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
186 *((signed short *) ptr) = ROUND(dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
187 break; \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
188 } \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
189 break; \
1336
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
190 case NC_INT : \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
191 switch (sign) { \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
192 case MI_PRIV_UNSIGNED : \
16
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
193 dvalue = MAX(0, dvalue); \
1336
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
194 dvalue = MIN(UINT_MAX, dvalue); \
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
195 *((unsigned int *) ptr) = ROUND(dvalue); \
16
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
196 break; \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
197 case MI_PRIV_SIGNED : \
1336
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
198 dvalue = MAX(INT_MIN, dvalue); \
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
199 dvalue = MIN(INT_MAX, dvalue); \
8c04b124e8e0 Modifications to work with NetCDF 3.x
neelin <neelin>
parents: 1232
diff changeset
200 *((signed int *) ptr) = ROUND(dvalue); \
16
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
201 break; \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
202 } \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
203 break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
204 case NC_FLOAT : \
16
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
205 dvalue = MAX(-FLT_MAX,dvalue); \
50217eb93c0a Improved MI_FROM_DOUBLE to avoid problems with nested macros
neelin <neelin>
parents: 14
diff changeset
206 *((float *) ptr) = MIN(FLT_MAX,dvalue); \
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
207 break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
208 case NC_DOUBLE : \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
209 *((double *) ptr) = dvalue; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
210 break; \
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
211 }
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
212
1756
411f50377e67 Minor changes
bert <bert>
parents: 1336
diff changeset
213 /**/
411f50377e67 Minor changes
bert <bert>
parents: 1336
diff changeset
214 #define _(x) x /* For future gettext */
0
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
215
9ce95998cd54 Initial revision
neelin <neelin>
parents:
diff changeset
216 #endif