/******************************************************************************
*
*  NSSDC/CDF                        Header file for C and INTERNAL interfaces.
*
*  Version 3.4c, 20-Jul-95, Hughes STX.
*
*  Modification history:
*
*   V1.0  22-Jan-91, R Kulkarni/J Love  Original version (for CDF V2.0).
*   V2.0   3-Jun-91, J Love             Modified for CDF V2.1 enhancements,
*                                       namely the INTERNAL interface and the
*                                       MULTI/SINGLE file option.  Added
*                                       macros to replace C i/f functions.
*   V2.1  20-Jun-91, J Love             Added function prototypes.
*   V2.2   8-Aug-91, J Love             Increment for CDF V2.1.2.  Use
*                                       'CDFlib'.  Renamed a few items.
*   V3.0  19-May-92, J Love             IBM PC & HP-UX port.  CDF V2.2.
*   V3.1  23-Sep-92, J Love             CDF V2.3 (shareable/NeXT/zVar).
*   V3.1a  5-Oct-92, J Love             CDF V2.3.0a (NeXT/encoding).
*   V3.1b  6-Oct-92, J Love             CDF V2.3.0b (CDFcompare).
*   V3.1c 27-Oct-92, J Love             CDF V2.3.0c (pad values).
*   V3.2  12-Jan-94, J Love             CDF V2.4.
*   V3.2a  4-Feb-94, J Love		DEC Alpha/OpenVMS port.
*   V3.2b 22-Feb-94, J Love		Spelling lesson.
*   V3.3   8-Dec-94, J Love		CDF V2.5.
*   V3.3a  3-Mar-95, J Love		Solaris 2.3 IDL i/f.
*   V3.4  28-Mar-95, J Love		POSIX.
*   V3.4a  8-May-95, J Love		ILLEGAL_EPOCH_VALUE.
*   V3.4b  9-Jun-95, J Love		EPOCH custom format.
*   V3.4c 20-Jul-95, J Love		CDFexport-related changes.
*
******************************************************************************/

#if !defined(CDFh_INCLUDEd__)
#define CDFh_INCLUDEd__

/******************************************************************************
* CDF defined types
******************************************************************************/

typedef void *CDFid;
typedef long CDFstatus;

/******************************************************************************
* Limits
******************************************************************************/

#define CDF_MIN_DIMS    0               /* Min number of dimensions a CDF
					   variable may have */ 
#define CDF_MAX_DIMS    10              /* Max number of dimensions a CDF
					   variable may have */

/******************************************************************************
* Lengths
******************************************************************************/

#define CDF_VAR_NAME_LEN        64
#define CDF_ATTR_NAME_LEN       64

#define CDF_COPYRIGHT_LEN       256
#define CDF_STATUSTEXT_LEN      80
#define CDF_PATHNAME_LEN        128

#define EPOCH_STRING_LEN	24
#define EPOCH1_STRING_LEN	16
#define EPOCH2_STRING_LEN	14
#define EPOCH3_STRING_LEN	24

#define EPOCHx_STRING_MAX	30
#define EPOCHx_FORMAT_MAX	60

/******************************************************************************
* Data types.
******************************************************************************/

#define CDF_INT1		1L
#define CDF_INT2		2L
#define CDF_INT4		4L
#define CDF_UINT1		11L
#define CDF_UINT2		12L
#define CDF_UINT4		14L
#define CDF_REAL4		21L
#define CDF_REAL8		22L
#define CDF_EPOCH		31L	/* Standard style. */
#define CDF_BYTE		41L     /* same as CDF_INT1 (signed) */
#define CDF_FLOAT		44L     /* same as CDF_REAL4 */
#define CDF_DOUBLE		45L     /* same as CDF_REAL8 */
#define CDF_CHAR		51L     /* a "string" data type */
#define CDF_UCHAR		52L     /* a "string" data type */

/******************************************************************************
* Encoding (for data only, everything else is network encoding).
******************************************************************************/

#define NETWORK_ENCODING        1L
#define SUN_ENCODING            2L
#define VAX_ENCODING            3L
#define DECSTATION_ENCODING     4L
#define SGi_ENCODING            5L
#define IBMPC_ENCODING          6L
#define IBMRS_ENCODING          7L
#define HOST_ENCODING           8L
#define MAC_ENCODING            9L
#define HP_ENCODING             11L
#define NeXT_ENCODING           12L
#define ALPHAOSF1_ENCODING      13L
#define ALPHAVMSd_ENCODING      14L
#define ALPHAVMSg_ENCODING      15L

/******************************************************************************
* Decodings.
******************************************************************************/

#define NETWORK_DECODING        NETWORK_ENCODING
#define SUN_DECODING            SUN_ENCODING
#define VAX_DECODING            VAX_ENCODING
#define DECSTATION_DECODING     DECSTATION_ENCODING
#define SGi_DECODING            SGi_ENCODING
#define IBMPC_DECODING          IBMPC_ENCODING
#define IBMRS_DECODING          IBMRS_ENCODING
#define HOST_DECODING           HOST_ENCODING
#define MAC_DECODING            MAC_ENCODING
#define HP_DECODING             HP_ENCODING
#define NeXT_DECODING           NeXT_ENCODING
#define ALPHAOSF1_DECODING      ALPHAOSF1_ENCODING
#define ALPHAVMSd_DECODING      ALPHAVMSd_ENCODING
#define ALPHAVMSg_DECODING      ALPHAVMSg_ENCODING

/******************************************************************************
* Variance flags
******************************************************************************/

#define VARY   (-1L)        /* TRUE record or dimension variance flag */
#define NOVARY 0L           /* FALSE record or dimension variance flag */

/******************************************************************************
* Majorities
******************************************************************************/

#define ROW_MAJOR       1L
#define COL_MAJOR       2L

/******************************************************************************
* Formats.
******************************************************************************/

#define SINGLE_FILE     1L
#define MULTI_FILE      2L

/******************************************************************************
* Attribute scopes
******************************************************************************/

#define GLOBAL_SCOPE            1L
#define VARIABLE_SCOPE          2L

/******************************************************************************
* Readonly modes.
******************************************************************************/

#define READONLYon              (-1L)
#define READONLYoff             0L

/******************************************************************************
* zModes.
******************************************************************************/

#define zMODEoff                0L
#define zMODEon1                1L
#define zMODEon2                2L

/******************************************************************************
* Negative to positive floating point zero modes.
******************************************************************************/

#define NEGtoPOSfp0on           (-1L)
#define NEGtoPOSfp0off          0L

/*****************************************************************************
* Invalid/reserved constants.
*****************************************************************************/

#define CDF_INVALID_ID		(CDFid) NULL
#define CDF_INVALID_DATATYPE	(-1L)
#define ILLEGAL_EPOCH_VALUE	(-1.0)

/******************************************************************************
* Status codes (CDFstatus)
*  - informatory codes are greater than CDF_OK
******************************************************************************/

#define VIRTUAL_RECORD_DATA             (CDFstatus) 1001
					/* 1002 unused. */
#define VAR_ALREADY_CLOSED              (CDFstatus) 1003
#define SINGLE_FILE_FORMAT              (CDFstatus) 1004
#define NO_PADVALUE_SPECIFIED           (CDFstatus) 1005
#define NO_VARS_IN_CDF                  (CDFstatus) 1006
#define MULTI_FILE_FORMAT		(CDFstatus) 1007

#define CDF_OK                          (CDFstatus) 0

#define ATTR_NAME_TRUNC                 (CDFstatus) (-1001)
#define CDF_NAME_TRUNC                  (CDFstatus) (-1002)
#define VAR_NAME_TRUNC                  (CDFstatus) (-1003)
#define NEGATIVE_FP_ZERO		(CDFstatus) (-1004)
#define FUTURE_CDF			(CDFstatus) (-1005)

#define CDF_WARN                        (CDFstatus) (-2000)

#define ATTR_EXISTS                     (CDFstatus) (-2001)
#define BAD_CDF_ID                      (CDFstatus) (-2002)
#define BAD_DATA_TYPE                   (CDFstatus) (-2003)
#define BAD_DIM_SIZE                    (CDFstatus) (-2004)
#define BAD_DIM_INDEX                   (CDFstatus) (-2005)
#define BAD_ENCODING                    (CDFstatus) (-2006)
#define BAD_MAJORITY                    (CDFstatus) (-2007)
#define BAD_NUM_DIMS                    (CDFstatus) (-2008)
#define BAD_REC_NUM                     (CDFstatus) (-2009)
#define BAD_SCOPE                       (CDFstatus) (-2010)
#define BAD_NUM_ELEMS                   (CDFstatus) (-2011)
#define CDF_OPEN_ERROR                  (CDFstatus) (-2012)
#define CDF_EXISTS                      (CDFstatus) (-2013)
#define BAD_FORMAT                      (CDFstatus) (-2014)
#define BAD_ALLOCATE_RECS		(CDFstatus) (-2015)
#define BAD_CDF_EXTENSION		(CDFstatus) (-2016)
#define NO_SUCH_ATTR                    (CDFstatus) (-2017)
#define NO_SUCH_ENTRY                   (CDFstatus) (-2018)
#define NO_SUCH_VAR                     (CDFstatus) (-2019)
#define VAR_READ_ERROR                  (CDFstatus) (-2020)
#define VAR_WRITE_ERROR                 (CDFstatus) (-2021)
#define BAD_ARGUMENT                    (CDFstatus) (-2022)
#define IBM_PC_OVERFLOW                 (CDFstatus) (-2023)
#define TOO_MANY_VARS                   (CDFstatus) (-2024)
#define VAR_EXISTS                      (CDFstatus) (-2025)
#define BAD_MALLOC                      (CDFstatus) (-2026)
#define NOT_A_CDF                       (CDFstatus) (-2027)
#define CORRUPTED_V2_CDF                (CDFstatus) (-2028)
#define VAR_OPEN_ERROR                  (CDFstatus) (-2029)
#define BAD_INITIAL_RECS                (CDFstatus) (-2030)
#define BAD_EXTEND_RECS                 (CDFstatus) (-2031)
#define END_OF_VAR                      (CDFstatus) (-2032)
					/* -2033 unused. */
#define BAD_CDFSTATUS                   (CDFstatus) (-2034)
#define CDF_INTERNAL_ERROR		(CDFstatus) (-2035)
#define BAD_NUM_VARS			(CDFstatus) (-2036)
#define BAD_REC_COUNT                   (CDFstatus) (-2037)
#define BAD_REC_INTERVAL                (CDFstatus) (-2038)
#define BAD_DIM_COUNT                   (CDFstatus) (-2039)
#define BAD_DIM_INTERVAL                (CDFstatus) (-2040)
#define BAD_VAR_NUM                     (CDFstatus) (-2041)
#define BAD_ATTR_NUM                    (CDFstatus) (-2042)
#define BAD_ENTRY_NUM                   (CDFstatus) (-2043)
#define BAD_ATTR_NAME                   (CDFstatus) (-2044)
#define BAD_VAR_NAME                    (CDFstatus) (-2045)
#define NO_ATTR_SELECTED                (CDFstatus) (-2046)
#define NO_ENTRY_SELECTED               (CDFstatus) (-2047)
#define NO_VAR_SELECTED                 (CDFstatus) (-2048)
#define BAD_CDF_NAME                    (CDFstatus) (-2049)
					/* -2050 unused. */
#define CANNOT_CHANGE                   (CDFstatus) (-2051)
#define NO_STATUS_SELECTED              (CDFstatus) (-2052)
#define NO_CDF_SELECTED                 (CDFstatus) (-2053)
#define READ_ONLY_DISTRIBUTION          (CDFstatus) (-2054)
#define CDF_CLOSE_ERROR                 (CDFstatus) (-2055)
#define VAR_CLOSE_ERROR                 (CDFstatus) (-2056)
					/* -2057 unused. */
#define BAD_FNC_OR_ITEM                 (CDFstatus) (-2058)
					/* -2059 unused. */
#define ILLEGAL_ON_V1_CDF               (CDFstatus) (-2060)
#define CDH_OPEN_ERROR                  (CDFstatus) (-2061)
#define CDH_CLOSE_ERROR                 (CDFstatus) (-2062)
#define BAD_CACHE_SIZE                  (CDFstatus) (-2063)
					/* -2064 unused. */
					/* -2065 unused. */
#define CDF_CREATE_ERROR                (CDFstatus) (-2066)
#define NO_SUCH_CDF                     (CDFstatus) (-2067)
#define VAR_CREATE_ERROR                (CDFstatus) (-2068)
					/* -2069 unused. */
#define READ_ONLY_MODE                  (CDFstatus) (-2070)
#define ILLEGAL_IN_zMODE                (CDFstatus) (-2071)
#define BAD_zMODE                       (CDFstatus) (-2072)
#define BAD_READONLY_MODE               (CDFstatus) (-2073)
#define CDF_READ_ERROR                  (CDFstatus) (-2074)
#define CDF_WRITE_ERROR                 (CDFstatus) (-2075)
#define ILLEGAL_FOR_SCOPE               (CDFstatus) (-2076)
#define NO_MORE_ACCESS                  (CDFstatus) (-2077)
					/* -2078 unused. */
#define BAD_DECODING		        (CDFstatus) (-2079)
					/* -2080 unused. */
#define BAD_NEGtoPOSfp0_MODE		(CDFstatus) (-2081)
#define UNSUPPORTED_OPERATION		(CDFstatus) (-2082)
					/* -2083 unused. */
					/* -2084 unused. */
					/* -2085 unused. */
#define NO_WRITE_ACCESS                 (CDFstatus) (-2086)
#define NO_DELETE_ACCESS                (CDFstatus) (-2087)

/******************************************************************************
* Functions (for INTERNAL interface).
* NOTE: These values must be different from those of the items.
******************************************************************************/

#define CREATE_   1001L
#define OPEN_     1002L
#define DELETE_   1003L
#define CLOSE_    1004L
#define SELECT_   1005L
#define CONFIRM_  1006L
#define GET_      1007L
#define PUT_      1008L

#define NULL_     1000L

/******************************************************************************
* Items on which functions are performed (for INTERNAL interface).
* NOTE: These values must be different from those of the functions.
******************************************************************************/

#define CDF_                    1L
#define CDF_NAME_               2L
#define CDF_ENCODING_           3L
#define CDF_DECODING_		4L
#define CDF_MAJORITY_           5L
#define CDF_FORMAT_             6L
#define CDF_COPYRIGHT_          7L
#define CDF_NUMrVARS_           8L
#define CDF_NUMzVARS_           9L
#define CDF_NUMATTRS_           10L
#define CDF_NUMgATTRS_          11L
#define CDF_NUMvATTRS_          12L
#define CDF_VERSION_            13L
#define CDF_RELEASE_            14L
#define CDF_INCREMENT_          15L
#define CDF_STATUS_             16L
#define CDF_READONLY_MODE_      17L
#define CDF_zMODE_              18L
#define CDF_NEGtoPOSfp0_MODE_	19L
#define LIB_COPYRIGHT_          20L
#define LIB_VERSION_            21L
#define LIB_RELEASE_            22L
#define LIB_INCREMENT_          23L
#define LIB_subINCREMENT_       24L
#define rVARs_NUMDIMS_          25L
#define rVARs_DIMSIZES_         26L
#define rVARs_MAXREC_           27L
#define rVARs_RECDATA_		28L
#define rVARs_RECNUMBER_        29L
#define rVARs_RECCOUNT_         30L
#define rVARs_RECINTERVAL_      31L
#define rVARs_DIMINDICES_       32L
#define rVARs_DIMCOUNTS_        33L
#define rVARs_DIMINTERVALS_     34L
#define rVAR_                   35L
#define rVAR_NAME_              36L
#define rVAR_DATATYPE_          37L
#define rVAR_NUMELEMS_          38L
#define rVAR_RECVARY_           39L
#define rVAR_DIMVARYS_          40L
#define rVAR_NUMBER_            41L
#define rVAR_DATA_              42L
#define rVAR_HYPERDATA_         43L
#define rVAR_SEQDATA_           44L
#define rVAR_SEQPOS_            45L
#define rVAR_MAXREC_            46L
#define rVAR_MAXallocREC_       47L
#define rVAR_DATASPEC_          48L
#define rVAR_PADVALUE_          49L
#define rVAR_INITIALRECS_       50L
#define rVAR_EXTENDRECS_        51L
#define rVAR_nINDEXRECORDS_	52L
#define rVAR_nINDEXENTRIES_	53L
#define rVAR_EXISTENCE_		54L
#define zVARs_MAXREC_		55L
#define zVARs_RECDATA_		56L
#define zVAR_                   57L
#define zVAR_NAME_              58L
#define zVAR_DATATYPE_          59L
#define zVAR_NUMELEMS_          60L
#define zVAR_NUMDIMS_           61L
#define zVAR_DIMSIZES_          62L
#define zVAR_RECVARY_           63L
#define zVAR_DIMVARYS_          64L
#define zVAR_NUMBER_            65L
#define zVAR_DATA_              66L
#define zVAR_HYPERDATA_         67L
#define zVAR_SEQDATA_           68L
#define zVAR_SEQPOS_            69L
#define zVAR_MAXREC_            70L
#define zVAR_MAXallocREC_       71L
#define zVAR_DATASPEC_          72L
#define zVAR_PADVALUE_          73L
#define zVAR_INITIALRECS_       74L
#define zVAR_EXTENDRECS_        75L
#define zVAR_nINDEXRECORDS_	76L
#define zVAR_nINDEXENTRIES_	77L
#define zVAR_EXISTENCE_		78L
#define zVAR_RECNUMBER_         79L
#define zVAR_RECCOUNT_          80L
#define zVAR_RECINTERVAL_       81L
#define zVAR_DIMINDICES_        82L
#define zVAR_DIMCOUNTS_         83L
#define zVAR_DIMINTERVALS_      84L
#define ATTR_                   85L
#define ATTR_SCOPE_             86L
#define ATTR_NAME_              87L
#define ATTR_NUMBER_            88L
#define ATTR_MAXgENTRY_         89L
#define ATTR_NUMgENTRIES_       90L
#define ATTR_MAXrENTRY_         91L
#define ATTR_NUMrENTRIES_       92L
#define ATTR_MAXzENTRY_         93L
#define ATTR_NUMzENTRIES_       94L
#define ATTR_EXISTENCE_		95L
#define gENTRY_                 96L
#define gENTRY_EXISTENCE_       97L
#define gENTRY_DATATYPE_        98L
#define gENTRY_NUMELEMS_        99L
#define gENTRY_DATASPEC_        100L
#define gENTRY_DATA_            101L
#define rENTRY_                 102L
#define rENTRY_NAME_		103L
#define rENTRY_EXISTENCE_       104L
#define rENTRY_DATATYPE_        105L
#define rENTRY_NUMELEMS_        106L
#define rENTRY_DATASPEC_        107L
#define rENTRY_DATA_            108L
#define zENTRY_                 109L
#define zENTRY_NAME_		110L
#define zENTRY_EXISTENCE_       111L
#define zENTRY_DATATYPE_        112L
#define zENTRY_NUMELEMS_        113L
#define zENTRY_DATASPEC_        114L
#define zENTRY_DATA_            115L
#define STATUS_TEXT_            116L
#define CDF_CACHESIZE_		117L
#define rVARs_CACHESIZE_	118L
#define zVARs_CACHESIZE_	119L
#define rVAR_CACHESIZE_		120L
#define zVAR_CACHESIZE_		121L
#define zVARs_RECNUMBER_	122L
#define rVAR_ALLOCATERECS_	123L
#define zVAR_ALLOCATERECS_	124L
#define DATATYPE_SIZE_		125L
#define CURgENTRY_EXISTENCE_	126L
#define CURrENTRY_EXISTENCE_	127L
#define CURzENTRY_EXISTENCE_	128L

#define CDFwithSTATS_		200L

/******************************************************************************
* C interface macros.
******************************************************************************/

#define CDFcreate(CDFname,numDims,dimSizes,encoding,majority,id) \
CDFlib (CREATE_, CDF_, CDFname, numDims, dimSizes, id, \
	PUT_, CDF_ENCODING_, encoding, \
	      CDF_MAJORITY_, majority, \
	NULL_)

#define CDFopen(CDFname,id) \
CDFlib (OPEN_, CDF_, CDFname, id, \
	NULL_)

#define CDFdoc(id,version,release,text) \
CDFlib (SELECT_, CDF_, id, \
	GET_, CDF_VERSION_, version, \
	      CDF_RELEASE_, release, \
	      CDF_COPYRIGHT_, text, \
	NULL_)

#define CDFinquire(id,numDims,dimSizes,encoding,majority,maxRec,nVars,nAttrs) \
CDFlib (SELECT_, CDF_, id, \
	GET_, rVARs_NUMDIMS_, numDims, \
	      rVARs_DIMSIZES_, dimSizes, \
	      CDF_ENCODING_, encoding, \
	      CDF_MAJORITY_, majority, \
	      rVARs_MAXREC_, maxRec, \
	      CDF_NUMrVARS_, nVars, \
	      CDF_NUMATTRS_, nAttrs, \
	NULL_)

#define CDFclose(id) \
CDFlib (SELECT_, CDF_, id, \
	CLOSE_, CDF_, \
	NULL_)

#define CDFdelete(id) \
CDFlib (SELECT_, CDF_, id, \
	DELETE_, CDF_, \
	NULL_)

#define CDFerror(stat, text) \
CDFlib (SELECT_, CDF_STATUS_, stat, \
	GET_, STATUS_TEXT_, text, \
	NULL_)

#define CDFattrCreate(id,attrName,attrScope,attrNum) \
CDFlib (SELECT_, CDF_, id, \
	CREATE_, ATTR_, attrName, attrScope, attrNum, \
	NULL_)

#define CDFattrRename(id,attrNum,attrName) \
CDFlib (SELECT_, CDF_, id, \
		 ATTR_, attrNum, \
	PUT_, ATTR_NAME_, attrName, \
	NULL_)

#define CDFvarCreate(id,varName,dataType,numElements,recVary,dimVarys,varNum) \
CDFlib (SELECT_, CDF_, id, \
	CREATE_, rVAR_, varName, dataType, numElements, \
			recVary, dimVarys, varNum, \
	NULL_)

#define CDFvarRename(id,varNum,varName) \
CDFlib (SELECT_, CDF_, id, \
		 rVAR_, varNum, \
	PUT_, rVAR_NAME_, varName, \
	NULL_)

#define CDFvarInquire(id,varN,varName,dataType,numElements,recVary,dimVarys) \
CDFlib (SELECT_, CDF_, id, \
		 rVAR_, varN, \
	GET_, rVAR_NAME_, varName, \
	      rVAR_DATATYPE_, dataType, \
	      rVAR_NUMELEMS_, numElements, \
	      rVAR_RECVARY_, recVary, \
	      rVAR_DIMVARYS_, dimVarys, \
	NULL_)

#define CDFvarGet(id,varNum,recNum,indices,value) \
CDFlib (SELECT_, CDF_, id, \
		 rVAR_, varNum, \
		 rVARs_RECNUMBER_, recNum, \
		 rVARs_DIMINDICES_, indices, \
	GET_, rVAR_DATA_, value, \
	NULL_)

#define CDFvarPut(id,varNum,recNum,indices,value) \
CDFlib (SELECT_, CDF_, id, \
		 rVAR_, varNum, \
		 rVARs_RECNUMBER_, recNum, \
		 rVARs_DIMINDICES_, indices, \
	PUT_, rVAR_DATA_, value, \
	NULL_)

#define CDFvarHyperGet(id,varN,recS,recC,recI,indices,counts,intervals,buff) \
CDFlib (SELECT_, CDF_, id, \
		 rVAR_, varN, \
		 rVARs_RECNUMBER_, recS, \
		 rVARs_RECCOUNT_, recC, \
		 rVARs_RECINTERVAL_, recI, \
		 rVARs_DIMINDICES_, indices, \
		 rVARs_DIMCOUNTS_, counts, \
		 rVARs_DIMINTERVALS_, intervals, \
	GET_, rVAR_HYPERDATA_, buff, \
	NULL_)

#define CDFvarHyperPut(id,varN,recS,recC,recI,indices,counts,intervals,buff) \
CDFlib (SELECT_, CDF_, id, \
		 rVAR_, varN, \
		 rVARs_RECNUMBER_, recS, \
		 rVARs_RECCOUNT_, recC, \
		 rVARs_RECINTERVAL_, recI, \
		 rVARs_DIMINDICES_, indices, \
		 rVARs_DIMCOUNTS_, counts, \
		 rVARs_DIMINTERVALS_, intervals, \
	PUT_, rVAR_HYPERDATA_, buff, \
	NULL_)

#define CDFvarClose(id,varNum) \
CDFlib (SELECT_, CDF_, id, \
		 rVAR_, varNum, \
	CLOSE_, rVAR_, \
	NULL_)

/******************************************************************************
* Function prototypes.
*     It is assumed that `__cplusplus' is defined for ALL C++ compilers.  If
* ANSI function prototypes are not desired (for whatever reason), define
* noPROTOs on the compile command line.  Otherwise, ANSI function prototypes
* will be used where appropriate.
******************************************************************************/

#if !defined(noPROTOs)
#if defined(__STDC__)
#define PROTOs_
#else
#if defined(vms)
#define PROTOs_
#endif
#if defined(__MSDOS__) || defined(MSDOS)
#define PROTOs_
#endif
#if defined(macintosh) || defined(THINK_C)
#define PROTOs_
#endif
#endif
#endif

#if defined(PROTOs_)
#define PROTOARGs(args) args
#else
#define PROTOARGs(args) ()
#endif

#if defined(unix) && defined(BUILDINGforIDL)
#define STATICforIDL static
#else
#define STATICforIDL \

#endif

#if defined(__cplusplus)
extern "C" {
#endif

STATICforIDL CDFstatus CDFlib PROTOARGs((long op1, ...));
CDFstatus CDFattrInquire PROTOARGs((
  CDFid id, long attrNum, char *attrName, long *attrScope, long *maxEntry
));
CDFstatus CDFattrEntryInquire PROTOARGs((
  CDFid id, long attrNum, long entryNum, long *dataType, long *numElems
));
CDFstatus CDFattrPut PROTOARGs((
  CDFid id, long attrNum, long entryNum, long dataType, long numElems,
  void *value
));
CDFstatus CDFattrGet PROTOARGs((
  CDFid id, long attrNum, long entryNum, void *value
));
long CDFattrNum PROTOARGs((CDFid id, char *attrName));
long CDFvarNum PROTOARGs((CDFid id, char *varName));
STATICforIDL void EPOCHbreakdown PROTOARGs((
  double epoch, long *year, long *month, long *day, long *hour, long *minute,
  long *second, long *msec
));
STATICforIDL double computeEPOCH PROTOARGs((
  long year, long month, long day, long hour, long minute, long second,
  long msec
));
STATICforIDL double parseEPOCH PROTOARGs((char *inString));
STATICforIDL void encodeEPOCH PROTOARGs((
  double epoch, char epString[EPOCH_STRING_LEN+1]
));
STATICforIDL void encodeEPOCH1 PROTOARGs((
  double epoch, char epString[EPOCH1_STRING_LEN+1]
));
STATICforIDL void encodeEPOCH2 PROTOARGs((
  double epoch, char epString[EPOCH2_STRING_LEN+1]
));
STATICforIDL void encodeEPOCH3 PROTOARGs((
  double epoch, char epString[EPOCH3_STRING_LEN+1]
));
STATICforIDL void encodeEPOCHx PROTOARGs((
  double epoch, char *format, char *encoded
));

#if defined(__cplusplus)
}
#endif

/******************************************************************************
* Synonyms for compatibility with older releases.
******************************************************************************/

#define CDF_DOCUMENT_LEN	        CDF_COPYRIGHT_LEN
#define CDF_ERRTEXT_LEN         	CDF_STATUSTEXT_LEN
#define CDF_NUMDIMS_            	rVARs_NUMDIMS_
#define CDF_DIMSIZES_           	rVARs_DIMSIZES_
#define CDF_MAXREC_             	rVARs_MAXREC_
#define CDF_RECNUMBER_          	rVARs_RECNUMBER_
#define CDF_RECCOUNT_           	rVARs_RECCOUNT_
#define CDF_RECINTERVAL_        	rVARs_RECINTERVAL_
#define CDF_DIMINDICES_         	rVARs_DIMINDICES_
#define CDF_DIMCOUNTS_          	rVARs_DIMCOUNTS_
#define CDF_DIMINTERVALS_       	rVARs_DIMINTERVALS_
#define CDF_NUMVARS_            	CDF_NUMrVARS_
#define VAR_                    	rVAR_
#define VAR_NAME_               	rVAR_NAME_
#define VAR_DATATYPE_           	rVAR_DATATYPE_
#define VAR_NUMELEMS_           	rVAR_NUMELEMS_
#define VAR_RECVARY_            	rVAR_RECVARY_
#define VAR_DIMVARYS_           	rVAR_DIMVARYS_
#define VAR_NUMBER_             	rVAR_NUMBER_
#define VAR_DATA_               	rVAR_DATA_
#define VAR_HYPERDATA_          	rVAR_HYPERDATA_
#define VAR_SEQDATA_            	rVAR_SEQDATA_
#define VAR_SEQPOS_             	rVAR_SEQPOS_
#define VAR_MAXREC_             	rVAR_MAXREC_
#define VAR_DATASPEC_           	rVAR_DATASPEC_
#define VAR_FILLVALUE_          	rVAR_PADVALUE_
#define VAR_INITIALRECS_        	rVAR_INITIALRECS_
#define VAR_EXTENDRECS_         	rVAR_EXTENDRECS_
#define ATTR_MAXENTRY_          	ATTR_MAXrENTRY_
#define ATTR_NUMENTRIES_        	ATTR_NUMrENTRIES_
#define ENTRY_                  	rENTRY_
#define ENTRY_DATATYPE_         	rENTRY_DATATYPE_
#define ENTRY_NUMELEMS_         	rENTRY_NUMELEMS_
#define ENTRY_DATA_             	rENTRY_DATA_
#define MIPSEL_ENCODING			DECSTATION_ENCODING
#define MIPSEB_ENCODING			SGi_ENCODING
#define rVAR_EXISTANCE_			rVAR_EXISTENCE_
#define zVAR_EXISTANCE_			zVAR_EXISTENCE_
#define ATTR_EXISTANCE_			ATTR_EXISTENCE_
#define gENTRY_EXISTANCE_		gENTRY_EXISTENCE_
#define rENTRY_EXISTANCE_		rENTRY_EXISTENCE_
#define zENTRY_EXISTANCE_		zENTRY_EXISTENCE_
#define GLOBAL_SCOPE_ASSUMED		GLOBAL_SCOPE
#define VARIABLE_SCOPE_ASSUMED		VARIABLE_SCOPE

/*****************************************************************************/

#endif
