From 44e5d2a1d7a83b8196094a63f7023c514bcdae2a Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Wed, 25 May 2011 10:27:58 -0500 Subject: [svn-r20904] Bring r20871, 20875, 20901, 20903 from trunk. Tested: local linux --- config/cmake/CTestCustom.cmake | 16 - hl/src/H5DS.c | 6 +- tools/h5import/CMakeLists.txt | 37 +- tools/h5import/h5import.c | 4317 +++++++++++++++++------------------ tools/h5import/h5import.h | 177 +- tools/h5jam/CMakeLists.txt | 1004 ++++---- tools/h5stat/h5stat.c | 166 +- tools/h5stat/testh5stat.sh.in | 1 + windows/tools/h5dump/testh5dump.bat | 195 +- 9 files changed, 2917 insertions(+), 3002 deletions(-) diff --git a/config/cmake/CTestCustom.cmake b/config/cmake/CTestCustom.cmake index efc4443..b687051 100755 --- a/config/cmake/CTestCustom.cmake +++ b/config/cmake/CTestCustom.cmake @@ -41,22 +41,6 @@ SET (CTEST_CUSTOM_MEMCHECK_IGNORE H5DUMP-XML-clearall-objects ######### tools/h5import ######### H5IMPORT-clear-objects - H5IMPORT-ASCII_F32-clear-objects - H5IMPORT-ASCII_UI16-clear-objects - H5IMPORT-ASCII_UI32-clear-objects - H5IMPORT-ASCII_I8-clear-objects - H5IMPORT-ASCII_I16-clear-objects - H5IMPORT-ASCII_I32-clear-objects - H5IMPORT-ASCII_F64_R1-clear-objects - H5IMPORT-BINARY_I8_EOF-clear-objects - H5IMPORT-STR-clear-objects - H5IMPORT-BINARY_UI32-clear-objects - H5IMPORT-BINARY_UI16-clear-objects - H5IMPORT-BINARY_I32-clear-objects - H5IMPORT-BINARY_I8-clear-objects - H5IMPORT-BINARY_I16-clear-objects - H5IMPORT-BINARY_F64-clear-objects - H5IMPORT-ASCII_F64-clear-objects ######### tools/h5jam ######### H5JAM-SETUP-N_twithub_u10_c-clear-objects H5JAM-SETUP-N_twithub_u10_c diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c index 432a725..379b220 100644 --- a/hl/src/H5DS.c +++ b/hl/src/H5DS.c @@ -813,10 +813,8 @@ herr_t H5DSdetach_scale(hid_t did, /* same object, reset. we want to detach only for this DIM */ if(did_oi.fileno == tmp_oi.fileno && did_oi.addr == tmp_oi.addr) { - /* if we found not the last one, copy the last one to replace - the one which is found */ - if(i < nelmts-1) - dsbuf[ii] = dsbuf[nelmts-1]; + /* copy the last one to replace the one which is found */ + dsbuf[ii] = dsbuf[nelmts-1]; nelmts--; found_dset=1; break; diff --git a/tools/h5import/CMakeLists.txt b/tools/h5import/CMakeLists.txt index 99f8d55..10be869 100644 --- a/tools/h5import/CMakeLists.txt +++ b/tools/h5import/CMakeLists.txt @@ -115,21 +115,27 @@ IF (BUILD_TESTING) ############################################################################## ############################################################################## MACRO (ADD_H5_TEST testname importfile conffile testfile) - ADD_TEST ( - NAME H5IMPORT-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} - -E remove - ${testfile} - ${testfile}.new - ${testfile}.new.err - ${testfile}.out - ${testfile}.out.err - ) + IF (NOT HDF5_ENABLE_USING_MEMCHECKER) + ADD_TEST ( + NAME H5IMPORT-${testname}-clear-objects + COMMAND ${CMAKE_COMMAND} + -E remove + ${testfile} + ${testfile}.new + ${testfile}.new.err + ${testfile}.out + ${testfile}.out.err + ) + IF (NOT "${last_test}" STREQUAL "") + SET_TESTS_PROPERTIES (H5IMPORT-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) + ENDIF (NOT "${last_test}" STREQUAL "") + SET (last_test "H5IMPORT-${testname}-clear-objects") + ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER) + + ADD_TEST (NAME H5IMPORT-${testname} COMMAND $ ${importfile} -c testfiles/${conffile} -o ${testfile}) IF (NOT "${last_test}" STREQUAL "") - SET_TESTS_PROPERTIES (H5IMPORT-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) + SET_TESTS_PROPERTIES (H5IMPORT-${testname} PROPERTIES DEPENDS ${last_test}) ENDIF (NOT "${last_test}" STREQUAL "") - ADD_TEST (NAME H5IMPORT-${testname} COMMAND $ ${importfile} -c testfiles/${conffile} -o ${testfile}) - SET_TESTS_PROPERTIES (H5IMPORT-${testname} PROPERTIES DEPENDS H5IMPORT-${testname}-clear-objects) SET (last_test "H5IMPORT-${testname}") # If using memchecker add tests without using scripts @@ -186,9 +192,12 @@ IF (BUILD_TESTING) txtin32.txt ${HDF5_REFERENCE_TEST_FILES} ) + SET (last_test "H5IMPORT-clear-objects") ADD_TEST (NAME H5IMPORT-h5importtest COMMAND $) - SET_TESTS_PROPERTIES (H5IMPORT-h5importtest PROPERTIES DEPENDS H5IMPORT-clear-objects) + IF (NOT "${last_test}" STREQUAL "") + SET_TESTS_PROPERTIES (H5IMPORT-h5importtest PROPERTIES DEPENDS ${last_test}) + ENDIF (NOT "${last_test}" STREQUAL "") SET (last_test "H5IMPORT-h5importtest") # ----- TESTING "ASCII I32 rank 3 - Output BE " diff --git a/tools/h5import/h5import.c b/tools/h5import/h5import.c index 82b92d2..bbd8746 100755 --- a/tools/h5import/h5import.c +++ b/tools/h5import/h5import.c @@ -22,250 +22,257 @@ #include "h5import.h" #include "h5tools_utils.h" - /* Name of tool */ #define PROGRAMNAME "h5import" int main(int argc, char *argv[]) { - struct Options opt; - int outfile_named = FALSE; - int token; - int i; - int state = 0; - struct Input *in=NULL; - - const char *err1 = "Invalid number of arguments: %d.\n"; - const char *err2 = "Error in state table.\n"; - const char *err3 = "No output file given.\n"; - const char *err4 = "Program aborted.\n"; - const char *err5 = "Invalid path %s.\n"; - const char *err6 = "Invalid dimensions - %s.\n"; - const char *err7 = "Invalid type of data - %s.\n"; - const char *err8 = "Invalid size of data - %s.\n"; - const char *err9 = "Cannot specify more than 30 input files in one call to h5import.\n"; + struct Options opt; + int outfile_named = FALSE; + int token; + int i; + int state = 0; + struct Input *in = NULL; + + const char *err1 = "Invalid number of arguments: %d.\n"; + const char *err2 = "Error in state table.\n"; + const char *err3 = "No output file given.\n"; + const char *err4 = "Program aborted.\n"; + const char *err5 = "Invalid path %s.\n"; + const char *err6 = "Invalid dimensions - %s.\n"; + const char *err7 = "Invalid type of data - %s.\n"; + const char *err8 = "Invalid size of data - %s.\n"; + const char *err9 = "Cannot specify more than 30 input files in one call to h5import.\n"; h5tools_setprogname(PROGRAMNAME); h5tools_setstatus(EXIT_SUCCESS); - (void)HDsetvbuf(stderr, (char *) NULL, _IOLBF, 0); - (void)HDsetvbuf(stdout, (char *) NULL, _IOLBF, 0); + (void) HDsetvbuf(stderr, (char *) NULL, _IOLBF, 0); + (void) HDsetvbuf(stdout, (char *) NULL, _IOLBF, 0); - if ( argv[1] && (strcmp("-V",argv[1])==0) ) - { + if (argv[1] && (strcmp("-V", argv[1]) == 0)) { print_version("h5import"); exit(EXIT_SUCCESS); + } + /* + * validate the number of command line arguments + */ + if (argc < 2) { + (void) fprintf(stderr, err1, argc); + usage(argv[0]); + goto err; } - /* - * validate the number of command line arguments - */ + /* Initialize the file structure to 0 */ + HDmemset(&opt, 0, sizeof(struct Options)); - if (argc < 2) - { - (void) fprintf(stderr, err1, argc); - usage(argv[0]); - goto err; - } + /* + * parse the command line + */ + for (i = 1; i < argc; i++) { + if ((token = gtoken(argv[i])) == ERR) { + usage(argv[0]); + goto err; + } - /* Initialize the file count to 0 */ - opt.fcount = 0; + state = state_table[state][token]; - /* - * parse the command line - */ + switch (state) { - for (i = 1; i < argc; i++) - { - if ((token = gtoken(argv[i])) == ERR) - { - usage(argv[0]); - goto err; - } + case 1: /* counting input files */ + if (opt.fcount < 29) { + (void) HDstrcpy(opt.infiles[opt.fcount].datafile, argv[i]); + in = &(opt.infiles[opt.fcount].in); + opt.infiles[opt.fcount].config = 0; + setDefaultValues(in, opt.fcount); + opt.fcount++; + } + else { + (void) fprintf(stderr, err9, argv[i]); + goto err; + } - state = state_table[state][token]; + break; - switch (state) - { + case 2: /* -c found; look for configfile */ + break; - case 1: /* counting input files */ - if (opt.fcount < 29) { - (void) HDstrcpy(opt.infiles[opt.fcount].datafile, argv[i]); - in = &(opt.infiles[opt.fcount].in); - opt.infiles[opt.fcount].config = 0; - setDefaultValues(in, opt.fcount); - opt.fcount++; - } - else { - (void) fprintf(stderr, err9, argv[i]); - goto err; - } - - break; - - case 2: /* -c found; look for configfile */ - break; - - case 3: /* get configfile name */ - (void) HDstrcpy(opt.infiles[opt.fcount-1].configfile, argv[i]); - opt.infiles[opt.fcount-1].config = 1; - break; - - case 4: /* -o found; look for outfile */ - break; - - case 5: /* get outfile found */ - (void) HDstrcpy(opt.outfile, argv[i]); - outfile_named = TRUE; - break; - - case 6: /* -h found; help, then exit */ - help(argv[0]); - exit(EXIT_SUCCESS); - break; + case 3: /* get configfile name */ + (void) HDstrcpy(opt.infiles[opt.fcount-1].configfile, argv[i]); + opt.infiles[opt.fcount - 1].config = 1; + break; + + case 4: /* -o found; look for outfile */ + break; - case 7: /* -d found; look for dimensions */ - break; + case 5: /* get outfile found */ + (void) HDstrcpy(opt.outfile, argv[i]); + outfile_named = TRUE; + break; - case 8: /* read dimensions */ - if (parseDimensions(in, argv[i]) == -1) - { - (void) fprintf(stderr, err6, argv[i]); - goto err; - } - break; + case 6: /* -h found; help, then exit */ + help(argv[0]); + exit(EXIT_SUCCESS); + break; - case 9: /* -p found; look for path name */ - break; + case 7: /* -d found; look for dimensions */ + break; - case 10: /* read path name */ - if (parsePathInfo(&in->path, argv[i]) == -1) - { - (void) fprintf(stderr, err5, argv[i]); - goto err; - } - break; + case 8: /* read dimensions */ + if (parseDimensions(in, argv[i]) == -1) { + (void) fprintf(stderr, err6, argv[i]); + goto err; + } + break; - case 11: /* -t found; look for data type */ - break; + case 9: /* -p found; look for path name */ + break; - case 12: /* read data type */ - if (getInputClass(in, argv[i]) == -1) - { - (void) fprintf(stderr, err7, argv[i]); - goto err; - } + case 10: /* read path name */ + if (parsePathInfo(&in->path, argv[i]) == -1) { + (void) fprintf(stderr, err5, argv[i]); + goto err; + } + break; + + case 11: /* -t found; look for data type */ + break; + + case 12: /* read data type */ + if (getInputClass(in, argv[i]) == -1) { + (void) fprintf(stderr, err7, argv[i]); + goto err; + } - if (in->inputClass == 0 || in->inputClass == 4) - in->outputClass = 0; - if (in->inputClass == 1 || in->inputClass == 2 || in->inputClass == 3) - in->outputClass = 1; - if (in->inputClass == 6 || in->inputClass == 7) - in->outputClass = 2; - break; - - case 13: /* -s found; look for data size */ - break; - - case 14: /* read data size */ - if (getInputSize(in, (int)HDstrtol(argv[i], NULL, BASE_10)) == -1) - { - (void) fprintf(stderr, err8, argv[i]); - goto err; + if (in->inputClass == 0 || in->inputClass == 4) + in->outputClass = 0; + if (in->inputClass == 1 || in->inputClass == 2 || in->inputClass == 3) + in->outputClass = 1; + if (in->inputClass == 6 || in->inputClass == 7) + in->outputClass = 2; + break; + + case 13: /* -s found; look for data size */ + break; + + case 14: /* read data size */ + if (getInputSize(in, (int) HDstrtol(argv[i], NULL, BASE_10)) == -1) { + (void) fprintf(stderr, err8, argv[i]); + goto err; + } + /*set default value for output-size */ + in->outputSize = in->inputSize; + break; + + case ERR: /* command syntax error */ + default: + (void) fprintf(stderr, "%s", err2); + usage(argv[0]); + goto err; } - /*set default value for output-size */ - in->outputSize = in->inputSize; - break; + } - case ERR: /* command syntax error */ - default: - (void) fprintf(stderr, "%s", err2); + if (FALSE == outfile_named) { + (void) fprintf(stderr, "%s", err3); usage(argv[0]); goto err; } - } - - if (FALSE == outfile_named) - { - (void) fprintf(stderr, "%s", err3); - usage(argv[0]); - goto err; - } - if (process(&opt) == -1) - goto err; + if (process(&opt) == -1) + goto err; + + for (i = 0; i < opt.fcount; i++) { + in = &(opt.infiles[i].in); + if (in->sizeOfDimension) + free(in->sizeOfDimension); + if (in->sizeOfChunk) + free(in->sizeOfChunk); + if (in->maxsizeOfDimension) + free(in->maxsizeOfDimension); + if (in->externFilename) + free(in->externFilename); + if (in->data) + free(in->data); + } - return(EXIT_SUCCESS); - err: + return (EXIT_SUCCESS); +err: (void) fprintf(stderr, "%s", err4); - return(EXIT_FAILURE); + for (i = 0; i < opt.fcount; i++) { + in = &(opt.infiles[i].in); + if (in->sizeOfDimension) + free(in->sizeOfDimension); + if (in->sizeOfChunk) + free(in->sizeOfChunk); + if (in->maxsizeOfDimension) + free(in->maxsizeOfDimension); + if (in->externFilename) + free(in->externFilename); + if (in->data) + free(in->data); + } + return (EXIT_FAILURE); } -static int -gtoken(char *s) +static int gtoken(char *s) { - size_t len; - int token; - - const char *err1 = "Illegal argument: %s.\n"; - - /* - * identify the token type - */ - if (s[0] == '-') - { /* option name (or negative number) */ - token = ERR; - len = HDstrlen(&s[1]); - switch (s[1]) - { - case 'o': - if (!HDstrncmp("outfile", &s[1], len)) - token = OPT_o; - break; - - case 'c': - if (!HDstrncmp("config", &s[1], len)) - token = OPT_c; - break; - - case 'h': - if (!HDstrncmp("help", &s[1], len)) - token = OPT_h; - break; - - case 'd': - if (!HDstrncmp("dims", &s[1], len)) - token = OPT_d; - break; - - case 'p': - if (!HDstrncmp("path", &s[1], len)) - token = OPT_p; - break; - - case 't': - if (!HDstrncmp("type", &s[1], len)) - token = OPT_t; - break; - - case 's': - if (!HDstrncmp("size", &s[1], len)) - token = OPT_s; - break; - } + size_t len; + int token; + + const char *err1 = "Illegal argument: %s.\n"; + + /* + * identify the token type + */ + if (s[0] == '-') { /* option name (or negative number) */ + token = ERR; + len = HDstrlen(&s[1]); + switch (s[1]) { + case 'o': + if (!HDstrncmp("outfile", &s[1], len)) + token = OPT_o; + break; - if (token == ERR) - (void) fprintf(stderr, err1, s); - } - else /* filename */ - { - token = FILNAME; - } - return (token); -} + case 'c': + if (!HDstrncmp("config", &s[1], len)) + token = OPT_c; + break; + + case 'h': + if (!HDstrncmp("help", &s[1], len)) + token = OPT_h; + break; + + case 'd': + if (!HDstrncmp("dims", &s[1], len)) + token = OPT_d; + break; + case 'p': + if (!HDstrncmp("path", &s[1], len)) + token = OPT_p; + break; + + case 't': + if (!HDstrncmp("type", &s[1], len)) + token = OPT_t; + break; + + case 's': + if (!HDstrncmp("size", &s[1], len)) + token = OPT_s; + break; + } + if (token == ERR) + (void) fprintf(stderr, err1, s); + } + else { /* filename */ + token = FILNAME; + } + return (token); +} /*------------------------------------------------------------------------- * Function: processDataFile @@ -282,501 +289,440 @@ gtoken(char *s) *------------------------------------------------------------------------- */ -static int -processDataFile(char *infile, struct Input *in, FILE **strm, hid_t file_id) +static int processDataFile(char *infile, struct Input *in, hid_t file_id) { - const char *err1 = "Unable to open the input file %s for reading.\n"; - const char *err2 = "Error in allocating integer data storage.\n"; - const char *err3 = "Error in allocating floating-point data storage.\n"; - const char *err4 = "Error in reading integer data.\n"; - const char *err5 = "Error in reading floating-point data.\n"; - const char *err6 = "Error in allocating unsigned integer data storage.\n"; - const char *err7 = "Error in reading unsigned integer data.\n"; - const char *err10 = "Unrecognized input class type.\n"; - const char *err11 = "Error in reading string data.\n"; - - /*------------------------------------------------------------------------- - * special case for opening binary classes in WIN32 - * "FP" denotes a floating point binary file, - * "IN" denotes a signed integer binary file, - * "UIN" denotes an unsigned integer binary file, - *------------------------------------------------------------------------- - */ - if ( in->inputClass == 4 /* "IN" */ || - in->inputClass == 3 /* "FP" */ || - in->inputClass == 7 /* "UIN" */ - - ) - { + FILE *strm; + const char *err1 = "Unable to open the input file %s for reading.\n"; + const char *err2 = "Error in allocating integer data storage.\n"; + const char *err3 = "Error in allocating floating-point data storage.\n"; + const char *err4 = "Error in reading integer data.\n"; + const char *err5 = "Error in reading floating-point data.\n"; + const char *err6 = "Error in allocating unsigned integer data storage.\n"; + const char *err7 = "Error in reading unsigned integer data.\n"; + const char *err10 = "Unrecognized input class type.\n"; + const char *err11 = "Error in reading string data.\n"; + + /*------------------------------------------------------------------------- + * special case for opening binary classes in WIN32 + * "FP" denotes a floating point binary file, + * "IN" denotes a signed integer binary file, + * "UIN" denotes an unsigned integer binary file, + *------------------------------------------------------------------------- + */ + if (in->inputClass == 4 /* "IN" */|| in->inputClass == 3 /* "FP" */|| in->inputClass == 7 /* "UIN" */) { #ifdef WIN32 - if ((*strm = fopen(infile, "rb")) == NULL) - { - (void) fprintf(stderr, err1, infile); - return(-1); - } + if ((strm = fopen(infile, "rb")) == NULL) { + (void) fprintf(stderr, err1, infile); + return(-1); + } #else - if ((*strm = fopen(infile, "r")) == NULL) - { - (void) fprintf(stderr, err1, infile); - return(-1); - } + if ((strm = fopen(infile, "r")) == NULL) { + (void) fprintf(stderr, err1, infile); + return (-1); + } #endif - } - /*------------------------------------------------------------------------- - * if the input class is not binary, just use "r" - *------------------------------------------------------------------------- - */ - else - { - if ((*strm = fopen(infile, "r")) == NULL) - { - (void) fprintf(stderr, err1, infile); - return(-1); - } - } - - + } + /*------------------------------------------------------------------------- + * if the input class is not binary, just use "r" + *------------------------------------------------------------------------- + */ + else { + if ((strm = fopen(infile, "r")) == NULL) { + (void) fprintf(stderr, err1, infile); + return (-1); + } + } - switch(in->inputClass) - { + switch (in->inputClass) { case 0: /* TEXTIN */ case 4: /* IN */ - if (allocateIntegerStorage(in) == -1) - { - (void) fprintf(stderr, err2, infile); - return(-1); - } - - if (readIntegerData(strm, in) == -1) - { - (void) fprintf(stderr, err4, infile); - return(-1); - } - break; + if (allocateIntegerStorage(in) == -1) { + (void) fprintf(stderr, err2, infile); + fclose(strm); + return (-1); + } + + if (readIntegerData(strm, in) == -1) { + (void) fprintf(stderr, err4, infile); + fclose(strm); + return (-1); + } + break; case 1: /* TEXTFP */ case 2: /* TEXTFPE */ case 3: /* FP */ - if (allocateFloatStorage(in) == -1) - { - (void) fprintf(stderr, err3, infile); - return(-1); + if (allocateFloatStorage(in) == -1) { + (void) fprintf(stderr, err3, infile); + fclose(strm); + return (-1); - } + } - if (readFloatData(strm, in) == -1) - { - (void) fprintf(stderr, err5, infile); - return(-1); - } - break; + if (readFloatData(strm, in) == -1) { + (void) fprintf(stderr, err5, infile); + fclose(strm); + return (-1); + } + break; case 5: /* STR */ - if (processStrData(strm, in, file_id) == -1) - { + if (processStrData(strm, in, file_id) == -1) { (void) fprintf(stderr, err11, infile); - return(-1); + fclose(strm); + return (-1); } - - - break; + break; case 6: /* TEXTUIN */ case 7: /* UIN */ - if (allocateUIntegerStorage(in) == -1) - { - (void) fprintf(stderr, err6, infile); - return(-1); - } - if (readUIntegerData(strm, in) == -1) - { - (void) fprintf(stderr, err7, infile); - return(-1); - } - break; + if (allocateUIntegerStorage(in) == -1) { + (void) fprintf(stderr, err6, infile); + fclose(strm); + return (-1); + } + if (readUIntegerData(strm, in) == -1) { + (void) fprintf(stderr, err7, infile); + fclose(strm); + return (-1); + } + break; default: (void) fprintf(stderr, "%s", err10); - return(-1); - } - return (0); + fclose(strm); + return (-1); + } + fclose(strm); + return (0); } -static int -readIntegerData(FILE **strm, struct Input *in) +static int readIntegerData(FILE *strm, struct Input *in) { - H5DT_INT8 *in08; - H5DT_INT16 *in16, temp; - H5DT_INT32 *in32; + H5DT_INT8 *in08; + H5DT_INT16 *in16; + H5DT_INT16 temp; + H5DT_INT32 *in32; #ifndef WIN32 - H5DT_INT64 *in64; - char buffer[256]; + H5DT_INT64 *in64; + char buffer[256]; #endif - hsize_t len=1; - hsize_t i; - int j; + hsize_t len = 1; + hsize_t i; + int j; - const char *err1 = "Unable to get integer value from file.\n"; - const char *err2 = "Unrecognized input class type.\n"; - const char *err3 = "Invalid input size.\n"; + const char *err1 = "Unable to get integer value from file.\n"; + const char *err2 = "Unrecognized input class type.\n"; + const char *err3 = "Invalid input size.\n"; - for (j=0; jrank;j++) - len *= in->sizeOfDimension[j]; + for (j = 0; j < in->rank; j++) + len *= in->sizeOfDimension[j]; - switch(in->inputSize) - { + switch (in->inputSize) { case 8: - switch(in->inputClass) - { + switch (in->inputClass) { case 0: /* TEXTIN */ - in08 = (H5DT_INT8 *) in->data; - for (i = 0; i < len; i++, in08++) - { - if (fscanf(*strm, "%hd", &temp) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + in08 = (H5DT_INT8 *) in->data; + for (i = 0; i < len; i++, in08++) { + if (fscanf(strm, "%hd", &temp) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + (*in08) = (H5DT_INT8) temp; } - (*in08) = (H5DT_INT8)temp; - } - break; + break; case 4: /* IN */ - in08 = (H5DT_INT8 *) in->data; - for (i = 0; i < len; i++, in08++) - { - if (fread((char *) in08, sizeof(H5DT_INT8), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + in08 = (H5DT_INT8 *) in->data; + for (i = 0; i < len; i++, in08++) { + if (fread((char *) in08, sizeof(H5DT_INT8), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; case 16: - in16 = (H5DT_INT16 *) in->data; - switch(in->inputClass) - { + in16 = (H5DT_INT16 *) in->data; + switch (in->inputClass) { case 0: /* TEXTIN */ - for (i = 0; i < len; i++, in16++) - { - if (fscanf(*strm, "%hd", in16) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in16++) { + if (fscanf(strm, "%hd", in16) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - in16 = (H5DT_INT16 *) in->data; - break; + in16 = (H5DT_INT16 *) in->data; + break; case 4: /* IN */ - for (i = 0; i < len; i++, in16++) - { - if (fread((char *) in16, sizeof(H5DT_INT16), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in16++) { + if (fread((char *) in16, sizeof(H5DT_INT16), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; case 32: - in32 = (H5DT_INT32 *) in->data; - switch(in->inputClass) - { + in32 = (H5DT_INT32 *) in->data; + switch (in->inputClass) { case 0: /* TEXTIN */ - for (i = 0; i < len; i++, in32++) - { - if (fscanf(*strm, "%d", in32) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in32++) { + if (fscanf(strm, "%d", in32) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; case 4: /* IN */ - for (i = 0; i < len; i++, in32++) - { - if (fread((char *) in32, sizeof(H5DT_INT32), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in32++) { + if (fread((char *) in32, sizeof(H5DT_INT32), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; #ifndef _WIN32 case 64: - in64 = (H5DT_INT64 *) in->data; - switch(in->inputClass) - { + in64 = (H5DT_INT64 *) in->data; + switch (in->inputClass) { case 0: /* TEXTIN */ - for (i = 0; i < len; i++, in64++) - { - if (fscanf(*strm, "%s", buffer) < 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in64++) { + if (fscanf(strm, "%s", buffer) < 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + *in64 = (H5DT_INT64) HDstrtoll(buffer, NULL, 10); } - *in64 = (H5DT_INT64) HDstrtoll(buffer, NULL, 10); - } - break; + break; case 4: /* IN */ - for (i = 0; i < len; i++, in64++) - { - if (fread((char *) in64, sizeof(H5DT_INT64), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in64++) { + if (fread((char *) in64, sizeof(H5DT_INT64), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; #endif /* ifndef _WIN32 */ default: - (void) fprintf(stderr, "%s", err3); - break; - } - return(0); + (void) fprintf(stderr, "%s", err3); + break; + } + return (0); } -static int -readUIntegerData(FILE **strm, struct Input *in) +static int readUIntegerData(FILE *strm, struct Input *in) { - H5DT_UINT8 *in08; - H5DT_UINT16 *in16, temp; - H5DT_UINT32 *in32; + H5DT_UINT8 *in08; + H5DT_UINT16 *in16; + H5DT_UINT16 temp; + H5DT_UINT32 *in32; #ifndef _WIN32 - H5DT_UINT64 *in64; - char buffer[256]; + H5DT_UINT64 *in64; + char buffer[256]; #endif - hsize_t len=1; - hsize_t i; - int j; - const char *err1 = "Unable to get unsigned integer value from file.\n"; - const char *err2 = "Unrecognized input class type.\n"; - const char *err3 = "Invalid input size.\n"; - - for (j=0; jrank;j++) - len *= in->sizeOfDimension[j]; - - switch(in->inputSize) - { + hsize_t len = 1; + hsize_t i; + int j; + const char *err1 = "Unable to get unsigned integer value from file.\n"; + const char *err2 = "Unrecognized input class type.\n"; + const char *err3 = "Invalid input size.\n"; + + for (j = 0; j < in->rank; j++) + len *= in->sizeOfDimension[j]; + + switch (in->inputSize) { case 8: - switch(in->inputClass) - { + switch (in->inputClass) { case 6: /* TEXTUIN */ - in08 = (H5DT_UINT8 *) in->data; - for (i = 0; i < len; i++, in08++) - { - if (fscanf(*strm, "%hu", &temp) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + in08 = (H5DT_UINT8 *) in->data; + for (i = 0; i < len; i++, in08++) { + if (fscanf(strm, "%hu", &temp) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + (*in08) = (H5DT_UINT8) temp; } - (*in08) = (H5DT_UINT8)temp; - } - break; + break; case 7: /* UIN */ - in08 = (H5DT_UINT8 *) in->data; - for (i = 0; i < len; i++, in08++) - { - if (fread((char *) in08, sizeof(H5DT_UINT8), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + in08 = (H5DT_UINT8 *) in->data; + for (i = 0; i < len; i++, in08++) { + if (fread((char *) in08, sizeof(H5DT_UINT8), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; case 16: - in16 = (H5DT_UINT16 *) in->data; - switch(in->inputClass) - { + in16 = (H5DT_UINT16 *) in->data; + switch (in->inputClass) { case 6: /* TEXTUIN */ - for (i = 0; i < len; i++, in16++) - { - if (fscanf(*strm, "%hu", in16) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in16++) { + if (fscanf(strm, "%hu", in16) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; case 7: /* UIN */ - for (i = 0; i < len; i++, in16++) - { - if (fread((char *) in16, sizeof(H5DT_UINT16), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in16++) { + if (fread((char *) in16, sizeof(H5DT_UINT16), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; case 32: - in32 = (H5DT_UINT32 *) in->data; - switch(in->inputClass) - { + in32 = (H5DT_UINT32 *) in->data; + switch (in->inputClass) { case 6: /* TEXTUIN */ - for (i = 0; i < len; i++, in32++) - { - if (fscanf(*strm, "%u", in32) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in32++) { + if (fscanf(strm, "%u", in32) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; case 7: /* UIN */ - for (i = 0; i < len; i++, in32++) - { - if (fread((char *) in32, sizeof(H5DT_UINT32), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in32++) { + if (fread((char *) in32, sizeof(H5DT_UINT32), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; #ifndef _WIN32 case 64: - in64 = (H5DT_UINT64 *) in->data; - switch(in->inputClass) - { + in64 = (H5DT_UINT64 *) in->data; + switch (in->inputClass) { case 6: /* TEXTUIN */ - for (i = 0; i < len; i++, in64++) - { - if (fscanf(*strm, "%s", buffer) < 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in64++) { + if (fscanf(strm, "%s", buffer) < 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + *in64 = (H5DT_UINT64) HDstrtoll(buffer, NULL, 10); } - *in64 = (H5DT_UINT64) HDstrtoll(buffer, NULL, 10); - } - break; + break; case 7: /* UIN */ - for (i = 0; i < len; i++, in64++) - { - if (fread((char *) in64, sizeof(H5DT_UINT64), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, in64++) { + if (fread((char *) in64, sizeof(H5DT_UINT64), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; #endif /* ifndef _WIN32 */ default: - (void) fprintf(stderr, "%s", err3); - break; - } - return(0); + (void) fprintf(stderr, "%s", err3); + break; + } + return (0); } -static int -readFloatData(FILE **strm, struct Input *in) +static int readFloatData(FILE *strm, struct Input *in) { - H5DT_FLOAT32 *fp32; - H5DT_FLOAT64 *fp64; + H5DT_FLOAT32 *fp32; + H5DT_FLOAT64 *fp64; - hsize_t len=1; - hsize_t i; - int j; - const char *err1 = "Unable to get integer value from file.\n"; - const char *err2 = "Unrecognized input class type.\n"; - const char *err3 = "Invalid input size type.\n"; + hsize_t len = 1; + hsize_t i; + int j; + const char *err1 = "Unable to get integer value from file.\n"; + const char *err2 = "Unrecognized input class type.\n"; + const char *err3 = "Invalid input size type.\n"; - for (j=0; jrank;j++) - len *= in->sizeOfDimension[j]; + for (j = 0; j < in->rank; j++) + len *= in->sizeOfDimension[j]; - switch(in->inputSize) - { + switch (in->inputSize) { case 32: - fp32 = (H5DT_FLOAT32 *) in->data; - switch(in->inputClass) - { + fp32 = (H5DT_FLOAT32 *) in->data; + switch (in->inputClass) { case 1: /* TEXTFP */ - for (i = 0; i < len; i++, fp32++) - { - if (fscanf(*strm, "%f", fp32) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, fp32++) { + if (fscanf(strm, "%f", fp32) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - fp32 = (H5DT_FLOAT32 *) in->data; - break; + fp32 = (H5DT_FLOAT32 *) in->data; + break; - /* same as TEXTFP */ + /* same as TEXTFP */ case 2: /*TEXTFPE */ - for (i = 0; i < len; i++, fp32++) - { - if (fscanf(*strm, "%f", fp32) != 1) - { + for (i = 0; i < len; i++, fp32++) { + if (fscanf(strm, "%f", fp32) != 1) { (void) fprintf(stderr, "%s", err1); return (-1); } @@ -786,46 +732,39 @@ readFloatData(FILE **strm, struct Input *in) break; case 3: /* FP */ - for (i = 0; i < len; i++, fp32++) - { - if (fread((char *) fp32, sizeof(H5DT_FLOAT32), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, fp32++) { + if (fread((char *) fp32, sizeof(H5DT_FLOAT32), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; case 64: - fp64 = (H5DT_FLOAT64 *) in->data; - switch(in->inputClass) - { + fp64 = (H5DT_FLOAT64 *) in->data; + switch (in->inputClass) { case 1: /* TEXTFP */ - for (i = 0; i < len; i++, fp64++) - { - if (fscanf(*strm, "%lf", fp64) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, fp64++) { + if (fscanf(strm, "%lf", fp64) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - fp64 = (H5DT_FLOAT64 *) in->data; - break; + fp64 = (H5DT_FLOAT64 *) in->data; + break; - /* same as TEXTFP */ + /* same as TEXTFP */ case 2: /*TEXTFPE */ - for (i = 0; i < len; i++, fp64++) - { - if (fscanf(*strm, "%lf", fp64) != 1) - { + for (i = 0; i < len; i++, fp64++) { + if (fscanf(strm, "%lf", fp64) != 1) { (void) fprintf(stderr, "%s", err1); return (-1); } @@ -835,31 +774,27 @@ readFloatData(FILE **strm, struct Input *in) break; case 3: /* FP */ - for (i = 0; i < len; i++, fp64++) - { - if (fread((char *) fp64, sizeof(H5DT_FLOAT64), 1, *strm) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); + for (i = 0; i < len; i++, fp64++) { + if (fread((char *) fp64, sizeof(H5DT_FLOAT64), 1, strm) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } } - } - break; + break; default: - (void) fprintf(stderr, "%s", err2); - return (-1); - } - break; + (void) fprintf(stderr, "%s", err2); + return (-1); + } + break; default: - (void) fprintf(stderr, "%s", err3); - break; - } - return(0); + (void) fprintf(stderr, "%s", err3); + break; + } + return (0); } - - /*------------------------------------------------------------------------- * Function: processStrData * @@ -874,63 +809,66 @@ readFloatData(FILE **strm, struct Input *in) * *------------------------------------------------------------------------- */ -static int -processStrData(FILE **strm, struct Input *in, hid_t file_id) +static int processStrData(FILE *strm, struct Input *in, hid_t file_id) { - hid_t group_id, dset_id, space_id, mspace_id, type_id, handle; + hid_t group_id; + hid_t dset_id; + hid_t space_id; + hid_t mspace_id; + hid_t type_id; + hid_t handle; hsize_t dims[1]; char str[1024]; char c; - int i = 0, j, nlines = 0, line; + int i = 0; + int j; + int nlines = 0; + int line; -/*------------------------------------------------------------------------- - * get number of lines in the input file - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * get number of lines in the input file + *------------------------------------------------------------------------- + */ - while ( !feof( *strm ) ) - { - c = fgetc( *strm ); + while (!feof(strm)) { + c = fgetc(strm); - if ( c == 10 ) /* eol */ - { + if (c == 10) { /* eol */ nlines++; - } } - if ( !nlines ) + if (!nlines) return 0; /* number of records */ dims[0] = nlines; /* rewind */ - fseek(*strm,0L,0); + fseek(strm, 0L, 0); -/*------------------------------------------------------------------------- - * read file again and generate an HDF5 dataset - *------------------------------------------------------------------------- - */ + /*------------------------------------------------------------------------- + * read file again and generate an HDF5 dataset + *------------------------------------------------------------------------- + */ - if (( type_id = H5Tcopy(H5T_C_S1)) < 0 ) + if ((type_id = H5Tcopy(H5T_C_S1)) < 0) goto out; - if ( H5Tset_size (type_id,H5T_VARIABLE) < 0 ) + if (H5Tset_size(type_id, H5T_VARIABLE) < 0) goto out; /* disable error reporting */ - H5E_BEGIN_TRY + H5E_BEGIN_TRY { - /* create parent groups */ - if(in->path.count > 1) { + if (in->path.count > 1) { j = 0; handle = file_id; - while(j < in->path.count - 1) { - if((group_id = H5Gopen2(handle, in->path.group[j], H5P_DEFAULT)) < 0) { + while (j < in->path.count - 1) { + if ((group_id = H5Gopen2(handle, in->path.group[j], H5P_DEFAULT)) < 0) { group_id = H5Gcreate2(handle, in->path.group[j++], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); - for(; j < in->path.count - 1; j++) + for (; j < in->path.count - 1; j++) group_id = H5Gcreate2(group_id, in->path.group[j], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); handle = group_id; break; @@ -945,1446 +883,1305 @@ processStrData(FILE **strm, struct Input *in, hid_t file_id) } /*enable error reporting */ - } H5E_END_TRY; + } + H5E_END_TRY; - if((space_id = H5Screate_simple(1, dims, NULL)) < 0) + if ((space_id = H5Screate_simple(1, dims, NULL)) < 0) goto out; - if((mspace_id = H5Screate(H5S_SCALAR)) < 0) + if ((mspace_id = H5Screate(H5S_SCALAR)) < 0) goto out; - if((dset_id = H5Dcreate2(handle, in->path.group[j], type_id, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) + if ((dset_id = H5Dcreate2(handle, in->path.group[j], type_id, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto out; line = 0; - while(!feof(*strm)) { - c = fgetc(*strm); + while (!feof(strm)) { + c = fgetc(strm); str[i] = c; i++; - if(c == 10) /* eol */ - { - char *str2 = str; - hid_t fspace_id; + if (c == 10) { /* eol */ + char *str2 = str; + hid_t fspace_id; hsize_t start[1]; hsize_t count[1] = { 1 }; - str[ i-1 ] = '\0'; /* terminate string */ + str[i - 1] = '\0'; /* terminate string */ - if (( fspace_id = H5Dget_space (dset_id)) < 0 ) + if ((fspace_id = H5Dget_space(dset_id)) < 0) goto out; - start[0] = line ++ ; + start[0] = line++; - if ( H5Sselect_hyperslab(fspace_id,H5S_SELECT_SET,start,NULL,count,NULL) < 0 ) + if (H5Sselect_hyperslab(fspace_id, H5S_SELECT_SET, start, NULL, count, NULL) < 0) goto out; - if ( H5Dwrite(dset_id,type_id,mspace_id,fspace_id,H5P_DEFAULT, &str2 ) < 0 ) + if (H5Dwrite(dset_id, type_id, mspace_id, fspace_id, H5P_DEFAULT, &str2) < 0) goto out; - if ( H5Sclose(fspace_id) < 0 ) + if (H5Sclose(fspace_id) < 0) goto out; i = 0; - str[ 0 ] = '\0'; + str[0] = '\0'; } } - /* close */ H5Dclose(dset_id); H5Sclose(space_id); H5Sclose(mspace_id); H5Tclose(type_id); - return(0); + return (0); out: return (-1); } - -static int -allocateIntegerStorage(struct Input *in) +static int allocateIntegerStorage(struct Input *in) { - hsize_t len=1; - int j; - const char *err1 = "Unable to allocate dynamic memory.\n"; - const char *err2 = "Invalid storage size for integer input data.\n"; + hsize_t len = 1; + int j; + const char *err1 = "Unable to allocate dynamic memory.\n"; + const char *err2 = "Invalid storage size for integer input data.\n"; - for (j=0; jrank;j++) - len *= in->sizeOfDimension[j]; + for (j = 0; j < in->rank; j++) + len *= in->sizeOfDimension[j]; - switch(in->inputSize) - { + switch (in->inputSize) { case 8: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT8))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT8))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; case 16: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT16))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT16))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; case 32: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT32))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT32))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; case 64: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT64))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT64))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; default: - (void) fprintf(stderr, "%s", err2); - break; - } - return(0); + (void) fprintf(stderr, "%s", err2); + break; + } + return (0); } static int allocateUIntegerStorage(struct Input *in) { - hsize_t len=1; - const char *err1 = "Unable to allocate dynamic memory.\n"; - const char *err2 = "Invalid storage size for unsigned integer input data.\n"; - int j; + hsize_t len = 1; + const char *err1 = "Unable to allocate dynamic memory.\n"; + const char *err2 = "Invalid storage size for unsigned integer input data.\n"; + int j; - for (j=0; jrank;j++) - len *= in->sizeOfDimension[j]; + for (j = 0; j < in->rank; j++) + len *= in->sizeOfDimension[j]; - switch(in->inputSize) - { + switch (in->inputSize) { case 8: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT8))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT8))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; case 16: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT16))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT16))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; case 32: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT32))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT32))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; case 64: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT64))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT64))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; default: - (void) fprintf(stderr, "%s", err2); - break; - } - return(0); + (void) fprintf(stderr, "%s", err2); + break; + } + return (0); } -static int -allocateFloatStorage(struct Input *in) +static int allocateFloatStorage(struct Input *in) { - hsize_t len = 1; - int j; - const char *err1 = "Unable to allocate dynamic memory.\n"; - const char *err2 = "Invalid storage size for float input data.\n"; + hsize_t len = 1; + int j; + const char *err1 = "Unable to allocate dynamic memory.\n"; + const char *err2 = "Invalid storage size for float input data.\n"; - for (j=0; jrank;j++) - len *= in->sizeOfDimension[j]; + for (j = 0; j < in->rank; j++) + len *= in->sizeOfDimension[j]; - switch(in->inputSize) - { + switch (in->inputSize) { case 32: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT32))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT32))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; case 64: - if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT64))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - break; + if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT64))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + break; default: - (void) fprintf(stderr, "%s", err2); - break; - } - return(0); + (void) fprintf(stderr, "%s", err2); + break; + } + return (0); } -static int -processConfigurationFile(char *infile, struct Input *in, FILE **strm) +static int processConfigurationFile(char *infile, struct Input *in) { - char key[255]; - int kindex; - char temp[255]; - int ival; - - const char *err1 = "Unable to open the configuration file: %s for reading.\n"; - const char *err2 = "Unknown keyword in configuration file: %s\n"; - const char *err3a = "PATH keyword appears twice in %s.\n"; - const char *err3b = "Error in parsing the path information from %s.\n"; - const char *err4a = "INPUT-CLASS keyword appears twice in %s.\n"; - const char *err4b = "Error in retrieving the input class from %s.\n"; - const char *err5a = "INPUT-SIZE keyword appears twice in %s.\n"; - const char *err5b = "Error in retrieving the input size from %s.\n"; - const char *err6a = "RANK keyword appears twice in %s.\n"; - const char *err6b = "Error in retrieving the rank from %s.\n"; - const char *err7a = "DIMENSION-SIZES keyword appears twice in %s.\n"; - const char *err7b = "DIMENSION-SIZES cannot appear before RANK is provided.\n"; - const char *err7c = "Error in retrieving the dimension sizes from %s.\n"; - const char *err8a = "OUTPUT-CLASS keyword appears twice in %s.\n"; - const char *err8b = "Error in retrieving the output class from %s.\n"; - const char *err9a = "OUTPUT-SIZE keyword appears twice in %s.\n"; - const char *err9b = "Error in retrieving the output size from %s.\n"; - const char *err10a = "OUTPUT-ARCHITECTURE keyword appears twice in %s.\n"; - const char *err10b = "Error in retrieving the output architecture from %s.\n"; - const char *err11a = "OUTPUT-BYTE-ORDER keyword appears twice in %s.\n"; - const char *err11b = "Error in retrieving the output byte order from %s.\n"; - const char *err12a = "CHUNKED-DIMENSION-SIZES keyword appears twice in %s.\n"; - const char *err12b = "CHUNKED-DIMENSION-SIZES cannot appear before DIMENSION-SIZES are provided.\n"; - const char *err12c = "Error in retrieving the chunked dimension sizes from %s.\n"; - const char *err13a = "COMPRESSION-TYPE keyword appears twice in %s.\n"; - const char *err13b = "Error in retrieving the compression type from %s.\n"; - const char *err14a = "COMPRESSION-PARAM keyword appears twice in %s.\n"; - const char *err14b = "Error in retrieving the compression parameter from %s.\n"; - const char *err15a = "EXTERNAL-STORAGE keyword appears twice in %s.\n"; - const char *err15b = "Error in retrieving the external storage paramters from %s.\n"; - const char *err16a = "MAXIMUM-DIMENSIONS keyword appears twice in %s.\n"; - const char *err16b = "MAXIMUM-DIMENSIONS cannot appear before DIMENSION-SIZES are provided.\n"; - const char *err16c = "Error in retrieving the maximum dimension sizes from %s.\n"; - const char *err17 = "Configuration parameters are invalid in %s.\n"; - const char *err18 = "Unable to get string value.\n"; - const char *err19 = "Unable to get integer value.\n"; - - /* create vector to map which keywords have been found - check vector after each keyword to check for violation - at the end check vector to see if required fields have been provided - process the output file according to the options - */ - - if ((*strm = fopen(infile, "r")) == NULL) - { - (void) fprintf(stderr, err1, infile); - return (-1); - } - - while (fscanf(*strm, "%s", key) == 1) - { - if ((kindex = mapKeywordToIndex(key)) == -1) - { - (void) fprintf(stderr, err2, infile); - return (-1); + FILE *strm; + char key[255]; + int kindex; + char temp[255]; + int ival; + + const char *err1 = "Unable to open the configuration file: %s for reading.\n"; + const char *err2 = "Unknown keyword in configuration file: %s\n"; + const char *err3a = "PATH keyword appears twice in %s.\n"; + const char *err3b = "Error in parsing the path information from %s.\n"; + const char *err4a = "INPUT-CLASS keyword appears twice in %s.\n"; + const char *err4b = "Error in retrieving the input class from %s.\n"; + const char *err5a = "INPUT-SIZE keyword appears twice in %s.\n"; + const char *err5b = "Error in retrieving the input size from %s.\n"; + const char *err6a = "RANK keyword appears twice in %s.\n"; + const char *err6b = "Error in retrieving the rank from %s.\n"; + const char *err7a = "DIMENSION-SIZES keyword appears twice in %s.\n"; + const char *err7b = "DIMENSION-SIZES cannot appear before RANK is provided.\n"; + const char *err7c = "Error in retrieving the dimension sizes from %s.\n"; + const char *err8a = "OUTPUT-CLASS keyword appears twice in %s.\n"; + const char *err8b = "Error in retrieving the output class from %s.\n"; + const char *err9a = "OUTPUT-SIZE keyword appears twice in %s.\n"; + const char *err9b = "Error in retrieving the output size from %s.\n"; + const char *err10a = "OUTPUT-ARCHITECTURE keyword appears twice in %s.\n"; + const char *err10b = "Error in retrieving the output architecture from %s.\n"; + const char *err11a = "OUTPUT-BYTE-ORDER keyword appears twice in %s.\n"; + const char *err11b = "Error in retrieving the output byte order from %s.\n"; + const char *err12a = "CHUNKED-DIMENSION-SIZES keyword appears twice in %s.\n"; + const char *err12b = "CHUNKED-DIMENSION-SIZES cannot appear before DIMENSION-SIZES are provided.\n"; + const char *err12c = "Error in retrieving the chunked dimension sizes from %s.\n"; + const char *err13a = "COMPRESSION-TYPE keyword appears twice in %s.\n"; + const char *err13b = "Error in retrieving the compression type from %s.\n"; + const char *err14a = "COMPRESSION-PARAM keyword appears twice in %s.\n"; + const char *err14b = "Error in retrieving the compression parameter from %s.\n"; + const char *err15a = "EXTERNAL-STORAGE keyword appears twice in %s.\n"; + const char *err15b = "Error in retrieving the external storage paramters from %s.\n"; + const char *err16a = "MAXIMUM-DIMENSIONS keyword appears twice in %s.\n"; + const char *err16b = "MAXIMUM-DIMENSIONS cannot appear before DIMENSION-SIZES are provided.\n"; + const char *err16c = "Error in retrieving the maximum dimension sizes from %s.\n"; + const char *err17 = "Configuration parameters are invalid in %s.\n"; + const char *err18 = "Unable to get string value.\n"; + const char *err19 = "Unable to get integer value.\n"; + + /* create vector to map which keywords have been found + check vector after each keyword to check for violation + at the end check vector to see if required fields have been provided + process the output file according to the options + */ + + if ((strm = fopen(infile, "r")) == NULL) { + (void) fprintf(stderr, err1, infile); + return (-1); } - switch (kindex) - { - case 0: /* PATH */ - if (in->configOptionVector[PATH] == 1) - { - (void) fprintf(stderr, err3a, infile); - return (-1); - } - if (fscanf(*strm, "%s", temp) != 1) - { - (void) fprintf(stderr, "%s", err18); - return (-1); - } - if (parsePathInfo(&in->path, temp) == -1) - { - (void) fprintf(stderr, err3b, infile); - return (-1); - } - in->configOptionVector[PATH] = 1; - break; - - case 1: /* INPUT-CLASS */ - if (in->configOptionVector[INPUT_CLASS] == 1) - { - (void) fprintf(stderr, err4a, infile); - return (-1); - } - if (fscanf(*strm, "%s", temp) != 1) - { - (void) fprintf(stderr, "%s", err18); - return (-1); - } - if (getInputClass(in, temp) == -1) - { - (void) fprintf(stderr, err4b, infile); - return (-1); + while (fscanf(strm, "%s", key) == 1) { + if ((kindex = mapKeywordToIndex(key)) == -1) { + (void) fprintf(stderr, err2, infile); + fclose(strm); + return (-1); } + switch (kindex) { + case 0: /* PATH */ + if (in->configOptionVector[PATH] == 1) { + (void) fprintf(stderr, err3a, infile); + fclose(strm); + return (-1); + } + if (fscanf(strm, "%s", temp) != 1) { + (void) fprintf(stderr, "%s", err18); + fclose(strm); + return (-1); + } + if (parsePathInfo(&in->path, temp) == -1) { + (void) fprintf(stderr, err3b, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[PATH] = 1; + break; - in->configOptionVector[INPUT_CLASS] = 1; - - /*set default value for output-class */ - if (in->configOptionVector[OUTPUT_CLASS] == 0) - { - if (in->inputClass == 0 || in->inputClass == 4) - in->outputClass = 0; - if (in->inputClass == 1 || in->inputClass == 2 || in->inputClass == 3) - in->outputClass = 1; - if (in->inputClass == 6 || in->inputClass == 7) - in->outputClass = 2; - } - break; + case 1: /* INPUT-CLASS */ + if (in->configOptionVector[INPUT_CLASS] == 1) { + (void) fprintf(stderr, err4a, infile); + fclose(strm); + return (-1); + } - case 2: /* INPUT-SIZE */ - if (in->configOptionVector[INPUT_SIZE] == 1) - { - (void) fprintf(stderr, err5a, infile); - return (-1); - } - if (fscanf(*strm, "%d", (&ival)) != 1) - { - (void) fprintf(stderr, "%s", err19); - return (-1); - } - if (getInputSize(in, ival) == -1) - { - (void) fprintf(stderr, err5b, infile); - return (-1); - } - in->configOptionVector[INPUT_SIZE] = 1; - - /*set default value for output-size */ - if (in->configOptionVector[OUTPUT_SIZE] == 0) - in->outputSize = in->inputSize; - break; - - case 3: /* RANK */ - if (in->configOptionVector[RANK] == 1) - { - (void) fprintf(stderr, err6a, infile); - return (-1); - } + if (fscanf(strm, "%s", temp) != 1) { + (void) fprintf(stderr, "%s", err18); + fclose(strm); + return (-1); + } + if (getInputClass(in, temp) == -1) { + (void) fprintf(stderr, err4b, infile); + fclose(strm); + return (-1); + } - if (getRank(in, strm) == -1) - { - (void) fprintf(stderr, err6b, infile); - return (-1); - } - in->configOptionVector[RANK] = 1; - break; - - case 4: /* DIMENSION-SIZES */ - if (in->configOptionVector[DIM] == 1) - { - (void) fprintf(stderr, err7a, infile); - return (-1); - } + in->configOptionVector[INPUT_CLASS] = 1; + + /*set default value for output-class */ + if (in->configOptionVector[OUTPUT_CLASS] == 0) { + if (in->inputClass == 0 || in->inputClass == 4) + in->outputClass = 0; + if (in->inputClass == 1 || in->inputClass == 2 + || in->inputClass == 3) + in->outputClass = 1; + if (in->inputClass == 6 || in->inputClass == 7) + in->outputClass = 2; + } + break; - if (in->configOptionVector[RANK] == 0) - { - (void) fprintf(stderr, err7b, infile); - return (-1); - } - if (getDimensionSizes(in, strm) == -1) - { - (void) fprintf(stderr, err7c, infile); - return (-1); - } - in->configOptionVector[DIM] = 1; - break; - - case 5: /* OUTPUT-CLASS */ - if (in->configOptionVector[OUTPUT_CLASS] == 1) - { - (void) fprintf(stderr, err8a, infile); - return (-1); - } + case 2: /* INPUT-SIZE */ + if (in->configOptionVector[INPUT_SIZE] == 1) { + (void) fprintf(stderr, err5a, infile); + fclose(strm); + return (-1); + } + if (fscanf(strm, "%d", (&ival)) != 1) { + (void) fprintf(stderr, "%s", err19); + fclose(strm); + return (-1); + } + if (getInputSize(in, ival) == -1) { + (void) fprintf(stderr, err5b, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[INPUT_SIZE] = 1; - if (getOutputClass(in, strm) == -1) - { - (void) fprintf(stderr, err8b, infile); - return (-1); - } - in->configOptionVector[OUTPUT_CLASS] = 1; - break; - - case 6: /* OUTPUT-SIZE */ - if (in->configOptionVector[OUTPUT_SIZE] == 1) - { - (void) fprintf(stderr, err9a, infile); - return (-1); - } + /*set default value for output-size */ + if (in->configOptionVector[OUTPUT_SIZE] == 0) + in->outputSize = in->inputSize; + break; - if (getOutputSize(in, strm) == -1) - { - (void) fprintf(stderr, err9b, infile); - return (-1); - } - in->configOptionVector[OUTPUT_SIZE] = 1; - break; - - case 7: /* OUTPUT-ARCHITECTURE */ - if (in->configOptionVector[OUTPUT_ARCH] == 1) - { - (void) fprintf(stderr, err10a, infile); - return (-1); - } + case 3: /* RANK */ + if (in->configOptionVector[RANK] == 1) { + (void) fprintf(stderr, err6a, infile); + fclose(strm); + return (-1); + } - if (getOutputArchitecture(in, strm) == -1) - { - (void) fprintf(stderr, err10b, infile); - return (-1); - } - in->configOptionVector[OUTPUT_ARCH] = 1; - break; - - case 8: /* OUTPUT-BYTE-ORDER */ - if (in->configOptionVector[OUTPUT_B_ORDER] == 1) - { - (void) fprintf(stderr, err11a, infile); - return (-1); - } + if (getRank(in, strm) == -1) { + (void) fprintf(stderr, err6b, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[RANK] = 1; + break; - if (getOutputByteOrder(in, strm) == -1) - { - (void) fprintf(stderr, err11b, infile); - return (-1); - } - in->configOptionVector[OUTPUT_B_ORDER] = 1; - break; - - case 9: /* CHUNKED-DIMENSION-SIZES */ - if (in->configOptionVector[CHUNK] == 1) - { - (void) fprintf(stderr, err12a, infile); - return (-1); - } - /* cant appear before dimension sizes have been provided */ - if (in->configOptionVector[DIM] == 0) - { - (void) fprintf(stderr, err12b, infile); - return (-1); - } + case 4: /* DIMENSION-SIZES */ + if (in->configOptionVector[DIM] == 1) { + (void) fprintf(stderr, err7a, infile); + fclose(strm); + return (-1); + } - if (getChunkedDimensionSizes(in, strm) == -1) - { - (void) fprintf(stderr, err12c, infile); - return (-1); - } - in->configOptionVector[CHUNK] = 1; - break; - - case 10: /* COMPRESSION-TYPE */ - if (in->configOptionVector[COMPRESS] == 1) - { - (void) fprintf(stderr, err13a, infile); - return (-1); - } + if (in->configOptionVector[RANK] == 0) { + (void) fprintf(stderr, err7b, infile); + fclose(strm); + return (-1); + } + if (getDimensionSizes(in, strm) == -1) { + (void) fprintf(stderr, err7c, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[DIM] = 1; + break; - if (getCompressionType(in, strm) == -1) - { - (void) fprintf(stderr, err13b, infile); - return (-1); - } - in->configOptionVector[COMPRESS] = 1; + case 5: /* OUTPUT-CLASS */ + if (in->configOptionVector[OUTPUT_CLASS] == 1) { + (void) fprintf(stderr, err8a, infile); + fclose(strm); + return (-1); + } - if (in->configOptionVector[COMPRESS_PARAM] == 0) - { - if (in->compressionType == 0) - in->compressionParam = 6; /* default value if compressionType is GZIP */ - } - break; + if (getOutputClass(in, strm) == -1) { + (void) fprintf(stderr, err8b, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[OUTPUT_CLASS] = 1; + break; - case 11: /* COMPRESSION-PARAM */ - if (in->configOptionVector[COMPRESS_PARAM] == 1) - { - (void) fprintf(stderr, err14a, infile); - return (-1); - } + case 6: /* OUTPUT-SIZE */ + if (in->configOptionVector[OUTPUT_SIZE] == 1) { + (void) fprintf(stderr, err9a, infile); + fclose(strm); + return (-1); + } - if (getCompressionParameter(in, strm) == -1) - { - (void) fprintf(stderr, err14b, infile); - return (-1); - } + if (getOutputSize(in, strm) == -1) { + (void) fprintf(stderr, err9b, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[OUTPUT_SIZE] = 1; + break; - in->configOptionVector[COMPRESS_PARAM] = 1; + case 7: /* OUTPUT-ARCHITECTURE */ + if (in->configOptionVector[OUTPUT_ARCH] == 1) { + (void) fprintf(stderr, err10a, infile); + fclose(strm); + return (-1); + } - if (in->configOptionVector[COMPRESS] == 0) - in->compressionType = 0; + if (getOutputArchitecture(in, strm) == -1) { + (void) fprintf(stderr, err10b, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[OUTPUT_ARCH] = 1; + break; + case 8: /* OUTPUT-BYTE-ORDER */ + if (in->configOptionVector[OUTPUT_B_ORDER] == 1) { + (void) fprintf(stderr, err11a, infile); + fclose(strm); + return (-1); + } - break; + if (getOutputByteOrder(in, strm) == -1) { + (void) fprintf(stderr, err11b, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[OUTPUT_B_ORDER] = 1; + break; - case 12: /* EXTERNAL-STORAGE */ - if (in->configOptionVector[EXTERNAL] == 1) - { - (void) fprintf(stderr, err15a, infile); - return (-1); - } + case 9: /* CHUNKED-DIMENSION-SIZES */ + if (in->configOptionVector[CHUNK] == 1) { + (void) fprintf(stderr, err12a, infile); + fclose(strm); + return (-1); + } + /* cant appear before dimension sizes have been provided */ + if (in->configOptionVector[DIM] == 0) { + (void) fprintf(stderr, err12b, infile); + fclose(strm); + return (-1); + } - if (getExternalFilename(in, strm) == -1) - { - (void) fprintf(stderr, err15b, infile); - return (-1); - } - in->configOptionVector[EXTERNAL] = 1; - break; - - case 13: /* MAXIMUM-DIMENSIONS */ - if (in->configOptionVector[EXTEND] == 1) - { - (void) fprintf(stderr, err16a, infile); - return (-1); - } - /* cant appear before dimension sizes have been provided */ - if (in->configOptionVector[DIM] == 0) - { - (void) fprintf(stderr, err16b, infile); - return (-1); - } - if (getMaximumDimensionSizes(in, strm) == -1) - { - (void) fprintf(stderr, err16c, infile); - return (-1); - } - in->configOptionVector[EXTEND] = 1; - break; + if (getChunkedDimensionSizes(in, strm) == -1) { + (void) fprintf(stderr, err12c, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[CHUNK] = 1; + break; - default: - break; + case 10: /* COMPRESSION-TYPE */ + if (in->configOptionVector[COMPRESS] == 1) { + (void) fprintf(stderr, err13a, infile); + fclose(strm); + return (-1); + } + + if (getCompressionType(in, strm) == -1) { + (void) fprintf(stderr, err13b, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[COMPRESS] = 1; + + if (in->configOptionVector[COMPRESS_PARAM] == 0) { + if (in->compressionType == 0) + in->compressionParam = 6; /* default value if compressionType is GZIP */ + } + break; + + case 11: /* COMPRESSION-PARAM */ + if (in->configOptionVector[COMPRESS_PARAM] == 1) { + (void) fprintf(stderr, err14a, infile); + fclose(strm); + return (-1); + } + + if (getCompressionParameter(in, strm) == -1) { + (void) fprintf(stderr, err14b, infile); + fclose(strm); + return (-1); + } + + in->configOptionVector[COMPRESS_PARAM] = 1; + + if (in->configOptionVector[COMPRESS] == 0) + in->compressionType = 0; + + break; + + case 12: /* EXTERNAL-STORAGE */ + if (in->configOptionVector[EXTERNAL] == 1) { + (void) fprintf(stderr, err15a, infile); + fclose(strm); + return (-1); + } + + if (getExternalFilename(in, strm) == -1) { + (void) fprintf(stderr, err15b, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[EXTERNAL] = 1; + break; + + case 13: /* MAXIMUM-DIMENSIONS */ + if (in->configOptionVector[EXTEND] == 1) { + (void) fprintf(stderr, err16a, infile); + fclose(strm); + return (-1); + } + /* cant appear before dimension sizes have been provided */ + if (in->configOptionVector[DIM] == 0) { + (void) fprintf(stderr, err16b, infile); + fclose(strm); + return (-1); + } + if (getMaximumDimensionSizes(in, strm) == -1) { + (void) fprintf(stderr, err16c, infile); + fclose(strm); + return (-1); + } + in->configOptionVector[EXTEND] = 1; + break; + + default: + break; + } + } + /* + check if keywords obtained are valid + if yes, return 0 else error + */ + + if (validateConfigurationParameters(in) == -1) { + (void) fprintf(stderr, err17, infile); + fclose(strm); + return (-1); } - } - /* - check if keywords obtained are valid - if yes, return 0 else error - */ - - if (validateConfigurationParameters(in) == -1) - { - (void) fprintf(stderr, err17, infile); - return (-1); - } - return (0); + fclose(strm); + return (0); } -static int -validateConfigurationParameters(struct Input * in) +static int validateConfigurationParameters(struct Input *in) { - const char *err1 = "One or more of the required fields (RANK, DIMENSION-SIZES) missing.\n"; - const char *err2 = "Cannot specify chunking or compression or extendible data sets with the external file option.\n"; - const char *err3 = "Cannot specify the compression or the extendible data sets without the chunking option.\n"; - const char *err4a = "OUTPUT-ARCHITECTURE cannot be STD if OUTPUT-CLASS is floating point (FP).\n"; - const char *err4b = "OUTPUT-ARCHITECTURE cannot be IEEE if OUTPUT-CLASS is integer (IN).\n"; - const char *err5 = "For OUTPUT-CLASS FP, valid values for OUTPUT-SIZE are (32, 64) .\n"; + const char *err1 = "One or more of the required fields (RANK, DIMENSION-SIZES) missing.\n"; + const char *err2 = "Cannot specify chunking or compression or extendible data sets with the external file option.\n"; + const char *err3 = "Cannot specify the compression or the extendible data sets without the chunking option.\n"; + const char *err4a = "OUTPUT-ARCHITECTURE cannot be STD if OUTPUT-CLASS is floating point (FP).\n"; + const char *err4b = "OUTPUT-ARCHITECTURE cannot be IEEE if OUTPUT-CLASS is integer (IN).\n"; + const char *err5 = "For OUTPUT-CLASS FP, valid values for OUTPUT-SIZE are (32, 64) .\n"; #ifdef _WIN32 - const char *err6 = "No support for reading 64-bit integer (INPUT-CLASS: IN, TEXTIN, UIN, TEXTUIN files\n"; + const char *err6 = "No support for reading 64-bit integer (INPUT-CLASS: IN, TEXTIN, UIN, TEXTUIN files\n"; #endif - /* for class STR other parameters are ignored */ - if (in->inputClass == 5) /* STR */ - return (0); - - if ( - (in->configOptionVector[DIM] != 1) || - (in->configOptionVector[RANK] != 1)) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + /* for class STR other parameters are ignored */ + if (in->inputClass == 5) /* STR */ + return (0); - if (in->configOptionVector[EXTERNAL] == 1) - { - if ((in->configOptionVector[COMPRESS] == 1) || - (in->configOptionVector[CHUNK] == 1) || - (in->configOptionVector[EXTEND] == 1)) - { - (void) fprintf(stderr, "%s", err2); - return (-1); + if ((in->configOptionVector[DIM] != 1) || (in->configOptionVector[RANK] != 1)) { + (void) fprintf(stderr, "%s", err1); + return (-1); } - } - if ((in->configOptionVector[COMPRESS] == 1) || - (in->configOptionVector[EXTEND] == 1)) - { - if (in->configOptionVector[CHUNK] != 1) - { - (void) fprintf(stderr, "%s", err3); - return (-1); + if (in->configOptionVector[EXTERNAL] == 1) { + if ((in->configOptionVector[COMPRESS] == 1) || (in->configOptionVector[CHUNK] == 1) || (in->configOptionVector[EXTEND] == 1)) { + (void) fprintf(stderr, "%s", err2); + return (-1); + } } - } - /* Arch cant be STD if O/p class is FP */ - if (in->outputArchitecture == 1) - if (in->outputClass == 1) - { - (void) fprintf(stderr, "%s", err4a); - return (-1); + if ((in->configOptionVector[COMPRESS] == 1) || (in->configOptionVector[EXTEND] == 1)) { + if (in->configOptionVector[CHUNK] != 1) { + (void) fprintf(stderr, "%s", err3); + return (-1); + } } - /* Arch cant be IEEE if O/p class is IN */ - if (in->outputArchitecture == 2) - if (in->outputClass == 0) - { - (void) fprintf(stderr, "%s", err4b); - return (-1); - } + /* Arch cant be STD if O/p class is FP */ + if (in->outputArchitecture == 1) + if (in->outputClass == 1) { + (void) fprintf(stderr, "%s", err4a); + return (-1); + } - if (in->outputClass == 1) - if(in->outputSize != 32 && - in->outputSize != 64 ) - { - (void) fprintf(stderr, "%s", err5); - return (-1); - } + /* Arch cant be IEEE if O/p class is IN */ + if (in->outputArchitecture == 2) + if (in->outputClass == 0) { + (void) fprintf(stderr, "%s", err4b); + return (-1); + } + + if (in->outputClass == 1) + if (in->outputSize != 32 && in->outputSize != 64) { + (void) fprintf(stderr, "%s", err5); + return (-1); + } #ifdef _WIN32 - if (in->inputSize == 64 && (in->inputClass == 0 || in->inputClass == 4 || in->inputClass == 6 || in->inputClass == 7) ) - { - (void) fprintf(stderr, "%s", err6); - return -1; - } + if (in->inputSize == 64 && (in->inputClass == 0 || in->inputClass == 4 || in->inputClass == 6 || in->inputClass == 7) ) { + (void) fprintf(stderr, "%s", err6); + return -1; + } #endif - return (0); + return (0); } -static int -mapKeywordToIndex(char *key) +static int mapKeywordToIndex(char *key) { - int i; + int i; - for (i=0; i= MAX_PATH_NAME_LENGTH) - { - (void) fprintf(stderr, err1); - return (-1); - } - HDstrcpy(path->group[i++],token); - - - while (1) - { - token = HDstrtok (NULL, delimiter); - if (token == NULL) - break; - if (HDstrlen(token) >= MAX_PATH_NAME_LENGTH) - { - (void) fprintf(stderr, err1); - return (-1); + const char delimiter[] = "/"; + char *token; + int i = 0; + const char *err1 = "Path string larger than MAX_PATH_NAME_LENGTH.\n"; + + token = HDstrtok (temp, delimiter); + if (HDstrlen(token) >= MAX_PATH_NAME_LENGTH) { + (void) fprintf(stderr, err1); + return (-1); } HDstrcpy(path->group[i++],token); - } - path->count = i; - return (0); + + while (1) { + token = HDstrtok (NULL, delimiter); + if (token == NULL) + break; + if (HDstrlen(token) >= MAX_PATH_NAME_LENGTH) { + (void) fprintf(stderr, err1); + return (-1); + } + HDstrcpy(path->group[i++],token); + } + path->count = i; + return (0); } -static int -parseDimensions(struct Input *in, char *strm) +static int parseDimensions(struct Input *in, char *strm) { - const char delimiter[] = ","; - char temp[255]; - char *token; - int i=0; - const char *err1 = "Unable to allocate dynamic memory.\n"; - - HDstrncpy(temp, strm, sizeof(temp)); - temp[sizeof(temp)-1] = '\0'; - HDstrtok (temp, delimiter); - - while (1) - { - token = HDstrtok (NULL, delimiter); - if (token == NULL) - break; - i++; - } - in->rank = i+1; - if ((in->sizeOfDimension = - (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - - i=0; - HDstrncpy(temp, strm, sizeof(temp)); - temp[sizeof(temp)-1] = '\0'; - in->sizeOfDimension[i++] = HDstrtol(HDstrtok (temp, delimiter), NULL, BASE_10); - - while (1) - { - token = HDstrtok (NULL, delimiter); - if (token == NULL) - break; - in->sizeOfDimension[i++] = HDstrtol(token, NULL, BASE_10); - } - return (0); + const char delimiter[] = ","; + char temp[255]; + char *token; + int i = 0; + const char *err1 = "Unable to allocate dynamic memory.\n"; + + HDstrncpy(temp, strm, sizeof(temp)); + temp[sizeof(temp) - 1] = '\0'; + HDstrtok (temp, delimiter); + + while (1) { + token = HDstrtok (NULL, delimiter); + if (token == NULL) + break; + i++; + } + in->rank = i + 1; + if ((in->sizeOfDimension = (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + + i = 0; + HDstrncpy(temp, strm, sizeof(temp)); + temp[sizeof(temp) - 1] = '\0'; + in->sizeOfDimension[i++] + = HDstrtol(HDstrtok (temp, delimiter), NULL, BASE_10); + + while (1) { + token = HDstrtok (NULL, delimiter); + if (token == NULL) + break; + in->sizeOfDimension[i++] = HDstrtol(token, NULL, BASE_10); + } + return (0); } -static int -getOutputClass(struct Input *in, FILE** strm) +static int getOutputClass(struct Input *in, FILE *strm) { - char temp[255]; - int kindex; - const char *err1 = "Unable to get 'string' value.\n"; - const char *err2 = "Invalid value for output class.\n"; + char temp[255]; + int kindex; + const char *err1 = "Unable to get 'string' value.\n"; + const char *err2 = "Invalid value for output class.\n"; - if (fscanf(*strm, "%s", temp) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + if (fscanf(strm, "%s", temp) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - if ((kindex = OutputClassStrToInt(temp)) == -1) - { - (void) fprintf(stderr, "%s", err2); - return (-1); - } + if ((kindex = OutputClassStrToInt(temp)) == -1) { + (void) fprintf(stderr, "%s", err2); + return (-1); + } - in->outputClass = kindex; - return (0); + in->outputClass = kindex; + return (0); } -static int -OutputClassStrToInt(char *temp) +static int OutputClassStrToInt(char *temp) { - int i; - char classKeywordTable[3][15] = { - "IN", - "FP", - "UIN" - }; - for (i=0; i<3; i++) - if (!HDstrcmp(classKeywordTable[i], temp)) return i; - - return -1; + int i; + char classKeywordTable[3][15] = { "IN", "FP", "UIN" }; + for (i = 0; i < 3; i++) + if (!HDstrcmp(classKeywordTable[i], temp)) + return i; + + return -1; } - /* same as getInputSize. But defined separately for extensibility */ -static int -getOutputSize(struct Input *in, FILE** strm) +/* same as getInputSize. But defined separately for extensibility */ +static int getOutputSize(struct Input *in, FILE *strm) { - int ival; - int i; - int outputSizeValidValues[4] = {8,16,32,64}; - const char *err1 = "Unable to get integer value.\n"; - const char *err2 = "Invalid value for output size.\n"; - - if (fscanf(*strm, "%d", (&ival)) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + int ival; + int i; + int outputSizeValidValues[4] = { 8, 16, 32, 64 }; + const char *err1 = "Unable to get integer value.\n"; + const char *err2 = "Invalid value for output size.\n"; - for (i=0; i<4; i++) - if (outputSizeValidValues[i] == ival) - { - in->outputSize = ival; - return (0); + if (fscanf(strm, "%d", (&ival)) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); } - (void) fprintf(stderr, "%s", err2); - return(-1); + + for (i = 0; i < 4; i++) + if (outputSizeValidValues[i] == ival) { + in->outputSize = ival; + return (0); + } + (void) fprintf(stderr, "%s", err2); + return (-1); } -static int -getInputClass(struct Input *in, char * temp) +static int getInputClass(struct Input *in, char * temp) { - int kindex; - const char *err1 = "Invalid value for input class.\n"; + int kindex; + const char *err1 = "Invalid value for input class.\n"; - if ((kindex = InputClassStrToInt(temp)) == -1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + if ((kindex = InputClassStrToInt(temp)) == -1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - in->inputClass = kindex; - return (0); + in->inputClass = kindex; + return (0); } -static int -InputClassStrToInt(char *temp) +static int InputClassStrToInt(char *temp) { - int i; - char classKeywordTable[8][15] = { - "TEXTIN", - "TEXTFP", - "TEXTFPE", - "FP", - "IN", - "STR", - "TEXTUIN", - "UIN" - }; - for (i=0; i<8; i++) - if (!HDstrcmp(classKeywordTable[i], temp)) return i; - return -1; + int i; + char classKeywordTable[8][15] = { "TEXTIN", "TEXTFP", "TEXTFPE", "FP", "IN", "STR", "TEXTUIN", "UIN" }; + for (i = 0; i < 8; i++) + if (!HDstrcmp(classKeywordTable[i], temp)) + return i; + return -1; } - /* same as getOutputSize. But defined separately for extensibility */ -static int -getInputSize(struct Input *in, int ival) +/* same as getOutputSize. But defined separately for extensibility */ +static int getInputSize(struct Input *in, int ival) { - int i; - int inputSizeValidValues[4] = {8,16,32,64}; - const char *err1 = "Invalid value for input size.\n"; - - for (i=0; i<4; i++) - if (inputSizeValidValues[i] == ival) - { - in->inputSize = ival; - return (0); - } - (void) fprintf(stderr, "%s", err1); - return(-1); + int i; + int inputSizeValidValues[4] = { 8, 16, 32, 64 }; + const char *err1 = "Invalid value for input size.\n"; + + for (i = 0; i < 4; i++) + if (inputSizeValidValues[i] == ival) { + in->inputSize = ival; + return (0); + } + (void) fprintf(stderr, "%s", err1); + return (-1); } -static int -getRank(struct Input *in, FILE** strm) +static int getRank(struct Input *in, FILE *strm) { - int ival; + int ival; - const char *err1 = "Unable to get integer value.\n"; - const char *err2 = "Invalid value for rank.\n"; + const char *err1 = "Unable to get integer value.\n"; + const char *err2 = "Invalid value for rank.\n"; - if (fscanf(*strm, "%d", (&ival)) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - if (ival >=MIN_NUM_DIMENSION && ival <=MAX_NUM_DIMENSION ) - { - in->rank = ival; - return (0); - } + if (fscanf(strm, "%d", (&ival)) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } + if (ival >= MIN_NUM_DIMENSION && ival <= MAX_NUM_DIMENSION) { + in->rank = ival; + return (0); + } - (void) fprintf(stderr, "%s", err2); - return(-1); + (void) fprintf(stderr, "%s", err2); + return (-1); } - /* same as getChunkedDimensionSizes. But defined separately for extensibility */ -static int -getDimensionSizes(struct Input *in, FILE **strm) +/* same as getChunkedDimensionSizes. But defined separately for extensibility */ +static int getDimensionSizes(struct Input *in, FILE *strm) { - int ival; - int i=0; + int ival; + int i = 0; - const char *err1 = "Unable to allocate dynamic memory.\n"; - const char *err2 = "No. of dimensions for which dimension sizes provided is not equal to provided rank.\n"; + const char *err1 = "Unable to allocate dynamic memory.\n"; + const char *err2 = "No. of dimensions for which dimension sizes provided is not equal to provided rank.\n"; - if ((in->sizeOfDimension = - (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + if ((in->sizeOfDimension = (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - while (fscanf(*strm, "%d", (&ival)) == 1) - in->sizeOfDimension[i++] = ival; + while (fscanf(strm, "%d", (&ival)) == 1) + in->sizeOfDimension[i++] = ival; - if (in->rank != i) - { - (void) fprintf(stderr, "%s", err2); - return (-1); - } - return (0); + if (in->rank != i) { + (void) fprintf(stderr, "%s", err2); + return (-1); + } + return (0); } - /* same as getDimensionSizes. But defined separately for extensibility */ -static int -getChunkedDimensionSizes(struct Input *in, FILE **strm) +/* same as getDimensionSizes. But defined separately for extensibility */ +static int getChunkedDimensionSizes(struct Input *in, FILE *strm) { - int ival; - int i=0; + int ival; + int i = 0; - const char *err1 = "Unable to allocate dynamic memory.\n"; - const char *err2 = "No. of dimensions for which chunked dimension sizes provided is not equal to provided rank.\n"; - const char *err3 = "The CHUNKED-DIMENSION-SIZES cannot exceed the sizes of DIMENSION-SIZES\n"; + const char *err1 = "Unable to allocate dynamic memory.\n"; + const char *err2 = "No. of dimensions for which chunked dimension sizes provided is not equal to provided rank.\n"; + const char *err3 = "The CHUNKED-DIMENSION-SIZES cannot exceed the sizes of DIMENSION-SIZES\n"; - if ((in->sizeOfChunk = - (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - - while (fscanf(*strm, "%d", (&ival)) == 1) - in->sizeOfChunk[i++] = ival; + if ((in->sizeOfChunk = (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - if (in->rank != i) - { - (void) fprintf(stderr, "%s", err2); - return (-1); - } + while (fscanf(strm, "%d", (&ival)) == 1) + in->sizeOfChunk[i++] = ival; - for (i=0; irank; i++) - if (in->sizeOfChunk[i] > in->sizeOfDimension[i]) - { - (void) fprintf(stderr, "%s", err3); - return (-1); + if (in->rank != i) { + (void) fprintf(stderr, "%s", err2); + return (-1); } - return (0); + + for (i = 0; i < in->rank; i++) + if (in->sizeOfChunk[i] > in->sizeOfDimension[i]) { + (void) fprintf(stderr, "%s", err3); + return (-1); + } + return (0); } -static int -getMaximumDimensionSizes(struct Input *in, FILE **strm) +static int getMaximumDimensionSizes(struct Input *in, FILE *strm) { - int ival; - int i=0; + int ival; + int i = 0; - const char *err1 = "Unable to allocate dynamic memory.\n"; - const char *err2 = "No. of dimensions for which maximum dimension sizes provided is not equal to provided rank.\n"; - const char *err3 = "The MAXIMUM-DIMENSIONS cannot be less than the sizes of DIMENSION-SIZES. Exception: can be -1 to indicate unlimited size\n"; + const char *err1 = "Unable to allocate dynamic memory.\n"; + const char *err2 = "No. of dimensions for which maximum dimension sizes provided is not equal to provided rank.\n"; + const char *err3 = "The MAXIMUM-DIMENSIONS cannot be less than the sizes of DIMENSION-SIZES. Exception: can be -1 to indicate unlimited size\n"; - if ((in->maxsizeOfDimension = - (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } - - while (fscanf(*strm, "%d", (&ival)) == 1) - { - if (ival == -1) - in->maxsizeOfDimension[i++] = H5S_UNLIMITED; - else - in->maxsizeOfDimension[i++] = ival; - } - - if (in->rank != i) - { - (void) fprintf(stderr, "%s", err2); - return (-1); - } + if ((in->maxsizeOfDimension = (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - for (i=0; irank; i++) - { - if (in->maxsizeOfDimension[i] != H5S_UNLIMITED) - if (in->maxsizeOfDimension[i] < in->sizeOfDimension[i]) - { - (void) fprintf(stderr, "%s", err3); + while (fscanf(strm, "%d", (&ival)) == 1) { + if (ival == -1) + in->maxsizeOfDimension[i++] = H5S_UNLIMITED; + else + in->maxsizeOfDimension[i++] = ival; + } + + if (in->rank != i) { + (void) fprintf(stderr, "%s", err2); return (-1); - } - } - return (0); + } + + for (i = 0; i < in->rank; i++) { + if (in->maxsizeOfDimension[i] != H5S_UNLIMITED) + if (in->maxsizeOfDimension[i] < in->sizeOfDimension[i]) { + (void) fprintf(stderr, "%s", err3); + return (-1); + } + } + return (0); } -static int -getOutputArchitecture(struct Input *in, FILE** strm) +static int getOutputArchitecture(struct Input *in, FILE *strm) { - char temp[255]; - int kindex; - const char *err1 = "Unable to get 'string' value.\n"; - const char *err2 = "Invalid value for output architecture.\n"; + char temp[255]; + int kindex; + const char *err1 = "Unable to get 'string' value.\n"; + const char *err2 = "Invalid value for output architecture.\n"; - if (fscanf(*strm, "%s", temp) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + if (fscanf(strm, "%s", temp) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - if ((kindex = OutputArchStrToInt(temp)) == -1) - { - (void) fprintf(stderr, "%s", err2); - return (-1); - } + if ((kindex = OutputArchStrToInt(temp)) == -1) { + (void) fprintf(stderr, "%s", err2); + return (-1); + } - in->outputArchitecture = kindex; - return (0); + in->outputArchitecture = kindex; + return (0); } -static int -OutputArchStrToInt(char *temp) +static int OutputArchStrToInt(char *temp) { - int i; - char outputArchKeywordTable[8][15] = { - "NATIVE", - "STD", - "IEEE", - "INTEL", - "CRAY", - "MIPS", - "ALPHA", - "UNIX" - }; - for (i=0; i<8; i++) - if (!HDstrcmp(outputArchKeywordTable[i], temp)) return i; - return -1; + int i; + char outputArchKeywordTable[8][15] = { "NATIVE", "STD", "IEEE", "INTEL", + "CRAY", "MIPS", "ALPHA", "UNIX" }; + for (i = 0; i < 8; i++) + if (!HDstrcmp(outputArchKeywordTable[i], temp)) + return i; + return -1; } -static int -getOutputByteOrder(struct Input *in, FILE** strm) +static int getOutputByteOrder(struct Input *in, FILE *strm) { - char temp[255]; - int kindex; - const char *err1 = "Unable to get 'string' value.\n"; - const char *err2 = "Invalid value for output byte-order.\n"; + char temp[255]; + int kindex; + const char *err1 = "Unable to get 'string' value.\n"; + const char *err2 = "Invalid value for output byte-order.\n"; - if (fscanf(*strm, "%s", temp) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + if (fscanf(strm, "%s", temp) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - if ((kindex = OutputByteOrderStrToInt(temp)) == -1) - { - (void) fprintf(stderr, "%s", err2); - return (-1); - } + if ((kindex = OutputByteOrderStrToInt(temp)) == -1) { + (void) fprintf(stderr, "%s", err2); + return (-1); + } - in->outputByteOrder = kindex; - return (0); + in->outputByteOrder = kindex; + return (0); } -static int -OutputByteOrderStrToInt(char *temp) +static int OutputByteOrderStrToInt(char *temp) { - int i; - char outputByteOrderKeywordTable[2][15] = { - "BE", - "LE" - }; - for (i=0; i<2; i++) - if (!HDstrcmp(outputByteOrderKeywordTable[i], temp)) return i; - return -1; + int i; + char outputByteOrderKeywordTable[2][15] = { "BE", "LE" }; + for (i = 0; i < 2; i++) + if (!HDstrcmp(outputByteOrderKeywordTable[i], temp)) + return i; + return -1; } -static int -getCompressionType(struct Input *in, FILE** strm) +static int getCompressionType(struct Input *in, FILE *strm) { - char temp[255]; - int kindex; - const char *err1 = "Unable to get 'string' value.\n"; - const char *err2 = "Invalid value for compression.\n"; + char temp[255]; + int kindex; + const char *err1 = "Unable to get 'string' value.\n"; + const char *err2 = "Invalid value for compression.\n"; - if (fscanf(*strm, "%s", temp) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + if (fscanf(strm, "%s", temp) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - if ((kindex = CompressionTypeStrToInt(temp)) == -1) - { - (void) fprintf(stderr, "%s", err2); - return (-1); - } + if ((kindex = CompressionTypeStrToInt(temp)) == -1) { + (void) fprintf(stderr, "%s", err2); + return (-1); + } - in->compressionType = kindex; - return (0); + in->compressionType = kindex; + return (0); } -static int -CompressionTypeStrToInt(char *temp) +static int CompressionTypeStrToInt(char *temp) { - /* currently supports only GZIP */ - /* can be extended by adding fields to the table */ - - int i; - char CompressionTypeKeywordTable[1][15] = { - "GZIP" - }; - for (i=0; i<1; i++) - if (!HDstrcmp(CompressionTypeKeywordTable[i], temp)) return i; - return -1; + /* currently supports only GZIP */ + /* can be extended by adding fields to the table */ + + int i; + char CompressionTypeKeywordTable[1][15] = { "GZIP" }; + for (i = 0; i < 1; i++) + if (!HDstrcmp(CompressionTypeKeywordTable[i], temp)) + return i; + return -1; } -static int -getCompressionParameter(struct Input *in, FILE** strm) +static int getCompressionParameter(struct Input *in, FILE *strm) { - /* currently supports only GZIP */ - /* can be extended by adding more values to COMPRESSION-TYPE and - handling the paramters here by adding more cases */ - - int ival; - const char *err1 = "Unable to get integer value.\n"; - const char *err2 = "Invalid value for compression paramter.\n"; - const char *err3 = "Unsupported Compression Type.\n"; - - switch (in->compressionType) - { - case 0: /* GZIP */ - if (fscanf(*strm, "%d", (&ival)) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + /* currently supports only GZIP */ + /* can be extended by adding more values to COMPRESSION-TYPE and */ + /* handling the paramters here by adding more cases */ + + int ival; + const char *err1 = "Unable to get integer value.\n"; + const char *err2 = "Invalid value for compression paramter.\n"; + const char *err3 = "Unsupported Compression Type.\n"; + + switch (in->compressionType) { + case 0: /* GZIP */ + if (fscanf(strm, "%d", (&ival)) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - if (ival <0 || ival > 9) - { - (void) fprintf(stderr, "%s", err2); - return (-1); - } - in->compressionParam = ival; - return (0); + if (ival < 0 || ival > 9) { + (void) fprintf(stderr, "%s", err2); + return (-1); + } + in->compressionParam = ival; + return (0); default: - (void) fprintf(stderr, "%s", err3); - return (-1); - } + (void) fprintf(stderr, "%s", err3); + return (-1); + } } -static int -getExternalFilename(struct Input *in, FILE** strm) +static int getExternalFilename(struct Input *in, FILE *strm) { - char temp[255]; - const char *err1 = "Unable to get 'string' value.\n"; + char temp[255]; + const char *err1 = "Unable to get 'string' value.\n"; - if (fscanf(*strm, "%s", temp) != 1) - { - (void) fprintf(stderr, "%s", err1); - return (-1); - } + if (fscanf(strm, "%s", temp) != 1) { + (void) fprintf(stderr, "%s", err1); + return (-1); + } - in->externFilename = (char *) HDmalloc ((size_t) (HDstrlen(temp)) * sizeof(char)); - (void) HDstrcpy(in->externFilename, temp); - return (0); + in->externFilename = (char *) HDmalloc ((size_t) (HDstrlen(temp)) * sizeof(char)); + (void) HDstrcpy(in->externFilename, temp); + return (0); } -void -setDefaultValues(struct Input *in, int count) +void setDefaultValues(struct Input *in, int count) { - int i; - char temp[255]; - char num[255]; - - in->inputClass = 3; /* FP */ - in->inputSize = 32; - in->outputClass = 1; /* FP */ - in->outputSize = 32; - in->rank = 0; - in->path.count = 1; - - HDstrcpy(temp, "dataset"); - sprintf(num, "%d", count); - HDstrcat(temp, num); - HDstrcpy(in->path.group[0], temp); - - in->outputArchitecture = 0; /* NATIVE */ - in->outputByteOrder = -1; /* use default */ - in->compressionType = 0; /* GZIP */ - for (i=0; iconfigOptionVector[i] = 0; + int i; + char temp[255]; + char num[255]; + + in->inputClass = 3; /* FP */ + in->inputSize = 32; + in->outputClass = 1; /* FP */ + in->outputSize = 32; + in->rank = 0; + in->path.count = 1; + + HDstrcpy(temp, "dataset"); + sprintf(num, "%d", count); + HDstrcat(temp, num); + HDstrcpy(in->path.group[0], temp); + + in->outputArchitecture = 0; /* NATIVE */ + in->outputByteOrder = -1; /* use default */ + in->compressionType = 0; /* GZIP */ + for (i = 0; i < NUM_KEYS; i++) + in->configOptionVector[i] = 0; } -hid_t -createOutputDataType(struct Input *in) +hid_t createOutputDataType(struct Input *in) { - hid_t new_type = (-1); - const char *err1 = "Invalid value for output class.\n"; + hid_t new_type = (-1); + const char *err1 = "Invalid value for output class.\n"; - switch (in->outputClass) - { + switch (in->outputClass) { case 0: - switch (in->outputArchitecture) - { + switch (in->outputArchitecture) { case 0: /* NATIVE */ - switch(in->outputSize) - { + switch (in->outputSize) { case 8: - new_type = H5Tcopy (H5T_NATIVE_CHAR); - break; + new_type = H5Tcopy(H5T_NATIVE_CHAR); + break; case 16: - new_type = H5Tcopy (H5T_NATIVE_SHORT); - break; + new_type = H5Tcopy(H5T_NATIVE_SHORT); + break; case 32: - new_type = H5Tcopy (H5T_NATIVE_INT); - break; + new_type = H5Tcopy(H5T_NATIVE_INT); + break; case 64: - new_type = H5Tcopy (H5T_NATIVE_LLONG); - break; - } - switch(in->outputByteOrder) - { - case -1: /* default */ + new_type = H5Tcopy(H5T_NATIVE_LLONG); break; - case 0: - H5Tset_order (new_type,H5T_ORDER_BE); + } + switch (in->outputByteOrder) { + case -1: /* default */ + break; + case 0: + H5Tset_order(new_type, H5T_ORDER_BE); break; - case 1: - H5Tset_order (new_type,H5T_ORDER_LE); + case 1: + H5Tset_order(new_type, H5T_ORDER_LE); break; - } - break; + } + break; case 1: /* STD */ - switch(in->outputSize) - { + switch (in->outputSize) { case 8: - switch(in->outputByteOrder) - { + switch (in->outputByteOrder) { case -1: case 0: - new_type = H5Tcopy (H5T_STD_I8BE); - break; + new_type = H5Tcopy(H5T_STD_I8BE); + break; case 1: - new_type = H5Tcopy (H5T_STD_I8LE); + new_type = H5Tcopy(H5T_STD_I8LE); + break; + } break; - } - break; case 16: - switch(in->outputByteOrder) - { + switch (in->outputByteOrder) { case -1: case 0: - new_type = H5Tcopy (H5T_STD_I16BE); - break; + new_type = H5Tcopy(H5T_STD_I16BE); + break; case 1: - new_type = H5Tcopy (H5T_STD_I16LE); + new_type = H5Tcopy(H5T_STD_I16LE); + break; + } break; - } - break; case 32: - switch(in->outputByteOrder) - { + switch (in->outputByteOrder) { case -1: case 0: - new_type = H5Tcopy (H5T_STD_I32BE); - break; + new_type = H5Tcopy(H5T_STD_I32BE); + break; case 1: - new_type = H5Tcopy (H5T_STD_I32LE); + new_type = H5Tcopy(H5T_STD_I32LE); + break; + } break; - } - break; case 64: - switch(in->outputByteOrder) - { + switch (in->outputByteOrder) { case -1: case 0: - new_type = H5Tcopy (H5T_STD_I64BE); - break; + new_type = H5Tcopy(H5T_STD_I64BE); + break; case 1: - new_type = H5Tcopy (H5T_STD_I64LE); + new_type = H5Tcopy(H5T_STD_I64LE); + break; + } break; - } + } break; - } - break; } break; case 1: - switch (in->outputArchitecture) - { + switch (in->outputArchitecture) { case 0: - switch(in->outputSize) - { + switch (in->outputSize) { case 32: - new_type = H5Tcopy (H5T_NATIVE_FLOAT); - break; + new_type = H5Tcopy(H5T_NATIVE_FLOAT); + break; case 64: - new_type = H5Tcopy (H5T_NATIVE_DOUBLE); - break; - } - switch(in->outputByteOrder) - { - case -1: /* DEFAULT */ + new_type = H5Tcopy(H5T_NATIVE_DOUBLE); break; - case 0: - H5Tset_order (new_type,H5T_ORDER_BE); + } + switch (in->outputByteOrder) { + case -1: /* DEFAULT */ + break; + case 0: + H5Tset_order(new_type, H5T_ORDER_BE); break; - case 1: - H5Tset_order (new_type,H5T_ORDER_LE); + case 1: + H5Tset_order(new_type, H5T_ORDER_LE); break; - } - break; + } + break; case 1: - /* STD not supported for float */ - break; + /* STD not supported for float */ + break; case 2: - switch(in->outputSize) - { + switch (in->outputSize) { case 32: - switch(in->outputByteOrder) - { + switch (in->outputByteOrder) { case -1: case 0: - new_type = H5Tcopy (H5T_IEEE_F32BE); - break; + new_type = H5Tcopy(H5T_IEEE_F32BE); + break; case 1: - new_type = H5Tcopy (H5T_IEEE_F32LE); + new_type = H5Tcopy(H5T_IEEE_F32LE); + break; + } break; - } - break; case 64: - switch(in->outputByteOrder) - { + switch (in->outputByteOrder) { case -1: case 0: - new_type = H5Tcopy (H5T_IEEE_F64BE); - break; + new_type = H5Tcopy(H5T_IEEE_F64BE); + break; case 1: - new_type = H5Tcopy (H5T_IEEE_F64LE); + new_type = H5Tcopy(H5T_IEEE_F64LE); + break; + } break; - } + } break; - } - break; - } - break; + } + break; case 2: - switch (in->outputArchitecture) - { - case 0: - switch(in->outputSize) - { - case 8: - new_type = H5Tcopy (H5T_NATIVE_UCHAR); - break; + switch (in->outputArchitecture) { + case 0: + switch (in->outputSize) { + case 8: + new_type = H5Tcopy(H5T_NATIVE_UCHAR); + break; - case 16: - new_type = H5Tcopy (H5T_NATIVE_USHORT); - break; + case 16: + new_type = H5Tcopy(H5T_NATIVE_USHORT); + break; - case 32: - new_type = H5Tcopy (H5T_NATIVE_UINT); - break; + case 32: + new_type = H5Tcopy(H5T_NATIVE_UINT); + break; - case 64: - new_type = H5Tcopy (H5T_NATIVE_ULLONG); - break; + case 64: + new_type = H5Tcopy(H5T_NATIVE_ULLONG); + break; } - switch(in->outputByteOrder) - { - case -1: /* Default */ + switch (in->outputByteOrder) { + case -1: /* Default */ break; - case 0: - H5Tset_order (new_type,H5T_ORDER_BE); + case 0: + H5Tset_order(new_type, H5T_ORDER_BE); break; - case 1: - H5Tset_order (new_type,H5T_ORDER_LE); + case 1: + H5Tset_order(new_type, H5T_ORDER_LE); break; - } + } break; - case 1: - switch(in->outputSize) - { - case 8: - switch(in->outputByteOrder) - { - case -1: - case 0: - new_type = H5Tcopy (H5T_STD_U8BE); - break; - - case 1: - new_type = H5Tcopy (H5T_STD_U8LE); - break; + case 1: + switch (in->outputSize) { + case 8: + switch (in->outputByteOrder) { + case -1: + case 0: + new_type = H5Tcopy(H5T_STD_U8BE); + break; + + case 1: + new_type = H5Tcopy(H5T_STD_U8LE); + break; } break; - case 16: - switch(in->outputByteOrder) - { - case -1: - case 0: - new_type = H5Tcopy (H5T_STD_U16BE); - break; - - case 1: - new_type = H5Tcopy (H5T_STD_U16LE); - break; + case 16: + switch (in->outputByteOrder) { + case -1: + case 0: + new_type = H5Tcopy(H5T_STD_U16BE); + break; + + case 1: + new_type = H5Tcopy(H5T_STD_U16LE); + break; } break; - case 32: - switch(in->outputByteOrder) - { - case -1: - case 0: - new_type = H5Tcopy (H5T_STD_U32BE); - break; - - case 1: - new_type = H5Tcopy (H5T_STD_U32LE); - break; + case 32: + switch (in->outputByteOrder) { + case -1: + case 0: + new_type = H5Tcopy(H5T_STD_U32BE); + break; + + case 1: + new_type = H5Tcopy(H5T_STD_U32LE); + break; } break; - case 64: - switch(in->outputByteOrder) - { - case -1: - case 0: - new_type = H5Tcopy (H5T_STD_U64BE); - break; - - case 1: - new_type = H5Tcopy (H5T_STD_U64LE); - break; + case 64: + switch (in->outputByteOrder) { + case -1: + case 0: + new_type = H5Tcopy(H5T_STD_U64BE); + break; + + case 1: + new_type = H5Tcopy(H5T_STD_U64LE); + break; } break; } break; - case 2: + case 2: /* IEEE not supported for INT */ - break; + break; } @@ -2397,48 +2194,44 @@ createOutputDataType(struct Input *in) return new_type; } -hid_t -createInputDataType(struct Input *in) +hid_t createInputDataType(struct Input *in) { - hid_t new_type = (-1); - const char *err1 = "Invalid value for input class.\n"; + hid_t new_type = (-1); + const char *err1 = "Invalid value for input class.\n"; - switch (in->inputClass) - { + switch (in->inputClass) { case 0: case 4: - switch(in->inputSize) - { - case 8: - new_type = H5Tcopy (H5T_NATIVE_CHAR); - break; - - case 16: - new_type = H5Tcopy (H5T_NATIVE_SHORT); - break; - - case 32: - new_type = H5Tcopy (H5T_NATIVE_INT); - break; - - case 64: - new_type = H5Tcopy (H5T_NATIVE_LLONG); - break; + switch (in->inputSize) { + case 8: + new_type = H5Tcopy(H5T_NATIVE_CHAR); + break; + + case 16: + new_type = H5Tcopy(H5T_NATIVE_SHORT); + break; + + case 32: + new_type = H5Tcopy(H5T_NATIVE_INT); + break; + + case 64: + new_type = H5Tcopy(H5T_NATIVE_LLONG); + break; } break; case 1: case 2: case 3: - switch(in->inputSize) - { - case 32: - new_type = H5Tcopy (H5T_NATIVE_FLOAT); - break; - - case 64: - new_type = H5Tcopy (H5T_NATIVE_DOUBLE); - break; + switch (in->inputSize) { + case 32: + new_type = H5Tcopy(H5T_NATIVE_FLOAT); + break; + + case 64: + new_type = H5Tcopy(H5T_NATIVE_DOUBLE); + break; } break; @@ -2447,23 +2240,22 @@ createInputDataType(struct Input *in) case 6: case 7: - switch(in->inputSize) - { - case 8: - new_type = H5Tcopy (H5T_NATIVE_UCHAR); - break; - - case 16: - new_type = H5Tcopy (H5T_NATIVE_USHORT); - break; - - case 32: - new_type = H5Tcopy (H5T_NATIVE_UINT); - break; - - case 64: - new_type = H5Tcopy (H5T_NATIVE_ULLONG); - break; + switch (in->inputSize) { + case 8: + new_type = H5Tcopy(H5T_NATIVE_UCHAR); + break; + + case 16: + new_type = H5Tcopy(H5T_NATIVE_USHORT); + break; + + case 32: + new_type = H5Tcopy(H5T_NATIVE_UINT); + break; + + case 64: + new_type = H5Tcopy(H5T_NATIVE_ULLONG); + break; } break; @@ -2471,161 +2263,159 @@ createInputDataType(struct Input *in) (void) fprintf(stderr, "%s", err1); return (-1); } - return new_type; + return new_type; } -static int -process(struct Options *opt) +static int process(struct Options *opt) { - struct Input *in; - hid_t file_id, group_id, handle; - hid_t dataset, dataspace = (-1); - FILE *strm, *extfile; - hid_t intype, outtype; - hid_t proplist; - hsize_t numOfElements = 1; - int j,k; - - const char *err1 = "Error creating HDF output file: %s.\n"; - const char *err2 = "Error in processing the configuration file: %s.\n"; - const char *err3 = "Error in reading the input file: %s.\n"; - const char *err4 = "Error in creating or opening external file.\n"; - const char *err5 = "Error in creating the output data set. Dataset with the same name may exist at the specified path\n"; - const char *err6 = "Error in writing the output data set.\n"; - - H5E_BEGIN_TRY { - if ((file_id = H5Fopen(opt->outfile, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) { - if ((file_id = H5Fcreate(opt->outfile, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) == FAIL) - { - (void) fprintf(stderr, err1, opt->outfile); - return (-1); - } - } - } H5E_END_TRY; + struct Input *in; + FILE *extfile; + hid_t file_id; + hid_t group_id; + hid_t handle; + hid_t dataset; + hid_t dataspace = (-1); + hid_t intype; + hid_t outtype; + hid_t proplist; + hsize_t numOfElements = 1; + int j; + int k; + + const char *err1 = "Error creating HDF output file: %s.\n"; + const char *err2 = "Error in processing the configuration file: %s.\n"; + const char *err3 = "Error in reading the input file: %s.\n"; + const char *err4 = "Error in creating or opening external file.\n"; + const char *err5 = "Error in creating the output data set. Dataset with the same name may exist at the specified path\n"; + const char *err6 = "Error in writing the output data set.\n"; - for (k = 0; k < opt->fcount; k++) - { - in = &(opt->infiles[k].in); - if (opt->infiles[k].config == 1) + H5E_BEGIN_TRY { - if (processConfigurationFile(opt->infiles[k].configfile, in, &strm) == -1) - { - (void) fprintf(stderr, err2, opt->infiles[k].configfile); - return (-1); + if ((file_id = H5Fopen(opt->outfile, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) { + if ((file_id = H5Fcreate(opt->outfile, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) == FAIL) { + (void) fprintf(stderr, err1, opt->outfile); + return (-1); + } } } - - if (processDataFile(opt->infiles[k].datafile, in, &strm, file_id ) == -1) - { - (void) fprintf(stderr, err3, opt->infiles[k].datafile); - return (-1); - } - - if (in->inputClass != 5) /* STR */ - { - - for (j=0; jrank;j++) - numOfElements *= in->sizeOfDimension[j]; - - /* disable error reporting */ - H5E_BEGIN_TRY { - /* create parent groups */ - if(in->path.count > 1) { - j = 0; - handle = file_id; - while(j < in->path.count - 1) { - if((group_id = H5Gopen2(handle, in->path.group[j], H5P_DEFAULT)) < 0) { - group_id = H5Gcreate2(handle, in->path.group[j++], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); - for (; j < in->path.count - 1; j++) - group_id = H5Gcreate2(group_id, in->path.group[j], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); - handle = group_id; - break; - } - handle = group_id; - j++; + H5E_END_TRY; + + for (k = 0; k < opt->fcount; k++) { + in = &(opt->infiles[k].in); + if (opt->infiles[k].config == 1) { + if (processConfigurationFile(opt->infiles[k].configfile, in) == -1) { + (void) fprintf(stderr, err2, opt->infiles[k].configfile); + return (-1); } } - else { - handle = file_id; - j=0; - } - /*enable error reporting */ - } H5E_END_TRY; + if (processDataFile(opt->infiles[k].datafile, in, file_id) == -1) { + (void) fprintf(stderr, err3, opt->infiles[k].datafile); + return (-1); + } - /*create data type */ - intype = createInputDataType(in); - outtype = createOutputDataType(in); + if (in->inputClass != 5) { /* STR */ + for (j = 0; j < in->rank; j++) + numOfElements *= in->sizeOfDimension[j]; - /* create property list */ - proplist = H5Pcreate (H5P_DATASET_CREATE); - if (in->configOptionVector[CHUNK] == 1) - { - H5Pset_layout (proplist, H5D_CHUNKED); - /* not reqd chunking is implied if set_chunk is used */ - H5Pset_chunk (proplist, in->rank, in->sizeOfChunk); - } + /* disable error reporting */ + H5E_BEGIN_TRY + { + /* create parent groups */ + if (in->path.count > 1) { + j = 0; + handle = file_id; + while (j < in->path.count - 1) { + if ((group_id = H5Gopen2(handle, in->path.group[j], H5P_DEFAULT)) < 0) { + group_id = H5Gcreate2(handle, in->path.group[j++], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + for (; j < in->path.count - 1; j++) + group_id = H5Gcreate2(group_id, in->path.group[j], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); + handle = group_id; + break; + } + handle = group_id; + j++; + } + } + else { + handle = file_id; + j = 0; + } - if (in->configOptionVector[COMPRESS] == 1) - { - H5Pset_deflate (proplist, (unsigned) in->compressionParam); - } + /*enable error reporting */ + } + H5E_END_TRY; + + /*create data type */ + intype = createInputDataType(in); + outtype = createOutputDataType(in); + + /* create property list */ + proplist = H5Pcreate(H5P_DATASET_CREATE); + if (in->configOptionVector[CHUNK] == 1) { + H5Pset_layout(proplist, H5D_CHUNKED); + /* not reqd chunking is implied if set_chunk is used */ + H5Pset_chunk(proplist, in->rank, in->sizeOfChunk); + } - if (in->configOptionVector[EXTERNAL] == 1) - { - /* creating the external file if it doesnt exist */ - if ((extfile = HDfopen(in->externFilename, "ab")) == NULL) - { - (void) fprintf(stderr, "%s", err4); - H5Pclose(proplist); - H5Sclose(dataspace); - H5Fclose(file_id); - return (-1); - } - HDfclose(extfile); - H5Pset_external (proplist, in->externFilename, (off_t)0, numOfElements * in->inputSize / 8); - } + if (in->configOptionVector[COMPRESS] == 1) { + H5Pset_deflate(proplist, (unsigned) in->compressionParam); + } - /* create dataspace */ - if(in->configOptionVector[EXTEND] == 1) - dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, in->maxsizeOfDimension); - else - dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, NULL); + if (in->configOptionVector[EXTERNAL] == 1) { + /* creating the external file if it doesnt exist */ + if ((extfile = HDfopen(in->externFilename, "ab")) == NULL) { + (void) fprintf(stderr, "%s", err4); + H5Pclose(proplist); + H5Sclose(dataspace); + H5Fclose(file_id); + return (-1); + } + HDfclose(extfile); + H5Pset_external(proplist, in->externFilename, (off_t) 0, numOfElements * in->inputSize / 8); + } - /* disable error reporting */ - H5E_BEGIN_TRY { - /* create data set */ - if((dataset = H5Dcreate2(handle, in->path.group[j], outtype, dataspace, H5P_DEFAULT, proplist, H5P_DEFAULT)) < 0) { - (void)fprintf(stderr, "%s", err5); - H5Pclose(proplist); - H5Sclose(dataspace); - H5Fclose(file_id); - return (-1); - } + /* create dataspace */ + if (in->configOptionVector[EXTEND] == 1) + dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, in->maxsizeOfDimension); + else + dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, NULL); - /*enable error reporting */ - } H5E_END_TRY; - - /* write dataset */ - if(H5Dwrite(dataset, intype, H5S_ALL, H5S_ALL, H5P_DEFAULT, (VOIDP)in->data) < 0) { - (void) fprintf(stderr, "%s", err6); - H5Dclose(dataset); - H5Pclose(proplist); - H5Sclose(dataspace); - H5Fclose(file_id); - return (-1); - } + /* disable error reporting */ + H5E_BEGIN_TRY + { + /* create data set */ + if ((dataset = H5Dcreate2(handle, in->path.group[j], outtype, dataspace, H5P_DEFAULT, proplist, H5P_DEFAULT)) < 0) { + (void) fprintf(stderr, "%s", err5); + H5Pclose(proplist); + H5Sclose(dataspace); + H5Fclose(file_id); + return (-1); + } - H5Dclose(dataset); - H5Pclose(proplist); - H5Sclose(dataspace); - } + /*enable error reporting */ + } + H5E_END_TRY; + + /* write dataset */ + if (H5Dwrite(dataset, intype, H5S_ALL, H5S_ALL, H5P_DEFAULT, (VOIDP) in->data) < 0) { + (void) fprintf(stderr, "%s", err6); + H5Dclose(dataset); + H5Pclose(proplist); + H5Sclose(dataspace); + H5Fclose(file_id); + return (-1); + } - } /* STR */ + H5Dclose(dataset); + H5Pclose(proplist); + H5Sclose(dataspace); + } + } /* STR */ - H5Fclose(file_id); - return (0); + H5Fclose(file_id); + return (0); } /* @@ -2636,294 +2426,409 @@ process(struct Options *opt) * Print a helpful summary of command usage and features. */ -void -help(char *name) +void help(char *name) { - (void) fprintf(stdout, "Name:\n\n"); - (void) fprintf(stdout, "\t%s\n\n", name); - (void) fprintf(stdout, "\t TOOL NAME:\n"); - (void) fprintf(stdout, "\t %s\n", name); - (void) fprintf(stdout, "\t SYNTAX:\n"); - (void) fprintf(stdout, "\t %s -h[elp], OR\n", name); - (void) fprintf(stdout, "\t %s -c[onfig] [ -c[config] ...]", name); - (void) fprintf(stdout, "\t\t\t\t -o[utfile] \n\n"); - (void) fprintf(stdout, "\t PURPOSE:\n"); - (void) fprintf(stdout, "\t To convert data stored in one or more ASCII or binary files\n"); - (void) fprintf(stdout, "\t into one or more datasets (in accordance with the \n"); - (void) fprintf(stdout, "\t user-specified type and storage properties) in an existing \n"); - (void) fprintf(stdout, "\t or new HDF5 file.\n\n"); - (void) fprintf(stdout, "\t DESCRIPTION:\n"); - (void) fprintf(stdout, "\t The primary objective of the utility is to convert floating\n"); - (void) fprintf(stdout, "\t point or integer data stored in ASCII text or binary form \n"); - (void) fprintf(stdout, "\t into a data-set according to the type and storage properties\n"); - (void) fprintf(stdout, "\t specified by the user. The utility can also accept ASCII\n"); - (void) fprintf(stdout, "\t text files and store the contents in a compact form as an\n"); - (void) fprintf(stdout, "\t array of one-dimensional strings.\n\n"); - (void) fprintf(stdout, "\t The input data to be written as a data-set can be provided\n"); - (void) fprintf(stdout, "\t to the utility in one of the following forms:\n"); - (void) fprintf(stdout, "\t 1. ASCII text file with numeric data (floating point or \n"); - (void) fprintf(stdout, "\t integer data). \n"); - (void) fprintf(stdout, "\t 2. Binary file with native floating point data (32-bit or \n"); - (void) fprintf(stdout, "\t 64-bit) \n"); - (void) fprintf(stdout, "\t 3. Binary file with native integer (signed or unsigned)\n"); - (void) fprintf(stdout, "\t data (8-bit or 16-bit or 32-bit or 64-bit). \n"); - (void) fprintf(stdout, "\t 4. ASCII text file containing strings (text data).\n"); - (void) fprintf(stdout, "\t \n"); - (void) fprintf(stdout, "\t Every input file is associated with a configuration file \n"); - (void) fprintf(stdout, "\t also provided as an input to the utility. (See Section \n"); - (void) fprintf(stdout, "\t \"CONFIGURATION FILE\" to know how it is to be organized).\n"); - (void) fprintf(stdout, "\t The class, size and dimensions of the input data is \n"); - (void) fprintf(stdout, "\t specified in this configuration file. A point to note is\n"); - (void) fprintf(stdout, "\t that the floating point data in the ASCII text file may be\n"); - (void) fprintf(stdout, "\t organized in the fixed floating form (for example 323.56)\n"); - (void) fprintf(stdout, "\t or in a scientific notation (for example 3.23E+02). A \n"); - (void) fprintf(stdout, "\t different input-class specification is to be used for both\n"); - (void) fprintf(stdout, "\t forms.\n\n"); - (void) fprintf(stdout, "\t The utility extracts the input data from the input file \n"); - (void) fprintf(stdout, "\t according to the specified parameters and saves it into \n"); - (void) fprintf(stdout, "\t an H5 dataset. \n\n"); - (void) fprintf(stdout, "\t The user can specify output type and storage properties in \n"); - (void) fprintf(stdout, "\t the configuration file. The user is requited to specify the \n"); - (void) fprintf(stdout, "\t path of the dataset. If the groups in the path leading to \n"); - (void) fprintf(stdout, "\t the data-set do not exist, the groups will be created by the\n"); - (void) fprintf(stdout, "\t utility. If no group is specified, the dataset will be\n"); - (void) fprintf(stdout, "\t created under the root group.\n\n"); - (void) fprintf(stdout, "\t In addition to the name, the user is also required to \n"); - (void) fprintf(stdout, "\t provide the class and size of output data to be written to \n"); - (void) fprintf(stdout, "\t the dataset and may optionally specify the output-architecure,\n"); - (void) fprintf(stdout, "\t and the output-byte-order. If output-architecture is not \n"); - (void) fprintf(stdout, "\t specified the default is NATIVE. Output-byte-orders are fixed\n"); - (void) fprintf(stdout, "\t for some architectures and may be specified only if output-\n"); - (void) fprintf(stdout, "\t architecture is IEEE, UNIX or STD.\n\n"); - (void) fprintf(stdout, "\t Also, layout and other storage properties such as \n"); - (void) fprintf(stdout, "\t compression, external storage and extendible data-sets may be\n"); - (void) fprintf(stdout, "\t optionally specified. The layout and storage properties \n"); - (void) fprintf(stdout, "\t denote how raw data is to be organized on the disk. If these \n"); - (void) fprintf(stdout, "\t options are not specified the default is Contiguous layout \n"); - (void) fprintf(stdout, "\t and storage.\n\n"); - (void) fprintf(stdout, "\t The dataset can be organized in any of the following ways:\n"); - (void) fprintf(stdout, "\t 1. Contiguous.\n"); - (void) fprintf(stdout, "\t 2. Chunked.\n"); - (void) fprintf(stdout, "\t 3. External Storage File (has to be contiguous)\n"); - (void) fprintf(stdout, "\t 4. Extendible data sets (has to be chunked)\n"); - (void) fprintf(stdout, "\t 5. Compressed. (has to be chunked)\n"); - (void) fprintf(stdout, "\t 6. Compressed & Extendible (has to be chunked)\n\n"); - (void) fprintf(stdout, "\t If the user wants to store raw data in a non-HDF file then \n"); - (void) fprintf(stdout, "\t the external storage file option is to be used and the name \n"); - (void) fprintf(stdout, "\t of the file is to be specified. \n\n"); - (void) fprintf(stdout, "\t If the user wants the dimensions of the data-set to be\n"); - (void) fprintf(stdout, "\t unlimited, the extendible data set option can be chosen. \n\n"); - (void) fprintf(stdout, "\t The user may also specify the type of compression and the \n"); - (void) fprintf(stdout, "\t level to which the data set must be compresses by setting \n"); - (void) fprintf(stdout, "\t the compressed option.\n\n"); - (void) fprintf(stdout, "\t SYNOPSIS:\n"); - (void) fprintf(stdout, "\t h5import -h[elp], OR\n"); - (void) fprintf(stdout, "\t h5import -c[onfig] \ + (void) fprintf(stdout, "Name:\n\n"); + (void) fprintf(stdout, "\t%s\n\n", name); + (void) fprintf(stdout, "\t TOOL NAME:\n"); + (void) fprintf(stdout, "\t %s\n", name); + (void) fprintf(stdout, "\t SYNTAX:\n"); + (void) fprintf(stdout, "\t %s -h[elp], OR\n", name); + (void) fprintf(stdout, + "\t %s -c[onfig] [ -c[config] ...]", name); + (void) fprintf(stdout, "\t\t\t\t -o[utfile] \n\n"); + (void) fprintf(stdout, "\t PURPOSE:\n"); + (void) fprintf(stdout, + "\t To convert data stored in one or more ASCII or binary files\n"); + (void) fprintf(stdout, + "\t into one or more datasets (in accordance with the \n"); + (void) fprintf(stdout, + "\t user-specified type and storage properties) in an existing \n"); + (void) fprintf(stdout, "\t or new HDF5 file.\n\n"); + (void) fprintf(stdout, "\t DESCRIPTION:\n"); + (void) fprintf(stdout, + "\t The primary objective of the utility is to convert floating\n"); + (void) fprintf(stdout, + "\t point or integer data stored in ASCII text or binary form \n"); + (void) fprintf(stdout, + "\t into a data-set according to the type and storage properties\n"); + (void) fprintf(stdout, + "\t specified by the user. The utility can also accept ASCII\n"); + (void) fprintf(stdout, + "\t text files and store the contents in a compact form as an\n"); + (void) fprintf(stdout, "\t array of one-dimensional strings.\n\n"); + (void) fprintf(stdout, + "\t The input data to be written as a data-set can be provided\n"); + (void) fprintf(stdout, "\t to the utility in one of the following forms:\n"); + (void) fprintf(stdout, + "\t 1. ASCII text file with numeric data (floating point or \n"); + (void) fprintf(stdout, "\t integer data). \n"); + (void) fprintf(stdout, + "\t 2. Binary file with native floating point data (32-bit or \n"); + (void) fprintf(stdout, "\t 64-bit) \n"); + (void) fprintf(stdout, + "\t 3. Binary file with native integer (signed or unsigned)\n"); + (void) fprintf(stdout, "\t data (8-bit or 16-bit or 32-bit or 64-bit). \n"); + (void) fprintf(stdout, + "\t 4. ASCII text file containing strings (text data).\n"); + (void) fprintf(stdout, "\t \n"); + (void) fprintf(stdout, + "\t Every input file is associated with a configuration file \n"); + (void) fprintf(stdout, + "\t also provided as an input to the utility. (See Section \n"); + (void) fprintf(stdout, + "\t \"CONFIGURATION FILE\" to know how it is to be organized).\n"); + (void) fprintf(stdout, + "\t The class, size and dimensions of the input data is \n"); + (void) fprintf(stdout, + "\t specified in this configuration file. A point to note is\n"); + (void) fprintf(stdout, + "\t that the floating point data in the ASCII text file may be\n"); + (void) fprintf(stdout, + "\t organized in the fixed floating form (for example 323.56)\n"); + (void) fprintf(stdout, + "\t or in a scientific notation (for example 3.23E+02). A \n"); + (void) fprintf(stdout, + "\t different input-class specification is to be used for both\n"); + (void) fprintf(stdout, "\t forms.\n\n"); + (void) fprintf(stdout, + "\t The utility extracts the input data from the input file \n"); + (void) fprintf(stdout, + "\t according to the specified parameters and saves it into \n"); + (void) fprintf(stdout, "\t an H5 dataset. \n\n"); + (void) fprintf(stdout, + "\t The user can specify output type and storage properties in \n"); + (void) fprintf(stdout, + "\t the configuration file. The user is requited to specify the \n"); + (void) fprintf(stdout, + "\t path of the dataset. If the groups in the path leading to \n"); + (void) fprintf(stdout, + "\t the data-set do not exist, the groups will be created by the\n"); + (void) fprintf(stdout, + "\t utility. If no group is specified, the dataset will be\n"); + (void) fprintf(stdout, "\t created under the root group.\n\n"); + (void) fprintf(stdout, + "\t In addition to the name, the user is also required to \n"); + (void) fprintf(stdout, + "\t provide the class and size of output data to be written to \n"); + (void) fprintf(stdout, + "\t the dataset and may optionally specify the output-architecure,\n"); + (void) fprintf(stdout, + "\t and the output-byte-order. If output-architecture is not \n"); + (void) fprintf(stdout, + "\t specified the default is NATIVE. Output-byte-orders are fixed\n"); + (void) fprintf(stdout, + "\t for some architectures and may be specified only if output-\n"); + (void) fprintf(stdout, "\t architecture is IEEE, UNIX or STD.\n\n"); + (void) fprintf(stdout, + "\t Also, layout and other storage properties such as \n"); + (void) fprintf(stdout, + "\t compression, external storage and extendible data-sets may be\n"); + (void) fprintf(stdout, + "\t optionally specified. The layout and storage properties \n"); + (void) fprintf(stdout, + "\t denote how raw data is to be organized on the disk. If these \n"); + (void) fprintf(stdout, + "\t options are not specified the default is Contiguous layout \n"); + (void) fprintf(stdout, "\t and storage.\n\n"); + (void) fprintf(stdout, + "\t The dataset can be organized in any of the following ways:\n"); + (void) fprintf(stdout, "\t 1. Contiguous.\n"); + (void) fprintf(stdout, "\t 2. Chunked.\n"); + (void) fprintf(stdout, + "\t 3. External Storage File (has to be contiguous)\n"); + (void) fprintf(stdout, + "\t 4. Extendible data sets (has to be chunked)\n"); + (void) fprintf(stdout, "\t 5. Compressed. (has to be chunked)\n"); + (void) fprintf(stdout, + "\t 6. Compressed & Extendible (has to be chunked)\n\n"); + (void) fprintf(stdout, + "\t If the user wants to store raw data in a non-HDF file then \n"); + (void) fprintf(stdout, + "\t the external storage file option is to be used and the name \n"); + (void) fprintf(stdout, "\t of the file is to be specified. \n\n"); + (void) fprintf(stdout, + "\t If the user wants the dimensions of the data-set to be\n"); + (void) fprintf(stdout, + "\t unlimited, the extendible data set option can be chosen. \n\n"); + (void) fprintf(stdout, + "\t The user may also specify the type of compression and the \n"); + (void) fprintf(stdout, + "\t level to which the data set must be compresses by setting \n"); + (void) fprintf(stdout, "\t the compressed option.\n\n"); + (void) fprintf(stdout, "\t SYNOPSIS:\n"); + (void) fprintf(stdout, "\t h5import -h[elp], OR\n"); + (void) fprintf( stdout, + "\t h5import -c[onfig] \ [ -c[config] ...] -o[utfile] \n\n"); - (void) fprintf(stdout, "\t -h[elp]:\n"); - (void) fprintf(stdout, "\t Prints this summary of usage, and exits.\n\n"); - (void) fprintf(stdout, "\t :\n"); - (void) fprintf(stdout, "\t Name of the Input file(s), containing a \n"); - (void) fprintf(stdout, "\t single n-dimensional floating point or integer array \n"); - (void) fprintf(stdout, "\t in either ASCII text, native floating point(32-bit \n"); - (void) fprintf(stdout, "\t or 64-bit) or native integer(8-bit or 16-bit or \n"); - (void) fprintf(stdout, "\t 32-bit or 64-bit). Data to be specified in the order\n"); - (void) fprintf(stdout, "\t of fastest changing dimensions first.\n\n"); - (void) fprintf(stdout, "\t -c[config] :\n"); - (void) fprintf(stdout, "\t Every input file should be associated with a \n"); - (void) fprintf(stdout, "\t configuration file and this is done by the -c option.\n"); - (void) fprintf(stdout, "\t is the name of the configuration file.\n"); - (void) fprintf(stdout, "\t (See Section \"CONFIGURATION FILE\")\n\n"); - (void) fprintf(stdout, "\t -o[utfile] :\n"); - (void) fprintf(stdout, "\t Name of the HDF5 output file. Data from one or more \n"); - (void) fprintf(stdout, "\t input files are stored as one or more data sets in \n"); - (void) fprintf(stdout, "\t . The output file may be an existing file or \n"); - (void) fprintf(stdout, "\t it maybe new in which case it will be created.\n\n\n"); - (void) fprintf(stdout, "\t CONFIGURATION FILE:\n"); - (void) fprintf(stdout, "\t The configuration file is an ASCII text file and must be \n"); - (void) fprintf(stdout, "\t organized as \"CONFIG-KEYWORD VALUE\" pairs, one pair on each \n"); - (void) fprintf(stdout, "\t line.\n\n"); - (void) fprintf(stdout, "\t The configuration file may have the following keywords each \n"); - (void) fprintf(stdout, "\t followed by an acceptable value.\n\n"); - (void) fprintf(stdout, "\t Required KEYWORDS:\n"); - (void) fprintf(stdout, "\t PATH\n"); - (void) fprintf(stdout, "\t INPUT-CLASS\n"); - (void) fprintf(stdout, "\t INPUT-SIZE\n"); - (void) fprintf(stdout, "\t RANK\n"); - (void) fprintf(stdout, "\t DIMENSION-SIZES\n"); - (void) fprintf(stdout, "\t OUTPUT-CLASS\n"); - (void) fprintf(stdout, "\t OUTPUT-SIZE\n\n"); - (void) fprintf(stdout, "\t Optional KEYWORDS:\n"); - (void) fprintf(stdout, "\t OUTPUT-ARCHITECTURE\n"); - (void) fprintf(stdout, "\t OUTPUT-BYTE-ORDER\n"); - (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES\n"); - (void) fprintf(stdout, "\t COMPRESSION-TYPE\n"); - (void) fprintf(stdout, "\t COMPRESSION-PARAM\n"); - (void) fprintf(stdout, "\t EXTERNAL-STORAGE\n"); - (void) fprintf(stdout, "\t MAXIMUM-DIMENSIONS\n\n\n"); - (void) fprintf(stdout, "\t Values for keywords:\n"); - (void) fprintf(stdout, "\t PATH:\n"); - (void) fprintf(stdout, "\t Strings separated by spaces to represent\n"); - (void) fprintf(stdout, "\t the path of the data-set. If the groups in\n"); - (void) fprintf(stdout, "\t the path do no exist, they will be created. \n"); - (void) fprintf(stdout, "\t For example,\n"); - (void) fprintf(stdout, "\t PATH grp1/grp2/dataset1\n"); - (void) fprintf(stdout, "\t PATH: keyword\n"); - (void) fprintf(stdout, "\t grp1: group under the root. If\n"); - (void) fprintf(stdout, "\t non-existent will be created.\n"); - (void) fprintf(stdout, "\t grp2: group under grp1. If \n"); - (void) fprintf(stdout, "\t non-existent will be created \n"); - (void) fprintf(stdout, "\t under grp1.\n"); - (void) fprintf(stdout, "\t dataset1: the name of the data-set \n"); - (void) fprintf(stdout, "\t to be created.\n\n"); - (void) fprintf(stdout, "\t INPUT-CLASS:\n"); - (void) fprintf(stdout, "\t String denoting the type of input data.\n"); - (void) fprintf(stdout, "\t (\"TEXTIN\", \"TEXTFP\", \"FP\", \"IN\", \n"); - (void) fprintf(stdout, "\t \"STR\", \"TEXTUIN\", \"UIN\"). \n"); - (void) fprintf(stdout, "\t INPUT-CLASS \"TEXTIN\" denotes an ASCII text \n"); - (void) fprintf(stdout, "\t file with signed integer data in ASCII form,\n"); - (void) fprintf(stdout, "\t INPUT-CLASS \"TEXTUIN\" denotes an ASCII text \n"); - (void) fprintf(stdout, "\t file with unsigned integer data in ASCII form,\n"); - (void) fprintf(stdout, "\t \"TEXTFP\" denotes an ASCII text file containing\n"); - (void) fprintf(stdout, "\t floating point data in the fixed notation\n"); - (void) fprintf(stdout, "\t (325.34),\n"); - (void) fprintf(stdout, "\t \"FP\" denotes a floating point binary file,\n"); - (void) fprintf(stdout, "\t \"IN\" denotes a signed integer binary file,\n"); - (void) fprintf(stdout, "\t \"UIN\" denotes an unsigned integer binary file,\n"); - (void) fprintf(stdout, "\t & \"STR\" denotes an ASCII text file the \n"); - (void) fprintf(stdout, "\t contents of which should be stored as an 1-D \n"); - (void) fprintf(stdout, "\t array of strings.\n"); - (void) fprintf(stdout, "\t If INPUT-CLASS is \"STR\", then RANK, \n"); - (void) fprintf(stdout, "\t DIMENSION-SIZES, OUTPUT-CLASS, OUTPUT-SIZE, \n"); - (void) fprintf(stdout, "\t OUTPUT-ARCHITECTURE and OUTPUT-BYTE-ORDER \n"); - (void) fprintf(stdout, "\t will be ignored.\n\n\n"); - (void) fprintf(stdout, "\t INPUT-SIZE:\n"); - (void) fprintf(stdout, "\t Integer denoting the size of the input data \n"); - (void) fprintf(stdout, "\t (8, 16, 32, 64). \n\n"); - (void) fprintf(stdout, "\t For floating point,\n"); - (void) fprintf(stdout, "\t INPUT-SIZE can be 32 or 64.\n"); - (void) fprintf(stdout, "\t For integers (signed and unsigned)\n"); - (void) fprintf(stdout, "\t INPUT-SIZE can be 8, 16, 32 or 64.\n\n"); - (void) fprintf(stdout, "\t RANK:\n"); - (void) fprintf(stdout, "\t Integer denoting the number of dimensions.\n\n"); - (void) fprintf(stdout, "\t DIMENSION-SIZES:\n"); - (void) fprintf(stdout, "\t Integers separated by spaces to denote the \n"); - (void) fprintf(stdout, "\t dimension sizes for the no. of dimensions \n"); - (void) fprintf(stdout, "\t determined by rank.\n\n"); - (void) fprintf(stdout, "\t OUTPUT-CLASS:\n"); - (void) fprintf(stdout, "\t String dentoting data type of the dataset to \n"); - (void) fprintf(stdout, "\t be written (\"IN\",\"FP\", \"UIN\")\n\n"); - (void) fprintf(stdout, "\t OUTPUT-SIZE:\n"); - (void) fprintf(stdout, "\t Integer denoting the size of the data in the \n"); - (void) fprintf(stdout, "\t output dataset to be written.\n"); - (void) fprintf(stdout, "\t If OUTPUT-CLASS is \"FP\", OUTPUT-SIZE can be \n"); - (void) fprintf(stdout, "\t 32 or 64.\n"); - (void) fprintf(stdout, "\t If OUTPUT-CLASS is \"IN\" or \"UIN\", OUTPUT-SIZE\n"); - (void) fprintf(stdout, "\t can be 8, 16, 32 or 64.\n\n"); - (void) fprintf(stdout, "\t OUTPUT-ARCHITECTURE:\n"); - (void) fprintf(stdout, "\t STRING denoting the type of output \n"); - (void) fprintf(stdout, "\t architecture. Can accept the following values\n"); - (void) fprintf(stdout, "\t STD\n"); - (void) fprintf(stdout, "\t IEEE\n"); - (void) fprintf(stdout, "\t INTEL\n"); - (void) fprintf(stdout, "\t CRAY\n"); - (void) fprintf(stdout, "\t MIPS\n"); - (void) fprintf(stdout, "\t ALPHA\n"); - (void) fprintf(stdout, "\t NATIVE (default)\n"); - (void) fprintf(stdout, "\t UNIX\n\n"); - (void) fprintf(stdout, "\t OUTPUT-BYTE-ORDER:\n"); - (void) fprintf(stdout, "\t String denoting the output-byte-order. Ignored\n"); - (void) fprintf(stdout, "\t if the OUTPUT-ARCHITECTURE is not specified or\n"); - (void) fprintf(stdout, "\t if it is IEEE, UNIX or STD. Can accept the \n"); - (void) fprintf(stdout, "\t following values.\n"); - (void) fprintf(stdout, "\t BE (default)\n"); - (void) fprintf(stdout, "\t LE\n\n"); - (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES:\n"); - (void) fprintf(stdout, "\t Integers separated by spaces to denote the \n"); - (void) fprintf(stdout, "\t dimension sizes of the chunk for the no. of \n"); - (void) fprintf(stdout, "\t dimensions determined by rank. Required field\n"); - (void) fprintf(stdout, "\t to denote that the dataset will be stored with\n"); - (void) fprintf(stdout, "\t chunked storage. If this field is absent the\n"); - (void) fprintf(stdout, "\t dataset will be stored with contiguous storage.\n\n"); - (void) fprintf(stdout, "\t COMPRESSION-TYPE:\n"); - (void) fprintf(stdout, "\t String denoting the type of compression to be\n"); - (void) fprintf(stdout, "\t used with the chunked storage. Requires the\n"); - (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES to be specified. The only \n"); - (void) fprintf(stdout, "\t currently supported compression method is GZIP. \n"); - (void) fprintf(stdout, "\t Will accept the following value\n"); - (void) fprintf(stdout, "\t GZIP\n\n"); - (void) fprintf(stdout, "\t COMPRESSION-PARAM:\n"); - (void) fprintf(stdout, "\t Integer used to denote compression level and \n"); - (void) fprintf(stdout, "\t this option is to be always specified when \n"); - (void) fprintf(stdout, "\t the COMPRESSION-TYPE option is specified. The\n"); - (void) fprintf(stdout, "\t values are applicable only to GZIP \n"); - (void) fprintf(stdout, "\t compression.\n"); - (void) fprintf(stdout, "\t Value 1-9: The level of Compression. \n"); - (void) fprintf(stdout, "\t 1 will result in the fastest \n"); - (void) fprintf(stdout, "\t compression while 9 will result in \n"); - (void) fprintf(stdout, "\t the best compression ratio. The default\n"); - (void) fprintf(stdout, "\t level of compression is 6.\n\n"); - (void) fprintf(stdout, "\t EXTERNAL-STORAGE:\n"); - (void) fprintf(stdout, "\t String to denote the name of the non-HDF5 file \n"); - (void) fprintf(stdout, "\t to store data to. Cannot be used if CHUNKED-\n"); - (void) fprintf(stdout, "\t DIMENSIONS or COMPRESSION-TYPE or EXTENDIBLE-\n"); - (void) fprintf(stdout, "\t DATASET is specified.\n"); - (void) fprintf(stdout, "\t Value : the name of the \n"); - (void) fprintf(stdout, "\t external file as a string to be used.\n\n"); - (void) fprintf(stdout, "\t MAXIMUM-DIMENSIONS:\n"); - (void) fprintf(stdout, "\t Integers separated by spaces to denote the \n"); - (void) fprintf(stdout, "\t maximum dimension sizes of all the \n"); - (void) fprintf(stdout, "\t dimensions determined by rank. Requires the\n"); - (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES to be specified. A value of \n"); - (void) fprintf(stdout, "\t -1 for any dimension implies UNLIMITED \n"); - (void) fprintf(stdout, "\t DIMENSION size for that particular dimension.\n\n"); - (void) fprintf(stdout, "\t EXAMPLES:\n"); - (void) fprintf(stdout, "\t 1. Configuration File may look like:\n\n"); - (void) fprintf(stdout, "\t PATH work h5 pkamat First-set\n"); - (void) fprintf(stdout, "\t INPUT-CLASS TEXTFP\n"); - (void) fprintf(stdout, "\t RANK 3\n"); - (void) fprintf(stdout, "\t DIMENSION-SIZES 5 2 4\n"); - (void) fprintf(stdout, "\t OUTPUT-CLASS FP\n"); - (void) fprintf(stdout, "\t OUTPUT-SIZE 64\n"); - (void) fprintf(stdout, "\t OUTPUT-ARCHITECTURE IEEE\n"); - (void) fprintf(stdout, "\t OUTPUT-BYTE-ORDER LE\n"); - (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES 2 2 2 \n\n"); - (void) fprintf(stdout, "\t The above configuration will accept a floating point array \n"); - (void) fprintf(stdout, "\t (5 x 2 x 4) in an ASCII file with the rank and dimension sizes \n"); - (void) fprintf(stdout, "\t specified and will save it in a chunked data-set (of pattern \n"); - (void) fprintf(stdout, "\t 2 X 2 X 2) of 64-bit floating point in the little-endian order \n"); - (void) fprintf(stdout, "\t and IEEE architecture. The dataset will be stored at\n"); - (void) fprintf(stdout, "\t \"/work/h5/pkamat/First-set\"\n\n"); - (void) fprintf(stdout, "\t 2. Another configuration could be:\n\n"); - (void) fprintf(stdout, "\t PATH Second-set\n"); - (void) fprintf(stdout, "\t INPUT-CLASS IN \n"); - (void) fprintf(stdout, "\t RANK 5\n"); - (void) fprintf(stdout, "\t DIMENSION-SIZES 6 3 5 2 4\n"); - (void) fprintf(stdout, "\t OUTPUT-CLASS IN\n"); - (void) fprintf(stdout, "\t OUTPUT-SIZE 32\n"); - (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES 2 2 2 2 2\n"); - (void) fprintf(stdout, "\t EXTENDIBLE-DATASET 1 3 \n"); - (void) fprintf(stdout, "\t COMPRESSION-TYPE GZIP\n"); - (void) fprintf(stdout, "\t COMPRESSION-PARAM 7\n\n\n"); - (void) fprintf(stdout, "\t The above configuration will accept an integer array \n"); - (void) fprintf(stdout, "\t (6 X 3 X 5 x 2 x 4) in a binary file with the rank and \n"); - (void) fprintf(stdout, "\t dimension sizes specified and will save it in a chunked data-set\n"); - (void) fprintf(stdout, "\t (of pattern 2 X 2 X 2 X 2 X 2) of 32-bit floating point in \n"); - (void) fprintf(stdout, "\t native format (as output-architecture is not specified). The \n"); - (void) fprintf(stdout, "\t first and the third dimension will be defined as unlimited. The \n"); - (void) fprintf(stdout, "\t data-set will be compressed using GZIP and a compression level \n"); - (void) fprintf(stdout, "\t of 7.\n"); - (void) fprintf(stdout, "\t The dataset will be stored at \"/Second-set\"\n\n"); - return; + (void) fprintf(stdout, "\t -h[elp]:\n"); + (void) fprintf(stdout, + "\t Prints this summary of usage, and exits.\n\n"); + (void) fprintf(stdout, "\t :\n"); + (void) fprintf(stdout, + "\t Name of the Input file(s), containing a \n"); + (void) fprintf(stdout, + "\t single n-dimensional floating point or integer array \n"); + (void) fprintf(stdout, + "\t in either ASCII text, native floating point(32-bit \n"); + (void) fprintf(stdout, + "\t or 64-bit) or native integer(8-bit or 16-bit or \n"); + (void) fprintf(stdout, + "\t 32-bit or 64-bit). Data to be specified in the order\n"); + (void) fprintf(stdout, "\t of fastest changing dimensions first.\n\n"); + (void) fprintf(stdout, "\t -c[config] :\n"); + (void) fprintf(stdout, + "\t Every input file should be associated with a \n"); + (void) fprintf(stdout, + "\t configuration file and this is done by the -c option.\n"); + (void) fprintf(stdout, + "\t is the name of the configuration file.\n"); + (void) fprintf(stdout, "\t (See Section \"CONFIGURATION FILE\")\n\n"); + (void) fprintf(stdout, "\t -o[utfile] :\n"); + (void) fprintf(stdout, + "\t Name of the HDF5 output file. Data from one or more \n"); + (void) fprintf(stdout, + "\t input files are stored as one or more data sets in \n"); + (void) fprintf(stdout, + "\t . The output file may be an existing file or \n"); + (void) fprintf(stdout, + "\t it maybe new in which case it will be created.\n\n\n"); + (void) fprintf(stdout, "\t CONFIGURATION FILE:\n"); + (void) fprintf(stdout, + "\t The configuration file is an ASCII text file and must be \n"); + (void) fprintf(stdout, + "\t organized as \"CONFIG-KEYWORD VALUE\" pairs, one pair on each \n"); + (void) fprintf(stdout, "\t line.\n\n"); + (void) fprintf(stdout, + "\t The configuration file may have the following keywords each \n"); + (void) fprintf(stdout, "\t followed by an acceptable value.\n\n"); + (void) fprintf(stdout, "\t Required KEYWORDS:\n"); + (void) fprintf(stdout, "\t PATH\n"); + (void) fprintf(stdout, "\t INPUT-CLASS\n"); + (void) fprintf(stdout, "\t INPUT-SIZE\n"); + (void) fprintf(stdout, "\t RANK\n"); + (void) fprintf(stdout, "\t DIMENSION-SIZES\n"); + (void) fprintf(stdout, "\t OUTPUT-CLASS\n"); + (void) fprintf(stdout, "\t OUTPUT-SIZE\n\n"); + (void) fprintf(stdout, "\t Optional KEYWORDS:\n"); + (void) fprintf(stdout, "\t OUTPUT-ARCHITECTURE\n"); + (void) fprintf(stdout, "\t OUTPUT-BYTE-ORDER\n"); + (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES\n"); + (void) fprintf(stdout, "\t COMPRESSION-TYPE\n"); + (void) fprintf(stdout, "\t COMPRESSION-PARAM\n"); + (void) fprintf(stdout, "\t EXTERNAL-STORAGE\n"); + (void) fprintf(stdout, "\t MAXIMUM-DIMENSIONS\n\n\n"); + (void) fprintf(stdout, "\t Values for keywords:\n"); + (void) fprintf(stdout, "\t PATH:\n"); + (void) fprintf(stdout, "\t Strings separated by spaces to represent\n"); + (void) fprintf(stdout, "\t the path of the data-set. If the groups in\n"); + (void) fprintf(stdout, + "\t the path do no exist, they will be created. \n"); + (void) fprintf(stdout, "\t For example,\n"); + (void) fprintf(stdout, "\t PATH grp1/grp2/dataset1\n"); + (void) fprintf(stdout, "\t PATH: keyword\n"); + (void) fprintf(stdout, "\t grp1: group under the root. If\n"); + (void) fprintf(stdout, "\t non-existent will be created.\n"); + (void) fprintf(stdout, "\t grp2: group under grp1. If \n"); + (void) fprintf(stdout, "\t non-existent will be created \n"); + (void) fprintf(stdout, "\t under grp1.\n"); + (void) fprintf(stdout, "\t dataset1: the name of the data-set \n"); + (void) fprintf(stdout, "\t to be created.\n\n"); + (void) fprintf(stdout, "\t INPUT-CLASS:\n"); + (void) fprintf(stdout, "\t String denoting the type of input data.\n"); + (void) fprintf(stdout, "\t (\"TEXTIN\", \"TEXTFP\", \"FP\", \"IN\", \n"); + (void) fprintf(stdout, "\t \"STR\", \"TEXTUIN\", \"UIN\"). \n"); + (void) fprintf(stdout, + "\t INPUT-CLASS \"TEXTIN\" denotes an ASCII text \n"); + (void) fprintf(stdout, + "\t file with signed integer data in ASCII form,\n"); + (void) fprintf(stdout, + "\t INPUT-CLASS \"TEXTUIN\" denotes an ASCII text \n"); + (void) fprintf(stdout, + "\t file with unsigned integer data in ASCII form,\n"); + (void) fprintf(stdout, + "\t \"TEXTFP\" denotes an ASCII text file containing\n"); + (void) fprintf(stdout, "\t floating point data in the fixed notation\n"); + (void) fprintf(stdout, "\t (325.34),\n"); + (void) fprintf(stdout, + "\t \"FP\" denotes a floating point binary file,\n"); + (void) fprintf(stdout, + "\t \"IN\" denotes a signed integer binary file,\n"); + (void) fprintf(stdout, + "\t \"UIN\" denotes an unsigned integer binary file,\n"); + (void) fprintf(stdout, "\t & \"STR\" denotes an ASCII text file the \n"); + (void) fprintf(stdout, + "\t contents of which should be stored as an 1-D \n"); + (void) fprintf(stdout, "\t array of strings.\n"); + (void) fprintf(stdout, "\t If INPUT-CLASS is \"STR\", then RANK, \n"); + (void) fprintf(stdout, + "\t DIMENSION-SIZES, OUTPUT-CLASS, OUTPUT-SIZE, \n"); + (void) fprintf(stdout, "\t OUTPUT-ARCHITECTURE and OUTPUT-BYTE-ORDER \n"); + (void) fprintf(stdout, "\t will be ignored.\n\n\n"); + (void) fprintf(stdout, "\t INPUT-SIZE:\n"); + (void) fprintf(stdout, + "\t Integer denoting the size of the input data \n"); + (void) fprintf(stdout, "\t (8, 16, 32, 64). \n\n"); + (void) fprintf(stdout, "\t For floating point,\n"); + (void) fprintf(stdout, "\t INPUT-SIZE can be 32 or 64.\n"); + (void) fprintf(stdout, "\t For integers (signed and unsigned)\n"); + (void) fprintf(stdout, "\t INPUT-SIZE can be 8, 16, 32 or 64.\n\n"); + (void) fprintf(stdout, "\t RANK:\n"); + (void) fprintf(stdout, + "\t Integer denoting the number of dimensions.\n\n"); + (void) fprintf(stdout, "\t DIMENSION-SIZES:\n"); + (void) fprintf(stdout, + "\t Integers separated by spaces to denote the \n"); + (void) fprintf(stdout, "\t dimension sizes for the no. of dimensions \n"); + (void) fprintf(stdout, "\t determined by rank.\n\n"); + (void) fprintf(stdout, "\t OUTPUT-CLASS:\n"); + (void) fprintf(stdout, + "\t String dentoting data type of the dataset to \n"); + (void) fprintf(stdout, "\t be written (\"IN\",\"FP\", \"UIN\")\n\n"); + (void) fprintf(stdout, "\t OUTPUT-SIZE:\n"); + (void) fprintf(stdout, + "\t Integer denoting the size of the data in the \n"); + (void) fprintf(stdout, "\t output dataset to be written.\n"); + (void) fprintf(stdout, + "\t If OUTPUT-CLASS is \"FP\", OUTPUT-SIZE can be \n"); + (void) fprintf(stdout, "\t 32 or 64.\n"); + (void) fprintf(stdout, + "\t If OUTPUT-CLASS is \"IN\" or \"UIN\", OUTPUT-SIZE\n"); + (void) fprintf(stdout, "\t can be 8, 16, 32 or 64.\n\n"); + (void) fprintf(stdout, "\t OUTPUT-ARCHITECTURE:\n"); + (void) fprintf(stdout, "\t STRING denoting the type of output \n"); + (void) fprintf(stdout, + "\t architecture. Can accept the following values\n"); + (void) fprintf(stdout, "\t STD\n"); + (void) fprintf(stdout, "\t IEEE\n"); + (void) fprintf(stdout, "\t INTEL\n"); + (void) fprintf(stdout, "\t CRAY\n"); + (void) fprintf(stdout, "\t MIPS\n"); + (void) fprintf(stdout, "\t ALPHA\n"); + (void) fprintf(stdout, "\t NATIVE (default)\n"); + (void) fprintf(stdout, "\t UNIX\n\n"); + (void) fprintf(stdout, "\t OUTPUT-BYTE-ORDER:\n"); + (void) fprintf(stdout, + "\t String denoting the output-byte-order. Ignored\n"); + (void) fprintf(stdout, + "\t if the OUTPUT-ARCHITECTURE is not specified or\n"); + (void) fprintf(stdout, "\t if it is IEEE, UNIX or STD. Can accept the \n"); + (void) fprintf(stdout, "\t following values.\n"); + (void) fprintf(stdout, "\t BE (default)\n"); + (void) fprintf(stdout, "\t LE\n\n"); + (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES:\n"); + (void) fprintf(stdout, "\t Integers separated by spaces to denote the \n"); + (void) fprintf(stdout, + "\t dimension sizes of the chunk for the no. of \n"); + (void) fprintf(stdout, + "\t dimensions determined by rank. Required field\n"); + (void) fprintf(stdout, + "\t to denote that the dataset will be stored with\n"); + (void) fprintf(stdout, + "\t chunked storage. If this field is absent the\n"); + (void) fprintf(stdout, + "\t dataset will be stored with contiguous storage.\n\n"); + (void) fprintf(stdout, "\t COMPRESSION-TYPE:\n"); + (void) fprintf(stdout, + "\t String denoting the type of compression to be\n"); + (void) fprintf(stdout, "\t used with the chunked storage. Requires the\n"); + (void) fprintf(stdout, + "\t CHUNKED-DIMENSION-SIZES to be specified. The only \n"); + (void) fprintf(stdout, + "\t currently supported compression method is GZIP. \n"); + (void) fprintf(stdout, "\t Will accept the following value\n"); + (void) fprintf(stdout, "\t GZIP\n\n"); + (void) fprintf(stdout, "\t COMPRESSION-PARAM:\n"); + (void) fprintf(stdout, + "\t Integer used to denote compression level and \n"); + (void) fprintf(stdout, "\t this option is to be always specified when \n"); + (void) fprintf(stdout, + "\t the COMPRESSION-TYPE option is specified. The\n"); + (void) fprintf(stdout, "\t values are applicable only to GZIP \n"); + (void) fprintf(stdout, "\t compression.\n"); + (void) fprintf(stdout, "\t Value 1-9: The level of Compression. \n"); + (void) fprintf(stdout, "\t 1 will result in the fastest \n"); + (void) fprintf(stdout, "\t compression while 9 will result in \n"); + (void) fprintf(stdout, "\t the best compression ratio. The default\n"); + (void) fprintf(stdout, "\t level of compression is 6.\n\n"); + (void) fprintf(stdout, "\t EXTERNAL-STORAGE:\n"); + (void) fprintf(stdout, + "\t String to denote the name of the non-HDF5 file \n"); + (void) fprintf(stdout, + "\t to store data to. Cannot be used if CHUNKED-\n"); + (void) fprintf(stdout, + "\t DIMENSIONS or COMPRESSION-TYPE or EXTENDIBLE-\n"); + (void) fprintf(stdout, "\t DATASET is specified.\n"); + (void) fprintf(stdout, "\t Value : the name of the \n"); + (void) fprintf(stdout, "\t external file as a string to be used.\n\n"); + (void) fprintf(stdout, "\t MAXIMUM-DIMENSIONS:\n"); + (void) fprintf(stdout, "\t Integers separated by spaces to denote the \n"); + (void) fprintf(stdout, "\t maximum dimension sizes of all the \n"); + (void) fprintf(stdout, "\t dimensions determined by rank. Requires the\n"); + (void) fprintf(stdout, + "\t CHUNKED-DIMENSION-SIZES to be specified. A value of \n"); + (void) fprintf(stdout, "\t -1 for any dimension implies UNLIMITED \n"); + (void) fprintf(stdout, + "\t DIMENSION size for that particular dimension.\n\n"); + (void) fprintf(stdout, "\t EXAMPLES:\n"); + (void) fprintf(stdout, "\t 1. Configuration File may look like:\n\n"); + (void) fprintf(stdout, "\t PATH work h5 pkamat First-set\n"); + (void) fprintf(stdout, "\t INPUT-CLASS TEXTFP\n"); + (void) fprintf(stdout, "\t RANK 3\n"); + (void) fprintf(stdout, "\t DIMENSION-SIZES 5 2 4\n"); + (void) fprintf(stdout, "\t OUTPUT-CLASS FP\n"); + (void) fprintf(stdout, "\t OUTPUT-SIZE 64\n"); + (void) fprintf(stdout, "\t OUTPUT-ARCHITECTURE IEEE\n"); + (void) fprintf(stdout, "\t OUTPUT-BYTE-ORDER LE\n"); + (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES 2 2 2 \n\n"); + (void) fprintf(stdout, + "\t The above configuration will accept a floating point array \n"); + (void) fprintf(stdout, + "\t (5 x 2 x 4) in an ASCII file with the rank and dimension sizes \n"); + (void) fprintf(stdout, + "\t specified and will save it in a chunked data-set (of pattern \n"); + (void) fprintf(stdout, + "\t 2 X 2 X 2) of 64-bit floating point in the little-endian order \n"); + (void) fprintf(stdout, + "\t and IEEE architecture. The dataset will be stored at\n"); + (void) fprintf(stdout, "\t \"/work/h5/pkamat/First-set\"\n\n"); + (void) fprintf(stdout, "\t 2. Another configuration could be:\n\n"); + (void) fprintf(stdout, "\t PATH Second-set\n"); + (void) fprintf(stdout, "\t INPUT-CLASS IN \n"); + (void) fprintf(stdout, "\t RANK 5\n"); + (void) fprintf(stdout, "\t DIMENSION-SIZES 6 3 5 2 4\n"); + (void) fprintf(stdout, "\t OUTPUT-CLASS IN\n"); + (void) fprintf(stdout, "\t OUTPUT-SIZE 32\n"); + (void) fprintf(stdout, "\t CHUNKED-DIMENSION-SIZES 2 2 2 2 2\n"); + (void) fprintf(stdout, "\t EXTENDIBLE-DATASET 1 3 \n"); + (void) fprintf(stdout, "\t COMPRESSION-TYPE GZIP\n"); + (void) fprintf(stdout, "\t COMPRESSION-PARAM 7\n\n\n"); + (void) fprintf(stdout, + "\t The above configuration will accept an integer array \n"); + (void) fprintf(stdout, + "\t (6 X 3 X 5 x 2 x 4) in a binary file with the rank and \n"); + (void) fprintf(stdout, + "\t dimension sizes specified and will save it in a chunked data-set\n"); + (void) fprintf(stdout, + "\t (of pattern 2 X 2 X 2 X 2 X 2) of 32-bit floating point in \n"); + (void) fprintf(stdout, + "\t native format (as output-architecture is not specified). The \n"); + (void) fprintf(stdout, + "\t first and the third dimension will be defined as unlimited. The \n"); + (void) fprintf(stdout, + "\t data-set will be compressed using GZIP and a compression level \n"); + (void) fprintf(stdout, "\t of 7.\n"); + (void) fprintf(stdout, + "\t The dataset will be stored at \"/Second-set\"\n\n"); + return; } - -void -usage(char *name) +void usage(char *name) { - (void) fprintf(stdout, "\nUsage:\t%s -h[elp], OR\n", name); - (void) fprintf(stdout, "\t%s -c[onfig] \ + (void) fprintf(stdout, "\nUsage:\t%s -h[elp], OR\n", name); + (void) fprintf(stdout, + "\t%s -c[onfig] \ [ -c[config] ...] -o[utfile] \n\n", name); - return; + return; } diff --git a/tools/h5import/h5import.h b/tools/h5import/h5import.h index 9e4f6e8..05de476 100755 --- a/tools/h5import/h5import.h +++ b/tools/h5import/h5import.h @@ -74,111 +74,110 @@ struct path_info { - char group[MAX_GROUPS_IN_PATH][MAX_PATH_NAME_LENGTH]; - int count; + char group[MAX_GROUPS_IN_PATH][MAX_PATH_NAME_LENGTH]; + int count; }; struct Input { - struct path_info path; - int inputClass; - int inputSize; - int rank; - hsize_t* sizeOfDimension; - int outputClass; - int outputSize; - int outputArchitecture; - int outputByteOrder; - hsize_t* sizeOfChunk; - hsize_t* maxsizeOfDimension; - int compressionType; - int compressionParam; - char *externFilename; - VOIDP data; - int configOptionVector[NUM_KEYS]; + struct path_info path; + int inputClass; + int inputSize; + int rank; + hsize_t* sizeOfDimension; + int outputClass; + int outputSize; + int outputArchitecture; + int outputByteOrder; + hsize_t* sizeOfChunk; + hsize_t* maxsizeOfDimension; + int compressionType; + int compressionParam; + char *externFilename; + VOIDP data; + int configOptionVector[NUM_KEYS]; }; struct infilesformat { - char datafile[255]; - char configfile[255]; - struct Input in; - int config; /* Configfile present? No - 0. Yes - 1 */ + char datafile[255]; + char configfile[255]; + struct Input in; + int config; /* Configfile present? No - 0. Yes - 1 */ }; struct Options { - struct infilesformat infiles[30]; /* structure to hold the list of input file names. Limited to 30*/ - char outfile[256]; /* output file name */ - int fcount; /* number of input files */ + struct infilesformat infiles[30]; /* structure to hold the list of input file names. Limited to 30*/ + char outfile[256]; /* output file name */ + int fcount; /* number of input files */ }; char keytable[NUM_KEYS][30] = { - "PATH", - "INPUT-CLASS", - "INPUT-SIZE", - "RANK", - "DIMENSION-SIZES", - "OUTPUT-CLASS", - "OUTPUT-SIZE", - "OUTPUT-ARCHITECTURE", - "OUTPUT-BYTE-ORDER", - "CHUNKED-DIMENSION-SIZES", - "COMPRESSION-TYPE", - "COMPRESSION-PARAM", - "EXTERNAL-STORAGE", - "MAXIMUM-DIMENSIONS" + "PATH", + "INPUT-CLASS", + "INPUT-SIZE", + "RANK", + "DIMENSION-SIZES", + "OUTPUT-CLASS", + "OUTPUT-SIZE", + "OUTPUT-ARCHITECTURE", + "OUTPUT-BYTE-ORDER", + "CHUNKED-DIMENSION-SIZES", + "COMPRESSION-TYPE", + "COMPRESSION-PARAM", + "EXTERNAL-STORAGE", + "MAXIMUM-DIMENSIONS" }; static int state_table[15][8] = { - /* token ordering: - FILNAME OPT_o OPT_c OPT_h OPT_d OPT_p OPT_t OPT_s */ + /* token ordering: FILNAME OPT_o OPT_c OPT_h OPT_d OPT_p OPT_t OPT_s */ - /* state 0: start */ - {1, ERR, ERR, 6, ERR, ERR, ERR, ERR}, + /* state 0: start */ + {1, ERR, ERR, 6, ERR, ERR, ERR, ERR}, - /* state 1: input files */ - {ERR, ERR, 2, ERR, 7, ERR, ERR, ERR}, + /* state 1: input files */ + {ERR, ERR, 2, ERR, 7, ERR, ERR, ERR}, - /* state 2: -c[onfigfile] */ - {3, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, + /* state 2: -c[onfigfile] */ + {3, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, - /* state 3: configfile */ - {1, 4, ERR, ERR, ERR, ERR, ERR, ERR}, + /* state 3: configfile */ + {1, 4, ERR, ERR, ERR, ERR, ERR, ERR}, - /* state 4: -o[utfile] */ - {5, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, + /* state 4: -o[utfile] */ + {5, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, - /* state 5: outfile */ - {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, + /* state 5: outfile */ + {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, - /* state 6: -h[elp] */ - {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, + /* state 6: -h[elp] */ + {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, - /* state 7: -d[ims] */ - {8, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, + /* state 7: -d[ims] */ + {8, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, - /* state 8: dimensions */ - {1, 4, ERR, ERR, ERR, 9, 11, 13}, + /* state 8: dimensions */ + {1, 4, ERR, ERR, ERR, 9, 11, 13}, - /* state 9: -p[ath] */ - {10, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, + /* state 9: -p[ath] */ + {10, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, - /* state 10: path name */ - {1, 4, ERR, ERR, ERR, ERR, 11, 13}, + /* state 10: path name */ + {1, 4, ERR, ERR, ERR, ERR, 11, 13}, - /* state 11: -t[ype] */ - {12, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, + /* state 11: -t[ype] */ + {12, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, - /* state 12: data type */ - {1, 4, ERR, ERR, ERR, ERR, ERR, 13}, + /* state 12: data type */ + {1, 4, ERR, ERR, ERR, ERR, ERR, 13}, - /* state 13: -s[ize] */ - {14, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, + /* state 13: -s[ize] */ + {14, ERR, ERR, ERR, ERR, ERR, ERR, ERR}, - /* state 14: data size */ - {1, 4, ERR, ERR, ERR, ERR, ERR, ERR} + /* state 14: data size */ + {1, 4, ERR, ERR, ERR, ERR, ERR, ERR} }; @@ -193,39 +192,39 @@ void help(char *); static int gtoken(char *s); static int process(struct Options *opt); -static int processConfigurationFile(char *infile, struct Input *in, FILE **strm); +static int processConfigurationFile(char *infile, struct Input *in); static int mapKeywordToIndex(char *key); static int parsePathInfo(struct path_info *path, char *strm); static int parseDimensions(struct Input *in, char *strm); static int getInputSize(struct Input *in, int ival); static int getInputClass(struct Input *in, char * strm); static int InputClassStrToInt(char *temp); -static int getRank(struct Input *in, FILE** strm); -static int getDimensionSizes(struct Input *in, FILE** strm); -static int getOutputSize(struct Input *in, FILE** strm); -static int getOutputClass(struct Input *in, FILE** strm); +static int getRank(struct Input *in, FILE *strm); +static int getDimensionSizes(struct Input *in, FILE *strm); +static int getOutputSize(struct Input *in, FILE *strm); +static int getOutputClass(struct Input *in, FILE *strm); static int OutputClassStrToInt(char *temp); -static int getOutputArchitecture(struct Input *in, FILE** strm); +static int getOutputArchitecture(struct Input *in, FILE *strm); static int OutputArchStrToInt(char *temp); -static int getOutputByteOrder(struct Input *in, FILE** strm); +static int getOutputByteOrder(struct Input *in, FILE *strm); static int OutputByteOrderStrToInt(char *temp); -static int getChunkedDimensionSizes(struct Input *in, FILE **strm); -static int getCompressionType(struct Input *in, FILE** strm); +static int getChunkedDimensionSizes(struct Input *in, FILE *strm); +static int getCompressionType(struct Input *in, FILE *strm); static int CompressionTypeStrToInt(char *temp); -static int getCompressionParameter(struct Input *in, FILE** strm); -static int getExternalFilename(struct Input *in, FILE** strm); -static int getMaximumDimensionSizes(struct Input *in, FILE **strm); -static int processDataFile(char *infile, struct Input *in, FILE **strm, hid_t file_id); -static int readIntegerData(FILE **strm, struct Input *in); -static int readFloatData(FILE **strm, struct Input *in); +static int getCompressionParameter(struct Input *in, FILE *strm); +static int getExternalFilename(struct Input *in, FILE *strm); +static int getMaximumDimensionSizes(struct Input *in, FILE *strm); +static int processDataFile(char *infile, struct Input *in, hid_t file_id); +static int readIntegerData(FILE *strm, struct Input *in); +static int readFloatData(FILE *strm, struct Input *in); static int allocateIntegerStorage(struct Input *in); static int allocateFloatStorage(struct Input *in); hid_t createOutputDataType(struct Input *in); hid_t createInputDataType(struct Input *in); -static int readUIntegerData(FILE **strm, struct Input *in); +static int readUIntegerData(FILE *strm, struct Input *in); static int allocateUIntegerStorage(struct Input *in); -static int validateConfigurationParameters(struct Input * in); -static int processStrData(FILE **strm, struct Input *in, hid_t file_id); +static int validateConfigurationParameters(struct Input *in); +static int processStrData(FILE *strm, struct Input *in, hid_t file_id); #endif /* H5IMPORT_H__ */ diff --git a/tools/h5jam/CMakeLists.txt b/tools/h5jam/CMakeLists.txt index 34d87a2..536ca46 100644 --- a/tools/h5jam/CMakeLists.txt +++ b/tools/h5jam/CMakeLists.txt @@ -1,505 +1,505 @@ -cmake_minimum_required (VERSION 2.8) -PROJECT (HDF5_TOOLS_H5JAM) - -#----------------------------------------------------------------------------- -# Setup include Directories -#----------------------------------------------------------------------------- -INCLUDE_DIRECTORIES (${HDF5_TOOLS_SRC_DIR}/lib) -INCLUDE_DIRECTORIES (${HDF5_PROJECT_DIR}/test) - -# -------------------------------------------------------------------- -# Add the h5jam executables -# -------------------------------------------------------------------- -ADD_EXECUTABLE (h5jam ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/h5jam.c) -TARGET_NAMING (h5jam ${LIB_TYPE}) -TARGET_LINK_LIBRARIES (h5jam ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET}) - -ADD_EXECUTABLE (getub ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/getub.c) -TARGET_NAMING (getub ${LIB_TYPE}) -TARGET_LINK_LIBRARIES (getub ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET}) - -ADD_EXECUTABLE (tellub ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/tellub.c) -TARGET_NAMING (tellub ${LIB_TYPE}) -TARGET_LINK_LIBRARIES (tellub ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET}) - -ADD_EXECUTABLE (h5unjam ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/h5unjam.c) -TARGET_NAMING (h5unjam ${LIB_TYPE}) -TARGET_LINK_LIBRARIES (h5unjam ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET}) - -SET (H5_DEP_EXECUTABLES - h5jam - getub - tellub - h5unjam -) - -############################################################################## -############################################################################## -### T E S T I N G ### -############################################################################## -############################################################################## - -IF (BUILD_TESTING) - # -------------------------------------------------------------------- - # Add the h5jam test executables - # -------------------------------------------------------------------- - IF (HDF5_BUILD_GENERATORS AND NOT BUILD_SHARED_LIBS) - ADD_EXECUTABLE (h5jamgentest ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/h5jamgentest.c) - TARGET_NAMING (h5jamgentest ${LIB_TYPE}) - TARGET_LINK_LIBRARIES (h5jamgentest ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET}) - - #ADD_TEST (NAME h5jamgentest COMMAND $) - ENDIF (HDF5_BUILD_GENERATORS AND NOT BUILD_SHARED_LIBS) - - SET (HDF5_REFERENCE_TXT_FILES - u10.txt - u511.txt - u512.txt - u513.txt - h5jam-help.txt - h5unjam-help.txt - ) - SET (HDF5_REFERENCE_TEST_FILES - tall.h5 - twithub.h5 - twithub513.h5 - ) - - FILE (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles") - FOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES}) - SET (dest "${PROJECT_BINARY_DIR}/testfiles/${h5_file}") - #MESSAGE (STATUS " Copying ${h5_file}") - ADD_CUSTOM_COMMAND ( - TARGET h5jam - POST_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS -E copy_if_different ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/testfiles/${h5_file} ${dest} - ) - ENDFOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES}) - - FOREACH (txt_file ${HDF5_REFERENCE_TXT_FILES}) - SET (dest "${PROJECT_BINARY_DIR}/testfiles/${txt_file}") - #MESSAGE (STATUS " Copying ${txt_file}") - ADD_CUSTOM_COMMAND ( - TARGET h5jam - POST_BUILD - COMMAND ${CMAKE_COMMAND} - ARGS -E copy_if_different ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/testfiles/${txt_file} ${dest} - ) - ENDFOREACH (txt_file ${HDF5_REFERENCE_TXT_FILES}) - -############################################################################## -############################################################################## -### T H E T E S T S M A C R O S ### -############################################################################## -############################################################################## - - MACRO (ADD_HELP_TEST testname resultcode) - # If using memchecker add tests without using scripts - IF (HDF5_ENABLE_USING_MEMCHECKER) - ADD_TEST (NAME H5JAM-${testname} COMMAND $ ${ARGN}) - ADD_TEST (NAME H5JAM-UNJAM-${testname} COMMAND $ ${ARGN}) - ELSE (HDF5_ENABLE_USING_MEMCHECKER) - ADD_TEST ( - NAME H5JAM-${testname} - COMMAND "${CMAKE_COMMAND}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS=${ARGN}" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=h5jam-${testname}.out" - -D "TEST_EXPECT=${resultcode}" - -D "TEST_REFERENCE=testfiles/h5jam-${testname}.txt" - -P "${HDF5_RESOURCES_DIR}/runTest.cmake" - ) - ADD_TEST ( - NAME H5JAM-UNJAM-${testname} - COMMAND "${CMAKE_COMMAND}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS=${ARGN}" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=h5unjam-${testname}.out" - -D "TEST_EXPECT=${resultcode}" - -D "TEST_REFERENCE=testfiles/h5unjam-${testname}.txt" - -P "${HDF5_RESOURCES_DIR}/runTest.cmake" - ) - ENDIF (HDF5_ENABLE_USING_MEMCHECKER) - ENDMACRO (ADD_HELP_TEST) - - MACRO (CLEANUP testname) - ADD_TEST ( - NAME H5JAM-CLEANUP-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ${ARGN} - ) - IF (NOT "${last_test}" STREQUAL "") - SET_TESTS_PROPERTIES (H5JAM-CLEANUP-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) - ENDIF (NOT "${last_test}" STREQUAL "") - SET (last_test "H5JAM-CLEANUP-${testname}-clear-objects") - ENDMACRO(CLEANUP testname testfile) - - MACRO (CHECKFILE testname expected actual) - # If using memchecker add tests without using scripts - IF (NOT HDF5_ENABLE_USING_MEMCHECKER) - ADD_TEST ( - NAME H5JAM-CHECKFILE-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} - -E remove - ${expected}.new - ${expected}.new.err - ${actual}.out - ${actual}.out.err - ) - IF (NOT "${last_test}" STREQUAL "") - SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) - ENDIF (NOT "${last_test}" STREQUAL "") - ADD_TEST ( - NAME H5JAM-CHECKFILE-H5DMP-${testname} - COMMAND "${CMAKE_COMMAND}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS:STRING=testfiles/${expected}" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=${expected}.new" - -D "TEST_EXPECT=0" - -D "TEST_FILTER=(^(HDF5)[^\n]*)" - -D "TEST_SKIP_COMPARE=TRUE" - -P "${HDF5_RESOURCES_DIR}/runTest.cmake" - ) - SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-H5DMP-${testname} PROPERTIES DEPENDS H5JAM-CHECKFILE-${testname}-clear-objects) - ADD_TEST ( - NAME H5JAM-CHECKFILE-H5DMP_CMP-${testname} - COMMAND "${CMAKE_COMMAND}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS:STRING=${actual}" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=${actual}.out" - -D "TEST_EXPECT=0" - -D "TEST_FILTER=(^(HDF5)[^\n]*)" - -D "TEST_REFERENCE=${expected}.new" - -P "${HDF5_RESOURCES_DIR}/runTest.cmake" - ) - SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-H5DMP_CMP-${testname} PROPERTIES DEPENDS H5JAM-CHECKFILE-H5DMP-${testname}) - SET (last_test "H5JAM-CHECKFILE-H5DMP_CMP-${testname}") - ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER) - ENDMACRO(CHECKFILE testname expected actual) - - MACRO (SETUP testname infile outfile) - ADD_TEST ( - NAME H5JAM-SETUP-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ${outfile} - ) - IF (NOT "${last_test}" STREQUAL "") - SET_TESTS_PROPERTIES (H5JAM-SETUP-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) - ENDIF (NOT "${last_test}" STREQUAL "") - ADD_TEST ( - NAME H5JAM-SETUP-${testname} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/testfiles/${infile} ${PROJECT_BINARY_DIR}/${outfile} - ) - SET_TESTS_PROPERTIES (H5JAM-SETUP-${testname} PROPERTIES DEPENDS H5JAM-SETUP-${testname}-clear-objects) - SET (last_test "H5JAM-SETUP-${testname}") - ENDMACRO(SETUP testname infile outfile) - - MACRO (CHECK_UB_1 testname testfile ufile) - IF (NOT HDF5_ENABLE_USING_MEMCHECKER) - ADD_TEST ( - NAME H5JAM-CHECK_UB_1-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} - -E remove - ${testfile}.len.txt - ${testfile}.cmp - ${ufile}.cmp - ) - IF (NOT "${last_test}" STREQUAL "") - SET_TESTS_PROPERTIES (H5JAM-CHECK_UB_1-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) - ENDIF (NOT "${last_test}" STREQUAL "") - ADD_TEST ( - NAME H5JAM-CHECK_UB_1-${testname} - COMMAND "${CMAKE_COMMAND}" - -D "TEST_PROGRAM=$" - -D "TEST_GET_PROGRAM=$" - -D "TEST_CHECKUB=YES" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_HFILE=${testfile}" - -D "TEST_UFILE=${ufile}" - -D "TEST_EXPECT=0" - -D "TEST_OFILE=${ARGN}" - -P "${HDF5_RESOURCES_DIR}/userblockTest.cmake" - ) - SET_TESTS_PROPERTIES (H5JAM-CHECK_UB_1-${testname} PROPERTIES DEPENDS H5JAM-CHECK_UB_1-${testname}-clear-objects) - SET (last_test "H5JAM-CHECK_UB_1-${testname}") - ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER) - ENDMACRO(CHECK_UB_1 testname testfile ufile) - - MACRO (CHECK_NOUB testname testfile) - IF (NOT HDF5_ENABLE_USING_MEMCHECKER) - ADD_TEST ( - NAME H5JAM-CHECK_NOUB-${testname} - COMMAND "${CMAKE_COMMAND}" - -D "TEST_PROGRAM=$" - -D "TEST_GET_PROGRAM=$" - -D "TEST_CHECKUB=NO" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_HFILE=${testfile}" - -D "TEST_EXPECT=0" - -D "TEST_UFILE=NULL" - -D "TEST_OFILE=NULL" - -P "${HDF5_RESOURCES_DIR}/userblockTest.cmake" - ) - IF (NOT "${last_test}" STREQUAL "") - SET_TESTS_PROPERTIES (H5JAM-CHECK_NOUB-${testname} PROPERTIES DEPENDS ${last_test}) - ENDIF (NOT "${last_test}" STREQUAL "") - SET (last_test "H5JAM-CHECK_NOUB-${testname}") - ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER) - ENDMACRO(CHECK_NOUB testname testfile) - - MACRO (UNJAMTEST testname infile ufile outfile) - ADD_TEST ( - NAME H5JAM-UNJAM-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ${outfile} - ) - IF (NOT "${last_test}" STREQUAL "") - SET_TESTS_PROPERTIES (H5JAM-UNJAM-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) - ENDIF (NOT "${last_test}" STREQUAL "") - IF (NOT "${ufile}" STREQUAL "NONE") - ADD_TEST ( - NAME H5JAM-UNJAM_D-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ${ufile} - ) - SET_TESTS_PROPERTIES (H5JAM-UNJAM_D-${testname}-clear-objects PROPERTIES DEPENDS H5JAM-UNJAM-${testname}-clear-objects) - ADD_TEST (NAME H5JAM-UNJAM-${testname} COMMAND $ -i ${infile} -u ${ufile} -o ${outfile}) - SET_TESTS_PROPERTIES (H5JAM-UNJAM-${testname} PROPERTIES DEPENDS H5JAM-UNJAM_D-${testname}-clear-objects) - SET (compare_test ${ufile}) - ELSE (NOT "${ufile}" STREQUAL "NONE") - IF (NOT "${ARGN}" STREQUAL "--delete") - ADD_TEST ( - NAME H5JAM-UNJAM_D-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ${outfile}.ufile.txt ${outfile}.ufile.txt.err - ) - SET_TESTS_PROPERTIES (H5JAM-UNJAM_D-${testname}-clear-objects PROPERTIES DEPENDS H5JAM-UNJAM-${testname}-clear-objects) - IF (HDF5_ENABLE_USING_MEMCHECKER) - ADD_TEST (NAME H5JAM-UNJAM-${testname} COMMAND $ -i ${infile} -o ${outfile}) - ELSE (HDF5_ENABLE_USING_MEMCHECKER) - ADD_TEST ( - NAME H5JAM-UNJAM-${testname} - COMMAND "${CMAKE_COMMAND}" - -D "TEST_PROGRAM=$" - -D "TEST_ARGS:STRING=-i;${infile};-o;${outfile}" - -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" - -D "TEST_OUTPUT=${outfile}.ufile.txt" - -D "TEST_EXPECT=0" - -D "TEST_SKIP_COMPARE=TRUE" - -P "${HDF5_RESOURCES_DIR}/runTest.cmake" - ) - ENDIF (HDF5_ENABLE_USING_MEMCHECKER) - SET_TESTS_PROPERTIES (H5JAM-UNJAM-${testname} PROPERTIES DEPENDS H5JAM-UNJAM_D-${testname}-clear-objects) - SET (compare_test "${outfile}.ufile.txt") - ELSE (NOT "${ARGN}" STREQUAL "--delete") - ADD_TEST (NAME H5JAM-UNJAM-${testname} COMMAND $ -i ${infile} -o ${outfile}) - SET_TESTS_PROPERTIES (H5JAM-UNJAM-${testname} PROPERTIES DEPENDS H5JAM-UNJAM-${testname}-clear-objects) - SET (compare_test "") - ENDIF (NOT "${ARGN}" STREQUAL "--delete") - ENDIF (NOT "${ufile}" STREQUAL "NONE") - SET (last_test "H5JAM-UNJAM-${testname}") - IF (NOT "${compare_test}" STREQUAL "") - CHECK_UB_1 (${testname} ${infile} ${compare_test}) - ENDIF (NOT "${compare_test}" STREQUAL "") - CHECK_NOUB (${testname} ${outfile}) - ENDMACRO(UNJAMTEST testname infile ufile outfile) - - MACRO (JAMTEST testname jamfile infile outfile) - ADD_TEST ( - NAME H5JAM-${testname}-clear-objects - COMMAND ${CMAKE_COMMAND} -E remove ${outfile} ${infile}.cpy.h5 - ) - IF (NOT "${last_test}" STREQUAL "") - SET_TESTS_PROPERTIES (H5JAM-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) - ENDIF (NOT "${last_test}" STREQUAL "") - SET (last_test "H5JAM-${testname}-clear-objects") - IF ("${outfile}" STREQUAL "NONE") - ADD_TEST ( - NAME H5JAM-NONE_COPY-${testname} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${infile} ${infile}.cpy.h5 - ) - SET_TESTS_PROPERTIES (H5JAM-NONE_COPY-${testname} PROPERTIES DEPENDS ${last_test}) - SET (last_test "H5JAM-NONE_COPY-${testname}") - ADD_TEST (NAME H5JAM-${testname} COMMAND $ -u testfiles/${jamfile} -i ${infile} ${ARGN}) - SET (compare_test ${infile}) - SET (compare_orig ${infile}.cpy.h5) - ELSE ("${outfile}" STREQUAL "NONE") - ADD_TEST (NAME H5JAM-${testname} COMMAND $ -u testfiles/${jamfile} -i testfiles/${infile} -o ${outfile} ${ARGN}) - SET (compare_test ${outfile}) - SET (compare_orig testfiles/${infile}) - ENDIF ("${outfile}" STREQUAL "NONE") - SET_TESTS_PROPERTIES (H5JAM-${testname} PROPERTIES DEPENDS ${last_test}) - SET (last_test "H5JAM-${testname}") - IF ("${ARGN}" STREQUAL "--clobber") - SET (compare_orig "") - ENDIF ("${ARGN}" STREQUAL "--clobber") - CHECK_UB_1 (${testname} ${compare_test} testfiles/${jamfile} ${compare_orig}) - ENDMACRO (JAMTEST testname jamfile infile outfile) - -############################################################################## -############################################################################## -### T H E T E S T S ### -############################################################################## -############################################################################## - - ADD_HELP_TEST(help 0 -h) - - JAMTEST (tall_u10 u10.txt tall.h5 ta2.h5) - CHECKFILE (tall_u10 tall.h5 ta2.h5) -# CLEANUP (tall_u10 ta2.h5) - JAMTEST (tall_u511 u511.txt tall.h5 ta3.h5) - CHECKFILE (tall_u511 tall.h5 ta3.h5) -# CLEANUP (tall_u511 ta3.h5) - JAMTEST (tall_u512 u512.txt tall.h5 ta4.h5) - CHECKFILE (tall_u512 tall.h5 ta4.h5) -# CLEANUP (tall_u512 ta4.h5) - JAMTEST (tall_u513 u513.txt tall.h5 ta5.h5) - CHECKFILE (tall_u513 tall.h5 ta5.h5) -# CLEANUP (tall_u513 ta5.h5) - - SETUP (ta_u10 tall.h5 ta.h5) - JAMTEST (ta_u10 u10.txt ta.h5 NONE) - CHECKFILE (ta_u10 tall.h5 ta.h5) - SETUP (ta_u511 tall.h5 ta.h5 NOCLEAN) - JAMTEST (ta_u511 u511.txt ta.h5 NONE) - CHECKFILE (ta_u511 tall.h5 ta.h5) - SETUP (ta_u512 tall.h5 ta.h5 NOCLEAN) - JAMTEST (ta_u512 u512.txt ta.h5 NONE) - CHECKFILE (ta_u512 tall.h5 ta.h5) - SETUP (ta_u513 tall.h5 ta.h5 NOCLEAN) - JAMTEST (ta_u513 u513.txt ta.h5 NONE) - CHECKFILE (ta_u513 tall.h5 ta.h5) -# CLEANUP (ta ta.h5) - - JAMTEST (twithub_u10 u10.txt twithub.h5 tax2.h5) - CHECKFILE (twithub_u10 tall.h5 tax2.h5) -# CLEANUP (twithub_u10 tax2.h5) - JAMTEST (twithub_u511 u511.txt twithub.h5 tax3.h5) - CHECKFILE (twithub_u511 tall.h5 tax3.h5) -# CLEANUP (twithub_u511 tax3.h5) - JAMTEST (twithub_u512 u512.txt twithub.h5 tax4.h5) - CHECKFILE (twithub_u512 tall.h5 tax4.h5) -# CLEANUP (twithub_u512 tax4.h5) - JAMTEST (twithub_u513 u513.txt twithub.h5 tax5.h5) - CHECKFILE (twithub_u513 tall.h5 tax5.h5) -# CLEANUP (twithub_u513 tax5.h5) - - JAMTEST (twithub513_u10 u10.txt twithub513.h5 tax6.h5) - CHECKFILE (twithub513_u10 tall.h5 tax6.h5) -# CLEANUP (twithub513_u10 tax6.h5) - JAMTEST (twithub513_u511 u511.txt twithub513.h5 tax7.h5) - CHECKFILE (twithub513_u511 tall.h5 tax7.h5) -# CLEANUP (twithub513_u511 tax7.h5) - JAMTEST (twithub513_u512 u512.txt twithub513.h5 tax8.h5) - CHECKFILE (twithub513_u512 tall.h5 tax8.h5) -# CLEANUP (twithub513_u512 tax8.h5) - JAMTEST (twithub513_u513 u513.txt twithub513.h5 tax9.h5) - CHECKFILE (twithub513_u513 tall.h5 tax9.h5) -# CLEANUP (twithub513_u513 tax9.h5) - - JAMTEST (twithub_u10_c u10.txt twithub.h5 taz2.h5 --clobber) - CHECKFILE (twithub_u10_c tall.h5 taz2.h5) -# CLEANUP (twithub_u10_c taz2.h5) - JAMTEST (twithub_u511_c u511.txt twithub.h5 taz3.h5 --clobber) - CHECKFILE (twithub_u511_c tall.h5 taz3.h5) -# CLEANUP (twithub_u511_c taz3.h5) - JAMTEST (twithub_u512_c u512.txt twithub.h5 taz4.h5 --clobber) - CHECKFILE (twithub_u512_c tall.h5 taz4.h5) -# CLEANUP (twithub_u512_c taz4.h5) - JAMTEST (twithub_u513_c u513.txt twithub.h5 taz5.h5 --clobber) - CHECKFILE (twithub_u513_c tall.h5 taz5.h5) -# CLEANUP (twithub_u513_c taz5.h5) - - JAMTEST (twithub513_u10_c u10.txt twithub513.h5 taz6.h5 --clobber) - CHECKFILE (twithub513_u10_c tall.h5 taz6.h5) -# CLEANUP (twithub513_u10_c taz6.h5) - JAMTEST (twithub513_u511_c u511.txt twithub513.h5 taz7.h5 --clobber) - CHECKFILE (twithub513_u511_c tall.h5 taz7.h5) -# CLEANUP (twithub513_u511_c taz7.h5) - JAMTEST (twithub513_u512_c u512.txt twithub513.h5 taz8.h5 --clobber) - CHECKFILE (twithub513_u512_c tall.h5 taz8.h5) -# CLEANUP (twithub513_u512_c taz8.h5) - JAMTEST (twithub513_u513_c u513.txt twithub513.h5 taz9.h5 --clobber) - CHECKFILE (twithub513_u513_c tall.h5 taz9.h5) -# CLEANUP (twithub513_u513_c taz9.h5) - - SETUP (N_twithub_u10_c twithub.h5 tay2.h5) - JAMTEST (N_twithub_u10_c u10.txt tay2.h5 NONE --clobber) - CHECKFILE (N_twithub_u10_c tall.h5 tay2.h5) -# CLEANUP (N_twithub_u10_c tay2.h5) - SETUP (N_twithub_u511_c twithub.h5 tay3.h5) - JAMTEST (N_twithub_u511_c u511.txt tay3.h5 NONE --clobber) - CHECKFILE (N_twithub_u511_c tall.h5 tay3.h5) -# CLEANUP (N_twithub_u511_c tay3.h5) - SETUP (N_twithub_u512_c twithub.h5 tay4.h5) - JAMTEST (N_twithub_u512_c u512.txt tay4.h5 NONE --clobber) - CHECKFILE (N_twithub_u512_c tall.h5 tay4.h5) -# CLEANUP (N_twithub_u512_c tay4.h5) - SETUP (N_twithub_u513_c twithub.h5 tay5.h5) - JAMTEST (N_twithub_u513_c u513.txt tay5.h5 NONE --clobber) - CHECKFILE (N_twithub_u513_c tall.h5 tay5.h5) -# CLEANUP (N_twithub_u513_c tay5.h5) - - SETUP (N_twithub513_u10_c twithub513.h5 tay6.h5) - JAMTEST (N_twithub513_u10_c u10.txt tay6.h5 NONE --clobber) - CHECKFILE (N_twithub513_u10_c tall.h5 tay6.h5) -# CLEANUP (N_twithub513_u10_c tay6.h5) - SETUP (N_twithub513_u511_c twithub513.h5 tay7.h5) - JAMTEST (N_twithub513_u511_c u511.txt tay7.h5 NONE --clobber) - CHECKFILE (N_twithub513_u511_c tall.h5 tay7.h5) -# CLEANUP (N_twithub513_u511_c tay7.h5) - SETUP (N_twithub513_u512_c twithub513.h5 tay8.h5) - JAMTEST (N_twithub513_u512_c u512.txt tay8.h5 NONE --clobber) - CHECKFILE (N_twithub513_u512_c tall.h5 tay8.h5) -# CLEANUP (N_twithub513_u512_c tay8.h5) - SETUP (N_twithub513_u513_c twithub513.h5 tay9.h5) - JAMTEST (N_twithub513_u513_c u513.txt tay9.h5 NONE --clobber) - CHECKFILE (N_twithub513_u513_c tall.h5 tay9.h5) -# CLEANUP (N_twithub513_u513_c tay9.h5) - - SETUP (twithub_tall twithub.h5 tai1.h5) - UNJAMTEST (twithub_tall tai1.h5 o10.txt taa1.h5) - CHECKFILE (twithub_tall tall.h5 taa1.h5) -# CLEANUP (twithub_tall taa1.h5 tai1.h5 o10.txt) - SETUP (twithub513_tall twithub513.h5 tai2.h5) - UNJAMTEST (twithub513_tall tai2.h5 o512.txt taa2.h5) - CHECKFILE (twithub513_tall tall.h5 taa2.h5) -# CLEANUP (twithub513_tall taa2.h5 tai2.h5 o512.txt) - - SETUP (N_twithub_tall twithub.h5 tai3.h5) - UNJAMTEST (N_twithub_tall tai3.h5 NONE taa3.h5) - CHECKFILE (N_twithub_tall tall.h5 taa3.h5) -# CLEANUP (N_twithub_tall taa3.h5 tai3.h5) - SETUP (N_twithub513_tall twithub513.h5 tai4.h5) - UNJAMTEST (N_twithub513_tall tai4.h5 NONE taa4.h5) - CHECKFILE (N_twithub513_tall tall.h5 taa4.h5) -# CLEANUP (N_twithub513_tall taa4.h5 tai4.h5) - - SETUP (D_twithub_tall twithub.h5 taj2.h5) - UNJAMTEST (D_twithub_tall taj2.h5 NONE tac2.h5 --delete) - CHECKFILE (D_twithub_tall tall.h5 tac2.h5) -# CLEANUP (D_twithub_tall tac2.h5 taj2.h5) - SETUP (D_twithub513_tall twithub513.h5 taj3.h5) - UNJAMTEST (D_twithub513_tall taj3.h5 NONE tac3.h5 --delete) - CHECKFILE (D_twithub513_tall tall.h5 tac3.h5) -# CLEANUP (D_twithub513_tall tac3.h5 taj3.h5) - -ENDIF (BUILD_TESTING) - -############################################################################## -############################################################################## -### I N S T A L L A T I O N ### -############################################################################## -############################################################################## - +cmake_minimum_required (VERSION 2.8) +PROJECT (HDF5_TOOLS_H5JAM) + +#----------------------------------------------------------------------------- +# Setup include Directories +#----------------------------------------------------------------------------- +INCLUDE_DIRECTORIES (${HDF5_TOOLS_SRC_DIR}/lib) +INCLUDE_DIRECTORIES (${HDF5_PROJECT_DIR}/test) + +# -------------------------------------------------------------------- +# Add the h5jam executables +# -------------------------------------------------------------------- +ADD_EXECUTABLE (h5jam ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/h5jam.c) +TARGET_NAMING (h5jam ${LIB_TYPE}) +TARGET_LINK_LIBRARIES (h5jam ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET}) + +ADD_EXECUTABLE (getub ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/getub.c) +TARGET_NAMING (getub ${LIB_TYPE}) +TARGET_LINK_LIBRARIES (getub ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET}) + +ADD_EXECUTABLE (tellub ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/tellub.c) +TARGET_NAMING (tellub ${LIB_TYPE}) +TARGET_LINK_LIBRARIES (tellub ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET}) + +ADD_EXECUTABLE (h5unjam ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/h5unjam.c) +TARGET_NAMING (h5unjam ${LIB_TYPE}) +TARGET_LINK_LIBRARIES (h5unjam ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET}) + +SET (H5_DEP_EXECUTABLES + h5jam + getub + tellub + h5unjam +) + +############################################################################## +############################################################################## +### T E S T I N G ### +############################################################################## +############################################################################## + +IF (BUILD_TESTING) + # -------------------------------------------------------------------- + # Add the h5jam test executables + # -------------------------------------------------------------------- + IF (HDF5_BUILD_GENERATORS AND NOT BUILD_SHARED_LIBS) + ADD_EXECUTABLE (h5jamgentest ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/h5jamgentest.c) + TARGET_NAMING (h5jamgentest ${LIB_TYPE}) + TARGET_LINK_LIBRARIES (h5jamgentest ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET}) + + #ADD_TEST (NAME h5jamgentest COMMAND $) + ENDIF (HDF5_BUILD_GENERATORS AND NOT BUILD_SHARED_LIBS) + + SET (HDF5_REFERENCE_TXT_FILES + u10.txt + u511.txt + u512.txt + u513.txt + h5jam-help.txt + h5unjam-help.txt + ) + SET (HDF5_REFERENCE_TEST_FILES + tall.h5 + twithub.h5 + twithub513.h5 + ) + + FILE (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles") + FOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES}) + SET (dest "${PROJECT_BINARY_DIR}/testfiles/${h5_file}") + #MESSAGE (STATUS " Copying ${h5_file}") + ADD_CUSTOM_COMMAND ( + TARGET h5jam + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/testfiles/${h5_file} ${dest} + ) + ENDFOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES}) + + FOREACH (txt_file ${HDF5_REFERENCE_TXT_FILES}) + SET (dest "${PROJECT_BINARY_DIR}/testfiles/${txt_file}") + #MESSAGE (STATUS " Copying ${txt_file}") + ADD_CUSTOM_COMMAND ( + TARGET h5jam + POST_BUILD + COMMAND ${CMAKE_COMMAND} + ARGS -E copy_if_different ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/testfiles/${txt_file} ${dest} + ) + ENDFOREACH (txt_file ${HDF5_REFERENCE_TXT_FILES}) + +############################################################################## +############################################################################## +### T H E T E S T S M A C R O S ### +############################################################################## +############################################################################## + + MACRO (ADD_HELP_TEST testname resultcode) + # If using memchecker add tests without using scripts + IF (HDF5_ENABLE_USING_MEMCHECKER) + ADD_TEST (NAME H5JAM-${testname} COMMAND $ ${ARGN}) + ADD_TEST (NAME H5JAM-UNJAM-${testname} COMMAND $ ${ARGN}) + ELSE (HDF5_ENABLE_USING_MEMCHECKER) + ADD_TEST ( + NAME H5JAM-${testname} + COMMAND "${CMAKE_COMMAND}" + -D "TEST_PROGRAM=$" + -D "TEST_ARGS=${ARGN}" + -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" + -D "TEST_OUTPUT=h5jam-${testname}.out" + -D "TEST_EXPECT=${resultcode}" + -D "TEST_REFERENCE=testfiles/h5jam-${testname}.txt" + -P "${HDF5_RESOURCES_DIR}/runTest.cmake" + ) + ADD_TEST ( + NAME H5JAM-UNJAM-${testname} + COMMAND "${CMAKE_COMMAND}" + -D "TEST_PROGRAM=$" + -D "TEST_ARGS=${ARGN}" + -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" + -D "TEST_OUTPUT=h5unjam-${testname}.out" + -D "TEST_EXPECT=${resultcode}" + -D "TEST_REFERENCE=testfiles/h5unjam-${testname}.txt" + -P "${HDF5_RESOURCES_DIR}/runTest.cmake" + ) + ENDIF (HDF5_ENABLE_USING_MEMCHECKER) + ENDMACRO (ADD_HELP_TEST) + + MACRO (CLEANUP testname) + ADD_TEST ( + NAME H5JAM-CLEANUP-${testname}-clear-objects + COMMAND ${CMAKE_COMMAND} -E remove ${ARGN} + ) + IF (NOT "${last_test}" STREQUAL "") + SET_TESTS_PROPERTIES (H5JAM-CLEANUP-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) + ENDIF (NOT "${last_test}" STREQUAL "") + SET (last_test "H5JAM-CLEANUP-${testname}-clear-objects") + ENDMACRO(CLEANUP testname testfile) + + MACRO (CHECKFILE testname expected actual) + # If using memchecker add tests without using scripts + IF (NOT HDF5_ENABLE_USING_MEMCHECKER) + ADD_TEST ( + NAME H5JAM-CHECKFILE-${testname}-clear-objects + COMMAND ${CMAKE_COMMAND} + -E remove + ${expected}.new + ${expected}.new.err + ${actual}.out + ${actual}.out.err + ) + IF (NOT "${last_test}" STREQUAL "") + SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) + ENDIF (NOT "${last_test}" STREQUAL "") + ADD_TEST ( + NAME H5JAM-CHECKFILE-H5DMP-${testname} + COMMAND "${CMAKE_COMMAND}" + -D "TEST_PROGRAM=$" + -D "TEST_ARGS:STRING=testfiles/${expected}" + -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" + -D "TEST_OUTPUT=${expected}.new" + -D "TEST_EXPECT=0" + -D "TEST_FILTER=(^(HDF5)[^\n]*)" + -D "TEST_SKIP_COMPARE=TRUE" + -P "${HDF5_RESOURCES_DIR}/runTest.cmake" + ) + SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-H5DMP-${testname} PROPERTIES DEPENDS H5JAM-CHECKFILE-${testname}-clear-objects) + ADD_TEST ( + NAME H5JAM-CHECKFILE-H5DMP_CMP-${testname} + COMMAND "${CMAKE_COMMAND}" + -D "TEST_PROGRAM=$" + -D "TEST_ARGS:STRING=${actual}" + -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" + -D "TEST_OUTPUT=${actual}.out" + -D "TEST_EXPECT=0" + -D "TEST_FILTER=(^(HDF5)[^\n]*)" + -D "TEST_REFERENCE=${expected}.new" + -P "${HDF5_RESOURCES_DIR}/runTest.cmake" + ) + SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-H5DMP_CMP-${testname} PROPERTIES DEPENDS H5JAM-CHECKFILE-H5DMP-${testname}) + SET (last_test "H5JAM-CHECKFILE-H5DMP_CMP-${testname}") + ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER) + ENDMACRO(CHECKFILE testname expected actual) + + MACRO (SETUP testname infile outfile) + ADD_TEST ( + NAME H5JAM-SETUP-${testname}-clear-objects + COMMAND ${CMAKE_COMMAND} -E remove ${outfile} + ) + IF (NOT "${last_test}" STREQUAL "") + SET_TESTS_PROPERTIES (H5JAM-SETUP-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) + ENDIF (NOT "${last_test}" STREQUAL "") + ADD_TEST ( + NAME H5JAM-SETUP-${testname} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${HDF5_TOOLS_H5JAM_SOURCE_DIR}/testfiles/${infile} ${PROJECT_BINARY_DIR}/${outfile} + ) + SET_TESTS_PROPERTIES (H5JAM-SETUP-${testname} PROPERTIES DEPENDS H5JAM-SETUP-${testname}-clear-objects) + SET (last_test "H5JAM-SETUP-${testname}") + ENDMACRO(SETUP testname infile outfile) + + MACRO (CHECK_UB_1 testname testfile ufile) + IF (NOT HDF5_ENABLE_USING_MEMCHECKER) + ADD_TEST ( + NAME H5JAM-CHECK_UB_1-${testname}-clear-objects + COMMAND ${CMAKE_COMMAND} + -E remove + ${testfile}.len.txt + ${testfile}.cmp + ${ufile}.cmp + ) + IF (NOT "${last_test}" STREQUAL "") + SET_TESTS_PROPERTIES (H5JAM-CHECK_UB_1-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) + ENDIF (NOT "${last_test}" STREQUAL "") + ADD_TEST ( + NAME H5JAM-CHECK_UB_1-${testname} + COMMAND "${CMAKE_COMMAND}" + -D "TEST_PROGRAM=$" + -D "TEST_GET_PROGRAM=$" + -D "TEST_CHECKUB=YES" + -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" + -D "TEST_HFILE=${testfile}" + -D "TEST_UFILE=${ufile}" + -D "TEST_EXPECT=0" + -D "TEST_OFILE=${ARGN}" + -P "${HDF5_RESOURCES_DIR}/userblockTest.cmake" + ) + SET_TESTS_PROPERTIES (H5JAM-CHECK_UB_1-${testname} PROPERTIES DEPENDS H5JAM-CHECK_UB_1-${testname}-clear-objects) + SET (last_test "H5JAM-CHECK_UB_1-${testname}") + ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER) + ENDMACRO(CHECK_UB_1 testname testfile ufile) + + MACRO (CHECK_NOUB testname testfile) + IF (NOT HDF5_ENABLE_USING_MEMCHECKER) + ADD_TEST ( + NAME H5JAM-CHECK_NOUB-${testname} + COMMAND "${CMAKE_COMMAND}" + -D "TEST_PROGRAM=$" + -D "TEST_GET_PROGRAM=$" + -D "TEST_CHECKUB=NO" + -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" + -D "TEST_HFILE=${testfile}" + -D "TEST_EXPECT=0" + -D "TEST_UFILE=NULL" + -D "TEST_OFILE=NULL" + -P "${HDF5_RESOURCES_DIR}/userblockTest.cmake" + ) + IF (NOT "${last_test}" STREQUAL "") + SET_TESTS_PROPERTIES (H5JAM-CHECK_NOUB-${testname} PROPERTIES DEPENDS ${last_test}) + ENDIF (NOT "${last_test}" STREQUAL "") + SET (last_test "H5JAM-CHECK_NOUB-${testname}") + ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER) + ENDMACRO(CHECK_NOUB testname testfile) + + MACRO (UNJAMTEST testname infile ufile outfile) + ADD_TEST ( + NAME H5JAM-UNJAM-${testname}-clear-objects + COMMAND ${CMAKE_COMMAND} -E remove ${outfile} + ) + IF (NOT "${last_test}" STREQUAL "") + SET_TESTS_PROPERTIES (H5JAM-UNJAM-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) + ENDIF (NOT "${last_test}" STREQUAL "") + IF (NOT "${ufile}" STREQUAL "NONE") + ADD_TEST ( + NAME H5JAM-UNJAM_D-${testname}-clear-objects + COMMAND ${CMAKE_COMMAND} -E remove ${ufile} + ) + SET_TESTS_PROPERTIES (H5JAM-UNJAM_D-${testname}-clear-objects PROPERTIES DEPENDS H5JAM-UNJAM-${testname}-clear-objects) + ADD_TEST (NAME H5JAM-UNJAM-${testname} COMMAND $ -i ${infile} -u ${ufile} -o ${outfile}) + SET_TESTS_PROPERTIES (H5JAM-UNJAM-${testname} PROPERTIES DEPENDS H5JAM-UNJAM_D-${testname}-clear-objects) + SET (compare_test ${ufile}) + ELSE (NOT "${ufile}" STREQUAL "NONE") + IF (NOT "${ARGN}" STREQUAL "--delete") + ADD_TEST ( + NAME H5JAM-UNJAM_D-${testname}-clear-objects + COMMAND ${CMAKE_COMMAND} -E remove ${outfile}.ufile.txt ${outfile}.ufile.txt.err + ) + SET_TESTS_PROPERTIES (H5JAM-UNJAM_D-${testname}-clear-objects PROPERTIES DEPENDS H5JAM-UNJAM-${testname}-clear-objects) + IF (HDF5_ENABLE_USING_MEMCHECKER) + ADD_TEST (NAME H5JAM-UNJAM-${testname} COMMAND $ -i ${infile} -o ${outfile}) + ELSE (HDF5_ENABLE_USING_MEMCHECKER) + ADD_TEST ( + NAME H5JAM-UNJAM-${testname} + COMMAND "${CMAKE_COMMAND}" + -D "TEST_PROGRAM=$" + -D "TEST_ARGS:STRING=-i;${infile};-o;${outfile}" + -D "TEST_FOLDER=${PROJECT_BINARY_DIR}" + -D "TEST_OUTPUT=${outfile}.ufile.txt" + -D "TEST_EXPECT=0" + -D "TEST_SKIP_COMPARE=TRUE" + -P "${HDF5_RESOURCES_DIR}/runTest.cmake" + ) + ENDIF (HDF5_ENABLE_USING_MEMCHECKER) + SET_TESTS_PROPERTIES (H5JAM-UNJAM-${testname} PROPERTIES DEPENDS H5JAM-UNJAM_D-${testname}-clear-objects) + SET (compare_test "${outfile}.ufile.txt") + ELSE (NOT "${ARGN}" STREQUAL "--delete") + ADD_TEST (NAME H5JAM-UNJAM-${testname} COMMAND $ -i ${infile} -o ${outfile}) + SET_TESTS_PROPERTIES (H5JAM-UNJAM-${testname} PROPERTIES DEPENDS H5JAM-UNJAM-${testname}-clear-objects) + SET (compare_test "") + ENDIF (NOT "${ARGN}" STREQUAL "--delete") + ENDIF (NOT "${ufile}" STREQUAL "NONE") + SET (last_test "H5JAM-UNJAM-${testname}") + IF (NOT "${compare_test}" STREQUAL "") + CHECK_UB_1 (${testname} ${infile} ${compare_test}) + ENDIF (NOT "${compare_test}" STREQUAL "") + CHECK_NOUB (${testname} ${outfile}) + ENDMACRO(UNJAMTEST testname infile ufile outfile) + + MACRO (JAMTEST testname jamfile infile outfile) + ADD_TEST ( + NAME H5JAM-${testname}-clear-objects + COMMAND ${CMAKE_COMMAND} -E remove ${outfile} ${infile}.cpy.h5 + ) + IF (NOT "${last_test}" STREQUAL "") + SET_TESTS_PROPERTIES (H5JAM-${testname}-clear-objects PROPERTIES DEPENDS ${last_test}) + ENDIF (NOT "${last_test}" STREQUAL "") + SET (last_test "H5JAM-${testname}-clear-objects") + IF ("${outfile}" STREQUAL "NONE") + ADD_TEST ( + NAME H5JAM-NONE_COPY-${testname} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${infile} ${infile}.cpy.h5 + ) + SET_TESTS_PROPERTIES (H5JAM-NONE_COPY-${testname} PROPERTIES DEPENDS ${last_test}) + SET (last_test "H5JAM-NONE_COPY-${testname}") + ADD_TEST (NAME H5JAM-${testname} COMMAND $ -u testfiles/${jamfile} -i ${infile} ${ARGN}) + SET (compare_test ${infile}) + SET (compare_orig ${infile}.cpy.h5) + ELSE ("${outfile}" STREQUAL "NONE") + ADD_TEST (NAME H5JAM-${testname} COMMAND $ -u testfiles/${jamfile} -i testfiles/${infile} -o ${outfile} ${ARGN}) + SET (compare_test ${outfile}) + SET (compare_orig testfiles/${infile}) + ENDIF ("${outfile}" STREQUAL "NONE") + SET_TESTS_PROPERTIES (H5JAM-${testname} PROPERTIES DEPENDS ${last_test}) + SET (last_test "H5JAM-${testname}") + IF ("${ARGN}" STREQUAL "--clobber") + SET (compare_orig "") + ENDIF ("${ARGN}" STREQUAL "--clobber") + CHECK_UB_1 (${testname} ${compare_test} testfiles/${jamfile} ${compare_orig}) + ENDMACRO (JAMTEST testname jamfile infile outfile) + +############################################################################## +############################################################################## +### T H E T E S T S ### +############################################################################## +############################################################################## + + ADD_HELP_TEST(help 0 -h) + + JAMTEST (tall_u10 u10.txt tall.h5 ta2.h5) + CHECKFILE (tall_u10 tall.h5 ta2.h5) +# CLEANUP (tall_u10 ta2.h5) + JAMTEST (tall_u511 u511.txt tall.h5 ta3.h5) + CHECKFILE (tall_u511 tall.h5 ta3.h5) +# CLEANUP (tall_u511 ta3.h5) + JAMTEST (tall_u512 u512.txt tall.h5 ta4.h5) + CHECKFILE (tall_u512 tall.h5 ta4.h5) +# CLEANUP (tall_u512 ta4.h5) + JAMTEST (tall_u513 u513.txt tall.h5 ta5.h5) + CHECKFILE (tall_u513 tall.h5 ta5.h5) +# CLEANUP (tall_u513 ta5.h5) + + SETUP (ta_u10 tall.h5 ta.h5) + JAMTEST (ta_u10 u10.txt ta.h5 NONE) + CHECKFILE (ta_u10 tall.h5 ta.h5) + SETUP (ta_u511 tall.h5 ta.h5 NOCLEAN) + JAMTEST (ta_u511 u511.txt ta.h5 NONE) + CHECKFILE (ta_u511 tall.h5 ta.h5) + SETUP (ta_u512 tall.h5 ta.h5 NOCLEAN) + JAMTEST (ta_u512 u512.txt ta.h5 NONE) + CHECKFILE (ta_u512 tall.h5 ta.h5) + SETUP (ta_u513 tall.h5 ta.h5 NOCLEAN) + JAMTEST (ta_u513 u513.txt ta.h5 NONE) + CHECKFILE (ta_u513 tall.h5 ta.h5) +# CLEANUP (ta ta.h5) + + JAMTEST (twithub_u10 u10.txt twithub.h5 tax2.h5) + CHECKFILE (twithub_u10 tall.h5 tax2.h5) +# CLEANUP (twithub_u10 tax2.h5) + JAMTEST (twithub_u511 u511.txt twithub.h5 tax3.h5) + CHECKFILE (twithub_u511 tall.h5 tax3.h5) +# CLEANUP (twithub_u511 tax3.h5) + JAMTEST (twithub_u512 u512.txt twithub.h5 tax4.h5) + CHECKFILE (twithub_u512 tall.h5 tax4.h5) +# CLEANUP (twithub_u512 tax4.h5) + JAMTEST (twithub_u513 u513.txt twithub.h5 tax5.h5) + CHECKFILE (twithub_u513 tall.h5 tax5.h5) +# CLEANUP (twithub_u513 tax5.h5) + + JAMTEST (twithub513_u10 u10.txt twithub513.h5 tax6.h5) + CHECKFILE (twithub513_u10 tall.h5 tax6.h5) +# CLEANUP (twithub513_u10 tax6.h5) + JAMTEST (twithub513_u511 u511.txt twithub513.h5 tax7.h5) + CHECKFILE (twithub513_u511 tall.h5 tax7.h5) +# CLEANUP (twithub513_u511 tax7.h5) + JAMTEST (twithub513_u512 u512.txt twithub513.h5 tax8.h5) + CHECKFILE (twithub513_u512 tall.h5 tax8.h5) +# CLEANUP (twithub513_u512 tax8.h5) + JAMTEST (twithub513_u513 u513.txt twithub513.h5 tax9.h5) + CHECKFILE (twithub513_u513 tall.h5 tax9.h5) +# CLEANUP (twithub513_u513 tax9.h5) + + JAMTEST (twithub_u10_c u10.txt twithub.h5 taz2.h5 --clobber) + CHECKFILE (twithub_u10_c tall.h5 taz2.h5) +# CLEANUP (twithub_u10_c taz2.h5) + JAMTEST (twithub_u511_c u511.txt twithub.h5 taz3.h5 --clobber) + CHECKFILE (twithub_u511_c tall.h5 taz3.h5) +# CLEANUP (twithub_u511_c taz3.h5) + JAMTEST (twithub_u512_c u512.txt twithub.h5 taz4.h5 --clobber) + CHECKFILE (twithub_u512_c tall.h5 taz4.h5) +# CLEANUP (twithub_u512_c taz4.h5) + JAMTEST (twithub_u513_c u513.txt twithub.h5 taz5.h5 --clobber) + CHECKFILE (twithub_u513_c tall.h5 taz5.h5) +# CLEANUP (twithub_u513_c taz5.h5) + + JAMTEST (twithub513_u10_c u10.txt twithub513.h5 taz6.h5 --clobber) + CHECKFILE (twithub513_u10_c tall.h5 taz6.h5) +# CLEANUP (twithub513_u10_c taz6.h5) + JAMTEST (twithub513_u511_c u511.txt twithub513.h5 taz7.h5 --clobber) + CHECKFILE (twithub513_u511_c tall.h5 taz7.h5) +# CLEANUP (twithub513_u511_c taz7.h5) + JAMTEST (twithub513_u512_c u512.txt twithub513.h5 taz8.h5 --clobber) + CHECKFILE (twithub513_u512_c tall.h5 taz8.h5) +# CLEANUP (twithub513_u512_c taz8.h5) + JAMTEST (twithub513_u513_c u513.txt twithub513.h5 taz9.h5 --clobber) + CHECKFILE (twithub513_u513_c tall.h5 taz9.h5) +# CLEANUP (twithub513_u513_c taz9.h5) + + SETUP (N_twithub_u10_c twithub.h5 tay2.h5) + JAMTEST (N_twithub_u10_c u10.txt tay2.h5 NONE --clobber) + CHECKFILE (N_twithub_u10_c tall.h5 tay2.h5) +# CLEANUP (N_twithub_u10_c tay2.h5) + SETUP (N_twithub_u511_c twithub.h5 tay3.h5) + JAMTEST (N_twithub_u511_c u511.txt tay3.h5 NONE --clobber) + CHECKFILE (N_twithub_u511_c tall.h5 tay3.h5) +# CLEANUP (N_twithub_u511_c tay3.h5) + SETUP (N_twithub_u512_c twithub.h5 tay4.h5) + JAMTEST (N_twithub_u512_c u512.txt tay4.h5 NONE --clobber) + CHECKFILE (N_twithub_u512_c tall.h5 tay4.h5) +# CLEANUP (N_twithub_u512_c tay4.h5) + SETUP (N_twithub_u513_c twithub.h5 tay5.h5) + JAMTEST (N_twithub_u513_c u513.txt tay5.h5 NONE --clobber) + CHECKFILE (N_twithub_u513_c tall.h5 tay5.h5) +# CLEANUP (N_twithub_u513_c tay5.h5) + + SETUP (N_twithub513_u10_c twithub513.h5 tay6.h5) + JAMTEST (N_twithub513_u10_c u10.txt tay6.h5 NONE --clobber) + CHECKFILE (N_twithub513_u10_c tall.h5 tay6.h5) +# CLEANUP (N_twithub513_u10_c tay6.h5) + SETUP (N_twithub513_u511_c twithub513.h5 tay7.h5) + JAMTEST (N_twithub513_u511_c u511.txt tay7.h5 NONE --clobber) + CHECKFILE (N_twithub513_u511_c tall.h5 tay7.h5) +# CLEANUP (N_twithub513_u511_c tay7.h5) + SETUP (N_twithub513_u512_c twithub513.h5 tay8.h5) + JAMTEST (N_twithub513_u512_c u512.txt tay8.h5 NONE --clobber) + CHECKFILE (N_twithub513_u512_c tall.h5 tay8.h5) +# CLEANUP (N_twithub513_u512_c tay8.h5) + SETUP (N_twithub513_u513_c twithub513.h5 tay9.h5) + JAMTEST (N_twithub513_u513_c u513.txt tay9.h5 NONE --clobber) + CHECKFILE (N_twithub513_u513_c tall.h5 tay9.h5) +# CLEANUP (N_twithub513_u513_c tay9.h5) + + SETUP (twithub_tall twithub.h5 tai1.h5) + UNJAMTEST (twithub_tall tai1.h5 o10.txt taa1.h5) + CHECKFILE (twithub_tall tall.h5 taa1.h5) +# CLEANUP (twithub_tall taa1.h5 tai1.h5 o10.txt) + SETUP (twithub513_tall twithub513.h5 tai2.h5) + UNJAMTEST (twithub513_tall tai2.h5 o512.txt taa2.h5) + CHECKFILE (twithub513_tall tall.h5 taa2.h5) +# CLEANUP (twithub513_tall taa2.h5 tai2.h5 o512.txt) + + SETUP (N_twithub_tall twithub.h5 tai3.h5) + UNJAMTEST (N_twithub_tall tai3.h5 NONE taa3.h5) + CHECKFILE (N_twithub_tall tall.h5 taa3.h5) +# CLEANUP (N_twithub_tall taa3.h5 tai3.h5) + SETUP (N_twithub513_tall twithub513.h5 tai4.h5) + UNJAMTEST (N_twithub513_tall tai4.h5 NONE taa4.h5) + CHECKFILE (N_twithub513_tall tall.h5 taa4.h5) +# CLEANUP (N_twithub513_tall taa4.h5 tai4.h5) + + SETUP (D_twithub_tall twithub.h5 taj2.h5) + UNJAMTEST (D_twithub_tall taj2.h5 NONE tac2.h5 --delete) + CHECKFILE (D_twithub_tall tall.h5 tac2.h5) +# CLEANUP (D_twithub_tall tac2.h5 taj2.h5) + SETUP (D_twithub513_tall twithub513.h5 taj3.h5) + UNJAMTEST (D_twithub513_tall taj3.h5 NONE tac3.h5 --delete) + CHECKFILE (D_twithub513_tall tall.h5 tac3.h5) +# CLEANUP (D_twithub513_tall tac3.h5 taj3.h5) + +ENDIF (BUILD_TESTING) + +############################################################################## +############################################################################## +### I N S T A L L A T I O N ### +############################################################################## +############################################################################## + #----------------------------------------------------------------------------- # Rules for Installation of tools using make Install target #----------------------------------------------------------------------------- -INSTALL ( - TARGETS - h5jam h5unjam - RUNTIME DESTINATION - ${HDF5_INSTALL_BIN_DIR}/tools - COMPONENT - toolsapplications -) +INSTALL ( + TARGETS + h5jam h5unjam + RUNTIME DESTINATION + ${HDF5_INSTALL_BIN_DIR}/tools + COMPONENT + toolsapplications +) diff --git a/tools/h5stat/h5stat.c b/tools/h5stat/h5stat.c index c58a9ef..708821e 100644 --- a/tools/h5stat/h5stat.c +++ b/tools/h5stat/h5stat.c @@ -15,7 +15,7 @@ #include #include -#include "H5private.h" /* Generic Functions */ +#include "H5private.h" /* Generic Functions */ #include "h5tools.h" #include "h5tools_utils.h" #include "h5tools_ref.h" @@ -27,7 +27,7 @@ /* Parameters to control statistics gathered */ #define SIZE_SMALL_GROUPS 10 -#define SIZE_SMALL_ATTRS 10 +#define SIZE_SMALL_ATTRS 10 #define SIZE_SMALL_DSETS 10 #define H5_NFILTERS_IMPL 8 /* Number of currently implemented filters + one to @@ -65,7 +65,7 @@ typedef struct iter_t { unsigned long *group_bins; /* Pointer to array of bins for group counts */ ohdr_info_t group_ohdr_info; /* Object header information for groups */ - hsize_t max_attrs; /* Maximum attributes from a group */ + hsize_t max_attrs; /* Maximum attributes from a group */ unsigned long num_small_attrs[SIZE_SMALL_ATTRS]; /* Size of small attributes tracked */ unsigned attr_nbins; /* Number of bins for attribute counts */ unsigned long *attr_bins; /* Pointer to array of bins for attribute counts */ @@ -90,8 +90,8 @@ typedef struct iter_t { hsize_t attrs_heap_storage_size; /* fractal heap size for attributes (1.8) */ hsize_t SM_hdr_storage_size; /* header size for SOHM table (1.8) */ hsize_t SM_index_storage_size; /* index (btree & list) size for SOHM table (1.8) */ - hsize_t SM_heap_storage_size; /* fractal heap size for SOHM table (1.8) */ - hsize_t super_ext_size; /* superblock extension size */ + hsize_t SM_heap_storage_size; /* fractal heap size for SOHM table (1.8) */ + hsize_t super_ext_size; /* superblock extension size */ hsize_t ublk_size; /* user block size (if exists) */ hsize_t datasets_index_storage_size;/* meta size for chunked dataset's indexing type */ hsize_t datasets_heap_storage_size; /* heap size for dataset with external storage */ @@ -268,7 +268,7 @@ ceil_log10(unsigned long x) static herr_t attribute_stats(iter_t *iter, const H5O_info_t *oi) { - unsigned bin; /* "bin" the number of objects falls in */ + unsigned bin; /* "bin" the number of objects falls in */ /* Update dataset & attribute metadata info */ iter->attrs_btree_storage_size += oi->meta_size.attr.index_size; @@ -283,12 +283,12 @@ attribute_stats(iter_t *iter, const H5O_info_t *oi) /* Add attribute count to proper bin */ bin = ceil_log10((unsigned long)oi->num_attrs); if((bin + 1) > iter->attr_nbins) { - iter->attr_bins = (unsigned long *)realloc(iter->attr_bins, (bin + 1) * sizeof(unsigned long)); + iter->attr_bins = (unsigned long *)realloc(iter->attr_bins, (bin + 1) * sizeof(unsigned long)); assert(iter->attr_bins); - /* Initialize counts for intermediate bins */ + /* Initialize counts for intermediate bins */ while(iter->attr_nbins < bin) - iter->attr_bins[iter->attr_nbins++] = 0; + iter->attr_bins[iter->attr_nbins++] = 0; iter->attr_nbins++; /* Initialize count for new bin */ @@ -316,23 +316,23 @@ attribute_stats(iter_t *iter, const H5O_info_t *oi) * Modifications: Refactored code from the walk_function * EIP, Wednesday, August 16, 2006 * - * Vailin Choi 12 July 2007 - * 1. Gathered storage info for btree and heap - * (groups and attributes) - * 2. Gathered info for attributes + * Vailin Choi 12 July 2007 + * 1. Gathered storage info for btree and heap + * (groups and attributes) + * 2. Gathered info for attributes * - * Vailin Choi 14 July 2007 - * Cast "num_objs" and "num_attrs" to size_t - * Due to the -Mbounds problem for the pgi-32 bit compiler on indexing + * Vailin Choi 14 July 2007 + * Cast "num_objs" and "num_attrs" to size_t + * Due to the -Mbounds problem for the pgi-32 bit compiler on indexing * *------------------------------------------------------------------------- */ static herr_t group_stats(iter_t *iter, const char *name, const H5O_info_t *oi) { - H5G_info_t ginfo; /* Group information */ - unsigned bin; /* "bin" the number of objects falls in */ - herr_t ret; + H5G_info_t ginfo; /* Group information */ + unsigned bin; /* "bin" the number of objects falls in */ + herr_t ret; /* Gather statistics about this type of object */ iter->uniq_groups++; @@ -358,7 +358,7 @@ group_stats(iter_t *iter, const char *name, const H5O_info_t *oi) iter->group_bins = (unsigned long *)realloc(iter->group_bins, (bin + 1) * sizeof(unsigned long)); assert(iter->group_bins); - /* Initialize counts for intermediate bins */ + /* Initialize counts for intermediate bins */ while(iter->group_nbins < bin) iter->group_bins[iter->group_nbins++] = 0; iter->group_nbins++; @@ -402,22 +402,22 @@ group_stats(iter_t *iter, const char *name, const H5O_info_t *oi) static herr_t dataset_stats(iter_t *iter, const char *name, const H5O_info_t *oi) { - unsigned bin; /* "bin" the number of objects falls in */ - hid_t did; /* Dataset ID */ - hid_t sid; /* Dataspace ID */ - hid_t tid; /* Datatype ID */ - hid_t dcpl; /* Dataset creation property list ID */ - hsize_t dims[H5S_MAX_RANK];/* Dimensions of dataset */ - H5D_layout_t lout; /* Layout of dataset */ - unsigned type_found; /* Whether the dataset's datatype was */ - /* already found */ - int ndims; /* Number of dimensions of dataset */ - hsize_t storage; /* Size of dataset storage */ - unsigned u; /* Local index variable */ - int num_ext; /* Number of external files for a dataset */ - int nfltr; /* Number of filters for a dataset */ - H5Z_filter_t fltr; /* Filter identifier */ - herr_t ret; + unsigned bin; /* "bin" the number of objects falls in */ + hid_t did; /* Dataset ID */ + hid_t sid; /* Dataspace ID */ + hid_t tid; /* Datatype ID */ + hid_t dcpl; /* Dataset creation property list ID */ + hsize_t dims[H5S_MAX_RANK];/* Dimensions of dataset */ + H5D_layout_t lout; /* Layout of dataset */ + unsigned type_found; /* Whether the dataset's datatype was */ + /* already found */ + int ndims; /* Number of dimensions of dataset */ + hsize_t storage; /* Size of dataset storage */ + unsigned u; /* Local index variable */ + int num_ext; /* Number of external files for a dataset */ + int nfltr; /* Number of filters for a dataset */ + H5Z_filter_t fltr; /* Filter identifier */ + herr_t ret; /* Gather statistics about this type of object */ iter->uniq_dsets++; @@ -615,7 +615,7 @@ datatype_stats(iter_t *iter, const H5O_info_t *oi) * Purpose: Gather statistics about an object * * Return: Success: 0 - * Failure: -1 + * Failure: -1 * * Programmer: Quincey Koziol * Tuesday, November 6, 2007 @@ -644,7 +644,7 @@ obj_stats(const char *path, const H5O_info_t *oi, const char *already_visited, break; case H5O_TYPE_NAMED_DATATYPE: - datatype_stats(iter, oi); + datatype_stats(iter, oi); break; default: @@ -771,7 +771,7 @@ parse_command_line(int argc, const char *argv[]) case 'G': display_all = FALSE; - display_group_metadata = TRUE; + display_group_metadata = TRUE; break; case 'g': @@ -781,7 +781,7 @@ parse_command_line(int argc, const char *argv[]) case 'D': display_all = FALSE; - display_dset_metadata = TRUE; + display_dset_metadata = TRUE; break; case 'd': @@ -791,7 +791,7 @@ parse_command_line(int argc, const char *argv[]) case 'T': display_all = FALSE; - display_dset_dtype_meta = TRUE; + display_dset_dtype_meta = TRUE; break; case 'A': @@ -871,6 +871,41 @@ iter_init(iter_t *iter, hid_t fid) /*------------------------------------------------------------------------- + * Function: free_iter + * + * Purpose: Freee iter structure + * + * Return: Success: 0 + * + * Failure: Never fails + * + *------------------------------------------------------------------------- + */ +static herr_t +iter_free(iter_t *iter) +{ + /* Clear array of bins for group counts */ + if(iter->group_bins) + free(iter->group_bins); + iter->group_bins = NULL; + /* Clear array of bins for attribute counts */ + if(iter->attr_bins) + free(iter->attr_bins); + iter->attr_bins = NULL; + /* Clear dataset datatype information found */ + if(iter->dset_type_info) + free(iter->dset_type_info); + iter->dset_type_info = NULL; + /* Clear array of bins for dataset dimensions */ + if(iter->dset_dim_bins) + free(iter->dset_dim_bins); + iter->dset_dim_bins = NULL; + + return 0; +} + + +/*------------------------------------------------------------------------- * Function: print_file_info * * Purpose: Prints information about file @@ -931,13 +966,13 @@ print_file_metadata(const iter_t *iter) HDfprintf(stdout, "\tObject headers: (total/unused)\n"); HDfprintf(stdout, "\t\tGroups: %Hu/%Hu\n", iter->group_ohdr_info.total_size, - iter->group_ohdr_info.free_size); + iter->group_ohdr_info.free_size); HDfprintf(stdout, "\t\tDatasets(exclude compact data): %Hu/%Hu\n", - iter->dset_ohdr_info.total_size, - iter->dset_ohdr_info.free_size); + iter->dset_ohdr_info.total_size, + iter->dset_ohdr_info.free_size); HDfprintf(stdout, "\t\tDatatypes: %Hu/%Hu\n", iter->dtype_ohdr_info.total_size, - iter->dtype_ohdr_info.free_size); + iter->dtype_ohdr_info.free_size); HDfprintf(stdout, "\tGroups:\n"); HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->groups_btree_storage_size); @@ -975,9 +1010,9 @@ print_file_metadata(const iter_t *iter) * Saturday, August 12, 2006 * * Modifications: - * bug #1253; Oct 6th 2008; Vailin Choi - * Fixed segmentation fault: print iter->group_bins[0] when - * there is iter->group_nbins + * bug #1253; Oct 6th 2008; Vailin Choi + * Fixed segmentation fault: print iter->group_bins[0] when + * there is iter->group_nbins * *------------------------------------------------------------------------- */ @@ -1115,7 +1150,7 @@ print_dataset_info(const iter_t *iter) printf("Dataset storage information:\n"); HDfprintf(stdout, "\tTotal raw data size: %Hu\n", iter->dset_storage_size); - HDfprintf(stdout, "\tTotal external raw data size: %Hu\n", iter->dset_external_storage_size); + HDfprintf(stdout, "\tTotal external raw data size: %Hu\n", iter->dset_external_storage_size); printf("Dataset layout information:\n"); for(u = 0; u < H5D_NLAYOUTS; u++) @@ -1367,12 +1402,12 @@ print_statistics(const char *name, const iter_t *iter) int main(int argc, const char *argv[]) { - iter_t iter; - const char *fname = NULL; - hid_t fid; + iter_t iter; + const char *fname = NULL; + hid_t fid; hid_t fcpl; struct handler_t *hand = NULL; - H5F_info_t finfo; + H5F_info_t finfo; int i; h5tools_setprogname(PROGRAMNAME); @@ -1403,12 +1438,12 @@ main(int argc, const char *argv[]) /* Get storge info for SOHM's btree/list/heap and superblock extension */ if(H5Fget_info(fid, &finfo) < 0) - warn_msg("Unable to retrieve SOHM info\n"); + warn_msg("Unable to retrieve SOHM info\n"); else { - iter.super_ext_size = finfo.super_ext_size; - iter.SM_hdr_storage_size = finfo.sohm.hdr_size; - iter.SM_index_storage_size = finfo.sohm.msgs_info.index_size; - iter.SM_heap_storage_size = finfo.sohm.msgs_info.heap_size; + iter.super_ext_size = finfo.super_ext_size; + iter.SM_hdr_storage_size = finfo.sohm.hdr_size; + iter.SM_index_storage_size = finfo.sohm.msgs_info.index_size; + iter.SM_heap_storage_size = finfo.sohm.msgs_info.heap_size; } /* end else */ if((fcpl = H5Fget_create_plist(fid)) < 0) @@ -1424,17 +1459,17 @@ main(int argc, const char *argv[]) u = 0; while(hand[u].obj) { if (h5trav_visit(fid, hand[u].obj, TRUE, TRUE, obj_stats, lnk_stats, &iter) < 0) - warn_msg("Unable to traverse object \"%s\"\n", hand[u].obj); - else - print_statistics(hand[u].obj, &iter); + warn_msg("Unable to traverse object \"%s\"\n", hand[u].obj); + else + print_statistics(hand[u].obj, &iter); u++; } /* end while */ } /* end if */ else { if (h5trav_visit(fid, "/", TRUE, TRUE, obj_stats, lnk_stats, &iter) < 0) - warn_msg("Unable to traverse objects/links in file \"%s\"\n", fname); - else - print_statistics("/", &iter); + warn_msg("Unable to traverse objects/links in file \"%s\"\n", fname); + else + print_statistics("/", &iter); } /* end else */ done: @@ -1448,6 +1483,9 @@ done: free(hand); hand = NULL; + /* Free iter structure */ + iter_free(&iter); + if(H5Fclose(fid) < 0) { error_msg("unable to close file \"%s\"\n", fname); h5tools_setstatus(EXIT_FAILURE); diff --git a/tools/h5stat/testh5stat.sh.in b/tools/h5stat/testh5stat.sh.in index 96673ef..0481f3f 100644 --- a/tools/h5stat/testh5stat.sh.in +++ b/tools/h5stat/testh5stat.sh.in @@ -125,6 +125,7 @@ TOOLTEST h5stat_filters-g.ddl -g h5stat_filters.h5 TOOLTEST h5stat_filters-dT.ddl -dT h5stat_filters.h5 TOOLTEST h5stat_filters-UD.ddl -D h5stat_filters.h5 TOOLTEST h5stat_filters-UT.ddl -T h5stat_filters.h5 +# # h5stat_tsohm.h5 is a copy of ../../../test/tsohm.h5 generated by tsohm.c # as of release 1.8.7-snap0 (on a 64-bit machine) TOOLTEST h5stat_tsohm.ddl h5stat_tsohm.h5 diff --git a/windows/tools/h5dump/testh5dump.bat b/windows/tools/h5dump/testh5dump.bat index 1807113..0f3f9c7 100644 --- a/windows/tools/h5dump/testh5dump.bat +++ b/windows/tools/h5dump/testh5dump.bat @@ -33,8 +33,6 @@ call :detect_filter fletcher32 call :detect_filter nbit call :detect_filter scaleoffset -call :detect_packedbits - rem The tool name set dumper=h5dump%2 rem The path of the tool library @@ -293,16 +291,6 @@ rem --SJW 9/4/07 exit /b -:detect_packedbits - findstr /b /i /c:"#define H5_HAVE_H5DUMP_PACKED_BITS" %h5pubconf% > nul - if %errorlevel% equ 0 ( - set Have_Packed_Bits=yes - ) else ( - set Have_Packed_Bits=no - ) - - exit /b - rem ############################################################################ rem ############################################################################ @@ -311,6 +299,9 @@ rem ############################################################################ rem ############################################################################ :main + rem test for signed/unsigned datasets + call :tooltest packedbits.ddl packedbits.h5 + rem test for displaying groups call :tooltest tgroup-1.ddl tgroup.h5 rem test for displaying the selected groups @@ -427,11 +418,7 @@ rem ############################################################################ rem test failure handling rem Missing file name - if "%Have_Packed_Bits%"=="yes" ( - call :tooltest tnofilename-with-packed-bits.ddl - ) else ( - call :tooltest tnofilename.ddl - ) + call :tooltest tnofilename.ddl rem rev. 2004 @@ -581,11 +568,11 @@ rem ############################################################################ call :tooltest1 tbin1.ddl -d integer -o out1.bin -b tbinary.h5 call :importtest out1.bin -c out3.h5import -o out1.h5 call :difftest tbinary.h5 out1.h5 /integer /integer - - call :tooltest1 tbin2.ddl -b BE -d float -o out2.bin tbinary.h5 - + + call :tooltest1 tbin2.ddl -b BE -d float -o out2.bin tbinary.h5 + rem the NATIVE test can be validated with h5import/h5diff - call :tooltest1 tbin3.ddl -d integer -o out3.bin -b NATIVE tbinary.h5 + call :tooltest1 tbin3.ddl -d integer -o out3.bin -b NATIVE tbinary.h5 call :importtest out3.bin -c out3.h5import -o out3.h5 call :difftest tbinary.h5 out3.h5 /integer /integer @@ -596,7 +583,7 @@ rem ############################################################################ for /l %%a in (1,1,4) do del /f %testdir%\out%%a.bin del /f %testdir%\out3.h5 ) - + rem test for dataset region references call :tooltest tdatareg.ddl tdatareg.h5 call :tooltest tdataregR.ddl -R tdatareg.h5 @@ -621,97 +608,91 @@ rem ############################################################################ rem Note: Make sure to use PERCENT rather than "%", because Windows needs rem to handle it specially. --SJW 5/12/08 call :tooltest tfpformat.ddl -m PERCENT.7f tfpformat.h5 - + rem tests for traversal of external links call :tooltest textlinksrc.ddl textlinksrc.h5 call :tooltest textlinkfar.ddl textlinkfar.h5 rem test for dangling external links call :tooltest textlink.ddl textlink.h5 - - rem tests for traversal of external links - call :tooltest textlinksrc.ddl textlinksrc.h5 - call :tooltest textlinkfar.ddl textlinkfar.h5 - - if "%Have_Packed_Bits%"=="yes" ( - rem test for dataset packed bits - rem Set up xCMD to test or skip. - rem Limits: - rem Maximum number of packed bits is 8 (for now). - rem Maximum integer size is 64 (for now). - rem Maximun Offset is 63 (Maximum size - 1). - rem Maximum Offset+Length is 64 (Maximum size). - rem Tests: - rem Normal operation on both signed and unsigned int datasets. - rem Sanity check - rem Their rawdata output should be the same. - call :tooltest tpbitsSignedWhole.ddl -d /DS08BITS -M 0,8 packedbits.h5 - call :tooltest tpbitsUnsignedWhole.ddl -d /DU08BITS -M 0,8 packedbits.h5 - call :tooltest tpbitsSignedIntWhole.ddl -d /DS16BITS -M 0,16 packedbits.h5 - call :tooltest tpbitsUnsignedIntWhole.ddl -d /DU16BITS -M 0,16 packedbits.h5 - call :tooltest tpbitsSignedLongWhole.ddl -d /DS32BITS -M 0,32 packedbits.h5 - call :tooltest tpbitsUnsignedLongWhole.ddl -d /DU32BITS -M 0,32 packedbits.h5 - call :tooltest tpbitsSignedLongLongWhole.ddl -d /DS64BITS -M 0,64 packedbits.h5 - call :tooltest tpbitsUnsignedLongLongWhole.ddl -d /DU64BITS -M 0,64 packedbits.h5 - call :tooltest tpbitsSignedLongLongWhole63.ddl -d /DS64BITS -M 0,63 packedbits.h5 - call :tooltest tpbitsUnsignedLongLongWhole63.ddl -d /DU64BITS -M 0,63 packedbits.h5 - call :tooltest tpbitsSignedLongLongWhole1.ddl -d /DS64BITS -M 1,63 packedbits.h5 - call :tooltest tpbitsUnsignedLongLongWhole1.ddl -d /DU64BITS -M 1,63 packedbits.h5 - rem Half sections - call :tooltest tpbitsSigned4.ddl -d /DS08BITS -M 0,4,4,4 packedbits.h5 - call :tooltest tpbitsUnsigned4.ddl -d /DU08BITS -M 0,4,4,4 packedbits.h5 - call :tooltest tpbitsSignedInt8.ddl -d /DS16BITS -M 0,8,8,8 packedbits.h5 - call :tooltest tpbitsUnsignedInt8.ddl -d /DU16BITS -M 0,8,8,8 packedbits.h5 - call :tooltest tpbitsSignedLong16.ddl -d /DS32BITS -M 0,16,16,16 packedbits.h5 - call :tooltest tpbitsUnsignedLong16.ddl -d /DU32BITS -M 0,16,16,16 packedbits.h5 - call :tooltest tpbitsSignedLongLong32.ddl -d /DS64BITS -M 0,32,32,32 packedbits.h5 - call :tooltest tpbitsUnsignedLongLong32.ddl -d /DU64BITS -M 0,32,32,32 packedbits.h5 - rem Quarter sections - call :tooltest tpbitsSigned2.ddl -d /DS08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5 - call :tooltest tpbitsUnsigned2.ddl -d /DU08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5 - call :tooltest tpbitsSignedInt4.ddl -d /DS16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5 - call :tooltest tpbitsUnsignedInt4.ddl -d /DU16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5 - call :tooltest tpbitsSignedLong8.ddl -d /DS32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5 - call :tooltest tpbitsUnsignedLong8.ddl -d /DU32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5 - call :tooltest tpbitsSignedLongLong16.ddl -d /DS64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5 - call :tooltest tpbitsUnsignedLongLong16.ddl -d /DU64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5 - rem Begin and End - call :tooltest tpbitsSigned.ddl -d /DS08BITS -M 0,2,2,6 packedbits.h5 - call :tooltest tpbitsUnsigned.ddl -d /DU08BITS -M 0,2,2,6 packedbits.h5 - call :tooltest tpbitsSignedInt.ddl -d /DS16BITS -M 0,2,10,6 packedbits.h5 - call :tooltest tpbitsUnsignedInt.ddl -d /DU16BITS -M 0,2,10,6 packedbits.h5 - call :tooltest tpbitsSignedLong.ddl -d /DS32BITS -M 0,2,26,6 packedbits.h5 - call :tooltest tpbitsUnsignedLong.ddl -d /DU32BITS -M 0,2,26,6 packedbits.h5 - call :tooltest tpbitsSignedLongLong.ddl -d /DS64BITS -M 0,2,58,6 packedbits.h5 - call :tooltest tpbitsUnsignedLongLong.ddl -d /DU64BITS -M 0,2,58,6 packedbits.h5 - rem Overlapped packed bits. - call :tooltest tpbitsOverlapped.ddl -d /DS08BITS -M 0,1,1,1,2,1,0,3 packedbits.h5 - rem Maximum number of packed bits. - call :tooltest tpbitsMax.ddl -d /DS08BITS -M 0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5 - rem Compound type. - call :tooltest tpbitsCompound.ddl -d /dset1 -M 0,1,1,1 tcompound.h5 - rem Array type. - call :tooltest tpbitsArray.ddl -d /Dataset1 -M 0,1,1,1 tarray1.h5 - rem Test Error handling. - rem Too many packed bits requested. Max is 8 for now. - call :tooltest tpbitsMaxExceeded.ddl -d /DS08BITS -M 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5 - rem Offset too large. Max is 7 (8-1) for now. - call :tooltest tpbitsOffsetExceeded.ddl -d /DS08BITS -M 64,1 packedbits.h5 - call :tooltest tpbitsCharOffsetExceeded.ddl -d /DS08BITS -M 8,1 packedbits.h5 - call :tooltest tpbitsIntOffsetExceeded.ddl -d /DS16BITS -M 16,1 packedbits.h5 - call :tooltest tpbitsLongOffsetExceeded.ddl -d /DS32BITS -M 32,1 packedbits.h5 - rem Bad offset, must not be negative. - call :tooltest tpbitsOffsetNegative.ddl -d /DS08BITS -M -1,1 packedbits.h5 - rem Bad length, must not be positive. - call :tooltest tpbitsLengthPositive.ddl -d /DS08BITS -M 4,0 packedbits.h5 - rem Offset+Length is too large. Max is 8 for now. - call :tooltest tpbitsLengthExceeded.ddl -d /DS08BITS -M 37,28 packedbits.h5 - call :tooltest tpbitsCharLengthExceeded.ddl -d /DS08BITS -M 2,7 packedbits.h5 - call :tooltest tpbitsIntLengthExceeded.ddl -d /DS16BITS -M 10,7 packedbits.h5 - call :tooltest tpbitsLongLengthExceeded.ddl -d /DS32BITS -M 26,7 packedbits.h5 - rem Incomplete pair of packed bits request. - call :tooltest tpbitsIncomplete.ddl -d /DS08BITS -M 0,2,2,1,0,2,2, packedbits.h5 - ) + + rem test for dataset packed bits + rem Set up xCMD to test or skip. + rem Limits: + rem Maximum number of packed bits is 8 (for now). + rem Maximum integer size is 64 (for now). + rem Maximun Offset is 63 (Maximum size - 1). + rem Maximum Offset+Length is 64 (Maximum size). + rem Tests: + rem Normal operation on both signed and unsigned int datasets. + rem Sanity check + rem Their rawdata output should be the same. + call :tooltest tpbitsSignedWhole.ddl -d /DS08BITS -M 0,8 packedbits.h5 + call :tooltest tpbitsUnsignedWhole.ddl -d /DU08BITS -M 0,8 packedbits.h5 + call :tooltest tpbitsSignedIntWhole.ddl -d /DS16BITS -M 0,16 packedbits.h5 + call :tooltest tpbitsUnsignedIntWhole.ddl -d /DU16BITS -M 0,16 packedbits.h5 + call :tooltest tpbitsSignedLongWhole.ddl -d /DS32BITS -M 0,32 packedbits.h5 + call :tooltest tpbitsUnsignedLongWhole.ddl -d /DU32BITS -M 0,32 packedbits.h5 + call :tooltest tpbitsSignedLongLongWhole.ddl -d /DS64BITS -M 0,64 packedbits.h5 + call :tooltest tpbitsUnsignedLongLongWhole.ddl -d /DU64BITS -M 0,64 packedbits.h5 + call :tooltest tpbitsSignedLongLongWhole63.ddl -d /DS64BITS -M 0,63 packedbits.h5 + call :tooltest tpbitsUnsignedLongLongWhole63.ddl -d /DU64BITS -M 0,63 packedbits.h5 + call :tooltest tpbitsSignedLongLongWhole1.ddl -d /DS64BITS -M 1,63 packedbits.h5 + call :tooltest tpbitsUnsignedLongLongWhole1.ddl -d /DU64BITS -M 1,63 packedbits.h5 + rem Half sections + call :tooltest tpbitsSigned4.ddl -d /DS08BITS -M 0,4,4,4 packedbits.h5 + call :tooltest tpbitsUnsigned4.ddl -d /DU08BITS -M 0,4,4,4 packedbits.h5 + call :tooltest tpbitsSignedInt8.ddl -d /DS16BITS -M 0,8,8,8 packedbits.h5 + call :tooltest tpbitsUnsignedInt8.ddl -d /DU16BITS -M 0,8,8,8 packedbits.h5 + call :tooltest tpbitsSignedLong16.ddl -d /DS32BITS -M 0,16,16,16 packedbits.h5 + call :tooltest tpbitsUnsignedLong16.ddl -d /DU32BITS -M 0,16,16,16 packedbits.h5 + call :tooltest tpbitsSignedLongLong32.ddl -d /DS64BITS -M 0,32,32,32 packedbits.h5 + call :tooltest tpbitsUnsignedLongLong32.ddl -d /DU64BITS -M 0,32,32,32 packedbits.h5 + rem Quarter sections + call :tooltest tpbitsSigned2.ddl -d /DS08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5 + call :tooltest tpbitsUnsigned2.ddl -d /DU08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5 + call :tooltest tpbitsSignedInt4.ddl -d /DS16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5 + call :tooltest tpbitsUnsignedInt4.ddl -d /DU16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5 + call :tooltest tpbitsSignedLong8.ddl -d /DS32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5 + call :tooltest tpbitsUnsignedLong8.ddl -d /DU32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5 + call :tooltest tpbitsSignedLongLong16.ddl -d /DS64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5 + call :tooltest tpbitsUnsignedLongLong16.ddl -d /DU64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5 + rem Begin and End + call :tooltest tpbitsSigned.ddl -d /DS08BITS -M 0,2,2,6 packedbits.h5 + call :tooltest tpbitsUnsigned.ddl -d /DU08BITS -M 0,2,2,6 packedbits.h5 + call :tooltest tpbitsSignedInt.ddl -d /DS16BITS -M 0,2,10,6 packedbits.h5 + call :tooltest tpbitsUnsignedInt.ddl -d /DU16BITS -M 0,2,10,6 packedbits.h5 + call :tooltest tpbitsSignedLong.ddl -d /DS32BITS -M 0,2,26,6 packedbits.h5 + call :tooltest tpbitsUnsignedLong.ddl -d /DU32BITS -M 0,2,26,6 packedbits.h5 + call :tooltest tpbitsSignedLongLong.ddl -d /DS64BITS -M 0,2,58,6 packedbits.h5 + call :tooltest tpbitsUnsignedLongLong.ddl -d /DU64BITS -M 0,2,58,6 packedbits.h5 + rem Overlapped packed bits. + call :tooltest tpbitsOverlapped.ddl -d /DS08BITS -M 0,1,1,1,2,1,0,3 packedbits.h5 + rem Maximum number of packed bits. + call :tooltest tpbitsMax.ddl -d /DS08BITS -M 0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5 + rem Compound type. + call :tooltest tpbitsCompound.ddl -d /dset1 -M 0,1,1,1 tcompound.h5 + rem Array type. + call :tooltest tpbitsArray.ddl -d /Dataset1 -M 0,1,1,1 tarray1.h5 + rem Test Error handling. + rem Too many packed bits requested. Max is 8 for now. + call :tooltest tpbitsMaxExceeded.ddl -d /DS08BITS -M 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5 + rem Offset too large. Max is 7 (8-1) for now. + call :tooltest tpbitsOffsetExceeded.ddl -d /DS08BITS -M 64,1 packedbits.h5 + call :tooltest tpbitsCharOffsetExceeded.ddl -d /DS08BITS -M 8,1 packedbits.h5 + call :tooltest tpbitsIntOffsetExceeded.ddl -d /DS16BITS -M 16,1 packedbits.h5 + call :tooltest tpbitsLongOffsetExceeded.ddl -d /DS32BITS -M 32,1 packedbits.h5 + rem Bad offset, must not be negative. + call :tooltest tpbitsOffsetNegative.ddl -d /DS08BITS -M -1,1 packedbits.h5 + rem Bad length, must not be positive. + call :tooltest tpbitsLengthPositive.ddl -d /DS08BITS -M 4,0 packedbits.h5 + rem Offset+Length is too large. Max is 8 for now. + call :tooltest tpbitsLengthExceeded.ddl -d /DS08BITS -M 37,28 packedbits.h5 + call :tooltest tpbitsCharLengthExceeded.ddl -d /DS08BITS -M 2,7 packedbits.h5 + call :tooltest tpbitsIntLengthExceeded.ddl -d /DS16BITS -M 10,7 packedbits.h5 + call :tooltest tpbitsLongLengthExceeded.ddl -d /DS32BITS -M 26,7 packedbits.h5 + rem Incomplete pair of packed bits request. + call :tooltest tpbitsIncomplete.ddl -d /DS08BITS -M 0,2,2,1,0,2,2, packedbits.h5 if %nerrors% equ 0 ( echo.All %dumper% tests passed. -- cgit v0.12