/*  
 *  This example writes data to the HDF5 file.
 *  Data conversion is performed during write operation.  
 */
 
#include "hdf5.h"

#define DIM0   40
#define DIM1   60

#define H5FILE_NAME        "SDS%d.h5"
int
main (void)
{
    hid_t       file, dataset;         /* handles */
    hid_t       dataspace;             
    hid_t       plist_id;
    int         i, j, dset_data[DIM0][DIM1];
    hsize_t     family_size = 1000; 
    hsize_t     dims[2] = {DIM0,DIM1};
    herr_t      status;

    /*
     * Create a new file using H5F_ACC_TRUNC access,
     * default file creation properties, and file family driver. 
     */
    plist_id = H5Pcreate(H5P_FILE_ACCESS);
    printf ("H5Pcreate returns: %i\n", plist_id);

    status = H5Pset_fapl_family(plist_id, family_size, H5P_DEFAULT);
    printf ("H5Pset_fapl_family returns: %i\n", status);

    file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, plist_id);
    printf ("H5Fcreate returns: %i\n", file);

    dataspace = H5Screate_simple(2, dims, NULL);
    printf ("H5Screate_simple returns: %i\n", dataspace);
     
    dataset = H5Dcreate (file, "family-dataset", H5T_NATIVE_INT, dataspace,
			H5P_DEFAULT);
    printf ("H5Dcreate returns: %i\n", dataset);

    for (i = 0; i < DIM0; i++)
      for (j = 0; j < DIM1; j++)
         dset_data[i][j] = i * 6 + j + 1;

    status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
                     dset_data);
    printf ("H5Dwrite returns: %i\n", status);
    
    status = H5Dclose(dataset);
    printf ("H5Dclose returns: %i\n", status);
    status = H5Sclose(dataspace);
    printf ("H5Sclose returns: %i\n", status);
    status = H5Fclose(file);
    printf ("H5Fclose returns: %i\n", status);
 
}     
