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