/*
 *   Creating and closing a dataset.
 */

#include "hdf5.h"
#define FILE "dset.h5"

main() {

   hid_t       file_id, dataset_id, dataspace_id;  /* identifiers */
   hsize_t     dims[2];
   herr_t      status;
   char        buf[]={"test left call mesh " };
   hid_t       atype, aid, attr;
   hsize_t     dimsa[2]={2,2};
   size_t      size;

   /* Create a new file using default properties. */
   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
   printf ("H5Fcreate returns: %i   File: %S\n", file_id, FILE);

   /* Create the data space for the dataset. */
   dims[0] = 4; 
   dims[1] = 6; 
   dataspace_id = H5Screate_simple(2, dims, NULL);
   printf ("H5Screate_simple returns: %i\n", dataspace_id);

   /* Create the dataset. */
   dataset_id = H5Dcreate(file_id, "/dset", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT);

   printf ("H5Dcreate returns: %i\n", dataset_id);
   aid = H5Screate_simple(2, dimsa, NULL);
   printf ("H5Screate_simple returns: %i\n", aid);
   atype = H5Tcopy (H5T_C_S1);
   printf ("H5Tcopy returns: %i\n", atype);
   size = 5;
   status = H5Tset_size (atype, size);
   printf ("H5Tset_size returns: %i\n", status);
   attr = H5Acreate (dataset_id, "string-att", atype, aid, H5P_DEFAULT);
   printf ("H5Acreate returns: %i\n", attr);
   status = H5Awrite (attr, atype, buf);
   printf ("H5Awrite returns: %i\n", status);

   /* End access to the dataset and release resources used by it. */
   status = H5Dclose(dataset_id);
   printf ("H5Dclose returns: %i\n", status);

   /* Terminate access to the data space. */ 
   status = H5Sclose(dataspace_id);
   printf ("H5Sclose returns: %i\n", status);

   status = H5Sclose(aid);
   printf ("H5Sclose returns (aid): %i\n", status);
   status = H5Tclose (atype);
   printf ("H5Tclose returns (atype): %i\n", status);
   status= H5Aclose (attr);
   printf ("H5Aclose returns: %i\n", status);

   /* Close the file. */
   status = H5Fclose(file_id);
   printf ("H5Fclose returns: %i\n", status);
}


