diff --git a/src/FDM/JSBSim/FGAircraft.cpp b/src/FDM/JSBSim/FGAircraft.cpp index 1ea85b39f..214dd8446 100644 --- a/src/FDM/JSBSim/FGAircraft.cpp +++ b/src/FDM/JSBSim/FGAircraft.cpp @@ -133,28 +133,28 @@ bool FGAircraft::Load(FGConfigFile* AC_cfg) { string token; - ReadPrologue(AC_cfg); + if (!ReadPrologue(AC_cfg)) return false; while ((AC_cfg->GetNextConfigLine() != string("EOF")) && (token = AC_cfg->GetValue()) != string("/FDM_CONFIG")) { if (token == "METRICS") { if (debug_lvl > 0) cout << fgcyan << "\n Reading Metrics" << fgdef << endl; - ReadMetrics(AC_cfg); + if (!ReadMetrics(AC_cfg)) return false; } else if (token == "AERODYNAMICS") { if (debug_lvl > 0) cout << fgcyan << "\n Reading Aerodynamics" << fgdef << endl; - ReadAerodynamics(AC_cfg); + if (!ReadAerodynamics(AC_cfg)) return false; } else if (token == "UNDERCARRIAGE") { 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") { 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") { 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") { 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 scratch; @@ -226,12 +226,14 @@ void FGAircraft::ReadPrologue(FGConfigFile* AC_cfg) " RESULTS WILL BE UNPREDICTABLE !!" << endl; cerr << "Current version needed is: " << needed_cfg_version << 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 parameter; @@ -317,52 +319,62 @@ void FGAircraft::ReadMetrics(FGConfigFile* AC_cfg) vbarv = VTailArm*VTailArea / (cbar*WingArea); } } - + return true; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -void FGAircraft::ReadPropulsion(FGConfigFile* AC_cfg) +bool FGAircraft::ReadPropulsion(FGConfigFile* 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)) { - 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)) { - 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)) { - 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)) { - cerr << "Output not successfully loaded" << endl; + cerr << " Output not successfully loaded" << endl; + return false; } + return true; } //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/src/FDM/JSBSim/FGAircraft.h b/src/FDM/JSBSim/FGAircraft.h index e4110fc9b..8dc7beb7c 100644 --- a/src/FDM/JSBSim/FGAircraft.h +++ b/src/FDM/JSBSim/FGAircraft.h @@ -225,13 +225,13 @@ private: string CFGVersion; string AircraftName; - void ReadMetrics(FGConfigFile*); - void ReadPropulsion(FGConfigFile*); - void ReadFlightControls(FGConfigFile*); - void ReadAerodynamics(FGConfigFile*); - void ReadUndercarriage(FGConfigFile*); - void ReadPrologue(FGConfigFile*); - void ReadOutput(FGConfigFile*); + bool ReadMetrics(FGConfigFile*); + bool ReadPropulsion(FGConfigFile*); + bool ReadFlightControls(FGConfigFile*); + bool ReadAerodynamics(FGConfigFile*); + bool ReadUndercarriage(FGConfigFile*); + bool ReadPrologue(FGConfigFile*); + bool ReadOutput(FGConfigFile*); void Debug(void); }; diff --git a/src/FDM/JSBSim/FGFDMExec.cpp b/src/FDM/JSBSim/FGFDMExec.cpp index 1031a17b0..b191a901c 100644 --- a/src/FDM/JSBSim/FGFDMExec.cpp +++ b/src/FDM/JSBSim/FGFDMExec.cpp @@ -395,13 +395,13 @@ bool FGFDMExec::LoadModel(string APath, string EPath, string model) if (result) { modelLoaded = true; + if (debug_lvl > 0) cout << "\n\nJSBSim startup complete\n\n"; } else { cerr << fgred - << "FGFDMExec: Failed to load aircraft and/or engine model" + << " FGFDMExec: Failed to load aircraft and/or engine model" << fgdef << endl; } - if (debug_lvl > 0) cout << "\n\nJSBSim startup complete\n\n"; return result; } diff --git a/src/FDM/JSBSim/FGJSBBase.cpp b/src/FDM/JSBSim/FGJSBBase.cpp index ccc6b88e6..d04fdfd1f 100644 --- a/src/FDM/JSBSim/FGJSBBase.cpp +++ b/src/FDM/JSBSim/FGJSBBase.cpp @@ -64,7 +64,7 @@ const double FGJSBBase::ktstofps = 1.68781; const double FGJSBBase::inchtoft = 0.08333333; const double FGJSBBase::Reng = 1716.0; 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"; queue FGJSBBase::Messages; diff --git a/src/FDM/JSBSim/FGPropulsion.cpp b/src/FDM/JSBSim/FGPropulsion.cpp index 98d5ab3c5..0dcaf9010 100644 --- a/src/FDM/JSBSim/FGPropulsion.cpp +++ b/src/FDM/JSBSim/FGPropulsion.cpp @@ -226,7 +226,9 @@ bool FGPropulsion::Load(FGConfigFile* AC_cfg) } else if (engType == "FG_TURBOPROP") { Engines.push_back(new FGTurboProp(FDMExec, &Eng_cfg)); } 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(); @@ -259,8 +261,8 @@ bool FGPropulsion::Load(FGConfigFile* AC_cfg) } else { - cerr << "Could not read engine config file: " << fullpath - + engineFileName + ".xml" << endl; + cerr << fgred << "\n Could not read engine config file: " << underon << + fullpath + engineFileName + ".xml" << underoff << fgdef << endl; return false; } @@ -346,19 +348,20 @@ string FGPropulsion::GetPropulsionStrings(void) { string PropulsionStrings = ""; bool firstime = true; + char buffer[5]; for (unsigned int i=0;iGetType()) { case FGEngine::etPiston: - PropulsionStrings += (Engines[i]->GetName() + "_PwrAvail"); + PropulsionStrings += (Engines[i]->GetName() + "_PwrAvail[" + buffer + "]"); break; case FGEngine::etRocket: - PropulsionStrings += (Engines[i]->GetName() + "_ChamberPress"); + PropulsionStrings += (Engines[i]->GetName() + "_ChamberPress[" + buffer + "]"); break; case FGEngine::etTurboJet: case FGEngine::etTurboProp: @@ -373,14 +376,14 @@ string FGPropulsion::GetPropulsionStrings(void) switch(Thrusters[i]->GetType()) { case FGThruster::ttNozzle: - PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust"); + PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust[" + buffer + "]"); break; case FGThruster::ttRotor: break; case FGThruster::ttPropeller: - PropulsionStrings += (Thrusters[i]->GetName() + "_Torque, "); - PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust, "); - PropulsionStrings += (Thrusters[i]->GetName() + "_RPM"); + PropulsionStrings += (Thrusters[i]->GetName() + "_Torque[" + buffer + "], "); + PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust[" + buffer + "], "); + PropulsionStrings += (Thrusters[i]->GetName() + "_RPM[" + buffer + "]"); break; default: PropulsionStrings += "INVALID THRUSTER TYPE"; @@ -400,10 +403,8 @@ string FGPropulsion::GetPropulsionValues(void) bool firstime = true; for (unsigned int i=0;iGetType()) { case FGEngine::etPiston: diff --git a/src/FDM/JSBSim/JSBSim.cpp b/src/FDM/JSBSim/JSBSim.cpp index e5b3b4e12..a5ffaab04 100644 --- a/src/FDM/JSBSim/JSBSim.cpp +++ b/src/FDM/JSBSim/JSBSim.cpp @@ -1,182 +1,182 @@ -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - Module: JSBSim.cpp - Author: Jon S. Berndt - Date started: 08/17/99 - Purpose: Standalone version of JSBSim. - Called by: The USER. - - ------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) ------------- - - 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 - Foundation; either version 2 of the License, or (at your option) any later - version. - - 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 - FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - details. - - 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 - Place - Suite 330, Boston, MA 02111-1307, USA. - - Further information about the GNU General Public License can also be found on - the world wide web at http://www.gnu.org. - -FUNCTIONAL DESCRIPTION --------------------------------------------------------------------------------- - -This class Handles calling JSBSim standalone. It is set up for compilation under -Borland C+Builder or other compiler. - -HISTORY --------------------------------------------------------------------------------- -08/17/99 JSB Created - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -INCLUDES -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -#include "FGFDMExec.h" -#include "FGRotation.h" -#include "FGAtmosphere.h" -#include "FGState.h" -#include "FGFCS.h" -#include "FGAircraft.h" -#include "FGTranslation.h" -#include "FGPosition.h" -#include "FGAuxiliary.h" -#include "FGOutput.h" -#include "FGConfigFile.h" - -#ifdef FGFS -#include -#include STL_IOSTREAM -# ifdef SG_HAVE_STD_INCLUDES -# include -# else -# include -# endif -#else -# if defined(sgi) && !defined(__GNUC__) -# include -# include -# else -# include -# include -# endif -#endif - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -DEFINITIONS -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -GLOBAL DATA -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -static const char *IdSrc = "$Id$"; - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs] -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -DOCUMENTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -/** Standalone JSBSim main program - 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 - 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. - @author Jon S. Berndt - @version $Id$ - @see - -*/ - -/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -IMPLEMENTATION -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ - -int main(int argc, char** argv) -{ - FGFDMExec* FDMExec; - float cmd = 0.0; - bool result = false; - bool scripted = false; - - if (argc == 2) { - FGConfigFile testFile(argv[1]); - - if (!testFile.IsOpen()) { - cout << "Script file not opened" << endl; - exit(-1); - } - - testFile.GetNextConfigLine(); - if (testFile.GetValue("runscript").length() <= 0) { - cout << "File: " << argv[1] << " is not a script file" << endl; - exit(-1); - } - scripted = true; - } else if (argc != 3) { - cout << endl - << " You must enter the name of a registered aircraft and reset point:" - << endl << endl << " FDM " << endl; - cout << endl << " Alternatively, you may specify only the name of a script file:" - << endl << endl << " FDM