[svn-r5088] Purpose:

Code removal
Description:
	Removed the HDF4 source files from the HDF5 tree. The directories
	will remain. Use the "-P" option when doing a cvs checkout or update
	to "prune" the empty directories from your personal tree.
This commit is contained in:
Bill Wendling 2002-03-27 11:11:41 -05:00
parent 480c319ab4
commit 0f7c2e3017
21 changed files with 0 additions and 17439 deletions

View File

@ -1,292 +0,0 @@
## This file is machine generated on GNU systems.
## Only temporary changes may be made here.
h4toh5test.lo: \
$(srcdir)/h4toh5test.c
h4toh5main.lo: \
$(srcdir)/h4toh5main.c \
$(srcdir)/h4toh5main.h \
$(top_srcdir)/src/hdf5.h \
$(top_srcdir)/src/H5public.h \
$(top_builddir)/src/H5pubconf.h \
$(top_srcdir)/src/H5api_adpt.h \
$(top_srcdir)/src/H5Ipublic.h \
$(top_srcdir)/src/H5Apublic.h \
$(top_srcdir)/src/H5ACpublic.h \
$(top_srcdir)/src/H5Bpublic.h \
$(top_srcdir)/src/H5Dpublic.h \
$(top_srcdir)/src/H5Epublic.h \
$(top_srcdir)/src/H5Fpublic.h \
$(top_srcdir)/src/H5FDpublic.h \
$(top_srcdir)/src/H5Gpublic.h \
$(top_srcdir)/src/H5HGpublic.h \
$(top_srcdir)/src/H5HLpublic.h \
$(top_srcdir)/src/H5MMpublic.h \
$(top_srcdir)/src/H5Opublic.h \
$(top_srcdir)/src/H5Ppublic.h \
$(top_srcdir)/src/H5Zpublic.h \
$(top_srcdir)/src/H5Rpublic.h \
$(top_srcdir)/src/H5Spublic.h \
$(top_srcdir)/src/H5Tpublic.h \
$(top_srcdir)/src/H5FDcore.h \
$(top_srcdir)/src/H5FDfamily.h \
$(top_srcdir)/src/H5FDmpio.h \
$(top_srcdir)/src/H5FDsec2.h \
$(top_srcdir)/src/H5FDstdio.h \
$(top_srcdir)/src/H5FDsrb.h \
$(top_srcdir)/src/H5FDgass.h \
$(top_srcdir)/src/H5FDstream.h \
$(top_srcdir)/src/H5FDmulti.h \
$(top_srcdir)/src/H5FDlog.h \
$(srcdir)/h4toh5util.h
h4toh5vgroup.lo: \
$(srcdir)/h4toh5vgroup.c \
$(srcdir)/h4toh5main.h \
$(top_srcdir)/src/hdf5.h \
$(top_srcdir)/src/H5public.h \
$(top_builddir)/src/H5pubconf.h \
$(top_srcdir)/src/H5api_adpt.h \
$(top_srcdir)/src/H5Ipublic.h \
$(top_srcdir)/src/H5Apublic.h \
$(top_srcdir)/src/H5ACpublic.h \
$(top_srcdir)/src/H5Bpublic.h \
$(top_srcdir)/src/H5Dpublic.h \
$(top_srcdir)/src/H5Epublic.h \
$(top_srcdir)/src/H5Fpublic.h \
$(top_srcdir)/src/H5FDpublic.h \
$(top_srcdir)/src/H5Gpublic.h \
$(top_srcdir)/src/H5HGpublic.h \
$(top_srcdir)/src/H5HLpublic.h \
$(top_srcdir)/src/H5MMpublic.h \
$(top_srcdir)/src/H5Opublic.h \
$(top_srcdir)/src/H5Ppublic.h \
$(top_srcdir)/src/H5Zpublic.h \
$(top_srcdir)/src/H5Rpublic.h \
$(top_srcdir)/src/H5Spublic.h \
$(top_srcdir)/src/H5Tpublic.h \
$(top_srcdir)/src/H5FDcore.h \
$(top_srcdir)/src/H5FDfamily.h \
$(top_srcdir)/src/H5FDmpio.h \
$(top_srcdir)/src/H5FDsec2.h \
$(top_srcdir)/src/H5FDstdio.h \
$(top_srcdir)/src/H5FDsrb.h \
$(top_srcdir)/src/H5FDgass.h \
$(top_srcdir)/src/H5FDstream.h \
$(top_srcdir)/src/H5FDmulti.h \
$(top_srcdir)/src/H5FDlog.h \
$(srcdir)/h4toh5util.h
h4toh5vdata.lo: \
$(srcdir)/h4toh5vdata.c \
$(srcdir)/h4toh5main.h \
$(top_srcdir)/src/hdf5.h \
$(top_srcdir)/src/H5public.h \
$(top_builddir)/src/H5pubconf.h \
$(top_srcdir)/src/H5api_adpt.h \
$(top_srcdir)/src/H5Ipublic.h \
$(top_srcdir)/src/H5Apublic.h \
$(top_srcdir)/src/H5ACpublic.h \
$(top_srcdir)/src/H5Bpublic.h \
$(top_srcdir)/src/H5Dpublic.h \
$(top_srcdir)/src/H5Epublic.h \
$(top_srcdir)/src/H5Fpublic.h \
$(top_srcdir)/src/H5FDpublic.h \
$(top_srcdir)/src/H5Gpublic.h \
$(top_srcdir)/src/H5HGpublic.h \
$(top_srcdir)/src/H5HLpublic.h \
$(top_srcdir)/src/H5MMpublic.h \
$(top_srcdir)/src/H5Opublic.h \
$(top_srcdir)/src/H5Ppublic.h \
$(top_srcdir)/src/H5Zpublic.h \
$(top_srcdir)/src/H5Rpublic.h \
$(top_srcdir)/src/H5Spublic.h \
$(top_srcdir)/src/H5Tpublic.h \
$(top_srcdir)/src/H5FDcore.h \
$(top_srcdir)/src/H5FDfamily.h \
$(top_srcdir)/src/H5FDmpio.h \
$(top_srcdir)/src/H5FDsec2.h \
$(top_srcdir)/src/H5FDstdio.h \
$(top_srcdir)/src/H5FDsrb.h \
$(top_srcdir)/src/H5FDgass.h \
$(top_srcdir)/src/H5FDstream.h \
$(top_srcdir)/src/H5FDmulti.h \
$(top_srcdir)/src/H5FDlog.h \
$(srcdir)/h4toh5util.h
h4toh5sds.lo: \
$(srcdir)/h4toh5sds.c \
$(srcdir)/h4toh5main.h \
$(top_srcdir)/src/hdf5.h \
$(top_srcdir)/src/H5public.h \
$(top_builddir)/src/H5pubconf.h \
$(top_srcdir)/src/H5api_adpt.h \
$(top_srcdir)/src/H5Ipublic.h \
$(top_srcdir)/src/H5Apublic.h \
$(top_srcdir)/src/H5ACpublic.h \
$(top_srcdir)/src/H5Bpublic.h \
$(top_srcdir)/src/H5Dpublic.h \
$(top_srcdir)/src/H5Epublic.h \
$(top_srcdir)/src/H5Fpublic.h \
$(top_srcdir)/src/H5FDpublic.h \
$(top_srcdir)/src/H5Gpublic.h \
$(top_srcdir)/src/H5HGpublic.h \
$(top_srcdir)/src/H5HLpublic.h \
$(top_srcdir)/src/H5MMpublic.h \
$(top_srcdir)/src/H5Opublic.h \
$(top_srcdir)/src/H5Ppublic.h \
$(top_srcdir)/src/H5Zpublic.h \
$(top_srcdir)/src/H5Rpublic.h \
$(top_srcdir)/src/H5Spublic.h \
$(top_srcdir)/src/H5Tpublic.h \
$(top_srcdir)/src/H5FDcore.h \
$(top_srcdir)/src/H5FDfamily.h \
$(top_srcdir)/src/H5FDmpio.h \
$(top_srcdir)/src/H5FDsec2.h \
$(top_srcdir)/src/H5FDstdio.h \
$(top_srcdir)/src/H5FDsrb.h \
$(top_srcdir)/src/H5FDgass.h \
$(top_srcdir)/src/H5FDstream.h \
$(top_srcdir)/src/H5FDmulti.h \
$(top_srcdir)/src/H5FDlog.h \
$(srcdir)/h4toh5util.h
h4toh5image.lo: \
$(srcdir)/h4toh5image.c \
$(srcdir)/h4toh5main.h \
$(top_srcdir)/src/hdf5.h \
$(top_srcdir)/src/H5public.h \
$(top_builddir)/src/H5pubconf.h \
$(top_srcdir)/src/H5api_adpt.h \
$(top_srcdir)/src/H5Ipublic.h \
$(top_srcdir)/src/H5Apublic.h \
$(top_srcdir)/src/H5ACpublic.h \
$(top_srcdir)/src/H5Bpublic.h \
$(top_srcdir)/src/H5Dpublic.h \
$(top_srcdir)/src/H5Epublic.h \
$(top_srcdir)/src/H5Fpublic.h \
$(top_srcdir)/src/H5FDpublic.h \
$(top_srcdir)/src/H5Gpublic.h \
$(top_srcdir)/src/H5HGpublic.h \
$(top_srcdir)/src/H5HLpublic.h \
$(top_srcdir)/src/H5MMpublic.h \
$(top_srcdir)/src/H5Opublic.h \
$(top_srcdir)/src/H5Ppublic.h \
$(top_srcdir)/src/H5Zpublic.h \
$(top_srcdir)/src/H5Rpublic.h \
$(top_srcdir)/src/H5Spublic.h \
$(top_srcdir)/src/H5Tpublic.h \
$(top_srcdir)/src/H5FDcore.h \
$(top_srcdir)/src/H5FDfamily.h \
$(top_srcdir)/src/H5FDmpio.h \
$(top_srcdir)/src/H5FDsec2.h \
$(top_srcdir)/src/H5FDstdio.h \
$(top_srcdir)/src/H5FDsrb.h \
$(top_srcdir)/src/H5FDgass.h \
$(top_srcdir)/src/H5FDstream.h \
$(top_srcdir)/src/H5FDmulti.h \
$(top_srcdir)/src/H5FDlog.h \
$(srcdir)/h4toh5util.h
h4toh5pal.lo: \
$(srcdir)/h4toh5pal.c \
$(srcdir)/h4toh5main.h \
$(top_srcdir)/src/hdf5.h \
$(top_srcdir)/src/H5public.h \
$(top_builddir)/src/H5pubconf.h \
$(top_srcdir)/src/H5api_adpt.h \
$(top_srcdir)/src/H5Ipublic.h \
$(top_srcdir)/src/H5Apublic.h \
$(top_srcdir)/src/H5ACpublic.h \
$(top_srcdir)/src/H5Bpublic.h \
$(top_srcdir)/src/H5Dpublic.h \
$(top_srcdir)/src/H5Epublic.h \
$(top_srcdir)/src/H5Fpublic.h \
$(top_srcdir)/src/H5FDpublic.h \
$(top_srcdir)/src/H5Gpublic.h \
$(top_srcdir)/src/H5HGpublic.h \
$(top_srcdir)/src/H5HLpublic.h \
$(top_srcdir)/src/H5MMpublic.h \
$(top_srcdir)/src/H5Opublic.h \
$(top_srcdir)/src/H5Ppublic.h \
$(top_srcdir)/src/H5Zpublic.h \
$(top_srcdir)/src/H5Rpublic.h \
$(top_srcdir)/src/H5Spublic.h \
$(top_srcdir)/src/H5Tpublic.h \
$(top_srcdir)/src/H5FDcore.h \
$(top_srcdir)/src/H5FDfamily.h \
$(top_srcdir)/src/H5FDmpio.h \
$(top_srcdir)/src/H5FDsec2.h \
$(top_srcdir)/src/H5FDstdio.h \
$(top_srcdir)/src/H5FDsrb.h \
$(top_srcdir)/src/H5FDgass.h \
$(top_srcdir)/src/H5FDstream.h \
$(top_srcdir)/src/H5FDmulti.h \
$(top_srcdir)/src/H5FDlog.h \
$(srcdir)/h4toh5util.h
h4toh5anno.lo: \
$(srcdir)/h4toh5anno.c \
$(srcdir)/h4toh5main.h \
$(top_srcdir)/src/hdf5.h \
$(top_srcdir)/src/H5public.h \
$(top_builddir)/src/H5pubconf.h \
$(top_srcdir)/src/H5api_adpt.h \
$(top_srcdir)/src/H5Ipublic.h \
$(top_srcdir)/src/H5Apublic.h \
$(top_srcdir)/src/H5ACpublic.h \
$(top_srcdir)/src/H5Bpublic.h \
$(top_srcdir)/src/H5Dpublic.h \
$(top_srcdir)/src/H5Epublic.h \
$(top_srcdir)/src/H5Fpublic.h \
$(top_srcdir)/src/H5FDpublic.h \
$(top_srcdir)/src/H5Gpublic.h \
$(top_srcdir)/src/H5HGpublic.h \
$(top_srcdir)/src/H5HLpublic.h \
$(top_srcdir)/src/H5MMpublic.h \
$(top_srcdir)/src/H5Opublic.h \
$(top_srcdir)/src/H5Ppublic.h \
$(top_srcdir)/src/H5Zpublic.h \
$(top_srcdir)/src/H5Rpublic.h \
$(top_srcdir)/src/H5Spublic.h \
$(top_srcdir)/src/H5Tpublic.h \
$(top_srcdir)/src/H5FDcore.h \
$(top_srcdir)/src/H5FDfamily.h \
$(top_srcdir)/src/H5FDmpio.h \
$(top_srcdir)/src/H5FDsec2.h \
$(top_srcdir)/src/H5FDstdio.h \
$(top_srcdir)/src/H5FDsrb.h \
$(top_srcdir)/src/H5FDgass.h \
$(top_srcdir)/src/H5FDstream.h \
$(top_srcdir)/src/H5FDmulti.h \
$(top_srcdir)/src/H5FDlog.h \
$(srcdir)/h4toh5util.h
h4toh5util.lo: \
$(srcdir)/h4toh5util.c \
$(srcdir)/h4toh5util.h \
$(top_srcdir)/src/hdf5.h \
$(top_srcdir)/src/H5public.h \
$(top_builddir)/src/H5pubconf.h \
$(top_srcdir)/src/H5api_adpt.h \
$(top_srcdir)/src/H5Ipublic.h \
$(top_srcdir)/src/H5Apublic.h \
$(top_srcdir)/src/H5ACpublic.h \
$(top_srcdir)/src/H5Bpublic.h \
$(top_srcdir)/src/H5Dpublic.h \
$(top_srcdir)/src/H5Epublic.h \
$(top_srcdir)/src/H5Fpublic.h \
$(top_srcdir)/src/H5FDpublic.h \
$(top_srcdir)/src/H5Gpublic.h \
$(top_srcdir)/src/H5HGpublic.h \
$(top_srcdir)/src/H5HLpublic.h \
$(top_srcdir)/src/H5MMpublic.h \
$(top_srcdir)/src/H5Opublic.h \
$(top_srcdir)/src/H5Ppublic.h \
$(top_srcdir)/src/H5Zpublic.h \
$(top_srcdir)/src/H5Rpublic.h \
$(top_srcdir)/src/H5Spublic.h \
$(top_srcdir)/src/H5Tpublic.h \
$(top_srcdir)/src/H5FDcore.h \
$(top_srcdir)/src/H5FDfamily.h \
$(top_srcdir)/src/H5FDmpio.h \
$(top_srcdir)/src/H5FDsec2.h \
$(top_srcdir)/src/H5FDstdio.h \
$(top_srcdir)/src/H5FDsrb.h \
$(top_srcdir)/src/H5FDgass.h \
$(top_srcdir)/src/H5FDstream.h \
$(top_srcdir)/src/H5FDmulti.h \
$(top_srcdir)/src/H5FDlog.h

View File

@ -1,60 +0,0 @@
## HDF5 Library Makefile(.in)
##
## Copyright (C) 2001 National Center for Supercomputing Applications.
## All rights reserved.
##
##
top_srcdir=@top_srcdir@
top_builddir=../..
srcdir=@srcdir@
SUBDIRS=
@COMMENCE@
## Add include directory to the C preprocessor flags, add -lh5tools and
## -lhdf5 to the list of libraries.
##
CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src \
-I$(top_srcdir)/tools/lib @CPPFLAGS@
## Test programs and scripts.
##
TEST_PROGS=
TEST_SCRIPTS=@TESTH4TOH5@
## These are our main targets: library and tools.
##
LIBTOOLS=../lib/libh5tools.la
LIBHDF5=$(top_builddir)/src/libhdf5.la
PUB_PROGS=@H4TOH5@
PROGS=$(PUB_PROGS) $(TEST_PROGS) @H4TOH5TEST@
## Source and object files for h4toh5 converter.
##
PROG_SRC=h4toh5main.c h4toh5vgroup.c h4toh5vdata.c h4toh5sds.c \
h4toh5image.c h4toh5pal.c h4toh5anno.c h4toh5util.c
PROG_OBJ=$(PROG_SRC:.c=.lo)
PRIVATE_HDR=h4toh5main.h h4toh5util.h
## Source and object files for the tests
##
TEST_SRC=h4toh5test.c
TEST_OBJ=$(TEST_SRC:.c=.lo)
## Programs have to be built before they can be tested!
##
check test _test: $(PROGS)
## How to build the programs... They all depend on the hdf5 library and
## the tools library compiled in this directory.
##
$(PROGS): $(LIBTOOLS) $(LIBHDF5)
h4toh5test: h4toh5test.lo
@$(LT_LINK_EXE) $(CFLAGS) -o $@ h4toh5test.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
h4toh5: $(PROG_OBJ)
@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(PROG_OBJ) $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
@CONCLUDE@

View File

@ -1,665 +0,0 @@
/*-------------------------------------------------------------------------
*
* 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 annotation into an hdf5 attribute of the corresponding object.
Author: Kent Yang(ymuqun@ncsa.uiuc.edu)
*****************************************************************************/
#include "h4toh5main.h"
/*-------------------------------------------------------------------------
* Function: Annofil_h4_to_h5
*
* Purpose: translate file annotation object into hdf5 dataset
*
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
file_id: file identifier
h5_group: hdf5 group id
*-------------------------------------------------------------------------
*/
int Annofil_h4_to_h5(int32 file_id,hid_t h5group){
int32 an_id;
int32 ann_id;
int32 i;
int32 ann_length;
int32 n_file_label = 0;
int32 n_file_desc = 0;
int32 n_data_label = 0;
int32 n_data_desc = 0;
int32 istat;
char* ann_buf;
char anno_labelname[30];
char anno_descname[30];
char index_str[5];
hid_t h5_sid;
hid_t h5_aid;
hid_t sh5str_type;
hid_t sh5str1_type;
hid_t ret;
an_id = ANstart(file_id);
if(an_id < 0) {
printf("error in obtaining an_id. \n");
return FAIL;
}
istat = ANfileinfo(an_id,&n_file_label,&n_file_desc,
&n_data_label,&n_data_desc);
if(istat == FAIL) {
printf("error getting file information.\n");
ANend(file_id);
return FAIL;
}
for (i = 0; i < n_file_label; i++) {
ann_id = ANselect(an_id,i,AN_FILE_LABEL);
if(ann_id == FAIL) {
printf("error in obtaining annotation id. \n");
ANend(file_id);
return FAIL;
}
ann_length = ANannlen(ann_id);
if(ann_length == FAIL) {
printf("error in obtaining annotation length. \n");
ANend(file_id);
ANendaccess(ann_id);
return FAIL;
}
ann_buf = malloc((size_t)ann_length + 1);
if(ann_buf == NULL) {
printf("error in allocating memory. \n");
return FAIL;
}
h4toh5_ZeroMemory(ann_buf,(ann_length+1)*sizeof(char));
istat = ANreadann(ann_id,ann_buf,ann_length+1);
if(istat==FAIL) {
printf("fail to read file information. \n");
ANend(file_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
h5_sid = H5Screate(H5S_SCALAR);
if (h5_sid < 0) {
printf("failed to create attribute space for");
printf(" HDF4 FILE ANNOTATION. \n");
ANend(file_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
if ((sh5str_type = mkstr(ann_length+1,H5T_STR_SPACEPAD))<0) {
printf("error in making string at FILE lABEL ANNO. \n");
ANend(file_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
if(conv_int_str(i,index_str)== FAIL) {
printf("fail to convert integer into character format.\n");
ANend(file_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
strcpy(anno_labelname,HDF4_FILE_LABEL);
strcat(anno_labelname,"_");
strcat(anno_labelname,index_str);
h5_aid = H5Acreate(h5group,anno_labelname,sh5str_type,
h5_sid,H5P_DEFAULT);
if (h5_aid <0) {
printf("failed to obtain attribute id for");
printf(" File annotation. \n");
ANend(file_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
ret = H5Awrite(h5_aid,sh5str_type,(void *)ann_buf);
if (ret <0) {
printf("failed to obtain attribute.\n ");
ANend(file_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
ret = H5Sclose(h5_sid);
ret = H5Aclose(h5_aid);
free(ann_buf);
ANendaccess(ann_id);
}
for (i = 0; i < n_file_desc; i++) {
ann_id = ANselect(an_id,i,AN_FILE_DESC);
if(ann_id == FAIL) {
printf("error in obtaining annotation id. \n");
ANend(an_id);
return FAIL;
}
ann_length = ANannlen(ann_id);
if(ann_length == FAIL) {
printf("error in obtaining annotation length. \n");
ANend(an_id);
ANendaccess(ann_id);
return FAIL;
}
ann_buf = malloc((size_t)ann_length+1);
if(ann_buf == NULL) {
printf("error in allocating memory. \n");
ANend(an_id);
ANendaccess(ann_id);
return FAIL;
}
h4toh5_ZeroMemory(ann_buf,ann_length+1);
istat = ANreadann(ann_id,ann_buf,ann_length+1);
if(istat == FAIL) {
printf("error reading file information. \n");
ANend(an_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
if ((sh5str1_type = mkstr(ann_length+1,H5T_STR_SPACEPAD))<0) {
printf("error in making string at FILE DESC. \n");
ANend(an_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
if(conv_int_str(i,index_str)==FAIL) {
printf("fail to convert integer into character format.\n");
ANend(an_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
strcpy(anno_descname,HDF4_FILE_DESC);
strcat(anno_descname,"_");
strcat(anno_descname,index_str);
h5_sid = H5Screate(H5S_SCALAR);
if (h5_sid < 0) {
printf("failed to create attribute space for");
printf(" HDF4 FILE ANNOTATION. \n");
ANend(an_id);
ANendaccess(ann_id);
free(ann_buf);
return FAIL;
}
h5_aid = H5Acreate(h5group,anno_descname,sh5str1_type,
h5_sid,H5P_DEFAULT);
if (h5_aid <0) {
printf("failed to obtain attribute id for");
printf(" File annotation. \n");
ANend(an_id);
ANendaccess(ann_id);
H5Sclose(h5_sid);
free(ann_buf);
return FAIL;
}
ret = H5Awrite(h5_aid,sh5str1_type,(void *)ann_buf);
if (ret <0) {
printf("failed to obtain attribute.\n ");
ANend(an_id);
ANendaccess(ann_id);
H5Sclose(h5_sid);
H5Aclose(h5_aid);
free(ann_buf);
return FAIL;
}
ret = H5Sclose(h5_sid);
ret = H5Aclose(h5_aid);
free(ann_buf);
ANendaccess(ann_id);
}
ANend(an_id);
return SUCCEED;
}
/*-------------------------------------------------------------------------
* Function: Annoobj_h4_to_h5
*
* Purpose: translate annotation object into attribute of hdf5 dataset
*
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
file_id: file identifier
obj_ref: object reference
obj_tag: object tag
h5group: hdf5 group
*-------------------------------------------------------------------------
*/
int Annoobj_h4_to_h5(int32 file_id,int32 obj_ref, int32 obj_tag,
hid_t h5group){
int32 an_id;
int32 ann_id;
int32 i;
int32 status;
int32 ann_length;
int32 n_file_label =-1;
int32 n_file_desc =-1;
int32 n_data_label =-1;
int32 n_data_desc =-1;
int num_lab_anno;
int num_des_anno;
int32 istat;
int32* des_anno_list=NULL;
int32* lab_anno_list=NULL;
char* ann_buf;
char* ann_obj_name;
char ann_labelname[30];
char index_str[5];
hid_t h5_sid;
hid_t h5_aid;
hid_t sh5str_type;
hid_t ret;
an_id = ANstart(file_id);
if(an_id == FAIL) {
printf("fail to start annotation interface.\n");
return FAIL;
}
istat = ANfileinfo(an_id,&n_file_label,&n_file_desc,
&n_data_label,&n_data_desc);
if(istat == FAIL ) {
printf("error getting file information.\n");
ANend(an_id);
return FAIL;
}
num_lab_anno = ANnumann(an_id,AN_DATA_LABEL,obj_tag,obj_ref);
num_des_anno = ANnumann(an_id,AN_DATA_DESC,obj_tag,obj_ref);
if (num_lab_anno == FAIL) {
printf("error getting number of annotation data label.\n");
ANend(an_id);
return FAIL;
}
if (num_des_anno == FAIL) {
printf("error getting number of annotation object label.\n");
ANend(an_id);
return FAIL;
}
if(num_lab_anno > 0) {
for(i=0; i<num_lab_anno;i++) {
ann_id = ANselect(an_id,i,AN_DATA_LABEL);
if(ann_id == FAIL) {
printf("error in obtaining annotation id.\n");
ANend(an_id);
return FAIL;
}
ann_length = ANannlen(ann_id);
if(ann_length == FAIL) {
printf("error in getting annotation length. \n");
ANendaccess(ann_id);
ANend(an_id);
return FAIL;
}
ann_buf = malloc((size_t)ann_length+1);
if(ann_buf == NULL) {
printf("error in allocating annotation memory.\n");
ANendaccess(ann_id);
ANend(an_id);
return FAIL;
}
h4toh5_ZeroMemory(ann_buf,(ann_length+1)*sizeof(char));
status = ANreadann(ann_id,ann_buf,ann_length+1);
if(status == FAIL) {
printf("error in reading data.\n");
ANendaccess(ann_id);
ANend(an_id);
free(ann_buf);
return FAIL;
}
status = ANendaccess(ann_id);
h5_sid = H5Screate(H5S_SCALAR);
if (h5_sid < 0) {
printf("failed to create attribute space for");
printf(" HDF4 FILE ANNOTATION. \n");
ANend(an_id);
free(lab_anno_list);
free(ann_buf);
return FAIL;
}
if ((sh5str_type = mkstr(ann_length+1,H5T_STR_SPACEPAD))<0) {
printf("error in making string at OBJ LABEL. \n");
ANend(an_id);
free(lab_anno_list);
free(ann_buf);
return FAIL;
}
if(conv_int_str(i,index_str)== FAIL) {
printf("fail to convert annotation index into character format.\n");
ANend(an_id);
free(lab_anno_list);
free(ann_buf);
return FAIL;
}
/* obtain annotation object name. The name is defined based on object tag
*/
ann_obj_name = trans_tag_name(obj_tag,AN_DATA_LABEL);
if(ann_obj_name != NULL)
strcpy(ann_labelname,ann_obj_name);
strcat(ann_labelname,"_");
strcat(ann_labelname,index_str);
h5_aid = H5Acreate(h5group,ann_labelname,sh5str_type,
h5_sid,H5P_DEFAULT);
if (h5_aid <0) {
printf("failed to obtain attribute id for");
printf(" file annotation. \n");
ANend(an_id);
free(lab_anno_list);
free(ann_buf);
free(ann_obj_name);
return FAIL;
}
ret = H5Awrite(h5_aid,sh5str_type,(void *)ann_buf);
if (ret <0) {
printf("failed to obtain attribute.\n ");
ANend(an_id);
free(lab_anno_list);
free(ann_buf);
free(ann_obj_name);
return FAIL;
}
ret = H5Sclose(h5_sid);
ret = H5Aclose(h5_aid);
free(ann_obj_name);
free(ann_buf);
}
}
if(num_des_anno > 0) {
for (i = 0; i< num_des_anno;i++) {
ann_id = ANselect(an_id,i,AN_DATA_DESC);
if(ann_id == FAIL) {
printf("error in obtaining annotation id.\n");
ANend(an_id);
return FAIL;
}
ann_length = ANannlen(ann_id);
if(ann_length == FAIL) {
printf("error in getting annotation length. \n");
ANendaccess(ann_id);
ANend(an_id);
return FAIL;
}
ann_buf = malloc((size_t)ann_length+1);
if(ann_buf == NULL) {
printf("error in allocating annotation memory.\n");
ANendaccess(ann_id);
ANend(an_id);
return FAIL;
}
h4toh5_ZeroMemory(ann_buf,(ann_length+1)*sizeof(char));
ANreadann(ann_id,ann_buf,ann_length+1);
if ((sh5str_type = mkstr(ann_length+1,H5T_STR_SPACEPAD))<0) {
printf("error in making string at OBJECT DESC. \n");
ANend(an_id);
free(des_anno_list);
free(ann_buf);
return FAIL;
}
if(conv_int_str(i,index_str)== FAIL) {
printf("fail to convert annotation index into character format.\n");
ANend(an_id);
free(ann_buf);
free(des_anno_list);
return FAIL;
}
ann_obj_name = trans_tag_name(obj_tag,AN_DATA_DESC);
if(ann_obj_name == NULL) {
printf("error in obtaining tag name. \n");
ANend(an_id);
free(ann_buf);
free(des_anno_list);
return FAIL;
}
strcpy(ann_labelname,ann_obj_name);
strcat(ann_labelname,"_");
strcat(ann_labelname,index_str);
h5_sid = H5Screate(H5S_SCALAR);
if (h5_sid < 0) {
printf("failed to create attribute space for");
printf(" HDF4 OBJECT ANNOTATION. \n");
ANend(an_id);
free(des_anno_list);
free(ann_buf);
free(ann_obj_name);
return FAIL;
}
h5_aid = H5Acreate(h5group,ann_labelname,sh5str_type,
h5_sid,H5P_DEFAULT);
if (h5_aid <0) {
ANend(an_id);
free(ann_buf);
free(des_anno_list);
free(ann_obj_name);
printf("failed to obtain attribute id for ");
printf("File annotation. \n");
return FAIL;
}
ret = H5Awrite(h5_aid,sh5str_type,(void *)ann_buf);
if (ret <0) {
printf("failed to obtain attribute.\n ");
ANend(an_id);
free(ann_buf);
free(des_anno_list);
free(ann_obj_name);
return FAIL;
}
ret = H5Sclose(h5_sid);
ret = H5Aclose(h5_aid);
free(ann_obj_name);
free(ann_buf);
}
}
ANend(an_id);
return SUCCEED;
}
/*-------------------------------------------------------------------------
* Function: trans_tag_name
*
* Purpose: in annotation routine,
translate annotation object tag into corresponding HDF5 object
name.
*
* Return: NULL if failed, HDF5 object name if successful.
*
* In :
obj_tag: hdf4 object tag
annot_type: hdf4 annotation type
*-------------------------------------------------------------------------
*/
char* trans_tag_name(int32 obj_tag,ann_type annot_type){
char* obj_name;
obj_name = malloc(strlen(HDF4_VGROUP_LABEL)+1);
if(obj_name == NULL) {
printf("error in obtaining tag name. \n");
return NULL;
}
if (obj_tag == DFTAG_NDG || obj_tag == DFTAG_SDG || obj_tag == DFTAG_SD) {
if(annot_type == AN_DATA_LABEL)
strcpy(obj_name,HDF4_SDS_LABEL);
else if(annot_type == AN_DATA_DESC)
strcpy(obj_name,HDF4_SDS_DESC);
else
return NULL;
}
else if(obj_tag == DFTAG_RIG || obj_tag == DFTAG_RI || obj_tag == DFTAG_RI8)
{
if(annot_type == AN_DATA_LABEL)
strcpy(obj_name,HDF4_IMAGE_LABEL);
else if(annot_type == AN_DATA_DESC)
strcpy(obj_name,HDF4_IMAGE_DESC);
else
return NULL;
}
else if(obj_tag == DFTAG_VG) {
if(annot_type == AN_DATA_LABEL)
strcpy(obj_name,HDF4_VGROUP_LABEL);
else if(annot_type == AN_DATA_DESC)
strcpy(obj_name,HDF4_VGROUP_DESC);
else
return NULL;
}
else if(obj_tag == DFTAG_VS || obj_tag == DFTAG_VH) {
if(annot_type == AN_DATA_LABEL)
strcpy(obj_name,HDF4_VDATA_LABEL);
else if(annot_type == AN_DATA_DESC)
strcpy(obj_name,HDF4_VDATA_DESC);
else
return NULL;
}
else if(obj_tag == DFTAG_LUT) {
if(annot_type == AN_DATA_LABEL)
strcpy(obj_name,HDF4_PAL_LABEL);
else if(annot_type == AN_DATA_DESC)
strcpy(obj_name,HDF4_PAL_DESC);
else
return NULL;
}
return obj_name;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,112 +0,0 @@
/*-------------------------------------------------------------------------
*
* 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
including declarations of subroutines of all .c files excluding h4toh5util.c.
Author: Kent Yang(ymuqun@ncsa.uiuc.edu)
*****************************************************************************/
#ifndef H4TOH5MAIN_H
#define H4TOH5MAIN_H
#include "hdf.h"
#include "mfhdf.h"
#include "hfile.h"
#include "hdf5.h"
#include "h4toh5util.h"
#include <fcntl.h>
#include <errno.h>
#endif
/* For windows support.*/
#if WIN32
typedef unsigned int mode_t;
#endif
#ifndef S_ISDIR
#define S_ISDIR(mode) (((mode)&0xF000) == S_IFDIR)
#endif
/* subroutines to check initial settings and inputting parameters.
Adapted from h5toh4 tools and used for h4toh5main.c */
void PrintOptions_h4toh5(void);
int test_file(char *filename,int oflag,mode_t mode);
int test_dir(char *);
char *BuildFilename(char *filename, char *ext);
/* subroutines for h4toh5main.c */
int gen_h4toh5(char*,char*,int);
int h4toh5(char*,char*,int);
int get_numof_hdf4obj(char*,int32);
int set_hashtables(void);
int set_helpgroups(hid_t,hid_t*,hid_t*);
int h4toh5lonevds(int32,hid_t,int);
int h4toh5lonevgs(int32,int32,hid_t,hid_t,hid_t,int);
int h4toh5vgrings(int32,int32,hid_t,hid_t,hid_t,int);
int h4toh5unvisitedimages(int32,hid_t,hid_t,int);
int h4toh5unvisitedsds(int32,int32,hid_t,hid_t,int);
void free_allhashmemory(void);
/*subroutines for h4toh5vgroup.c*/
int Vgroup_h4_to_h5(int32,int32,int32,hid_t,hid_t,hid_t,int);
int convert_vgroup(int32,int32, int32,char* ,hid_t,hid_t,hid_t,int);
int convert_vdata(int32,int32,char*,hid_t,int);
int convert_sds(int32,int32,int32,char*,hid_t,hid_t,int);
int convert_image(int32,int32,char*,hid_t,hid_t,int);
/*subroutines for h4toh5vdata.c*/
int Vdata_h4_to_h5(int32,int32,hid_t,int);
int vdata_transattrs(int32,hid_t,int,int,char*);
int gen_h5comptype(int32,int32,size_t *,size_t*,hid_t*,hid_t*,hid_t,hid_t);
/* subroutines for h4toh5sds.c*/
int Sds_h4_to_h5(int32,int32,hid_t,hid_t,int);
int sds_transattrs(int32, hid_t,int,int);
int sdsdim_to_h5dataset(int32,int32,hid_t,hid_t,int32);
int convert_sdsfillvalue(int32,int32,hid_t,hid_t,int);
uint16 get_SDref(int32,uint16,int32);
int convert_zerosdsdsunlimit(int32,int32,hid_t,hid_t,int);
/*subroutines for h4toh5image.c*/
int Image_h4_to_h5(int32,int32,hid_t,hid_t,int);
int gr_tranattrs(int32, hid_t,int,int);
int gr_palette(int32,int32,hid_t,hid_t,int);
int create_pal_objref(hid_t ,hid_t ,char *);
uint16 get_RIref(int32,uint16,int32,uint16*);
/*subroutines for h4toh5anno.c*/
char* trans_tag_name(int32,ann_type);
int Annofil_h4_to_h5(int32,hid_t);
int Annoobj_h4_to_h5(int32,int32,int32,hid_t);
/*subroutines for h4toh5pal.c*/
int Palette_h4_to_h5(int32,int32 ,hid_t,char *,int);

View File

@ -1,207 +0,0 @@
/*-------------------------------------------------------------------------
*
* 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 palette object into a hdf5 dataset.
Author: Kent Yang(ymuqun@ncsa.uiuc.edu)
*****************************************************************************/
#include "h4toh5main.h"
/*-------------------------------------------------------------------------
* Function: Palette_h4_to_h5
*
* Purpose: translate palette into hdf5 dataset
*
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
file_id: file id
pal_id: PALETTE identifier
h5_g: hdf5 group id
pal_name: path name of the group where all palettes are in
*-------------------------------------------------------------------------
*/
int Palette_h4_to_h5(int32 file_id,int32 pal_id,hid_t h5g,char*pal_name,int h4_attr) {
int32 ncomp;
int32 pal_ref;
int32 pal_type;
int32 interlace_mode;
int32 num_entries;
void* pal_data;
size_t h4memsize;
size_t h4size;
char palette_label[MAX_PAL_NAME];
char palette_class[MAX_PAL_NAME];
char palette_type[MAX_PAL_NAME];
char palette_colormodel[MAX_PAL_NAME];
hid_t h5memtype;
hid_t h5type;
hid_t h5d_sid;
hid_t h5dset;
hsize_t h5dims[2];
pal_ref = GRluttoref(pal_id);
if(pal_ref <0) {
printf("error in obtaining palette.\n");
return FAIL;
}
/* no palette, just return. */
if(pal_ref == 0) return SUCCEED;
if(GRgetlutinfo(pal_id,&ncomp,&pal_type,&interlace_mode,&num_entries)==FAIL) {
printf("error in getting palette information.\n");
return FAIL;
}
if(h4type_to_h5type(pal_type,&h5memtype,&h4memsize,&h4size,&h5type)== FAIL) {
fprintf(stderr,"failed to translate image datatype. \n");
return FAIL;
}
/* according to mapping document, data type for palette will always be
uint8. */
if (h5type == H5T_STRING) {
if(h5string_to_int(pal_type,&h5memtype,h4memsize,&h5type)==FAIL) {
fprintf(stderr,"failed to translate H5T_STRING to int8.");
return FAIL;
}
}
h5dims[0] = num_entries;
h5dims[1] = ncomp;
pal_data = malloc(h4memsize*ncomp*num_entries);
if (pal_data == NULL) {
printf("error in allocating memory for palette data.\n");
return FAIL;
}
if (GRreadlut(pal_id,(VOIDP)pal_data)==FAIL) {
printf("error in reading palette data. \n");
free(pal_data);
return FAIL;
}
h5d_sid = H5Screate_simple(2,h5dims,NULL);
if (h5d_sid <0) {
printf("error in creating space.\n");
free(pal_data);
return FAIL;
}
h5dset = H5Dcreate(h5g,pal_name,h5type,h5d_sid,H5P_DEFAULT);
if (h5dset < 0) {
printf("error in creating dataset. \n");
free(pal_data);
H5Sclose(h5d_sid);
return FAIL;
}
if (H5Dwrite(h5dset,h5memtype,h5d_sid,h5d_sid,H5P_DEFAULT,
(void *)pal_data)<0) {
fprintf(stdout,"error writing data for palette data\n");
free(pal_data);
H5Sclose(h5d_sid);
H5Dclose(h5dset);
return FAIL;
}
free(pal_data);
strcpy(palette_label,PALABEL);
strcpy(palette_class,PALETTE);
strcpy(palette_type,PAL_TYPE);
strcpy(palette_colormodel,HDF5_RGB);
/* convert palette annotation into attribute of palette dataset.
Since there are no routines to find the exact tag of palette object,
we will check three possible object tags of palette objects, that is:
DFTAG_LUT. If the object tag of palette object is
falling out of this scope, we will not convert annotations into
hdf5 attributes; it is user's responsibility to make sure that object tags
for palette objects are DFTAG_LUT.*/
if(Annoobj_h4_to_h5(file_id,pal_ref,DFTAG_LUT,h5dset)== FAIL){
printf("failed to convert palette annotation into hdf5 attribute.\n");
H5Sclose(h5d_sid);
H5Dclose(h5dset);
return FAIL;
}
if(h4_attr!=0){
if(h4_transpredattrs(h5dset,HDF4_OBJECT_TYPE,palette_label)==FAIL) {
printf("unable to transfer palette label to HDF4 OBJECT TYPE.\n");
H5Sclose(h5d_sid);
H5Dclose(h5dset);
return FAIL;
}
}
if(h4_transpredattrs(h5dset,HDF4_PALETTE_CLASS,palette_class)==FAIL){
printf("unable to transfer palette class to HDF4 PALETTE CLASS.\n");
H5Sclose(h5d_sid);
H5Dclose(h5dset);
return FAIL;
}
if(h4_transpredattrs(h5dset,HDF4_PALETTE_TYPE,palette_type)==FAIL){
printf("unable to transfer palette type to HDF4 PALETTE TYPE.\n");
H5Sclose(h5d_sid);
H5Dclose(h5dset);
return FAIL;
}
if(h4_transpredattrs(h5dset,PAL_COLORMODEL,palette_colormodel)==FAIL){
printf("unable to transfer palette type to HDF4 PALETTE TYPE.\n");
H5Sclose(h5d_sid);
H5Dclose(h5dset);
return FAIL;
}
if(h4_attr !=0){
if(h4_transnumattr(h5dset,HDF4_REF_NUM,pal_ref)==FAIL) {
printf("unable to transfer palette reference number to HDF4 REF. NUM.\n");
H5Sclose(h5d_sid);
H5Dclose(h5dset);
return FAIL;
}
}
return SUCCEED;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +0,0 @@
#define MEMOPT 0
#define SLABSIZE 64

File diff suppressed because it is too large Load Diff

View File

@ -1,252 +0,0 @@
/*-------------------------------------------------------------------------
*
* 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
Including declarations of global variables,global hashtables,constant
and utility subroutines of h4toh5util.c
Author: Kent Yang(ymuqun@ncsa.uiuc.edu)
*****************************************************************************/
#ifndef UTILITY_H
#define UTILITY_H
#include "hdf5.h"
#include "hdf.h"
/**********************************************/
/*************** section I *******************/
/*This section of the file describes reserved
name and global parameters used in h4-h5
converter.*/
/*********************************************/
/* 0. if "/" is found in hdf4 object name, we will use another
character "_" to replace it, since "/" is a reserved symbol for hdf5. */
#define ORI_SLASH '/'
#define CHA_SLASH '_'
/* 1. character string used for default attribute name. */
#define ATTR "ATTR"
/* 2. Predefined HDF5 Attribute name for HDF4 file */
#define HDF4_OBJECT_NAME "HDF4_OBJECT_NAME"
#define HDF4_OBJECT_TYPE "HDF4_OBJECT_TYPE"
#define HDF4_REF_NUM "HDF4_REF_NUM"
#define HDF4_VGROUP_CLASS "HDF4_VGROUP_CLASS"
#define HDF4_IMAGE_CLASS "CLASS"
#define HDF4_IMAGE_SUBCLASS "IMAGE_SUBCLASS"
#define HDF4_PALETTE_CLASS "CLASS"
#define HDF4_PALETTE_TYPE "PAL_TYPE"
#define PAL_TYPE "STANDARD8"
#define PAL_COLORMODEL "PAL_COLORMODEL"
#define HDF5_RGB "RGB"
/* 3. reserved name for HDF5 object name when meeting with name clashing. */
#define HDF4_VGROUP "HDF4_VGROUP"
#define HDF4_PALETTE "HDF4_PALETTE"
#define HDF4_SDS "HDF4_SDS"
#define HDF4_VDATA "HDF4_VDATA"
#define HDF4_IMAGE "HDF4_IMAGE"
#define HDF4_DIMSCALE "HDF4_DIMSCALE"
/* 4. global palette and dimension_list name. */
#define HDF4_IMAGE_PALETTE "HDF4_IMAGE_PALETTE"
#define HDF4_DIMENSION_LIST "HDF4_DIMENSION_LIST"
#define PALETTE "PALETTE"
#define DIMSCALE "DIMSCALE"
/* 5. define affix GLO for sds and image file attributes. these file attributes
will be put under root group. */
#define GLOSDS "GLOSDS"
#define GLOIMAGE "GLOIMAGE"
/* 6. define HDF object label.*/
#define SDSLABEL "SDS"
#define VDATALABEL "Vdata"
#define VDATTRLAB "Vdata attribute"
#define VGROUPLABEL "Vgroup"
#define GRLABEL "GR"
#define RAST8LABEL "raster8"
#define RAST24LABEL "raster24"
#define PALABEL "palette"
#define LABEL_LENG 20
/* 7. define "IMAGE" CLASS required by image spec. */
#define IM_CLASS "IMAGE"
/*7.5. define interlace mode. */
#define INTERLACE_MODE "INTERLACE_MODE"
#define PIXEL_INTERLACE "INTERLACE_PIXEL"
#define LINE_INTERLACE "INTERLACE_LINE"
#define PLANE_INTERLACE "INTERLACE_PLANE"
/* 8. reserved group name for HDF4 dimensional scale and palette. */
#define HDF4_DIMG "/HDF4_DIMGROUP"
#define HDF4_PALG "/HDF4_PALGROUP"
/* 9. reserved name for hdf4 file label,file description, object label,
object description. */
#define HDF4_FILE_LABEL "HDF4_FILE_LABEL"
#define HDF4_FILE_DESC "HDF4_FILE_DESCRIPTION"
#define HDF4_OBJECT_LABEL "HDF4_OBJECT_LABEL"
#define HDF4_OBJECT_DESC "HDF4_OBJECT_DESCRIPTION"
#define HDF4_SDS_LABEL "HDF4_SDS_LABEL"
#define HDF4_SDS_DESC "HDF4_SDS_DESC"
#define HDF4_IMAGE_LABEL "HDF4_IMAGE_LABEL"
#define HDF4_IMAGE_DESC "HDF4_IMAGE_DESC"
#define HDF4_VDATA_LABEL "HDF4_VDATA_LABEL"
#define HDF4_VDATA_DESC "HDF4_VDATA_DESC"
#define HDF4_VGROUP_LABEL "HDF4_VGROUP_LABEL"
#define HDF4_VGROUP_DESC "HDF4_VGROUP_DESC"
#define HDF4_PAL_LABEL "HDF4_PAL_LABEL"
#define HDF4_PAL_DESC "HDF4_PAL_DESC"
#define HDF4_IMAGE_INDEXED "HDF4_IMAGE_INDEXED"
/*10. palette and dimensional scale hash size and the
maximum length of object reference number in string format.
global variables of vgroup, vdata, sds, image and total number of
the object, number of global sds attributes and GR attributes.*/
#define PAL_HASHSIZE 64
#define DIM_HASHSIZE 64
#define VG_DEFHASHSIZE 64
#define VD_DEFHASHSIZE 64
#define MAXREF_LENGTH 5
/*considering the string size of HDF4_DIMGROUP. we add this into 276.*/
#define MAX_DIM_NAME 276
#define MAX_PAL_NAME 32
/*11. adding a specified vdata class name to deal with the situation when
independent vdata is hdf chunking table _HDF_CHK_TBL_CLASS, if it becomes
public constant for hdf lib, this constant can be released.*/
#define _HDF_CHK_TBL_CLASS "_HDF_CHK_TBL_"
/*11. the compression level currently is set to the maximum level.*/
#define GZIP_COMLEVEL 9
/*12. fake sds dimension name*/
#define fakeDim "fakeDim"
/*13. define a default first dimension chunking size when the
current unlimited dimensional size of SDS is set to 0. */
#define HDF4_CHUNKSIZE 20
extern int32 estnum_vg;
extern int32 estnum_vd;
extern int32 num_sds;
extern int32 num_images;
extern int num_objects;
extern int32 num_glsdsattrs;
extern int32 num_glgrattrs;
/**********************************************/
/*************** section II *******************/
/*This section describes hash tables and their
functions used in h4-h5 converter.*/
/*********************************************/
/*define two kinds of hashtables.
1. struct table uses object reference as the key to handle whether this
object is visited or not.
2. struct name_table uses object name as the key to handle name clashings and
dimensional scale dataset.
*/
struct table {
int ref;
struct table *next;
char *name;
};
struct name_table {
char *name;
struct name_table *next;
};
extern struct table* sds_hashtab;
extern struct table* gr_hashtab;
extern struct table* vg_hashtab;
extern struct table* vd_hashtab;
extern struct table* pal_hashtab;
extern struct name_table* name_hashtab;
extern struct name_table* dim_hashtab;
/* routine for zeroing out the memory. */
void h4toh5_ZeroMemory(void*s,size_t n);
/* look-up table, object reference is the key.*/
int lookup(int,int,struct table*);
/*look-up table, key is name. */
int hash_fun(char*name,int size);
int lookup_name(char*, int,struct name_table*);
/* routines that initialize the tables and name tables.*/
int init_tab(int,struct table*);
int init_nametab(int,struct name_table*);
/* get name and set name for table. */
char* get_name(int,int,struct table *,int*);
int set_name(int,int,struct table *,char*);
/* free table routines. */
int freetable(int,struct table *);
int freenametable(int, struct name_table*);
void freehashmemory(void);
/**********************************************/
/*************** section III *******************/
/*This section describes other common routines and their
functions used in h4-h5 converter.*/
/*********************************************/
/* this routine defines the conversion of data type from h4 to h5. */
herr_t h4type_to_h5type(const int32 h4type, hid_t* h5memtype,
size_t* h4memsize, size_t* h4size, hid_t *h5type);
/* routines for translating predefined hdf4 attributes into hdf5 attributes*/
int h4_transpredattrs(hid_t ,const char *,char*data);
int h4_transnumattr(hid_t h5g,const char *,uint16 group_ref);
int vg_transattrs(int32,hid_t,int);
/*string and int conversion routines.*/
hid_t mkstr(int size, H5T_str_t pad);
herr_t h5string_to_int(const int32, hid_t*,const size_t,hid_t* );
int conv_int_str(uint16, char*);
/* these routines were utility functions for other routines at h4toh5util.c */
char* trans_obj_name(int32,int32);
char* get_obj_aboname(char*,char*,char*,const char*);
char* make_objname_no(char*,char*,const char*);
char* make_objname_yes(char*,char*);
char* correct_name(char*);
/* routines for handling memory allocation of huge SDS dataset */
int get_numslab_perD(int32,int,int);
int h5ceil(int32,int32);
int pow(int,int);
#endif

View File

@ -1,858 +0,0 @@
/*-------------------------------------------------------------------------
*
* 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"
#include <assert.h>
/*-------------------------------------------------------------------------
* Function: Vdata_h4_to_h5
*
* Purpose: translate Vdata object into hdf5 dataset
*
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
vdata_id: RI identifier
group_id: hdf5 group id
Out:
Modification:
*-------------------------------------------------------------------------
*/
int Vdata_h4_to_h5(int32 file_id,int32 vdata_id, hid_t group_id,int h4_attr) {
/* define variables for hdf4. */
int32 istat;
int32 n_records;
int32 vdata_ref;
int32 vdata_tag;
int32 interlace_mode;
int32 vdata_size;
int32 vdatamem_size;
int32 field_index;
int32 fieldorder;
int32 fieldtype;
int i;
int32 nfields;
int num_vd_attrs;
int num_vd_field_attrs;
VOIDP vd_data;
char vdlabel[LABEL_LENG];
char vdata_name[MAX_NC_NAME];
char fieldname[MAX_NC_NAME];
char vdata_class[VSNAMELENMAX];
char field_name_list[VSFIELDMAX*FIELDNAMELENMAX];
/* define varibles for hdf5. */
hid_t h5d_sid;
hid_t h5dset;
hid_t h5_ctype;
hid_t h5_cmemtype;
hid_t create_plist;
hid_t* h5memtype = NULL;
hid_t* h5type = NULL;
size_t* h4memsize = NULL;
size_t* h4size = NULL;
hsize_t h5_vddims[1];
hsize_t h5_maxvddims[1];
hsize_t h5_chunkdims[1];
char* h5cvdata_name;
int check_vdname;
/* Zeroing out memory for vdlabel,vdata_class,vdata_name */
h4toh5_ZeroMemory(vdata_name,MAX_NC_NAME);
h4toh5_ZeroMemory(fieldname,MAX_NC_NAME);
h4toh5_ZeroMemory(vdata_class,VSNAMELENMAX);
h4toh5_ZeroMemory(field_name_list,VSFIELDMAX*FIELDNAMELENMAX);
h4toh5_ZeroMemory(vdlabel,10);
/* get absolute path of vdata name. */
vdata_ref = VSQueryref(vdata_id);
if (vdata_ref == FAIL) {
printf("error in getting reference number. \n");
return FAIL;
}
vdata_tag = VSQuerytag(vdata_id);
if (vdata_tag == FAIL) {
printf("error in getting object tag number. \n");
return FAIL;
}
/* get the class name */
if(VSgetclass(vdata_id,vdata_class) == FAIL) {
printf("error in obtaining class name. \n");
return FAIL;
}
/* get number of record,field_name,Size of a record and
Name of the vdata*/
if(VSQueryvsize(vdata_id,&vdata_size)==FAIL) {
printf("error in getting size of vdata. \n");
return FAIL;
}
if(vdata_size == 0) {/* empty vdata set. */
return SUCCEED;
}
/* obtain number of records, field name list, vdata name. */
if(VSinquire(vdata_id,&n_records,&interlace_mode,
field_name_list,&vdata_size,vdata_name) == FAIL) {
printf("error in inquiring vdata. \n");
return FAIL;
}
vdatamem_size = 0;
vdata_size = 0;
nfields = VFnfields(vdata_id);
if (nfields == FAIL) {
printf("error in obtaining number of vdata fields. \n");
return FAIL;
}
assert(nfields>0);
h5memtype = calloc((size_t)nfields,sizeof(hid_t));
h5type = calloc((size_t)nfields,sizeof(hid_t));
h4memsize = calloc((size_t)nfields,sizeof(size_t));
h4size = calloc((size_t)nfields,sizeof(size_t));
for (i=0;i<nfields;i++) {
/* obtain field type. */
fieldtype = VFfieldtype(vdata_id,i);
if(fieldtype == FAIL){
printf("error in obtaining field type. \n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
return FAIL;
}
/* obtain field order.*/
fieldorder = VFfieldorder(vdata_id,i);
/* printf("fieldorder %d\n",fieldorder);*/
if(fieldorder == FAIL){
printf("error in obtaining field order. \n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
return FAIL;
}
/* datatype conversion from hdf4 to hdf5.
the corresponding memory data type is also converted.*/
if(h4type_to_h5type(fieldtype,&h5memtype[i],&h4memsize[i],
&h4size[i],&h5type[i])== FAIL){
printf("error in doing datatype conversion at vdata routine. \n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
return FAIL;
}
vdatamem_size +=fieldorder*h4memsize[i];
vdata_size +=fieldorder*h4size[i];
}
vd_data = malloc((size_t)(vdatamem_size*n_records));
istat = VSsetfields(vdata_id,field_name_list);
if(istat == FAIL) {
printf("error setting fields of vdata.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
istat = VSread(vdata_id,(uint8*)vd_data,n_records,FULL_INTERLACE);
if(istat == FAIL) {
printf("error in obtaining vdata. \n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
for (i=0;i<nfields;i++) {
/* obtain field order.*/
fieldorder = VFfieldorder(vdata_id,i);
if(fieldorder == FAIL){
printf("error in obtaining field order. \n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
return FAIL;
}
}
/* create hdf5 compound datatype for both memory and file.*/
h5_ctype = H5Tcreate(H5T_COMPOUND, (size_t)vdata_size);
h5_cmemtype = H5Tcreate(H5T_COMPOUND,(size_t)vdatamem_size);
if(gen_h5comptype(vdata_id,nfields,h4size,h4memsize,h5type,h5memtype,
h5_ctype,h5_cmemtype)==FAIL){
printf("error in generating h5 compound data type.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
h5_vddims[0] = n_records;
h5_maxvddims[0] = H5S_UNLIMITED;
h5d_sid = H5Screate_simple(1,h5_vddims,h5_maxvddims);
if(h5d_sid <0){
printf("error in obtaining space id.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
/* choose a number that is not returned from the func.*/
check_vdname = -3;
/* obtain hdf5 vdata name. */
h5cvdata_name = get_name(vdata_ref,estnum_vd,vd_hashtab,&check_vdname);
if (h5cvdata_name == NULL && check_vdname == 0 ) {
printf("error,cannot find vdata \n");
return FAIL;
}
if (h5cvdata_name == NULL && check_vdname == -1) {
printf("error,group name is not defined.\n");
return FAIL;
}
if (h5cvdata_name == NULL && check_vdname == -2 ) {
printf("cannot allocate memory for vdata.\n");
return FAIL;
}
h5_chunkdims[0] = h5_vddims[0];
create_plist = H5Pcreate(H5P_DATASET_CREATE);
if (H5Pset_chunk(create_plist,1,h5_chunkdims)<0){
printf("failed to set up chunking information for ");
printf("property list.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
free(h5cvdata_name);
H5Pclose(create_plist);
return FAIL;
}
h5dset = H5Dcreate(group_id,h5cvdata_name,h5_ctype,h5d_sid,create_plist);
if(h5dset <0) {
printf("error in obtaining dataset.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
free(h5cvdata_name);
return FAIL;
}
free(h5cvdata_name);
if(H5Dwrite(h5dset,h5_cmemtype,H5S_ALL,H5S_ALL,H5P_DEFAULT,vd_data)<0){
printf("error in writing dataset converted from vdata.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
/* handle vdata attributes and vdata field attributes. */
num_vd_attrs = VSfnattrs(vdata_id,_HDF_VDATA);
if (num_vd_attrs == FAIL) {
printf("error in obtaining attributes of vdata.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
/* when field_index = -1, only transfer vdata attribute.*/
field_index = -1;
if(vdata_transattrs(vdata_id,h5dset,num_vd_attrs,field_index,NULL)==FAIL){
printf("error in translating vdata attibutes.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
for (i =0;i< nfields;i++) {
if(VFfieldname(vdata_id,i)== NULL) {
printf("error in obtaining field name. \n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
strcpy(fieldname,VFfieldname(vdata_id,i));
num_vd_field_attrs = VSfnattrs(vdata_id,i);
if(num_vd_field_attrs == FAIL){
printf("error in number of vd field attribute \n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
if(vdata_transattrs(vdata_id,h5dset,num_vd_field_attrs,i,fieldname)
==FAIL){
printf("error in transfering vdata attributes.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
}
/* converting annotations of vdata into corresponding hdf5 attribute.*/
if( Annoobj_h4_to_h5(file_id,vdata_ref,vdata_tag,h5dset)== FAIL){
printf("fail to convert HDF4 VDATA annotation into hdf5 attributes.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
/* converting predefined attributes. */
if(h4_attr != 0) {
istat = VSisattr(vdata_id);
if (istat == FAIL) {
printf("error in checking vdata attribute. \n");
VSdetach(vdata_id);
return FAIL;
}
if(istat) strcpy(vdlabel,VDATTRLAB);
else strcpy(vdlabel,VDATALABEL);
if(h4_transpredattrs(h5dset,HDF4_OBJECT_TYPE,vdlabel)==FAIL){
printf("error in transfering vdata attributes.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
if(vdata_name[0] != '\0') {
if(h4_transpredattrs(h5dset,HDF4_OBJECT_NAME,vdata_name)==FAIL){
printf("error in transfering vdata attributes.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
}
if(h4_transnumattr(h5dset,HDF4_REF_NUM,(uint16)vdata_ref)==FAIL){
printf("error in transfering vdata attributes.\n");
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return FAIL;
}
}
H5Sclose(h5d_sid);
H5Dclose(h5dset);
VSdetach(vdata_id);
free(h5memtype);
free(h5type);
free(h4memsize);
free(h4size);
free(vd_data);
return SUCCEED;
}
/*-------------------------------------------------------------------------
* Function: vdata_transattrs
*
* Purpose: translate Vdata attributes into attributes of the
corresponding hdf5 dataset
*
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
vdata_id: vdata identifier
h5dset: hdf5 dataset
snum_vdattrs: number of vd attributes
field_index: index of vdata fields
attr_name: vdata(or vdata field) attribute name
Out:
Modifications:
*-------------------------------------------------------------------------
*/
int vdata_transattrs(int32 vdata_id,hid_t h5dset,int snum_vdattrs,
int field_index,char* attr_name){
char svdattr_name[2*MAX_NC_NAME];
char* svdrepattr_name;
char refstr[MAXREF_LENGTH];
int32 count_svdadata;
int32 svd_atype;
size_t sh4_amemsize;
size_t sh4_asize;
hid_t sh5a_sid;
hid_t sh5a_id;
hid_t sh5_atype;
hid_t sh5_amemtype;
hid_t sh5str_type;
hid_t sh5str_memtype;
hsize_t sh5dims[1];
void* svd_adata;
herr_t sret;
int i;
/* zeroing out memory for svdattr_name and refstr */
h4toh5_ZeroMemory(svdattr_name,2*MAX_NC_NAME);
h4toh5_ZeroMemory(refstr,MAXREF_LENGTH);
/* separate vdata attribute from vdata field attributes. */
if (field_index < -1) {
printf("error: check_field should be either -1(vdata) or ");
printf(">=0(vdata field).\n");
return FAIL;
}
for (i = 0;i < snum_vdattrs; i++) {
/* if the field_index is 0, no field attribute exists, only
VDATA attributes are converted.*/
if (VSattrinfo(vdata_id,field_index,i,svdattr_name,&svd_atype,
&count_svdadata,NULL)== FAIL){
printf("unable to obtain attribute information. \n");
return FAIL;
}
if(svdattr_name[0] == '\0') {
svdrepattr_name = trans_obj_name(DFTAG_VG,i);
strcpy(svdattr_name,svdrepattr_name);
free(svdrepattr_name);
}
if (field_index == -1);
else if (field_index != -1 && attr_name != NULL) {
strcat(svdattr_name,":");
strcat(svdattr_name,attr_name);
}
else {
strcat(svdattr_name,":");
strcat(svdattr_name,"HDF4_VDATA_ATTR_");
if(conv_int_str((uint16)field_index,refstr)==FAIL) {
printf("error in converting vdata field index to string.\n");
return FAIL;
}
strcat(svdattr_name,refstr);
}
/* converting attribute data type into the corresponding hdf5 data type */
if(h4type_to_h5type(svd_atype,&sh5_amemtype,&sh4_amemsize,
&sh4_asize,&sh5_atype)==FAIL){
printf("fail to translate vdata attribute datatype from H4 to H5.\n");
return FAIL;
}
svd_adata = malloc(sh4_amemsize * count_svdadata);
if(svd_adata == NULL) {
printf("fail to allocate memory for vdata attribute data.\n");
return FAIL;
}
if(VSgetattr(vdata_id,field_index,i,(VOIDP)svd_adata)==FAIL){
printf("error in getting attributes of vdata. \n");
free(svd_adata);
return FAIL;
}
/* now do attribute-transferring:
1. deal with string data type
2. set attribute space
3. get attribute name */
if (sh5_atype == H5T_STRING) {
if ((sh5str_type = mkstr(count_svdadata,
H5T_STR_SPACEPAD))<0) {
printf("error in making string for vdata attribute. \n");
free(svd_adata);
return FAIL;
}
if ((sh5str_memtype = mkstr((int)(count_svdadata*sh4_amemsize),
H5T_STR_SPACEPAD))<0) {
printf("error in making memory string for vdata attribute. \n");
free(svd_adata);
return FAIL;
}
sh5a_sid = H5Screate(H5S_SCALAR);
if (sh5a_sid < 0) {
printf("failed to create attribute space for ");
printf("HDF4_OBJECT_TYPE VDATA. \n");
free(svd_adata);
return FAIL;
}
sh5a_id = H5Acreate(h5dset,svdattr_name,sh5str_type,
sh5a_sid,H5P_DEFAULT);
if (sh5a_id <0) {
printf("failed to obtain attribute id for");
printf(" HDF4_OBJECT_TYPE VDATA. \n");
H5Sclose(sh5a_sid);
free(svd_adata);
return FAIL;
}
sret = H5Awrite(sh5a_id,sh5str_memtype,(void *)svd_adata);
if (sret <0) {
printf("fail to write vdata attr into hdf5 dataset attr\n ");
H5Sclose(sh5a_sid);
H5Aclose(sh5a_id);
free(svd_adata);
return FAIL;
}
free(svd_adata);
sret = H5Sclose(sh5a_sid);
sret = H5Aclose(sh5a_id);
}
else {
if(count_svdadata == 1) {
sh5a_sid = H5Screate(H5S_SCALAR);
if (sh5a_sid < 0) {
printf("failed to create scalar space id for hdf5 attribute ");
printf("of dataset converted from attribute of VDATA.\n");
free(svd_adata);
return FAIL;
}
}
else {
sh5dims[0] = count_svdadata;
sh5a_sid = H5Screate_simple(1,sh5dims,NULL);
if (sh5a_sid < 0) {
printf("failed to create simple space id for hdf5 attribute ");
printf("of dataset converted from attribute of VDATA.\n");
free(svd_adata);
return FAIL;
}
}
sh5a_id = H5Acreate(h5dset,svdattr_name,sh5_atype,
sh5a_sid,H5P_DEFAULT);
if(sh5a_id <0) {
printf("failed to create attribute id for hdf5 attribute ");
printf("of dataset converted from attribute of VDATA.\n");
H5Sclose(sh5a_sid);
free(svd_adata);
return FAIL;
}
sret = H5Awrite(sh5a_id,sh5_amemtype,(void *)svd_adata);
if(sret <0) {
printf("failed to write attribute data for hdf5 attribute ");
printf("of dataset converted from attribute of VDATA.\n");
H5Sclose(sh5a_sid);
H5Aclose(sh5a_id);
free(svd_adata);
return FAIL;
}
sret = H5Aclose(sh5a_id);
sret = H5Sclose(sh5a_sid);
free(svd_adata);
}
}
return SUCCEED;
}
/*-------------------------------------------------------------------------
* Function: gen_h5comptype
*
* Purpose: generate hdf5 compound data type
*
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
vdata_id: vdata identifier
nfields: number of fields
sh4size: pointer to datatype size in memory
sh4memsize: pointer to datatype size in memory
sh5type: pointer to hdf5 datatype
sh5memtype: pointer to actual hdf5 datatype in memory
h5_ctype: hdf5 compound datatype
h5_cmemtype: hdf5 compound datatype in memory
Out:
Modifications:
*-------------------------------------------------------------------------
*/
int gen_h5comptype(int32 vdata_id,int32 nfields,
size_t* sh4size,size_t* sh4memsize,
hid_t* sh5type,hid_t* sh5memtype,
hid_t h5_ctype,hid_t h5_cmemtype) {
char* fieldname;
int32 fieldorder;
size_t fil_offset;
size_t mem_offset;
hsize_t fielddim[1];
hid_t h5str_type;
int check_ifstr;/* flag to check if the h5 type is string.*/
int i;
check_ifstr = 0;
fil_offset = 0;
mem_offset = 0;
for (i =0;i< nfields;i++) {
fieldname = NULL;
fieldorder = VFfieldorder(vdata_id,i);
if(fieldorder == FAIL){
printf("error in obtaining fieldorder.\n");
return FAIL;
}
fieldname = VFfieldname(vdata_id,i);
if(fieldname == NULL){
printf("fail to obtain Vdata field name. \n");
return FAIL;
}
/* when vdata is a character array, we will write the whole
array as one hdf5 type string. */
if(sh5type[i] == H5T_STRING) {
if ((h5str_type = mkstr((int)(sh4size[i]*fieldorder),H5T_STR_SPACEPAD))<0) {
printf("error in making string of hdf5 string. \n");
return FAIL;
}
sh5type[i] = h5str_type;
check_ifstr = 1;
}
if (sh5memtype[i] == H5T_STRING) {
if((h5str_type = mkstr((int)(sh4memsize[i]*fieldorder),H5T_STR_SPACEPAD))<0){
printf("error in making string for VDATA in memory. \n");
return FAIL;
}
sh5memtype[i] = h5str_type;
}
fielddim[0] = fieldorder;
/* 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) {
if(H5Tinsert(h5_ctype,fieldname,fil_offset,sh5type[i])<0) {
printf("error inserting hdf5 compound datatype while ");
printf("converting vdata.\n");
return FAIL;
}
if(H5Tinsert(h5_cmemtype,fieldname,mem_offset,sh5memtype[i])<0){
printf("error inserting hdf5 compound datatype of memory");
printf(" while converting vdata.\n");
return FAIL;
}
}
else {
hid_t arr_type; /* Array datatype for inserting fields */
/* Create array datatype */
if((arr_type=H5Tarray_create(sh5type[i],1,fielddim,NULL))<0) {
printf("error creating array datatype.\n");
return FAIL;
}
if(H5Tinsert(h5_ctype,fieldname,fil_offset,arr_type)<0) {
printf("error inserting array into hdf5 compound datatype. \n");
return FAIL;
}
/* Close array datatype */
if(H5Tclose(arr_type)<0) {
printf("error closing array datatype.\n");
return FAIL;
}
/* Create array datatype */
if((arr_type=H5Tarray_create(sh5memtype[i],1,fielddim,NULL))<0) {
printf("error creating array datatype.\n");
return FAIL;
}
if(H5Tinsert(h5_cmemtype,fieldname,mem_offset,arr_type)<0) {
printf("error inserting array into hdf5 compound datatype for memory. \n");
return FAIL;
}
/* Close array datatype */
if(H5Tclose(arr_type)<0) {
printf("error closing array datatype.\n");
return FAIL;
}
}
if( check_ifstr == 1) {
fil_offset = fil_offset + sh4size[i]*fieldorder;
mem_offset = mem_offset + sh4memsize[i]*fieldorder;
check_ifstr = 0;
}
else {
fil_offset = fil_offset + sh4size[i]*fieldorder;
mem_offset = mem_offset + sh4memsize[i]*fieldorder;
}
}
return SUCCEED;
}

View File

@ -1,820 +0,0 @@
/*-------------------------------------------------------------------------
*
* 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,int h4_attr)
{
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,h4_attr)==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<num_gobjects;i++) {
if(Vgettagref(vgroup_id,i,&obj_tag,&obj_ref)==FAIL) {
printf("failed to get object tag and ref of the current");
printf(" object in this vgroup.\n");
H5Gclose(h5_pgroup);
free(h5pgroup_name);
return FAIL;
}
if(conv_int_str((uint16)obj_ref,refstr)== FAIL) {
printf("failed to convert object reference number ");
printf("into string format at vgroup_h4_to_h5 routine.\n");
H5Gclose(h5_pgroup);
free(h5pgroup_name);
return FAIL;
}
if (Visvg(vgroup_id,obj_ref)) {
if(convert_vgroup(file_id,sd_id,obj_ref,h5pgroup_name,h5_pgroup,
h5_dimgroup,h5_palgroup,h4_attr)== FAIL) {
printf("convert_vgroup routine failed,");
printf("cannot convert vgroup into hdf5 group successfully.\n");
free(h5pgroup_name);
H5Gclose(h5_pgroup);
return FAIL;
}
}
/* the object is independent vdata. */
else if(Visvs(vgroup_id,obj_ref)) {
if(convert_vdata(file_id,obj_ref,h5pgroup_name,h5_pgroup,h4_attr)==FAIL){
printf("fail to convert vdata into hdf5 dataset.\n");
free(h5pgroup_name);
H5Gclose(h5_pgroup);
return FAIL;
}
}
else if(obj_tag == DFTAG_NDG || obj_tag == DFTAG_SDG) {
if(convert_sds(file_id,sd_id,obj_ref,h5pgroup_name,h5_pgroup,
h5_dimgroup,h4_attr)==FAIL){
printf("fail to convert sds into hdf5 dataset.\n");
H5Gclose(h5_pgroup);
free(h5pgroup_name);
return FAIL;
}
}
else if(obj_tag == DFTAG_RIG) {
if(convert_image(file_id,obj_ref,h5pgroup_name,
h5_pgroup,h5_palgroup,h4_attr)==FAIL){
printf("fail to convert image into hdf5 dataset.\n");
H5Gclose(h5_pgroup);
free(h5pgroup_name);
return FAIL;
}
}
}
H5Gclose(h5_pgroup);
free(h5pgroup_name);
return SUCCEED;
}
/*-------------------------------------------------------------------------
* Function: convert_vgroup
*
* Purpose: subroutine interface for better modularity of vgroup_h4_to_h5
* In this routine, 1) h5 vgroup name is obtained;
2) vgroup_h4_to_h5 is called again for
unvisited vgroups
3) HardLink is created for visited vgroups
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
file_id: hdf4 file identifier
sd_id: sd interface id
obj_ref: object reference number
h5pgroup_name: h5 group name
h5_pgroup: hdf5 group id
h5_dimgroup: hdf5 dimensional scale group id
h5_palgroup: hdf5 palette group id
*-------------------------------------------------------------------------
*/
int convert_vgroup(int32 file_id,int32 sd_id, int32 obj_ref,
char* h5pgroup_name,hid_t h5_pgroup,hid_t h5_dimgroup,
hid_t h5_palgroup,int h4_attr) {
int32 vgroup_cid;
int32 istat;
int check_vgname;
char refstr[MAXREF_LENGTH];
char cvgroup_name[VGNAMELENMAX];
char* cor_cvgroupname;
char* h5cgroup_name;
char* h5lgroup_name;
int check_vgroup;
if(conv_int_str((uint16)obj_ref,refstr)== FAIL) {
printf("converting integer into string format.\n");
return FAIL;
}
vgroup_cid = Vattach(file_id,obj_ref,"r");
if(vgroup_cid == FAIL) {
printf("error in getting vgroup id.\n");
return FAIL;
}
/* recursively obtain information from the group*/
/* check whether it is looked up, if yes, create a hard link.*/
istat = Vgetname(vgroup_cid,cvgroup_name);
if(istat == FAIL) {
printf("failed to get the name of vgroup.\n");
Vdetach(vgroup_cid);
return FAIL;
}
/* look up vg hashtable and see whether this object is touched.*/
check_vgroup = lookup(obj_ref,estnum_vg,vg_hashtab);
/* if this vgroup has not been touched, convert it into hdf5 group.
else create a hard link to the existing group.*/
cor_cvgroupname = correct_name(cvgroup_name);
if(cor_cvgroupname == NULL) {
printf("error in generating corrected vgroup name. \n");
Vdetach(vgroup_cid);
return FAIL;
}
if(check_vgroup == 0) {
/* checking whether vgroup name contains ORI_SLASH, changing into CHA_SLASH.*/
h5cgroup_name = get_obj_aboname(cor_cvgroupname,refstr,h5pgroup_name,
HDF4_VGROUP);
if(h5cgroup_name == NULL) {
printf("error in getting the group name.\n");
Vdetach(vgroup_cid);
free(cor_cvgroupname);
return FAIL;
}
free(cor_cvgroupname);
if(set_name(obj_ref,estnum_vg,vg_hashtab,h5cgroup_name)== FAIL) {
printf("error in setting group name.\n");
Vdetach(vgroup_cid);
free(h5cgroup_name);
return FAIL;
}
if(Vgroup_h4_to_h5(file_id,vgroup_cid,sd_id,h5_pgroup,
h5_dimgroup,h5_palgroup,h4_attr)== FAIL) {
printf("error in transferring vgroup into hdf5 group.\n");
Vdetach(vgroup_cid);
free(h5cgroup_name);
return FAIL;
}
free(h5cgroup_name);
}
else {
h5cgroup_name = get_name(obj_ref,estnum_vg,vg_hashtab,&check_vgname);
if(h5cgroup_name == NULL && check_vgname ==0 ) {
printf("error,cannot find group\n");
Vdetach(vgroup_cid);
return FAIL;
}
if(h5cgroup_name == NULL && check_vgname == -1 ) {
printf("error,group name is not defined.\n");
Vdetach(vgroup_cid);
return FAIL;
}
/* create HL */
h5lgroup_name = get_obj_aboname(cor_cvgroupname,refstr,h5pgroup_name,
HDF4_VGROUP);
if(h5lgroup_name == NULL) {
printf("failed to obtain group name.\n");
Vdetach(vgroup_cid);
free(h5cgroup_name);
free(cor_cvgroupname);
return FAIL;
}
free(cor_cvgroupname);
if(H5Glink(h5_pgroup,H5G_LINK_HARD,h5cgroup_name,h5lgroup_name)<0) {
printf("cannot make hard link for two groups.\n");
Vdetach(vgroup_cid);
free(h5cgroup_name);
free(h5lgroup_name);
return FAIL;
}
free(h5cgroup_name);
free(h5lgroup_name);
}
Vdetach(vgroup_cid);
return SUCCEED;
}
/*-------------------------------------------------------------------------
* Function: convert_vdata
*
* Purpose: subroutine interface for better modularity of vgroup_h4_to_h5
* In this routine, 1) h5 vdata name is obtained;
2) vdata_h4_to_h5 is called for unvisited
vdatas
3) HardLink is created for visited vdatas
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
file_id: hdf4 file identifier
obj_ref: object reference number
h5pgroup_name: h5 group name
h5_pgroup: hdf5 group id
*-------------------------------------------------------------------------
*/
int convert_vdata(int32 file_id,int32 obj_ref,char * h5pgroup_name,
hid_t h5_pgroup,int h4_attr) {
int32 vdata_id;
int check_vdata;
int check_vdname;
int32 istat;
char refstr[MAXREF_LENGTH];
char cvdata_name[VGNAMELENMAX];
char* cor_cvdataname;
char* h5cvdata_name;
char* h5lvdata_name;
vdata_id = VSattach(file_id,obj_ref,"r");
if(vdata_id == FAIL) {
printf("error in attaching vdata. \n");
return FAIL;
}
if(conv_int_str((uint16)obj_ref,refstr)== FAIL) {
printf("converting integer into string format.\n");
VSdetach(vdata_id);
return FAIL;
}
istat = VSisattr(vdata_id);
if (istat == FAIL) {
printf("error in checking vdata attribute. \n");
VSdetach(vdata_id);
return FAIL;
}
/* if(istat);*/ /*ignore, dependent vdata(attributes, etc.)can be retrieved later.*/
else { /* independent vdata, read in */
check_vdata = lookup(obj_ref,estnum_vd,vd_hashtab);
if(check_vdata < 0) {
printf("failed to look up the object.\n");
VSdetach(vdata_id);
return FAIL;
}
if(VSQueryname(vdata_id,cvdata_name)==FAIL) {
printf("error in querying name. \n");
VSdetach(vdata_id);
return FAIL;
}
cor_cvdataname = correct_name(cvdata_name);
if(cor_cvdataname == NULL) {
printf("error in generating corrected vdata name. \n");
VSdetach(vdata_id);
return FAIL;
}
if(check_vdata ==0) {
h5cvdata_name = get_obj_aboname(cor_cvdataname,refstr,h5pgroup_name,
HDF4_VDATA);
if(h5cvdata_name == NULL) {
printf("cannot obtain the converted hdf5 dataset name from vdata.\n");
VSdetach(vdata_id);
free(cor_cvdataname);
return FAIL;
}
free(cor_cvdataname);
if(set_name(obj_ref,estnum_vd,vd_hashtab,h5cvdata_name)== FAIL){
printf("failed to obtain vdata name.\n");
VSdetach(vdata_id);
free(h5cvdata_name);
return FAIL;
}
if(Vdata_h4_to_h5(file_id,vdata_id,h5_pgroup,h4_attr)==FAIL){
printf("failed to transfer vdata into hdf5 dataset.\n");
VSdetach(vdata_id);
free(h5cvdata_name);
return FAIL;
}
free(h5cvdata_name);
}
else {
h5cvdata_name = get_name(obj_ref,estnum_vd,vd_hashtab,
&check_vdname);
if(h5cvdata_name == NULL && check_vdname ==0 ){
printf("error,cannot find vdata\n");
VSdetach(vdata_id);
return FAIL;
}
if(h5cvdata_name == NULL && check_vdname ==-1 ){
printf("error,vdata name is not defined.\n");
VSdetach(vdata_id);
return FAIL;
}
/*create HL,
for the time being, we will use absolute path. */
h5lvdata_name = get_obj_aboname(cor_cvdataname,refstr,h5pgroup_name,
HDF4_VDATA);
if(h5lvdata_name == NULL) {
printf("error in obtaining vdata name.\n");
VSdetach(vdata_id);
free(h5cvdata_name);
free(cor_cvdataname);
return FAIL;
}
free(cor_cvdataname);
if(H5Glink(h5_pgroup,H5G_LINK_HARD,h5cvdata_name,h5lvdata_name)){
printf("error in creating hardlink for hdf5 dataset");
printf(" converted from vdata.\n");
VSdetach(vdata_id);
free(h5cvdata_name);
free(h5lvdata_name);
return FAIL;
}
free(h5cvdata_name);
free(h5lvdata_name);
}
VSdetach(vdata_id);
}
return SUCCEED;
}
/*-------------------------------------------------------------------------
* Function: convert_sds
*
* Purpose: subroutine interface for better modularity of vgroup_h4_to_h5
* In this routine, 1) h5 sds name is obtained;
2) sds_h4_to_h5 is called for unvisited
sds objects
3) HardLink is created for visited sds
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
sd_id: hdf4 sds identifier
obj_ref: object reference number
h5_dimgroup: h5 dimensional scale group id
h5_pgroup: hdf5 group id
*-------------------------------------------------------------------------
*/
int convert_sds(int32 file_id,int32 sd_id,int32 obj_ref,char * h5pgroup_name,
hid_t h5_pgroup,hid_t h5_dimgroup,int h4_attr) {
int32 sd_index;
int32 sds_id;
int32 sds_rank;
int32 sds_dimsizes[DIM_HASHSIZE];
int32 sds_dtype;
int32 num_sdsattrs;
char sds_name[MAX_NC_NAME];
char* cor_sdsname;
int check_sds;
int check_sdsname;
char refstr[MAXREF_LENGTH];
char* h5csds_name;
char* h5lsds_name;
sd_index = SDreftoindex(sd_id,obj_ref);
if(sd_index == FAIL){
printf("error in obtaining reference number of sds.\n");
return FAIL;
}
if(conv_int_str((uint16)obj_ref,refstr)== FAIL) {
printf("error in converting reference number into string type.\n");
return FAIL;
}
sds_id = SDselect(sd_id,sd_index);
if(sds_id == FAIL){
printf("error in obtaining sd id.\n");
return FAIL;
}
if(SDgetinfo(sds_id,sds_name,&sds_rank,sds_dimsizes,
&sds_dtype,&num_sdsattrs)==FAIL) {
printf("error in obtaining SD info.\n");
SDendaccess(sds_id);
return FAIL;
}
/* check whether this sds is touched. */
check_sds = lookup(obj_ref,2*num_sds,sds_hashtab);
cor_sdsname = correct_name(sds_name);
if(cor_sdsname == NULL) {
printf("error in generating corrected sds name. \n");
SDendaccess(sds_id);
return FAIL;
}
if(check_sds == 0) {
/* obtain the absolute name of sds object, deal with the name clashing by
looking up things in the "name hashing table".*/
h5csds_name = get_obj_aboname(cor_sdsname,refstr,h5pgroup_name,HDF4_SDS);
if(h5csds_name == NULL) {
printf("error in obtaining sds name.\n");
SDendaccess(sds_id);
free(cor_sdsname);
return FAIL;
}
free(cor_sdsname);
/* put the absolute path of sds into "hashing table".*/
if(set_name(obj_ref,2*num_sds,sds_hashtab,h5csds_name)==FAIL) {
printf("error in setting object name.\n");
SDendaccess(sds_id);
free(h5csds_name);
return FAIL;
}
/* convert the sds object into hdf5 dataset.*/
if(Sds_h4_to_h5(file_id,sds_id,h5_pgroup,h5_dimgroup,h4_attr)==FAIL){
printf("error in translating sds into hdf5 dataset.\n");
SDendaccess(sds_id);
free(h5csds_name);
return FAIL;
}
free(h5csds_name);
}
else {
/* if the object has been touched, create a hard link instead.*/
h5csds_name = get_name(obj_ref,2*num_sds,sds_hashtab,&check_sdsname);
if(h5csds_name == NULL) {
printf("error in getting sds name \n");
SDendaccess(sds_id);
return FAIL;
}
/*... ADD in the code. create HL,
for the time being, we will use absolute path. */
h5lsds_name = get_obj_aboname(cor_sdsname,refstr,h5pgroup_name,
HDF4_SDS);
if(h5lsds_name == NULL) {
printf("error in getting sds link name.\n");
SDendaccess(sds_id);
free(h5csds_name);
free(cor_sdsname);
return FAIL;
}
free(cor_sdsname);
if(H5Glink(h5_pgroup,H5G_LINK_HARD,h5csds_name,h5lsds_name) <0) {
printf("error in getting hard link \n");
SDendaccess(sds_id);
free(h5csds_name);
free(h5lsds_name);
return FAIL;
}
free(h5csds_name);
free(h5lsds_name);
}
SDendaccess(sds_id);
return SUCCEED;
}
/*-------------------------------------------------------------------------
* Function: convert_image
*
* Purpose: subroutine interface for better modularity of vgroup_h4_to_h5
* In this routine, 1) h5 vdata name is obtained;
2) image_h4_to_h5 is called for unvisited
images
3) Hard Link is created for visited images
* Return: FAIL if failed, SUCCEED if successful.
*
* In :
file_id: hdf4 file identifier
obj_ref: object reference number
h5pgroup_name: h5 group name
h5_pgroup: hdf5 group id
h5_palgroup: hdf5 palette group id
*-------------------------------------------------------------------------
*/
int convert_image(int32 file_id,int32 obj_ref,char * h5pgroup_name,
hid_t h5_pgroup,hid_t h5_palgroup,int h4_attr) {
int32 gr_id;
int32 gr_index;
int32 ri_id;
int32 istat;
char* h5cimage_name;
char* h5limage_name;
char refstr[MAXREF_LENGTH];
char image_name[MAX_GR_NAME];
char* cor_imagename;
int check_imagename;
int check_image;
gr_id = GRstart(file_id);
if(gr_id == FAIL) {
printf("error in obtaining gr id. \n");
return FAIL;
}
if(conv_int_str((uint16)obj_ref,refstr)== FAIL) {
printf("converting integer into string format.\n");
return FAIL;
}
gr_index= GRreftoindex(gr_id,(uint16)obj_ref);
if(gr_index == FAIL) {
printf("error in getting gr index.\n");
return FAIL;
}
ri_id = GRselect(gr_id,gr_index);
if(ri_id == FAIL) {
printf("error in selecting gr interface.\n");
return FAIL;
}
istat = GRgetiminfo(ri_id, image_name, NULL, NULL, NULL, NULL, NULL);
if(istat == FAIL) {
GRendaccess(ri_id);
printf("error in getting GR images.\n");
return FAIL;
}
/* checking whether image name contains ORI_SLASH,
changing into CHA_SLASH.*/
cor_imagename = correct_name(image_name);
if(cor_imagename == NULL) {
printf("error in generating corrected image name. \n");
GRendaccess(ri_id);
return FAIL;
}
/* check whether this image is touched. */
check_image = lookup(obj_ref,2*num_images,gr_hashtab);
if(check_image == 0) {
/* obtain the absolute name of image object, deal with the name clashing by
looking up things in the "name hashing table".*/
h5cimage_name = get_obj_aboname(cor_imagename,refstr,h5pgroup_name,
HDF4_IMAGE);
if(h5cimage_name == NULL) {
printf("error in getting image name.\n");
GRendaccess(ri_id);
free(cor_imagename);
return FAIL;
}
free(cor_imagename);
if(set_name(obj_ref,2*num_images,gr_hashtab,h5cimage_name)==FAIL) {
printf("error setting image name.\n");
GRendaccess(ri_id);
free(h5cimage_name);
return FAIL;
}
if(Image_h4_to_h5(file_id,ri_id,h5_pgroup,h5_palgroup,h4_attr)==FAIL) {
printf("error in transferring image name into hdf5 dataset.\n");
GRendaccess(ri_id);
free(h5cimage_name);
return FAIL;
}
free(h5cimage_name);
}
else{
/*if the object is visited, create HL. */
h5cimage_name = get_name(obj_ref,2*num_images,gr_hashtab,
&check_imagename);
if(h5cimage_name == NULL) {
printf("error in getting image name into hdf5 dataset.\n");
GRendaccess(ri_id);
free(h5cimage_name);
return FAIL;
}
h5limage_name = get_obj_aboname(cor_imagename,refstr,h5pgroup_name,
HDF4_IMAGE);
if(h5limage_name == NULL) {
printf("error in getting link image name into hdf5 dataset.\n");
GRendaccess(ri_id);
free(h5cimage_name);
free(cor_imagename);
return FAIL;
}
free(cor_imagename);
if(H5Glink(h5_pgroup,H5G_LINK_HARD,h5cimage_name,h5limage_name)<0){
printf("error in linking two groups.\n");
GRendaccess(ri_id);
free(h5cimage_name);
free(h5limage_name);
return FAIL;
}
free(h5cimage_name);
free(h5limage_name);
}
GRendaccess(ri_id);
/* this is for efficient reason, we will comment out GRend.
GRend(gr_id);*/
return SUCCEED;
}

View File

@ -1,4 +0,0 @@
0 #memory optimization parameter,change to 1 to set memory optimization
64 #when memory optimization parameter is 1, set the appropriate slab memory size
20 #when the SDS is extensible and the current dimensional size is 0. the default
# chunk size has to be defined.

View File

@ -1,250 +0,0 @@
#!/bin/sh
#
# Copyright (C) 2001 National Center for Supercomputing Applications.
# All rights reserved.
#
# Test script for the h4toh5 tests.
# Using the h4toh5 convert to convert a pre-created hdf file to
# an hdf5 file (output file), then compare it with a pre-created
# corresponding hdf5 file (expected file).
# If the same, that particular test passes.
# If not the same, the output file and expected file are processed
# by the h5dump tool to see if they produce the same results.
# If the same, the test passes.
# If not, show the difference of the two results and report the test failed.
#
# h5dump is default to use the one just built. It can be overridden
# by setting $H5DUMP to a different value such as /usr/local/bin/h5dump.
H4TOH5=h4toh5 # The tool name
H4TOH5_BIN=`pwd`/$H4TOH5 # The path of the tool binary
CMP='cmp -s'
DIFF='diff -c'
RM='rm -f'
SED='sed '
H5DUMP=${H5DUMP:-`pwd`/'../h5dump/h5dump'} # Default to use the h5dumper
# in the same tools directory
# Verify if $H5DUMP is a valid command.
tmpfile=/tmp/testh4toh5.$$
$H5DUMP -V > $tmpfile
if test -s "$tmpfile"; then
:
else
echo " Could not run the '$H5DUMP' command. The test can still proceed"
echo " but it may fail if '$H5DUMP' is needed to verify the output."
echo " You can make sure '$H5DUMP' is among your shell PATH and run"
echo " the test again. You may also visit http://hdf.ncsa.uiuc.edu"
echo " or email hdfhelp@ncsa.uiuc.edu for more information."
H5DUMP=:
fi
$RM $tmpfile
# The build (current) directory might be different than the source directory.
if test -z "$srcdir"; then
srcdir=.
fi
mkdir ../testfiles >/dev/null 2>&1
SRCDIR="$srcdir/../testfiles"
OUTDIR="../testfiles/Results"
test -d "$OUTDIR" || mkdir $OUTDIR
nerrors=0
verbose=yes
# Print a line-line message left justified in a field of 70 characters
# beginning with the word "Testing".
TESTING() {
SPACES=" "
echo "Testing $* $SPACES" |cut -c1-70 |tr -d '\012'
}
# Run a test and print PASS or *FAIL*. If a test fails then increment
# the `nerrors' global variable and (if $verbose is set) display the
# difference between the actual and the expected hdf4 files. The
# expected hdf5 files are in testfiles/Expected directory.
# The actual hdf5 file is not removed if $HDF5_NOCLEANUP is to a non-null
# value.
CONVERT() {
# Run h4toh5 convert.
TESTING $H4TOH5 $@
#
# Set up arguments to run the conversion test.
# The converter assumes all hdf4 files has the .hdf suffix as in the form
# of foo.hdf. It creates the corresponding hdf5 files with the .h5 suffix
# as in the form of foo.h5. One exception is that if exactly two file
# names are given, it treats the first argument as an hdf4 file and creates
# the corresponding hdf5 file with the name as the second argument, WITOUT
# any consideration of the suffix. (For this test script, in order to
# match the output hdf5 file with the expected hdf5 file, it expects the
# second file of the two-files tests has the .h5 suffix too.)
#
# If SRCDIR != OUTDIR, need to copy the input hdf4 files from the SRCDIR
# to the OUTDIR and transform the input file pathname because of the suffix
# convention mentioned above. This way, the hdf5 files are always created
# in the OUTDIR directory.
#
INFILES=""
OUTFILES=""
MULTIRUN=""
case "$1" in
-m) # multiple files conversion
MULTIRUN="-m"
shift
for f in $*
do
if test "$SRCDIR" != "$OUTDIR"; then
cp $SRCDIR/$f $OUTDIR/$f
fi
INFILES="$INFILES $f"
OUTFILES="$OUTFILES `basename $f .hdf`.h5"
shift
done
;;
*) # Single file conversion
case $# in
1) if test "$SRCDIR" != "$OUTDIR"; then
cp $SRCDIR/$1 $OUTDIR/$1
fi
INFILES="$1"
OUTFILES="`basename $1 .hdf`.h5"
;;
2) # hdf4 file specified
if test "$SRCDIR" != "$OUTDIR"; then
cp $SRCDIR/$1 $OUTDIR/$1
fi
INFILES="$1"
OUTFILES="$2"
;;
*) # Illegal
echo "Illegal arguments"
exit 1
;;
esac
;;
esac
# run the conversion and remove input files that have been copied over
(
cd $OUTDIR
$H4TOH5_BIN $INFILES $OUTFILES 2>/dev/null
if test "$SRCDIR" != "$OUTDIR"; then
$RM $INFILES
fi
)
# Verify results
result="passed"
for f in $OUTFILES
do
if $CMP $SRCDIR/Expected/$f $OUTDIR/$f
then
:
else
# Use h5dump to dump the files and verify the output.
outfile=`basename $f .h5`
expect_out=$outfile.expect
actual_out=$outfile.actual
(cd $SRCDIR/Expected
$H5DUMP $outfile.h5 ) > $expect_out
(cd $OUTDIR
$H5DUMP $outfile.h5 ) > $actual_out
if [ "passed" = $result -a ! -s $actual_out ] ; then
echo "*FAILED*"
nerrors="`expr $nerrors + 1`"
result=failed
test yes = "$verbose" &&
echo " H5DUMP failed to produce valid output"
elif $CMP $expect_out $actual_out; then
:
else
if test "passed" = $result; then
echo "*FAILED*"
nerrors="`expr $nerrors + 1`"
result=failed
fi
test yes = "$verbose" &&
echo " Actual result (*.actual) differs from expected result (*.expect)" &&
$DIFF $expect_out $actual_out |sed 's/^/ /'
fi
fi
# Clean up output file
if test -z "$HDF5_NOCLEANUP"; then
$RM $expect_out $actual_out
$RM $OUTDIR/$f
fi
done
if test "passed" = "$result"; then
echo " PASSED"
fi
}
##############################################################################
##############################################################################
### T H E T E S T S ###
##############################################################################
##############################################################################
$RM $OUTDIR/*.hdf $OUTDIR/*.tmp
#
# The HDF5 filenames are created based upon the HDF4 filenames
# without the extension.
#
# test for converting H5 groups to H4 Vgroups.
#CONVERT vg.hdf
#
# The test for conversion are the same as above with the only difference
# being that the HDF5 filenames are given explicitly.
#
$RM $OUTDIR/*.tmp
CONVERT anno_test.hdf anno_test.h5
CONVERT gr_typ_test.hdf gr_typ_test.h5
CONVERT grnameclash_test.hdf grnameclash_test.h5
CONVERT image_attr_test.hdf image_attr_test.h5
#CONVERT image_maxsize.hdf image_maxsize.h5
CONVERT ras24il.hdf ras24il.h5
CONVERT ras_24_test.hdf ras_24_test.h5
CONVERT ras_8_test.hdf ras_8_test.h5
CONVERT sds_attr_test.hdf sds_attr_test.h5
CONVERT sds_dim_test.hdf sds_dim_test.h5
CONVERT sds_typ_test.hdf sds_typ_test.h5
CONVERT sdsnameclash_test.hdf sdsnameclash_test.h5
CONVERT vdata_test.hdf vdata_test.h5
CONVERT vdnameclash_test.hdf vdnameclash_test.h5
CONVERT vg_hl_test.hdf vg_hl_test.h5
CONVERT vg_loop_test.hdf vg_loop_test.h5
CONVERT vgnameclash_test.hdf vgnameclash_test.h5
CONVERT vg_all_test.hdf vg_all_test.h5
#
# Again, the test for conversion are the same as the first set of test.
# Here, multiple conversion are done on HDF4 files at one time.
#
$RM $OUTDIR/*.hdf $OUTDIR/*.tmp
#CONVERT -m vg.hdf
if test $nerrors -eq 0 ; then
echo "All h4toh5 tests passed."
fi
$RM -r $OUTDIR
exit $nerrors

View File

@ -1,40 +0,0 @@
## This file is machine generated on GNU systems.
## Only temporary changes may be made here.
h5toh4.lo: \
$(srcdir)/h5toh4.c \
$(srcdir)/h5toh4.h \
$(top_srcdir)/src/hdf5.h \
$(top_srcdir)/src/H5public.h \
$(top_builddir)/src/H5pubconf.h \
$(top_srcdir)/src/H5api_adpt.h \
$(top_srcdir)/src/H5Ipublic.h \
$(top_srcdir)/src/H5Apublic.h \
$(top_srcdir)/src/H5ACpublic.h \
$(top_srcdir)/src/H5Bpublic.h \
$(top_srcdir)/src/H5Dpublic.h \
$(top_srcdir)/src/H5Epublic.h \
$(top_srcdir)/src/H5Fpublic.h \
$(top_srcdir)/src/H5FDpublic.h \
$(top_srcdir)/src/H5Gpublic.h \
$(top_srcdir)/src/H5HGpublic.h \
$(top_srcdir)/src/H5HLpublic.h \
$(top_srcdir)/src/H5MMpublic.h \
$(top_srcdir)/src/H5Opublic.h \
$(top_srcdir)/src/H5Ppublic.h \
$(top_srcdir)/src/H5Zpublic.h \
$(top_srcdir)/src/H5Rpublic.h \
$(top_srcdir)/src/H5Spublic.h \
$(top_srcdir)/src/H5Tpublic.h \
$(top_srcdir)/src/H5FDcore.h \
$(top_srcdir)/src/H5FDfamily.h \
$(top_srcdir)/src/H5FDmpio.h \
$(top_srcdir)/src/H5FDsec2.h \
$(top_srcdir)/src/H5FDstdio.h \
$(top_srcdir)/src/H5FDsrb.h \
$(top_srcdir)/src/H5FDgass.h \
$(top_srcdir)/src/H5FDstream.h \
$(top_srcdir)/src/H5FDmulti.h \
$(top_srcdir)/src/H5FDlog.h \
$(top_srcdir)/tools/lib/h5tools.h \
$(top_srcdir)/tools/lib/h5tools_utils.h

View File

@ -1,60 +0,0 @@
## HDF5 Library Makefile(.in)
##
## Copyright (C) 2001 National Center for Supercomputing Applications.
## All rights reserved.
##
##
top_srcdir=@top_srcdir@
top_builddir=../..
srcdir=@srcdir@
SUBDIRS=
@COMMENCE@
## Add include directory to the C preprocessor flags, add -lh5tools and
## -lhdf5 to the list of libraries.
##
CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src \
-I$(top_srcdir)/tools/lib @CPPFLAGS@
## Test programs and scripts.
##
TEST_PROGS=
TEST_SCRIPTS=@TESTH5TOH4@
## These are our main targets: library and tools.
##
LIBTOOLS=../lib/libh5tools.la
LIBHDF5=$(top_builddir)/src/libhdf5.la
PUB_PROGS=@H5TOH4@
PROGS=$(PUB_PROGS) $(TEST_PROGS)
## Source and object files for the library; do not install
##
LIB_SRC=
LIB_OBJ=$(LIB_SRC:.c=.lo)
PUB_LIB=
## Source and object files for programs...
##
PROG_SRC=h5toh4.c
PROG_OBJ=$(PROG_SRC:.c=.lo)
PRIVATE_HDR=h5toh4.h
## Source and object files for the tests
##
TEST_SRC=
TEST_OBJ=$(TEST_SRC:.c=.lo)
## Programs have to be built before they can be tested!
##
check test _test: $(PROGS)
## How to build the programs... They all depend on the hdf5 library and
## the tools library compiled in this directory.
##
$(PROGS): $(LIBTOOLS) $(LIBHDF5)
h5toh4: h5toh4.lo
@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5toh4.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
@CONCLUDE@

File diff suppressed because it is too large Load Diff

View File

@ -1,43 +0,0 @@
/*
* Copyright © 1998 NCSA
* All rights reserved.
*
* Programmer: Paul Harten <pharten@ncsa.uiuc.edu>
* Friday, October 16th, 1998
*
* Purpose: Convert H5 files to H4 files.
*/
#ifndef _H5TOH4_H
#define _H5TOH4_H
#include "hdf.h"
#include "mfhdf.h"
#include "hdf5.h"
#ifdef H5_HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
typedef struct op_data_t {
/*
* information being carried between iterations.
*
*/
int32 hfile_id;
int32 vgroup_id;
int32 sd_id;
int32 sds_id;
int32 vdata_id;
int32 obj_idx;
} op_data_t;
#ifdef H5TOH4_DEBUG
#define DEBUG_PRINT(s1,s2,s3,n1) ( fprintf(stderr,s1,s2,s3,n1) )
#else
#define DEBUG_PRINT(s1,s2,s3,n1) ( fprintf(stderr," ") )
#endif
#endif

View File

@ -1,299 +0,0 @@
#! /bin/sh
#
# Copyright (C) 1997-2001 National Center for Supercomputing Applications.
# All rights reserved.
#
H5TOH4=h5toh4 # a relative name
H5TOH4_BIN=`pwd`/$H5TOH4 # an absolute command path
cmp='cmp -s'
diff='diff -c'
RM='rm -f'
SED='sed '
H4DUMP='hdp'
# Verify if $H4DUMP is a valid command.
tmpfile=/tmp/testh5toh4.$$
$H4DUMP -H > $tmpfile
if test -s "$tmpfile"; then
# Find out which version of hdp is being used. Over simplified
# algorithm but will do the job for now.
if ( grep -s 'NCSA HDF Version 4.1 Release [3-9]' $tmpfile > /dev/null )
then
H4DUMPVER=413
else
H4DUMPVER=0
echo " Some tests maybe skipped because your version of $H4DUMP does"
echo " not handle loops in Vgroups correctly. You need version"
echo " 4.1 Release 3 or later. Visit http://hdf.ncsa.uiuc.edu"
echo " or email hdfhelp@ncsa.uiuc.edu for more information."
fi
else
echo " Could not run the '$H4DUMP' command. The test can still proceed"
echo " but it may fail if '$H4DUMP' is needed to verify the output."
echo " You can make sure '$H4DUMP' is among your shell PATH and run"
echo " the test again. You may also visit http://hdf.ncsa.uiuc.edu"
echo " or email hdfhelp@ncsa.uiuc.edu for more information."
H4DUMP=:
H4DUMPVER=0
fi
$RM $tmpfile
# The build (current) directory might be different than the source directory.
if test -z "$srcdir"; then
srcdir=.
fi
mkdir ../testfiles >/dev/null 2>&1
SRCDIR="$srcdir/../testfiles"
OUTDIR="../testfiles/Results"
test -d $OUTDIR || mkdir $OUTDIR
nerrors=0
verbose=yes
# Print a line-line message left justified in a field of 70 characters
# beginning with the word "Testing".
TESTING() {
SPACES=" "
echo "Testing $* $SPACES" |cut -c1-70 |tr -d '\012'
}
# Run a test and print PASS or *FAIL*. If a test fails then increment
# the `nerrors' global variable and (if $verbose is set) display the
# difference between the actual and the expected hdf4 files. The
# expected hdf4 files are in testfiles/Expected directory.
# The actual hdf4 file is not removed if $HDF5_NOCLEANUP is to a non-null
# value.
CONVERT() {
# Run h5toh4 convert.
TESTING $H5TOH4 $@
#
# Set up arguments to run the conversion test.
# The converter assumes all hdf5 files has the .h5 suffix as in the form
# of foo.h5. It creates the corresponding hdf4 files with the .hdf suffix
# as in the form of foo.hdf. One exception is that if exactly two file
# names are given, it treats the first argument as an hdf5 file and creates
# the corresponding hdf4 file with the name as the second argument, WITOUT
# any consideration of the suffix. (For this test script, in order to
# match the output hdf4 file with the expected hdf4 file, it expects the
# second file of the two-files tests has the .hdf suffix too.)
#
# If SRCDIR != OUTDIR, need to copy the input hdf5 files from the SRCDIR
# to the OUTDIR and transform the input file pathname because of the suffix
# convention mentioned above. This way, the hdf4 files are always created
# in the OUTDIR directory.
#
INFILES=""
OUTFILES=""
MULTIRUN=""
case "$1" in
"-m") # multiple files conversion
MULTIRUN="-m"
shift
for f in $*
do
if test "$SRCDIR" != "$OUTDIR"; then
cp $SRCDIR/$f $OUTDIR/$f
fi
INFILES="$INFILES $f"
OUTFILES="$OUTFILES `basename $f .h5`.hdf"
shift
done
;;
* ) # Single file conversion
case $# in
1) if test "$SRCDIR" != "$OUTDIR"; then
cp $SRCDIR/$1 $OUTDIR/$1
fi
INFILES="$1"
OUTFILES="`basename $1 .h5`.hdf"
;;
2) # hdf4 file specified
if test "$SRCDIR" != "$OUTDIR"; then
cp $SRCDIR/$1 $OUTDIR/$1
fi
INFILES="$1"
OUTFILES="$2"
;;
*) # Illegal
echo "Illegal arguments"
exit 1
;;
esac
;;
esac
# run the conversion and remove input files that have been copied over
(
cd $OUTDIR
$H5TOH4_BIN $MULTIRUN $INFILES 2>/dev/null
if test "$SRCDIR" != "$OUTDIR"; then
$RM $INFILES
fi
)
# Verify results
result="passed"
for f in $OUTFILES
do
if $cmp $SRCDIR/Expected/$f $OUTDIR/$f
then
:
else
# Use hdp to dump the files and verify the output.
# Filter out the output of "reference = ..." because
# reference numbers are immaterial in general.
outfile=`basename $f .hdf`
expect_out=$outfile.expect
actual_out=$outfile.actual
if [ $outfile = "tloop" -a $H4DUMPVER -lt 413 ]
then
echo " -SKIP-"
result="skipped"
touch $expect_out $actual_out # fake them
else
(cd $SRCDIR/Expected
$H4DUMP dumpvg $outfile.hdf
$H4DUMP dumpvd $outfile.hdf
$H4DUMP dumpsds $outfile.hdf ) |
sed -e 's/reference = [0-9]*;//' > $expect_out
(cd $OUTDIR
$H4DUMP dumpvg $outfile.hdf
$H4DUMP dumpvd $outfile.hdf
$H4DUMP dumpsds $outfile.hdf ) |
sed -e 's/reference = [0-9]*;//' > $actual_out
fi
if [ "passed" = $result -a ! -s $actual_out ] ; then
echo "*FAILED*"
nerrors="`expr $nerrors + 1`"
result=failed
test yes = "$verbose" &&
echo " H4DUMP failed to produce valid output"
elif $cmp $expect_out $actual_out; then
:
else
if test "passed" = $result; then
echo "*FAILED*"
nerrors="`expr $nerrors + 1`"
result=failed
fi
test yes = "$verbose" &&
echo " Actual result (*.actual) differs from expected result (*.expect)" &&
$diff $expect_out $actual_out |sed 's/^/ /'
fi
fi
# Clean up output file
if test -z "$HDF5_NOCLEANUP"; then
$RM $expect_out $actual_out
$RM $OUTDIR/$f
fi
done
if test "passed" = "$result"; then
echo " PASSED"
fi
}
##############################################################################
##############################################################################
### T H E T E S T S ###
##############################################################################
##############################################################################
$RM $OUTDIR/*.hdf $OUTDIR/*.tmp
#
# The HDF4 filenames are created based upon the HDF5 filenames
# without the extension.
#
# test for converting H5 groups to H4 Vgroups.
CONVERT tgroup.h5
# test for converting H5 datasets to H4 SDS's.
CONVERT tdset.h5
# test for converting H5 attributes to H4 attributes.
CONVERT tattr.h5
# test for converting H5 soft links.
CONVERT tslink.h5
# test for converting H5 hard links.
CONVERT thlink.h5
# test for converting H5 compound data type to H4 Vdata.
CONVERT tcompound.h5
# test for converting all H5 objects at in same file.
CONVERT tall.h5
# tests for converting H5 objects with loops.
CONVERT tloop.h5
# test for converting extendable H5 datasets to H4 SDS's.
CONVERT tdset2.h5
# test for converting extendable H5 datasets with compound data type to H4 Vdata.
CONVERT tcompound2.h5
# tests for converting H5 objects from many different pathways.
CONVERT tmany.h5
# tests for converting H5 string objects.
CONVERT tstr.h5
# tests for converting more H5 string objects.
CONVERT tstr2.h5
#
# The test for conversion are the same as above with the only difference
# being that the HDF4 filenames are given explicitly.
#
$RM $OUTDIR/*.tmp
CONVERT tgroup.h5 tgroup.hdf
CONVERT tdset.h5 tdset.hdf
CONVERT tattr.h5 tattr.hdf
CONVERT tslink.h5 tslink.hdf
CONVERT thlink.h5 thlink.hdf
CONVERT tcompound.h5 tcompound.hdf
CONVERT tall.h5 tall.hdf
CONVERT tloop.h5 tloop.hdf
CONVERT tdset2.h5 tdset2.hdf
CONVERT tcompound2.h5 tcompound2.hdf
CONVERT tmany.h5 tmany.hdf
CONVERT tstr.h5 tstr.hdf
CONVERT tstr2.h5 tstr2.hdf
#
# Again, the test for conversion are the same as the first set of test.
# Here, multiple conversion are done on HDF5 files at one time.
#
$RM $OUTDIR/*.hdf $OUTDIR/*.tmp
CONVERT -m tgroup.h5 tdset.h5 tattr.h5 tslink.h5 thlink.h5
CONVERT -m tcompound.h5 tall.h5
CONVERT -m tloop.h5
CONVERT -m tdset2.h5 tcompound2.h5 tmany.h5
CONVERT -m tstr.h5 tstr2.h5
if test $nerrors -eq 0 ; then
echo "All h5toh4 tests passed."
fi
if test -z "$HDF5_NOCLEANUP"; then
$RM -r $OUTDIR
fi
exit $nerrors