summaryrefslogtreecommitdiffstats
path: root/tools/test/h5dump/binread.c
blob: 4e46c575d6e59dc6c8c43eba1e4b04890ba4f0e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 * Copyright by The HDF Group.                                               *
 * Copyright by the Board of Trustees of the University of Illinois.         *
 * All rights reserved.                                                      *
 *                                                                           *
 * This file is part of HDF5.  The full HDF5 copyright notice, including     *
 * terms governing use, modification, and redistribution, is contained in    *
 * the COPYING file, which can be found at the root of the source code       *
 * distribution tree, or in https://www.hdfgroup.org/licenses.               *
 * If you do not have access to either file, you may request a copy from     *
 * help@hdfgroup.org.                                                        *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 This program reads binary output from h5dump (-b option).
 To use change the following 3 symbols accordingly.
 For example, to read 2 elements of a float type , define

  #define NELMTS     2
  #define TYPE       float
  #define FORMAT     "%f "

*/

#define NELMTS 6
#define TYPE   int
#define FORMAT "%d "

/*-------------------------------------------------------------------------
 * Function: usage
 *
 * Purpose: Prints a usage message on stderr and then returns.
 *
 * Return: void
 *
 * Programmer:  Pedro Vicente Nunes
 *
 * Modifications:
 *
 *-------------------------------------------------------------------------
 */
static void
usage(void)
{
    fprintf(stderr, "usage: binread FILE_NAME\n");
}

/*-------------------------------------------------------------------------
 * Function: main
 *
 * Purpose: main program.
 *
 *-------------------------------------------------------------------------
 */

int
main(int argc, char *argv[])
{
    FILE  *stream;
    size_t numread;
    TYPE   buf[NELMTS];
    size_t i, nelmts = NELMTS;
    char  *fname = NULL;

    if (argc != 2) {
        usage();
        exit(1);
    }

    fname = strdup(argv[1]);

    if ((stream = fopen(fname, "rb")) != NULL) {
        numread = fread(buf, sizeof(TYPE), nelmts, stream);
        printf("Number of items read = %llu\n", (unsigned long long)numread);

        for (i = 0; i < nelmts; i++) {
            printf(FORMAT, buf[i]);
        }
        printf("\n");

        fclose(stream);
    }
    else
        printf("File %s could not be opened\n", fname);

    free(fname);

    return 0;
}