예제 #1
0
void
CommandInterpreter::ShowVariableHelp (CommandReturnObject &result)
{
    result.AppendMessage ("Below is a list of all the internal debugger variables that are settable:");
    for (VariableMap::const_iterator pos = m_variables.begin(); pos != m_variables.end(); ++pos)
    {
        StateVariable *var = pos->second.get();
        result.AppendMessageWithFormat ("    %s  --  %s \n", var->GetName(), var->GetHelp());
    }
}
예제 #2
0
void
CommandInterpreter::ShowVariableValues (CommandReturnObject &result)
{
    result.AppendMessage ("Below is a list of all the debugger setting variables and their values:");

    for (VariableMap::const_iterator pos = m_variables.begin(); pos != m_variables.end(); ++pos)
    {
        StateVariable *var = pos->second.get();
        var->AppendVariableInformation (result);
    }
}
예제 #3
0
const Args *
CommandInterpreter::GetEnvironmentVariables ()
{
    if (! HasInterpreterVariables())
        return NULL;

    VariableMap::const_iterator pos = m_variables.find("env-vars");
    if (pos == m_variables.end())
        return NULL;

    StateVariable *var = pos->second.get();
    if (var)
        return &var->GetArgs();
    return NULL;
}
예제 #4
0
const char *
CommandInterpreter::GetPrompt ()
{
    VariableMap::iterator pos;

    if (! HasInterpreterVariables())
        return NULL;

    pos = m_variables.find("prompt");
    if (pos == m_variables.end())
        return NULL;

    StateVariable *var = pos->second.get();

    return ((char *) var->GetStringValue());
}
예제 #5
0
const Args *
CommandInterpreter::GetProgramArguments ()
{
    if (! HasInterpreterVariables())
        return NULL;

    VariableMap::const_iterator pos = m_variables.find("run-args");
    if (pos == m_variables.end())
        return NULL;

    StateVariable *var = pos->second.get();

    if (var)
        return &var->GetArgs();
    return NULL;
}
예제 #6
0
void
CommandInterpreter::SetPrompt (const char *new_prompt)
{
    VariableMap::iterator pos;
    CommandReturnObject result;

    if (! HasInterpreterVariables())
        return;

    pos = m_variables.find ("prompt");
    if (pos == m_variables.end())
        return;

    StateVariable *var = pos->second.get();

    if (var->VerifyValue (this, (void *) new_prompt, result))
       var->SetStringValue (new_prompt);
}
예제 #7
0
bool StateVariable::performQueryListener(QueryRequest *queryReq)
{
  QueryListener *listener = getQueryListener();
  if (listener == NULL)
    return false;
  QueryResponse queryRes;
  StateVariable retVar;
  retVar.set(this);
  retVar.setValue("");
  retVar.setStatus(UPnP::INVALID_VAR);
  if (listener->queryControlReceived(&retVar) == true) {
    queryRes.setResponse(&retVar);
  }
  else {
    UPnPStatus *upnpStatus = retVar.getStatus();
    queryRes.setFaultResponse(upnpStatus->getCode(), upnpStatus->getDescription());
  }
  HTTPRequest *httpReq = queryReq;
  httpReq->post(&queryRes);
  return true;
}
예제 #8
0
bool
CommandObjectShow::Execute
(
    CommandInterpreter &interpreter,
    Args& command,
    CommandReturnObject &result
)
{
    CommandInterpreter::VariableMap::iterator pos;

    if (command.GetArgumentCount())
    {
        // The user requested to see the value of a particular variable.

        const char *var_name = command.GetArgumentAtIndex(0);
        StateVariable *var = interpreter.GetStateVariable(var_name);
        if (var)
        {
            var->AppendVariableInformation (result);
            result.SetStatus (eReturnStatusSuccessFinishNoResult);
        }
        else
        {
            result.AppendErrorWithFormat ("Unrecognized variable '%s'; cannot do 'show' command.\n", var_name);
            result.SetStatus (eReturnStatusFailed);
        }
    }
    else
    {
        // The user didn't specify a particular variable, so show the values of all of them.
        interpreter.ShowVariableValues(result);
        result.SetStatus (eReturnStatusSuccessFinishNoResult);
    }

    return result.Succeeded();
}
예제 #9
0
void PrintDeviceInfo(Device *dev, int indent)
{
	string indentStr;
	GetIndentString(indent, indentStr);
	const char *devName = dev->getFriendlyName();
	cout << indentStr << devName << endl;

	int i, n, j;
	ServiceList *serviceList = dev->getServiceList();
	int serviceCnt = serviceList->size();
	for (n=0; n<serviceCnt; n++) {
		Service *service = serviceList->getService(n);
		cout << indentStr << " service[" << n << "] = "<< service->getServiceType() << endl;
		ActionList *actionList = service->getActionList();
		int actionCnt = actionList->size();
		for (i=0; i<actionCnt; i++) {
			Action *action = actionList->getAction(i);
			cout << indentStr << "  action[" << i << "] = "<< action->getName() << endl;
			ArgumentList *argList = action->getArgumentList();
			int argCnt = argList->size();
			for (j=0; j<argCnt; j++) {
					Argument *arg = argList->getArgument(j);
					cout << indentStr << "    arg[" << j << "] = " << arg->getName() << "("  << arg->getDirection() << ")";
					StateVariable *stateVar = arg->getRelatedStateVariable();
					if (stateVar != NULL)
						cout << " - " << stateVar->getName();
					cout << endl;
			}
		}
		ServiceStateTable *stateTable = service->getServiceStateTable();
		int varCnt = stateTable->size();
		for (i=0; i<varCnt; i++) {
			StateVariable *stateVar = stateTable->getStateVariable(i);
			cout << indentStr << "  stateVar[" << i << "] = " << stateVar->getName() << endl;
			AllowedValueList *valueList = stateVar->getAllowedValueList();
			int valueListCnt = valueList->size();
			if (0 < valueListCnt) {
				for (j=0; j<valueListCnt; j++)
					cout << indentStr << "    AllowedValueList[" << j << "] = " << valueList->getAllowedValue(j) << endl;
			}
			AllowedValueRange *valueRange = stateVar->getAllowedValueRange();
			if (valueRange != NULL) {
					cout << indentStr << "    AllowedRange[minimum] = " << valueRange->getMinimum() << endl;
					cout << indentStr << "    AllowedRange[maximum] = " << valueRange->getMaximum() << endl;
					cout << indentStr << "    AllowedRange[step] = " << valueRange->getStep() << endl;
			}
		}
	}
}
예제 #10
0
void VectorField::Delay2ODE_ConvertAndExtend(ex& f, int N, int p)
    {
    lst dlist;
    f.find(delay(wild(1),wild(2)),dlist);
    // dlist is now a ginac lst of expressions of the form delay(delayexpr,del)
    for (lst::const_iterator diter = dlist.begin(); diter != dlist.end(); ++diter)
        {
        // diter points to a ginac expression of the form delay(delayexpr,del).
        ex delayfunc = *diter;
        symbol tmpsymbol;
        ex lag = delayfunc.op(1);
        ex hist = delayfunc.op(0);
        Delay2ODE_ConvertExprToDefHist(hist);
        string delayed_var_name;
        ostringstream os_N_over_delta;
        os_N_over_delta << "(" << N << "/(" << lag << "))";
        string N_over_delta = os_N_over_delta.str();
        for (int k = 0; k < N; ++k)
            {
            if (p == 1)
                {
                string vstr1, prev_vstr1;
                ostringstream os;
                os << k+1;
                vstr1 = tmpsymbol.get_name() + "_1_" + os.str();
                os.str("");
                os << k;
                prev_vstr1 = tmpsymbol.get_name() + "_1_" + os.str();
                //
                StateVariable *var = new StateVariable(vstr1);
                ostringstream os_varformula;
                os_varformula << N_over_delta << "*(";
                if (k == 0)
                    os_varformula << delayfunc.op(0);
                else
                    os_varformula << prev_vstr1;
                os_varformula << " - " << vstr1 << ")";
                var->Formula(os_varformula.str());
                ostringstream os_vardefic;
                os_vardefic << hist.subs(IndVar==-(k+1)*lag/N);
                var->DefaultInitialCondition(os_vardefic.str());
                AddStateVariable(var);
                if (k == N-1)
                    delayed_var_name = var->Name();
                }
            else if (p == 2)
                {
                string vstr1,vstr2, prev_vstr1;
                ostringstream os;
                os << k+1;
                vstr1 = tmpsymbol.get_name() + "_1_" + os.str();
                vstr2 = tmpsymbol.get_name() + "_2_" + os.str();
                os.str("");
                os << k;
                prev_vstr1 = tmpsymbol.get_name() + "_1_" + os.str();
                //
                StateVariable *var = new StateVariable(vstr1);
                var->Formula(vstr2);
                ostringstream os_vardefic;
                os_vardefic << hist.subs(IndVar==-(k+1)*lag/N);
                var->DefaultInitialCondition(os_vardefic.str());
                AddStateVariable(var);
                if (k == N-1)
                    delayed_var_name = var->Name();
                //
                var = new StateVariable(vstr2);
                ostringstream os_varformula;
                os_varformula << "2*" << N_over_delta << "*";
                os_varformula << "( -" << vstr2 << " + " << N_over_delta << "*";
                os_varformula << "(";
                if (k == 0)
                    os_varformula << delayfunc.op(0);
                else
                    os_varformula << prev_vstr1;
                os_varformula << " - " << vstr1 << "))";
                var->Formula(os_varformula.str());
                ex icderiv = hist.diff(IndVar);
                ostringstream os_vardefic_deriv;
                os_vardefic_deriv << icderiv.subs(IndVar==-(k+1)*lag/N);
                var->DefaultInitialCondition(os_vardefic_deriv.str());
                AddStateVariable(var);
                }
            else // p == 3
                {
                string vstr1,vstr2,vstr3, prev_vstr1;
                ostringstream os;
                os << k+1;
                vstr1 = tmpsymbol.get_name() + "_1_" + os.str();
                vstr2 = tmpsymbol.get_name() + "_2_" + os.str();
                vstr3 = tmpsymbol.get_name() + "_3_" + os.str();
                os.str("");
                os << k;
                prev_vstr1 = tmpsymbol.get_name() + "_1_" + os.str();
                //
                StateVariable *var = new StateVariable(vstr1);
                var->Formula(vstr2);
                ostringstream os_vardefic;
                os_vardefic << hist.subs(IndVar==-(k+1)*lag/N);
                var->DefaultInitialCondition(os_vardefic.str());
                AddStateVariable(var);
                if (k == N-1)
                    delayed_var_name = var->Name();
                //
                var = new StateVariable(vstr2);
                var->Formula(vstr3);
                ex icderiv = hist.diff(IndVar);
                ostringstream os_vardefic_deriv;
                os_vardefic_deriv << icderiv.subs(IndVar==-(k+1)*lag/N);
                var->DefaultInitialCondition(os_vardefic_deriv.str());
                AddStateVariable(var);
                //
                var = new StateVariable(vstr3);
                ostringstream os_varformula;
                os_varformula << N_over_delta << "*";
                os_varformula << "(-3*" << vstr3;
                os_varformula << " - 6*" << N_over_delta << "*";
                os_varformula << "(" << vstr2 << " - " << N_over_delta << "*";
                os_varformula << "(";
                if (k == 0)
                    os_varformula << delayfunc.op(0);
                else
                    os_varformula << prev_vstr1;
                os_varformula << " - " << vstr1 << ")))";
                var->Formula(os_varformula.str());
                ex icderiv2 = icderiv.diff(IndVar);
                ostringstream os_vardefic_deriv2;
                os_vardefic_deriv2 << icderiv2.subs(IndVar==-(k+1)*lag/N);
                var->DefaultInitialCondition(os_vardefic_deriv2.str());
                AddStateVariable(var);
                }                    
            } // end k loop
        symbol s(delayed_var_name);
        f = f.subs(delayfunc == s);
        } // end dlist loop
    }
예제 #11
0
int VectorField::ReadXML(string xmlfilename)
    {
    FILE *xmlfile;
    mxml_node_t *tree;
    mxml_node_t *node;
    bool bad_attr;

    xmlfile = fopen(xmlfilename.c_str(),"r");
    if (xmlfile == NULL)
       {
       // Failed to open the file.
       cerr << "Error: Unable to open " << xmlfilename << "\n";
       exit(-1);
       }
    tree = mxmlLoadFile(NULL,xmlfile,MXML_NO_CALLBACK);
    fclose(xmlfile);
    if (tree == NULL)
        {
        cerr << "Error: Unable to load the vector field from the file " << xmlfilename << ".\n";
        cerr << "There may be an error in the XML definition of the vector field.\n";
        mxmlDelete(tree);
        exit(-1);
        }

    node = mxmlFindElement(tree,tree,"VectorField",NULL,NULL,MXML_DESCEND);
    if (node == NULL)
        {
        cerr << "Error: No VectorField element found in XML defintion.\n";
        mxmlDelete(tree);
        exit(-1);
        }
    else
        {
        bad_attr = false;
        for (int i = 0; i < node->value.element.num_attrs; ++i)
            {
            string attr = node->value.element.attrs[i].name;
            if (attr != "Name" && attr != "IndependentVariable" && attr != "Description")
                {
                cerr << "Error: The VectorField element has an unknown attribute: " << attr << endl;
                bad_attr = true;
                }
            }
        if (bad_attr)
            exit(-1);
        const char *attr;
        attr = mxmlElementGetAttr(node,"Name");
        if (attr == NULL)
            {
            cerr << "Error: The VectorField element has no Name attribute.\n";
            mxmlDelete(tree);
            exit(-1);
            }
        else
            {
            if (!isValidName(attr))
                {
                cerr << "Error: The VectorField Name \"" << attr << "\" is not valid.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            string s(attr);
            Name(s);
            }
        attr = mxmlElementGetAttr(node,"Description");
        if (attr != NULL)
            {
            string s(attr);
            Description(s);
            }
        attr = mxmlElementGetAttr(node,"IndependentVariable");
        if (attr == NULL)
            IndependentVariable = "t";
        else
            {
            if (!isValidName(attr))
                {
                cerr << "Error: The VectorField IndependentVariable \"" << attr << "\" is not valid.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            string s(attr);
            IndependentVariable = s;
            }
        }

    //
    // Get the constants
    //
    for (node = mxmlFindElement(tree,tree,"Constant",NULL,NULL,MXML_DESCEND);
         node != NULL;
         node = mxmlFindElement(node,tree,"Constant",NULL,NULL,MXML_DESCEND))
        {
        bad_attr = false;
        for (int i = 0; i < node->value.element.num_attrs; ++i)
            {
            string attr = node->value.element.attrs[i].name;
            if (attr != "Name" && attr != "Value" && attr != "Description" && attr != "Latex")
                {
                cerr << "Error: A Constant element has an unknown attribute: " << attr << endl;
                bad_attr = true;
                }
            }
        if (bad_attr)
            {
            cerr << "Valid Constant attributes are: Name, Value, Description, Latex.\n";
            exit(-1);
            } 
        const char *attr;
        attr = mxmlElementGetAttr(node,"Name");
        if (attr == NULL)
            {
            cerr << "Error: A Constant element has no Name attribute.\n";
            mxmlDelete(tree);
            exit(-1);
            }
        else
            {
            if (!isValidName(attr))
                {
                cerr << "Error: The Constant Name \"" << attr << "\" is not valid.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            string name(attr);
            Constant *c = new Constant(name);
            AddConstant(c);
            attr = mxmlElementGetAttr(node,"Description");
            if (attr != NULL)
                {
                string descr(attr);
                c->Description(descr);
                }
            attr = mxmlElementGetAttr(node,"Value");
            if (attr == NULL)
                {
                cerr << "Error: The Constant element with Name=\"" << c->Name() << "\" has no Value attribute.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            else
                {
                string val(attr);
                c->Value(val);
                }
            attr = mxmlElementGetAttr(node,"Latex");
            if (attr != NULL)
                {
                string latex(attr);
                c->Latex(latex);
                }
            }
        }

    //
    // Get the parameters
    //
    for (node = mxmlFindElement(tree,tree,"Parameter",NULL,NULL,MXML_DESCEND);
         node != NULL;
         node = mxmlFindElement(node,tree,"Parameter",NULL,NULL,MXML_DESCEND))
        {
        bad_attr = false;
        for (int i = 0; i < node->value.element.num_attrs; ++i)
            {
            string attr = node->value.element.attrs[i].name;
            if (attr != "Name" && attr != "DefaultValue" && attr != "Description" && attr != "Latex")
                {
                cerr << "Error: A Parameter element has an unknown attribute: " << attr << endl;
                bad_attr = true;
                }
            }
        if (bad_attr)
            {
            cerr << "Valid Parameter attributes are: Name, DefaultValue, Description, Latex.\n";
            exit(-1);
            }
        const char *attr;
        attr = mxmlElementGetAttr(node,"Name");
        if (attr == NULL)
            {
            cerr << "Error: A Parameter element has no Name attribute.\n";
            mxmlDelete(tree);
            exit(-1);
            }
        else
            {
            if (!isValidName(attr))
                {
                cerr << "Error: The Parameter Name \"" << attr << "\" is not valid.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            string name(attr);
            Parameter *p = new Parameter(name);
            AddParameter(p);
            attr = mxmlElementGetAttr(node,"Description");
            if (attr != NULL)
                {
                string descr(attr);
                p->Description(descr);
                }
            attr = mxmlElementGetAttr(node,"DefaultValue");
            if (attr != NULL)
                {
                string defval(attr);
                p->DefaultValue(defval);
                }
            attr = mxmlElementGetAttr(node,"Latex");
            if (attr != NULL)
                {
                string latex(attr);
                p->Latex(latex);
                }
            }
        }

    //
    // Get the auxiliary expressions
    //
    for (node = mxmlFindElement(tree,tree,"Expression",NULL,NULL,MXML_DESCEND);
         node != NULL;
         node = mxmlFindElement(node,tree,"Expression",NULL,NULL,MXML_DESCEND))
        {
        bad_attr = false;
        for (int i = 0; i < node->value.element.num_attrs; ++i)
            {
            string attr = node->value.element.attrs[i].name;
            if (attr != "Name" && attr != "Formula" && attr != "Description" && attr != "Latex")
                {
                cerr << "Error: An Expression element has an unknown attribute: " << attr << endl;
                bad_attr = true;
                }
            }
        if (bad_attr)
            {
            cerr << "Valid Expression attributes are: Name, Formula, Description, Latex.\n";
            exit(-1);
            }
        const char *attr;
        attr = mxmlElementGetAttr(node,"Name");
        if (attr == NULL)
            {
            cerr << "Error: An Expression element has no Name attribute.\n";
            mxmlDelete(tree);
            exit(-1);
            }
        else
            {
            if (!isValidName(attr))
                {
                cerr << "Error: The Expression Name \"" << attr << "\" is not valid.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            string name(attr);
            Expression *e = new Expression(name);
            AddExpression(e);
            attr = mxmlElementGetAttr(node,"Description");
            if (attr != NULL)
                {
                string descr(attr);
                e->Description(descr);
                }
            attr = mxmlElementGetAttr(node,"Formula");
            if (attr == NULL)
                {
                cerr << "Error: The Expression with Name=\"" << e->Name() << "\" has no Formula attribute.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            else
                {
                string f(attr);
                e->Formula(f);
                }
            attr = mxmlElementGetAttr(node,"Latex");
            if (attr != NULL)
                {
                string latex(attr);
                e->Latex(latex);
                }
            }
        }

    //
    // Get the state variables
    //
    for (node = mxmlFindElement(tree,tree,"StateVariable",NULL,NULL,MXML_DESCEND);
         node != NULL;
         node = mxmlFindElement(node,tree,"StateVariable",NULL,NULL,MXML_DESCEND))
        {
        bad_attr = false;
        for (int i = 0; i < node->value.element.num_attrs; ++i)
            {
            string attr = node->value.element.attrs[i].name;
            if (attr != "Name" && attr != "DefaultInitialCondition" && attr != "Description"
                  && attr != "Formula" && attr != "PeriodFrom" && attr != "PeriodTo"
                  && attr != "DefaultHistory" && attr != "Latex")
                {
                cerr << "Error: A StateVariable element has an unknown attribute: " << attr << endl;
                bad_attr = true;
                }
            }
        if (bad_attr)
            {
            cerr << "Valid StateVariable attributes are: Name, Formula, Description, DefaultInitialCondition, DefaultHistory, PeriodFrom, PeriodTo, Latex.\n";
            exit(-1);
            }
        const char *attr;
        attr = mxmlElementGetAttr(node,"Name");
        if (attr == NULL)
            {
            cerr << "Error: A StateVariable element has no Name attribute.\n";
            mxmlDelete(tree);
            exit(-1);
            }
        else
            {
            if (!isValidName(attr))
                {
                cerr << "Error: The StateVariable Name \"" << attr << "\" is not valid.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            string name(attr);
            StateVariable *sv = new StateVariable(name);
            AddStateVariable(sv);
            attr = mxmlElementGetAttr(node,"Description");
            if (attr != NULL)
                {
                string descr(attr);
                sv->Description(descr);
                }
            attr = mxmlElementGetAttr(node,"Formula");
            if (attr == NULL)
                {
                cerr << "Error: The StateVariable with Name=\"" << sv->Name() << "\" has no Formula attribute.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            else
                {
                string f(attr);
                sv->Formula(f);
                }
            attr = mxmlElementGetAttr(node,"PeriodFrom");
            if (attr != NULL)
                {
                string pfrom(attr);
                sv->PeriodicFrom(pfrom);
                }
            attr = mxmlElementGetAttr(node,"PeriodTo");
            if (attr != NULL)
                {
                string pto(attr);
                sv->PeriodicTo(pto);
                }
            if (sv->PeriodicFrom() != "" & sv->PeriodicTo() == "")
                {
                cerr << "Error: The StateVariable with Name=\"" << sv->Name() << "\" has a PeriodicFrom attribute but no PeriodicTo attribute.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            if (sv->PeriodicFrom() == "" & sv->PeriodicTo() != "")
                {
                cerr << "Error: The StateVariable with Name=\"" << sv->Name() << "\" has a PeriodTo attribute but no PeriodicFrom attribute.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            attr = mxmlElementGetAttr(node,"DefaultInitialCondition");
            if (attr != NULL)
                {
                string ic(attr);
                sv->DefaultInitialCondition(ic);
                }
            attr = mxmlElementGetAttr(node,"DefaultHistory");
            if (attr != NULL)
                {
                string hist(attr);
                sv->DefaultHistory(hist);
                }
            attr = mxmlElementGetAttr(node,"Latex");
            if (attr != NULL)
                {
                string latex(attr);
                sv->Latex(latex);
                }
            }
        }

    //
    // Get the functions
    //
    for (node = mxmlFindElement(tree,tree,"Function",NULL,NULL,MXML_DESCEND);
         node != NULL;
         node = mxmlFindElement(node,tree,"Function",NULL,NULL,MXML_DESCEND))
        {
        bad_attr = false;
        for (int i = 0; i < node->value.element.num_attrs; ++i)
            {
            string attr = node->value.element.attrs[i].name;
            if (attr != "Name" && attr != "Formula" && attr != "Description")
                {
                cerr << "Error: A Function element has an unknown attribute: " << attr << endl;
                bad_attr = true;
                }
            }
        if (bad_attr)
            {
            cerr << "Valid Function attributes are: Name, Formula, Description.\n";
            exit(-1);
            }
        const char *attr;
        attr = mxmlElementGetAttr(node,"Name");
        if (attr == NULL)
            {
            cerr << "Error: A Function element has no Name attribute.\n";
            mxmlDelete(tree);
            exit(-1);
            }
        else
            {
            if (!isValidName(attr))
                {
                cerr << "Error: The Function Name \"" << attr << "\" is not valid.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            string name(attr);
            Function *func = new Function(name);
            AddFunction(func);
            attr = mxmlElementGetAttr(node,"Description");
            if (attr != NULL)
                {
                string descr(attr);
                func->Description(descr);
                }
            attr = mxmlElementGetAttr(node,"Formula");
            if (attr == NULL)
                {
                cerr << "Error: The Function element with Name=\"" << func->Name() << "\" has no Formula attibute.\n";
                mxmlDelete(tree);
                exit(-1);
                }
            else
                {
                string f(attr);
                func->Formula(f);
                }
            }
        }


    mxmlDelete(tree);
    return 0;
    }
예제 #12
0
void
CommandInterpreter::OutputFormattedHelpText (Stream &strm,
                                             const char *word_text,
                                             const char *separator,
                                             const char *help_text,
                                             uint32_t max_word_len)
{
    StateVariable *var = GetStateVariable ("term-width");
    int max_columns = var->GetIntValue();
    // Sanity check max_columns, to cope with emacs shell mode with TERM=dumb
    // (0 rows; 0 columns;).
    if (max_columns <= 0) max_columns = 80;
    
    int indent_size = max_word_len + strlen (separator) + 2;

    strm.IndentMore (indent_size);

    int len = indent_size + strlen (help_text) + 1;
    char *text  = (char *) malloc (len);
    sprintf (text, "%-*s %s %s",  max_word_len, word_text, separator, help_text);
    if (text[len - 1] == '\n')
        text[--len] = '\0';

    if (len  < max_columns)
    {
        // Output it as a single line.
        strm.Printf ("%s", text);
    }
    else
    {
        // We need to break it up into multiple lines.
        bool first_line = true;
        int text_width;
        int start = 0;
        int end = start;
        int final_end = strlen (text);
        int sub_len;
        
        while (end < final_end)
        {
            if (first_line)
                text_width = max_columns - 1;
            else
                text_width = max_columns - indent_size - 1;

            // Don't start the 'text' on a space, since we're already outputting the indentation.
            if (!first_line)
            {
                while ((start < final_end) && (text[start] == ' '))
                  start++;
            }

            end = start + text_width;
            if (end > final_end)
                end = final_end;
            else
            {
                // If we're not at the end of the text, make sure we break the line on white space.
                while (end > start
                       && text[end] != ' ' && text[end] != '\t' && text[end] != '\n')
                    end--;
            }

            sub_len = end - start;
            if (start != 0)
              strm.EOL();
            if (!first_line)
                strm.Indent();
            else
                first_line = false;
            assert (start <= final_end);
            assert (start + sub_len <= final_end);
            if (sub_len > 0)
                strm.Write (text + start, sub_len);
            start = end + 1;
        }
    }
    strm.EOL();
    strm.IndentLess(indent_size);
    free (text);
}
예제 #13
0
void VectorField::PrintEVF(map<string,string> options)
{
    //                                                            
    // This function adds variables to the vector field.
    // The vector field for the new variables is given by the
    // variational equations.
    // The code should probably check for a partial derivative being
    // zero and not bother generating the corresponding output.  Or it
    // could create a ginac ex to hold the expression until all derivatives
    // have been added to it, then create the string in the new state variable.
    // Ginac would automatically drop the zero terms.  I'll get around to
    // this some time...
    //
    // Note that this function MODIFIES THE OBJECT!!!
    // It then calls PrintXML to output the extended vector field to the
    // standard output in XML format.
    //
    int kpar = -1;
    symbol p;
    
    if (options.find("par") != options.end()) {
        // cerr << "The option par=" << options["par"] << " has been given.\n";
        kpar = findpar(options["par"],Parameters);
        if (kpar == -1) {
            cerr << "Error: Unknown parameter \"" << options["par"] << "\"\n";
            cerr << "The parameters are: ";
            for (unsigned j = 0; j < parname_list.nops(); ++j) {
                if (j != 0) {
                    cerr << ", ";
                }
                cerr << parname_list[j];
            }
            cerr << endl;
            exit(-1);
        }
    }
    if (kpar != -1) {
        // cerr << "parname_list[" << kpar << "] = " << parname_list[kpar] << endl;
        p = ex_to<symbol>(parname_list[kpar]);
    }
    ostringstream oss;
    int nv = varname_list.nops();

    for (int i = 0; i < nv; ++i) {
        oss.str("");
        ex f = iterated_subs(varvecfield_list[i],expreqn_list);
        int num_terms_output = 0;
        for (int j = 0; j < nv; ++j) {
            symbol v = ex_to<symbol>(varname_list[j]);
            ex df = f.diff(v);
            if (df != 0) {
                if (num_terms_output > 0) {
                    oss << " + ";
                }
                if (df == 1) {
                    oss << "d" << varname_list[j];
                }
                else {
                    oss << "(" << df << ")*d" << varname_list[j];
                }
                num_terms_output = num_terms_output + 1;
            }
        }
        if (kpar != -1) {
            ex dfdp = f.diff(p);
            if (dfdp != 0) {
                if (num_terms_output > 0) {
                    oss << " + ";
                }
                oss << "(" << dfdp << ")";
                num_terms_output = num_terms_output + 1;
            }
        }
        if (num_terms_output == 0) {
            oss << "0";
        }
        StateVariable *var = new StateVariable("d"+StateVariables[i]->Name());
        var->Formula(oss.str());
        AddStateVariable(var);
    }
    Name(Name()+"_evf");
    PrintXML("evf");
}
void NineMLLayout::load(QDomDocument *doc)
{
    QDomNode n = doc->documentElement().firstChild();
    while( !n.isNull() )
    {
        QDomElement e = n.toElement();
        if( e.tagName() == "LayoutClass" )
        {
            this->name = e.attribute("name","");
            // default to unsorted in no type found
            //this->type = e.attribute("type", "unsorted");
            QDomNode n2 = e.firstChild();
            while( !n2.isNull() )
            {
                QDomElement e2 = n2.toElement();
                if( e2.tagName() == "Parameter" )
                {
                    Parameter *tempPar = new Parameter;
                    tempPar->readIn(e2);
                    this->ParameterList.push_back(tempPar);
                }
                if( e2.tagName() == "Spatial" )
                {
                    QDomNode n3 = e2.firstChild();
                    while( !n3.isNull() )
                    {
                        QDomElement e3 = n3.toElement();
                        if( e3.tagName() == "Regime" )
                        {
                            RegimeSpace *tempRegime  = new RegimeSpace;
                            tempRegime->readIn(e3);
                            this->RegimeList.push_back(tempRegime);
                        }
                        if( e3.tagName() == "StateVariable" )
                        {
                            StateVariable *tempSV  = new StateVariable;
                            tempSV->readIn(e3);
                            this->StateVariableList.push_back(tempSV);
                        }
                        if( e3.tagName() == "Alias" )
                        {
                            Alias *tempAlias  = new Alias;
                            tempAlias->readIn(e3);
                            this->AliasList.push_back(tempAlias);
                        }

                        n3 = n3.nextSibling();
                    }
                }
                n2 = n2.nextSibling();
            }

        }
        n = n.nextSibling();
    }

    // validate this
    QStringList validated = validateComponent();
    if (validated.size() > 1) {
        QMessageBox msgBox;
        QString message;
        for (uint i = 0; i < (uint) validated.size(); ++i) {
            message += validated[i] + "\n";
        }
        msgBox.setText(message);
        msgBox.exec();
    }
}