// set methods
//-------------------------------------------------------------------------
-static const Parameter* get_params(string& sfx, const Parameter* p)
+static const Parameter* get_params(const string& sfx, const Parameter* p)
{
size_t pos = sfx.find_first_of('.');
+ std::string new_fqn;
if ( pos == string::npos )
- new_fqn = sfx;
+ {
+ if ( p[0].name && !p[1].name )
+ return p;
+ else
- return nullptr;
++ new_fqn = sfx;
+ }
+ else
++ {
+ new_fqn = sfx.substr(pos + 1);
++ }
- sfx.erase(0, pos+1);
- string name = sfx.substr(0, sfx.find_first_of('.'));
-
+ string name = new_fqn.substr(0, new_fqn.find_first_of('.'));
while ( p->name && name != p->name )
++p;
Module* m = h->mod;
+ if (strcmp(m->get_name(), s))
+ {
+ std::string fqn = s;
+ const Parameter* const p = get_params(fqn, m->get_parameters());
+
+ if ( !p )
+ {
+ ParseError("can't find %s\n", s);
+ return false;
+ }
+ else if ((idx > 0) && (p->type == Parameter::PT_TABLE))
+ {
+ ParseError("%s is a table. All elements must be named\n", s);
+ return false;
+ }
+ }
+
if ( s_current != key )
{
- LogMessage("\t %s\n", key.c_str());
+ if ( fqn != orig )
+ LogMessage("\t%s (%s)\n", key.c_str(), orig);
+ else
+ LogMessage("\t%s\n", key.c_str());
s_current = key;
}