diff options
author | MuQun Yang <ymuqun@hdfgroup.org> | 2000-11-08 23:14:41 (GMT) |
---|---|---|
committer | MuQun Yang <ymuqun@hdfgroup.org> | 2000-11-08 23:14:41 (GMT) |
commit | a219b97a88ffbc8d1641b1a1de7897823e7716ae (patch) | |
tree | 3a886a5dbe741f76056fa06869a6894c3e11eca5 /tools/h4toh5vdata.c | |
parent | 34b23b7dfab6cfdc6d38d05b8c5cf4dde60a2059 (diff) | |
download | hdf5-a219b97a88ffbc8d1641b1a1de7897823e7716ae.zip hdf5-a219b97a88ffbc8d1641b1a1de7897823e7716ae.tar.gz hdf5-a219b97a88ffbc8d1641b1a1de7897823e7716ae.tar.bz2 |
[svn-r2839]
Purpose:
check in beta release h4toh5 converter
Description:
1. add copy right and other comments to all .h and .c files
2. fix bugs on sds unlimited dimension, hdf5 dimensional scale attribute and vdata translating
from h4 to h5.
Solution:
2.
1) for sds with unlimited dimension to be converted into extensible hdf5 dataset,
on hdf5 side, has to set a default chunk size even though the corresponding hdf4 file is not
chunked.
2) in this version, if sds object doesn't have dimensional scale data, we will not show
the default hdf4 dimensional name ("fakedim0", etc.) in the new hdf5 dimensional scale
name attribute.
3) fix a bug transferring vdata of which the field includes a character array. Make it correctly transfer into the corresponding hdf5 compound data type.
Platforms tested:
eirene,arabica,baldric,hawkwind,paz,gondolin on new set of hdf4 test files.
Diffstat (limited to 'tools/h4toh5vdata.c')
-rw-r--r-- | tools/h4toh5vdata.c | 91 |
1 files changed, 43 insertions, 48 deletions
diff --git a/tools/h4toh5vdata.c b/tools/h4toh5vdata.c index f15922a..b078791 100644 --- a/tools/h4toh5vdata.c +++ b/tools/h4toh5vdata.c @@ -1,3 +1,31 @@ +/*------------------------------------------------------------------------- + * + * Copyright (C) 2000 National Center for Supercomputing Applications. + * All rights reserved. + * + *------------------------------------------------------------------------- + */ + +/****************************************************************************** + + Description: + +1. converter + +See HDF4 to HDF5 mapping specification at +(http://hdf.ncsa.uiuc.edu/HDF5/papers/h4toh5) for the default mapping +from HDF4 object to HDF5 object. + +The whole converter includes 10 files, h4toh5util.h, h4toh5main.h, h4toh5util.c, h4toh5main.c, h4toh5sds.c, h4toh5image.c,h4toh5vdata.c,h4toh5vgroup.c,h4toh5pal.c and h4toh5anno.c. + +2. this file + +Converting an hdf4 independent vdata object into an hdf5 dataset of compound dataset. + +Author: Kent Yang(ymuqun@ncsa.uiuc.edu) + + +*****************************************************************************/ #include "h4toh5main.h" @@ -161,11 +189,7 @@ int Vdata_h4_to_h5(int32 file_id,int32 vdata_id, hid_t group_id) { vdatamem_size +=fieldorder*h4memsize[i]; } - - - - /* printf("vdatamem_size %d\n",vdatamem_size); - printf("vdata_size %d\n",vdata_size);*/ + vd_data = malloc(vdatamem_size*n_records); istat = VSsetfields(vdata_id,field_name_list); @@ -195,7 +219,7 @@ int Vdata_h4_to_h5(int32 file_id,int32 vdata_id, hid_t group_id) { for (i=0;i<nfields;i++) { /* obtain field order.*/ fieldorder = VFfieldorder(vdata_id,i); - /* printf("%d again fieldorder %d\n",i,fieldorder);*/ + if(fieldorder == FAIL){ printf("error in obtaining field order. \n"); free(h5memtype); @@ -515,14 +539,14 @@ int vdata_transattrs(int32 vdata_id,hid_t h5dset,int snum_vdattrs, if (sh5_atype == H5T_STRING) { if ((sh5str_type = mkstr(count_svdadata, - H5T_STR_NULLTERM))<0) { + H5T_STR_SPACEPAD))<0) { printf("error in making string for vdata attribute. \n"); free(svd_adata); return FAIL; } if ((sh5str_memtype = mkstr(count_svdadata*sh4_amemsize, - H5T_STR_NULLTERM))<0) { + H5T_STR_SPACEPAD))<0) { printf("error in making memory string for vdata attribute. \n"); free(svd_adata); return FAIL; @@ -645,8 +669,6 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, hid_t* sh5type,hid_t* sh5memtype, hid_t h5_ctype,hid_t h5_cmemtype) { - /*char fieldname[MAX_NC_NAME]; - char* temp_fieldname;*/ char* fieldname; int32 fieldorder; int32 fieldsize; @@ -669,30 +691,17 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, fieldname = NULL; fieldorder = VFfieldorder(vdata_id,i); - /* printf(" %d fieldorder%d\n",i,fieldorder);*/ if(fieldorder == FAIL){ printf("error in obtaining fieldorder.\n"); return FAIL; } - /* temp_fieldname = VFfieldname(vdata_id,i); - if(temp_fieldname== NULL) { - printf("fail to obtain Vdata field name. \n"); - return FAIL; - } - - strncpy(fieldname,temp_fieldname,strlen(temp_fieldname)); - - - free(temp_fieldname);*/ - fieldname = VFfieldname(vdata_id,i); if(fieldname == NULL){ printf("fail to obtain Vdata field name. \n"); return FAIL; } - fieldsize = VFfieldesize(vdata_id,i); if(fieldsize == FAIL) { @@ -704,10 +713,8 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, array as one hdf5 type string. */ if(sh5type[i] == H5T_STRING) { - /* printf("sh4size in the string %d\n",sh4size[i]); - printf("fieldsize in the string %d\n",fieldsize);*/ - /* if ((h5str_type = mkstr(sh4size[i],H5T_STR_NULLTERM))<0) {*/ - if ((h5str_type = mkstr(sh4size[i]*fieldorder,H5T_STR_NULLTERM))<0) { + + if ((h5str_type = mkstr(sh4size[i]*fieldorder,H5T_STR_SPACEPAD))<0) { printf("error in making string of hdf5 string. \n"); return FAIL; } @@ -717,8 +724,7 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, if (sh5memtype[i] == H5T_STRING) { - /*if((h5str_type = mkstr(sh4memsize[i],H5T_STR_NULLTERM))<0){ */ - if((h5str_type = mkstr(sh4memsize[i]*fieldorder,H5T_STR_NULLTERM))<0){ + if((h5str_type = mkstr(sh4memsize[i]*fieldorder,H5T_STR_SPACEPAD))<0){ printf("error in making string for VDATA in memory. \n"); return FAIL; } @@ -728,22 +734,18 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, fielddim[0] = fieldorder; - /* if field type is an array, use H5Tinsert_array.*/ + /* if field type is an array, use H5Tinsert_array. + When the data type is H5T_STRING, + we will treat the the vdata as a HDF5 scalar type.*/ if (fielddim[0] == 1 || check_ifstr == 1) { - /* printf("i%d,sh5type[i] %d\n",i,sh5type[i]); - printf("i%d,fieldname%s\n",i,fieldname); - printf("i%d,fil_offset%d\n",i,fil_offset);*/ if(H5Tinsert(h5_ctype,fieldname,fil_offset,sh5type[i])<0) { printf("error inserting hdf5 compound datatype while "); printf("converting vdata.\n"); return FAIL; } - - /* printf("i%d,sh5memtype[i] %d\n",i,sh5memtype[i]); - printf("i%d,fieldname%s\n",i,fieldname); - printf("i%d,mem_offset%d\n",i,mem_offset);*/ + if(H5Tinsert(h5_cmemtype,fieldname,mem_offset,sh5memtype[i])<0){ printf("error inserting hdf5 compound datatype of memory"); printf(" while converting vdata.\n"); @@ -758,10 +760,7 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, printf("error inserting array into hdf5 compound datatype. \n"); return FAIL; } - /* printf("i%d,sh5memtype[i] %d\n",i,sh5memtype[i]); - printf("i%d,fielddim[0]%d\n",i,fielddim[0]); - printf("i%d,fieldname%s\n",i,fieldname); - printf("i%d,mem_offset%d\n",i,mem_offset);*/ + if(H5Tinsert_array(h5_cmemtype,fieldname,mem_offset,1,fielddim, NULL,sh5memtype[i])<0) { printf("error inserting array into hdf5 compound datatype for memory. \n"); @@ -771,13 +770,9 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, } - /* fieldsizef = (size_t)fieldsize; - fil_offset = fil_offset + fieldsizef; - mem_offset = mem_offset + sh4memsize[i];*/ - if( check_ifstr == 1) { - fil_offset = fil_offset + sh4size[i]; - mem_offset = mem_offset + sh4memsize[i]; + fil_offset = fil_offset + sh4size[i]*fieldorder; + mem_offset = mem_offset + sh4memsize[i]*fieldorder; check_ifstr = 0; } else { @@ -785,7 +780,7 @@ int gen_h5comptype(int32 vdata_id,int32 nfields, fil_offset = fil_offset + sh4size[i]*fieldorder; mem_offset = mem_offset + sh4memsize[i]*fieldorder; } - /* free(fieldname);*/ + } return SUCCEED; |