00001 #ifndef HDF_READER_H 00002 #define HDF_READER_H 00003 00018 #include <stdio.h> 00019 #include <string.h> 00020 #include "mfhdf.h" 00021 00026 typedef struct { 00028 char name[MAX_NC_NAME]; 00030 int32 data_type; 00032 int32 n_val; 00034 void * value; 00035 } ATTR; 00036 00041 typedef struct { 00043 char name[MAX_NC_NAME]; 00045 int32 data_type; 00047 int32 rank; 00049 int32 dim_size[MAX_VAR_DIMS]; 00051 int32 n_attr; 00053 ATTR * v_attr; 00054 } SDS_INFO; 00055 00061 int32 open_hdf_file(const char* filename); 00062 00068 int32 close_hdf_file(const int32 hdf_id); 00069 00079 int32 get_file_info( const char* filename, int32 * n_sds, char *** v_sds_name, int32 * n_file_attr, char *** v_file_attr_name ); 00080 00088 int32 get_sds_info( const char* filename, const char * sds_name, SDS_INFO * sds_info ); 00089 00097 int32 get_sds_info_by_id( const int32 sd_id, const char * sds_name, SDS_INFO * sds_info ); 00098 00103 void print_sds_info (const SDS_INFO * sds_info); 00104 00112 int32 get_file_attr ( const char* filename, const char* attr_name, ATTR * attr); 00113 00121 int32 get_file_attr_by_id ( const int32 sd_id, const char* attr_name, ATTR * attr); 00122 00131 int32 get_sds_attr ( const char* filename, const char * sds_name, const char* attr_name, ATTR * attr); 00132 00137 void print_attr (const ATTR * attr); 00138 00147 int32 get_obj_attr ( const int32 obj_id, const char* attr_name, ATTR * attr ); 00148 00157 int32 get_obj_attr_by_index( const int32 obj_id, const int32 i_attr, ATTR * attr ); 00158 00170 int32 read_scaled_sds( const char * filename, const char* sds_name, double **sds_data, int32 *start, int32 *stride, int32 *edges ); 00171 00183 int32 read_scaled_sds_by_id( const int32 sd_id, const char* sds_name, double **sds_data, int32 *start, int32 *stride, int32 *edges ); 00184 00197 int32 read_sds( const char * filename, const char* sds_name, void **sds_data, int32 *start, int32 *stride, int32 *edges ); 00198 00211 int32 read_sds_by_id( const int32 sd_id, const char* sds_name, void **sds_data, int32 *start, int32 *stride, int32 *edges ); 00212 00224 int32 get_sds_calibration( const char* filename, const char* sds_name, float64 *cal, float64 *cal_err, float64 *offset, float64 *offset_err, int32 *data_type ); 00225 00238 int32 get_sds_calibration_by_id( const int32 sd_id, const char* sds_name, float64 *cal, float64 *cal_err, float64 *offset, float64 *offset_err, int32 *data_type ); 00239 00245 int16 get_data_type_size ( const int32 data_type ); 00246 00251 void print_data_type_description ( const int32 data_type ); 00252 00260 int32 get_sds_id ( const int32 sd_id, const char * sds_name ) ; 00261 00272 int32 set_start_stride_edge (const int32 sd_id, const char * sds_name, int32 **start, const int32 *stride, int32 **edges); 00273 00284 int32 scale_data( const void* unscaled_data, const int32 unscaled_data_type, const int32 nb_data, const double scale_factor, const double offset, double* scaled_data ); 00285 00291 void free_typed_data (void** data, const int32 data_type); 00292 00297 void free_attr (ATTR * attr); 00298 00303 void free_sds_info (SDS_INFO * sds_info); 00304 00310 void free_v_string( char *** v_string, const int32 n_string ); 00311 00312 #endif 00313