]> git.mxchange.org Git - flightgear.git/commitdiff
Changes from Norman Vine that 'almost' get 'reset' and 'goto apt' working.
authorcurt <curt>
Fri, 7 Dec 2001 22:38:19 +0000 (22:38 +0000)
committercurt <curt>
Fri, 7 Dec 2001 22:38:19 +0000 (22:38 +0000)
Note there is still a problem when doing a 'reset' after doing
a 'goto'.   Curt says: I also see that doing two subsequent reset's on a
JSBSim model results in a segfault in a deconstructor deep inside JSBSim.

aclocal.m4
src/FDM/LaRCsim.cxx
src/FDM/YASim/YASim.cxx
src/FDM/flight.cxx
src/FDM/flight.hxx
src/GUI/apt_dlg.cxx
src/GUI/gui_local.cxx

index 7d5836b91f4d1fbed719541171644fe7ba3a68b6..78a4037e5c412f8cbb48479f9e8cf5998f0aad3e 100644 (file)
@@ -1,4 +1,4 @@
-dnl aclocal.m4 generated automatically by aclocal 1.4-p4
+dnl aclocal.m4 generated automatically by aclocal 1.4
 
 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
index 32e93444c25d277babb4dbb96e2ea2b4f63dd861..cf3682814c9fbe146ff4a756737171c7a8d56f3a 100644 (file)
@@ -44,24 +44,24 @@ FGLaRCsim::FGLaRCsim( double dt ) {
 
     speed_up = fgGetNode("/sim/speed-up", true);
     aero = fgGetNode("/sim/aero", true);
-    
+
     ls_toplevel_init( 0.0, (char *)(aero->getStringValue().c_str()) );
 
     lsic=new LaRCsimIC; //this needs to be brought up after LaRCsim is
     if ( aero->getStringValue() == "c172" ) {
-       copy_to_LaRCsim(); // initialize all of LaRCsim's vars
-
-       //this should go away someday -- formerly done in fg_init.cxx
-       Mass = 8.547270E+01;
-       I_xx = 1.048000E+03;
-       I_yy = 3.000000E+03;
-       I_zz = 3.530000E+03;
-       I_xz = 0.000000E+00;
+        copy_to_LaRCsim(); // initialize all of LaRCsim's vars
+
+        //this should go away someday -- formerly done in fg_init.cxx
+        Mass = 8.547270E+01;
+        I_xx = 1.048000E+03;
+        I_yy = 3.000000E+03;
+        I_zz = 3.530000E+03;
+        I_xz = 0.000000E+00;
     }
-    
+
     ls_set_model_dt( get_delta_t() );
-    
-               // Initialize our little engine that hopefully might
+
+            // Initialize our little engine that hopefully might
     eng.init( get_delta_t() );
     // dcl - in passing dt to init rather than update I am assuming
     // that the LaRCsim dt is fixed at one value (yes it is 120hz CLO)
@@ -75,15 +75,16 @@ FGLaRCsim::FGLaRCsim( double dt ) {
     // Also note that this is the max quantity - the usable quantity
     // is slightly less
     set_Tank1Fuel(28.0);
-    set_Tank2Fuel(28.0);  
+    set_Tank2Fuel(28.0);
 }
 
 FGLaRCsim::~FGLaRCsim(void) {
     if ( lsic != NULL ) {
-       delete lsic;
-       lsic = NULL;
+        free_engines();
+        delete lsic;
+        lsic = NULL;
     }
-}    
+}
 
 // Initialize the LaRCsim flight model, dt is the time increment for
 // each subsequent iteration through the EOM
@@ -165,7 +166,7 @@ bool FGLaRCsim::update( int multiloop ) {
 
     // copy control positions into the LaRCsim structure
     Lat_control = globals->get_controls()->get_aileron() /
-       speed_up->getIntValue();
+    speed_up->getIntValue();
     Long_control = globals->get_controls()->get_elevator();
     Long_trim = globals->get_controls()->get_elevator_trim();
     Rudder_pedal = globals->get_controls()->get_rudder() /
@@ -173,7 +174,7 @@ bool FGLaRCsim::update( int multiloop ) {
     Flap_handle = 30.0 * globals->get_controls()->get_flaps();
 
     if ( aero->getStringValue() == "c172" ) {
-       Use_External_Engine = 1;
+        Use_External_Engine = 1;
     } else {
        Use_External_Engine = 0;
     }
@@ -599,7 +600,7 @@ void FGLaRCsim::set_ls(void) {
     SG_LOG( SG_FLIGHT, SG_INFO, "     V_north_airmass: " <<  V_north_airmass  );
     SG_LOG( SG_FLIGHT, SG_INFO, "     V_east_airmass: " <<  V_east_airmass  );
     SG_LOG( SG_FLIGHT, SG_INFO, "     V_down_airmass: " <<  V_down_airmass  );
-}  
+}
 
 void FGLaRCsim::snap_shot(void) {
     lsic->SetLatitudeGDRadIC( get_Latitude() );
@@ -623,7 +624,7 @@ void FGLaRCsim::set_Latitude(double lat) {
     lsic->SetLatitudeGDRadIC(lat);
     set_ls();
     copy_from_LaRCsim(); //update the bus
-}  
+}
 
 void FGLaRCsim::set_Longitude(double lon) {
     SG_LOG( SG_FLIGHT, SG_INFO, "FGLaRCsim::set_Longitude: " << lon  );
@@ -631,7 +632,7 @@ void FGLaRCsim::set_Longitude(double lon) {
     lsic->SetLongitudeRadIC(lon);
     set_ls();
     copy_from_LaRCsim(); //update the bus
-}  
+}
 
 void FGLaRCsim::set_Altitude(double alt) {
     SG_LOG( SG_FLIGHT, SG_INFO, "FGLaRCsim::set_Altitude: " << alt  );
@@ -648,7 +649,7 @@ void FGLaRCsim::set_V_calibrated_kts(double vc) {
     lsic->SetVcalibratedKtsIC(vc);
     set_ls();
     copy_from_LaRCsim(); //update the bus
-}  
+}
 
 void FGLaRCsim::set_Mach_number(double mach) {
     SG_LOG( SG_FLIGHT, SG_INFO, "FGLaRCsim::set_Mach_number: " << mach  );
@@ -656,7 +657,7 @@ void FGLaRCsim::set_Mach_number(double mach) {
     lsic->SetMachIC(mach);
     set_ls();
     copy_from_LaRCsim(); //update the bus
-}  
+}
 
 void FGLaRCsim::set_Velocities_Local( double north, double east, double down ){
     SG_LOG( SG_FLIGHT, SG_INFO, "FGLaRCsim::set_Velocities_local: " 
@@ -665,7 +666,7 @@ void FGLaRCsim::set_Velocities_Local( double north, double east, double down ){
     lsic->SetVNEDFpsIC(north, east, down);
     set_ls();
     copy_from_LaRCsim(); //update the bus
-}  
+}
 
 void FGLaRCsim::set_Velocities_Wind_Body( double u, double v, double w){
     SG_LOG( SG_FLIGHT, SG_INFO, "FGLaRCsim::set_Velocities_Wind_Body: " 
@@ -674,7 +675,7 @@ void FGLaRCsim::set_Velocities_Wind_Body( double u, double v, double w){
     lsic->SetUVWFpsIC(u,v,w);
     set_ls();
     copy_from_LaRCsim(); //update the bus
-} 
+}
 
 //Euler angles 
 void FGLaRCsim::set_Euler_Angles( double phi, double theta, double psi ) {
@@ -686,8 +687,8 @@ void FGLaRCsim::set_Euler_Angles( double phi, double theta, double psi ) {
     lsic->SetRollAngleRadIC(phi);
     lsic->SetHeadingRadIC(psi);
     set_ls();
-    copy_from_LaRCsim(); //update the bus 
-}  
+    copy_from_LaRCsim(); //update the bus
+}
 
 //Flight Path
 void FGLaRCsim::set_Climb_Rate( double roc) {
@@ -695,24 +696,24 @@ void FGLaRCsim::set_Climb_Rate( double roc) {
     snap_shot();
     lsic->SetClimbRateFpsIC(roc);
     set_ls();
-    copy_from_LaRCsim(); //update the bus 
-}  
+    copy_from_LaRCsim(); //update the bus
+}
 
 void FGLaRCsim::set_Gamma_vert_rad( double gamma) {
     SG_LOG( SG_FLIGHT, SG_INFO, "FGLaRCsim::set_Gamma_vert_rad: " << gamma  );
     snap_shot();
     lsic->SetFlightPathAngleRadIC(gamma);
     set_ls();
-    copy_from_LaRCsim(); //update the bus  
-}  
+    copy_from_LaRCsim(); //update the bus
+}
 
 void FGLaRCsim::set_Runway_altitude(double ralt) {
     SG_LOG( SG_FLIGHT, SG_INFO, "FGLaRCsim::set_Runway_altitude: " << ralt  );
     snap_shot();
     lsic->SetRunwayAltitudeFtIC(ralt);
     set_ls();
-    copy_from_LaRCsim(); //update the bus 
-} 
+    copy_from_LaRCsim(); //update the bus
+}
 
 void FGLaRCsim::set_AltitudeAGL(double altagl) {
     SG_LOG( SG_FLIGHT, SG_INFO, "FGLaRCsim::set_AltitudeAGL: " << altagl  );
@@ -731,7 +732,7 @@ void FGLaRCsim::set_Velocities_Local_Airmass (double wnorth,
     lsic->SetVNEDAirmassFpsIC( wnorth, weast, wdown );
     set_ls();
     copy_from_LaRCsim();
-}     
+}
 
 void FGLaRCsim::set_Static_pressure(double p) { 
     SG_LOG( SG_FLIGHT, SG_INFO, 
@@ -748,7 +749,7 @@ void FGLaRCsim::set_Static_temperature(double T) {
 
 }
 
-void FGLaRCsim::set_Density(double rho) { 
+void FGLaRCsim::set_Density(double rho) {
     SG_LOG( SG_FLIGHT, SG_INFO, "FGLaRCsim::set_Density: " << rho  );
     SG_LOG( SG_FLIGHT, SG_INFO, 
            "LaRCsim does not support externally supplied atmospheric data" );
index 2f4c9a11168b07e89735491686b6d6ad7a90d49a..da2a2d0bd78528348e029521361625f7861d89aa 100644 (file)
@@ -108,7 +108,7 @@ void YASim::init()
     // Build a filename and parse it
     SGPath f(globals->get_fg_root());
     f.append("Aircraft-yasim");
-    f.append(fgGetString("/sim/aircraft"));
+    f.append(fgGetString("/sim/aero"));
     f.concat(".xml");
     readXML(f.str(), *_fdm);
 
index fc9d0cab400d2f88af49103129a2d9c50b3625e4..348fe3aa33c88fa84502e09c4f8b7cd455ec55e3 100644 (file)
@@ -52,10 +52,10 @@ FGInterface base_fdm_state;
 
 inline void init_vec(FG_VECTOR_3 vec) {
     vec[0] = 0.0; vec[1] = 0.0; vec[2] = 0.0;
-}  
+}
 
 FGEngInterface::FGEngInterface() {
-    
+
     // inputs
     Throttle=0;
     Mixture=0;
@@ -77,7 +77,7 @@ FGGearInterface::FGGearInterface(void) {
     x=y=z=0.0;
     brake=rolls=WoW=false;
     position=1.0;
-}    
+}
 
 FGGearInterface::~FGGearInterface() {
 }
@@ -85,7 +85,7 @@ FGGearInterface::~FGGearInterface() {
 // Constructor
 FGInterface::FGInterface() {
     _setup();
-}  
+}
 
 FGInterface::FGInterface( double dt ) {
     _setup();
@@ -95,7 +95,7 @@ FGInterface::FGInterface( double dt ) {
 
 // Destructor
 FGInterface::~FGInterface() {
-//   unbind();                 // FIXME: should be called explicitly
+    // unbind();                   // FIXME: should be called explicitly
 }
 
 
@@ -130,38 +130,38 @@ FGInterface::_setup ()
     init_vec( n_pilot_body_v );
     init_vec( omega_dot_body_v );
     init_vec( v_local_v );
-    init_vec( v_local_rel_ground_v ); 
-    init_vec( v_local_airmass_v );    
-    init_vec( v_local_rel_airmass_v );  
-    init_vec( v_local_gust_v ); 
-    init_vec( v_wind_body_v );     
-    init_vec( omega_body_v );         
-    init_vec( omega_local_v );        
-    init_vec( omega_total_v );       
+    init_vec( v_local_rel_ground_v );
+    init_vec( v_local_airmass_v );
+    init_vec( v_local_rel_airmass_v );
+    init_vec( v_local_gust_v );
+    init_vec( v_wind_body_v );
+    init_vec( omega_body_v );
+    init_vec( omega_local_v );
+    init_vec( omega_total_v );
     init_vec( euler_rates_v );
-    init_vec( geocentric_rates_v );   
+    init_vec( geocentric_rates_v );
     init_vec( geocentric_position_v );
     init_vec( geodetic_position_v );
     init_vec( euler_angles_v );
-    init_vec( d_cg_rwy_local_v );     
-    init_vec( d_cg_rwy_rwy_v );       
-    init_vec( d_pilot_rwy_local_v );  
-    init_vec( d_pilot_rwy_rwy_v );    
+    init_vec( d_cg_rwy_local_v );
+    init_vec( d_cg_rwy_rwy_v );
+    init_vec( d_pilot_rwy_local_v );
+    init_vec( d_pilot_rwy_rwy_v );
     init_vec( t_local_to_body_m[0] );
     init_vec( t_local_to_body_m[1] );
     init_vec( t_local_to_body_m[2] );
-    
+
     mass=i_xx=i_yy=i_zz=i_xz=0;
-    nlf=0;  
+    nlf=0;
     v_rel_wind=v_true_kts=v_rel_ground=v_inertial=0;
     v_ground_speed=v_equiv=v_equiv_kts=0;
     v_calibrated=v_calibrated_kts=0;
-    gravity=0;            
-    centrifugal_relief=0; 
-    alpha=beta=alpha_dot=beta_dot=0;   
+    gravity=0;
+    centrifugal_relief=0;
+    alpha=beta=alpha_dot=beta_dot=0;
     cos_alpha=sin_alpha=cos_beta=sin_beta=0;
     cos_phi=sin_phi=cos_theta=sin_theta=cos_psi=sin_psi=0;
-    gamma_vert_rad=gamma_horiz_rad=0;    
+    gamma_vert_rad=gamma_horiz_rad=0;
     sigma=density=v_sound=mach_number=0;
     static_pressure=total_pressure=impact_pressure=0;
     dynamic_pressure=0;
@@ -170,7 +170,7 @@ FGInterface::_setup ()
     runway_altitude=runway_latitude=runway_longitude=0;
     runway_heading=0;
     radius_to_rwy=0;
-    climb_rate=0;           
+    climb_rate=0;
     sin_lat_geocentric=cos_lat_geocentric=0;
     sin_latitude=cos_latitude=0;
     sin_longitude=cos_longitude=0;
@@ -185,7 +185,7 @@ FGInterface::init () {}
  *
  * Subclasses of FGInterface may do their own, additional initialization,
  * but there is some that is common to all.  Normally, they should call
- * this before they begin their own init to make sure the basic structures 
+ * this before they begin their own init to make sure the basic structures
  * are set up properly.
  */
 void
@@ -217,7 +217,7 @@ FGInterface::common_init ()
             "...initializing ground elevation to " << ground_elev_ft
             << "ft..." );
     SG_LOG( SG_FLIGHT, SG_INFO, "common_init(): set ground elevation "
-            << ground_elev_ft ); 
+            << ground_elev_ft );
     base_fdm_state.set_Runway_altitude( ground_elev_ft );
     set_Runway_altitude( ground_elev_ft );
 
@@ -290,33 +290,33 @@ FGInterface::bind ()
   bound = true;
 
                                 // Time management (read-only)
-  fgTie("/fdm/time/delta_t", this, 
-       &FGInterface::get_delta_t); // read-only
-  fgTie("/fdm/time/elapsed", this, 
-       &FGInterface::get_elapsed); // read-only
-  fgTie("/fdm/time/remainder", this, 
-       &FGInterface::get_remainder); // read-only
-  fgTie("/fdm/time/multi_loop", this, 
-       &FGInterface::get_multi_loop); // read-only
+  fgTie("/fdm/time/delta_t", this,
+        &FGInterface::get_delta_t); // read-only
+  fgTie("/fdm/time/elapsed", this,
+        &FGInterface::get_elapsed); // read-only
+  fgTie("/fdm/time/remainder", this,
+        &FGInterface::get_remainder); // read-only
+  fgTie("/fdm/time/multi_loop", this,
+        &FGInterface::get_multi_loop); // read-only
 
                        // Aircraft position
   fgTie("/position/latitude-deg", this,
-       &FGInterface::get_Latitude_deg,
-       &FGInterface::set_Latitude_deg,
-       false);
+        &FGInterface::get_Latitude_deg,
+        &FGInterface::set_Latitude_deg,
+        false);
   fgSetArchivable("/position/latitude-deg");
   fgTie("/position/longitude-deg", this,
-       &FGInterface::get_Longitude_deg,
-       &FGInterface::set_Longitude_deg,
-       false);
+        &FGInterface::get_Longitude_deg,
+        &FGInterface::set_Longitude_deg,
+        false);
   fgSetArchivable("/position/longitude-deg");
   fgTie("/position/altitude-ft", this,
-       &FGInterface::get_Altitude,
-       &FGInterface::set_Altitude,
-       false);
+        &FGInterface::get_Altitude,
+        &FGInterface::set_Altitude,
+        false);
   fgSetArchivable("/position/altitude-ft");
   fgTie("/position/altitude-agl-ft", this,
-       &FGInterface::get_Altitude_AGL); // read-only
+        &FGInterface::get_Altitude_AGL); // read-only
 
                                // Orientation
   fgTie("/orientation/roll-deg", this,
@@ -471,6 +471,25 @@ FGInterface::unbind ()
   }
 }
 
+void
+FGInterface::free_engines ()
+{
+    int i;
+    for ( i = 0; i < get_num_engines(); ++i ) {
+        delete get_engine(i);
+    }
+    engines.clear();
+}
+
+void
+FGInterface::free_gear_units ()
+{
+    int i;
+    for ( i = 0; i < get_num_gear(); ++i ) {
+        delete [] get_gear_unit(i);
+    }
+    gear.clear();
+}
 
 /**
  * Update the state of the FDM (i.e. run the equations of motion).
@@ -487,10 +506,10 @@ bool FGInterface::update( int multi_loop ) {
     return false;
 }
 
-  
+
 void FGInterface::_updatePosition( double lat_geoc, double lon, double alt ) {
     double lat_geod, tmp_alt, sl_radius1, sl_radius2, tmp_lat_geoc;
-       
+
     // cout << "starting sea level rad = " << get_Sea_level_radius() << endl;
 
     sgGeocToGeod( lat_geoc, ( get_Sea_level_radius() + alt ) * SG_FEET_TO_METER,
@@ -510,31 +529,31 @@ void FGInterface::_updatePosition( double lat_geoc, double lon, double alt ) {
                              sl_radius2 * SG_METER_TO_FEET + alt );
        
     _set_Geodetic_Position( lat_geod, lon, alt );
-       
+
     _set_Sea_level_radius( sl_radius2 * SG_METER_TO_FEET );
-    _set_Runway_altitude( scenery.get_cur_elev() * SG_METER_TO_FEET ); 
-       
+    _set_Runway_altitude( scenery.get_cur_elev() * SG_METER_TO_FEET );
+
     _set_sin_lat_geocentric( lat_geoc );
     _set_cos_lat_geocentric( lat_geoc );
-       
+
     _set_sin_cos_longitude( lon );
-       
+
     _set_sin_cos_latitude( lat_geod );
-       
+
     /* Norman's code for slope of the terrain */
     /* needs to be tested -- get it on the HUD and taxi around */
     /* double *tnorm = scenery.cur_normal;
-       
+
        double sy = sin ( -get_Psi() ) ;
        double cy = cos ( -get_Psi() ) ;
 
        double phitb, thetatb, psitb;
-       if(tnorm[1] != 0.0) {
-               psitb = -atan2 ( tnorm[0], tnorm[1] );
+       if ( tnorm[1] != 0.0 ) {
+           psitb = -atan2 ( tnorm[0], tnorm[1] );
        }
-       if(tnorm[2] != 0.0) {   
-               thetatb =  atan2 ( tnorm[0] * cy - tnorm[1] * sy, tnorm[2] );
-               phitb = -atan2 ( tnorm[1] * cy + tnorm[0] * sy, tnorm[2] );  
+       if ( tnorm[2] != 0.0 ) {        
+          thetatb =  atan2 ( tnorm[0] * cy - tnorm[1] * sy, tnorm[2] );
+          phitb = -atan2 ( tnorm[1] * cy + tnorm[0] * sy, tnorm[2] );  
        }       
        
        _set_terrain_slope(phitb, thetatb, psitb) 
@@ -575,7 +594,7 @@ void FGInterface::extrapolate( int time_offset ) {
 // Set the altitude (force)
 void fgFDMForceAltitude(const string &model, double alt_meters) {
     SG_LOG(SG_FLIGHT,SG_INFO, "fgFDMForceAltitude: " << alt_meters );
-    
+
     double sea_level_radius_meters;
     double lat_geoc;
 
@@ -589,7 +608,7 @@ void fgFDMForceAltitude(const string &model, double alt_meters) {
                
     cur_fdm_state->set_Altitude( alt_meters * SG_METER_TO_FEET );
     cur_fdm_state->set_Sea_level_radius( sea_level_radius_meters * 
-           SG_METER_TO_FEET );                   
+                                         SG_METER_TO_FEET );                     
 
     // additional work needed for some flight models
     if ( model == "larcsim" ) {
@@ -599,38 +618,38 @@ void fgFDMForceAltitude(const string &model, double alt_meters) {
 
 
 // Positions
-void FGInterface::set_Latitude(double lat) { 
+void FGInterface::set_Latitude(double lat) {
     geodetic_position_v[0] = lat;
-}  
+}
 
 void FGInterface::set_Longitude(double lon) {
     geodetic_position_v[1] = lon;
-}       
+}
 
 void FGInterface::set_Altitude(double alt) {
     geodetic_position_v[2] = alt;
-}          
+}
 
 void FGInterface::set_AltitudeAGL(double altagl) {
     altitude_agl=altagl;
-}  
+}
 
 // Velocities
 void FGInterface::set_V_calibrated_kts(double vc) {
     v_calibrated_kts = vc;
-}  
+}
 
 void FGInterface::set_Mach_number(double mach) {
     mach_number = mach;
-}  
+}
 
 void FGInterface::set_Velocities_Local( double north, 
                                        double east, 
                                        double down ){
     v_local_v[0] = north;
     v_local_v[1] = east;
-    v_local_v[2] = down;                                                 
-}  
+    v_local_v[2] = down;
+}
 
 void FGInterface::set_Velocities_Wind_Body( double u, 
                                            double v, 
@@ -638,7 +657,7 @@ void FGInterface::set_Velocities_Wind_Body( double u,
     v_wind_body_v[0] = u;
     v_wind_body_v[1] = v;
     v_wind_body_v[2] = w;
-} 
+}
 
 // Euler angles 
 void FGInterface::set_Euler_Angles( double phi, 
@@ -652,20 +671,20 @@ void FGInterface::set_Euler_Angles( double phi,
 // Flight Path
 void FGInterface::set_Climb_Rate( double roc) {
     climb_rate = roc;
-}  
+}
 
 void FGInterface::set_Gamma_vert_rad( double gamma) {
     gamma_vert_rad = gamma;
-}  
+}
 
 // Earth
 void FGInterface::set_Sea_level_radius(double slr) {
     sea_level_radius = slr;
-}  
+}
 
 void FGInterface::set_Runway_altitude(double ralt) {
     runway_altitude = ralt;
-}  
+}
 
 void FGInterface::set_Static_pressure(double p) { static_pressure = p; }
 void FGInterface::set_Static_temperature(double T) { static_temperature = T; }
@@ -677,7 +696,7 @@ void FGInterface::set_Velocities_Local_Airmass (double wnorth,
     v_local_airmass_v[0] = wnorth;
     v_local_airmass_v[1] = weast;
     v_local_airmass_v[2] = wdown;
-}     
+}
 
 
 void FGInterface::_busdump(void) {
@@ -719,7 +738,7 @@ void FGInterface::_busdump(void) {
     SG_LOG(SG_FLIGHT,SG_INFO,"d_cg_rwy_rwy_v[3]: " << d_cg_rwy_rwy_v[0] << ", " << d_cg_rwy_rwy_v[1] << ", " << d_cg_rwy_rwy_v[2]);
     SG_LOG(SG_FLIGHT,SG_INFO,"d_pilot_rwy_local_v[3]: " << d_pilot_rwy_local_v[0] << ", " << d_pilot_rwy_local_v[1] << ", " << d_pilot_rwy_local_v[2]);
     SG_LOG(SG_FLIGHT,SG_INFO,"d_pilot_rwy_rwy_v[3]: " << d_pilot_rwy_rwy_v[0] << ", " << d_pilot_rwy_rwy_v[1] << ", " << d_pilot_rwy_rwy_v[2]);
-  
+
     SG_LOG(SG_FLIGHT,SG_INFO,"t_local_to_body_m[0][3]: " << t_local_to_body_m[0][0] << ", " << t_local_to_body_m[0][1] << ", " << t_local_to_body_m[0][2]);
     SG_LOG(SG_FLIGHT,SG_INFO,"t_local_to_body_m[1][3]: " << t_local_to_body_m[1][0] << ", " << t_local_to_body_m[1][1] << ", " << t_local_to_body_m[1][2]);
     SG_LOG(SG_FLIGHT,SG_INFO,"t_local_to_body_m[2][3]: " << t_local_to_body_m[2][0] << ", " << t_local_to_body_m[2][1] << ", " << t_local_to_body_m[2][2]);
@@ -782,7 +801,7 @@ void FGInterface::_busdump(void) {
     SG_LOG(SG_FLIGHT,SG_INFO,"sin_latitude: " << sin_latitude );
     SG_LOG(SG_FLIGHT,SG_INFO,"cos_latitude: " << cos_latitude );
     SG_LOG(SG_FLIGHT,SG_INFO,"altitude_agl: " << altitude_agl );
-}  
+}
 
 
 void fgToggleFDMdataLogging(void) {
index f37ada9eee24bdafe4f377f66af0cdf066ef93f8..34f8c7a6a49a9e204f19107217e9f61cdd77d192 100644 (file)
@@ -1222,6 +1222,8 @@ public:
     inline void add_engine( FGEngInterface e ) {
        engines.push_back( e );
     }
+
+    void free_engines();
     
     //gear
     inline int get_num_gear() const {
@@ -1234,7 +1236,10 @@ public:
     
     inline void add_gear_unit( FGGearInterface fgi ) {
        gear.push_back( fgi );
-    }        
+    }
+
+    void free_gear_units();
+       
 };
 
 
index 23041f18a24b856f7aaea79cf3dcfb2bd1905205..6a5581dd8f22d86f7dd87196e91253ed631bd635 100644 (file)
@@ -82,35 +82,35 @@ void AptDialog_OK (puObject *)
                 << AptId );
 
         if ( airports.search( AptId, &a ) )
-            {
-               // unbind the current fdm state so property changes
-               // don't get lost when we subsequently delete this fdm
-               // and create a new one.
-               cur_fdm_state->unbind();
-
-                AptId = a.id.c_str();  /// NHV fix wrong case crash
-                fgSetString("/sim/startup/airport-id",  AptId.c_str() );
-                // fgSetDouble("/position/altitude-ft", -9999.0 );
-                // fgSetPosFromAirportID( AptId );
-                fgSetPosFromAirportIDandHdg( AptId, 
-                                             cur_fdm_state->get_Psi() *
-                                             SGD_RADIANS_TO_DEGREES);
-                BusyCursor(0);
-                fgReInitSubsystems();
-                // if ( global_tile_mgr.init() ) {
-                    // Load the local scenery data
-                    global_tile_mgr.update( longitude->getDoubleValue(),
-                                            latitude->getDoubleValue() );
-               // } else {
-                    // SG_LOG( SG_GENERAL, SG_ALERT, 
-                            // "Error in Tile Manager initialization!" );
-                    // exit(-1);
-                // }
-                BusyCursor(1);
-            } else {
-                AptId  += " not in database.";
-                mkDialog(AptId.c_str());
-            }
+        {
+            // unbind the current fdm state so property changes
+            // don't get lost when we subsequently delete this fdm
+            // and create a new one.
+            cur_fdm_state->unbind();
+        
+            AptId = a.id.c_str();  /// NHV fix wrong case crash
+            fgSetString("/sim/startup/airport-id",  AptId.c_str() );
+            // fgSetDouble("/position/altitude-ft", -9999.0 );
+            // fgSetPosFromAirportID( AptId );
+            fgSetPosFromAirportIDandHdg( AptId, 
+                                         cur_fdm_state->get_Psi() *
+                                         SGD_RADIANS_TO_DEGREES);
+            BusyCursor(0);
+            fgReInitSubsystems();
+            // if ( global_tile_mgr.init() ) {
+            // Load the local scenery data
+            global_tile_mgr.update( longitude->getDoubleValue(),
+                                    latitude->getDoubleValue() );
+            // } else {
+            // SG_LOG( SG_GENERAL, SG_ALERT, 
+            // "Error in Tile Manager initialization!" );
+            // exit(-1);
+            // }
+            BusyCursor(1);
+        } else {
+            AptId  += " not in database.";
+            mkDialog(AptId.c_str());
+        }
     }
     if ( !freeze ) {
         globals->set_freeze( false );
@@ -130,7 +130,7 @@ void NewAirport(puObject *cb)
 {
     //  strncpy( NewAirportId, fgGetString("/sim/startup/airport-id").c_str(), 16 );
     sprintf( NewAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
-    // cout << "NewAirport " << NewAirportId << endl;
+    // cout << "NewAirport " << NewAirportId << endl;
     AptDialogInput->setValue( NewAirportId );
 
     FG_PUSH_PUI_DIALOG( AptDialog );
index 1eab13b41bf912402183f19795da88f4c4de2f91..1506577c54abaacce5b3b85934e75f1d23b6a00a 100644 (file)
@@ -6,12 +6,16 @@
 #  include <windows.h>
 #endif
 
-#include <GL/glut.h>           // needed before pu.h
-#include <plib/pu.h>           // plib include
+#include <GL/glut.h>        // needed before pu.h
+#include <plib/pu.h>        // plib include
+
+#include <FDM/flight.hxx>
 
 #include <Main/globals.hxx>
 #include <Main/fg_init.hxx>
 #include <Main/fg_props.hxx>
+#include <Scenery/tilemgr.hxx>
+#include <Time/light.hxx>
 
 #include "gui.h"
 #include "trackball.h"
@@ -32,36 +36,60 @@ float curGuiQuat[4];
 float GuiQuat_mat[4][4];
 
 void Quat0( void ) {
-       curGuiQuat[0] = _quat0[0];
-       curGuiQuat[1] = _quat0[1];
-       curGuiQuat[2] = _quat0[2];
-       curGuiQuat[3] = _quat0[3];
+    curGuiQuat[0] = _quat0[0];
+    curGuiQuat[1] = _quat0[1];
+    curGuiQuat[2] = _quat0[2];
+    curGuiQuat[3] = _quat0[3];
 }
 
 void initMouseQuat(void) {
-       trackball(_quat0, 0.0, 0.0, 0.0, 0.0);  
-       Quat0();
-       build_rotmatrix(GuiQuat_mat, curGuiQuat);
+    trackball(_quat0, 0.0, 0.0, 0.0, 0.0);  
+    Quat0();
+    build_rotmatrix(GuiQuat_mat, curGuiQuat);
 }
 
 
 void reInit(puObject *cb)
 {
-       BusyCursor(0);
-       Quat0();
-
-       // in case user has changed window size as
-       // restoreInitialState() overwrites these
-       int xsize = fgGetInt("/sim/startup/xsize");
-       int ysize = fgGetInt("/sim/startup/ysize");
-
-       build_rotmatrix(GuiQuat_mat, curGuiQuat);
-       /* check */ globals->restoreInitialState();
-
-       fgReInitSubsystems();
-
-       fgReshape( xsize, ysize );
-
-       BusyCursor(1);
+    BusyCursor(0);
+    Quat0();
+
+    int freeze = globals->get_freeze();
+    if(!freeze)
+        globals->set_freeze( true );
+
+    cur_fdm_state->unbind();
+
+    // in case user has changed window size as
+    // restoreInitialState() overwrites these
+    int xsize = fgGetInt("/sim/startup/xsize");
+    int ysize = fgGetInt("/sim/startup/ysize");
+
+    build_rotmatrix(GuiQuat_mat, curGuiQuat);
+
+    globals->restoreInitialState();
+
+       // Unsuccessful KLUDGE to fix the 'every other time'
+       // problem when doing a 'reset' after a 'goto airport'
+       
+       // string AptId( fgGetString("/sim/startup/airport-id") );
+       // if( AptId.c_str() != "\0" )
+       //      fgSetPosFromAirportID( AptId );
+       
+    fgReInitSubsystems();
+
+    // reduntant(fgReInitSubsystems) ?
+    global_tile_mgr.update( fgGetDouble("/position/longitude-deg"),
+                            fgGetDouble("/position/latitude-deg") );
+    
+    cur_light_params.Update();
+
+    fgReshape( xsize, ysize );
+
+    BusyCursor(1);
+    
+    if ( !freeze ) {
+        globals->set_freeze( false );
+    }
 }