48 #include <InternalErr.h>
56 #define ATTR_STRING_QUOTE_FIX
60 static void header_to_attributes(AttrTable *at,
DATA_BIN_PTR dbin)
75 string msg =
"Cannot get attribute values. FreeForm error code: ";
76 append_long_to_string((
long) error, 10, msg);
92 vlist = (vlist)->next;
101 #ifndef ATTR_STRING_QUOTE_FIX
103 if (strpbrk(text,
" \r\t")) {
105 quoted_text = (string)
"\"" + text +
"\"";
106 at->append_attr(var->
name,
"STRING",
107 quoted_text.c_str());
110 at->append_attr(var->
name,
"STRING", text);
116 at->append_attr(var->
name,
"STRING", text);
123 snprintf(text,
sizeof(text),
"%d", int8);
124 at->append_attr(var->
name,
"BYTE", text);
130 snprintf(text,
sizeof(text),
"%d", int16);
131 at->append_attr(var->
name,
"INT16", text);
137 snprintf(text,
sizeof(text),
"%d", int32);
138 at->append_attr(var->
name,
"INT32", text);
144 snprintf(text,
sizeof(text),
"%ld", int64);
145 at->append_attr(var->
name,
"INT32", text);
151 snprintf(text,
sizeof(text),
"%d", uint8);
152 at->append_attr(var->
name,
"BYTE", text);
156 unsigned short uint16;
158 snprintf(text,
sizeof(text),
"%d", uint16);
159 at->append_attr(var->
name,
"UINT16", text);
165 snprintf(text,
sizeof(text),
"%u", uint32);
166 at->append_attr(var->
name,
"UINT32", text);
170 unsigned long uint64;
172 snprintf(text,
sizeof(text),
"%lu", uint64);
173 at->append_attr(var->
name,
"UINT32", text);
179 snprintf(text,
sizeof(text),
"%f", float32);
180 at->append_attr(var->
name,
"FLOAT32", text);
186 snprintf(text,
sizeof(text),
"%f", float64);
187 at->append_attr(var->
name,
"FLOAT64", text);
193 snprintf(text,
sizeof(text),
"%e", enote);
194 at->append_attr(var->
name,
"FLOAT64", text);
198 throw InternalErr(__FILE__, __LINE__,
"Unknown FreeForm type!");
200 vlist = (vlist)->next;
218 throw Error((
string)
"Could not open file " + path_to_filename(filename) +
".");
224 throw Error(
"ff_das: Insufficient memory");
232 SetUps->
input_file =
const_cast<char*
>(filename.c_str());
255 string msg =
"Cannot get Format Summary. FreeForm error code: ";
256 append_long_to_string((
long) error, 10, msg);
260 #ifndef ATTR_STRING_QUOTE_FIX
261 at->append_attr(
"Server",
"STRING",
262 "\"DODS FreeFrom based on FFND release " +
FFND_LIB_VER +
"\"");
264 at->append_attr(
"Server",
"STRING",
string(
"DODS FreeFrom based on FFND release ") +
FFND_LIB_VER);
267 header_to_attributes(at, dbin);
282 static void add_variable_containers(DAS &das,
const string &filename)
throw (
Error)
285 throw Error(
string(
"ff_dds: Could not open file ") + path_to_filename(filename) +
string(
"."));
290 throw Error(
"Insufficient memory");
294 SetUps->
input_file =
const_cast<char*
>(filename.c_str());
306 int error =
SetDodsDB(SetUps, &dbin, Msgt);
311 string msg = string(Msgt) +
" FreeForm error code: ";
312 append_long_to_string((
long) error, 10, msg);
320 char **var_names_vector =
NULL;
322 char **dim_names_vector =
NULL;
329 string msg =
"Could not get varible list from the input file. FreeForm error code: ";
330 append_long_to_string((
long) error, 10, msg);
340 string msg =
"Could not get process info for the input file. FreeForm error code: ";
341 append_long_to_string((
long) error, 10, msg);
347 for (
int i = 0; i < num_names; i++) {
348 int num_dim_names = 0;
351 string msg =
"Could not get array dimension names for variable: " + string(var_names_vector[i])
352 + string(
", FreeForm error code: ");
353 append_long_to_string((
long) error, 10, msg);
360 if (num_dim_names == 0)
361 cp = var_names_vector[i];
363 cp = strstr(var_names_vector[i],
"::");
380 das.add_table(cp,
new AttrTable);
382 memFree(dim_names_vector,
"**dim_names_vector");
383 dim_names_vector =
NULL;
387 if (var_names_vector)
388 memFree(var_names_vector,
"**var_names_vector");
391 if (dim_names_vector)
392 memFree(dim_names_vector,
"**dim_names_vector");
399 memFree(var_names_vector,
"**var_names_vector");
400 var_names_vector =
NULL;
415 AttrTable *attr_table_p =
new AttrTable;
417 das.add_table(
"FF_GLOBAL", attr_table_p);
423 add_variable_containers(das, filename);
const string find_ancillary_rss_formats(const string &dataset, const string &, const string &)
Find the RSS (Remote Sensing Systems) format file using their naming convention.
bool file_exist(const char *filename)
int SetDodsDB(FF_STD_ARGS_PTR std_args, DATA_BIN_HANDLE dbin_h, char *Msgt)
Given a set of standard arguments (input filenames), allocate a DATA-BIN_HANDLE and return an error c...
struct struct_ff_std_args::struct_std_args_user user
void ff_get_attributes(DAS &das, string filename)
unsigned int is_stdin_redirected
void read_attributes(string filename, AttrTable *at)
Read the attributes and store their names and values in the attribute table.
static bool get_RSS_format_support()