00001 
00002 
00003 
00004 
00005 
00006 #ifndef _NCX_H_
00007 #define _NCX_H_
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 #include "ncconfig.h" 
00025 #include "rnd.h"
00026 #include <stddef.h> 
00027 #include <errno.h>
00028 #include <sys/types.h> 
00029 
00030 #if defined(_CRAY) && !defined(_CRAYIEEE)
00031 #define CRAYFLOAT 1 
00032 #elif defined(_SX) && defined(_FLOAT2)  
00033 #define CRAYFLOAT 1 
00034 #endif
00035 
00036 
00037 
00038 
00039 
00040 
00041 #ifndef ENOERR
00042 #define ENOERR 0
00043 #endif
00044 #ifndef NC_ERANGE
00045 #define NC_ERANGE (-60) 
00046 #endif
00047 #ifndef NC_ENOMEM
00048 #define NC_ENOMEM (-61) 
00049 #endif
00050 
00051 
00052 
00053 
00054 
00055 #define X_SIZEOF_CHAR           1
00056 #define X_SIZEOF_SHORT          2
00057 #define X_SIZEOF_INT            4       
00058 #if 0
00059 #define X_SIZEOF_LONG           8 */    
00060 #endif
00061 #define X_SIZEOF_FLOAT          4
00062 #define X_SIZEOF_DOUBLE         8
00063 
00064 
00065 
00066 
00067 
00068 #define X_SIZEOF_OFF_T          X_SIZEOF_INT
00069 #define X_SIZEOF_SIZE_T         X_SIZEOF_INT
00070 
00071 
00072 
00073 
00074 #define X_SCHAR_MIN     (-128)
00075 #define X_SCHAR_MAX     127
00076 #define X_UCHAR_MAX     255U
00077 #define X_SHORT_MIN     (-32768)
00078 #define X_SHRT_MIN      X_SHORT_MIN     
00079 #define X_SHORT_MAX     32767
00080 #define X_SHRT_MAX      X_SHORT_MAX     
00081 #define X_USHORT_MAX    65535U
00082 #define X_USHRT_MAX     X_USHORT_MAX    
00083 #define X_INT_MIN       (-2147483647-1)
00084 #define X_INT_MAX       2147483647
00085 #define X_UINT_MAX      4294967295U
00086 #if 0
00087 #define X_LONG_MIN      (-2147483647-1)
00088 #define X_LONG_MAX      2147483647
00089 #define X_ULONG_MAX     4294967295U
00090 #endif
00091 #define X_FLOAT_MAX     3.40282347e+38f
00092 #define X_FLOAT_MIN     (-X_FLOAT_MAX)
00093 #define X_FLT_MAX       X_FLOAT_MAX     
00094 #if CRAYFLOAT
00095 
00096 #define X_DOUBLE_MAX    1.79769313486230e+308
00097 #else
00098 
00099 #define X_DOUBLE_MAX    1.7976931348623157e+308 
00100 #endif
00101 #define X_DOUBLE_MIN    (-X_DOUBLE_MAX)
00102 #define X_DBL_MAX       X_DOUBLE_MAX    
00103 
00104 #define X_SIZE_MAX      X_INT_MAX       
00105 #define X_OFF_MAX       X_INT_MAX
00106 
00107 
00108 
00109 
00110 
00111 
00112 
00113 
00114 
00115 #define X_ALIGN                 4       
00116 
00117 #define ncx_len_char(nelems) \
00118         _RNDUP((nelems), X_ALIGN)
00119 
00120 #define ncx_len_short(nelems) \
00121         (((nelems) + (nelems)%2)  * X_SIZEOF_SHORT)
00122 
00123 #define ncx_len_int(nelems) \
00124         ((nelems) * X_SIZEOF_INT)
00125 
00126 #define ncx_len_long(nelems) \
00127         ((nelems) * X_SIZEOF_LONG)
00128 
00129 #define ncx_len_float(nelems) \
00130         ((nelems) * X_SIZEOF_FLOAT)
00131 
00132 #define ncx_len_double(nelems) \
00133         ((nelems) * X_SIZEOF_DOUBLE)
00134 
00135 
00136 
00137 #if __CHAR_UNSIGNED__
00138         
00139 typedef signed char schar;
00140 
00141 #else
00142         
00143 typedef signed char schar;
00144 
00145 #endif  
00146 
00147 
00148 
00149 
00150 
00151 
00152 
00153 
00154 
00155 
00156 
00157 
00158 
00159 
00160 
00161 
00162 
00163 
00164 
00165 
00166 
00167 
00168 
00169 
00170 
00171 
00172 
00173 
00174 
00175 
00176 
00177 
00178 
00179 
00180 
00181 
00182 
00183 
00184 
00185 
00186 
00187 
00188 
00189 
00190 
00191 
00192 
00193 
00194 
00195 #if 0
00196 extern int
00197 ncx_get_schar_schar(const void *xp, schar *ip);
00198 extern int
00199 ncx_get_schar_uchar(const void *xp, uchar *ip);
00200 extern int
00201 ncx_get_schar_short(const void *xp, short *ip);
00202 extern int
00203 ncx_get_schar_int(const void *xp, int *ip);
00204 extern int
00205 ncx_get_schar_long(const void *xp, long *ip);
00206 extern int
00207 ncx_get_schar_float(const void *xp, float *ip);
00208 extern int
00209 ncx_get_schar_double(const void *xp, double *ip);
00210 
00211 extern int
00212 ncx_put_schar_schar(void *xp, const schar *ip);
00213 extern int
00214 ncx_put_schar_uchar(void *xp, const uchar *ip);
00215 extern int
00216 ncx_put_schar_short(void *xp, const short *ip);
00217 extern int
00218 ncx_put_schar_int(void *xp, const int *ip);
00219 extern int
00220 ncx_put_schar_long(void *xp, const long *ip);
00221 extern int
00222 ncx_put_schar_float(void *xp, const float *ip);
00223 extern int
00224 ncx_put_schar_double(void *xp, const double *ip);
00225 #endif
00226  
00227 
00228 extern int
00229 ncx_get_short_schar(const void *xp, schar *ip);
00230 extern int
00231 ncx_get_short_uchar(const void *xp, uchar *ip);
00232 extern int
00233 ncx_get_short_short(const void *xp, short *ip);
00234 extern int
00235 ncx_get_short_int(const void *xp, int *ip);
00236 extern int
00237 ncx_get_short_long(const void *xp, long *ip);
00238 extern int
00239 ncx_get_short_float(const void *xp, float *ip);
00240 extern int
00241 ncx_get_short_double(const void *xp, double *ip);
00242 
00243 extern int
00244 ncx_put_short_schar(void *xp, const schar *ip);
00245 extern int
00246 ncx_put_short_uchar(void *xp, const uchar *ip);
00247 extern int
00248 ncx_put_short_short(void *xp, const short *ip);
00249 extern int
00250 ncx_put_short_int(void *xp, const int *ip);
00251 extern int
00252 ncx_put_short_long(void *xp, const long *ip);
00253 extern int
00254 ncx_put_short_float(void *xp, const float *ip);
00255 extern int
00256 ncx_put_short_double(void *xp, const double *ip);
00257  
00258 
00259 extern int
00260 ncx_get_int_schar(const void *xp, schar *ip);
00261 extern int
00262 ncx_get_int_uchar(const void *xp, uchar *ip);
00263 extern int
00264 ncx_get_int_short(const void *xp, short *ip);
00265 extern int
00266 ncx_get_int_int(const void *xp, int *ip);
00267 extern int
00268 ncx_get_int_long(const void *xp, long *ip);
00269 extern int
00270 ncx_get_int_float(const void *xp, float *ip);
00271 extern int
00272 ncx_get_int_double(const void *xp, double *ip);
00273 
00274 extern int
00275 ncx_put_int_schar(void *xp, const schar *ip);
00276 extern int
00277 ncx_put_int_uchar(void *xp, const uchar *ip);
00278 extern int
00279 ncx_put_int_short(void *xp, const short *ip);
00280 extern int
00281 ncx_put_int_int(void *xp, const int *ip);
00282 extern int
00283 ncx_put_int_long(void *xp, const long *ip);
00284 extern int
00285 ncx_put_int_float(void *xp, const float *ip);
00286 extern int
00287 ncx_put_int_double(void *xp, const double *ip);
00288  
00289 
00290 extern int
00291 ncx_get_float_schar(const void *xp, schar *ip);
00292 extern int
00293 ncx_get_float_uchar(const void *xp, uchar *ip);
00294 extern int
00295 ncx_get_float_short(const void *xp, short *ip);
00296 extern int
00297 ncx_get_float_int(const void *xp, int *ip);
00298 extern int
00299 ncx_get_float_long(const void *xp, long *ip);
00300 extern int
00301 ncx_get_float_float(const void *xp, float *ip);
00302 extern int
00303 ncx_get_float_double(const void *xp, double *ip);
00304 
00305 extern int
00306 ncx_put_float_schar(void *xp, const schar *ip);
00307 extern int
00308 ncx_put_float_uchar(void *xp, const uchar *ip);
00309 extern int
00310 ncx_put_float_short(void *xp, const short *ip);
00311 extern int
00312 ncx_put_float_int(void *xp, const int *ip);
00313 extern int
00314 ncx_put_float_long(void *xp, const long *ip);
00315 extern int
00316 ncx_put_float_float(void *xp, const float *ip);
00317 extern int
00318 ncx_put_float_double(void *xp, const double *ip);
00319  
00320 
00321 extern int
00322 ncx_get_double_schar(const void *xp, schar *ip);
00323 extern int
00324 ncx_get_double_uchar(const void *xp, uchar *ip);
00325 extern int
00326 ncx_get_double_short(const void *xp, short *ip);
00327 extern int
00328 ncx_get_double_int(const void *xp, int *ip);
00329 extern int
00330 ncx_get_double_long(const void *xp, long *ip);
00331 extern int
00332 ncx_get_double_float(const void *xp, float *ip);
00333 extern int
00334 ncx_get_double_double(const void *xp, double *ip);
00335 
00336 extern int
00337 ncx_put_double_schar(void *xp, const schar *ip);
00338 extern int
00339 ncx_put_double_uchar(void *xp, const uchar *ip);
00340 extern int
00341 ncx_put_double_short(void *xp, const short *ip);
00342 extern int
00343 ncx_put_double_int(void *xp, const int *ip);
00344 extern int
00345 ncx_put_double_long(void *xp, const long *ip);
00346 extern int
00347 ncx_put_double_float(void *xp, const float *ip);
00348 extern int
00349 ncx_put_double_double(void *xp, const double *ip);
00350  
00351 
00352 
00353 
00354 
00355 
00356 
00357 
00358 
00359 extern int
00360 ncx_get_size_t(const void **xpp, size_t *ulp);
00361 
00362 extern int
00363 ncx_get_off_t(const void **xpp, off_t *lp);
00364 
00365 
00366 extern int
00367 ncx_put_size_t(void **xpp, const size_t *ulp);
00368 
00369 extern int
00370 ncx_put_off_t(void **xpp, const off_t *lp);
00371 
00372 
00373 
00374 
00375 
00376 
00377 
00378 
00379 
00380 
00381 
00382 
00383 
00384 
00385 
00386 
00387 
00388 
00389 
00390 
00391 
00392 
00393 
00394 
00395 
00396 
00397 
00398 
00399 
00400 
00401 
00402 
00403 
00404 
00405 
00406 
00407 
00408 
00409 
00410 
00411 
00412 
00413 extern int
00414 ncx_getn_schar_schar(const void **xpp, size_t nelems, schar *ip);
00415 extern int
00416 ncx_getn_schar_uchar(const void **xpp, size_t nelems, uchar *ip);
00417 extern int
00418 ncx_getn_schar_short(const void **xpp, size_t nelems, short *ip);
00419 extern int
00420 ncx_getn_schar_int(const void **xpp, size_t nelems, int *ip);
00421 extern int
00422 ncx_getn_schar_long(const void **xpp, size_t nelems, long *ip);
00423 extern int
00424 ncx_getn_schar_float(const void **xpp, size_t nelems, float *ip);
00425 extern int
00426 ncx_getn_schar_double(const void **xpp, size_t nelems, double *ip);
00427 
00428 extern int
00429 ncx_pad_getn_schar_schar(const void **xpp, size_t nelems, schar *ip);
00430 extern int
00431 ncx_pad_getn_schar_uchar(const void **xpp, size_t nelems, uchar *ip);
00432 extern int
00433 ncx_pad_getn_schar_short(const void **xpp, size_t nelems, short *ip);
00434 extern int
00435 ncx_pad_getn_schar_int(const void **xpp, size_t nelems, int *ip);
00436 extern int
00437 ncx_pad_getn_schar_long(const void **xpp, size_t nelems, long *ip);
00438 extern int
00439 ncx_pad_getn_schar_float(const void **xpp, size_t nelems, float *ip);
00440 extern int
00441 ncx_pad_getn_schar_double(const void **xpp, size_t nelems, double *ip);
00442 
00443 extern int
00444 ncx_putn_schar_schar(void **xpp, size_t nelems, const schar *ip);
00445 extern int
00446 ncx_putn_schar_uchar(void **xpp, size_t nelems, const uchar *ip);
00447 extern int
00448 ncx_putn_schar_short(void **xpp, size_t nelems, const short *ip);
00449 extern int
00450 ncx_putn_schar_int(void **xpp, size_t nelems, const int *ip);
00451 extern int
00452 ncx_putn_schar_long(void **xpp, size_t nelems, const long *ip);
00453 extern int
00454 ncx_putn_schar_float(void **xpp, size_t nelems, const float *ip);
00455 extern int
00456 ncx_putn_schar_double(void **xpp, size_t nelems, const double *ip);
00457  
00458 extern int
00459 ncx_pad_putn_schar_schar(void **xpp, size_t nelems, const schar *ip);
00460 extern int
00461 ncx_pad_putn_schar_uchar(void **xpp, size_t nelems, const uchar *ip);
00462 extern int
00463 ncx_pad_putn_schar_short(void **xpp, size_t nelems, const short *ip);
00464 extern int
00465 ncx_pad_putn_schar_int(void **xpp, size_t nelems, const int *ip);
00466 extern int
00467 ncx_pad_putn_schar_long(void **xpp, size_t nelems, const long *ip);
00468 extern int
00469 ncx_pad_putn_schar_float(void **xpp, size_t nelems, const float *ip);
00470 extern int
00471 ncx_pad_putn_schar_double(void **xpp, size_t nelems, const double *ip);
00472 
00473 
00474 extern int
00475 ncx_getn_short_schar(const void **xpp, size_t nelems, schar *ip);
00476 extern int
00477 ncx_getn_short_uchar(const void **xpp, size_t nelems, uchar *ip);
00478 extern int
00479 ncx_getn_short_short(const void **xpp, size_t nelems, short *ip);
00480 extern int
00481 ncx_getn_short_int(const void **xpp, size_t nelems, int *ip);
00482 extern int
00483 ncx_getn_short_long(const void **xpp, size_t nelems, long *ip);
00484 extern int
00485 ncx_getn_short_float(const void **xpp, size_t nelems, float *ip);
00486 extern int
00487 ncx_getn_short_double(const void **xpp, size_t nelems, double *ip);
00488 
00489 extern int
00490 ncx_pad_getn_short_schar(const void **xpp, size_t nelems, schar *ip);
00491 extern int
00492 ncx_pad_getn_short_uchar(const void **xpp, size_t nelems, uchar *ip);
00493 extern int
00494 ncx_pad_getn_short_short(const void **xpp, size_t nelems, short *ip);
00495 extern int
00496 ncx_pad_getn_short_int(const void **xpp, size_t nelems, int *ip);
00497 extern int
00498 ncx_pad_getn_short_long(const void **xpp, size_t nelems, long *ip);
00499 extern int
00500 ncx_pad_getn_short_float(const void **xpp, size_t nelems, float *ip);
00501 extern int
00502 ncx_pad_getn_short_double(const void **xpp, size_t nelems, double *ip);
00503 
00504 extern int
00505 ncx_putn_short_schar(void **xpp, size_t nelems, const schar *ip);
00506 extern int
00507 ncx_putn_short_uchar(void **xpp, size_t nelems, const uchar *ip);
00508 extern int
00509 ncx_putn_short_short(void **xpp, size_t nelems, const short *ip);
00510 extern int
00511 ncx_putn_short_int(void **xpp, size_t nelems, const int *ip);
00512 extern int
00513 ncx_putn_short_long(void **xpp, size_t nelems, const long *ip);
00514 extern int
00515 ncx_putn_short_float(void **xpp, size_t nelems, const float *ip);
00516 extern int
00517 ncx_putn_short_double(void **xpp, size_t nelems, const double *ip);
00518  
00519 extern int
00520 ncx_pad_putn_short_schar(void **xpp, size_t nelems, const schar *ip);
00521 extern int
00522 ncx_pad_putn_short_uchar(void **xpp, size_t nelems, const uchar *ip);
00523 extern int
00524 ncx_pad_putn_short_short(void **xpp, size_t nelems, const short *ip);
00525 extern int
00526 ncx_pad_putn_short_int(void **xpp, size_t nelems, const int *ip);
00527 extern int
00528 ncx_pad_putn_short_long(void **xpp, size_t nelems, const long *ip);
00529 extern int
00530 ncx_pad_putn_short_float(void **xpp, size_t nelems, const float *ip);
00531 extern int
00532 ncx_pad_putn_short_double(void **xpp, size_t nelems, const double *ip);
00533 
00534 
00535 extern int
00536 ncx_getn_int_schar(const void **xpp, size_t nelems, schar *ip);
00537 extern int
00538 ncx_getn_int_uchar(const void **xpp, size_t nelems, uchar *ip);
00539 extern int
00540 ncx_getn_int_short(const void **xpp, size_t nelems, short *ip);
00541 extern int
00542 ncx_getn_int_int(const void **xpp, size_t nelems, int *ip);
00543 extern int
00544 ncx_getn_int_long(const void **xpp, size_t nelems, long *ip);
00545 extern int
00546 ncx_getn_int_float(const void **xpp, size_t nelems, float *ip);
00547 extern int
00548 ncx_getn_int_double(const void **xpp, size_t nelems, double *ip);
00549 
00550 extern int
00551 ncx_putn_int_schar(void **xpp, size_t nelems, const schar *ip);
00552 extern int
00553 ncx_putn_int_uchar(void **xpp, size_t nelems, const uchar *ip);
00554 extern int
00555 ncx_putn_int_short(void **xpp, size_t nelems, const short *ip);
00556 extern int
00557 ncx_putn_int_int(void **xpp, size_t nelems, const int *ip);
00558 extern int
00559 ncx_putn_int_long(void **xpp, size_t nelems, const long *ip);
00560 extern int
00561 ncx_putn_int_float(void **xpp, size_t nelems, const float *ip);
00562 extern int
00563 ncx_putn_int_double(void **xpp, size_t nelems, const double *ip);
00564  
00565 
00566 extern int
00567 ncx_getn_float_schar(const void **xpp, size_t nelems, schar *ip);
00568 extern int
00569 ncx_getn_float_uchar(const void **xpp, size_t nelems, uchar *ip);
00570 extern int
00571 ncx_getn_float_short(const void **xpp, size_t nelems, short *ip);
00572 extern int
00573 ncx_getn_float_int(const void **xpp, size_t nelems, int *ip);
00574 extern int
00575 ncx_getn_float_long(const void **xpp, size_t nelems, long *ip);
00576 extern int
00577 ncx_getn_float_float(const void **xpp, size_t nelems, float *ip);
00578 extern int
00579 ncx_getn_float_double(const void **xpp, size_t nelems, double *ip);
00580 
00581 extern int
00582 ncx_putn_float_schar(void **xpp, size_t nelems, const schar *ip);
00583 extern int
00584 ncx_putn_float_uchar(void **xpp, size_t nelems, const uchar *ip);
00585 extern int
00586 ncx_putn_float_short(void **xpp, size_t nelems, const short *ip);
00587 extern int
00588 ncx_putn_float_int(void **xpp, size_t nelems, const int *ip);
00589 extern int
00590 ncx_putn_float_long(void **xpp, size_t nelems, const long *ip);
00591 extern int
00592 ncx_putn_float_float(void **xpp, size_t nelems, const float *ip);
00593 extern int
00594 ncx_putn_float_double(void **xpp, size_t nelems, const double *ip);
00595  
00596 
00597 extern int
00598 ncx_getn_double_schar(const void **xpp, size_t nelems, schar *ip);
00599 extern int
00600 ncx_getn_double_uchar(const void **xpp, size_t nelems, uchar *ip);
00601 extern int
00602 ncx_getn_double_short(const void **xpp, size_t nelems, short *ip);
00603 extern int
00604 ncx_getn_double_int(const void **xpp, size_t nelems, int *ip);
00605 extern int
00606 ncx_getn_double_long(const void **xpp, size_t nelems, long *ip);
00607 extern int
00608 ncx_getn_double_float(const void **xpp, size_t nelems, float *ip);
00609 extern int
00610 ncx_getn_double_double(const void **xpp, size_t nelems, double *ip);
00611 
00612 extern int
00613 ncx_putn_double_schar(void **xpp, size_t nelems, const schar *ip);
00614 extern int
00615 ncx_putn_double_uchar(void **xpp, size_t nelems, const uchar *ip);
00616 extern int
00617 ncx_putn_double_short(void **xpp, size_t nelems, const short *ip);
00618 extern int
00619 ncx_putn_double_int(void **xpp, size_t nelems, const int *ip);
00620 extern int
00621 ncx_putn_double_long(void **xpp, size_t nelems, const long *ip);
00622 extern int
00623 ncx_putn_double_float(void **xpp, size_t nelems, const float *ip);
00624 extern int
00625 ncx_putn_double_double(void **xpp, size_t nelems, const double *ip);
00626  
00627 
00628 
00629 
00630 
00631 
00632 
00633 extern int
00634 ncx_getn_text(const void **xpp, size_t nchars, char *cp);
00635 extern int
00636 ncx_pad_getn_text(const void **xpp, size_t nchars, char *cp);
00637 
00638 
00639 extern int
00640 ncx_putn_text(void **xpp, size_t nchars, const char *cp);
00641 extern int
00642 ncx_pad_putn_text(void **xpp, size_t nchars, const char *cp);
00643 
00644 
00645 #define ncx_getn_char_char(xpp, nelems, fillp) ncx_getn_text(xpp, nelems, fillp)
00646 #define ncx_putn_char_char(xpp, nelems, fillp) ncx_putn_text(xpp, nelems, fillp)
00647 
00648 
00649 extern int
00650 ncx_getn_void(const void **xpp, size_t nchars, void *vp);
00651 extern int
00652 ncx_pad_getn_void(const void **xpp, size_t nchars, void *vp);
00653 
00654 
00655 extern int
00656 ncx_putn_void(void **xpp, size_t nchars, const void *vp);
00657 extern int
00658 ncx_pad_putn_void(void **xpp, size_t nchars, const void *vp);
00659 
00660 #endif