1/*! \file
2
3Main header file for the C API.
4
5Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
62003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014
7University Corporation for Atmospheric Research/Unidata.
8
9See \ref copyright file for more info.
10*/
11
12#ifndef _NETCDF_
13#define _NETCDF_
14
15#include <stddef.h> /* size_t, ptrdiff_t */
16#include <errno.h>  /* netcdf functions sometimes return system errors */
17
18/* Required for alloca on Windows */
19#if defined(_WIN32) || defined(_WIN64)
20#include <malloc.h>
21#endif
22
23#ifdef _WIN64
24#include <sys/stat.h>
25#endif
26
27/*! The nc_type type is just an int. */
28typedef int nc_type;
29
30#if defined(__cplusplus)
31extern "C" {
32#endif
33
34/*
35 *  The netcdf external data types
36 */
37#define NC_NAT          0 /**< Not A Type */
38#define NC_BYTE         1 /**< signed 1 byte integer */
39#define NC_CHAR  2 /**< ISO/ASCII character */
40#define NC_SHORT  3 /**< signed 2 byte integer */
41#define NC_INT          4 /**< signed 4 byte integer */
42#define NC_LONG         NC_INT  /**< \deprecated required for backward compatibility. */
43#define NC_FLOAT  5 /**< single precision floating point number */
44#define NC_DOUBLE  6 /**< double precision floating point number */
45#define NC_UBYTE  7 /**< unsigned 1 byte int */
46#define NC_USHORT  8 /**< unsigned 2-byte int */
47#define NC_UINT  9 /**< unsigned 4-byte int */
48#define NC_INT64  10 /**< signed 8-byte int */
49#define NC_UINT64  11 /**< unsigned 8-byte int */
50#define NC_STRING  12 /**< string */
51
52#define NC_MAX_ATOMIC_TYPE NC_STRING
53
54/* The following are use internally in support of user-defines
55 * types. They are also the class returned by nc_inq_user_type. */
56#define NC_VLEN  13 /**< vlen (variable-length) types */
57#define NC_OPAQUE  14 /**< opaque types */
58#define NC_ENUM  15 /**< enum types */
59#define NC_COMPOUND  16 /**< compound types */
60
61/* Define the first user defined type id (leave some room) */
62#define NC_FIRSTUSERTYPEID 32
63
64/** Default fill value. This is used unless _FillValue attribute
65 * is set.  These values are stuffed into newly allocated space as
66 * appropriate.  The hope is that one might use these to notice that a
67 * particular datum has not been set. */
68/**@{*/
69#define NC_FILL_BYTE ((signed char)-127)
70#define NC_FILL_CHAR ((char)0)
71#define NC_FILL_SHORT ((short)-32767)
72#define NC_FILL_INT (-2147483647L)
73#define NC_FILL_FLOAT (9.9692099683868690e+36f) /* near 15 * 2^119 */
74#define NC_FILL_DOUBLE (9.9692099683868690e+36)
75#define NC_FILL_UBYTE   (255)
76#define NC_FILL_USHORT  (65535)
77#define NC_FILL_UINT    (4294967295U)
78#define NC_FILL_INT64   ((long long)-9223372036854775806LL)
79#define NC_FILL_UINT64  ((unsigned long long)18446744073709551614ULL)
80#define NC_FILL_STRING  ((char *)"")
81/**@}*/
82
83/*! Max or min values for a type. Nothing greater/smaller can be
84 * stored in a netCDF file for their associated types. Recall that a C
85 * compiler may define int to be any length it wants, but a NC_INT is
86 * *always* a 4 byte signed int. On a platform with 64 bit ints,
87 * there will be many ints which are outside the range supported by
88 * NC_INT. But since NC_INT is an external format, it has to mean the
89 * same thing everywhere. */
90/**@{*/
91#define NC_MAX_BYTE 127
92#define NC_MIN_BYTE (-NC_MAX_BYTE-1)
93#define NC_MAX_CHAR 255
94#define NC_MAX_SHORT 32767
95#define NC_MIN_SHORT (-NC_MAX_SHORT - 1)
96#define NC_MAX_INT 2147483647
97#define NC_MIN_INT (-NC_MAX_INT - 1)
98#define NC_MAX_FLOAT 3.402823466e+38f
99#define NC_MIN_FLOAT (-NC_MAX_FLOAT)
100#define NC_MAX_DOUBLE 1.7976931348623157e+308
101#define NC_MIN_DOUBLE (-NC_MAX_DOUBLE)
102#define NC_MAX_UBYTE NC_MAX_CHAR
103#define NC_MAX_USHORT 65535U
104#define NC_MAX_UINT 4294967295U
105#define NC_MAX_INT64 (9223372036854775807LL)
106#define NC_MIN_INT64 (-9223372036854775807LL-1)
107#define NC_MAX_UINT64 (18446744073709551615ULL)
108#define X_INT64_MAX     (9223372036854775807LL)
109#define X_INT64_MIN     (-X_INT64_MAX - 1)
110#define X_UINT64_MAX    (18446744073709551615ULL)
111/**@}*/
112
113/** Name of fill value attribute.  If you wish a variable to use a
114 * different value than the above defaults, create an attribute with
115 * the same type as the variable and this reserved name. The value you
116 * give the attribute will be used as the fill value for that
117 * variable. */
118#define _FillValue "_FillValue"
119#define NC_FILL 0 /**< Argument to nc_set_fill() to clear NC_NOFILL */
120#define NC_NOFILL 0x100 /**< Argument to nc_set_fill() to turn off filling of data. */
121
122/* Define the ioflags bits for nc_create and nc_open.
123   currently unused:
124        0x0002
125 0x0040
126 0x0080
127   and the whole upper 16 bits
128*/
129
130#define NC_NOWRITE  0x0000 /**< Set read-only access for nc_open(). */
131#define NC_WRITE      0x0001 /**< Set read-write access for nc_open(). */
132#define NC_CLOBBER  0x0000 /**< Destroy existing file. Mode flag for nc_create(). */
133#define NC_NOCLOBBER     0x0004 /**< Don't destroy existing file. Mode flag for nc_create(). */
134
135#define NC_DISKLESS      0x0008  /**< Use diskless file. Mode flag for nc_open() or nc_create(). */
136#define NC_MMAP          0x0010  /**< Use diskless file with mmap. Mode flag for nc_open() or nc_create(). */
137
138#define NC_64BIT_DATA    0x0020  /**< CDF-5 format: classic model but 64 bit dimensions and sizes */
139#define NC_CDF5          NC_64BIT_DATA  /**< Alias NC_CDF5 to NC_64BIT_DATA */
140
141#define NC_CLASSIC_MODEL 0x0100 /**< Enforce classic model on netCDF-4. Mode flag for nc_create(). */
142#define NC_64BIT_OFFSET  0x0200  /**< Use large (64-bit) file offsets. Mode flag for nc_create(). */
143
144/** \deprecated The following flag currently is ignored, but use in
145 * nc_open() or nc_create() may someday support use of advisory
146 * locking to prevent multiple writers from clobbering a file
147 */
148#define NC_LOCK          0x0400
149
150/** Share updates, limit caching.
151Use this in mode flags for both nc_create() and nc_open(). */
152#define NC_SHARE         0x0800
153
154#define NC_NETCDF4       0x1000  /**< Use netCDF-4/HDF5 format. Mode flag for nc_create(). */
155
156/** Turn on MPI I/O.
157Use this in mode flags for both nc_create() and nc_open(). */
158#define NC_MPIIO         0x2000
159/** Turn on MPI POSIX I/O.
160Use this in mode flags for both nc_create() and nc_open(). */
161#define NC_MPIPOSIX      0x4000 /**< \deprecated As of libhdf5 1.8.13. */
162
163#define NC_INMEMORY      0x8000  /**< Read from memory. Mode flag for nc_open() or nc_create(). */
164
165#define NC_PNETCDF       (NC_MPIIO) /**< Use parallel-netcdf library; alias for NC_MPIIO. */
166
167/** Format specifier for nc_set_default_format() and returned
168 *  by nc_inq_format. This returns the format as provided by
169 *  the API. See nc_inq_format_extended to see the true file format.
170 *  Starting with version 3.6, there are different format netCDF files.
171 *  4.0 introduces the third one. \see netcdf_format
172 */
173/**@{*/
174#define NC_FORMAT_CLASSIC         (1)
175/* After adding CDF5 support, this flag
176   is somewhat confusing. So, it is renamed.
177   Note that the name in the contributed code
178   NC_FORMAT_64BIT was renamed to NC_FORMAT_CDF2
179*/
180#define NC_FORMAT_64BIT_OFFSET    (2)
181#define NC_FORMAT_64BIT           (NC_FORMAT_64BIT_OFFSET) /**< \deprecated Saved for compatibility.  Use NC_FORMAT_64BIT_OFFSET or NC_FORMAT_64BIT_DATA, from netCDF 4.4.0 onwards. */
182#define NC_FORMAT_NETCDF4         (3)
183#define NC_FORMAT_NETCDF4_CLASSIC (4)
184#define NC_FORMAT_64BIT_DATA      (5)
185
186/* Alias */
187#define NC_FORMAT_CDF5    NC_FORMAT_64BIT_DATA
188
189/**@}*/
190
191/** Extended format specifier returned by  nc_inq_format_extended()
192 *  Added in version 4.3.1. This returns the true format of the
193 *  underlying data.
194 * The function returns two values
195 * 1. a small integer indicating the underlying source type
196 *    of the data. Note that this may differ from what the user
197 *    sees from nc_inq_format() because this latter function
198 *    returns what the user can expect to see thru the API.
199 * 2. A mode value indicating what mode flags are effectively
200 *    set for this dataset. This usually will be a superset
201 *    of the mode flags used as the argument to nc_open
202 *    or nc_create.
203 * More or less, the #1 values track the set of dispatch tables.
204 * The #1 values are as follows.
205 * Note that CDF-5 returns NC_FORMAT_NC3, but sets the mode flag properly.
206 */
207/**@{*/
208
209#define NC_FORMATX_NC3       (1)
210#define NC_FORMATX_NC_HDF5   (2) /**< netCDF-4 subset of HDF5 */
211#define NC_FORMATX_NC4       NC_FORMATX_NC_HDF5 /**< alias */
212#define NC_FORMATX_NC_HDF4   (3) /**< netCDF-4 subset of HDF4 */
213#define NC_FORMATX_PNETCDF   (4)
214#define NC_FORMATX_DAP2      (5)
215#define NC_FORMATX_DAP4      (6)
216#define NC_FORMATX_UNDEFINED (0)
217
218  /* To avoid breaking compatibility (such as in the python library),
219   we need to retain the NC_FORMAT_xxx format as well. This may come
220  out eventually, as the NC_FORMATX is more clear that it's an extended
221  format specifier.*/
222
223#define NC_FORMAT_NC3       NC_FORMATX_NC3 /**< \deprecated As of 4.4.0, use NC_FORMATX_NC3 */
224#define NC_FORMAT_NC_HDF5   NC_FORMATX_NC_HDF5 /**< \deprecated As of 4.4.0, use NC_FORMATX_NC_HDF5 */
225#define NC_FORMAT_NC4       NC_FORMATX_NC4 /**< \deprecated As of 4.4.0, use NC_FORMATX_NC4 */
226#define NC_FORMAT_NC_HDF4   NC_FORMATX_NC_HDF4 /**< \deprecated As of 4.4.0, use NC_FORMATX_HDF4 */
227#define NC_FORMAT_PNETCDF   NC_FORMATX_PNETCDF /**< \deprecated As of 4.4.0, use NC_FORMATX_PNETCDF */
228#define NC_FORMAT_DAP2      NC_FORMATX_DAP2 /**< \deprecated As of 4.4.0, use NC_FORMATX_DAP2 */
229#define NC_FORMAT_DAP4      NC_FORMATX_DAP4 /**< \deprecated As of 4.4.0, use NC_FORMATX_DAP4 */
230#define NC_FORMAT_UNDEFINED NC_FORMATX_UNDEFINED /**< \deprecated As of 4.4.0, use NC_FORMATX_UNDEFINED */
231
232/**@}*/
233
234/** Let nc__create() or nc__open() figure out a suitable buffer size. */
235#define NC_SIZEHINT_DEFAULT 0
236
237/** In nc__enddef(), align to the buffer size. */
238#define NC_ALIGN_CHUNK ((size_t)(-1))
239
240/** Size argument to nc_def_dim() for an unlimited dimension. */
241#define NC_UNLIMITED 0L
242
243/** Attribute id to put/get a global attribute. */
244#define NC_GLOBAL -1
245
246/**
247Maximum for classic library.
248
249In the classic netCDF model there are maximum values for the number of
250dimensions in the file (\ref NC_MAX_DIMS), the number of global or per
251variable attributes (\ref NC_MAX_ATTRS), the number of variables in
252the file (\ref NC_MAX_VARS), and the length of a name (\ref
253NC_MAX_NAME).
254
255These maximums are enforced by the interface, to facilitate writing
256applications and utilities.  However, nothing is statically allocated
257to these sizes internally.
258
259These maximums are not used for netCDF-4/HDF5 files unless they were
260created with the ::NC_CLASSIC_MODEL flag.
261
262As a rule, NC_MAX_VAR_DIMS <= NC_MAX_DIMS.
263*/
264/**@{*/
265#define NC_MAX_DIMS 1024
266#define NC_MAX_ATTRS 8192
267#define NC_MAX_VARS 8192
268#define NC_MAX_NAME 256
269#define NC_MAX_VAR_DIMS 1024 /**< max per variable dimensions */
270/**@}*/
271
272/** This is the max size of an SD dataset name in HDF4 (from HDF4 documentation).*/
273#define NC_MAX_HDF4_NAME 64
274
275/** In HDF5 files you can set the endianness of variables with
276    nc_def_var_endian(). This define is used there. */
277/**@{*/
278#define NC_ENDIAN_NATIVE 0
279#define NC_ENDIAN_LITTLE 1
280#define NC_ENDIAN_BIG    2
281/**@}*/
282
283/** In HDF5 files you can set storage for each variable to be either
284 * contiguous or chunked, with nc_def_var_chunking().  This define is
285 * used there. */
286/**@{*/
287#define NC_CHUNKED    0
288#define NC_CONTIGUOUS 1
289/**@}*/
290
291/** In HDF5 files you can set check-summing for each variable.
292Currently the only checksum available is Fletcher-32, which can be set
293with the function nc_def_var_fletcher32.  These defines are used
294there. */
295/**@{*/
296#define NC_NOCHECKSUM 0
297#define NC_FLETCHER32 1
298/**@}*/
299
300/**@{*/
301/** Control the HDF5 shuffle filter. In HDF5 files you can specify
302 * that a shuffle filter should be used on each chunk of a variable to
303 * improve compression for that variable. This per-variable shuffle
304 * property can be set with the function nc_def_var_deflate(). */
305#define NC_NOSHUFFLE 0
306#define NC_SHUFFLE   1
307/**@}*/
308
309/** The netcdf version 3 functions all return integer error status.
310 * These are the possible values, in addition to certain values from
311 * the system errno.h.
312 */
313#define NC_ISSYSERR(err) ((err) > 0)
314
315#define NC_NOERR 0   /**< No Error */
316#define NC2_ERR         (-1)       /**< Returned for all errors in the v2 API. */
317
318/** Not a netcdf id.
319
320The specified netCDF ID does not refer to an
321open netCDF dataset. */
322#define NC_EBADID (-33)
323#define NC_ENFILE (-34)    /**< Too many netcdfs open */
324#define NC_EEXIST (-35)    /**< netcdf file exists && NC_NOCLOBBER */
325#define NC_EINVAL (-36)    /**< Invalid Argument */
326#define NC_EPERM (-37)    /**< Write to read only */
327
328/** Operation not allowed in data mode. This is returned for netCDF
329classic or 64-bit offset files, or for netCDF-4 files, when they were
330been created with ::NC_CLASSIC_MODEL flag in nc_create(). */
331#define NC_ENOTINDEFINE (-38)
332
333/** Operation not allowed in define mode.
334
335The specified netCDF is in define mode rather than data mode.
336
337With netCDF-4/HDF5 files, this error will not occur, unless
338::NC_CLASSIC_MODEL was used in nc_create().
339 */
340#define NC_EINDEFINE (-39)
341
342/** Index exceeds dimension bound.
343
344The specified corner indices were out of range for the rank of the
345specified variable. For example, a negative index or an index that is
346larger than the corresponding dimension length will cause an error. */
347#define NC_EINVALCOORDS (-40)
348
349/** NC_MAX_DIMS exceeded. Max number of dimensions exceeded in a
350classic or 64-bit offset file, or an netCDF-4 file with
351::NC_CLASSIC_MODEL on. */
352#define NC_EMAXDIMS (-41)
353
354#define NC_ENAMEINUSE (-42)    /**< String match to name in use */
355#define NC_ENOTATT (-43)    /**< Attribute not found */
356#define NC_EMAXATTS (-44)    /**< NC_MAX_ATTRS exceeded */
357#define NC_EBADTYPE (-45)    /**< Not a netcdf data type */
358#define NC_EBADDIM (-46)    /**< Invalid dimension id or name */
359#define NC_EUNLIMPOS (-47)    /**< NC_UNLIMITED in the wrong index */
360
361/** NC_MAX_VARS exceeded. Max number of variables exceeded in a
362classic or 64-bit offset file, or an netCDF-4 file with
363::NC_CLASSIC_MODEL on. */
364#define NC_EMAXVARS (-48)
365
366/** Variable not found.
367
368The variable ID is invalid for the specified netCDF dataset. */
369#define NC_ENOTVAR (-49)
370#define NC_EGLOBAL (-50)    /**< Action prohibited on NC_GLOBAL varid */
371#define NC_ENOTNC (-51)    /**< Not a netcdf file */
372#define NC_ESTS         (-52)    /**< In Fortran, string too short */
373#define NC_EMAXNAME     (-53)    /**< NC_MAX_NAME exceeded */
374#define NC_EUNLIMIT     (-54)    /**< NC_UNLIMITED size already in use */
375#define NC_ENORECVARS   (-55)    /**< nc_rec op when there are no record vars */
376#define NC_ECHAR (-56)    /**< Attempt to convert between text & numbers */
377
378/** Start+count exceeds dimension bound.
379
380The specified edge lengths added to the specified corner would have
381referenced data out of range for the rank of the specified
382variable. For example, an edge length that is larger than the
383corresponding dimension length minus the corner index will cause an
384error. */
385#define NC_EEDGE (-57)
386#define NC_ESTRIDE (-58)    /**< Illegal stride */
387#define NC_EBADNAME (-59)    /**< Attribute or variable name contains illegal characters */
388/* N.B. following must match value in ncx.h */
389
390/** Math result not representable.
391
392One or more of the values are out of the range of values representable
393by the desired type. */
394#define NC_ERANGE (-60)
395#define NC_ENOMEM (-61)    /**< Memory allocation (malloc) failure */
396#define NC_EVARSIZE     (-62)      /**< One or more variable sizes violate format constraints */
397#define NC_EDIMSIZE     (-63)      /**< Invalid dimension size */
398#define NC_ETRUNC       (-64)      /**< File likely truncated or possibly corrupted */
399#define NC_EAXISTYPE    (-65)      /**< Unknown axis type. */
400
401/* Following errors are added for DAP */
402#define NC_EDAP         (-66)      /**< Generic DAP error */
403#define NC_ECURL        (-67)      /**< Generic libcurl error */
404#define NC_EIO          (-68)      /**< Generic IO error */
405#define NC_ENODATA      (-69)      /**< Attempt to access variable with no data */
406#define NC_EDAPSVC      (-70)      /**< DAP server error */
407#define NC_EDAS (-71)      /**< Malformed or inaccessible DAS */
408#define NC_EDDS (-72)      /**< Malformed or inaccessible DDS */
409#define NC_EDATADDS (-73)      /**< Malformed or inaccessible DATADDS */
410#define NC_EDAPURL (-74)      /**< Malformed DAP URL */
411#define NC_EDAPCONSTRAINT (-75)    /**< Malformed DAP Constraint*/
412#define NC_ETRANSLATION (-76)      /**< Untranslatable construct */
413#define NC_EACCESS      (-77)      /**< Access Failure */
414#define NC_EAUTH        (-78)      /**< Authorization Failure */
415
416/* Misc. additional errors */
417#define NC_ENOTFOUND     (-90)      /**< No such file */
418#define NC_ECANTREMOVE   (-91)      /**< Can't remove file */
419
420/* The following was added in support of netcdf-4. Make all netcdf-4
421   error codes < -100 so that errors can be added to netcdf-3 if
422   needed. */
423#define NC4_FIRST_ERROR  (-100)
424
425/** Error at HDF5 layer. */
426#define NC_EHDFERR       (-101)
427#define NC_ECANTREAD     (-102)    /**< Can't read. */
428#define NC_ECANTWRITE    (-103)    /**< Can't write. */
429#define NC_ECANTCREATE   (-104)    /**< Can't create. */
430#define NC_EFILEMETA     (-105)    /**< Problem with file metadata. */
431#define NC_EDIMMETA      (-106)    /**< Problem with dimension metadata. */
432#define NC_EATTMETA      (-107)    /**< Problem with attribute metadata. */
433#define NC_EVARMETA      (-108)    /**< Problem with variable metadata. */
434#define NC_ENOCOMPOUND   (-109)    /**< Not a compound type. */
435#define NC_EATTEXISTS    (-110)    /**< Attribute already exists. */
436#define NC_ENOTNC4       (-111)    /**< Attempting netcdf-4 operation on netcdf-3 file. */
437
438/** Attempting netcdf-4 operation on strict nc3 netcdf-4 file. */
439#define NC_ESTRICTNC3    (-112)
440#define NC_ENOTNC3       (-113)    /**< Attempting netcdf-3 operation on netcdf-4 file. */
441#define NC_ENOPAR        (-114)    /**< Parallel operation on file opened for non-parallel access. */
442#define NC_EPARINIT      (-115)    /**< Error initializing for parallel access. */
443#define NC_EBADGRPID     (-116)    /**< Bad group ID. */
444#define NC_EBADTYPID     (-117)    /**< Bad type ID. */
445#define NC_ETYPDEFINED   (-118)    /**< Type has already been defined and may not be edited. */
446#define NC_EBADFIELD     (-119)    /**< Bad field ID. */
447#define NC_EBADCLASS     (-120)    /**< Bad class. */
448#define NC_EMAPTYPE      (-121)    /**< Mapped access for atomic types only. */
449#define NC_ELATEFILL     (-122)    /**< Attempt to define fill value when data already exists. */
450#define NC_ELATEDEF      (-123)    /**< Attempt to define var properties, like deflate, after enddef. */
451#define NC_EDIMSCALE     (-124)    /**< Problem with HDF5 dimscales. */
452#define NC_ENOGRP        (-125)    /**< No group found. */
453#define NC_ESTORAGE      (-126)    /**< Can't specify both contiguous and chunking. */
454#define NC_EBADCHUNK     (-127)    /**< Bad chunksize. */
455#define NC_ENOTBUILT     (-128)    /**< Attempt to use feature that was not turned on when netCDF was built. */
456#define NC_EDISKLESS     (-129)    /**< Error in using diskless  access. */
457#define NC_ECANTEXTEND   (-130)    /**< Attempt to extend dataset during ind. I/O operation. */
458#define NC_EMPI          (-131)    /**< MPI operation failed. */
459
460#define NC4_LAST_ERROR   (-131)
461
462/* This is used in netCDF-4 files for dimensions without coordinate
463 * vars. */
464#define DIM_WITHOUT_VARIABLE "This is a netCDF dimension but not a netCDF variable."
465
466/* This is here at the request of the NCO team to support our
467 * mistake of having chunksizes be first ints, then size_t. Doh! */
468#define NC_HAVE_NEW_CHUNKING_API 1
469
470
471/*Errors for all remote access methods(e.g. DAP and CDMREMOTE)*/
472#define NC_EURL (NC_EDAPURL)   /* Malformed URL */
473#define NC_ECONSTRAINT  (NC_EDAPCONSTRAINT)   /* Malformed Constraint*/
474
475
476/*
477 * The Interface
478 */
479
480/* Declaration modifiers for DLL support (MSC et al) */
481#if defined(DLL_NETCDF) /* define when library is a DLL */
482#  if defined(DLL_EXPORT) /* define when building the library */
483#   define MSC_EXTRA __declspec(dllexport)
484#  else
485#   define MSC_EXTRA __declspec(dllimport)
486#  endif
487#include <io.h>
488#else
489#define MSC_EXTRA
490#endif /* defined(DLL_NETCDF) */
491
492# define EXTERNL MSC_EXTRA extern
493
494#if defined(DLL_NETCDF) /* define when library is a DLL */
495EXTERNL int ncerr;
496EXTERNL int ncopts;
497#endif
498
499EXTERNL const char *
500nc_inq_libvers(void);
501
502EXTERNL const char *
503nc_strerror(int ncerr);
504
505EXTERNL int
506nc__create(const char *path, int cmode, size_t initialsz,
507  size_t *chunksizehintp, int *ncidp);
508
509EXTERNL int
510nc_create(const char *path, int cmode, int *ncidp);
511
512EXTERNL int
513nc__open(const char *path, int mode,
514 size_t *chunksizehintp, int *ncidp);
515
516EXTERNL int
517nc_open(const char *path, int mode, int *ncidp);
518
519/* Learn the path used to open/create the file. */
520EXTERNL int
521nc_inq_path(int ncid, size_t *pathlen, char *path);
522
523/* Given an ncid and group name (NULL gets root group), return
524 * locid. */
525EXTERNL int
526nc_inq_ncid(int ncid, const char *name, int *grp_ncid);
527
528/* Given a location id, return the number of groups it contains, and
529 * an array of their locids. */
530EXTERNL int
531nc_inq_grps(int ncid, int *numgrps, int *ncids);
532
533/* Given locid, find name of group. (Root group is named "/".) */
534EXTERNL int
535nc_inq_grpname(int ncid, char *name);
536
537/* Given ncid, find full name and len of full name. (Root group is
538 * named "/", with length 1.) */
539EXTERNL int
540nc_inq_grpname_full(int ncid, size_t *lenp, char *full_name);
541
542/* Given ncid, find len of full name. */
543EXTERNL int
544nc_inq_grpname_len(int ncid, size_t *lenp);
545
546/* Given an ncid, find the ncid of its parent group. */
547EXTERNL int
548nc_inq_grp_parent(int ncid, int *parent_ncid);
549
550/* Given a name and parent ncid, find group ncid. */
551EXTERNL int
552nc_inq_grp_ncid(int ncid, const char *grp_name, int *grp_ncid);
553
554/* Given a full name and ncid, find group ncid. */
555EXTERNL int
556nc_inq_grp_full_ncid(int ncid, const char *full_name, int *grp_ncid);
557
558/* Get a list of ids for all the variables in a group. */
559EXTERNL int
560nc_inq_varids(int ncid, int *nvars, int *varids);
561
562/* Find all dimids for a location. This finds all dimensions in a
563 * group, or any of its parents. */
564EXTERNL int
565nc_inq_dimids(int ncid, int *ndims, int *dimids, int include_parents);
566
567/* Find all user-defined types for a location. This finds all
568 * user-defined types in a group. */
569EXTERNL int
570nc_inq_typeids(int ncid, int *ntypes, int *typeids);
571
572/* Are two types equal? */
573EXTERNL int
574nc_inq_type_equal(int ncid1nc_type typeid1, int ncid2,
575   nc_type typeid2, int *equal);
576
577/* Create a group. its ncid is returned in the new_ncid pointer. */
578EXTERNL int
579nc_def_grp(int parent_ncid, const char *name, int *new_ncid);
580
581/* Rename a group */
582EXTERNL int
583nc_rename_grp(int grpid, const char *name);
584
585/* Here are functions for dealing with compound types. */
586
587/* Create a compound type. */
588EXTERNL int
589nc_def_compound(int ncid, size_t size, const char *namenc_type *typeidp);
590
591/* Insert a named field into a compound type. */
592EXTERNL int
593nc_insert_compound(int ncidnc_type xtype, const char *name,
594    size_t offsetnc_type field_typeid);
595
596/* Insert a named array into a compound type. */
597EXTERNL int
598nc_insert_array_compound(int ncidnc_type xtype, const char *name,
599  size_t offsetnc_type field_typeid,
600  int ndims, const int *dim_sizes);
601
602/* Get the name and size of a type. */
603EXTERNL int
604nc_inq_type(int ncidnc_type xtype, char *name, size_t *size);
605
606/* Get the id of a type from the name. */
607EXTERNL int
608nc_inq_typeid(int ncid, const char *namenc_type *typeidp);
609
610/* Get the name, size, and number of fields in a compound type. */
611EXTERNL int
612nc_inq_compound(int ncidnc_type xtype, char *name, size_t *sizep,
613 size_t *nfieldsp);
614
615/* Get the name of a compound type. */
616EXTERNL int
617nc_inq_compound_name(int ncidnc_type xtype, char *name);
618
619/* Get the size of a compound type. */
620EXTERNL int
621nc_inq_compound_size(int ncidnc_type xtype, size_t *sizep);
622
623/* Get the number of fields in this compound type. */
624EXTERNL int
625nc_inq_compound_nfields(int ncidnc_type xtype, size_t *nfieldsp);
626
627/* Given the xtype and the fieldid, get all info about it. */
628EXTERNL int
629nc_inq_compound_field(int ncidnc_type xtype, int fieldid, char *name,
630       size_t *offsetpnc_type *field_typeidp, int *ndimsp,
631       int *dim_sizesp);
632
633/* Given the typeid and the fieldid, get the name. */
634EXTERNL int
635nc_inq_compound_fieldname(int ncidnc_type xtype, int fieldid,
636   char *name);
637
638/* Given the xtype and the name, get the fieldid. */
639EXTERNL int
640nc_inq_compound_fieldindex(int ncidnc_type xtype, const char *name,
641    int *fieldidp);
642
643/* Given the xtype and fieldid, get the offset. */
644EXTERNL int
645nc_inq_compound_fieldoffset(int ncidnc_type xtype, int fieldid,
646     size_t *offsetp);
647
648/* Given the xtype and the fieldid, get the type of that field. */
649EXTERNL int
650nc_inq_compound_fieldtype(int ncidnc_type xtype, int fieldid,
651   nc_type *field_typeidp);
652
653/* Given the xtype and the fieldid, get the number of dimensions for
654 * that field (scalars are 0). */
655EXTERNL int
656nc_inq_compound_fieldndims(int ncidnc_type xtype, int fieldid,
657    int *ndimsp);
658
659/* Given the xtype and the fieldid, get the sizes of dimensions for
660 * that field. User must have allocated storage for the dim_sizes. */
661EXTERNL int
662nc_inq_compound_fielddim_sizes(int ncidnc_type xtype, int fieldid,
663        int *dim_sizes);
664
665/** This is the type of arrays of vlens. */
666typedef struct {
667    size_t len; /**< Length of VL data (in base type units) */
668    void *p;    /**< Pointer to VL data */
669nc_vlen_t;
670
671/** Calculate an offset for creating a compound type. This calls a
672 * mysterious C macro which was found carved into one of the blocks of
673 * the Newgrange passage tomb in County Meath, Ireland. This code has
674 * been carbon dated to 3200 B.C.E. */
675#define NC_COMPOUND_OFFSET(S,M)    (offsetof(S,M))
676
677/* Create a variable length type. */
678EXTERNL int
679nc_def_vlen(int ncid, const char *namenc_type base_typeidnc_type *xtypep);
680
681/* Find out about a vlen. */
682EXTERNL int
683nc_inq_vlen(int ncidnc_type xtype, char *name, size_t *datum_sizep,
684     nc_type *base_nc_typep);
685
686/* When you read VLEN type the library will actually allocate the
687 * storage space for the data. This storage space must be freed, so
688 * pass the pointer back to this function, when you're done with the
689 * data, and it will free the vlen memory. */
690EXTERNL int
691nc_free_vlen(nc_vlen_t *vl);
692
693EXTERNL int
694nc_free_vlens(size_t lennc_vlen_t vlens[]);
695
696/* Put or get one element in a vlen array. */
697EXTERNL int
698nc_put_vlen_element(int ncid, int typeid1, void *vlen_element,
699     size_t len, const void *data);
700
701EXTERNL int
702nc_get_vlen_element(int ncid, int typeid1, const void *vlen_element,
703     size_t *len, void *data);
704
705/* When you read the string type the library will allocate the storage
706 * space for the data. This storage space must be freed, so pass the
707 * pointer back to this function, when you're done with the data, and
708 * it will free the string memory. */
709EXTERNL int
710nc_free_string(size_t len, char **data);
711
712/* Find out about a user defined type. */
713EXTERNL int
714nc_inq_user_type(int ncidnc_type xtype, char *name, size_t *size,
715  nc_type *base_nc_typep, size_t *nfieldsp, int *classp);
716
717/* Write an attribute of any type. */
718EXTERNL int
719nc_put_att(int ncid, int varid, const char *namenc_type xtype,
720    size_t len, const void *op);
721
722/* Read an attribute of any type. */
723EXTERNL int
724nc_get_att(int ncid, int varid, const char *name, void *ip);
725
726/* Enum type. */
727
728/* Create an enum type. Provide a base type and a name. At the moment
729 * only ints are accepted as base types. */
730EXTERNL int
731nc_def_enum(int ncidnc_type base_typeid, const char *name,
732     nc_type *typeidp);
733
734/* Insert a named value into an enum type. The value must fit within
735 * the size of the enum type, the name size must be <= NC_MAX_NAME. */
736EXTERNL int
737nc_insert_enum(int ncidnc_type xtype, const char *name,
738        const void *value);
739
740/* Get information about an enum type: its name, base type and the
741 * number of members defined. */
742EXTERNL int
743nc_inq_enum(int ncidnc_type xtype, char *namenc_type *base_nc_typep,
744     size_t *base_sizep, size_t *num_membersp);
745
746/* Get information about an enum member: a name and value. Name size
747 * will be <= NC_MAX_NAME. */
748EXTERNL int
749nc_inq_enum_member(int ncidnc_type xtype, int idx, char *name,
750    void *value);
751
752
753/* Get enum name from enum value. Name size will be <= NC_MAX_NAME. */
754EXTERNL int
755nc_inq_enum_ident(int ncidnc_type xtype, long long value, char *identifier);
756
757/* Opaque type. */
758
759/* Create an opaque type. Provide a size and a name. */
760EXTERNL int
761nc_def_opaque(int ncid, size_t size, const char *namenc_type *xtypep);
762
763/* Get information about an opaque type. */
764EXTERNL int
765nc_inq_opaque(int ncidnc_type xtype, char *name, size_t *sizep);
766
767/* Write entire var of any type. */
768EXTERNL int
769nc_put_var(int ncid, int varid,  const void *op);
770
771/* Read entire var of any type. */
772EXTERNL int
773nc_get_var(int ncid, int varid,  void *ip);
774
775/* Write one value. */
776EXTERNL int
777nc_put_var1(int ncid, int varid,  const size_t *indexp,
778     const void *op);
779
780/* Read one value. */
781EXTERNL int
782nc_get_var1(int ncid, int varid,  const size_t *indexp, void *ip);
783
784/* Write an array of values. */
785EXTERNL int
786nc_put_vara(int ncid, int varid,  const size_t *startp,
787     const size_t *countp, const void *op);
788
789/* Read an array of values. */
790EXTERNL int
791nc_get_vara(int ncid, int varid,  const size_t *startp,
792     const size_t *countp, void *ip);
793
794/* Write slices of an array of values. */
795EXTERNL int
796nc_put_vars(int ncid, int varid,  const size_t *startp,
797     const size_t *countp, const ptrdiff_t *stridep,
798     const void *op);
799
800/* Read slices of an array of values. */
801EXTERNL int
802nc_get_vars(int ncid, int varid,  const size_t *startp,
803     const size_t *countp, const ptrdiff_t *stridep,
804     void *ip);
805
806/* Write mapped slices of an array of values. */
807EXTERNL int
808nc_put_varm(int ncid, int varid,  const size_t *startp,
809     const size_t *countp, const ptrdiff_t *stridep,
810     const ptrdiff_t *imapp, const void *op);
811
812/* Read mapped slices of an array of values. */
813EXTERNL int
814nc_get_varm(int ncid, int varid,  const size_t *startp,
815     const size_t *countp, const ptrdiff_t *stridep,
816     const ptrdiff_t *imapp, void *ip);
817
818/* Extra netcdf-4 stuff. */
819
820/* Set compression settings for a variable. Lower is faster, higher is
821 * better. Must be called after nc_def_var and before nc_enddef. */
822EXTERNL int
823nc_def_var_deflate(int ncid, int varid, int shuffle, int deflate,
824    int deflate_level);
825
826/* Find out compression settings of a var. */
827EXTERNL int
828nc_inq_var_deflate(int ncid, int varid, int *shufflep,
829    int *deflatep, int *deflate_levelp);
830
831/* Find out szip settings of a var. */
832EXTERNL int
833nc_inq_var_szip(int ncid, int varid, int *options_maskp, int *pixels_per_blockp);
834
835/* Set fletcher32 checksum for a var. This must be done after nc_def_var
836   and before nc_enddef. */
837EXTERNL int
838nc_def_var_fletcher32(int ncid, int varid, int fletcher32);
839
840/* Inquire about fletcher32 checksum for a var. */
841EXTERNL int
842nc_inq_var_fletcher32(int ncid, int varid, int *fletcher32p);
843
844/* Define chunking for a variable. This must be done after nc_def_var
845   and before nc_enddef. */
846EXTERNL int
847nc_def_var_chunking(int ncid, int varid, int storage, const size_t *chunksizesp);
848
849/* Inq chunking stuff for a var. */
850EXTERNL int
851nc_inq_var_chunking(int ncid, int varid, int *storagep, size_t *chunksizesp);
852
853/* Define fill value behavior for a variable. This must be done after
854   nc_def_var and before nc_enddef. */
855EXTERNL int
856nc_def_var_fill(int ncid, int varid, int no_fill, const void *fill_value);
857
858/* Inq fill value setting for a var. */
859EXTERNL int
860nc_inq_var_fill(int ncid, int varid, int *no_fill, void *fill_valuep);
861
862/* Define the endianness of a variable. */
863EXTERNL int
864nc_def_var_endian(int ncid, int varid, int endian);
865
866/* Learn about the endianness of a variable. */
867EXTERNL int
868nc_inq_var_endian(int ncid, int varid, int *endianp);
869
870/* Set the fill mode (classic or 64-bit offset files only). */
871EXTERNL int
872nc_set_fill(int ncid, int fillmode, int *old_modep);
873
874/* Set the default nc_create format to NC_FORMAT_CLASSIC,
875 * NC_FORMAT_64BIT, NC_FORMAT_NETCDF4, etc */
876EXTERNL int
877nc_set_default_format(int format, int *old_formatp);
878
879/* Set the cache size, nelems, and preemption policy. */
880EXTERNL int
881nc_set_chunk_cache(size_t size, size_t nelems, float preemption);
882
883/* Get the cache size, nelems, and preemption policy. */
884EXTERNL int
885nc_get_chunk_cache(size_t *sizep, size_t *nelemsp, float *preemptionp);
886
887/* Set the per-variable cache size, nelems, and preemption policy. */
888EXTERNL int
889nc_set_var_chunk_cache(int ncid, int varid, size_t size, size_t nelems,
890        float preemption);
891
892/* Get the per-variable cache size, nelems, and preemption policy. */
893EXTERNL int
894nc_get_var_chunk_cache(int ncid, int varid, size_t *sizep, size_t *nelemsp,
895        float *preemptionp);
896
897EXTERNL int
898nc_redef(int ncid);
899
900/* Is this ever used? Convert to parameter form */
901EXTERNL int
902nc__enddef(int ncid, size_t h_minfree, size_t v_align,
903 size_t v_minfree, size_t r_align);
904
905EXTERNL int
906nc_enddef(int ncid);
907
908EXTERNL int
909nc_sync(int ncid);
910
911EXTERNL int
912nc_abort(int ncid);
913
914EXTERNL int
915nc_close(int ncid);
916
917EXTERNL int
918nc_inq(int ncid, int *ndimsp, int *nvarsp, int *nattsp, int *unlimdimidp);
919
920EXTERNL int
921nc_inq_ndims(int ncid, int *ndimsp);
922
923EXTERNL int
924nc_inq_nvars(int ncid, int *nvarsp);
925
926EXTERNL int
927nc_inq_natts(int ncid, int *nattsp);
928
929EXTERNL int
930nc_inq_unlimdim(int ncid, int *unlimdimidp);
931
932/* The next function is for NetCDF-4 only */
933EXTERNL int
934nc_inq_unlimdims(int ncid, int *nunlimdimsp, int *unlimdimidsp);
935
936/* Added in 3.6.1 to return format of netCDF file. */
937EXTERNL int
938nc_inq_format(int ncid, int *formatp);
939
940/* Added in 4.3.1 to return additional format info */
941EXTERNL int
942nc_inq_format_extended(int ncid, int *formatp, int* modep);
943
944/* Begin _dim */
945
946EXTERNL int
947nc_def_dim(int ncid, const char *name, size_t len, int *idp);
948
949EXTERNL int
950nc_inq_dimid(int ncid, const char *name, int *idp);
951
952EXTERNL int
953nc_inq_dim(int ncid, int dimid, char *name, size_t *lenp);
954
955EXTERNL int
956nc_inq_dimname(int ncid, int dimid, char *name);
957
958EXTERNL int
959nc_inq_dimlen(int ncid, int dimid, size_t *lenp);
960
961EXTERNL int
962nc_rename_dim(int ncid, int dimid, const char *name);
963
964/* End _dim */
965/* Begin _att */
966
967EXTERNL int
968nc_inq_att(int ncid, int varid, const char *name,
969    nc_type *xtypep, size_t *lenp);
970
971EXTERNL int
972nc_inq_attid(int ncid, int varid, const char *name, int *idp);
973
974EXTERNL int
975nc_inq_atttype(int ncid, int varid, const char *namenc_type *xtypep);
976
977EXTERNL int
978nc_inq_attlen(int ncid, int varid, const char *name, size_t *lenp);
979
980EXTERNL int
981nc_inq_attname(int ncid, int varid, int attnum, char *name);
982
983EXTERNL int
984nc_copy_att(int ncid_in, int varid_in, const char *name, int ncid_out, int varid_out);
985
986EXTERNL int
987nc_rename_att(int ncid, int varid, const char *name, const char *newname);
988
989EXTERNL int
990nc_del_att(int ncid, int varid, const char *name);
991
992/* End _att */
993/* Begin {put,get}_att */
994EXTERNL int
995nc_put_att_text(int ncid, int varid, const char *name,
996 size_t len, const char *op);
997
998EXTERNL int
999nc_get_att_text(int ncid, int varid, const char *name, char *ip);
1000
1001EXTERNL int
1002nc_put_att_string(int ncid, int varid, const char *name,
1003   size_t len, const char **op);
1004
1005EXTERNL int
1006nc_get_att_string(int ncid, int varid, const char *name, char **ip);
1007
1008EXTERNL int
1009nc_put_att_uchar(int ncid, int varid, const char *namenc_type xtype,
1010  size_t len, const unsigned char *op);
1011
1012EXTERNL int
1013nc_get_att_uchar(int ncid, int varid, const char *name, unsigned char *ip);
1014
1015EXTERNL int
1016nc_put_att_schar(int ncid, int varid, const char *namenc_type xtype,
1017  size_t len, const signed char *op);
1018
1019EXTERNL int
1020nc_get_att_schar(int ncid, int varid, const char *name, signed char *ip);
1021
1022EXTERNL int
1023nc_put_att_short(int ncid, int varid, const char *namenc_type xtype,
1024  size_t len, const short *op);
1025
1026EXTERNL int
1027nc_get_att_short(int ncid, int varid, const char *name, short *ip);
1028
1029EXTERNL int
1030nc_put_att_int(int ncid, int varid, const char *namenc_type xtype,
1031        size_t len, const int *op);
1032
1033EXTERNL int
1034nc_get_att_int(int ncid, int varid, const char *name, int *ip);
1035
1036EXTERNL int
1037nc_put_att_long(int ncid, int varid, const char *namenc_type xtype,
1038 size_t len, const long *op);
1039
1040EXTERNL int
1041nc_get_att_long(int ncid, int varid, const char *name, long *ip);
1042
1043EXTERNL int
1044nc_put_att_float(int ncid, int varid, const char *namenc_type xtype,
1045  size_t len, const float *op);
1046
1047EXTERNL int
1048nc_get_att_float(int ncid, int varid, const char *name, float *ip);
1049
1050EXTERNL int
1051nc_put_att_double(int ncid, int varid, const char *namenc_type xtype,
1052   size_t len, const double *op);
1053
1054EXTERNL int
1055nc_get_att_double(int ncid, int varid, const char *name, double *ip);
1056
1057EXTERNL int
1058nc_put_att_ushort(int ncid, int varid, const char *namenc_type xtype,
1059   size_t len, const unsigned short *op);
1060
1061EXTERNL int
1062nc_get_att_ushort(int ncid, int varid, const char *name, unsigned short *ip);
1063
1064EXTERNL int
1065nc_put_att_uint(int ncid, int varid, const char *namenc_type xtype,
1066 size_t len, const unsigned int *op);
1067
1068EXTERNL int
1069nc_get_att_uint(int ncid, int varid, const char *name, unsigned int *ip);
1070
1071EXTERNL int
1072nc_put_att_longlong(int ncid, int varid, const char *namenc_type xtype,
1073  size_t len, const long long *op);
1074
1075EXTERNL int
1076nc_get_att_longlong(int ncid, int varid, const char *name, long long *ip);
1077
1078EXTERNL int
1079nc_put_att_ulonglong(int ncid, int varid, const char *namenc_type xtype,
1080      size_t len, const unsigned long long *op);
1081
1082EXTERNL int
1083nc_get_att_ulonglong(int ncid, int varid, const char *name,
1084      unsigned long long *ip);
1085
1086
1087/* End {put,get}_att */
1088/* Begin _var */
1089
1090EXTERNL int
1091nc_def_var(int ncid, const char *namenc_type xtype, int ndims,
1092    const int *dimidsp, int *varidp);
1093
1094EXTERNL int
1095nc_inq_var(int ncid, int varid, char *namenc_type *xtypep,
1096    int *ndimsp, int *dimidsp, int *nattsp);
1097
1098EXTERNL int
1099nc_inq_varid(int ncid, const char *name, int *varidp);
1100
1101EXTERNL int
1102nc_inq_varname(int ncid, int varid, char *name);
1103
1104EXTERNL int
1105nc_inq_vartype(int ncid, int varidnc_type *xtypep);
1106
1107EXTERNL int
1108nc_inq_varndims(int ncid, int varid, int *ndimsp);
1109
1110EXTERNL int
1111nc_inq_vardimid(int ncid, int varid, int *dimidsp);
1112
1113EXTERNL int
1114nc_inq_varnatts(int ncid, int varid, int *nattsp);
1115
1116EXTERNL int
1117nc_rename_var(int ncid, int varid, const char *name);
1118
1119EXTERNL int
1120nc_copy_var(int ncid_in, int varid, int ncid_out);
1121
1122#ifndef ncvarcpy
1123/* support the old name for now */
1124#define ncvarcpy(ncid_invaridncid_outncvarcopy((ncid_in), (varid), (ncid_out))
1125#endif
1126
1127/* End _var */
1128/* Begin {put,get}_var1 */
1129
1130EXTERNL int
1131nc_put_var1_text(int ncid, int varid, const size_t *indexp, const char *op);
1132
1133EXTERNL int
1134nc_get_var1_text(int ncid, int varid, const size_t *indexp, char *ip);
1135
1136EXTERNL int
1137nc_put_var1_uchar(int ncid, int varid, const size_t *indexp,
1138   const unsigned char *op);
1139
1140EXTERNL int
1141nc_get_var1_uchar(int ncid, int varid, const size_t *indexp,
1142   unsigned char *ip);
1143
1144EXTERNL int
1145nc_put_var1_schar(int ncid, int varid, const size_t *indexp,
1146   const signed char *op);
1147
1148EXTERNL int
1149nc_get_var1_schar(int ncid, int varid, const size_t *indexp,
1150   signed char *ip);
1151
1152EXTERNL int
1153nc_put_var1_short(int ncid, int varid, const size_t *indexp,
1154   const short *op);
1155
1156EXTERNL int
1157nc_get_var1_short(int ncid, int varid, const size_t *indexp,
1158   short *ip);
1159
1160EXTERNL int
1161nc_put_var1_int(int ncid, int varid, const size_t *indexp, const int *op);
1162
1163EXTERNL int
1164nc_get_var1_int(int ncid, int varid, const size_t *indexp, int *ip);
1165
1166EXTERNL int
1167nc_put_var1_long(int ncid, int varid, const size_t *indexp, const long *op);
1168
1169EXTERNL int
1170nc_get_var1_long(int ncid, int varid, const size_t *indexp, long *ip);
1171
1172EXTERNL int
1173nc_put_var1_float(int ncid, int varid, const size_t *indexp, const float *op);
1174
1175EXTERNL int
1176nc_get_var1_float(int ncid, int varid, const size_t *indexp, float *ip);
1177
1178EXTERNL int
1179nc_put_var1_double(int ncid, int varid, const size_t *indexp, const double *op);
1180
1181EXTERNL int
1182nc_get_var1_double(int ncid, int varid, const size_t *indexp, double *ip);
1183
1184EXTERNL int
1185nc_put_var1_ushort(int ncid, int varid, const size_t *indexp,
1186    const unsigned short *op);
1187
1188EXTERNL int
1189nc_get_var1_ushort(int ncid, int varid, const size_t *indexp,
1190    unsigned short *ip);
1191
1192EXTERNL int
1193nc_put_var1_uint(int ncid, int varid, const size_t *indexp,
1194  const unsigned int *op);
1195
1196EXTERNL int
1197nc_get_var1_uint(int ncid, int varid, const size_t *indexp,
1198  unsigned int *ip);
1199
1200EXTERNL int
1201nc_put_var1_longlong(int ncid, int varid, const size_t *indexp,
1202      const long long *op);
1203
1204EXTERNL int
1205nc_get_var1_longlong(int ncid, int varid, const size_t *indexp,
1206   long long *ip);
1207
1208EXTERNL int
1209nc_put_var1_ulonglong(int ncid, int varid, const size_t *indexp,
1210    const unsigned long long *op);
1211
1212EXTERNL int
1213nc_get_var1_ulonglong(int ncid, int varid, const size_t *indexp,
1214    unsigned long long *ip);
1215
1216EXTERNL int
1217nc_put_var1_string(int ncid, int varid, const size_t *indexp,
1218    const char **op);
1219
1220EXTERNL int
1221nc_get_var1_string(int ncid, int varid, const size_t *indexp,
1222    char **ip);
1223
1224/* End {put,get}_var1 */
1225/* Begin {put,get}_vara */
1226
1227EXTERNL int
1228nc_put_vara_text(int ncid, int varid, const size_t *startp,
1229  const size_t *countp, const char *op);
1230
1231EXTERNL int
1232nc_get_vara_text(int ncid, int varid, const size_t *startp,
1233  const size_t *countp, char *ip);
1234
1235EXTERNL int
1236nc_put_vara_uchar(int ncid, int varid, const size_t *startp,
1237   const size_t *countp, const unsigned char *op);
1238
1239EXTERNL int
1240nc_get_vara_uchar(int ncid, int varid, const size_t *startp,
1241   const size_t *countp, unsigned char *ip);
1242
1243EXTERNL int
1244nc_put_vara_schar(int ncid, int varid, const size_t *startp,
1245   const size_t *countp, const signed char *op);
1246
1247EXTERNL int
1248nc_get_vara_schar(int ncid, int varid, const size_t *startp,
1249   const size_t *countp, signed char *ip);
1250
1251EXTERNL int
1252nc_put_vara_short(int ncid, int varid, const size_t *startp,
1253   const size_t *countp, const short *op);
1254
1255EXTERNL int
1256nc_get_vara_short(int ncid, int varid, const size_t *startp,
1257   const size_t *countp, short *ip);
1258
1259EXTERNL int
1260nc_put_vara_int(int ncid, int varid, const size_t *startp,
1261 const size_t *countp, const int *op);
1262
1263EXTERNL int
1264nc_get_vara_int(int ncid, int varid, const size_t *startp,
1265 const size_t *countp, int *ip);
1266
1267EXTERNL int
1268nc_put_vara_long(int ncid, int varid, const size_t *startp,
1269  const size_t *countp, const long *op);
1270
1271EXTERNL int
1272nc_get_vara_long(int ncid, int varid,
1273 const size_t *startp, const size_t *countp, long *ip);
1274
1275EXTERNL int
1276nc_put_vara_float(int ncid, int varid,
1277 const size_t *startp, const size_t *countp, const float *op);
1278
1279EXTERNL int
1280nc_get_vara_float(int ncid, int varid,
1281 const size_t *startp, const size_t *countp, float *ip);
1282
1283EXTERNL int
1284nc_put_vara_double(int ncid, int varid, const size_t *startp,
1285    const size_t *countp, const double *op);
1286
1287EXTERNL int
1288nc_get_vara_double(int ncid, int varid, const size_t *startp,
1289    const size_t *countp, double *ip);
1290
1291EXTERNL int
1292nc_put_vara_ushort(int ncid, int varid, const size_t *startp,
1293    const size_t *countp, const unsigned short *op);
1294
1295EXTERNL int
1296nc_get_vara_ushort(int ncid, int varid, const size_t *startp,
1297    const size_t *countp, unsigned short *ip);
1298
1299EXTERNL int
1300nc_put_vara_uint(int ncid, int varid, const size_t *startp,
1301  const size_t *countp, const unsigned int *op);
1302
1303EXTERNL int
1304nc_get_vara_uint(int ncid, int varid, const size_t *startp,
1305  const size_t *countp, unsigned int *ip);
1306
1307EXTERNL int
1308nc_put_vara_longlong(int ncid, int varid, const size_t *startp,
1309   const size_t *countp, const long long *op);
1310
1311EXTERNL int
1312nc_get_vara_longlong(int ncid, int varid, const size_t *startp,
1313   const size_t *countp, long long *ip);
1314
1315EXTERNL int
1316nc_put_vara_ulonglong(int ncid, int varid, const size_t *startp,
1317    const size_t *countp, const unsigned long long *op);
1318
1319EXTERNL int
1320nc_get_vara_ulonglong(int ncid, int varid, const size_t *startp,
1321    const size_t *countp, unsigned long long *ip);
1322
1323EXTERNL int
1324nc_put_vara_string(int ncid, int varid, const size_t *startp,
1325    const size_t *countp, const char **op);
1326
1327EXTERNL int
1328nc_get_vara_string(int ncid, int varid, const size_t *startp,
1329    const size_t *countp, char **ip);
1330
1331/* End {put,get}_vara */
1332/* Begin {put,get}_vars */
1333
1334EXTERNL int
1335nc_put_vars_text(int ncid, int varid,
1336 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1337 const char *op);
1338
1339EXTERNL int
1340nc_get_vars_text(int ncid, int varid,
1341 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1342 char *ip);
1343
1344EXTERNL int
1345nc_put_vars_uchar(int ncid, int varid,
1346 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1347 const unsigned char *op);
1348
1349EXTERNL int
1350nc_get_vars_uchar(int ncid, int varid,
1351 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1352 unsigned char *ip);
1353
1354EXTERNL int
1355nc_put_vars_schar(int ncid, int varid,
1356 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1357 const signed char *op);
1358
1359EXTERNL int
1360nc_get_vars_schar(int ncid, int varid,
1361 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1362 signed char *ip);
1363
1364EXTERNL int
1365nc_put_vars_short(int ncid, int varid,
1366 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1367 const short *op);
1368
1369EXTERNL int
1370nc_get_vars_short(int ncid, int varid, const size_t *startp,
1371   const size_t *countp, const ptrdiff_t *stridep,
1372   short *ip);
1373
1374EXTERNL int
1375nc_put_vars_int(int ncid, int varid,
1376 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1377 const int *op);
1378
1379EXTERNL int
1380nc_get_vars_int(int ncid, int varid,
1381 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1382 int *ip);
1383
1384EXTERNL int
1385nc_put_vars_long(int ncid, int varid,
1386 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1387 const long *op);
1388
1389EXTERNL int
1390nc_get_vars_long(int ncid, int varid,
1391 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1392 long *ip);
1393
1394EXTERNL int
1395nc_put_vars_float(int ncid, int varid,
1396 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1397 const float *op);
1398
1399EXTERNL int
1400nc_get_vars_float(int ncid, int varid,
1401 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1402 float *ip);
1403
1404EXTERNL int
1405nc_put_vars_double(int ncid, int varid,
1406 const size_t *startp, const size_t *countp, const ptrdiff_t *stridep,
1407 const double *op);
1408
1409EXTERNL int
1410nc_get_vars_double(int ncid, int varid, const size_t *startp,
1411    const size_t *countp, const ptrdiff_t *stridep,
1412    double *ip);
1413
1414EXTERNL int
1415nc_put_vars_ushort(int ncid, int varid, const size_t *startp,
1416    const size_t *countp, const ptrdiff_t *stridep,
1417    const unsigned short *op);
1418
1419EXTERNL int
1420nc_get_vars_ushort(int ncid, int varid, const size_t *startp,
1421    const size_t *countp, const ptrdiff_t *stridep,
1422    unsigned short *ip);
1423
1424EXTERNL int
1425nc_put_vars_uint(int ncid, int varid, const size_t *startp,
1426  const size_t *countp, const ptrdiff_t *stridep,
1427  const unsigned int *op);
1428
1429EXTERNL int
1430nc_get_vars_uint(int ncid, int varid, const size_t *startp,
1431  const size_t *countp, const ptrdiff_t *stridep,
1432  unsigned int *ip);
1433
1434EXTERNL int
1435nc_put_vars_longlong(int ncid, int varid, const size_t *startp,
1436   const size_t *countp, const ptrdiff_t *stridep,
1437   const long long *op);
1438
1439EXTERNL int
1440nc_get_vars_longlong(int ncid, int varid, const size_t *startp,
1441   const size_t *countp, const ptrdiff_t *stridep,
1442   long long *ip);
1443
1444EXTERNL int
1445nc_put_vars_ulonglong(int ncid, int varid, const size_t *startp,
1446    const size_t *countp, const ptrdiff_t *stridep,
1447    const unsigned long long *op);
1448
1449EXTERNL int
1450nc_get_vars_ulonglong(int ncid, int varid, const size_t *startp,
1451    const size_t *countp, const ptrdiff_t *stridep,
1452    unsigned long long *ip);
1453
1454EXTERNL int
1455nc_put_vars_string(int ncid, int varid, const size_t *startp,
1456    const size_t *countp, const ptrdiff_t *stridep,
1457    const char **op);
1458
1459EXTERNL int
1460nc_get_vars_string(int ncid, int varid, const size_t *startp,
1461    const size_t *countp, const ptrdiff_t *stridep,
1462    char **ip);
1463
1464/* End {put,get}_vars */
1465/* Begin {put,get}_varm */
1466
1467EXTERNL int
1468nc_put_varm_text(int ncid, int varid, const size_t *startp,
1469  const size_t *countp, const ptrdiff_t *stridep,
1470  const ptrdiff_t *imapp, const char *op);
1471
1472EXTERNL int
1473nc_get_varm_text(int ncid, int varid, const size_t *startp,
1474  const size_t *countp, const ptrdiff_t *stridep,
1475  const ptrdiff_t *imapp, char *ip);
1476
1477EXTERNL int
1478nc_put_varm_uchar(int ncid, int varid, const size_t *startp,
1479   const size_t *countp, const ptrdiff_t *stridep,
1480   const ptrdiff_t *imapp, const unsigned char *op);
1481
1482EXTERNL int
1483nc_get_varm_uchar(int ncid, int varid, const size_t *startp,
1484   const size_t *countp, const ptrdiff_t *stridep,
1485   const ptrdiff_t *imapp, unsigned char *ip);
1486
1487EXTERNL int
1488nc_put_varm_schar(int ncid, int varid, const size_t *startp,
1489   const size_t *countp, const ptrdiff_t *stridep,
1490   const ptrdiff_t *imapp, const signed char *op);
1491
1492EXTERNL int
1493nc_get_varm_schar(int ncid, int varid, const size_t *startp,
1494   const size_t *countp, const ptrdiff_t *stridep,
1495   const ptrdiff_t *imapp, signed char *ip);
1496
1497EXTERNL int
1498nc_put_varm_short(int ncid, int varid, const size_t *startp,
1499   const size_t *countp, const ptrdiff_t *stridep,
1500   const ptrdiff_t *imapp, const short *op);
1501
1502EXTERNL int
1503nc_get_varm_short(int ncid, int varid, const size_t *startp,
1504   const size_t *countp, const ptrdiff_t *stridep,
1505   const ptrdiff_t *imapp, short *ip);
1506
1507EXTERNL int
1508nc_put_varm_int(int ncid, int varid, const size_t *startp,
1509 const size_t *countp, const ptrdiff_t *stridep,
1510 const ptrdiff_t *imapp, const int *op);
1511
1512EXTERNL int
1513nc_get_varm_int(int ncid, int varid, const size_t *startp,
1514 const size_t *countp, const ptrdiff_t *stridep,
1515 const ptrdiff_t *imapp, int *ip);
1516
1517EXTERNL int
1518nc_put_varm_long(int ncid, int varid, const size_t *startp,
1519  const size_t *countp, const ptrdiff_t *stridep,
1520  const ptrdiff_t *imapp, const long *op);
1521
1522EXTERNL int
1523nc_get_varm_long(int ncid, int varid, const size_t *startp,
1524  const size_t *countp, const ptrdiff_t *stridep,
1525  const ptrdiff_t *imapp, long *ip);
1526
1527EXTERNL int
1528nc_put_varm_float(int ncid, int varid,const size_t *startp,
1529   const size_t *countp, const ptrdiff_t *stridep,
1530   const ptrdiff_t *imapp, const float *op);
1531
1532EXTERNL int
1533nc_get_varm_float(int ncid, int varid,const size_t *startp,
1534   const size_t *countp, const ptrdiff_t *stridep,
1535   const ptrdiff_t *imapp, float *ip);
1536
1537EXTERNL int
1538nc_put_varm_double(int ncid, int varid, const size_t *startp,
1539    const size_t *countp, const ptrdiff_t *stridep,
1540    const ptrdiff_t *imapp, const double *op);
1541
1542EXTERNL int
1543nc_get_varm_double(int ncid, int varid, const size_t *startp,
1544    const size_t *countp, const ptrdiff_t *stridep,
1545    const ptrdiff_t * imapp, double *ip);
1546
1547EXTERNL int
1548nc_put_varm_ushort(int ncid, int varid, const size_t *startp,
1549    const size_t *countp, const ptrdiff_t *stridep,
1550    const ptrdiff_t * imapp, const unsigned short *op);
1551
1552EXTERNL int
1553nc_get_varm_ushort(int ncid, int varid, const size_t *startp,
1554    const size_t *countp, const ptrdiff_t *stridep,
1555    const ptrdiff_t * imapp, unsigned short *ip);
1556
1557EXTERNL int
1558nc_put_varm_uint(int ncid, int varid, const size_t *startp,
1559  const size_t *countp, const ptrdiff_t *stridep,
1560  const ptrdiff_t * imapp, const unsigned int *op);
1561
1562EXTERNL int
1563nc_get_varm_uint(int ncid, int varid, const size_t *startp,
1564  const size_t *countp, const ptrdiff_t *stridep,
1565  const ptrdiff_t * imapp, unsigned int *ip);
1566
1567EXTERNL int
1568nc_put_varm_longlong(int ncid, int varid, const size_t *startp,
1569   const size_t *countp, const ptrdiff_t *stridep,
1570   const ptrdiff_t * imapp, const long long *op);
1571
1572EXTERNL int
1573nc_get_varm_longlong(int ncid, int varid, const size_t *startp,
1574   const size_t *countp, const ptrdiff_t *stridep,
1575   const ptrdiff_t * imapp, long long *ip);
1576
1577EXTERNL int
1578nc_put_varm_ulonglong(int ncid, int varid, const size_t *startp,
1579    const size_t *countp, const ptrdiff_t *stridep,
1580    const ptrdiff_t * imapp, const unsigned long long *op);
1581
1582EXTERNL int
1583nc_get_varm_ulonglong(int ncid, int varid, const size_t *startp,
1584    const size_t *countp, const ptrdiff_t *stridep,
1585    const ptrdiff_t * imapp, unsigned long long *ip);
1586
1587EXTERNL int
1588nc_put_varm_string(int ncid, int varid, const size_t *startp,
1589    const size_t *countp, const ptrdiff_t *stridep,
1590    const ptrdiff_t * imapp, const char **op);
1591
1592EXTERNL int
1593nc_get_varm_string(int ncid, int varid, const size_t *startp,
1594    const size_t *countp, const ptrdiff_t *stridep,
1595    const ptrdiff_t * imapp, char **ip);
1596
1597/* End {put,get}_varm */
1598/* Begin {put,get}_var */
1599
1600EXTERNL int
1601nc_put_var_text(int ncid, int varid, const char *op);
1602
1603EXTERNL int
1604nc_get_var_text(int ncid, int varid, char *ip);
1605
1606EXTERNL int
1607nc_put_var_uchar(int ncid, int varid, const unsigned char *op);
1608
1609EXTERNL int
1610nc_get_var_uchar(int ncid, int varid, unsigned char *ip);
1611
1612EXTERNL int
1613nc_put_var_schar(int ncid, int varid, const signed char *op);
1614
1615EXTERNL int
1616nc_get_var_schar(int ncid, int varid, signed char *ip);
1617
1618EXTERNL int
1619nc_put_var_short(int ncid, int varid, const short *op);
1620
1621EXTERNL int
1622nc_get_var_short(int ncid, int varid, short *ip);
1623
1624EXTERNL int
1625nc_put_var_int(int ncid, int varid, const int *op);
1626
1627EXTERNL int
1628nc_get_var_int(int ncid, int varid, int *ip);
1629
1630EXTERNL int
1631nc_put_var_long(int ncid, int varid, const long *op);
1632
1633EXTERNL int
1634nc_get_var_long(int ncid, int varid, long *ip);
1635
1636EXTERNL int
1637nc_put_var_float(int ncid, int varid, const float *op);
1638
1639EXTERNL int
1640nc_get_var_float(int ncid, int varid, float *ip);
1641
1642EXTERNL int
1643nc_put_var_double(int ncid, int varid, const double *op);
1644
1645EXTERNL int
1646nc_get_var_double(int ncid, int varid, double *ip);
1647
1648EXTERNL int
1649nc_put_var_ushort(int ncid, int varid, const unsigned short *op);
1650
1651EXTERNL int
1652nc_get_var_ushort(int ncid, int varid, unsigned short *ip);
1653
1654EXTERNL int
1655nc_put_var_uint(int ncid, int varid, const unsigned int *op);
1656
1657EXTERNL int
1658nc_get_var_uint(int ncid, int varid, unsigned int *ip);
1659
1660EXTERNL int
1661nc_put_var_longlong(int ncid, int varid, const long long *op);
1662
1663EXTERNL int
1664nc_get_var_longlong(int ncid, int varid, long long *ip);
1665
1666EXTERNL int
1667nc_put_var_ulonglong(int ncid, int varid, const unsigned long long *op);
1668
1669EXTERNL int
1670nc_get_var_ulonglong(int ncid, int varid, unsigned long long *ip);
1671
1672EXTERNL int
1673nc_put_var_string(int ncid, int varid, const char **op);
1674
1675EXTERNL int
1676nc_get_var_string(int ncid, int varid, char **ip);
1677
1678/* Begin Deprecated, same as functions with "_ubyte" replaced by "_uchar" */
1679EXTERNL int
1680nc_put_att_ubyte(int ncid, int varid, const char *namenc_type xtype,
1681  size_t len, const unsigned char *op);
1682EXTERNL int
1683nc_get_att_ubyte(int ncid, int varid, const char *name,
1684  unsigned char *ip);
1685EXTERNL int
1686nc_put_var1_ubyte(int ncid, int varid, const size_t *indexp,
1687   const unsigned char *op);
1688EXTERNL int
1689nc_get_var1_ubyte(int ncid, int varid, const size_t *indexp,
1690   unsigned char *ip);
1691EXTERNL int
1692nc_put_vara_ubyte(int ncid, int varid, const size_t *startp,
1693   const size_t *countp, const unsigned char *op);
1694EXTERNL int
1695nc_get_vara_ubyte(int ncid, int varid, const size_t *startp,
1696   const size_t *countp, unsigned char *ip);
1697EXTERNL int
1698nc_put_vars_ubyte(int ncid, int varid, const size_t *startp,
1699   const size_t *countp, const ptrdiff_t *stridep,
1700   const unsigned char *op);
1701EXTERNL int
1702nc_get_vars_ubyte(int ncid, int varid, const size_t *startp,
1703   const size_t *countp, const ptrdiff_t *stridep,
1704   unsigned char *ip);
1705EXTERNL int
1706nc_put_varm_ubyte(int ncid, int varid, const size_t *startp,
1707   const size_t *countp, const ptrdiff_t *stridep,
1708   const ptrdiff_t * imapp, const unsigned char *op);
1709EXTERNL int
1710nc_get_varm_ubyte(int ncid, int varid, const size_t *startp,
1711   const size_t *countp, const ptrdiff_t *stridep,
1712   const ptrdiff_t * imapp, unsigned char *ip);
1713EXTERNL int
1714nc_put_var_ubyte(int ncid, int varid, const unsigned char *op);
1715EXTERNL int
1716nc_get_var_ubyte(int ncid, int varid, unsigned char *ip);
1717/* End Deprecated */
1718
1719#ifdef LOGGING
1720
1721/* Set the log level. 0 shows only errors, 1 only major messages,
1722 * etc., to 5, which shows way too much information. */
1723EXTERNL int
1724nc_set_log_level(int new_level);
1725
1726/* Use this to turn off logging by calling
1727   nc_log_level(NC_TURN_OFF_LOGGING) */
1728#define NC_TURN_OFF_LOGGING (-1)
1729
1730#else /* not LOGGING */
1731
1732#define nc_set_log_level(e)
1733
1734#endif /* LOGGING */
1735
1736/* Show the netCDF library's in-memory metadata for a file. */
1737EXTERNL int
1738nc_show_metadata(int ncid);
1739
1740/* End {put,get}_var */
1741
1742/* #ifdef _CRAYMPP */
1743/*
1744 * Public interfaces to better support
1745 * CRAY multi-processor systems like T3E.
1746 * A tip of the hat to NERSC.
1747 */
1748/*
1749 * It turns out we need to declare and define
1750 * these public interfaces on all platforms
1751 * or things get ugly working out the
1752 * FORTRAN interface. On !_CRAYMPP platforms,
1753 * these functions work as advertised, but you
1754 * can only use "processor element" 0.
1755 */
1756
1757EXTERNL int
1758nc__create_mp(const char *path, int cmode, size_t initialsz, int basepe,
1759  size_t *chunksizehintp, int *ncidp);
1760
1761EXTERNL int
1762nc__open_mp(const char *path, int mode, int basepe,
1763 size_t *chunksizehintp, int *ncidp);
1764
1765EXTERNL int
1766nc_delete(const char *path);
1767
1768EXTERNL int
1769nc_delete_mp(const char *path, int basepe);
1770
1771EXTERNL int
1772nc_set_base_pe(int ncid, int pe);
1773
1774EXTERNL int
1775nc_inq_base_pe(int ncid, int *pe);
1776
1777/* #endif _CRAYMPP */
1778
1779/* This v2 function is used in the nc_test program. */
1780EXTERNL int
1781nctypelen(nc_type datatype);
1782
1783/* Begin v2.4 backward compatibility */
1784/*
1785 * defining NO_NETCDF_2 to the preprocessor
1786 * turns off backward compatibility declarations.
1787 */
1788#ifndef NO_NETCDF_2
1789
1790/** Backward compatible alias. */
1791/**@{*/
1792#define FILL_BYTE NC_FILL_BYTE
1793#define FILL_CHAR NC_FILL_CHAR
1794#define FILL_SHORT NC_FILL_SHORT
1795#define FILL_LONG NC_FILL_INT
1796#define FILL_FLOAT NC_FILL_FLOAT
1797#define FILL_DOUBLE NC_FILL_DOUBLE
1798
1799#define MAX_NC_DIMS NC_MAX_DIMS
1800#define MAX_NC_ATTRS NC_MAX_ATTRS
1801#define MAX_NC_VARS NC_MAX_VARS
1802#define MAX_NC_NAME NC_MAX_NAME
1803#define MAX_VAR_DIMS NC_MAX_VAR_DIMS
1804/**@}*/
1805
1806
1807/*
1808 * Global error status
1809 */
1810EXTERNL int ncerr;
1811
1812#define NC_ENTOOL       NC_EMAXNAME   /* Backward compatibility */
1813#define NC_EXDR (-32) /* */
1814#define NC_SYSERR (-31)
1815
1816/*
1817 * Global options variable.
1818 * Used to determine behavior of error handler.
1819 */
1820#define NC_FATAL 1
1821#define NC_VERBOSE 2
1822
1823EXTERNL int ncopts; /* default is (NC_FATAL | NC_VERBOSE) */
1824
1825EXTERNL void
1826nc_advise(const char *cdf_routine_name, int err, const char *fmt,...);
1827
1828/*
1829 * C data type corresponding to a netCDF NC_LONG argument,
1830 * a signed 32 bit object.
1831 *
1832 * This is the only thing in this file which architecture dependent.
1833 */
1834typedef int nclong;
1835
1836EXTERNL int
1837nccreate(const char* path, int cmode);
1838
1839EXTERNL int
1840ncopen(const char* path, int mode);
1841
1842EXTERNL int
1843ncsetfill(int ncid, int fillmode);
1844
1845EXTERNL int
1846ncredef(int ncid);
1847
1848EXTERNL int
1849ncendef(int ncid);
1850
1851EXTERNL int
1852ncsync(int ncid);
1853
1854EXTERNL int
1855ncabort(int ncid);
1856
1857EXTERNL int
1858ncclose(int ncid);
1859
1860EXTERNL int
1861ncinquire(int ncid, int *ndimsp, int *nvarsp, int *nattsp, int *unlimdimp);
1862
1863EXTERNL int
1864ncdimdef(int ncid, const char *name, long len);
1865
1866EXTERNL int
1867ncdimid(int ncid, const char *name);
1868
1869EXTERNL int
1870ncdiminq(int ncid, int dimid, char *name, long *lenp);
1871
1872EXTERNL int
1873ncdimrename(int ncid, int dimid, const char *name);
1874
1875EXTERNL int
1876ncattput(int ncid, int varid, const char *namenc_type xtype,
1877 int len, const void *op);
1878
1879EXTERNL int
1880ncattinq(int ncid, int varid, const char *namenc_type *xtypep, int *lenp);
1881
1882EXTERNL int
1883ncattget(int ncid, int varid, const char *name, void *ip);
1884
1885EXTERNL int
1886ncattcopy(int ncid_in, int varid_in, const char *name, int ncid_out,
1887 int varid_out);
1888
1889EXTERNL int
1890ncattname(int ncid, int varid, int attnum, char *name);
1891
1892EXTERNL int
1893ncattrename(int ncid, int varid, const char *name, const char *newname);
1894
1895EXTERNL int
1896ncattdel(int ncid, int varid, const char *name);
1897
1898EXTERNL int
1899ncvardef(int ncid, const char *namenc_type xtype,
1900 int ndims, const int *dimidsp);
1901
1902EXTERNL int
1903ncvarid(int ncid, const char *name);
1904
1905EXTERNL int
1906ncvarinq(int ncid, int varid, char *namenc_type *xtypep,
1907 int *ndimsp, int *dimidsp, int *nattsp);
1908
1909EXTERNL int
1910ncvarput1(int ncid, int varid, const long *indexp, const void *op);
1911
1912EXTERNL int
1913ncvarget1(int ncid, int varid, const long *indexp, void *ip);
1914
1915EXTERNL int
1916ncvarput(int ncid, int varid, const long *startp, const long *countp,
1917 const void *op);
1918
1919EXTERNL int
1920ncvarget(int ncid, int varid, const long *startp, const long *countp,
1921 void *ip);
1922
1923EXTERNL int
1924ncvarputs(int ncid, int varid, const long *startp, const long *countp,
1925 const long *stridep, const void *op);
1926
1927EXTERNL int
1928ncvargets(int ncid, int varid, const long *startp, const long *countp,
1929 const long *stridep, void *ip);
1930
1931EXTERNL int
1932ncvarputg(int ncid, int varid, const long *startp, const long *countp,
1933 const long *stridep, const long *imapp, const void *op);
1934
1935EXTERNL int
1936ncvargetg(int ncid, int varid, const long *startp, const long *countp,
1937 const long *stridep, const long *imapp, void *ip);
1938
1939EXTERNL int
1940ncvarrename(int ncid, int varid, const char *name);
1941
1942EXTERNL int
1943ncrecinq(int ncid, int *nrecvarsp, int *recvaridsp, long *recsizesp);
1944
1945EXTERNL int
1946ncrecget(int ncid, long recnum, void **datap);
1947
1948EXTERNL int
1949ncrecput(int ncid, long recnum, void *const *datap);
1950
1951/* EXTERNL int nc_finalize(); */
1952
1953/* End v2.4 backward compatibility */
1954#endif /*!NO_NETCDF_2*/
1955
1956#if defined(__cplusplus)
1957}
1958#endif
1959
1960/* Temporary hack to shut up warnings */
1961#ifndef __MINGW32_VERSION
1962#define END_OF_MAIN()
1963#endif
1964
1965/* Define two hard-coded functionality-related
1966   macros, but this is not going to be
1967   standard practice. */
1968#ifndef NC_HAVE_RENAME_GRP
1969#define NC_HAVE_RENAME_GRP /*!< rename_grp() support. */
1970#endif
1971
1972#ifndef NC_HAVE_INQ_FORMAT_EXTENDED
1973#define NC_HAVE_INQ_FORMAT_EXTENDED /*!< inq_format_extended() support. */
1974#endif
1975
1976#define NC_HAVE_META_H
1977
1978#endif /* _NETCDF_ */


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed