1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
/*********************************************************************
* Copyright 2010, UCAR/Unidata
* See netcdf/COPYRIGHT file for copying and redistribution conditions.
*********************************************************************/
#include "config.h"
#ifdef USE_PARALLEL
#include <mpi.h>
#endif
#include "ncdispatch.h"
extern int NC3_initialize(void);
extern int NC3_finalize(void);
#ifdef USE_NETCDF4
#include "nc4internal.h"
extern int NC4_initialize(void);
extern int NC4_finalize(void);
#endif
#ifdef ENABLE_DAP2
extern int NCD2_initialize(void);
extern int NCD2_finalize(void);
#endif
#ifdef ENABLE_DAP4
extern int NCD4_initialize(void);
extern int NCD4_finalize(void);
#endif
#ifdef USE_PNETCDF
extern int NCP_initialize(void);
extern int NCP_finalize(void);
#endif
#ifdef USE_HDF4
extern int NC_HDF4_initialize(void);
extern int NC_HDF4_finalize(void);
#endif
#ifdef _MSC_VER
#include <io.h>
#include <fcntl.h>
#endif
int NC_argc = 1;
char* NC_argv[] = {"nc_initialize",NULL};
int NC_initialized = 0;
int NC_finalized = 1;
/**
This procedure invokes all defined
initializers, and there is an initializer
for every known dispatch table.
So if you modify the format of NC_Dispatch,
then you need to fix it everywhere.
It also initializes appropriate external libraries.
*/
int
nc_initialize()
{
int stat = NC_NOERR;
if(NC_initialized) return NC_NOERR;
NC_initialized = 1;
NC_finalized = 0;
/* Do general initialization */
if((stat = NCDISPATCH_initialize())) goto done;
/* Initialize each active protocol */
if((stat = NC3_initialize())) goto done;
#ifdef ENABLE_DAP
if((stat = NCD2_initialize())) goto done;
#endif
#ifdef ENABLE_DAP4
if((stat = NCD4_initialize())) goto done;
#endif
#ifdef USE_PNETCDF
if((stat = NCP_initialize())) goto done;
#endif
#ifdef USE_HDF4
if((stat = NC_HDF4_initialize())) goto done;
#endif
#ifdef USE_NETCDF4
if((stat = NC4_initialize())) goto done;
stat = NC4_provenance_init();
#endif /* USE_NETCDF4 */
done:
return stat;
}
/**
This procedure invokes all defined
finalizers, and there should be one
for every known dispatch table.
So if you modify the format of NC_Dispatch,
then you need to fix it everywhere.
It also finalizes appropriate external libraries.
*/
int
nc_finalize(void)
{
int stat = NC_NOERR;
if(NC_finalized) return NC_NOERR;
NC_initialized = 0;
NC_finalized = 1;
/* Finalize each active protocol */
#ifdef ENABLE_DAP2
if((stat = NCD2_finalize())) return stat;
#endif
#ifdef ENABLE_DAP4
if((stat = NCD4_finalize())) return stat;
#endif
#ifdef USE_PNETCDF
if((stat = NCP_finalize())) return stat;
#endif
#ifdef USE_HDF4
if((stat = NC_HDF4_finalize())) return stat;
#endif /* USE_HDF4 */
#ifdef USE_NETCDF4
if((stat = NC4_finalize())) return stat;
#endif /* USE_NETCDF4 */
if((stat = NC3_finalize())) return stat;
/* Do general finalization */
if((stat = NCDISPATCH_finalize())) return stat;
return NC_NOERR;
}
|