Blame view

php/src/cdfinfo.c 5.08 KB
16035364   Benjamin Renard   First commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
*  @file cdfinfo.c
*  @version $Id: cdfinfo.c,v 1.1 2010/08/31 10:32:55 budnik Exp $
*  @brief  
*/


#include <stdio.h>
#include <stdlib.h>
#include <cdf.h>
#include <string.h>

#define MAX_FILE_NAME_LEN  120  

void cdf_status_handler (CDFstatus, char *); 
char * cdf_str_datatype (long);

cdb91ea6   Elena.Budnik   redmine #5568
18
19
20
21
22
23
24
25
typedef struct cdfvar {            /* CDF variable structure */
	char name[CDF_VAR_NAME_LEN+1];   
	long datatype;                   
	long numElements;                /* string length for CDF_CHAR, 1 otherwise */
	long dimensionality;             /* variable dimensionality                 */
	long dimSizes[CDF_MAX_DIMS];     /* variable dimension sizes                */
	long recVariance;                /* record variance                         */
	long numRecs;                    /* # of records this variable contains     */
16035364   Benjamin Renard   First commit
26
27
28
29
} CDFvar;

int main(int argc, char *argv[])
{
cdb91ea6   Elena.Budnik   redmine #5568
30
31
32
33
34
35
36
37
38
39

	CDFvar var;
	CDFid    id;                     /* CDF file ID      */ 
	CDFstatus   status;              /* CDF status code */

	long nZvars, nAttrs, attrId, attrScope, varId; 
	char attrName[CDF_ATTR_NAME_LEN+1];
	char fileName[MAX_FILE_NAME_LEN];
	char msg[100];
	int dummy, i;
16035364   Benjamin Renard   First commit
40
  
cdb91ea6   Elena.Budnik   redmine #5568
41
42
43
44
	if (argc <= 1) 
			exit(0);                               /* CDF input file name not specified */
	else
			strcpy(fileName, argv[argc-1]);       /* Get the input file name */
16035364   Benjamin Renard   First commit
45
46
47
48
	
	
   status = CDFlib (OPEN_, CDF_, fileName, &id,  NULL_);   
 		     
cdb91ea6   Elena.Budnik   redmine #5568
49
50
51
52
53
	if (status != CDF_OK)  {
			strcpy(msg, "OPEN_, CDF_, ");       
			strcat(msg, fileName);
			cdf_status_handler (status, msg);
	}
16035364   Benjamin Renard   First commit
54
55
56
57
58
59
60
61
62
63
64
65
66
 
 /*---------------------------------------------------------------------------
 *   This routine retrievs the following information:
 *
 *      nAttr - number of attributes (including global and variable)
 *      nZvars - number of zVariables
 *
 *   CDF file can have both rVariables (old style) and zVariables (new style)
 *   simultaneously.  zVariable is a superset of rVariable, and it is a lot
 *   more efficient and offers all the functionality a rVariable offers and 
 *   more.  Treat all CDF variables as zVariables.
 *--------------------------------------------------------------------------*/ 
 
cdb91ea6   Elena.Budnik   redmine #5568
67
68
69
70
71
	status = CDFlib (SELECT_, CDF_zMODE_, zMODEon2,
							GET_, CDF_NUMATTRS_,  &nAttrs, 
									CDF_NUMzVARS_,  &nZvars, 
							NULL_);
	if (status != CDF_OK) cdf_status_handler(status, "GET_, CDF_FILEINFO_");
16035364   Benjamin Renard   First commit
72
  
cdb91ea6   Elena.Budnik   redmine #5568
73
	// printf(" nAttrs %d Zvars %d\n",nAttrs, nZvars); 
16035364   Benjamin Renard   First commit
74
  
cdb91ea6   Elena.Budnik   redmine #5568
75
	//  printf ("Attributes:\n");
16035364   Benjamin Renard   First commit
76
  
cdb91ea6   Elena.Budnik   redmine #5568
77
78
79
80
81
	for (attrId = 0; attrId < nAttrs; attrId++) {
			status = CDFlib (SELECT_, ATTR_, attrId,
									GET_, ATTR_NAME_, attrName,  ATTR_SCOPE_, &attrScope,
									NULL_);
	if (status != CDF_OK) cdf_status_handler (status, "SELECT_, ATTR_");           
16035364   Benjamin Renard   First commit
82
//        printf("Attr %d  %s  %d\n", attrId, attrName, attrScope); 
cdb91ea6   Elena.Budnik   redmine #5568
83
	}
16035364   Benjamin Renard   First commit
84
    
cdb91ea6   Elena.Budnik   redmine #5568
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
	//   printf ("Variables:\n"); 
	for (varId=0; varId < nZvars; varId++) {
		status = CDFlib (SELECT_,zVAR_, varId,
								GET_, zVAR_NAME_, var.name,
										zVAR_DATATYPE_, &var.datatype,
										zVAR_NUMELEMS_, &var.numElements,
										zVAR_NUMDIMS_, &var.dimensionality,
										zVAR_DIMSIZES_, var.dimSizes,
										zVAR_NUMRECS_, &var.numRecs,
										zVAR_RECVARY_, &var.recVariance,
								NULL_);   
		if (status != CDF_OK) cdf_status_handler (status, "GET_, zVARS_");
		//   printf("Varr %d  %s  %s %d\n", varId, var.name, cdf_str_datatype(var.datatype), var.numRecs); 
		if (var.recVariance != 0 && var.numRecs > 1 && var.datatype != CDF_EPOCH && var.datatype != CDF_EPOCH16 && var.datatype != CDF_TIME_TT2000) printf("%s \n", var.name);
	}
16035364   Benjamin Renard   First commit
100
     
cdb91ea6   Elena.Budnik   redmine #5568
101
102
	/* Close the CDF file */
	status = CDFlib (CLOSE_, CDF_, NULL_);   
16035364   Benjamin Renard   First commit
103
104
}

16035364   Benjamin Renard   First commit
105
106
void cdf_status_handler (CDFstatus status, char *source)
{
cdb91ea6   Elena.Budnik   redmine #5568
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
	char  message[CDF_STATUSTEXT_LEN+1];

	CDFerror (status, message);              /* Get the appropriate message */

	if (status < CDF_WARN) {
			printf ("An error has occurred, halting...\n");
			printf ("%s\n", message);
			printf ("** Error source: %s\n", source);
			exit (status);
	}
	else if (status < CDF_OK) {
			printf ("Warning, function may not have compeleted as expected...\n");
			printf ("%s\n", message);
	}
	else if (status > CDF_OK) {
			printf ("Function compeleted successfully, but be advised that...\n");
			printf ("%s\n", message);
	}
16035364   Benjamin Renard   First commit
125
}
cdb91ea6   Elena.Budnik   redmine #5568
126

16035364   Benjamin Renard   First commit
127
128
129
130
131
132
/*--------------------------------------------------------------------------
 *  This routine returns the string representation of the given CDF 
 *  datatype.
 *--------------------------------------------------------------------------*/
char *  cdf_str_datatype (long type)
{
cdb91ea6   Elena.Budnik   redmine #5568
133
134
135
	switch (type) {
	case CDF_BYTE:
		return "CDF_BYTE";
16035364   Benjamin Renard   First commit
136

cdb91ea6   Elena.Budnik   redmine #5568
137
138
	case CDF_INT1:
		return "CDF_INT1";
16035364   Benjamin Renard   First commit
139

cdb91ea6   Elena.Budnik   redmine #5568
140
141
	case CDF_CHAR:
		return "CDF_CHAR";
16035364   Benjamin Renard   First commit
142

cdb91ea6   Elena.Budnik   redmine #5568
143
144
	case CDF_INT2:
		return "CDF_INT2";
16035364   Benjamin Renard   First commit
145

cdb91ea6   Elena.Budnik   redmine #5568
146
147
	case CDF_UCHAR:
		return "CDF_UCHAR";
16035364   Benjamin Renard   First commit
148

cdb91ea6   Elena.Budnik   redmine #5568
149
150
	case CDF_UINT1:
		return "CDF_UINT1";
16035364   Benjamin Renard   First commit
151

cdb91ea6   Elena.Budnik   redmine #5568
152
153
	case CDF_INT4:
		return "CDF_INT4";
16035364   Benjamin Renard   First commit
154

cdb91ea6   Elena.Budnik   redmine #5568
155
156
	case CDF_UINT2:
		return "CDF_UINT2";
16035364   Benjamin Renard   First commit
157

cdb91ea6   Elena.Budnik   redmine #5568
158
159
	case CDF_FLOAT:
		return "CDF_FLOAT";
16035364   Benjamin Renard   First commit
160

cdb91ea6   Elena.Budnik   redmine #5568
161
162
	case CDF_REAL4:
		return "CDF_REAL4";
16035364   Benjamin Renard   First commit
163

cdb91ea6   Elena.Budnik   redmine #5568
164
165
	case CDF_DOUBLE:
		return "CDF_DOUBLE";
16035364   Benjamin Renard   First commit
166

cdb91ea6   Elena.Budnik   redmine #5568
167
168
	case CDF_REAL8:
		return "CDF_REAL8";
16035364   Benjamin Renard   First commit
169

cdb91ea6   Elena.Budnik   redmine #5568
170
171
	case CDF_UINT4:
		return "CDF_UINT4";
16035364   Benjamin Renard   First commit
172

cdb91ea6   Elena.Budnik   redmine #5568
173
174
	case CDF_EPOCH:
		return "CDF_EPOCH";
16035364   Benjamin Renard   First commit
175

cdb91ea6   Elena.Budnik   redmine #5568
176
177
178
179
180
181
	case CDF_EPOCH16:
		return "CDF_EPOCH16";
		
	case	CDF_TIME_TT2000:
		return "CDF_TIME_TT2000";
	}
16035364   Benjamin Renard   First commit
182
}