1/* This is part of the netCDF package.  Copyright 2010 University
2   Corporation for Atmospheric Research/Unidata See COPYRIGHT file for
3   conditions of use.
4
5   This program does some HDF5 string stuff.
6
7   Here's a HDF5 sample programs:
8   http://hdf.ncsa.uiuc.edu/training/other-ex5/sample-programs/strings.c
9*/
10
11#include "h5_err_macros.h"
12#include <hdf5.h>
13
14#define FILE_NAME "tst_h_strings1.h5"
15
16int
17main()
18{
19   printf("\n*** Checking HDF5 string types some more.\n");
20   printf("*** Checking fill value of scalar string dataset...");
21   {
22#define VAR_NAME "Chamber_of_Secrets"
23      hid_t fapl_idfcpl_idfileidgrpidspaceid;
24      hid_t typeiddatasetidplistid;
25/*      void *fillp;*/
26      char *data = "Not for the first time, an argument had broken "
27  "out over breakfast at number four, Privet Drive. Mr. Vernon "
28  "Dursley had been woken in the early hours of the morning by "
29  "a loud, hooting noise from his nephew Harry's room.";
30      char *empty = "";
31
32      /* Create file access and create property lists. */
33      if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR;
34      if ((fcpl_id = H5Pcreate(H5P_FILE_CREATE)) < 0) ERR;
35
36      /* Set latest_format in access propertly list. This ensures that
37       * the latest, greatest, HDF5 versions are used in the file. */
38      if (H5Pset_libver_bounds(fapl_idH5F_LIBVER_LATESTH5F_LIBVER_LATEST) < 0) ERR;
39
40      /* Set H5P_CRT_ORDER_TRACKED in the creation property list. This
41       * turns on HDF5 creation ordering in the file. */
42      if (H5Pset_link_creation_order(fcpl_id, (H5P_CRT_ORDER_TRACKED |
43        H5P_CRT_ORDER_INDEXED)) < 0) ERR;
44      if (H5Pset_attr_creation_order(fcpl_id, (H5P_CRT_ORDER_TRACKED |
45        H5P_CRT_ORDER_INDEXED)) < 0) ERR;
46
47      /* Create the file, open root group. */
48      if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCfcpl_idfapl_id)) < 0) ERR;
49      if ((grpid = H5Gopen2(fileid, "/", H5P_DEFAULT)) < 0) ERR;
50
51      /* Create string type. */
52      if ((typeid = H5Tcopy(H5T_C_S1)) < 0) ERR;
53      if (H5Tset_size(typeidH5T_VARIABLE) < 0) ERR;
54
55      /* Create a scalar space. */
56      if ((spaceid = H5Screate(H5S_SCALAR)) < 0) ERR;
57
58      /* Write an scalar dataset of this type. */
59      if ((plistid = H5Pcreate(H5P_DATASET_CREATE)) < 0) ERR;
60      if (H5Pset_fill_value(plistidtypeid, &empty) < 0) ERR;
61      if ((datasetid = H5Dcreate1(grpidVAR_NAMEtypeid,
62   spaceidplistid)) < 0) ERR;
63      if (H5Dwrite(datasetidtypeidspaceidspaceid,
64    H5P_DEFAULT, &data) < 0) ERR;
65
66      /* Close up. */
67      if (H5Dclose(datasetid) < 0) ERR;
68      if (H5Pclose(fapl_id) < 0) ERR;
69      if (H5Pclose(fcpl_id) < 0) ERR;
70      if (H5Pclose(plistid) < 0) ERR;
71      if (H5Tclose(typeid) < 0) ERR;
72      if (H5Sclose(spaceid) < 0) ERR;
73      if (H5Gclose(grpid) < 0) ERR;
74      if (H5Fclose(fileid) < 0) ERR;
75   }
76   SUMMARIZE_ERR;
77/*    printf("*** Checking string 1D dataset..."); */
78/*    { */
79/* #define MARK_TWAIN "Mark_Twain"       */
80/* #define NUM_STR 4 */
81/* #define NDIMS 1 */
82/*       hid_t fapl_id, fcpl_id, fileid, grpid, spaceid; */
83/*       hid_t typeid, datasetid, plistid; */
84/*       hsize_t dims[NDIMS] = {0}, max_dims[NDIMS] = {H5S_UNLIMITED}; */
85/*       hsize_t chunk_dims[NDIMS] = {1}; */
86/*       hsize_t xtend_size[NDIMS] = {NUM_STR}; */
87/*       hsize_t start[NDIMS] = {0}, count[NDIMS] = {NUM_STR}; */
88/* /\*      void *fillp;*\/ */
89/*       char *data[NUM_STR] = { */
90/*   "A man who carries a cat by the tail learns " */
91/*   "something he can learn in no other way.", */
92/*   "Man - a creature made at the end of the week's " */
93/*   "work when God was tired.", */
94/*   "There are basically two types of people. People " */
95/*   "who accomplish things, and people who claim to have " */
96/*   "accomplished things. The first group is less crowded.", */
97/*   "To be good is noble; but to show others how to be " */
98/*   "good is nobler and no trouble."}; */
99/*       char *empty = ""; */
100
101/*       /\* Create file access and create property lists. *\/ */
102/*       if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; */
103/*       if ((fcpl_id = H5Pcreate(H5P_FILE_CREATE)) < 0) ERR; */
104
105/*       /\* Set latest_format in access propertly list. This ensures that */
106/*        * the latest, greatest, HDF5 versions are used in the file. *\/  */
107/*       if (H5Pset_libver_bounds(fapl_id, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0) ERR; */
108
109/*       /\* Set H5P_CRT_ORDER_TRACKED in the creation property list. This */
110/*        * turns on HDF5 creation ordering in the file. *\/ */
111/*       if (H5Pset_link_creation_order(fcpl_id, (H5P_CRT_ORDER_TRACKED | */
112/*         H5P_CRT_ORDER_INDEXED)) < 0) ERR; */
113/*       if (H5Pset_attr_creation_order(fcpl_id, (H5P_CRT_ORDER_TRACKED | */
114/*         H5P_CRT_ORDER_INDEXED)) < 0) ERR; */
115
116/*       /\* Create the file, open root group. *\/ */
117/*       if ((fileid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, fcpl_id, fapl_id)) < 0) ERR; */
118/*       if ((grpid = H5Gopen2(fileid, "/", H5P_DEFAULT)) < 0) ERR; */
119
120/*       /\* Create string type. *\/ */
121/*       if ((typeid = H5Tcopy(H5T_C_S1)) < 0) ERR; */
122/*       if (H5Tset_size(typeid, H5T_VARIABLE) < 0) ERR; */
123
124/*       /\* Create a space for the dataset. *\/ */
125/*       if ((spaceid = H5Screate_simple(1, dims, max_dims)) < 0) ERR; */
126
127/*       /\* Create and write the dataset. *\/ */
128/*       if ((plistid = H5Pcreate(H5P_DATASET_CREATE)) < 0) ERR; */
129/*       if (H5Pset_chunk(plistid, 1, chunk_dims) < 0) ERR; */
130/*       if (H5Pset_fill_value(plistid, typeid, &empty) < 0) ERR; */
131/*       if ((datasetid = H5Dcreate1(grpid, MARK_TWAIN, typeid,  */
132/*    spaceid, plistid)) < 0) ERR; */
133
134/*       /\* Now extend the dataset. *\/ */
135/*       if (H5Dextend(datasetid, xtend_size) < 0) ERR; */
136
137/*       if (H5Dwrite(datasetid, typeid, spaceid, spaceid,  */
138/*     H5P_DEFAULT, &data) < 0) ERR; */
139
140/*       /\* Close up. *\/ */
141/*       if (H5Dclose(datasetid) < 0) ERR; */
142/*       if (H5Pclose(fapl_id) < 0) ERR; */
143/*       if (H5Pclose(fcpl_id) < 0) ERR; */
144/*       if (H5Pclose(plistid) < 0) ERR; */
145/*       if (H5Tclose(typeid) < 0) ERR; */
146/*       if (H5Sclose(spaceid) < 0) ERR; */
147/*       if (H5Gclose(grpid) < 0) ERR; */
148/*       if (H5Fclose(fileid) < 0) ERR; */
149/*    } */
150/*    SUMMARIZE_ERR; */
151   printf("*** Checking string 1D dataset...");
152   {
153#define MARK_TWAIN "Mark_Twain"
154#define NUM_STR 1
155#define NDIMS 1
156      hid_t fapl_idfcpl_idfileidgrpidspaceid;
157      hid_t typeiddatasetidplistid;
158      hsize_t dims[NDIMS] = {NUM_STR}, max_dims[NDIMS] = {H5S_UNLIMITED};
159      hsize_t chunk_dims[NDIMS] = {1};
160      hsize_t xtend_size[NDIMS] = {2};
161      char *data[NUM_STR] = {
162  "A man who carries a cat by the tail learns "
163  "something he can learn in no other way."};
164      char *empty = "";
165
166      /* Create file access and create property lists. */
167      if ((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR;
168      if ((fcpl_id = H5Pcreate(H5P_FILE_CREATE)) < 0) ERR;
169
170      /* Set latest_format in access propertly list. This ensures that
171       * the latest, greatest, HDF5 versions are used in the file. */
172      if (H5Pset_libver_bounds(fapl_idH5F_LIBVER_LATESTH5F_LIBVER_LATEST) < 0) ERR;
173
174      /* Set H5P_CRT_ORDER_TRACKED in the creation property list. This
175       * turns on HDF5 creation ordering in the file. */
176      if (H5Pset_link_creation_order(fcpl_id, (H5P_CRT_ORDER_TRACKED |
177        H5P_CRT_ORDER_INDEXED)) < 0) ERR;
178      if (H5Pset_attr_creation_order(fcpl_id, (H5P_CRT_ORDER_TRACKED |
179        H5P_CRT_ORDER_INDEXED)) < 0) ERR;
180
181      /* Create the file, open root group. */
182      if ((fileid = H5Fcreate(FILE_NAMEH5F_ACC_TRUNCfcpl_idfapl_id)) < 0) ERR;
183      if ((grpid = H5Gopen2(fileid, "/", H5P_DEFAULT)) < 0) ERR;
184
185      /* Create string type. */
186      if ((typeid = H5Tcopy(H5T_C_S1)) < 0) ERR;
187      if (H5Tset_size(typeidH5T_VARIABLE) < 0) ERR;
188
189      /* Create a space for the dataset. */
190      if ((spaceid = H5Screate_simple(1, dimsmax_dims)) < 0) ERR;
191
192      /* Create and write the dataset. */
193      if ((plistid = H5Pcreate(H5P_DATASET_CREATE)) < 0) ERR;
194      if (H5Pset_chunk(plistid, 1, chunk_dims) < 0) ERR;
195      if (H5Pset_fill_value(plistidtypeid, &empty) < 0) ERR;
196      if ((datasetid = H5Dcreate1(grpidMARK_TWAINtypeid,
197   spaceidplistid)) < 0) ERR;
198
199      /* Now extend the dataset. */
200      if (H5Dextend(datasetidxtend_size) < 0) ERR;
201
202      if (H5Dwrite(datasetidtypeidspaceidspaceid,
203    H5P_DEFAULT, &data) < 0) ERR;
204
205      /* Close up. */
206      if (H5Dclose(datasetid) < 0) ERR;
207      if (H5Pclose(fapl_id) < 0) ERR;
208      if (H5Pclose(fcpl_id) < 0) ERR;
209      if (H5Pclose(plistid) < 0) ERR;
210      if (H5Tclose(typeid) < 0) ERR;
211      if (H5Sclose(spaceid) < 0) ERR;
212      if (H5Gclose(grpid) < 0) ERR;
213      if (H5Fclose(fileid) < 0) ERR;
214   }
215   SUMMARIZE_ERR;
216   FINAL_RESULTS;
217}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed