/*
*/

#include "hdf5.h"

#define FILE          "slab.h5"
#define DATASETNAME   "slab"
#define LENGTH        5 
#define RANK         3  
#define HEIGHT       5 
#define WIDTH        5 

int
main(void)
{

    hssize_t offset[3]={0, 0, 0};
    hsize_t count[3]={LENGTH, HEIGHT, WIDTH};
    int       *data;

    int        i,j;
    hid_t      file, dataset, memspace, space;
    herr_t     status;
    hsize_t    dim[3] = {15, HEIGHT, WIDTH};   
    hsize_t    slabsize[3]={LENGTH, HEIGHT, WIDTH};

    data = (int*)malloc (LENGTH*HEIGHT*WIDTH*sizeof (int));
 
    /* Create the data space  */
    space = H5Screate_simple (RANK, dim, NULL);
    printf ("H5Screate_simple (space): %i\n", space);

    /* Create the file  */
    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
    printf ("H5Fcreate: %i\n", file);

    /* Create the dataset  */
    dataset = H5Dcreate(file, DATASETNAME, H5T_STD_I32BE, space, H5P_DEFAULT);
    printf ("H5Dcreate: %i\n", dataset);

    status=H5Sclose(space);
    printf ("H5Sclose(space): %i\n", status);

    memspace = H5Screate_simple (RANK, slabsize, NULL);
    printf ("H5Screate_simple (memspace): %i\n", memspace);

    printf ("BEGIN Loop:%\n");

    for (j=0;j<3;j++)
    {
       for (i=0; i<(LENGTH*HEIGHT*WIDTH); i++) 
         data[i] = j+1;

       space = H5Dget_space (dataset);
       printf ("  H5Dget_space(space): %i\n", space);

       status = H5Sselect_hyperslab (space, H5S_SELECT_SET, offset, NULL,
                count, NULL);
       printf ("  H5Sselect_hyperslab: %i\n", status);

       status = H5Dwrite (dataset, H5T_NATIVE_INT, memspace, space, 
                          H5P_DEFAULT, data);
       printf ("  H5Dwrite(%d): %i\n", j, status);

       status=H5Sclose(space);
       printf ("  H5Sclose(space): %i\n", status);

       offset[0] = offset[0]+5; 
    }

    printf ("END Loop\n");

    /* Release resources */
    status=H5Sclose(memspace);
    printf ("H5Sclose (memspace): %i\n", status);
    status=H5Dclose(dataset);
    printf ("H5Dclose: %i\n", status);
    status=H5Fclose(file);
    printf ("H5Fclose: %i\n", status);

    free (data);
}
