/***********************************************************************
*  Unlimited string length example                                     *
*  blw 5/28/03                                                         *
***********************************************************************/

/* HDF5 Library                                                       */
#include <hdf5.h>

/* System libraries to include                                        */
#include <stdlib.h>
#include <assert.h>

/* Name of file for database output                                   */
#define DATAFILE   "strings.h5"

/* Define dataset dimensions                                          */
#define DATASETNAME  "StringsEx"
#define RANK	1
#define COLS	4

int main (void)
{
    const char *quote [COLS]= {
         "A fight is a contract that takes two people to honor.",
	 "A combative stance means that you've accepted the contract.",
	 "In which case, you deserve what you get.",
	 "  --  Professor Cheng Man-ch'ing"
        };   
	

    hid_t	file, dataspace;         /* file & dataspace handles  */
    hid_t	dataset;                 /* dataset handle            */
    hid_t	datatype, props;         /* datatype and props handles*/
    hsize_t	dims[] = {COLS};         /* initial string size       */
    herr_t	status;		         /* error check return value  */

    /* create output file                                             */
    file = H5Fcreate (DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
    assert (file >= 0);

    /* create dataspace for datasets                                  */
    dataspace = H5Screate_simple (RANK, dims, NULL);
    assert (dataspace >= 0);

    /* create a datatype for the text                                 */
    datatype = H5Tcopy (H5T_C_S1);
    assert (datatype >= 0);

    /* set the total size for the datatype                            */
    status = H5Tset_size (datatype,H5T_VARIABLE);
    assert (status >= 0);

    /* create the datatype properties                                 */
    props = H5Pcreate (H5P_DATASET_CREATE);
    assert (status >= 0);

    /* create the dataset                                             */
    dataset = H5Dcreate (file, DATASETNAME, datatype, dataspace, props);
    assert (dataset >= 0);

    /* write out the dataset                                          */
    status = H5Dwrite (dataset, datatype, H5S_ALL, H5S_ALL,
		    H5P_DEFAULT, quote);
    assert (status >= 0);
    
    /* close all open resources                                       */
    status = H5Dclose (dataset);
    assert (status >= 0);

    status = H5Tclose (datatype);
    assert (status >= 0);

    status = H5Sclose (dataspace);
    assert (status >= 0);

    status = H5Pclose (props);
    assert (status >= 0);

    status = H5Fclose (file);
    assert (status >= 0);
}
