/*
 *  Create Datasets with and without attributes 
 */

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

/* normal datasets without attribute */
#define DSET1 "norm_char"
#define DSET2 "norm_uchar"
#define DSET3 "norm_int8"
#define DSET4 "norm_uint8"
#define DSET5 "norm_int16"
#define DSET6 "norm_uint16"
#define DSET7 "norm_int32"
#define DSET8 "norm_uint32"
#define DSET9 "norm_int64"
#define DSET10 "norm_float32"
#define DSET11 "norm_float64"
#define DSET12 "norm_string"

/* normal datasets with an int array attribute */
#define DSET1IA "norm_char_attr_int"
#define DSET2IA "norm_uchar_attr_int"
#define DSET3IA "norm_int8_attr_int"
#define DSET4IA "norm_uint8_attr_int"
#define DSET5IA "norm_int16_attr_int"
#define DSET6IA "norm_uint16_attr_int"
#define DSET7IA "norm_int32_attr_int"
#define DSET8IA "norm_uint32_attr_int"
#define DSET9IA "norm_int64_attr_int"
#define DSET10IA "norm_float32_attr_int"
#define DSET11IA "norm_float64_attr_int"
#define DSET12IA "norm_string_attr_int"

/* variable-length datasets without attribute */
#define DSETV1 "vlen_char"
#define DSETV2 "vlen_uchar"
#define DSETV3 "vlen_int8"
#define DSETV4 "vlen_uint8"
#define DSETV5 "vlen_int16"
#define DSETV6 "vlen_uint16"
#define DSETV7 "vlen_int32"
#define DSETV8 "vlen_uint32"
#define DSETV9 "vlen_int64"
#define DSETV10 "vlen_float32"
#define DSETV11 "vlen_float64"
#define DSETV12 "vlen_string"

/* normal datasets with a variable-length int array attribute */
#define DSET1VIA "norm_char_vlen_attr_int"
#define DSET2VIA "norm_uchar_vlen_attr_int"
#define DSET3VIA "norm_int8_vlen_attr_int"
#define DSET4VIA "norm_uint8_vlen_attr_int"
#define DSET5VIA "norm_int16_vlen_attr_int"
#define DSET6VIA "norm_uint16_vlen_attr_int"
#define DSET7VIA "norm_int32_vlen_attr_int"
#define DSET8VIA "norm_uint32_vlen_attr_int"
#define DSET9VIA "norm_int64_vlen_attr_int"
#define DSET10VIA "norm_float32_vlen_attr_int"
#define DSET11VIA "norm_float64_vlen_attr_int"
#define DSET12VIA "norm_string_vlen_attr_int"

/* normal datasets with a variable-length string array attribute */
#define DSET1VSA "norm_char_vlen_attr_str"
#define DSET2VSA "norm_uchar_vlen_attr_str"
#define DSET3VSA "norm_int8_vlen_attr_str"
#define DSET4VSA "norm_uint8_vlen_attr_str"
#define DSET5VSA "norm_int16_vlen_attr_str"
#define DSET6VSA "norm_uint16_vlen_attr_str"
#define DSET7VSA "norm_int32_vlen_attr_str"
#define DSET8VSA "norm_uint32_vlen_attr_str"
#define DSET9VSA "norm_int64_vlen_attr_str"
#define DSET10VSA "norm_float32_vlen_attr_str"
#define DSET11VSA "norm_float64_vlen_attr_str"
#define DSET12VSA "norm_string_vlen_attr_str"


/* normal datasets with a string array attribute */
#define DSET1SA "norm_char_attr_str"
#define DSET2SA "norm_uchar_attr_str"
#define DSET3SA "norm_int8_attr_str"
#define DSET4SA "norm_uint8_attr_str"
#define DSET5SA "norm_int16_attr_str"
#define DSET6SA "norm_uint16_attr_str"
#define DSET7SA "norm_int32_attr_str"
#define DSET8SA "norm_uint32_attr_str"
#define DSET9SA "norm_int64_attr_str"
#define DSET10SA "norm_float32_attr_str"
#define DSET11SA "norm_float64_attr_str"
#define DSET12SA "norm_string_attr_str"

int main() {

   hid_t       file_id, dataset_id, dataspace_id, datatype_id, dataspaces_id;
   hid_t       attribute_id, aspace_id; 
   hsize_t     dims[2], dimsa[1]={2};
   herr_t      status;
   int         i, j; 
   int         dseti_data[4][6];
   float       dsetf_data[4][6];
   double      dsetfd_data[4][6];
   char        dsetc_data[4][6];
   short       dsetsi_data[4][6];
   char        dsetssi_data[4][6];
   char        dsets_data[]={"Pressure    "};
   hvl_t       dsetv[2], wdata[4];
   char        *vptr;
   size_t      size;
   int         attri_data[]={100, 200};
   char        attrs_data[] = {"Fahrenheit "};

   /* Create a new file using default properties. */
   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);

   /* Initialize the dataset. */
   for (i = 0; i < 4; i++)
      for (j = 0; j < 6; j++)
      {
         dseti_data[i][j] = i * 6 + j + 1;
         dsetsi_data[i][j] = i * 6 + j + 1;
         dsetssi_data[i][j] = i * 6 + j + 1;
         dsetf_data[i][j] = i * 6 + j + 1.2;
         dsetfd_data[i][j] = i * 6 + j + 1.2;
         dsetc_data[i][j] = 'a';
      }

   /* ----------------------------------------------------- */
   /* Create the data space for the datasets. */

   dims[0] = 4; 
   dims[1] = 6; 
   dataspace_id = H5Screate_simple(2, dims, NULL);

   /* ----------------------------------------------------- */
   /* Create Char Dataset No Attribute*/

   dataset_id = H5Dcreate(file_id, DSET1, H5T_STD_I8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetc_data);
   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Char Dataset No Attribute */

   dataset_id = H5Dcreate(file_id, DSET2, H5T_STD_U8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetc_data);
   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 8 Dataset No Attribute  */

   dataset_id = H5Dcreate(file_id, DSET3, H5T_STD_I8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_STD_I8BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetssi_data);
   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Integer 8 Dataset No Attribute */

   dataset_id = H5Dcreate(file_id, DSET4, H5T_STD_U8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_STD_U8BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetssi_data);
   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 16 Dataset No Attribute */

   dataset_id = H5Dcreate(file_id, DSET5, H5T_STD_I16BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetsi_data);
   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Integer 16 Dataset No Attribute */

   dataset_id = H5Dcreate(file_id, DSET6, H5T_STD_U16BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_USHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetsi_data);
   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 32 Dataset No Attribute */

   dataset_id = H5Dcreate(file_id, DSET7, H5T_STD_I32BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dseti_data);
   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Integer 32 Dataset No Attribute */

   dataset_id = H5Dcreate(file_id, DSET8, H5T_STD_U32BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dseti_data);
   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 64 Dataset No Attribute */

   dataset_id = H5Dcreate(file_id, DSET9, H5T_STD_I64BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dseti_data);
   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* Create Float 32 Dataset No Attribute */

   dataset_id = H5Dcreate(file_id, DSET10, H5T_IEEE_F32BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetf_data);
   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* Create Float 64 Dataset No Attribute */

   dataset_id = H5Dcreate(file_id, DSET11, H5T_IEEE_F64BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetfd_data);
   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* Create String Dataset No Attribute */
   datatype_id = H5Tcopy (H5T_C_S1);
   size = 13;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   dataset_id = H5Dcreate(file_id, DSET12, datatype_id, dataspaces_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsets_data);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);
   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* ----------------------------------------------------- */
   /* Create Char Dataset With Integer Attribute */

   dataset_id = H5Dcreate(file_id, DSET1IA, H5T_STD_I8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetc_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);


   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Char Dataset With Integer Attribute  */

   dataset_id = H5Dcreate(file_id, DSET2IA, H5T_STD_U8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetc_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 8 Dataset With Integer Attribute  */

   dataset_id = H5Dcreate(file_id, DSET3IA, H5T_STD_I8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_STD_I8BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetssi_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Integer 8 Dataset With Integer Attribute */

   dataset_id = H5Dcreate(file_id, DSET4IA, H5T_STD_U8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_STD_U8BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetssi_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 16 Dataset With Integer Attribute */

   dataset_id = H5Dcreate(file_id, DSET5IA, H5T_STD_I16BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetsi_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Integer 16 Dataset With Integer Attribute */

   dataset_id = H5Dcreate(file_id, DSET6IA, H5T_STD_U16BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_USHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetsi_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 32 Dataset With Integer Attribute */

   dataset_id = H5Dcreate(file_id, DSET7IA, H5T_STD_I32BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dseti_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Integer 32 Dataset With Integer Attribute */

   dataset_id = H5Dcreate(file_id, DSET8IA, H5T_STD_U32BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dseti_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 64 Dataset With Integer Attribute */

   dataset_id = H5Dcreate(file_id, DSET9IA, H5T_STD_I64BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dseti_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* Create Float 32 Dataset With Integer Attribute */

   dataset_id = H5Dcreate(file_id, DSET10IA, H5T_IEEE_F32BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetf_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* Create Float 64 Dataset With Integer Attribute */

   dataset_id = H5Dcreate(file_id, DSET11IA, H5T_IEEE_F64BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetfd_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create String Dataset With Integer Attribute */
   datatype_id = H5Tcopy (H5T_C_S1);
   size = 13;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   dataset_id = H5Dcreate(file_id, DSET12IA, datatype_id, dataspaces_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsets_data);

   aspace_id = H5Screate_simple (1, dimsa, NULL); 
   attribute_id = H5Acreate (dataset_id, "Units", H5T_STD_I32BE, aspace_id, 
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attri_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (aspace_id);
   status = H5Tclose (datatype_id);

   status = H5Sclose (dataspaces_id);
   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* ----------------------------------------------------- */
   /* Create Char Dataset With String Attribute*/

   dataset_id = H5Dcreate(file_id, DSET1SA, H5T_STD_I8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetc_data);

   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Char Dataset With String Attribute */

   dataset_id = H5Dcreate(file_id, DSET2SA, H5T_STD_U8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetc_data);

   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);
   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 8 Dataset With String Attribute  */

   dataset_id = H5Dcreate(file_id, DSET3SA, H5T_STD_I8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_STD_I8BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetssi_data);

   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Integer 8 Dataset With String Attribute */

   dataset_id = H5Dcreate(file_id, DSET4SA, H5T_STD_U8BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_STD_U8BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetssi_data);

   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 16 Dataset With String Attribute */

   dataset_id = H5Dcreate(file_id, DSET5SA, H5T_STD_I16BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetsi_data);

   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);
   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Integer 16 Dataset With String Attribute */

   dataset_id = H5Dcreate(file_id, DSET6SA, H5T_STD_U16BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_USHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetsi_data);

   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);
   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 32 Dataset With String Attribute */

   dataset_id = H5Dcreate(file_id, DSET7SA, H5T_STD_I32BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dseti_data);

   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Unsigned Integer 32 Dataset With String Attribute */

   dataset_id = H5Dcreate(file_id, DSET8SA, H5T_STD_U32BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dseti_data);

   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);


   /* ----------------------------------------------------- */
   /* Create Integer 64 Dataset With String Attribute */

   dataset_id = H5Dcreate(file_id, DSET9SA, H5T_STD_I64BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dseti_data);
   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* Create Float 32 Dataset With String Attribute */

   dataset_id = H5Dcreate(file_id, DSET10SA, H5T_IEEE_F32BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetf_data);
   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* Create Float 64 Dataset With String Attribute */

   dataset_id = H5Dcreate(file_id, DSET11SA, H5T_IEEE_F64BE, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsetfd_data);
   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);

   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* Create String Dataset With String Attribute */
   datatype_id = H5Tcopy (H5T_C_S1);
   size = 13;
   status = H5Tset_size (datatype_id, size);

   dataspaces_id=H5Screate (H5S_SCALAR);
   dataset_id = H5Dcreate(file_id, DSET12SA, datatype_id, dataspaces_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
   status = H5Dwrite(dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
                     dsets_data);
   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);

   datatype_id = H5Tcopy (H5T_C_S1);
   size = 11;
   status = H5Tset_size (datatype_id, size);
   dataspaces_id=H5Screate (H5S_SCALAR);
   attribute_id = H5Acreate (dataset_id, "Description", datatype_id, dataspaces_id,
                             H5P_DEFAULT, H5P_DEFAULT);
   status = H5Awrite(attribute_id, datatype_id, attrs_data);
   status = H5Aclose(attribute_id);

   status = H5Sclose (dataspaces_id);
   status = H5Tclose (datatype_id);
   status = H5Dclose(dataset_id);

   /* ----------------------------------------------------- */
   /* Create Variable Length Char Datasets without Attributes */

   for (i=0; i<2; i++)
   {
     dsetv[i].len = i+5;
     vptr = (char *) malloc (dsetv[i].len);
     dsetv[i].p = vptr;
     for (j=0; j < dsetv[i].len; j++)
       vptr[j] = 'a' + i;
   }

   dims [0] = 2;
   dataspace_id = H5Screate_simple(1, dims, NULL);
   datatype_id = H5Tvlen_create (H5T_NATIVE_CHAR);
   dataset_id = H5Dcreate(file_id, DSETV1, datatype_id, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

   status =  H5Dwrite(dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, dsetv); 

   status = H5Dvlen_reclaim (datatype_id, dataspace_id, H5P_DEFAULT, dsetv);
   status = H5Tclose(datatype_id);
   status = H5Dclose(dataset_id);
   status = H5Sclose(dataspace_id);

   /* ----------------------------------------------------- */
   /* Create Variable Length UCHAR Datasets without Attributes */

   for (i=0; i<2; i++)
   {
     dsetv[i].len = i+5;
     vptr = (char *) malloc (dsetv[i].len);
     dsetv[i].p = vptr;
     for (j=0; j < dsetv[i].len; j++)
       vptr[j] = 'a' + i;
   }

   dims [0] = 2;
   dataspace_id = H5Screate_simple(1, dims, NULL);
   datatype_id = H5Tvlen_create (H5T_NATIVE_UCHAR);
   dataset_id = H5Dcreate(file_id, DSETV2, datatype_id, dataspace_id, 
                          H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

   status =  H5Dwrite(dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, dsetv); 

   status = H5Dvlen_reclaim (datatype_id, dataspace_id, H5P_DEFAULT, dsetv);
   status = H5Tclose(datatype_id);
   status = H5Dclose(dataset_id);
   status = H5Sclose(dataspace_id);

   /* ----------------------------------------------------- */
   /* Create Variable Length INT16 Dataset without Attributes */

    for(i=0; i<4; i++) {

        wdata[i].p= (short *)malloc((i+1)*sizeof( short));
        wdata[i].len=i+1;
        for(j=0; j<(i+1); j++)
            ((short *)wdata[i].p)[j]=i*10+j;
    } 
    
    dims[0] = 4;
    dataspace_id = H5Screate_simple (1, dims, NULL);
    datatype_id = H5Tvlen_create (H5T_NATIVE_SHORT);

    dataset_id = H5Dcreate (file_id, DSETV5, datatype_id, dataspace_id, 
                            H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

    status = H5Dwrite (dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);

    status = H5Dvlen_reclaim (datatype_id, dataspace_id, H5P_DEFAULT, wdata);

    status = H5Tclose (datatype_id);
    status = H5Sclose(dataspace_id);
    status = H5Dclose (dataset_id);

   /* ----------------------------------------------------- */
   /* Create Variable Length UINT16 Dataset without Attributes */

    for(i=0; i<4; i++) {

        wdata[i].p= (unsigned short *)malloc((i+1)*sizeof( unsigned short));
        wdata[i].len=i+1;
        for(j=0; j<(i+1); j++)
            ((unsigned short *)wdata[i].p)[j]=i*10+j;
    } 
    
    dims[0] = 4;
    dataspace_id = H5Screate_simple (1, dims, NULL);
    datatype_id = H5Tvlen_create (H5T_NATIVE_USHORT);

    dataset_id = H5Dcreate (file_id, DSETV6, datatype_id, dataspace_id, 
                            H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

    status = H5Dwrite (dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);

    status = H5Dvlen_reclaim (datatype_id, dataspace_id, H5P_DEFAULT, wdata);

    status = H5Tclose (datatype_id);
    status = H5Sclose (dataspace_id);
    status = H5Dclose (dataset_id);

   /* ----------------------------------------------------- */
   /* Create Variable Length INT Dataset without Attributes */

    for(i=0; i<4; i++) {

        wdata[i].p= (int *)malloc((i+1)*sizeof( int));
        wdata[i].len=i+1;
        for(j=0; j<(i+1); j++)
            ((int *)wdata[i].p)[j]=i*10+j;
    } 
    
    dims[0] = 4;
    dataspace_id = H5Screate_simple (1, dims, NULL);
    datatype_id = H5Tvlen_create (H5T_NATIVE_INT);

    dataset_id = H5Dcreate (file_id, DSETV7, datatype_id, dataspace_id, 
                            H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

    status = H5Dwrite (dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);

    status = H5Dvlen_reclaim (datatype_id, dataspace_id, H5P_DEFAULT, wdata);

    status = H5Tclose (datatype_id);
    status = H5Sclose(dataspace_id);
    status = H5Dclose (dataset_id);

   /* ----------------------------------------------------- */
   /* Create Variable Length UINT Dataset without Attributes */

    for(i=0; i<4; i++) {

        wdata[i].p= (unsigned int *)malloc((i+1)*sizeof(unsigned int));
        wdata[i].len=i+1;
        for(j=0; j<(i+1); j++)
            ((unsigned int *)wdata[i].p)[j]=i*10+j;
    } 
    
    dims[0] = 4;
    dataspace_id = H5Screate_simple (1, dims, NULL);
    datatype_id = H5Tvlen_create (H5T_NATIVE_UINT);

    dataset_id = H5Dcreate (file_id, DSETV8, datatype_id, dataspace_id, 
                            H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

    status = H5Dwrite (dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);

    status = H5Dvlen_reclaim (datatype_id, dataspace_id, H5P_DEFAULT, wdata);

    status = H5Tclose (datatype_id);
    status = H5Sclose(dataspace_id);
    status = H5Dclose (dataset_id);


   /* ----------------------------------------------------- */
   /* Create Variable Length INT64 Dataset without Attributes */

    for(i=0; i<4; i++) {

        wdata[i].p= (long *)malloc((i+1)*sizeof(long));
        wdata[i].len=i+1;
        for(j=0; j<(i+1); j++)
            ((long *)wdata[i].p)[j]=i*10+j;
    } 
    
    dims[0] = 4;
    dataspace_id = H5Screate_simple (1, dims, NULL);
    datatype_id = H5Tvlen_create (H5T_NATIVE_LONG);

    dataset_id = H5Dcreate (file_id, DSETV9, datatype_id, dataspace_id, 
                            H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

    status = H5Dwrite (dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);

    status = H5Dvlen_reclaim (datatype_id, dataspace_id, H5P_DEFAULT, wdata);

    status = H5Tclose (datatype_id);
    status = H5Sclose (dataspace_id);
    status = H5Dclose (dataset_id);

   /* ----------------------------------------------------- */
   /* Create Variable Length FLOAT Dataset without Attributes */

    for(i=0; i<4; i++) {

        wdata[i].p= (float *)malloc((i+1)*sizeof( float));
        wdata[i].len=i+1;
        for(j=0; j<(i+1); j++)
            ((float *)wdata[i].p)[j]=i*10.2+j;
    } 
    
    dims[0] = 4;
    dataspace_id = H5Screate_simple (1, dims, NULL);
    datatype_id = H5Tvlen_create (H5T_NATIVE_FLOAT);

    dataset_id = H5Dcreate (file_id, DSETV10, datatype_id, dataspace_id, 
                            H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

    status = H5Dwrite (dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);

    status = H5Dvlen_reclaim (datatype_id, dataspace_id, H5P_DEFAULT, wdata);

    status = H5Tclose (datatype_id);
    status = H5Sclose (dataspace_id);
    status = H5Dclose (dataset_id);

   /* ----------------------------------------------------- */
   /* Create Variable Length FLOAT64 Dataset without Attributes */

    for(i=0; i<4; i++) {

        wdata[i].p= (double *)malloc((i+1)*sizeof( double));
        wdata[i].len=i+1;
        for(j=0; j<(i+1); j++)
            ((double *)wdata[i].p)[j]=i*10.2+j;
    } 
    
    dims[0] = 4;
    dataspace_id = H5Screate_simple (1, dims, NULL);
    datatype_id = H5Tvlen_create (H5T_NATIVE_DOUBLE);

    dataset_id = H5Dcreate (file_id, DSETV11, datatype_id, dataspace_id, 
                            H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);

    status = H5Dwrite (dataset_id, datatype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);

    status = H5Dvlen_reclaim (datatype_id, dataspace_id, H5P_DEFAULT, wdata);

    status = H5Tclose (datatype_id);
    status = H5Sclose (dataspace_id);
    status = H5Dclose (dataset_id);

   /* ----------------------------------------------------- */
   /* Close Objects That Were Opened */

   status = H5Fclose(file_id);
}


