1/* This is part of the netCDF package. Copyright 2005 University
2   Corporation for Atmospheric Research/Unidata See COPYRIGHT file for
3   conditions of use. See www.unidata.ucar.edu for more info.
4
5   Create a test file with an opaque type and opaque data for ncdump to read.
6
7   $Id: tst_opaque_data.c,v 1.7 2009/01/28 18:19:49 russ Exp $
8*/
9
10#include <config.h>
11#include <nc_tests.h>
12#include "err_macros.h"
13#include <netcdf.h>
14
15#define FILE3_NAME "tst_opaque_data.nc"
16#define TYPE3_NAME "raw_obs_t"
17#define TYPE3_SIZE 11
18#define DIM3_NAME "time"
19#define DIM3_LEN 5
20#define VAR3_NAME "raw_obs"
21#define VAR3_RANK 1
22#define ATT3_NAME "_FillValue"
23#define ATT3_LEN  1
24
25int
26main(int argc, char **argv)
27{
28   int ncid;
29   int dimidvarid;
30   nc_type typeid;
31   char name_in[NC_MAX_NAME+1];
32   int class_in;
33   size_t size_in;
34
35   int i;
36
37   int var_dims[VAR3_RANK];
38   unsigned char sensor_data[DIM3_LEN][TYPE3_SIZE] = {
39       {1,2,3,4,5,6,7,8,9,10,11},
40       {0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa},
41       {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255},
42       {0xca, 0xfe, 0xba, 0xbe, 0xca, 0xfe, 0xba, 0xbe, 0xca, 0xfe, 0xba},
43       {0xcf, 0x0d, 0xef, 0xac, 0xed, 0x0c, 0xaf, 0xe0, 0xfa, 0xca, 0xde}
44   };
45   unsigned char missing_val[TYPE3_SIZE] = {
46       0xca, 0xfe, 0xba, 0xbe, 0xca, 0xfe, 0xba, 0xbe, 0xca, 0xfe, 0xba
47   };
48   unsigned char val_in[TYPE3_SIZE];
49
50   printf("\n*** Testing opaque types.\n");
51   printf("*** creating opaque test file %s...", FILE3_NAME);
52   if (nc_create(FILE3_NAMENC_CLOBBER | NC_NETCDF4, &ncid)) ERR;
53
54   /* Create an opaque type. */
55   if (nc_def_opaque(ncidTYPE3_SIZETYPE3_NAME, &typeid)) ERR;
56
57   /* Declare a time dimension */
58   if (nc_def_dim(ncidDIM3_NAMEDIM3_LEN, &dimid)) ERR;
59
60   /* Declare a variable of the opaque type */
61   var_dims[0] = dimid;
62   if (nc_def_var(ncidVAR3_NAMEtypeidVAR3_RANKvar_dims, &varid)) ERR;
63
64   /* Create and write a variable attribute of the opaque type */
65   if (nc_put_att(ncidvaridATT3_NAMEtypeidATT3_LENmissing_val)) ERR;
66   if (nc_enddef(ncid)) ERR;
67   /* Store some data of the opaque type */
68   if(nc_put_var(ncidvaridsensor_data)) ERR;
69   /* Write the file. */
70   if (nc_close(ncid)) ERR;
71
72   /* Check it out. */
73
74   /* Reopen the file. */
75   if (nc_open(FILE3_NAMENC_NOWRITE, &ncid)) ERR;
76
77   /* Get info with the generic inquire for user-defined types */
78   if (nc_inq_user_type(ncidtypeidname_in, &size_inNULL,
79    NULL, &class_in)) ERR;
80   if (strcmp(name_inTYPE3_NAME) ||
81       size_in != TYPE3_SIZE ||
82       class_in != NC_OPAQUEERR;
83   /* Get the same info with the opaque-specific inquire function */
84   if (nc_inq_opaque(ncidtypeidname_in, &size_in)) ERR;
85   if (strcmp(name_inTYPE3_NAME) ||
86       size_in !=  TYPE3_SIZEERR;
87
88   if (nc_inq_varid(ncidVAR3_NAME, &varid)) ERR;
89
90   if (nc_get_att(ncidvaridATT3_NAME, &val_in)) ERR;
91   if (memcmp(val_inmissing_valTYPE3_SIZE) != 0) ERR;
92
93   for (i = 0; i < DIM3_LENi++) {
94       size_t index[VAR3_RANK];
95       index[0] = i;
96       if(nc_get_var1(ncidvaridindexval_in)) ERR;
97       if (memcmp(val_insensor_data[i], TYPE3_SIZE) != 0) ERR;
98   }
99
100   if (nc_close(ncid)) ERR;
101
102
103   SUMMARIZE_ERR;
104   FINAL_RESULTS;
105}


HyperKWIC - Version 7.20DA executed at 11:37 on 27 Oct 2017 | Polyhedron Solutions - INTERNAL USE | COMMERCIAL (Any O/S) SN 4AKIed