1
0
Fork 0

Sync with latest JSBSim.

This commit is contained in:
curt 2001-12-01 04:03:57 +00:00
parent a69e2cc976
commit bc391fb54e
6 changed files with 241 additions and 228 deletions

View file

@ -133,28 +133,28 @@ bool FGAircraft::Load(FGConfigFile* AC_cfg)
{ {
string token; string token;
ReadPrologue(AC_cfg); if (!ReadPrologue(AC_cfg)) return false;
while ((AC_cfg->GetNextConfigLine() != string("EOF")) && while ((AC_cfg->GetNextConfigLine() != string("EOF")) &&
(token = AC_cfg->GetValue()) != string("/FDM_CONFIG")) { (token = AC_cfg->GetValue()) != string("/FDM_CONFIG")) {
if (token == "METRICS") { if (token == "METRICS") {
if (debug_lvl > 0) cout << fgcyan << "\n Reading Metrics" << fgdef << endl; if (debug_lvl > 0) cout << fgcyan << "\n Reading Metrics" << fgdef << endl;
ReadMetrics(AC_cfg); if (!ReadMetrics(AC_cfg)) return false;
} else if (token == "AERODYNAMICS") { } else if (token == "AERODYNAMICS") {
if (debug_lvl > 0) cout << fgcyan << "\n Reading Aerodynamics" << fgdef << endl; if (debug_lvl > 0) cout << fgcyan << "\n Reading Aerodynamics" << fgdef << endl;
ReadAerodynamics(AC_cfg); if (!ReadAerodynamics(AC_cfg)) return false;
} else if (token == "UNDERCARRIAGE") { } else if (token == "UNDERCARRIAGE") {
if (debug_lvl > 0) cout << fgcyan << "\n Reading Landing Gear" << fgdef << endl; if (debug_lvl > 0) cout << fgcyan << "\n Reading Landing Gear" << fgdef << endl;
ReadUndercarriage(AC_cfg); if (!ReadUndercarriage(AC_cfg)) return false;
} else if (token == "PROPULSION") { } else if (token == "PROPULSION") {
if (debug_lvl > 0) cout << fgcyan << "\n Reading Propulsion" << fgdef << endl; if (debug_lvl > 0) cout << fgcyan << "\n Reading Propulsion" << fgdef << endl;
ReadPropulsion(AC_cfg); if (!ReadPropulsion(AC_cfg)) return false;
} else if (token == "FLIGHT_CONTROL") { } else if (token == "FLIGHT_CONTROL") {
if (debug_lvl > 0) cout << fgcyan << "\n Reading Flight Control" << fgdef << endl; if (debug_lvl > 0) cout << fgcyan << "\n Reading Flight Control" << fgdef << endl;
ReadFlightControls(AC_cfg); if (!ReadFlightControls(AC_cfg)) return false;
} else if (token == "OUTPUT") { } else if (token == "OUTPUT") {
if (debug_lvl > 0) cout << fgcyan << "\n Reading Output directives" << fgdef << endl; if (debug_lvl > 0) cout << fgcyan << "\n Reading Output directives" << fgdef << endl;
ReadOutput(AC_cfg); if (!ReadOutput(AC_cfg)) return false;
} }
} }
@ -207,7 +207,7 @@ float FGAircraft::GetNlf(void)
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void FGAircraft::ReadPrologue(FGConfigFile* AC_cfg) bool FGAircraft::ReadPrologue(FGConfigFile* AC_cfg)
{ {
string token = AC_cfg->GetValue(); string token = AC_cfg->GetValue();
string scratch; string scratch;
@ -226,12 +226,14 @@ void FGAircraft::ReadPrologue(FGConfigFile* AC_cfg)
" RESULTS WILL BE UNPREDICTABLE !!" << endl; " RESULTS WILL BE UNPREDICTABLE !!" << endl;
cerr << "Current version needed is: " << needed_cfg_version << endl; cerr << "Current version needed is: " << needed_cfg_version << endl;
cerr << " You have version: " << CFGVersion << endl << fgdef << endl; cerr << " You have version: " << CFGVersion << endl << fgdef << endl;
return false;
} }
return true;
} }
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void FGAircraft::ReadMetrics(FGConfigFile* AC_cfg) bool FGAircraft::ReadMetrics(FGConfigFile* AC_cfg)
{ {
string token = ""; string token = "";
string parameter; string parameter;
@ -317,52 +319,62 @@ void FGAircraft::ReadMetrics(FGConfigFile* AC_cfg)
vbarv = VTailArm*VTailArea / (cbar*WingArea); vbarv = VTailArm*VTailArea / (cbar*WingArea);
} }
} }
return true;
} }
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void FGAircraft::ReadPropulsion(FGConfigFile* AC_cfg) bool FGAircraft::ReadPropulsion(FGConfigFile* AC_cfg)
{ {
if (!Propulsion->Load(AC_cfg)) { if (!Propulsion->Load(AC_cfg)) {
cerr << "Propulsion not successfully loaded" << endl; cerr << " Propulsion not successfully loaded" << endl;
return false;
} }
return true;
} }
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void FGAircraft::ReadFlightControls(FGConfigFile* AC_cfg) bool FGAircraft::ReadFlightControls(FGConfigFile* AC_cfg)
{ {
if (!FCS->Load(AC_cfg)) { if (!FCS->Load(AC_cfg)) {
cerr << "Flight Controls not successfully loaded" << endl; cerr << " Flight Controls not successfully loaded" << endl;
return false;
} }
return true;
} }
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void FGAircraft::ReadAerodynamics(FGConfigFile* AC_cfg) bool FGAircraft::ReadAerodynamics(FGConfigFile* AC_cfg)
{ {
if (!Aerodynamics->Load(AC_cfg)) { if (!Aerodynamics->Load(AC_cfg)) {
cerr << "Aerodynamics not successfully loaded" << endl; cerr << " Aerodynamics not successfully loaded" << endl;
return false;
} }
return true;
} }
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void FGAircraft::ReadUndercarriage(FGConfigFile* AC_cfg) bool FGAircraft::ReadUndercarriage(FGConfigFile* AC_cfg)
{ {
if (!GroundReactions->Load(AC_cfg)) { if (!GroundReactions->Load(AC_cfg)) {
cerr << "Ground Reactions not successfully loaded" << endl; cerr << " Ground Reactions not successfully loaded" << endl;
return false;
} }
return true;
} }
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void FGAircraft::ReadOutput(FGConfigFile* AC_cfg) bool FGAircraft::ReadOutput(FGConfigFile* AC_cfg)
{ {
if (!Output->Load(AC_cfg)) { if (!Output->Load(AC_cfg)) {
cerr << "Output not successfully loaded" << endl; cerr << " Output not successfully loaded" << endl;
return false;
} }
return true;
} }
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

View file

@ -225,13 +225,13 @@ private:
string CFGVersion; string CFGVersion;
string AircraftName; string AircraftName;
void ReadMetrics(FGConfigFile*); bool ReadMetrics(FGConfigFile*);
void ReadPropulsion(FGConfigFile*); bool ReadPropulsion(FGConfigFile*);
void ReadFlightControls(FGConfigFile*); bool ReadFlightControls(FGConfigFile*);
void ReadAerodynamics(FGConfigFile*); bool ReadAerodynamics(FGConfigFile*);
void ReadUndercarriage(FGConfigFile*); bool ReadUndercarriage(FGConfigFile*);
void ReadPrologue(FGConfigFile*); bool ReadPrologue(FGConfigFile*);
void ReadOutput(FGConfigFile*); bool ReadOutput(FGConfigFile*);
void Debug(void); void Debug(void);
}; };

View file

@ -395,13 +395,13 @@ bool FGFDMExec::LoadModel(string APath, string EPath, string model)
if (result) { if (result) {
modelLoaded = true; modelLoaded = true;
if (debug_lvl > 0) cout << "\n\nJSBSim startup complete\n\n";
} else { } else {
cerr << fgred cerr << fgred
<< "FGFDMExec: Failed to load aircraft and/or engine model" << " FGFDMExec: Failed to load aircraft and/or engine model"
<< fgdef << endl; << fgdef << endl;
} }
if (debug_lvl > 0) cout << "\n\nJSBSim startup complete\n\n";
return result; return result;
} }

View file

@ -64,7 +64,7 @@ const double FGJSBBase::ktstofps = 1.68781;
const double FGJSBBase::inchtoft = 0.08333333; const double FGJSBBase::inchtoft = 0.08333333;
const double FGJSBBase::Reng = 1716.0; const double FGJSBBase::Reng = 1716.0;
const double FGJSBBase::SHRatio = 1.40; const double FGJSBBase::SHRatio = 1.40;
const string FGJSBBase::needed_cfg_version = "1.55"; const string FGJSBBase::needed_cfg_version = "1.56";
const string FGJSBBase::JSBSim_version = "0.9.1"; const string FGJSBBase::JSBSim_version = "0.9.1";
queue <FGJSBBase::Message*> FGJSBBase::Messages; queue <FGJSBBase::Message*> FGJSBBase::Messages;

View file

@ -226,7 +226,9 @@ bool FGPropulsion::Load(FGConfigFile* AC_cfg)
} else if (engType == "FG_TURBOPROP") { } else if (engType == "FG_TURBOPROP") {
Engines.push_back(new FGTurboProp(FDMExec, &Eng_cfg)); Engines.push_back(new FGTurboProp(FDMExec, &Eng_cfg));
} else { } else {
cerr << " Unrecognized engine type: " << engType << " found in config file.\n"; cerr << fgred << " Unrecognized engine type: " << underon << engType
<< underoff << " found in config file." << fgdef << endl;
return false;
} }
AC_cfg->GetNextConfigLine(); AC_cfg->GetNextConfigLine();
@ -259,8 +261,8 @@ bool FGPropulsion::Load(FGConfigFile* AC_cfg)
} else { } else {
cerr << "Could not read engine config file: " << fullpath cerr << fgred << "\n Could not read engine config file: " << underon <<
+ engineFileName + ".xml" << endl; fullpath + engineFileName + ".xml" << underoff << fgdef << endl;
return false; return false;
} }
@ -346,19 +348,20 @@ string FGPropulsion::GetPropulsionStrings(void)
{ {
string PropulsionStrings = ""; string PropulsionStrings = "";
bool firstime = true; bool firstime = true;
char buffer[5];
for (unsigned int i=0;i<Engines.size();i++) { for (unsigned int i=0;i<Engines.size();i++) {
if (!firstime) { if (firstime) firstime = false;
PropulsionStrings += ", "; else PropulsionStrings += ", ";
firstime = false;
} sprintf(buffer, "%d", i);
switch(Engines[i]->GetType()) { switch(Engines[i]->GetType()) {
case FGEngine::etPiston: case FGEngine::etPiston:
PropulsionStrings += (Engines[i]->GetName() + "_PwrAvail"); PropulsionStrings += (Engines[i]->GetName() + "_PwrAvail[" + buffer + "]");
break; break;
case FGEngine::etRocket: case FGEngine::etRocket:
PropulsionStrings += (Engines[i]->GetName() + "_ChamberPress"); PropulsionStrings += (Engines[i]->GetName() + "_ChamberPress[" + buffer + "]");
break; break;
case FGEngine::etTurboJet: case FGEngine::etTurboJet:
case FGEngine::etTurboProp: case FGEngine::etTurboProp:
@ -373,14 +376,14 @@ string FGPropulsion::GetPropulsionStrings(void)
switch(Thrusters[i]->GetType()) { switch(Thrusters[i]->GetType()) {
case FGThruster::ttNozzle: case FGThruster::ttNozzle:
PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust"); PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust[" + buffer + "]");
break; break;
case FGThruster::ttRotor: case FGThruster::ttRotor:
break; break;
case FGThruster::ttPropeller: case FGThruster::ttPropeller:
PropulsionStrings += (Thrusters[i]->GetName() + "_Torque, "); PropulsionStrings += (Thrusters[i]->GetName() + "_Torque[" + buffer + "], ");
PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust, "); PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust[" + buffer + "], ");
PropulsionStrings += (Thrusters[i]->GetName() + "_RPM"); PropulsionStrings += (Thrusters[i]->GetName() + "_RPM[" + buffer + "]");
break; break;
default: default:
PropulsionStrings += "INVALID THRUSTER TYPE"; PropulsionStrings += "INVALID THRUSTER TYPE";
@ -400,10 +403,8 @@ string FGPropulsion::GetPropulsionValues(void)
bool firstime = true; bool firstime = true;
for (unsigned int i=0;i<Engines.size();i++) { for (unsigned int i=0;i<Engines.size();i++) {
if (!firstime) { if (firstime) firstime = false;
PropulsionValues += ", "; else PropulsionValues += ", ";
firstime = false;
}
switch(Engines[i]->GetType()) { switch(Engines[i]->GetType()) {
case FGEngine::etPiston: case FGEngine::etPiston:

View file

@ -1,182 +1,182 @@
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Module: JSBSim.cpp Module: JSBSim.cpp
Author: Jon S. Berndt Author: Jon S. Berndt
Date started: 08/17/99 Date started: 08/17/99
Purpose: Standalone version of JSBSim. Purpose: Standalone version of JSBSim.
Called by: The USER. Called by: The USER.
------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) ------------- ------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) -------------
This program is free software; you can redistribute it and/or modify it under This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later Foundation; either version 2 of the License, or (at your option) any later
version. version.
This program is distributed in the hope that it will be useful, but WITHOUT This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details. details.
You should have received a copy of the GNU General Public License along with You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc., 59 Temple this program; if not, write to the Free Software Foundation, Inc., 59 Temple
Place - Suite 330, Boston, MA 02111-1307, USA. Place - Suite 330, Boston, MA 02111-1307, USA.
Further information about the GNU General Public License can also be found on Further information about the GNU General Public License can also be found on
the world wide web at http://www.gnu.org. the world wide web at http://www.gnu.org.
FUNCTIONAL DESCRIPTION FUNCTIONAL DESCRIPTION
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
This class Handles calling JSBSim standalone. It is set up for compilation under This class Handles calling JSBSim standalone. It is set up for compilation under
Borland C+Builder or other compiler. Borland C+Builder or other compiler.
HISTORY HISTORY
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
08/17/99 JSB Created 08/17/99 JSB Created
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
INCLUDES INCLUDES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
#include "FGFDMExec.h" #include "FGFDMExec.h"
#include "FGRotation.h" #include "FGRotation.h"
#include "FGAtmosphere.h" #include "FGAtmosphere.h"
#include "FGState.h" #include "FGState.h"
#include "FGFCS.h" #include "FGFCS.h"
#include "FGAircraft.h" #include "FGAircraft.h"
#include "FGTranslation.h" #include "FGTranslation.h"
#include "FGPosition.h" #include "FGPosition.h"
#include "FGAuxiliary.h" #include "FGAuxiliary.h"
#include "FGOutput.h" #include "FGOutput.h"
#include "FGConfigFile.h" #include "FGConfigFile.h"
#ifdef FGFS #ifdef FGFS
#include <simgear/compiler.h> #include <simgear/compiler.h>
#include STL_IOSTREAM #include STL_IOSTREAM
# ifdef SG_HAVE_STD_INCLUDES # ifdef SG_HAVE_STD_INCLUDES
# include <ctime> # include <ctime>
# else # else
# include <time.h> # include <time.h>
# endif # endif
#else #else
# if defined(sgi) && !defined(__GNUC__) # if defined(sgi) && !defined(__GNUC__)
# include <iostream.h> # include <iostream.h>
# include <time.h> # include <time.h>
# else # else
# include <iostream> # include <iostream>
# include <ctime> # include <ctime>
# endif # endif
#endif #endif
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DEFINITIONS DEFINITIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
GLOBAL DATA GLOBAL DATA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
static const char *IdSrc = "$Id$"; static const char *IdSrc = "$Id$";
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs] COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DOCUMENTATION DOCUMENTATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/** Standalone JSBSim main program /** Standalone JSBSim main program
This is the wrapper program used to instantiate the JSBSim system and control This is the wrapper program used to instantiate the JSBSim system and control
it. Use this program to build a version of JSBSim that can be run from the it. Use this program to build a version of JSBSim that can be run from the
command line. To get any use out of this, you will have to create a script command line. To get any use out of this, you will have to create a script
to run a test case and specify what kind of output you would like. to run a test case and specify what kind of output you would like.
@author Jon S. Berndt @author Jon S. Berndt
@version $Id$ @version $Id$
@see - @see -
*/ */
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
IMPLEMENTATION IMPLEMENTATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
FGFDMExec* FDMExec; FGFDMExec* FDMExec;
float cmd = 0.0; float cmd = 0.0;
bool result = false; bool result = false;
bool scripted = false; bool scripted = false;
if (argc == 2) { if (argc == 2) {
FGConfigFile testFile(argv[1]); FGConfigFile testFile(argv[1]);
if (!testFile.IsOpen()) { if (!testFile.IsOpen()) {
cout << "Script file not opened" << endl; cout << "Script file not opened" << endl;
exit(-1); exit(-1);
} }
testFile.GetNextConfigLine(); testFile.GetNextConfigLine();
if (testFile.GetValue("runscript").length() <= 0) { if (testFile.GetValue("runscript").length() <= 0) {
cout << "File: " << argv[1] << " is not a script file" << endl; cout << "File: " << argv[1] << " is not a script file" << endl;
exit(-1); exit(-1);
} }
scripted = true; scripted = true;
} else if (argc != 3) { } else if (argc != 3) {
cout << endl cout << endl
<< " You must enter the name of a registered aircraft and reset point:" << " You must enter the name of a registered aircraft and reset point:"
<< endl << endl << " FDM <aircraft name> <reset file>" << endl; << endl << endl << " FDM <aircraft name> <reset file>" << endl;
cout << endl << " Alternatively, you may specify only the name of a script file:" cout << endl << " Alternatively, you may specify only the name of a script file:"
<< endl << endl << " FDM <script file>" << endl << endl; << endl << endl << " FDM <script file>" << endl << endl;
exit(0); exit(0);
} }
FDMExec = new FGFDMExec(); FDMExec = new FGFDMExec();
if (scripted) { // form jsbsim <scriptfile> if (scripted) { // form jsbsim <scriptfile>
result = FDMExec->LoadScript(argv[1]); result = FDMExec->LoadScript(argv[1]);
if (!result) { if (!result) {
cerr << "Script file " << argv[1] << " was not successfully loaded" << endl; cerr << "Script file " << argv[1] << " was not successfully loaded" << endl;
exit(-1); exit(-1);
} }
} else { // form jsbsim <acname> <resetfile> } else { // form jsbsim <acname> <resetfile>
if ( ! FDMExec->LoadModel("aircraft", "engine", string(argv[1]))) { if ( ! FDMExec->LoadModel("aircraft", "engine", string(argv[1]))) {
cerr << "JSBSim could not be started" << endl; cerr << " JSBSim could not be started" << endl << endl;
exit(-1); exit(-1);
} }
FGInitialCondition IC(FDMExec); FGInitialCondition IC(FDMExec);
if ( ! IC.Load("aircraft",string(argv[1]),string(argv[2]))) { if ( ! IC.Load("aircraft",string(argv[1]),string(argv[2]))) {
cerr << "Initialization unsuccessful" << endl; cerr << "Initialization unsuccessful" << endl;
exit(-1); exit(-1);
} }
} }
FGJSBBase::Message* msg; FGJSBBase::Message* msg;
while (FDMExec->Run()) { while (FDMExec->Run()) {
while (FDMExec->ReadMessage()) { while (FDMExec->ReadMessage()) {
msg = FDMExec->ProcessMessage(); msg = FDMExec->ProcessMessage();
switch (msg->type) { switch (msg->type) {
case FGJSBBase::Message::eText: case FGJSBBase::Message::eText:
cout << msg->messageId << ": " << msg->text << endl; cout << msg->messageId << ": " << msg->text << endl;
break; break;
case FGJSBBase::Message::eBool: case FGJSBBase::Message::eBool:
cout << msg->messageId << ": " << msg->text << " " << msg->bVal << endl; cout << msg->messageId << ": " << msg->text << " " << msg->bVal << endl;
break; break;
case FGJSBBase::Message::eInteger: case FGJSBBase::Message::eInteger:
cout << msg->messageId << ": " << msg->text << " " << msg->iVal << endl; cout << msg->messageId << ": " << msg->text << " " << msg->iVal << endl;
break; break;
case FGJSBBase::Message::eDouble: case FGJSBBase::Message::eDouble:
cout << msg->messageId << ": " << msg->text << " " << msg->dVal << endl; cout << msg->messageId << ": " << msg->text << " " << msg->dVal << endl;
break; break;
default: default:
cerr << "Unrecognized message type." << endl; cerr << "Unrecognized message type." << endl;
break; break;
} }
} }
} }
delete FDMExec; delete FDMExec;
return 0; return 0;
} }