]> git.mxchange.org Git - flightgear.git/blobdiff - Main/fg_init.cxx
Beginning work on compensating for sim time vs. real world time "jitter".
[flightgear.git] / Main / fg_init.cxx
index ec3dea84eb9e608eb05143ec72ce028e54a079b7..58ebc1a57ab7effc74115697171926435ddb57f7 100644 (file)
 #include <string>
 
 #include <Include/fg_constants.h>
-#include <Include/general.h>
 
-#include <Aircraft/aircraft.h>
+#include <Aircraft/aircraft.hxx>
 #include <Airports/simple.hxx>
-#include <Astro/moon.hxx>
-#include <Astro/planets.hxx>
 #include <Astro/sky.hxx>
 #include <Astro/stars.hxx>
-#include <Astro/sun.hxx>
-#include <Autopilot/autopilot.h>
+#include <Astro/solarsystem.hxx>
+#include <Autopilot/autopilot.hxx>
 #include <Cockpit/cockpit.hxx>
-#include <Debug/fg_debug.h>
-#include <Joystick/joystick.h>
-#include <Math/fg_geodesy.h>
+#include <Debug/logstream.hxx>
+#include <Joystick/joystick.hxx>
+#include <Math/fg_geodesy.hxx>
 #include <Math/fg_random.h>
+#include <Math/point3d.hxx>
 #include <Math/polar3d.hxx>
 #include <Scenery/scenery.hxx>
 #include <Scenery/tilemgr.hxx>
@@ -62,7 +60,7 @@
 #include <Time/fg_time.hxx>
 #include <Time/light.hxx>
 #include <Time/sunpos.hxx>
-#include <Weather/weather.h>
+#include <Weather/weather.hxx>
 
 #include "fg_init.hxx"
 #include "options.hxx"
@@ -75,9 +73,9 @@ extern const char *default_root;
 // Set initial position and orientation
 int fgInitPosition( void ) {
     string id;
-    fgFLIGHT *f;
+    FGState *f;
 
-    f = current_aircraft.flight;
+    f = current_aircraft.fdm_state;
 
     id = current_options.get_airport_id();
     if ( id.length() ) {
@@ -86,36 +84,36 @@ int fgInitPosition( void ) {
        fgAIRPORTS airports;
        fgAIRPORT a;
 
-       fgPrintf( FG_GENERAL, FG_INFO, 
-                 "Attempting to set starting position from airport code %s.\n",
-                 id.c_str() );
+       FG_LOG( FG_GENERAL, FG_INFO, 
+               "Attempting to set starting position from airport code "
+               << id );
 
        airports.load("apt_simple");
-       a = airports.search( (char *)id.c_str() );
-       if ( (fabs(a.longitude) < FG_EPSILON) &&
-            (fabs(a.latitude) < FG_EPSILON) &&
-            (fabs(a.elevation) < FG_EPSILON) ) {
-           fgPrintf( FG_GENERAL, FG_EXIT, 
-                     "Failed to find %s in database.\n", id.c_str() );
+       if ( ! airports.search( id, &a ) ) {
+           FG_LOG( FG_GENERAL, FG_ALERT, 
+                   "Failed to find " << id << " in database." );
+           exit(-1);
        } else {
-           FG_Longitude = ( a.longitude ) * DEG_TO_RAD;
-           FG_Latitude  = ( a.latitude ) * DEG_TO_RAD;
+           f->set_Longitude( a.longitude * DEG_TO_RAD );
+           f->set_Latitude( a.latitude * DEG_TO_RAD );
        }
     } else {
        // set initial position from default or command line coordinates
 
-       FG_Longitude = current_options.get_lon() * DEG_TO_RAD;
-       FG_Latitude  = current_options.get_lat() * DEG_TO_RAD;
+       f->set_Longitude( current_options.get_lon() * DEG_TO_RAD );
+       f->set_Latitude( current_options.get_lat() * DEG_TO_RAD );
     }
-    printf("starting altitude is = %.2f\n", current_options.get_altitude());
+    FG_LOG( FG_GENERAL, FG_INFO, 
+           "starting altitude is = " << current_options.get_altitude() );
 
-    FG_Altitude = current_options.get_altitude() * METER_TO_FEET;
-    FG_Runway_altitude = FG_Altitude - 3.758099;
+    f->set_Altitude( current_options.get_altitude() * METER_TO_FEET );
+    f->set_Runway_altitude( f->get_Altitude() - 3.758099 );
 
-    fgPrintf( FG_GENERAL, FG_INFO,
-             "Initial position is: (%.4f, %.4f, %.2f)\n", 
-             FG_Longitude * RAD_TO_DEG, FG_Latitude * RAD_TO_DEG, 
-             FG_Altitude * FEET_TO_METER);
+    FG_LOG( FG_GENERAL, FG_INFO,
+           "Initial position is: ("
+           << (f->get_Longitude() * RAD_TO_DEG) << ", " 
+           << (f->get_Latitude() * RAD_TO_DEG) << ", " 
+           << (f->get_Altitude() * FEET_TO_METER) << ")" );
 
     return(1);
 }
@@ -123,83 +121,45 @@ int fgInitPosition( void ) {
 
 // General house keeping initializations
 int fgInitGeneral( void ) {
-    fgGENERAL *g;
     string root;
-    int i;
+    // int i;
 
-    g = &general;
-
-    fgPrintf( FG_GENERAL, FG_INFO, "General Initialization\n" );
-    fgPrintf( FG_GENERAL, FG_INFO, "======= ==============\n" );
-
-    g->glVendor = (char *)glGetString ( GL_VENDOR );
-    g->glRenderer = (char *)glGetString ( GL_RENDERER );
-    g->glVersion = (char *)glGetString ( GL_VERSION );
+    FG_LOG( FG_GENERAL, FG_INFO, "General Initialization" );
+    FG_LOG( FG_GENERAL, FG_INFO, "======= ==============" );
 
     root = current_options.get_fg_root();
     if ( ! root.length() ) {
        // No root path set? Then bail ...
-       fgPrintf( FG_GENERAL, FG_EXIT, "%s %s\n",
-                 "Cannot continue without environment variable FG_ROOT",
-                 "being defined.");
+       FG_LOG( FG_GENERAL, FG_ALERT, 
+               "Cannot continue without environment variable FG_ROOT"
+               << "being defined." );
+       exit(-1);
     }
-    fgPrintf( FG_GENERAL, FG_INFO, "FG_ROOT = %s\n\n", root.c_str() );
+    FG_LOG( FG_GENERAL, FG_INFO, "FG_ROOT = " << root << endl );
 
     // prime the frame rate counter pump
-    for ( i = 0; i < FG_FRAME_RATE_HISTORY; i++ ) {
-       g->frames[i] = 0.0;
-    }
+    // for ( i = 0; i < FG_FRAME_RATE_HISTORY; i++ ) {
+    //    general.frames[i] = 0.0;
+    // }
 
     return ( 1 ); 
 }
 
 
-// convert a geodetic point lon(radians), lat(radians), elev(meter) to
-// a cartesian point
-fgPoint3d geod_to_cart(double geod[3]) {
-    fgPoint3d cp;
-    fgPoint3d pp;
-    double gc_lon, gc_lat, sl_radius;
-
-    // printf("A geodetic point is (%.2f, %.2f, %.2f)\n", 
-    //        geod[0], geod[1], geod[2]);
-
-    gc_lon = geod[0];
-    fgGeodToGeoc(geod[1], geod[2], &sl_radius, &gc_lat);
-
-    // printf("A geocentric point is (%.2f, %.2f, %.2f)\n", gc_lon, 
-    //        gc_lat, sl_radius+geod[2]);
-
-    pp.lon = gc_lon;
-    pp.lat = gc_lat;
-    pp.radius = sl_radius + geod[2];
-    cp = fgPolarToCart3d(pp);
-    
-    // printf("A cart point is (%.8f, %.8f, %.8f)\n", cp.x, cp.y, cp.z);
-
-    return(cp);
-}
-
-
 // This is the top level init routine which calls all the other
 // initialization routines.  If you are adding a subsystem to flight
 // gear, its initialization call should located in this routine.
 // Returns non-zero if a problem encountered.
 int fgInitSubsystems( void )
 {
-    fgFLIGHT *f;
-    fgLIGHT *l;
-    fgTIME *t;
-    fgVIEW *v;
-    double geod_pos[3];
-    fgPoint3d abs_view_pos;
-
-    l = &cur_light_params;
-    t = &cur_time_params;
-    v = &current_view;
+    FGState *f; // assigned later
+    fgLIGHT *l = &cur_light_params;
+    fgTIME *t = &cur_time_params;
+    FGView *v = &current_view;
+    Point3D geod_pos, tmp_abs_view_pos;
 
-    fgPrintf( FG_GENERAL, FG_INFO, "Initialize Subsystems\n");
-    fgPrintf( FG_GENERAL, FG_INFO, "========== ==========\n");
+    FG_LOG( FG_GENERAL, FG_INFO, "Initialize Subsystems");
+    FG_LOG( FG_GENERAL, FG_INFO, "========== ==========");
 
     // seed the random number generater
     fg_srandom();
@@ -207,7 +167,7 @@ int fgInitSubsystems( void )
     // allocates structures so must happen before any of the flight
     // model or control parameters are set
     fgAircraftInit();   // In the future this might not be the case.
-    f = current_aircraft.flight;
+    f = current_aircraft.fdm_state;
 
     // set the initial position
     fgInitPosition();
@@ -216,73 +176,87 @@ int fgInitSubsystems( void )
     if ( fgSceneryInit() ) {
        // Scenery initialized ok.
     } else {
-       fgPrintf( FG_GENERAL, FG_EXIT, "Error in Scenery initialization!\n" );
+       FG_LOG( FG_GENERAL, FG_ALERT, "Error in Scenery initialization!" );
+       exit(-1);
     }
 
     if( fgTileMgrInit() ) {
        // Load the local scenery data
        fgTileMgrUpdate();
     } else {
-       fgPrintf( FG_GENERAL, FG_EXIT, 
-                 "Error in Tile Manager initialization!\n" );
+       FG_LOG( FG_GENERAL, FG_ALERT, "Error in Tile Manager initialization!" );
+       exit(-1);
     }
 
+    // Calculate ground elevation at starting point (we didn't have
+    // tmp_abs_view_pos calculated when fgTileMgrUpdate() was called above
+
     // calculalate a cartesian point somewhere along the line between
-    // the center of the earth and our view position
-    geod_pos[0] = FG_Longitude;
-    geod_pos[1] = FG_Latitude;
-    // doesn't have to be the exact elevation (this is good because we
-    // don't know it yet :-)
-    geod_pos[2] = 0;
-    abs_view_pos = geod_to_cart(geod_pos);
-
-    // Calculate ground elevation at starting point
+    // the center of the earth and our view position.  Doesn't have to
+    // be the exact elevation (this is good because we don't know it
+    // yet :-)
+    geod_pos = Point3D( f->get_Longitude(), f->get_Latitude(), 0.0);
+    tmp_abs_view_pos = fgGeodToCart(geod_pos);
+
+    FG_LOG( FG_GENERAL, FG_DEBUG, 
+           "Altitude before update " << scenery.cur_elev );
+    FG_LOG( FG_GENERAL, FG_DEBUG, 
+           "Initial abs_view_pos = " << tmp_abs_view_pos );
     scenery.cur_elev = 
-       fgTileMgrCurElev( FG_Longitude, FG_Latitude, &abs_view_pos );
-    FG_Runway_altitude = scenery.cur_elev * METER_TO_FEET;
+       fgTileMgrCurElevOLD( f->get_Longitude(), 
+                            f->get_Latitude(),
+                            tmp_abs_view_pos );
+    FG_LOG( FG_GENERAL, FG_DEBUG, 
+           "Altitude after update " << scenery.cur_elev );
+    f->set_Runway_altitude( scenery.cur_elev * METER_TO_FEET );
 
     // Reset our altitude if we are below ground
-    if ( FG_Altitude < FG_Runway_altitude + 3.758099) {
-       FG_Altitude = FG_Runway_altitude + 3.758099;
+    if ( f->get_Altitude() < f->get_Runway_altitude() + 3.758099) {
+       f->set_Altitude( f->get_Runway_altitude() + 3.758099 );
     }
 
-    fgPrintf( FG_GENERAL, FG_INFO,
-             "Updated position (after elevation adj): (%.4f, %.4f, %.2f)\n",
-             FG_Latitude * RAD_TO_DEG, FG_Longitude * RAD_TO_DEG,
-             FG_Altitude * FEET_TO_METER);
-    // end of thing that I just stuck in that I should probably move
-               
+    FG_LOG( FG_GENERAL, FG_INFO,
+           "Updated position (after elevation adj): ("
+           << (f->get_Latitude() * RAD_TO_DEG) << ", " 
+           << (f->get_Longitude() * RAD_TO_DEG) << ", " 
+           << (f->get_Altitude() * FEET_TO_METER) << ")" );
+
+    // We need to calculate a few more values here that would normally
+    // be calculated by the FDM so that the v->UpdateViewMath()
+    // routine doesn't get hosed.
+
+    double sea_level_radius_meters;
+    double lat_geoc;
+    // Set the FG variables first
+    fgGeodToGeoc( f->get_Latitude(), f->get_Altitude(), 
+                 &sea_level_radius_meters, &lat_geoc);
+    f->set_Geocentric_Position( lat_geoc, f->get_Longitude(), 
+                               f->get_Altitude() + 
+                               (sea_level_radius_meters * METER_TO_FEET) );
+    f->set_Sea_level_radius( sea_level_radius_meters * METER_TO_FEET );
+
     // The following section sets up the flight model EOM parameters
     // and should really be read in from one or more files.
 
     // Initial Velocity
-    FG_V_north = 0.0;   //  7.287719E+00
-    FG_V_east  = 0.0;   //  1.521770E+03
-    FG_V_down  = 0.0;   // -1.265722E-05
+    f->set_Velocities_Local( 0.0, 0.0, 0.0 );
 
     // Initial Orientation
-    FG_Phi   = current_options.get_roll()    * DEG_TO_RAD;
-    FG_Theta = current_options.get_pitch()   * DEG_TO_RAD;
-    FG_Psi   = current_options.get_heading() * DEG_TO_RAD;
+    f->set_Euler_Angles( current_options.get_roll() * DEG_TO_RAD,
+                        current_options.get_pitch() * DEG_TO_RAD,
+                        current_options.get_heading() * DEG_TO_RAD );
 
-    // Initial Angular B rates
-    FG_P_body = 7.206685E-05;
-    FG_Q_body = 0.000000E+00;
-    FG_R_body = 9.492658E-05;
+    // Initial Angular Body rates
+    f->set_Omega_Body( 7.206685E-05, 0.0, 9.492658E-05 );
 
-    FG_Earth_position_angle = 0.000000E+00;
+    f->set_Earth_position_angle( 0.0 );
 
     // Mass properties and geometry values
-    FG_Mass = 8.547270E+01;
-    FG_I_xx = 1.048000E+03;
-    FG_I_yy = 3.000000E+03;
-    FG_I_zz = 3.530000E+03;
-    FG_I_xz = 0.000000E+00;
+    f->set_Inertias( 8.547270E+01, 
+                    1.048000E+03, 3.000000E+03, 3.530000E+03, 0.000000E+00 );
 
     // CG position w.r.t. ref. point
-    FG_Dx_cg = 0.000000E+00;
-    FG_Dy_cg = 0.000000E+00;
-    FG_Dz_cg = 0.000000E+00;
+    f->set_CG_Position( 0.0, 0.0, 0.0 );
 
     // Initialize the event manager
     global_events.Init();
@@ -298,36 +272,48 @@ int fgInitSubsystems( void )
     fgTimeUpdate(f, t);
 
     // Initialize view parameters
+    FG_LOG( FG_GENERAL, FG_DEBUG, "Before v->init()");
     v->Init();
+    FG_LOG( FG_GENERAL, FG_DEBUG, "After v->init()");
     v->UpdateViewMath(f);
+    FG_LOG( FG_GENERAL, FG_DEBUG, "  abs_view_pos = " << v->get_abs_view_pos());
     v->UpdateWorldToEye(f);
 
-    // Initialize the orbital elements of sun, moon and mayor planets
-    fgSolarSystemInit(*t);
+    // Build the solar system
+    //fgSolarSystemInit(*t);
+    FG_LOG(FG_GENERAL, FG_INFO, "Building SolarSystem");
+    SolarSystem::theSolarSystem = new SolarSystem(t);
 
     // Initialize the Stars subsystem
     if( fgStarsInit() ) {
        // Stars initialized ok.
     } else {
-       fgPrintf( FG_GENERAL, FG_EXIT, "Error in Stars initialization!\n" );
+       FG_LOG( FG_GENERAL, FG_ALERT, "Error in Stars initialization!" );
+       exit(-1);
     }
 
     // Initialize the planetary subsystem
-    global_events.Register( "fgPlanetsInit()", fgPlanetsInit, 
-                           fgEVENT::FG_EVENT_READY, 600000);
+    // global_events.Register( "fgPlanetsInit()", fgPlanetsInit, 
+    //                     fgEVENT::FG_EVENT_READY, 600000);
 
     // Initialize the sun's position 
-    global_events.Register( "fgSunInit()", fgSunInit, 
-                           fgEVENT::FG_EVENT_READY, 30000 );
+    // global_events.Register( "fgSunInit()", fgSunInit, 
+    //                     fgEVENT::FG_EVENT_READY, 30000 );
 
     // Intialize the moon's position
-    global_events.Register( "fgMoonInit()", fgMoonInit, 
-                           fgEVENT::FG_EVENT_READY, 600000 );
+    // global_events.Register( "fgMoonInit()", fgMoonInit, 
+    //                     fgEVENT::FG_EVENT_READY, 600000 );
 
+    // register the periodic update of Sun, moon, and planets
+    global_events.Register( "ssolsysUpdate", solarSystemRebuild,
+                           fgEVENT::FG_EVENT_READY, 600000);
+    
     // fgUpdateSunPos() needs a few position and view parameters set
     // so it can calculate local relative sun angle and a few other
     // things for correctly orienting the sky.
     fgUpdateSunPos();
+    global_events.Register( "fgUpdateSunPos()", fgUpdateSunPos,
+                           fgEVENT::FG_EVENT_READY, 60000);
 
     // Initialize Lighting interpolation tables
     l->Init();
@@ -339,17 +325,14 @@ int fgInitSubsystems( void )
                            fgEVENT::FG_EVENT_READY, 30000 );
 
     // Initialize the weather modeling subsystem
-    fgWeatherInit();
-
-    // update the weather for our current position
-    global_events.Register( "fgWeatherUpdate()", fgWeatherUpdate,
-                           fgEVENT::FG_EVENT_READY, 120000 );
+    current_weather.Init();
 
     // Initialize the Cockpit subsystem
     if( fgCockpitInit( &current_aircraft )) {
        // Cockpit initialized ok.
     } else {
-       fgPrintf( FG_GENERAL, FG_EXIT, "Error in Cockpit initialization!\n" );
+       FG_LOG( FG_GENERAL, FG_ALERT, "Error in Cockpit initialization!" );
+       exit(-1);
     }
 
     // Initialize the "sky"
@@ -358,40 +341,150 @@ int fgInitSubsystems( void )
     // Initialize the flight model subsystem data structures base on
     // above values
 
-    fgFlightModelInit( current_options.get_flight_model(), f
+    fgFlightModelInit( current_options.get_flight_model(), cur_fdm_state
                       1.0 / DEFAULT_MODEL_HZ );
 
     // I'm just sticking this here for now, it should probably move
     // eventually
-    scenery.cur_elev = FG_Runway_altitude * FEET_TO_METER;
+    scenery.cur_elev = f->get_Runway_altitude() * FEET_TO_METER;
 
-    if ( FG_Altitude < FG_Runway_altitude + 3.758099) {
-       FG_Altitude = FG_Runway_altitude + 3.758099;
+    if ( f->get_Altitude() < f->get_Runway_altitude() + 3.758099) {
+       f->set_Altitude( f->get_Runway_altitude() + 3.758099 );
     }
 
-    fgPrintf( FG_GENERAL, FG_INFO,
-             "Updated position (after elevation adj): (%.4f, %.4f, %.2f)\n",
-             FG_Latitude * RAD_TO_DEG, FG_Longitude * RAD_TO_DEG,
-             FG_Altitude * FEET_TO_METER);
+    FG_LOG( FG_GENERAL, FG_INFO,
+           "Updated position (after elevation adj): ("
+           << (f->get_Latitude() * RAD_TO_DEG) << ", " 
+           << (f->get_Longitude() * RAD_TO_DEG) << ", "
+           << (f->get_Altitude() * FEET_TO_METER) << ")" );
     // end of thing that I just stuck in that I should probably move
 
     // Joystick support
-    if (fgJoystickInit(0) ) {
+    if ( fgJoystickInit() ) {
        // Joystick initialized ok.
     } else {
-       fgPrintf( FG_GENERAL, FG_EXIT, "Error in Joystick initialization!\n" );
+       FG_LOG( FG_GENERAL, FG_ALERT, "Error in Joystick initialization!" );
     }
 
     // Autopilot init added here, by Jeff Goeke-Smith
     fgAPInit(&current_aircraft);
-    
-    fgPrintf(FG_GENERAL, FG_INFO,"\n");
+
+    // Initialize serial ports
+    fgSerialInit();
+
+    FG_LOG( FG_GENERAL, FG_INFO, endl);
 
     return(1);
 }
 
 
 // $Log$
+// Revision 1.61  1999/01/08 03:23:57  curt
+// Beginning work on compensating for sim time vs. real world time "jitter".
+//
+// Revision 1.60  1999/01/07 20:25:09  curt
+// Updated struct fgGENERAL to class FGGeneral.
+//
+// Revision 1.59  1998/12/18 23:40:57  curt
+// New frame rate counting mechanism.
+//
+// Revision 1.58  1998/12/09 18:50:25  curt
+// Converted "class fgVIEW" to "class FGView" and updated to make data
+// members private and make required accessor functions.
+//
+// Revision 1.57  1998/12/06 14:52:56  curt
+// Fixed a problem with the initial starting altitude.  "v->abs_view_pos" wasn't
+// being calculated correctly at the beginning causing the first terrain
+// intersection to fail, returning a ground altitude of zero, causing the plane
+// to free fall for one frame, until the ground altitude was corrected, but now
+// being under the ground we got a big bounce and the plane always ended up
+// upside down.
+//
+// Revision 1.56  1998/12/06 13:51:23  curt
+// Turned "struct fgWEATHER" into "class FGWeather".
+//
+// Revision 1.55  1998/12/05 15:54:20  curt
+// Renamed class fgFLIGHT to class FGState as per request by JSB.
+//
+// Revision 1.54  1998/12/05 14:19:53  curt
+// Looking into a problem with cur_view_params.abs_view_pos initialization.
+//
+// Revision 1.53  1998/12/03 04:25:05  curt
+// Working on fixing up new fgFLIGHT class.
+//
+// Revision 1.52  1998/12/03 01:17:17  curt
+// Converted fgFLIGHT to a class.
+//
+// Revision 1.51  1998/11/20 01:02:37  curt
+// Try to detect Mesa/Glide/Voodoo and chose the appropriate resolution.
+//
+// Revision 1.50  1998/11/16 14:00:01  curt
+// Added pow() macro bug work around.
+// Added support for starting FGFS at various resolutions.
+// Added some initial serial port support.
+// Specify default log levels in main().
+//
+// Revision 1.49  1998/11/11 00:24:02  curt
+// Added Michael Johnson's audio patches for testing.
+// Also did a few tweaks to avoid numerical problems when starting at a place
+// with no (or bogus) scenery.
+//
+// Revision 1.48  1998/11/07 19:07:10  curt
+// Enable release builds using the --without-logging option to the configure
+// script.  Also a couple log message cleanups, plus some C to C++ comment
+// conversion.
+//
+// Revision 1.47  1998/11/06 21:18:10  curt
+// Converted to new logstream debugging facility.  This allows release
+// builds with no messages at all (and no performance impact) by using
+// the -DFG_NDEBUG flag.
+//
+// Revision 1.46  1998/10/27 02:14:38  curt
+// Changes to support GLUT joystick routines as fall back.
+//
+// Revision 1.45  1998/10/25 10:57:21  curt
+// Changes to use the new joystick library if it is available.
+//
+// Revision 1.44  1998/10/18 01:17:17  curt
+// Point3D tweaks.
+//
+// Revision 1.43  1998/10/17 01:34:22  curt
+// C++ ifying ...
+//
+// Revision 1.42  1998/10/16 23:27:54  curt
+// C++-ifying.
+//
+// Revision 1.41  1998/10/16 00:54:01  curt
+// Converted to Point3D class.
+//
+// Revision 1.40  1998/10/02 12:46:49  curt
+// Added an "auto throttle"
+//
+// Revision 1.39  1998/09/29 02:03:39  curt
+// Autopilot mods.
+//
+// Revision 1.38  1998/09/15 04:27:30  curt
+// Changes for new Astro code.
+//
+// Revision 1.37  1998/09/15 02:09:26  curt
+// Include/fg_callback.hxx
+//   Moved code inline to stop g++ 2.7 from complaining.
+//
+// Simulator/Time/event.[ch]xx
+//   Changed return type of fgEVENT::printStat().  void caused g++ 2.7 to
+//   complain bitterly.
+//
+// Minor bugfix and changes.
+//
+// Simulator/Main/GLUTmain.cxx
+//   Added missing type to idle_state definition - eliminates a warning.
+//
+// Simulator/Main/fg_init.cxx
+//   Changes to airport lookup.
+//
+// Simulator/Main/options.cxx
+//   Uses fg_gzifstream when loading config file.
+//
 // Revision 1.36  1998/09/08 21:40:08  curt
 // Fixes by Charlie Hotchkiss.
 //