/*------------------------------------------------------------------------- * * 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 vgroup object into a hdf5 group. Author: Kent Yang(ymuqun@ncsa.uiuc.edu) *****************************************************************************/ #include "h4toh5main.h" /*------------------------------------------------------------------------- * Function: Vgroup_h4_to_h5 * * Purpose: translate different Vgroup objects: vgroup,vdata,sds,image into hdf5 datasets and recursively call the routine * * Return: FAIL if failed, SUCCEED if successful. * * In : file_id: hdf4 file identifier vgroup_id: hdf4 vgroup id sd_id: sd interface id h5_group: hdf5 group id h5_dimgroup: hdf5 dimensional scale group id h5_palgroup: hdf5 palette group id Out: Modification: *------------------------------------------------------------------------- */ int Vgroup_h4_to_h5(int32 file_id,int32 vgroup_id,int32 sd_id,hid_t h5_group,hid_t h5_dimgroup,hid_t h5_palgroup) { int32 vgroup_tag; int32 vgroup_ref; int32 obj_tag; int32 obj_ref; int32 num_gobjects; int i; char refstr[MAXREF_LENGTH]; char vgroup_class[VGNAMELENMAX]; char vgroup_name[VGNAMELENMAX]; char* h5pgroup_name; int check_vgname; hid_t h5_pgroup; /*zeroing out memory for vgroup_class and vgroup_name */ h4toh5_ZeroMemory(vgroup_class,VGNAMELENMAX); h4toh5_ZeroMemory(vgroup_name,VGNAMELENMAX); vgroup_tag = VQuerytag(vgroup_id); if(vgroup_tag == FAIL) { printf("error in obtaining vgroup tag.\n"); return FAIL; } vgroup_ref = VQueryref(vgroup_id); if(vgroup_ref == FAIL) { printf("error in obtaining vgroup reference.\n"); return FAIL; } if(Vgetname(vgroup_id,vgroup_name) == FAIL) { printf("error in obtaining vgroup name.\n"); return FAIL; } if(Vgetclass(vgroup_id,vgroup_class) == FAIL) { printf("error in obtaining vgroup class name. \n"); return FAIL; } /*** ignore reserved HDF group ***/ if(vgroup_class != NULL) { if(strcmp(vgroup_class,_HDF_ATTRIBUTE)==0) return SUCCEED; if(strcmp(vgroup_class,_HDF_VARIABLE)==0) return SUCCEED; if(strcmp(vgroup_class,_HDF_DIMENSION)==0) return SUCCEED; if(strcmp(vgroup_class,_HDF_UDIMENSION)==0) return SUCCEED; if(strcmp(vgroup_class,_HDF_CDF)==0) return SUCCEED; if(strcmp(vgroup_class,GR_NAME)==0) return SUCCEED; if(strcmp(vgroup_class,RI_NAME)==0) return SUCCEED; } if(vgroup_name != NULL) if(strcmp(vgroup_name,GR_NAME)==0) return SUCCEED; h5pgroup_name = get_name(vgroup_ref,estnum_vg,vg_hashtab,&check_vgname); if(h5pgroup_name == NULL && check_vgname == 0 ) { printf("error,cannot find group\n"); return FAIL; } if(h5pgroup_name == NULL && check_vgname ==-1 ) { printf("error,group name is not defined.\n"); return FAIL; } /* create a hdf5 group under h5_group.*/ h5_pgroup = H5Gcreate(h5_group,h5pgroup_name,0); if(h5_pgroup < 0) { printf("error in creating group. \n"); free(h5pgroup_name); return FAIL; } /* vgroup attributes into corresponding hdf5 group attributes.*/ if(vg_transattrs(vgroup_id,h5_pgroup)==FAIL) { printf("error in translating vgroup attributes into hdf5 group attr.\n"); H5Gclose(h5_pgroup); free(h5pgroup_name); return FAIL; } num_gobjects = Vntagrefs(vgroup_id); if(num_gobjects == FAIL) { printf("error in obtaining number of objects in the vgroup. \n"); H5Gclose(h5_pgroup); free(h5pgroup_name); return FAIL; } if(Annoobj_h4_to_h5(file_id,vgroup_ref,vgroup_tag,h5_pgroup)==FAIL) { printf("error in obtaining annotation of the vgroup.\n"); H5Gclose(h5_pgroup); free(h5pgroup_name); return FAIL; } for( i = 0;i