/* *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* */ /* ** Copyright UCAR */ /* ** University Corporation for Atmospheric Research (UCAR) */ /* ** National Center for Atmospheric Research (NCAR) */ /* ** Boulder, Colorado, USA */ /* ** BSD licence applies - redistribution and use in source and binary */ /* ** forms, with or without modification, are permitted provided that */ /* ** the following conditions are met: */ /* ** 1) If the software is modified to produce derivative works, */ /* ** such modified software should be clearly marked, so as not */ /* ** to confuse it with the version available from UCAR. */ /* ** 2) Redistributions of source code must retain the above copyright */ /* ** notice, this list of conditions and the following disclaimer. */ /* ** 3) Redistributions in binary form must reproduce the above copyright */ /* ** notice, this list of conditions and the following disclaimer in the */ /* ** documentation and/or other materials provided with the distribution. */ /* ** 4) Neither the name of UCAR nor the names of its contributors, */ /* ** if any, may be used to endorse or promote products derived from */ /* ** this software without specific prior written permission. */ /* ** DISCLAIMER: THIS SOFTWARE IS PROVIDED 'AS IS' AND WITHOUT ANY EXPRESS */ /* ** OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ /* ** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ /* *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* */ //////////////////////////////////////////// // Params.cc // // TDRP C++ code file for class 'Params'. // // Code for program GmgsiNcf2Mdv // // This file has been automatically // generated by TDRP, do not modify. // ///////////////////////////////////////////// /** * * @file Params.cc * * @class Params * * This class is automatically generated by the Table * Driven Runtime Parameters (TDRP) system * * @note Source is automatically generated from * paramdef file at compile time, do not modify * since modifications will be overwritten. * * * @author Automatically generated * */ #include "Params.hh" #include //////////////////////////////////////////// // Default constructor // Params::Params() { // zero out table memset(_table, 0, sizeof(_table)); // zero out members memset(&_start_, 0, &_end_ - &_start_); // class name _className = "Params"; // initialize table _init(); // set members tdrpTable2User(_table, &_start_); _exitDeferred = false; } //////////////////////////////////////////// // Copy constructor // Params::Params(const Params& source) { // sync the source object source.sync(); // zero out table memset(_table, 0, sizeof(_table)); // zero out members memset(&_start_, 0, &_end_ - &_start_); // class name _className = "Params"; // copy table tdrpCopyTable((TDRPtable *) source._table, _table); // set members tdrpTable2User(_table, &_start_); _exitDeferred = false; } //////////////////////////////////////////// // Destructor // Params::~Params() { // free up freeAll(); } //////////////////////////////////////////// // Assignment // void Params::operator=(const Params& other) { // sync the other object other.sync(); // free up any existing memory freeAll(); // zero out table memset(_table, 0, sizeof(_table)); // zero out members memset(&_start_, 0, &_end_ - &_start_); // copy table tdrpCopyTable((TDRPtable *) other._table, _table); // set members tdrpTable2User(_table, &_start_); _exitDeferred = other._exitDeferred; } //////////////////////////////////////////// // loadFromArgs() // // Loads up TDRP using the command line args. // // Check usage() for command line actions associated with // this function. // // argc, argv: command line args // // char **override_list: A null-terminated list of overrides // to the parameter file. // An override string has exactly the format of an entry // in the parameter file itself. // // char **params_path_p: // If this is non-NULL, it is set to point to the path // of the params file used. // // bool defer_exit: normally, if the command args contain a // print or check request, this function will call exit(). // If defer_exit is set, such an exit is deferred and the // private member _exitDeferred is set. // Use exidDeferred() to test this flag. // // Returns 0 on success, -1 on failure. // int Params::loadFromArgs(int argc, char **argv, char **override_list, char **params_path_p, bool defer_exit) { int exit_deferred; if (_tdrpLoadFromArgs(argc, argv, _table, &_start_, override_list, params_path_p, _className, defer_exit, &exit_deferred)) { return (-1); } else { if (exit_deferred) { _exitDeferred = true; } return (0); } } //////////////////////////////////////////// // loadApplyArgs() // // Loads up TDRP using the params path passed in, and applies // the command line args for printing and checking. // // Check usage() for command line actions associated with // this function. // // const char *param_file_path: the parameter file to be read in // // argc, argv: command line args // // char **override_list: A null-terminated list of overrides // to the parameter file. // An override string has exactly the format of an entry // in the parameter file itself. // // bool defer_exit: normally, if the command args contain a // print or check request, this function will call exit(). // If defer_exit is set, such an exit is deferred and the // private member _exitDeferred is set. // Use exidDeferred() to test this flag. // // Returns 0 on success, -1 on failure. // int Params::loadApplyArgs(const char *params_path, int argc, char **argv, char **override_list, bool defer_exit) { int exit_deferred; if (tdrpLoadApplyArgs(params_path, argc, argv, _table, &_start_, override_list, _className, defer_exit, &exit_deferred)) { return (-1); } else { if (exit_deferred) { _exitDeferred = true; } return (0); } } //////////////////////////////////////////// // isArgValid() // // Check if a command line arg is a valid TDRP arg. // bool Params::isArgValid(const char *arg) { return (tdrpIsArgValid(arg)); } //////////////////////////////////////////// // load() // // Loads up TDRP for a given class. // // This version of load gives the programmer the option to load // up more than one class for a single application. It is a // lower-level routine than loadFromArgs, and hence more // flexible, but the programmer must do more work. // // const char *param_file_path: the parameter file to be read in. // // char **override_list: A null-terminated list of overrides // to the parameter file. // An override string has exactly the format of an entry // in the parameter file itself. // // expand_env: flag to control environment variable // expansion during tokenization. // If TRUE, environment expansion is set on. // If FALSE, environment expansion is set off. // // Returns 0 on success, -1 on failure. // int Params::load(const char *param_file_path, char **override_list, int expand_env, int debug) { if (tdrpLoad(param_file_path, _table, &_start_, override_list, expand_env, debug)) { return (-1); } else { return (0); } } //////////////////////////////////////////// // loadFromBuf() // // Loads up TDRP for a given class. // // This version of load gives the programmer the option to // load up more than one module for a single application, // using buffers which have been read from a specified source. // // const char *param_source_str: a string which describes the // source of the parameter information. It is used for // error reporting only. // // char **override_list: A null-terminated list of overrides // to the parameter file. // An override string has exactly the format of an entry // in the parameter file itself. // // const char *inbuf: the input buffer // // int inlen: length of the input buffer // // int start_line_num: the line number in the source which // corresponds to the start of the buffer. // // expand_env: flag to control environment variable // expansion during tokenization. // If TRUE, environment expansion is set on. // If FALSE, environment expansion is set off. // // Returns 0 on success, -1 on failure. // int Params::loadFromBuf(const char *param_source_str, char **override_list, const char *inbuf, int inlen, int start_line_num, int expand_env, int debug) { if (tdrpLoadFromBuf(param_source_str, _table, &_start_, override_list, inbuf, inlen, start_line_num, expand_env, debug)) { return (-1); } else { return (0); } } //////////////////////////////////////////// // loadDefaults() // // Loads up default params for a given class. // // See load() for more detailed info. // // Returns 0 on success, -1 on failure. // int Params::loadDefaults(int expand_env) { if (tdrpLoad(NULL, _table, &_start_, NULL, expand_env, FALSE)) { return (-1); } else { return (0); } } //////////////////////////////////////////// // sync() // // Syncs the user struct data back into the parameter table, // in preparation for printing. // // This function alters the table in a consistent manner. // Therefore it can be regarded as const. // void Params::sync(void) const { tdrpUser2Table(_table, (char *) &_start_); } //////////////////////////////////////////// // print() // // Print params file // // The modes supported are: // // PRINT_SHORT: main comments only, no help or descriptions // structs and arrays on a single line // PRINT_NORM: short + descriptions and help // PRINT_LONG: norm + arrays and structs expanded // PRINT_VERBOSE: long + private params included // void Params::print(FILE *out, tdrp_print_mode_t mode) { tdrpPrint(out, _table, _className, mode); } //////////////////////////////////////////// // checkAllSet() // // Return TRUE if all set, FALSE if not. // // If out is non-NULL, prints out warning messages for those // parameters which are not set. // int Params::checkAllSet(FILE *out) { return (tdrpCheckAllSet(out, _table, &_start_)); } ////////////////////////////////////////////////////////////// // checkIsSet() // // Return TRUE if parameter is set, FALSE if not. // // int Params::checkIsSet(const char *paramName) { return (tdrpCheckIsSet(paramName, _table, &_start_)); } //////////////////////////////////////////// // freeAll() // // Frees up all TDRP dynamic memory. // void Params::freeAll(void) { tdrpFreeAll(_table, &_start_); } //////////////////////////////////////////// // usage() // // Prints out usage message for TDRP args as passed // in to loadFromArgs(). // void Params::usage(ostream &out) { out << "TDRP args: [options as below]\n" << " [ -params/--params path ] specify params file path\n" << " [ -check_params/--check_params] check which params are not set\n" << " [ -print_params/--print_params [mode]] print parameters\n" << " using following modes, default mode is 'norm'\n" << " short: main comments only, no help or descr\n" << " structs and arrays on a single line\n" << " norm: short + descriptions and help\n" << " long: norm + arrays and structs expanded\n" << " verbose: long + private params included\n" << " short_expand: short with env vars expanded\n" << " norm_expand: norm with env vars expanded\n" << " long_expand: long with env vars expanded\n" << " verbose_expand: verbose with env vars expanded\n" << " [ -tdrp_debug] debugging prints for tdrp\n" << " [ -tdrp_usage] print this usage\n"; } //////////////////////////////////////////// // arrayRealloc() // // Realloc 1D array. // // If size is increased, the values from the last array // entry is copied into the new space. // // Returns 0 on success, -1 on error. // int Params::arrayRealloc(const char *param_name, int new_array_n) { if (tdrpArrayRealloc(_table, &_start_, param_name, new_array_n)) { return (-1); } else { return (0); } } //////////////////////////////////////////// // array2DRealloc() // // Realloc 2D array. // // If size is increased, the values from the last array // entry is copied into the new space. // // Returns 0 on success, -1 on error. // int Params::array2DRealloc(const char *param_name, int new_array_n1, int new_array_n2) { if (tdrpArray2DRealloc(_table, &_start_, param_name, new_array_n1, new_array_n2)) { return (-1); } else { return (0); } } //////////////////////////////////////////// // _init() // // Class table initialization function. // // void Params::_init() { TDRPtable *tt = _table; // Parameter 'Comment 0' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = COMMENT_TYPE; tt->param_name = tdrpStrDup("Comment 0"); tt->comment_hdr = tdrpStrDup("Param file for GmgsiNcf2Mdv"); tt->comment_text = tdrpStrDup(""); tt++; // Parameter 'debug' // ctype is '_debug_t' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = ENUM_TYPE; tt->param_name = tdrpStrDup("debug"); tt->descr = tdrpStrDup("Debug option"); tt->help = tdrpStrDup("If set, debug messages will be printed appropriately"); tt->val_offset = (char *) &debug - &_start_; tt->enum_def.name = tdrpStrDup("debug_t"); tt->enum_def.nfields = 3; tt->enum_def.fields = (enum_field_t *) tdrpMalloc(tt->enum_def.nfields * sizeof(enum_field_t)); tt->enum_def.fields[0].name = tdrpStrDup("DEBUG_OFF"); tt->enum_def.fields[0].val = DEBUG_OFF; tt->enum_def.fields[1].name = tdrpStrDup("DEBUG_NORM"); tt->enum_def.fields[1].val = DEBUG_NORM; tt->enum_def.fields[2].name = tdrpStrDup("DEBUG_VERBOSE"); tt->enum_def.fields[2].val = DEBUG_VERBOSE; tt->single_val.e = DEBUG_OFF; tt++; // Parameter 'instance' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("instance"); tt->descr = tdrpStrDup("Program instance for process registration."); tt->help = tdrpStrDup("This program registers with procmap. This is the instance used for registration."); tt->val_offset = (char *) &instance - &_start_; tt->single_val.s = tdrpStrDup("Test"); tt++; // Parameter 'mode' // ctype is '_mode_t' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = ENUM_TYPE; tt->param_name = tdrpStrDup("mode"); tt->descr = tdrpStrDup("Operating mode"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &mode - &_start_; tt->enum_def.name = tdrpStrDup("mode_t"); tt->enum_def.nfields = 3; tt->enum_def.fields = (enum_field_t *) tdrpMalloc(tt->enum_def.nfields * sizeof(enum_field_t)); tt->enum_def.fields[0].name = tdrpStrDup("REALTIME"); tt->enum_def.fields[0].val = REALTIME; tt->enum_def.fields[1].name = tdrpStrDup("FILELIST"); tt->enum_def.fields[1].val = FILELIST; tt->enum_def.fields[2].name = tdrpStrDup("TIME_INTERVAL"); tt->enum_def.fields[2].val = TIME_INTERVAL; tt->single_val.e = REALTIME; tt++; // Parameter 'Comment 1' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = COMMENT_TYPE; tt->param_name = tdrpStrDup("Comment 1"); tt->comment_hdr = tdrpStrDup("INPUT DATA"); tt->comment_text = tdrpStrDup(""); tt++; // Parameter 'lat_var' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("lat_var"); tt->descr = tdrpStrDup("latitude data"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &lat_var - &_start_; tt->single_val.s = tdrpStrDup("lat"); tt++; // Parameter 'lon_var' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("lon_var"); tt->descr = tdrpStrDup("longitude data"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &lon_var - &_start_; tt->single_val.s = tdrpStrDup("lon"); tt++; // Parameter 'sat_data_field' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("sat_data_field"); tt->descr = tdrpStrDup("Sat data field name"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &sat_data_field - &_start_; tt->single_val.s = tdrpStrDup("data"); tt++; // Parameter 'sat_data_units' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("sat_data_units"); tt->descr = tdrpStrDup("Satellite data units"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &sat_data_units - &_start_; tt->single_val.s = tdrpStrDup("K"); tt++; // Parameter 'sat_missing_or_bad' // ctype is 'float' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = FLOAT_TYPE; tt->param_name = tdrpStrDup("sat_missing_or_bad"); tt->descr = tdrpStrDup("Min missing or bad data"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &sat_missing_or_bad - &_start_; tt->single_val.f = -9999; tt++; // Parameter 'y_dim' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("y_dim"); tt->descr = tdrpStrDup("y dimension name"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &y_dim - &_start_; tt->single_val.s = tdrpStrDup("yc"); tt++; // Parameter 'x_dim' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("x_dim"); tt->descr = tdrpStrDup("x dimension name"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &x_dim - &_start_; tt->single_val.s = tdrpStrDup("xc"); tt++; // Parameter 'input_dir' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("input_dir"); tt->descr = tdrpStrDup("Input directory"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &input_dir - &_start_; tt->single_val.s = tdrpStrDup("./"); tt++; // Parameter 'max_valid_realtime_age_min' // ctype is 'int' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = INT_TYPE; tt->param_name = tdrpStrDup("max_valid_realtime_age_min"); tt->descr = tdrpStrDup("Maximum age of file in minutes"); tt->help = tdrpStrDup("Used in REALTIME mode only."); tt->val_offset = (char *) &max_valid_realtime_age_min - &_start_; tt->single_val.i = 15; tt++; // Parameter 'ldata_info_avail' // ctype is 'tdrp_bool_t' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = BOOL_TYPE; tt->param_name = tdrpStrDup("ldata_info_avail"); tt->descr = tdrpStrDup("Latest data info file available"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &ldata_info_avail - &_start_; tt->single_val.b = pFALSE; tt++; // Parameter 'file_quiescence_sec' // ctype is 'int' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = INT_TYPE; tt->param_name = tdrpStrDup("file_quiescence_sec"); tt->descr = tdrpStrDup("Set wait for file to be written to disk before being served"); tt->help = tdrpStrDup("Used in REALTIME mode only."); tt->val_offset = (char *) &file_quiescence_sec - &_start_; tt->single_val.i = 0; tt++; // Parameter 'check_input_sec' // ctype is 'int' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = INT_TYPE; tt->param_name = tdrpStrDup("check_input_sec"); tt->descr = tdrpStrDup("Set wait for file between checks for new data"); tt->help = tdrpStrDup("Used in REALTIME mode only."); tt->val_offset = (char *) &check_input_sec - &_start_; tt->single_val.i = 5; tt++; // Parameter 'start_time' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("start_time"); tt->descr = tdrpStrDup("yyyymmddhhMMss"); tt->help = tdrpStrDup("Set for TIME_INTERVAL mode only."); tt->val_offset = (char *) &start_time - &_start_; tt->single_val.s = tdrpStrDup(""); tt++; // Parameter 'end_time' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("end_time"); tt->descr = tdrpStrDup("yyyymmddhhMMss"); tt->help = tdrpStrDup("Set for TIME_INTERVAL mode only."); tt->val_offset = (char *) &end_time - &_start_; tt->single_val.s = tdrpStrDup(""); tt++; // Parameter 'output_proj' // ctype is '_proj_t' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRUCT_TYPE; tt->param_name = tdrpStrDup("output_proj"); tt->descr = tdrpStrDup("Output projection"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &output_proj - &_start_; tt->struct_def.name = tdrpStrDup("proj_t"); tt->struct_def.nfields = 9; tt->struct_def.fields = (struct_field_t *) tdrpMalloc(tt->struct_def.nfields * sizeof(struct_field_t)); tt->struct_def.fields[0].ftype = tdrpStrDup("proj_type_t"); tt->struct_def.fields[0].fname = tdrpStrDup("proj_type"); tt->struct_def.fields[0].ptype = ENUM_TYPE; tt->struct_def.fields[0].rel_offset = (char *) &output_proj.proj_type - (char *) &output_proj; tt->struct_def.fields[0].enum_def.name = tdrpStrDup("proj_type_t"); tt->struct_def.fields[0].enum_def.nfields = 2; tt->struct_def.fields[0].enum_def.fields = (enum_field_t *) tdrpMalloc (tt->struct_def.fields[0].enum_def.nfields * sizeof(enum_field_t)); tt->struct_def.fields[0].enum_def.fields[0].name = tdrpStrDup("PROJ_LATLON"); tt->struct_def.fields[0].enum_def.fields[0].val = PROJ_LATLON; tt->struct_def.fields[0].enum_def.fields[1].name = tdrpStrDup("PROJ_MERCATOR"); tt->struct_def.fields[0].enum_def.fields[1].val = PROJ_MERCATOR; tt->struct_def.fields[1].ftype = tdrpStrDup("double"); tt->struct_def.fields[1].fname = tdrpStrDup("minx"); tt->struct_def.fields[1].ptype = DOUBLE_TYPE; tt->struct_def.fields[1].rel_offset = (char *) &output_proj.minx - (char *) &output_proj; tt->struct_def.fields[2].ftype = tdrpStrDup("double"); tt->struct_def.fields[2].fname = tdrpStrDup("miny"); tt->struct_def.fields[2].ptype = DOUBLE_TYPE; tt->struct_def.fields[2].rel_offset = (char *) &output_proj.miny - (char *) &output_proj; tt->struct_def.fields[3].ftype = tdrpStrDup("int"); tt->struct_def.fields[3].fname = tdrpStrDup("nx"); tt->struct_def.fields[3].ptype = INT_TYPE; tt->struct_def.fields[3].rel_offset = (char *) &output_proj.nx - (char *) &output_proj; tt->struct_def.fields[4].ftype = tdrpStrDup("int"); tt->struct_def.fields[4].fname = tdrpStrDup("ny"); tt->struct_def.fields[4].ptype = INT_TYPE; tt->struct_def.fields[4].rel_offset = (char *) &output_proj.ny - (char *) &output_proj; tt->struct_def.fields[5].ftype = tdrpStrDup("double"); tt->struct_def.fields[5].fname = tdrpStrDup("dx"); tt->struct_def.fields[5].ptype = DOUBLE_TYPE; tt->struct_def.fields[5].rel_offset = (char *) &output_proj.dx - (char *) &output_proj; tt->struct_def.fields[6].ftype = tdrpStrDup("double"); tt->struct_def.fields[6].fname = tdrpStrDup("dy"); tt->struct_def.fields[6].ptype = DOUBLE_TYPE; tt->struct_def.fields[6].rel_offset = (char *) &output_proj.dy - (char *) &output_proj; tt->struct_def.fields[7].ftype = tdrpStrDup("double"); tt->struct_def.fields[7].fname = tdrpStrDup("origin_lat"); tt->struct_def.fields[7].ptype = DOUBLE_TYPE; tt->struct_def.fields[7].rel_offset = (char *) &output_proj.origin_lat - (char *) &output_proj; tt->struct_def.fields[8].ftype = tdrpStrDup("double"); tt->struct_def.fields[8].fname = tdrpStrDup("origin_lon"); tt->struct_def.fields[8].ptype = DOUBLE_TYPE; tt->struct_def.fields[8].rel_offset = (char *) &output_proj.origin_lon - (char *) &output_proj; tt->n_struct_vals = 9; tt->struct_vals = (tdrpVal_t *) tdrpMalloc(tt->n_struct_vals * sizeof(tdrpVal_t)); tt->struct_vals[0].e = PROJ_LATLON; tt->struct_vals[1].d = -180; tt->struct_vals[2].d = -90; tt->struct_vals[3].i = 720; tt->struct_vals[4].i = 360; tt->struct_vals[5].d = 0.5; tt->struct_vals[6].d = 0.5; tt->struct_vals[7].d = -90; tt->struct_vals[8].d = -180; tt++; // Parameter 'Comment 2' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = COMMENT_TYPE; tt->param_name = tdrpStrDup("Comment 2"); tt->comment_hdr = tdrpStrDup("OUTPUT DATA"); tt->comment_text = tdrpStrDup(""); tt++; // Parameter 'output_data_fieldname' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("output_data_fieldname"); tt->descr = tdrpStrDup("Name to assign to output data field"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &output_data_fieldname - &_start_; tt->single_val.s = tdrpStrDup("data"); tt++; // Parameter 'output_url' // ctype is 'char*' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = STRING_TYPE; tt->param_name = tdrpStrDup("output_url"); tt->descr = tdrpStrDup("URL for the output MDV files."); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &output_url - &_start_; tt->single_val.s = tdrpStrDup("mdvp:://localhost::$(PROJECT)/mdv/globSat"); tt++; // Parameter 'sleep_secs' // ctype is 'int' memset(tt, 0, sizeof(TDRPtable)); tt->ptype = INT_TYPE; tt->param_name = tdrpStrDup("sleep_secs"); tt->descr = tdrpStrDup("Seconds to sleep between data checks"); tt->help = tdrpStrDup(""); tt->val_offset = (char *) &sleep_secs - &_start_; tt->single_val.i = 10; tt++; // trailing entry has param_name set to NULL tt->param_name = NULL; return; }