int_f nh5tbinsert_field_c(hid_t_f *loc_id, int_f *namelen, _fcd name, int_f *namelen1, _fcd field_name, hid_t_f *field_type, int_f *position, void *buf) { int ret_value = -1; herr_t ret; char *c_name; int c_namelen; char *c_name1; int c_namelen1; hid_t c_loc_id = *loc_id; hid_t c_field_type = *field_type; hsize_t c_position = *position; /* * Convert FORTRAN name to C name */ c_namelen = *namelen; c_name = (char *)HD5f2cstring(name, c_namelen); if (c_name == NULL) return ret_value; c_namelen1 = *namelen1; c_name1 = (char *)HD5f2cstring(field_name, c_namelen1); if (c_name1 == NULL) return ret_value; /* * Call H5TBinsert_field function. */ ret = H5TBinsert_field(c_loc_id,c_name,c_name1,c_field_type,c_position,NULL,buf); if (ret < 0) return ret_value; ret_value = 0; return ret_value; }
int main( void ) { typedef struct Particle1 { char name[16]; int lati; int longi; float pressure; double temperature; } Particle1; /* Define an array of Particles */ Particle1 p_data[NRECORDS] = { {"zero",0,0, 0.0f, 0.0}, {"one",10,10, 1.0f, 10.0}, {"two", 20,20, 2.0f, 20.0}, {"three",30,30, 3.0f, 30.0}, {"four", 40,40, 4.0f, 40.0}, {"five", 50,50, 5.0f, 50.0}, {"six", 60,60, 6.0f, 60.0}, {"seven",70,70, 7.0f, 70.0} }; /* Calculate the size and the offsets of our struct members in memory */ size_t dst_size1 = sizeof( Particle1 ); size_t dst_offset1[NFIELDS] = { HOFFSET( Particle1, name ), HOFFSET( Particle1, lati ), HOFFSET( Particle1, longi ), HOFFSET( Particle1, pressure ), HOFFSET( Particle1, temperature )}; /* Define field information */ const char *field_names[NFIELDS] = { "Name","Latitude", "Longitude", "Pressure", "Temperature" }; hid_t field_type[NFIELDS]; hid_t string_type; hid_t file_id; hsize_t chunk_size = 10; int compress = 0; Particle1 fill_data[1] = { "no data",-1,-1, -99.0f, -99.0 }; int fill_data_new[1] = { -100 }; hsize_t position; herr_t status; hsize_t nfields_out; hsize_t nrecords_out; /* Define the inserted field information */ hid_t field_type_new = H5T_NATIVE_INT; int data[NRECORDS] = { 0,1,2,3,4,5,6,7 }; /* Initialize the field type */ string_type = H5Tcopy( H5T_C_S1 ); H5Tset_size( string_type, 16 ); field_type[0] = string_type; field_type[1] = H5T_NATIVE_INT; field_type[2] = H5T_NATIVE_INT; field_type[3] = H5T_NATIVE_FLOAT; field_type[4] = H5T_NATIVE_DOUBLE; /* Create a new file using default properties. */ file_id = H5Fcreate( "ex_table_11.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ); /* Make the table */ status=H5TBmake_table( "Table Title",file_id,TABLE_NAME,NFIELDS,NRECORDS, dst_size1,field_names, dst_offset1, field_type, chunk_size, fill_data, compress, p_data ); /* Insert the new field at the end of the field list */ position = NFIELDS; status=H5TBinsert_field( file_id, TABLE_NAME, "New Field", field_type_new, position, fill_data_new, data ); /* Get table info */ status=H5TBget_table_info (file_id,TABLE_NAME, &nfields_out, &nrecords_out ); /* print */ printf ("Table has %d fields and %d records\n",(int)nfields_out,(int)nrecords_out); /* Close the file. */ H5Fclose( file_id ); return 0; }