]> git.mxchange.org Git - flightgear.git/commitdiff
JSBSim updates. This update changes the file format, so an update of the base
authortony <tony>
Tue, 24 Sep 2002 12:54:43 +0000 (12:54 +0000)
committertony <tony>
Tue, 24 Sep 2002 12:54:43 +0000 (12:54 +0000)
package is required.

22 files changed:
src/FDM/JSBSim/FGCoefficient.cpp
src/FDM/JSBSim/FGCoefficient.h
src/FDM/JSBSim/FGConfigFile.cpp
src/FDM/JSBSim/FGConfigFile.h
src/FDM/JSBSim/FGFCS.cpp
src/FDM/JSBSim/FGJSBBase.cpp
src/FDM/JSBSim/FGJSBBase.h
src/FDM/JSBSim/FGPropertyManager.cpp
src/FDM/JSBSim/FGScript.cpp
src/FDM/JSBSim/FGState.cpp
src/FDM/JSBSim/FGState.h
src/FDM/JSBSim/FGTrim.cpp
src/FDM/JSBSim/filtersjb/FGDeadBand.cpp
src/FDM/JSBSim/filtersjb/FGFCSComponent.cpp
src/FDM/JSBSim/filtersjb/FGFCSComponent.h
src/FDM/JSBSim/filtersjb/FGFilter.cpp
src/FDM/JSBSim/filtersjb/FGGain.cpp
src/FDM/JSBSim/filtersjb/FGGradient.cpp
src/FDM/JSBSim/filtersjb/FGKinemat.cpp
src/FDM/JSBSim/filtersjb/FGSummer.cpp
src/FDM/JSBSim/filtersjb/FGSummer.h
src/FDM/JSBSim/filtersjb/FGSwitch.cpp

index d430af3e44aaf9af29cf3bddf62bff488e691650..523d8ff7adf1d328e837b2aafdc003b01eb90a64 100644 (file)
@@ -111,14 +111,13 @@ FGCoefficient::~FGCoefficient()
 bool FGCoefficient::Load(FGConfigFile *AC_cfg)
 {
   int start, end, n;
-  string mult,prop;
+  string mult;
 
   if (AC_cfg) {
     name = AC_cfg->GetValue("NAME");
     method = AC_cfg->GetValue("TYPE");
     AC_cfg->GetNextConfigLine();
     *AC_cfg >> description;
-
     if      (method == "EQUATION") type = EQUATION;
     else if (method == "TABLE")    type = TABLE;
     else if (method == "VECTOR")   type = VECTOR;
@@ -135,42 +134,46 @@ bool FGCoefficient::Load(FGConfigFile *AC_cfg)
       }
 
       *AC_cfg >> multparmsRow;
-      prop = State->GetPropertyName( multparmsRow );
-      LookupR = PropertyManager->GetNode( prop );
+      LookupR = PropertyManager->GetNode( multparmsRow );
     }
 
     if (type == TABLE) {
       *AC_cfg >> multparmsCol;
-      prop = State->GetPropertyName( multparmsCol );
 
-      LookupC = PropertyManager->GetNode( prop );
+      LookupC = PropertyManager->GetNode( multparmsCol );
     }
 
     // Here, read in the line of the form (e.g.) FG_MACH|FG_QBAR|FG_ALPHA
     // where each non-dimensionalizing parameter for this coefficient is
     // separated by a | character
 
-    *AC_cfg >> multparms;
+    string line=AC_cfg->GetCurrentLine();
+    unsigned j=0;
+    char tmp[255];
+    for(unsigned i=0;i<line.length(); i++ ) {
+      if( !isspace(line[i]) ) {
+        tmp[j]=line[i];
+        j++;
+      }
+    } 
+    tmp[j]='\0'; multparms=tmp;  
+    end  = multparms.length();
 
-    end   = multparms.length();
     n     = multparms.find("|");
     start = 0;
-
-    if (multparms != string("FG_NONE")) {
+    if (multparms != string("none")) {
       while (n < end && n >= 0) {
         n -= start;
         mult = multparms.substr(start,n);
-        prop= State->GetPropertyName( mult );
-        multipliers.push_back( PropertyManager->GetNode(prop) );
+        multipliers.push_back( resolveSymbol( mult ) );
         start += n+1;
         n = multparms.find("|",start);
       }
-      prop=State->GetPropertyName( multparms.substr(start,n) );
       mult = multparms.substr(start,n);
-      multipliers.push_back( PropertyManager->GetNode(prop) );
+      multipliers.push_back( resolveSymbol( mult ) );
       // End of non-dimensionalizing parameter read-in
     }
-
+    AC_cfg->GetNextConfigLine();
     if (type == VALUE) {
       *AC_cfg >> StaticValue;
     } else if (type == VECTOR || type == TABLE) {
@@ -335,7 +338,19 @@ void FGCoefficient::unbind(void)
   node->Untie("bias");  
   node->Untie("gain");
 }
-  
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FGPropertyManager* FGCoefficient::resolveSymbol(string name){
+        FGPropertyManager* tmpn;
+        tmpn = PropertyManager->GetNode(name,false);
+        if( !tmpn ) {
+          cerr << "Coefficient multipliers cannot create properties, check spelling?" << endl;
+          exit(1);
+        } 
+        return tmpn; 
+}
+
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 //    The bitmasked value choices are as follows:
 //    unset: In this case (the default) JSBSim would only print
index 0c1796c420fdc67da6c0692cc0f55710cab48cde..a809ae11a5ff3c5a40891c658c3b70c2382d6bfa 100644 (file)
@@ -202,6 +202,8 @@ private:
   FGAuxiliary*    Auxiliary;
   FGOutput*       Output;
   FGPropertyManager* PropertyManager;
+  
+  FGPropertyManager* resolveSymbol(string name);
 
   virtual void Debug(int from);
 };
index 77d0628de2fc51b9e3254c45d1932c031423b4c0..a3bb234773072f35c0c77d566d57eb67cafab6f4 100644 (file)
@@ -271,28 +271,6 @@ FGConfigFile& FGConfigFile::operator>>(int& val)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-FGConfigFile& FGConfigFile::operator>>(eParam& val)
-{
-  string::size_type pos, end;
-
-  pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
-  if (pos == CurrentLine.npos) pos = CurrentLine.length();
-  end = CurrentLine.find_first_of(", ",pos+1);
-  if (end == CurrentLine.npos) end = CurrentLine.length();
-  string str = CurrentLine.substr(pos, end - pos);
-  val = (eParam)atoi(str.c_str());
-  CurrentIndex = end+1;
-  if (end == pos) {
-    GetNextConfigLine();
-    *this >> val;
-  } else {
-    if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();
-  }
-  return *this;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
 FGConfigFile& FGConfigFile::operator>>(string& str)
 {
   string::size_type pos, end;
index ffcb29fb2a23dd439254d32ab5c4e11444c44eb1..8b19d78a1290a44adbc289e01235c850747b6c12 100644 (file)
@@ -120,6 +120,8 @@ public:
       @return the next valid line from the config file OR "EOF" if end of file is
       reached.*/
   string GetNextConfigLine(void);
+  
+  string GetCurrentLine(void) { return CurrentLine; }
 
   /** Returns the value of the tag supplied.
       @param 
@@ -132,7 +134,6 @@ public:
   FGConfigFile& operator>>(double&);
   FGConfigFile& operator>>(int&);
   FGConfigFile& operator>>(string&);
-  FGConfigFile& operator>>(eParam&);
   void ResetLineIndexToZero(void);
 
 private:
index 0ac825348d59c7408baded55f2c57fcd204d76c8..3fcaab4aa6ae2f31cd73611994a3e8693d389af5 100644 (file)
@@ -285,6 +285,7 @@ bool FGFCS::Load(FGConfigFile* AC_cfg)
   vector <FGFCSComponent*> *Components;
   FGConfigFile *FCS_cfg;
 
+  Components=0;
   // Determine if the FCS/Autopilot is defined inline in the aircraft configuration
   // file or in a separate file. Set up the config file class as appropriate.
 
@@ -324,11 +325,11 @@ bool FGFCS::Load(FGConfigFile* AC_cfg)
   if (delimiter == "AUTOPILOT") {
     Components = &APComponents;
     eMode = mAP;
-    Name = "Autopilot:" + name;
+    Name = "Autopilot: " + name;
   } else if (delimiter == "FLIGHT_CONTROL") {
     Components = &FCSComponents;
     eMode = mFCS;
-    Name = "FCS:" + name;
+    Name = "FCS: " + name;
   } else {
     cerr << endl << "Unknown FCS delimiter" << endl << endl;
   }
@@ -436,7 +437,7 @@ string FGFCS::GetComponentName(int idx)
     break;
   }
   return string("");
-}
+} 
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -792,6 +793,7 @@ void FGFCS::bindModel(void)
   unsigned i;
   char tmp[80];
   
+  
   for (i=0; i<ThrottleCmd.size(); i++) {
     snprintf(tmp,80,"fcs/throttle-cmd-norm[%u]",i);
     PropertyManager->Tie( tmp,this,i,
index 7ad08bb31b6dee7e232aefb2baa8d7fce37d28e7..a38a4c6975ef2605459bbdedf8bebc5f740e1520 100644 (file)
@@ -66,7 +66,7 @@ const double FGJSBBase::inchtoft = 0.08333333;
 const double FGJSBBase::in3tom3 = 1.638706E-5;
 const double FGJSBBase::Reng = 1716.0;
 const double FGJSBBase::SHRatio = 1.40;
-const string FGJSBBase::needed_cfg_version = "1.58";
+const string FGJSBBase::needed_cfg_version = "1.60";
 const string FGJSBBase::JSBSim_version = "0.9.2";
 
 queue <FGJSBBase::Message*> FGJSBBase::Messages;
index 4b522d3f2cfebc22624114b88fda93753cb78f0d..f203f36e3d6611ea08753946fe7e139eadb13892 100644 (file)
@@ -87,103 +87,6 @@ DEFINITIONS
 FORWARD DECLARATIONS
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
 
-enum eParam {
-  FG_UNDEF = 0,
-  FG_TIME,
-  FG_QBAR,
-  FG_WINGAREA,
-  FG_WINGSPAN,
-  FG_CBAR,
-  FG_ALPHA,
-  FG_ALPHADOT,
-  FG_BETA,
-  FG_ABETA,
-  FG_BETADOT,
-  FG_PHI,
-  FG_THT,
-  FG_PSI,
-  FG_PITCHRATE,
-  FG_ROLLRATE,
-  FG_YAWRATE,
-  FG_AEROP,
-  FG_AEROQ,
-  FG_AEROR,
-  FG_CL_SQRD,
-  FG_MACH,
-  FG_ALTITUDE,
-  FG_BI2VEL,
-  FG_CI2VEL,
-  FG_ELEVATOR_POS,
-  FG_AELEVATOR_POS,
-  FG_NELEVATOR_POS,
-  FG_AILERON_POS,
-  FG_AAILERON_POS,
-  FG_NAILERON_POS,
-  FG_LEFT_AILERON_POS,
-  FG_ALEFT_AILERON_POS,
-  FG_NLEFT_AILERON_POS,
-  FG_RIGHT_AILERON_POS,
-  FG_ARIGHT_AILERON_POS,
-  FG_NRIGHT_AILERON_POS,
-  FG_RUDDER_POS,
-  FG_ARUDDER_POS,
-  FG_NRUDDER_POS,
-  FG_SPDBRAKE_POS,
-  FG_NSPDBRAKE_POS,
-  FG_SPOILERS_POS,
-  FG_NSPOILERS_POS,
-  FG_FLAPS_POS,
-  FG_NFLAPS_POS,
-  FG_ELEVATOR_CMD,
-  FG_AILERON_CMD,
-  FG_RUDDER_CMD,
-  FG_SPDBRAKE_CMD,
-  FG_SPOILERS_CMD,
-  FG_FLAPS_CMD,
-  FG_THROTTLE_CMD,
-  FG_THROTTLE_POS,
-  FG_MIXTURE_CMD,
-  FG_MIXTURE_POS,
-  FG_MAGNETO_CMD,
-  FG_STARTER_CMD,
-  FG_ACTIVE_ENGINE,
-  FG_HOVERB,
-  FG_PITCH_TRIM_CMD,
-  FG_YAW_TRIM_CMD,
-  FG_ROLL_TRIM_CMD,
-  FG_LEFT_BRAKE_CMD,
-  FG_CENTER_BRAKE_CMD,
-  FG_RIGHT_BRAKE_CMD,
-  FG_SET_LOGGING,
-  FG_ALPHAH,
-  FG_ALPHAW,
-  FG_LBARH,     //normalized horizontal tail arm
-  FG_LBARV,     //normalized vertical tail arm
-  FG_HTAILAREA,
-  FG_VTAILAREA,
-  FG_VBARH,    //horizontal tail volume 
-  FG_VBARV,     //vertical tail volume 
-  FG_GEAR_CMD,
-  FG_GEAR_POS,
-  FG_HYSTPARM,
-  AP_ELEVATOR_CMD,
-  AP_AILERON_CMD,
-  AP_RUDDER_CMD,
-  AP_THROTTLE_CMD,
-  AP_SET_ATTITUDE,
-  AP_SET_ALTITUDE,
-  AP_SET_HEADING,
-  AP_SET_AIRSPEED,
-  AP_ACQUIRE_ATTITUDE,
-  AP_ACQUIRE_ALTITUDE,
-  AP_ACQUIRE_HEADING,
-  AP_ACQUIRE_AIRSPEED,
-  AP_ATTITUDE_HOLD_ON,
-  AP_ALTITUDE_HOLD_ON,
-  AP_HEADING_HOLD_ON,
-  AP_AIRSPEED_HOLD_ON,
-  AP_WINGSLEVEL_HOLD_ON
-};
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
index 09337b899d6734d50215a6a49c98d947adc8d485..1253d6d2d03884684fd6bbfb1801a7305c02c753 100644 (file)
@@ -31,6 +31,10 @@ INCLUDES
 #include <simgear/misc/props.hxx>
 #include "FGPropertyManager.h"
 
+/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+DEFINITIONS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+
 
 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 FORWARD DECLARATIONS
@@ -47,15 +51,23 @@ COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
 
 string FGPropertyManager::mkPropertyName(string name, bool lowercase) {
   
+  /* do this two pass to avoid problems with characters getting skipped
+     because the index changed */
+
   for(unsigned i=0;i<name.length();i++) {
     if( lowercase && isupper(name[i]) )
       name[i]=tolower(name[i]);
     else if( isspace(name[i]) ) 
       name[i]='-';
   }
+  for(unsigned i=0;i<name.length();i++) {
+    if( name[i] == '/' )
+      name.erase(i,1);  
+  }
+
   return name;
 }
-  
+
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 FGPropertyManager*  
index 13526278f9d031552dffabcfc5d5d588e3dfee66..f17221325dad15764aa2618cf94caad4f9aefe8a 100644 (file)
@@ -143,12 +143,12 @@ bool FGScript::LoadScript( string script )
           newCondition = new struct condition();
           while (token != string("/when")) {
             if (token == "parameter") {
-              prop_name = State->GetPropertyName( 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") {
-              prop_name = State->GetPropertyName( 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);
index 4ca4edc77e13e2dd4351cf886a296578a9749220..6ce19c4071ce11b7ba80bdf5e5301f08ee0e34fa 100644 (file)
@@ -86,8 +86,6 @@ FGState::FGState(FGFDMExec* fdex)
 
   for(int i=0;i<3;i++) vQdot_prev[i].InitMatrix();
 
-  InitPropertyMaps();
-
   bind();
   
   Debug(0);
@@ -421,108 +419,6 @@ void FGState::ReportState(void)
 
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-void FGState::InitPropertyMaps(void)
-{
-  ParamNameToProp[  "FG_TIME" ]="sim-time-sec";
-  ParamNameToProp[  "FG_QBAR" ]="aero/qbar-psf";
-  ParamNameToProp[  "FG_QBARUW" ]="aero/qbarUW-psf";
-  ParamNameToProp[  "FG_QBARUV" ]="aero/qbarUV-psf";
-  ParamNameToProp[  "FG_WINGAREA" ]="metrics/Sw-sqft";
-  ParamNameToProp[  "FG_WINGSPAN" ]="metrics/bw-ft";
-  ParamNameToProp[  "FG_CBAR" ]="metrics/cbarw-ft";
-  ParamNameToProp[  "FG_ALPHA" ]="aero/alpha-rad";
-  ParamNameToProp[  "FG_ALPHADOT" ]="aero/alphadot-rad_sec";
-  ParamNameToProp[  "FG_BETA" ]="aero/beta-rad";
-  ParamNameToProp[  "FG_ABETA" ]="aero/mag-beta-rad";
-  ParamNameToProp[  "FG_BETADOT" ]="aero/betadot-rad_sec";
-  ParamNameToProp[  "FG_PHI" ]="attitude/phi-rad";
-  ParamNameToProp[  "FG_THT" ]="attitude/theta-rad";
-  ParamNameToProp[  "FG_PSI" ]="attitude/psi-true-rad";
-  ParamNameToProp[  "FG_PITCHRATE" ]="velocities/q-rad_sec";
-  ParamNameToProp[  "FG_ROLLRATE" ]="velocities/p-rad_sec";
-  ParamNameToProp[  "FG_YAWRATE" ]="velocities/r-rad_sec";
-  ParamNameToProp[  "FG_AEROP" ]="velocities/p-aero-rad_sec";
-  ParamNameToProp[  "FG_AEROQ" ]="velocities/q-aero-rad_sec";
-  ParamNameToProp[  "FG_AEROR" ]="velocities/r-aero-rad_sec";
-  ParamNameToProp[  "FG_CL_SQRD" ]="aero/cl-squared-norm";
-  ParamNameToProp[  "FG_MACH" ]="velocities/mach-norm";
-  ParamNameToProp[  "FG_ALTITUDE" ]="position/h-sl-ft";
-  ParamNameToProp[  "FG_BI2VEL" ]="aero/bi2vel";
-  ParamNameToProp[  "FG_CI2VEL" ]="aero/ci2vel";
-  ParamNameToProp[  "FG_ELEVATOR_POS" ]="fcs/elevator-pos-rad";
-  ParamNameToProp[  "FG_AELEVATOR_POS" ]="fcs/mag-elevator-pos-rad";
-  ParamNameToProp[  "FG_NELEVATOR_POS" ]="fcs/elevator-pos-norm";
-  ParamNameToProp[  "FG_AILERON_POS" ]="fcs/left-aileron-pos-rad";
-  ParamNameToProp[  "FG_AAILERON_POS" ]="fcs/mag-aileron-pos-rad";
-  ParamNameToProp[  "FG_NAILERON_POS" ]="fcs/left-aileron-pos-norm";
-  ParamNameToProp[  "FG_LEFT_AILERON_POS" ]="fcs/left-aileron-pos-rad";
-  ParamNameToProp[  "FG_ALEFT_AILERON_POS" ]="fcs/mag-left-aileron-pos-rad";
-  ParamNameToProp[  "FG_NLEFT_AILERON_POS" ]="fcs/left-aileron-pos-norm";
-  ParamNameToProp[  "FG_RIGHT_AILERON_POS" ]="fcs/right-aileron-pos-rad";
-  ParamNameToProp[  "FG_ARIGHT_AILERON_POS" ]="fcs/mag-aileron-pos-rad";
-  ParamNameToProp[  "FG_NRIGHT_AILERON_POS" ]="fcs/right-aileron-pos-norm";
-  ParamNameToProp[  "FG_RUDDER_POS" ]="fcs/rudder-pos-rad";
-  ParamNameToProp[  "FG_ARUDDER_POS" ]="fcs/mag-rudder-pos-rad";
-  ParamNameToProp[  "FG_NRUDDER_POS" ]="fcs/rudder-pos-norm";
-  ParamNameToProp[  "FG_SPDBRAKE_POS" ]="fcs/speedbrake-pos-rad";
-  ParamNameToProp[  "FG_NSPDBRAKE_POS" ]="fcs/speedbrake-pos-norm";
-  ParamNameToProp[  "FG_SPOILERS_POS" ]="fcs/spoiler-pos-rad";
-  ParamNameToProp[  "FG_NSPOILERS_POS" ]="fcs/spoiler-pos-norm";
-  ParamNameToProp[  "FG_FLAPS_POS" ]="fcs/flap-pos-deg";
-  ParamNameToProp[  "FG_NFLAPS_POS" ]="fcs/flap-pos-norm";
-  ParamNameToProp[  "FG_ELEVATOR_CMD" ]="fcs/elevator-cmd-norm";
-  ParamNameToProp[  "FG_AILERON_CMD" ]="fcs/aileron-cmd-norm";
-  ParamNameToProp[  "FG_RUDDER_CMD" ]="fcs/rudder-cmd-norm";
-  ParamNameToProp[  "FG_SPDBRAKE_CMD" ]="fcs/speedbrake-cmd-norm";
-  ParamNameToProp[  "FG_SPOILERS_CMD" ]="fcs/spoiler-cmd-norm";
-  ParamNameToProp[  "FG_FLAPS_CMD" ]="fcs/flap-cmd-norm";
-  ParamNameToProp[  "FG_THROTTLE_CMD" ]="fcs/throttle-cmd-norm";
-  ParamNameToProp[  "FG_THROTTLE_POS" ]="fcs/throttle-pos-norm";
-  ParamNameToProp[  "FG_MIXTURE_CMD" ]="fcs/mixture-cmd-norm";
-  ParamNameToProp[  "FG_MIXTURE_POS" ]="fcs/mixture-pos-norm";
-  ParamNameToProp[  "FG_MAGNETO_CMD" ]="propulsion/magneto_cmd";
-  ParamNameToProp[  "FG_STARTER_CMD" ]="propulsion/starter_cmd";
-  ParamNameToProp[  "FG_ACTIVE_ENGINE" ]="propulsion/active_engine";
-  ParamNameToProp[  "FG_HOVERB" ]="aero/h_b-mac-ft";
-  ParamNameToProp[  "FG_PITCH_TRIM_CMD" ]="fcs/pitch-trim-cmd-norm";
-  ParamNameToProp[  "FG_YAW_TRIM_CMD" ]="fcs/yaw-trim-cmd-norm";
-  ParamNameToProp[  "FG_ROLL_TRIM_CMD" ]="fcs/roll-trim-cmd-norm";
-  ParamNameToProp[  "FG_LEFT_BRAKE_CMD" ]="fcs/left_brake";
-  ParamNameToProp[  "FG_CENTER_BRAKE_CMD" ]="fcs/center_brake";
-  ParamNameToProp[  "FG_RIGHT_BRAKE_CMD" ]="fcs/right_brake";
-  ParamNameToProp[  "FG_SET_LOGGING" ]="sim/set_logging";
-  ParamNameToProp[  "FG_ALPHAH" ]="aero/alpha-rad";
-  ParamNameToProp[  "FG_ALPHAW" ]="aero/alpha-wing-rad";
-  ParamNameToProp[  "FG_LBARH" ]="metrics/lh-norm";     
-  ParamNameToProp[  "FG_LBARV" ]="metrics/lv-norm";     
-  ParamNameToProp[  "FG_HTAILAREA" ]="metrics/Sh-sqft";
-  ParamNameToProp[  "FG_VTAILAREA" ]="metrics/Sv-sqft";
-  ParamNameToProp[  "FG_VBARH" ]="metrics/vbarh-norm";    
-  ParamNameToProp[  "FG_VBARV" ]="metrics/vbarv-norm";     
-  ParamNameToProp[  "FG_GEAR_CMD" ]="gear/gear-cmd-norm";
-  ParamNameToProp[  "FG_GEAR_POS" ]="gear/gear-pos-norm";
-  ParamNameToProp[  "FG_HYSTPARM" ]="aero/stall-hyst-norm";
-  ParamNameToProp[  "AP_ELEVATOR_CMD" ]="jsbsim/ap/elevator_cmd";
-  ParamNameToProp[  "AP_AILERON_CMD" ]="jsbsim/ap/aileron_cmd";
-  ParamNameToProp[  "AP_RUDDER_CMD" ]="jsbsim/ap/rudder_cmd";
-  ParamNameToProp[  "AP_THROTTLE_CMD" ]="jsbsim/ap/throttle_cmd";
-  ParamNameToProp[  "AP_SET_ATTITUDE" ]="jsbsim/ap/set_attitude";
-  ParamNameToProp[  "AP_SET_ALTITUDE" ]="jsbsim/ap/set_altitude";
-  ParamNameToProp[  "AP_SET_HEADING" ]="jsbsim/ap/set_heading";
-  ParamNameToProp[  "AP_SET_AIRSPEED" ]="jsbsim/ap/set_airspeed";
-  ParamNameToProp[  "AP_ACQUIRE_ATTITUDE" ]="jsbsim/ap/acquire_attitude";
-  ParamNameToProp[  "AP_ACQUIRE_ALTITUDE" ]="jsbsim/ap/acquire_altitude";
-  ParamNameToProp[  "AP_ACQUIRE_HEADING" ]="jsbsim/ap/acquire_heading";
-  ParamNameToProp[  "AP_ACQUIRE_AIRSPEED" ]="jsbsim/ap/acquire_aispeed";
-  ParamNameToProp[  "AP_ATTITUDE_HOLD_ON" ]="jsbsim/ap/attitude_hold_on";
-  ParamNameToProp[  "AP_ALTITUDE,_HOLD_ON" ]="jsbsim/ap/altitude_hold_on";
-  ParamNameToProp[  "AP_HEADING_HOLD_ON" ]="jsbsim/ap/heading_hold_on";
-  ParamNameToProp[  "AP_AIRSPEED_HOLD_ON" ]="jsbsim/ap/airspeed_hold_on";
-  ParamNameToProp[  "AP_WINGSLEVEL_HOLD_ON" ]="jsbsim/ap/wingslevel_hold_on";
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
 void FGState::bind(void)
 {
   PropertyManager->Tie("sim-time-sec",this,
index 37cd93173520f4f0f9524d0376cafd4bc07879ab..3eaf0f2b2c6029db3f50e5fd3021630182eac561 100644 (file)
@@ -325,8 +325,6 @@ public:
   */
   void ReportState(void);
   
-  inline string GetPropertyName(string prm) { return ParamNameToProp[prm]; }
-  
   void bind();
   void unbind();
 
@@ -362,11 +360,6 @@ private:
   FGPropulsion* Propulsion;
   FGPropertyManager* PropertyManager;
 
-  typedef map<string,string> ParamNameMap;
-  ParamNameMap ParamNameToProp;
-  
-  void InitPropertyMaps(void);
-  
   void Debug(int from);
 };
 
index 48fb0cfd7d9dd41d51b5b7736c4fa24c5d65fbd1..21dae465da7fc1f369c27f980858bca47d040159 100644 (file)
@@ -144,7 +144,7 @@ void FGTrim::ClearStates(void) {
       iAxes++;
     }
     TrimAxes.clear();
-    cout << "TrimAxes.size(): " << TrimAxes.size() << endl;
+    //cout << "TrimAxes.size(): " << TrimAxes.size() << endl;
 }
     
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
index 2f2283ef6fc318b2af4c48270cddaecd31c4e6d1..4b0f4191dcf3c59c34a3fa0d612b580cd5a69d13 100644 (file)
@@ -66,7 +66,7 @@ FGDeadBand::FGDeadBand(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
       *AC_cfg >> token;
     }
   }
-
+  FGFCSComponent::bind( PropertyManager->GetNode("fcs/components",true) );
   Debug(0);
 }
 
index 6130c1b62a297f85b8ff0edafb53ad3576c6c41e..3da8142617c147278ef33f6d4b96ebcd183b9f63 100644 (file)
@@ -51,7 +51,6 @@ FGFCSComponent::FGFCSComponent(FGFCS* _fcs) : fcs(_fcs)
   Type       = "";
   ID         = 0;
   Input      = 0.0;
-  InputNode   = 0;
   Output     = 0.0;
   OutputNode  = 0;
   IsOutput   = false;
@@ -63,6 +62,7 @@ FGFCSComponent::FGFCSComponent(FGFCS* _fcs) : fcs(_fcs)
 
 FGFCSComponent::~FGFCSComponent()
 {
+  unbind();
   Debug(1);
 }
 
@@ -77,22 +77,64 @@ void FGFCSComponent::SetOutput(void)
 
 bool FGFCSComponent::Run(void)
 {
-  switch(InputType) {
-  case itPilotAC:
-    Input = InputNode->getDoubleValue();
-    break;
-  case itFCS:
-    Input = fcs->GetComponentOutput(InputIdx);  
-  case itAP:
-    // implement autopilot input mechanism
-    break;
-  case itBias:
-    break;  
-  }
+  
+  // switch(InputType) {
+//   case itAP:
+//   case itPilotAC:
+//     Input = InputNode->getDoubleValue();
+//     break;
+//   case itFCS:
+//     Input = fcs->GetComponentOutput(InputIdx);  
+//   case itBias:
+//     break;  
+//   }
 
   return true;
 }
 
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+FGPropertyManager* FGFCSComponent::resolveSymbol(string token) {
+  string prop;
+  FGPropertyManager* tmp=PropertyManager->GetNode(token,false);
+  if( !tmp ){
+    if( token.find("/") == token.npos ) 
+      prop = "model/" + token;
+    cerr << "Creating new property " << prop << endl;
+    tmp=PropertyManager->GetNode(token,true);
+  }
+  return tmp;  
+}              
+      
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+void FGFCSComponent::bind(FGPropertyManager *node) {
+  string tmp = "fcs/" + node->mkPropertyName(Name, true);
+  FGPropertyManager *tmpn;
+  PropertyManager->Tie( tmp,this, &FGFCSComponent::GetOutput);
+  node = node->GetNode( node->mkPropertyName(Name, true), true );
+  for(unsigned i=0;i<InputNodes.size();i++) {
+    tmpn=node->GetNode( "input-property",(int)i,true );
+    tmpn->setStringValue( InputNodes[i]->GetName().c_str() );
+  }  
+  if(OutputNode) node->SetString("output-property",OutputNode->GetName());
+  node->Tie("output-value",this,&FGFCSComponent::GetOutput);
+  node->SetString("type",Type);
+}  
+
+//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+void FGFCSComponent::unbind(void) { 
+  string name = "fcs";
+  FGPropertyManager *node=PropertyManager->GetNode(name);
+  node->Untie( PropertyManager->mkPropertyName(Name, true) );
+  name += "/components" 
+                 + PropertyManager->mkPropertyName(Name, true); 
+  node= PropertyManager->GetNode(name);
+  node->Untie("output-value");
+}
+                
 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 //    The bitmasked value choices are as follows:
 //    unset: In this case (the default) JSBSim would only print
index 599716c05f395533040685316e9e3cb43a984091..07c6a03a66f254fffb32870c99cd148fea7e5604 100644 (file)
@@ -42,6 +42,7 @@ INCLUDES
 #endif
 
 #include <string>
+#include <vector>
 #include "../FGJSBBase.h"
 #include "../FGPropertyManager.h"
 
@@ -101,12 +102,16 @@ public:
 
   virtual bool Run(void);
   virtual void SetOutput(void);
-  inline double GetOutput (void) {return Output;}
+  inline double GetOutput (void) const {return Output;}
   inline FGPropertyManager* GetOutputNode(void) { return OutputNode; }
-  inline string GetName(void) {return Name;}
-  inline string GetType(void) { return Type; }
-  virtual double GetOutputPct(void) { return 0; }
-
+  inline string GetName(void) const {return Name;}
+  inline string GetType(void) const { return Type; }
+  virtual double GetOutputPct(void) const { return 0; }
+  
+  virtual void bind(FGPropertyManager *node);
+  virtual void unbind( void );
+  FGPropertyManager* resolveSymbol(string token);
+  
 protected:
    /// Pilot/Aircraft, FCS, Autopilot inputs
   enum eInputType {itPilotAC, itFCS, itAP, itBias} InputType;
@@ -115,7 +120,7 @@ protected:
   string Type;
   string Name;
   int ID;
-  FGPropertyManager* InputNode;
+  vector<FGPropertyManager*> InputNodes;
   int InputIdx;
   double Input;
   FGPropertyManager* OutputNode;
index 009eccfcaeee2dce67661a3a4a6b115637b5bd9d..5ca2f7930de2ffc9858ce1083f5f85626161984f 100644 (file)
@@ -79,22 +79,18 @@ FGFilter::FGFilter(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
     else if (token == "INPUT")
     {
       token = AC_cfg->GetValue("INPUT");
-      if (token.find("FG_") != token.npos) {
+      if( InputNodes.size() > 0 ) {
+        cerr << "Filters can only accept one input" << endl;
+      } else  {
         *AC_cfg >> token;
-        InputNode = PropertyManager->GetNode( 
-                    fcs->GetState()->GetPropertyName(token) );
-        InputType = itPilotAC;
-      } else {
-        *AC_cfg >> InputIdx;
-        InputType = itFCS;
-      }
+        InputNodes.push_back( resolveSymbol(token) );
+      }  
     }
     else if (token == "OUTPUT")
     {
       IsOutput = true;
       *AC_cfg >> sOutputIdx;
-      OutputNode = PropertyManager->GetNode( 
-                     fcs->GetState()->GetPropertyName(sOutputIdx) );
+      OutputNode = PropertyManager->GetNode( sOutputIdx );
     }
     else cerr << "Unknown filter type: " << token << endl;
   }
@@ -133,6 +129,7 @@ FGFilter::FGFilter(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
       cerr << "Unknown filter type" << endl;
     break;
   }
+  FGFCSComponent::bind( PropertyManager->GetNode("fcs/components",true) );
 
   Debug(0);
 }
@@ -156,7 +153,7 @@ bool FGFilter::Run(void)
     Initialize = false;
 
   } else {
-
+    Input = InputNodes[0]->getDoubleValue();
     switch (FilterType) {
       case eLag:
         Output = Input * ca + PreviousInput1 * ca + PreviousOutput1 * cb;
@@ -215,19 +212,7 @@ void FGFilter::Debug(int from)
 
   if (debug_lvl & 1) { // Standard console startup message output
     if (from == 0) { // Constructor
-      cout << "      ID: " << ID << endl;
-      switch(InputType) {
-      case itPilotAC:
-        cout << "      INPUT: " << InputNode->getName() << endl;
-        break;
-      case itFCS:
-        cout << "      INPUT: FCS Component " << InputIdx << " (" << 
-                                        fcs->GetComponentName(InputIdx) << ")" << endl;
-        break;
-      case itAP:
-      case itBias:
-        break; 
-      }
+      cout << "      INPUT: " << InputNodes[0]->getName() << endl;
       cout << "      C1: " << C1 << endl;
       cout << "      C2: " << C2 << endl;
       cout << "      C3: " << C3 << endl;
index fba6782845242bae96cc8995c0e4839d74b3c897..7c6f6f1daacb4940317621b00c056733d4605909 100644 (file)
@@ -73,15 +73,12 @@ FGGain::FGGain(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
       *AC_cfg >> ID;
     } else if (token == "INPUT") {
       token = AC_cfg->GetValue("INPUT");
-      if (token.find("FG_") != token.npos) {
+      if( InputNodes.size() > 0 ) {
+        cerr << "Gains can only accept one input" << endl;
+      } else  {
         *AC_cfg >> token;
-        InputNode = PropertyManager->GetNode( 
-                    fcs->GetState()->GetPropertyName(token) );
-        InputType = itPilotAC;
-      } else {
-        *AC_cfg >> InputIdx;
-        InputType = itFCS;
-      }
+        InputNodes.push_back( resolveSymbol(token) );
+      }  
     } else if (token == "GAIN") {
       *AC_cfg >> Gain;
     } else if (token == "MIN") {
@@ -97,20 +94,21 @@ FGGain::FGGain(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
       token = AC_cfg->GetValue("SCHEDULED_BY");
       if (token.find("FG_") != token.npos) {
         *AC_cfg >> strScheduledBy;
-        ScheduledBy = PropertyManager->GetNode( 
-                       fcs->GetState()->GetPropertyName(strScheduledBy) ); 
+        ScheduledBy = PropertyManager->GetNode( strScheduledBy ); 
       } 
     } else if (token == "OUTPUT") {
       IsOutput = true;
       *AC_cfg >> sOutputIdx;      
-      OutputNode = PropertyManager->GetNode( 
-                     fcs->GetState()->GetPropertyName(sOutputIdx) );
+      OutputNode = PropertyManager->GetNode( sOutputIdx );
 
     } else {
       AC_cfg->ResetLineIndexToZero();
       *Table << *AC_cfg;
     }
   }
+  
+  FGFCSComponent::bind( PropertyManager->GetNode("fcs/components",true) );
+
   Debug(0);
 }
 
@@ -129,7 +127,7 @@ bool FGGain::Run(void )
   double LookupVal = 0;
 
   FGFCSComponent::Run(); // call the base class for initialization of Input
-
+  Input = InputNodes[0]->getDoubleValue();
   if (Type == "PURE_GAIN") {
     Output = Gain * Input;
   } else if (Type == "SCHEDULED_GAIN") {
@@ -179,19 +177,7 @@ void FGGain::Debug(int from)
 
   if (debug_lvl & 1) { // Standard console startup message output
     if (from == 0) { // Constructor
-      cout << "      ID: " << ID << endl;
-      switch(InputType) {
-      case itPilotAC:
-        cout << "      INPUT: " << InputNode->getName() << endl;
-        break;
-      case itFCS:
-        cout << "      INPUT: FCS Component " << InputIdx << " (" << 
-                                        fcs->GetComponentName(InputIdx) << ")" << endl;
-        break;
-      case itAP:
-      case itBias:
-        break;  
-      }
+      cout << "      INPUT: " << InputNodes[0]->getName() << endl;
       cout << "      GAIN: " << Gain << endl;
       if (IsOutput) cout << "      OUTPUT: " << OutputNode->getName() << endl;
       cout << "      MIN: " << Min << endl;
index cc9bb73404abf6557b52e914e1664d5283eaa812..2f344bfe23d8b40d2b315cff725fb8001569a5e9 100644 (file)
@@ -52,6 +52,8 @@ FGGradient::FGGradient(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
 {
   Type = AC_cfg->GetValue("TYPE");
   Name = AC_cfg->GetValue("NAME");
+  
+  FGFCSComponent::bind( PropertyManager->GetNode("fcs/components",true) );
 
   Debug(0);
 }
index 1bf63e8236ec79bae1f0df314e153978bcfe5bbd..98600cda4ad0add13f3a88d88d4e20e522af2684 100644 (file)
@@ -69,15 +69,13 @@ FGKinemat::FGKinemat(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
       *AC_cfg >> ID;
     } else if (token == "INPUT") {
       token = AC_cfg->GetValue("INPUT");
-      if (token.find("FG_") != token.npos) {
+      if( InputNodes.size() > 0 ) {
+        cerr << "Kinemat can only accept one input" << endl;
+      } else  {
         *AC_cfg >> token;
-        InputNode = PropertyManager->GetNode( 
-                    fcs->GetState()->GetPropertyName(token) );
-        InputType = itPilotAC;
-      } else {
-        *AC_cfg >> InputIdx;
-        InputType = itFCS;
-      }
+        InputNodes.push_back( resolveSymbol(token) );
+      }  
+
     } else if ( token == "DETENTS" ) {
       *AC_cfg >> NumDetents;
       for (int i=0;i<NumDetents;i++) {
@@ -90,10 +88,10 @@ FGKinemat::FGKinemat(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
 
       IsOutput = true;
       *AC_cfg >> sOutputIdx;
-      OutputNode = PropertyManager->GetNode( 
-                     fcs->GetState()->GetPropertyName(sOutputIdx) );
+      OutputNode = PropertyManager->GetNode(sOutputIdx);
     }
   }
+  FGFCSComponent::bind( PropertyManager->GetNode("fcs/components") );
 
   Debug(0);
 }
@@ -202,8 +200,7 @@ void FGKinemat::Debug(int from)
 
   if (debug_lvl & 1) { // Standard console startup message output
     if (from == 0) { // Constructor
-      cout << "      ID: " << ID << endl;
-      cout << "      INPUT: " << InputNode->getName() << endl;
+      cout << "      INPUT: " << InputNodes[0]->getName() << endl;
       cout << "      DETENTS: " << NumDetents << endl;
       for (int i=0;i<NumDetents;i++) {
         cout << "        " << Detents[i] << " " << TransitionTimes[i] << endl;
index 5fb742a771623f3eab4b28966d873200152724cd..a8cf19ee2ff35b9e6d11ae9f195eef31e1dcd58d 100644 (file)
@@ -51,13 +51,10 @@ FGSummer::FGSummer(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
                                                        AC_cfg(AC_cfg)
 {
   string token,sOutputIdx;
-  eParam tmpInputIndex;
-  InputRec *input;
 
   clip = false;
   clipmin = clipmax = 0.0;
   Bias = 0.0;
-  Inputs.clear();
 
   Type = AC_cfg->GetValue("TYPE");
   Name = AC_cfg->GetValue("NAME");
@@ -69,26 +66,9 @@ FGSummer::FGSummer(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
     if (token == "ID") {
       *AC_cfg >> ID;
     } else if (token == "INPUT") {
-      input = new InputRec;
       token = AC_cfg->GetValue("INPUT");
-      if (token.find("FG_") != token.npos) {
-        *AC_cfg >> token;
-        input->Node = PropertyManager->GetNode( 
-                            fcs->GetState()->GetPropertyName(token) );
-        input->Idx=-1;                    
-        input->Type = itPilotAC;
-      } else if (token.find(".") != token.npos) { // bias
-        *AC_cfg >> Bias;
-        input->Node=0;
-        input->Idx=0;
-        input->Type=itBias;
-      } else {
-        *AC_cfg >> tmpInputIndex;
-        input->Idx=tmpInputIndex;
-        input->Node=0;
-        input->Type=itFCS;
-      }
-      Inputs.push_back(input);
+      *AC_cfg >> token;
+      InputNodes.push_back( resolveSymbol(token) );
     } else if (token == "CLIPTO") {
       *AC_cfg >> clipmin >> clipmax;
       if (clipmax > clipmin) {
@@ -97,10 +77,11 @@ FGSummer::FGSummer(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
     } else if (token == "OUTPUT") {
       IsOutput = true;
       *AC_cfg >> sOutputIdx;
-      OutputNode = PropertyManager->GetNode( 
-                            fcs->GetState()->GetPropertyName(sOutputIdx) );
+      OutputNode = PropertyManager->GetNode(sOutputIdx);
     }
   }
+  FGFCSComponent::bind( PropertyManager->GetNode("fcs/components",true) );
 
   Debug(0);
 }
@@ -109,10 +90,6 @@ FGSummer::FGSummer(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
 
 FGSummer::~FGSummer()
 {
-  unsigned i;
-  for (i=0;i<Inputs.size();i++) {
-    delete Inputs[i];
-  }  
   Debug(1);
 }
 
@@ -127,18 +104,8 @@ bool FGSummer::Run(void )
 
   Output = 0.0;
 
-  for (idx=0; idx<Inputs.size(); idx++) {
-    switch (Inputs[idx]->Type) {
-    case itPilotAC:
-      Output += Inputs[idx]->Node->getDoubleValue();
-      break;
-    case itFCS:
-      Output += fcs->GetComponentOutput(Inputs[idx]->Idx);
-      break;
-    case itBias:
-      Output += Bias;
-      break;
-    }
+  for (idx=0; idx<InputNodes.size(); idx++) {
+    Output += InputNodes[idx]->getDoubleValue();
   }
 
   if (clip) {
@@ -176,21 +143,9 @@ void FGSummer::Debug(int from)
 
   if (debug_lvl & 1) { // Standard console startup message output
     if (from == 0) { // Constructor
-      cout << "      ID: " << ID << endl;
       cout << "      INPUTS: " << endl;
-      for (unsigned i=0;i<Inputs.size();i++) {
-        switch (Inputs[i]->Type) {
-        case itPilotAC:
-          cout << "       " << Inputs[i]->Node->getName() << endl;
-          break;
-        case itFCS:
-          cout << "        FCS Component " << Inputs[i]->Idx << " (" << 
-                              fcs->GetComponentName(Inputs[i]->Idx) << ")" << endl;
-          break;
-        case itBias:
-          cout << "        " << "Bias of " << Bias << endl;
-          break;
-        }
+      for (unsigned i=0;i<InputNodes.size();i++) {
+        cout << "       " << InputNodes[i]->getName() << endl;
       }
       if (clip) cout << "      CLIPTO: " << clipmin 
                                   << ", " << clipmax << endl;
index 42454bd88b9d00ce1b2b7b70d3b20a9ad4601b12..e8817cb87156df1d3ae295fce9332931b8d79939 100644 (file)
@@ -100,12 +100,6 @@ public:
 
 private:
   FGConfigFile* AC_cfg;
-  typedef struct {
-    FGPropertyManager* Node;
-    int Idx;
-    int Type;
-  } InputRec;   
-  vector <InputRec*> Inputs;
   bool clip;
   double clipmin,clipmax;
   double Bias;
index ca0eb0c802d3477996e7b1f1a629d817c16169a0..33e4594257ef9ab94bbad6ffc1cf4a3484db132b 100644 (file)
@@ -53,6 +53,8 @@ FGSwitch::FGSwitch(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
   Type = AC_cfg->GetValue("TYPE");
   Name = AC_cfg->GetValue("NAME");
 
+  FGFCSComponent::bind( PropertyManager->GetNode("fcs/components",true) );
+
   Debug(0);
 }