#include 
#include 
#include 

typedef nc_vlen_t temp_vlen;
typedef struct sea_sounding {
    int sounding_no;
    temp_vlen temp_vl;
} sea_sounding;

static const float vlen_0[] = { 23.5} ;
static const float vlen_1[] = { 23.5,  22.5} ;
static const float vlen_2[] = { 23.5,  22.5,  21.5} ;


void
check_err(const int stat, const int line, const char *file) {
    if (stat != NC_NOERR) {
        (void)fprintf(stderr,"line %d of %s: %s\n", line, file, nc_strerror(stat));
        fflush(stderr);
        exit(1);
    }
}

int
main() {/* create cdm_sea_sounding.nc */

    int  stat;  /* return status */
    int  ncid;  /* netCDF id */

    /* group ids */
    int root_grp;

    /* type ids */
    int temp_vlen_typ;
    int sea_sounding_typ;

    /* dimension ids */
    int Sounding_dim;

    /* dimension lengths */
    size_t Sounding_len = 3;

    /* variable ids */
    int fun_soundings_id;

    /* rank (number of dimensions) for each variable */
#   define RANK_fun_soundings 1

    /* variable shapes */
    int fun_soundings_dims[RANK_fun_soundings];

    /* enter define mode */
    stat = nc_create("cdm_sea_sounding.nc", NC_CLOBBER|NC_NETCDF4, &ncid);
    check_err(stat,__LINE__,__FILE__);
    root_grp = ncid;

    stat = nc_def_vlen(root_grp, "temp_vlen", NC_FLOAT, &temp_vlen_typ);    check_err(stat,__LINE__,__FILE__);

    stat = nc_def_compound(root_grp, sizeof(sea_sounding), "sea_sounding", &sea_sounding_typ);    check_err(stat,__LINE__,__FILE__);
    {
    stat = nc_insert_compound(root_grp, sea_sounding_typ, "sounding_no", NC_COMPOUND_OFFSET(sea_sounding,sounding_no), NC_INT);    check_err(stat,__LINE__,__FILE__);
    stat = nc_insert_compound(root_grp, sea_sounding_typ, "temp_vl", NC_COMPOUND_OFFSET(sea_sounding,temp_vl), temp_vlen_typ);    check_err(stat,__LINE__,__FILE__);
    }


    /* define dimensions */
    stat = nc_def_dim(root_grp, "Sounding", Sounding_len, &Sounding_dim);
    check_err(stat,__LINE__,__FILE__);

    /* define variables */

    fun_soundings_dims[0] = Sounding_dim;
    stat = nc_def_var(root_grp, "fun_soundings", sea_sounding_typ, RANK_fun_soundings, fun_soundings_dims, &fun_soundings_id);
    check_err(stat,__LINE__,__FILE__);

    /* leave define mode */
    stat = nc_enddef (root_grp);
    check_err(stat,__LINE__,__FILE__);

    /* assign variable data */
    {
    sea_sounding fun_soundings_data[3] = {{1, {1, (void*)vlen_0}}, {1, {2, (void*)vlen_1}}, {-16995532, {3, (void*)vlen_2}}} ;
    size_t fun_soundings_startset[1] = {0} ;
    size_t fun_soundings_countset[1] = {3} ;
    stat = nc_put_vara(root_grp, fun_soundings_id, fun_soundings_startset, fun_soundings_countset, fun_soundings_data);
    stat = nc_put_vara(root_grp, fun_soundings_id, fun_soundings_startset, fun_soundings_countset, fun_soundings_data);
    check_err(stat,__LINE__,__FILE__);
    }


    stat = nc_close(root_grp);
    check_err(stat,__LINE__,__FILE__);
    return 0;
}