mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-04-12 17:31:09 +08:00
[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:
parent
480c319ab4
commit
0f7c2e3017
@ -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
|
@ -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@
|
@ -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
@ -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);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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
@ -1,2 +0,0 @@
|
||||
#define MEMOPT 0
|
||||
#define SLABSIZE 64
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -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.
|
@ -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
|
@ -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
|
@ -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
@ -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
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user