# include STL_IOSTREAM
# include STL_ITERATOR
#else
-# if defined(sgi) && !defined(__GNUC__)
+# if defined(sgi) && !defined(__GNUC__) && (_COMPILER_VERSION < 740)
# include <iostream.h>
# else
# include <iostream>
#include "FGScript.h"
#include "FGConfigFile.h"
+namespace JSBSim {
+
static const char *IdSrc = "$Id$";
static const char *IdHdr = ID_FGSCRIPT;
FGScript::FGScript(FGFDMExec* fgex) : FDMExec(fgex)
{
State = FDMExec->GetState();
+ PropertyManager=FDMExec->GetPropertyManager();
Debug(0);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-bool FGScript::LoadScript(string script)
+bool FGScript::LoadScript( string script )
{
FGConfigFile Script(script);
string token="";
string aircraft="";
string initialize="";
+ string prop_name;
bool result = false;
double dt = 0.0;
struct condition *newCondition;
ScriptName = Script.GetValue("name");
Scripted = true;
- if (debug_lvl > 0) cout << "Reading Script File " << ScriptName << endl;
+ if (debug_lvl > 0) cout << "Reading and running from script file " << ScriptName << endl << endl;
while (Script.GetNextConfigLine() != string("EOF") && Script.GetValue() != string("/runscript")) {
token = Script.GetValue();
if (token == "use") {
if ((token = Script.GetValue("aircraft")) != string("")) {
aircraft = token;
+ result = FDMExec->LoadModel(aircraft);
+ if (!result) {
+ cerr << "Aircraft file " << aircraft << " was not found" << endl;
+ exit(-1);
+ }
if (debug_lvl > 0) cout << " Use aircraft: " << token << endl;
} else if ((token = Script.GetValue("initialize")) != string("")) {
initialize = token;
newCondition = new struct condition();
while (token != string("/when")) {
if (token == "parameter") {
- newCondition->TestParam.push_back(State->GetParameterIndex(Script.GetValue("name")));
+ prop_name = Script.GetValue("name");
+ newCondition->TestParam.push_back( PropertyManager->GetNode(prop_name) );
newCondition->TestValue.push_back(strtod(Script.GetValue("value").c_str(), NULL));
newCondition->Comparison.push_back(Script.GetValue("comparison"));
} else if (token == "set") {
- newCondition->SetParam.push_back(State->GetParameterIndex(Script.GetValue("name")));
+ prop_name = Script.GetValue("name");
+ newCondition->SetParam.push_back( PropertyManager->GetNode(prop_name) );
newCondition->SetValue.push_back(strtod(Script.GetValue("value").c_str(), NULL));
newCondition->Triggered.push_back(false);
newCondition->OriginalValue.push_back(0.0);
Debug(4);
- result = FDMExec->LoadModel("aircraft", "engine", aircraft);
- if (!result) {
- cerr << "Aircraft file " << aircraft << " was not found" << endl;
- exit(-1);
- }
- FGInitialCondition IC(FDMExec);
- if ( ! IC.Load("aircraft", aircraft, initialize)) {
+ FGInitialCondition *IC=FDMExec->GetIC();
+ if ( ! IC->Load( initialize )) {
cerr << "Initialization unsuccessful" << endl;
exit(-1);
}
// to true
for (i=0; i<iC->TestValue.size(); i++) {
if (iC->Comparison[i] == "lt")
- truth = State->GetParameter(iC->TestParam[i]) < iC->TestValue[i];
+ truth = iC->TestParam[i]->getDoubleValue() < iC->TestValue[i];
else if (iC->Comparison[i] == "le")
- truth = State->GetParameter(iC->TestParam[i]) <= iC->TestValue[i];
+ truth = iC->TestParam[i]->getDoubleValue() <= iC->TestValue[i];
else if (iC->Comparison[i] == "eq")
- truth = State->GetParameter(iC->TestParam[i]) == iC->TestValue[i];
+ truth = iC->TestParam[i]->getDoubleValue() == iC->TestValue[i];
else if (iC->Comparison[i] == "ge")
- truth = State->GetParameter(iC->TestParam[i]) >= iC->TestValue[i];
+ truth = iC->TestParam[i]->getDoubleValue() >= iC->TestValue[i];
else if (iC->Comparison[i] == "gt")
- truth = State->GetParameter(iC->TestParam[i]) > iC->TestValue[i];
+ truth = iC->TestParam[i]->getDoubleValue() > iC->TestValue[i];
else if (iC->Comparison[i] == "ne")
- truth = State->GetParameter(iC->TestParam[i]) != iC->TestValue[i];
+ truth = iC->TestParam[i]->getDoubleValue() != iC->TestValue[i];
else
cerr << "Bad comparison" << endl;
if (WholeTruth) {
for (i=0; i<iC->SetValue.size(); i++) {
if ( ! iC->Triggered[i]) {
- iC->OriginalValue[i] = State->GetParameter(iC->SetParam[i]);
+ iC->OriginalValue[i] = iC->SetParam[i]->getDoubleValue();
switch (iC->Type[i]) {
case FG_VALUE:
iC->newValue[i] = iC->SetValue[i];
cerr << "Invalid Action specified" << endl;
break;
}
- State->SetParameter(iC->SetParam[i], newSetValue);
+ iC->SetParam[i]->setDoubleValue(newSetValue);
}
}
iC++;
for (i=0; i<iterConditions->TestValue.size(); i++) {
if (i>0) cout << " and" << endl << " ";
- cout << "(" << State->paramdef[iterConditions->TestParam[i]]
- << iterConditions->Comparison[i] << " "
+ cout << "(" << iterConditions->TestParam[i]->GetName()
+ << " " << iterConditions->Comparison[i] << " "
<< iterConditions->TestValue[i] << ")";
}
cout << ") then {";
for (i=0; i<iterConditions->SetValue.size(); i++) {
- cout << endl << " set" << State->paramdef[iterConditions->SetParam[i]]
- << "to " << iterConditions->SetValue[i];
+ cout << endl << " set " << iterConditions->SetParam[i]->GetName()
+ << " to " << iterConditions->SetValue[i];
switch (iterConditions->Type[i]) {
case FG_VALUE:
}
}
}
-
+}