FlightGear-Points of Interest

From FlightGear wiki
Jump to navigation Jump to search
This article has been nominated for deletion since 16 November 2024. To discuss it, please visit the talk page.

Do not remove this tag until the discussion is closed.


Reason for the nomination: This article either contains out of date information, or may not meet the quality standards of the wiki, potentially to the point of causing confusion or frustration to readers.


FlightGear Entrypoint

see $FG_SRC/Main/bootstrap.cxx int main(int, char**):

// Main entry point; catch any exceptions that have made it this far.
int main ( int argc, char **argv ) {

    _bootstrap_OSInit = 0;

#if defined(__linux__) && defined(__i386__)
    // Enable floating-point exceptions for Linux/x86
    initFPE();
#elif defined(__FreeBSD__)
    // Ignore floating-point exceptions on FreeBSD
    signal(SIGFPE, SIG_IGN);
#endif

#if defined(sgi)
    flush_fpe();

    // Bind all non-rendering threads to CPU1
    // This will reduce the jitter caused by them to an absolute minimum,
    // but it will only work with superuser authority.
    if ( geteuid() == 0 )
    {
       sysmp(MP_CLOCK, 0);		// bind the timer only to CPU0
       sysmp(MP_ISOLATE, 1 );		// Isolate CPU1
       sysmp(MP_NONPREEMPTIVE, 1 );	// disable process time slicing on CPU1
    }
#endif

    // Enable floating-point exceptions for Windows
#if defined( _MSC_VER ) && defined( DEBUG )
    // Christian, we should document what this does
    _control87( _EM_INEXACT, _MCW_EM );
#endif

#if defined( HAVE_BC5PLUS )
    _control87(MCW_EM, MCW_EM);  /* defined in float.h */
#endif

    // Keyboard focus hack
#if defined(__APPLE__) && !defined(OSX_BUNDLE)
    {
      PSN psn;

      fgOSInit (&argc, argv);
      _bootstrap_OSInit++;

      CPSGetCurrentProcess(&psn);
      CPSSetProcessName(&psn, "FlightGear");
      CPSEnableFG(&psn);
      CPSSetFrontProcess(&psn);
    }
#endif

    // FIXME: add other, more specific
    // exceptions.
    try {
        std::set_terminate(fg_terminate);
        atexit(fgExitCleanup);
        fgMainInit(argc, argv);
    } catch (const sg_throwable &t) {
                            // We must use cerr rather than
                            // logging, since logging may be
                            // disabled.
        cerr << "Fatal error: " << t.getFormattedMessage() << endl;
        if (!t.getOrigin().empty())
            cerr << " (received from " << t.getOrigin() << ')' << endl;

    } catch (const string &s) {
        cerr << "Fatal error: " << s << endl;

    } catch (const char *s) {
        cerr << "Fatal error: " << s << endl;

    } catch (...) {
        cerr << "Unknown exception in the main loop. Aborting..." << endl;
        if (errno)
            perror("Possible cause");
    }

    return 0;
}

Main Initialization

See $FG_SRC/Main/main.cxx: fgMainInit(int, char**):

// Main top level initialization
bool fgMainInit( int argc, char **argv ) {

#if defined( macintosh )
    freopen ("stdout.txt", "w", stdout );
    freopen ("stderr.txt", "w", stderr );
    argc = ccommand( &argv );
#endif

    // set default log levels
    sglog().setLogLevels( SG_ALL, SG_ALERT );

    string version;
#ifdef FLIGHTGEAR_VERSION
    version = FLIGHTGEAR_VERSION;
#else
    version = "unknown version";
#endif
    SG_LOG( SG_GENERAL, SG_INFO, "FlightGear:  Version "
            << version );
    SG_LOG( SG_GENERAL, SG_INFO, "Built with " << SG_COMPILER_STR << endl );

    // Allocate global data structures.  This needs to happen before
    // we parse command line options

    globals = new FGGlobals;

    // seed the random number generator
    sg_srandom_time();

    FGControls *controls = new FGControls;
    globals->set_controls( controls );

    string_list *col = new string_list;
    globals->set_channel_options_list( col );

    upper_case_property("/sim/presets/airport-id");
    upper_case_property("/sim/presets/runway");
    upper_case_property("/sim/tower/airport-id");

    // Scan the config file(s) and command line options to see if
    // fg_root was specified (ignore all other options for now)
    fgInitFGRoot(argc, argv);

    // Check for the correct base package version
    static char required_version[] = "1.0.0";
    string base_version = fgBasePackageVersion();
    if ( !(base_version == required_version) ) {
        // tell the operator how to use this application

        SG_LOG( SG_GENERAL, SG_ALERT, "" ); // To popup the console on windows
        cerr << endl << "Base package check failed ... " \
             << "Found version " << base_version << " at: " \
             << globals->get_fg_root() << endl;
        cerr << "Please upgrade to version: " << required_version << endl;
#ifdef _MSC_VER
        cerr << "Hit a key to continue..." << endl;
        cin.get();
#endif
        exit(-1);
    }

    // Load the configuration parameters.  (Command line options
    // override config file options.  Config file options override
    // defaults.)
    if ( !fgInitConfig(argc, argv) ) {
        SG_LOG( SG_GENERAL, SG_ALERT, "Config option parsing failed ..." );
        exit(-1);
    }

    // Initialize the Window/Graphics environment.
#if !defined(__APPLE__) || defined(OSX_BUNDLE)
    // Mac OS X command line ("non-bundle") applications call this
    // from main(), in bootstrap.cxx.  Andy doesn't know why, someone
    // feel free to add comments...
    fgOSInit(&argc, argv);
    _bootstrap_OSInit++;
#endif

    fgRegisterWindowResizeHandler( &FGRenderer::resize );
    fgRegisterIdleHandler( &fgIdleFunction );
    fgRegisterDrawHandler( &FGRenderer::update );

#ifdef FG_ENABLE_MULTIPASS_CLOUDS
    bool get_stencil_buffer = true;
#else
    bool get_stencil_buffer = false;
#endif

    // Initialize plib net interface
    netInit( &argc, argv );

    // Clouds3D requires an alpha channel
    // clouds may require stencil buffer
    fgOSOpenWindow( fgGetInt("/sim/startup/xsize"),
                    fgGetInt("/sim/startup/ysize"),
                    fgGetInt("/sim/rendering/bits-per-pixel"),
                    fgGetBool("/sim/rendering/clouds3d-enable"),
                    get_stencil_buffer,
                    fgGetBool("/sim/startup/fullscreen") );

    // Initialize the splash screen right away
    fntInit();
    fgSplashInit();

    // pass control off to the master event handler
    fgOSMainLoop();

    // we never actually get here ... but to avoid compiler warnings,
    // etc.
    return false;
}

Parameter Processing

See $FG_SRC/Main/options.cxx:

/*
 option       has_param type        property         b_param s_param  func

where:
option    : name of the option
has_param : option is --name=value if true or --name if false
type      : OPTION_BOOL    - property is a boolean
           OPTION_STRING  - property is a string
           OPTION_DOUBLE  - property is a double
           OPTION_INT     - property is an integer
           OPTION_CHANNEL - name of option is the name of a channel
           OPTION_FUNC    - the option trigger a function
b_param   : if type==OPTION_BOOL,
           value set to the property (has_param is false for boolean)
s_param   : if type==OPTION_STRING,
           value set to the property if has_param is false
func      : function called if type==OPTION_FUNC. if has_param is true,
           the value is passed to the function as a string, otherwise,
           0 is passed. 

    For OPTION_DOUBLE and OPTION_INT, the parameter value is converted into a
    double or an integer and set to the property.

  For OPTION_CHANNEL, add_channel is called with the parameter value as the
  argument.
*/

  enum OptionType { OPTION_BOOL, OPTION_STRING, OPTION_DOUBLE, OPTION_INT, OPTION_CHANNEL, OPTION_FUNC };
  struct OptionDesc {
  char *option;
  bool has_param;
  enum OptionType type;
  char *property;
  bool b_param;
  char *s_param;
  int (*func)( const char * );
  } fgOptionArray[] = {
     
  {"language",                     true,  OPTION_FUNC,   "", false, "", fgOptLanguage },
  {"disable-game-mode",            false, OPTION_BOOL,   "/sim/startup/game-mode", false, "", 0 },
  {"enable-game-mode",             false, OPTION_BOOL,   "/sim/startup/game-mode", true, "", 0 },
  {"disable-splash-screen",        false, OPTION_BOOL,   "/sim/startup/splash-screen", false, "", 0 },
  {"enable-splash-screen",         false, OPTION_BOOL,   "/sim/startup/splash-screen", true, "", 0 },
  {"disable-intro-music",          false, OPTION_BOOL,   "/sim/startup/intro-music", false, "", 0 },
  {"enable-intro-music",           false, OPTION_BOOL,   "/sim/startup/intro-music", true, "", 0 },
  {"disable-mouse-pointer",        false, OPTION_STRING, "/sim/startup/mouse-pointer", false, "disabled", 0 },
  {"enable-mouse-pointer",         false, OPTION_STRING, "/sim/startup/mouse-pointer", false, "enabled", 0 },
  {"disable-random-objects",       false, OPTION_BOOL,   "/sim/rendering/random-objects", false, "", 0 },
  {"enable-random-objects",        false, OPTION_BOOL,   "/sim/rendering/random-objects", true, "", 0 },
  {"disable-real-weather-fetch",   false, OPTION_BOOL,   "/environment/params/real-world-weather-fetch", false, "", 0 },
  {"enable-real-weather-fetch",    false, OPTION_BOOL,   "/environment/params/real-world-weather-fetch", true, "", 0 },
  {"disable-ai-models",            false, OPTION_BOOL,   "/sim/ai/enabled", false, "", 0 },
  {"enable-ai-models",             false, OPTION_BOOL,   "/sim/ai/enabled", true, "", 0 },
  {"disable-freeze",               false, OPTION_BOOL,   "/sim/freeze/master", false, "", 0 },
  {"enable-freeze",                false, OPTION_BOOL,   "/sim/freeze/master", true, "", 0 },
  {"disable-fuel-freeze",          false, OPTION_BOOL,   "/sim/freeze/fuel", false, "", 0 },
  {"enable-fuel-freeze",           false, OPTION_BOOL,   "/sim/freeze/fuel", true, "", 0 },
  {"disable-clock-freeze",         false, OPTION_BOOL,   "/sim/freeze/clock", false, "", 0 },
  {"enable-clock-freeze",          false, OPTION_BOOL,   "/sim/freeze/clock", true, "", 0 },
  {"disable-hud-3d",               false, OPTION_BOOL,   "/sim/hud/enable3d", false, "", 0 },
  {"enable-hud-3d",                false, OPTION_BOOL,   "/sim/hud/enable3d", true, "", 0 },
  {"disable-anti-alias-hud",       false, OPTION_BOOL,   "/sim/hud/color/antialiased", false, "", 0 },
  {"enable-anti-alias-hud",        false, OPTION_BOOL,   "/sim/hud/color/antialiased", true, "", 0 },
  {"control",                      true,  OPTION_STRING, "/sim/control-mode", false, "", 0 },
  {"disable-auto-coordination",    false, OPTION_BOOL,   "/sim/auto-coordination", false, "", 0 },
  {"enable-auto-coordination",     false, OPTION_BOOL,   "/sim/auto-coordination", true, "", 0 },
  {"browser-app",                  true,  OPTION_STRING, "/sim/startup/browser-app", false, "", 0 },
  {"disable-hud",                  false, OPTION_BOOL,   "/sim/hud/visibility", false, "", 0 },
  {"enable-hud",                   false, OPTION_BOOL,   "/sim/hud/visibility", true, "", 0 },
  {"disable-panel",                false, OPTION_BOOL,   "/sim/panel/visibility", false, "", 0 },
  {"enable-panel",                 false, OPTION_BOOL,   "/sim/panel/visibility", true, "", 0 },
  {"disable-sound",                false, OPTION_BOOL,   "/sim/sound/pause", true, "", 0 },
  {"enable-sound",                 false, OPTION_BOOL,   "/sim/sound/pause", false, "", 0 },
  {"airport",                      true,  OPTION_STRING, "/sim/presets/airport-id", false, "", 0 },
  {"runway",                       true,  OPTION_FUNC,   "", false, "", fgOptRunway },
  {"vor",                          true,  OPTION_FUNC,   "", false, "", fgOptVOR },
  {"ndb",                          true,  OPTION_FUNC,   "", false, "", fgOptNDB },
  {"carrier",                      true,  OPTION_FUNC,   "", false, "", fgOptCarrier },
  {"parkpos",                      true,  OPTION_FUNC,   "", false, "", fgOptParkpos },
  {"fix",                          true,  OPTION_FUNC,   "", false, "", fgOptFIX },
  {"offset-distance",              true,  OPTION_DOUBLE, "/sim/presets/offset-distance", false, "", 0 },
  {"offset-azimuth",               true,  OPTION_DOUBLE, "/sim/presets/offset-azimuth", false, "", 0 },
  {"lon",                          true,  OPTION_FUNC,   "", false, "", fgOptLon },
  {"lat",                          true,  OPTION_FUNC,   "", false, "", fgOptLat },
  {"altitude",                     true,  OPTION_FUNC,   "", false, "", fgOptAltitude },
  {"uBody",                        true,  OPTION_FUNC,   "", false, "", fgOptUBody },
  {"vBody",                        true,  OPTION_FUNC,   "", false, "", fgOptVBody },
  {"wBody",                        true,  OPTION_FUNC,   "", false, "", fgOptWBody },
  {"vNorth",                       true,  OPTION_FUNC,   "", false, "", fgOptVNorth },
  {"vEast",                        true,  OPTION_FUNC,   "", false, "", fgOptVEast },
  {"vDown",                        true,  OPTION_FUNC,   "", false, "", fgOptVDown },
  {"vc",                           true,  OPTION_FUNC,   "", false, "", fgOptVc },
  {"mach",                         true,  OPTION_FUNC,   "", false, "", fgOptMach },
  {"heading",                      true,  OPTION_DOUBLE, "/sim/presets/heading-deg", false, "", 0 },
  {"roll",                         true,  OPTION_DOUBLE, "/sim/presets/roll-deg", false, "", 0 },
  {"pitch",                        true,  OPTION_DOUBLE, "/sim/presets/pitch-deg", false, "", 0 },
  {"glideslope",                   true,  OPTION_DOUBLE, "/sim/presets/glideslope-deg", false, "", 0 },
  {"roc",                          true,  OPTION_FUNC,   "", false, "", fgOptRoc },
  {"fg-root",                      true,  OPTION_FUNC,   "", false, "", fgOptFgRoot },
  {"fg-scenery",                   true,  OPTION_FUNC,   "", false, "", fgOptFgScenery },
  {"fdm",                          true,  OPTION_STRING, "/sim/flight-model", false, "", 0 },
  {"aero",                         true,  OPTION_STRING, "/sim/aero", false, "", 0 },
  {"aircraft-dir",                 true,  OPTION_STRING, "/sim/aircraft-dir", false, "", 0 },
  {"model-hz",                     true,  OPTION_INT,    "/sim/model-hz", false, "", 0 },
  {"speed",                        true,  OPTION_INT,    "/sim/speed-up", false, "", 0 },
  {"trim",                         false, OPTION_BOOL,   "/sim/presets/trim", true, "", 0 },
  {"notrim",                       false, OPTION_BOOL,   "/sim/presets/trim", false, "", 0 },
  {"on-ground",                    false, OPTION_BOOL,   "/sim/presets/onground", true, "", 0 },
  {"in-air",                       false, OPTION_BOOL,   "/sim/presets/onground", false, "", 0 },
  {"fog-disable",                  false, OPTION_STRING, "/sim/rendering/fog", false, "disabled", 0 },
  {"fog-fastest",                  false, OPTION_STRING, "/sim/rendering/fog", false, "fastest", 0 },
  {"fog-nicest",                   false, OPTION_STRING, "/sim/rendering/fog", false, "nicest", 0 },
  {"disable-horizon-effect",       false, OPTION_BOOL,   "/sim/rendering/horizon-effect", false, "", 0 },
  {"enable-horizon-effect",        false, OPTION_BOOL,   "/sim/rendering/horizon-effect", true, "", 0 },
  {"disable-enhanced-lighting",    false, OPTION_BOOL,   "/sim/rendering/enhanced-lighting", false, "", 0 },
  {"enable-enhanced-lighting",     false, OPTION_BOOL,   "/sim/rendering/enhanced-lighting", true, "", 0 },
  {"disable-distance-attenuation", false, OPTION_BOOL,   "/sim/rendering/distance-attenuation", false, "", 0 },
  {"enable-distance-attenuation",  false, OPTION_BOOL,   "/sim/rendering/distance-attenuation", true, "", 0 },
  {"disable-specular-highlight",   false, OPTION_BOOL,   "/sim/rendering/specular-highlight", false, "", 0 },
  {"enable-specular-highlight",    false, OPTION_BOOL,   "/sim/rendering/specular-highlight", true, "", 0 },
  {"disable-clouds",               false, OPTION_BOOL,   "/environment/clouds/status", false, "", 0 },
  {"enable-clouds",                false, OPTION_BOOL,   "/environment/clouds/status", true, "", 0 },
  {"disable-clouds3d",             false, OPTION_BOOL,   "/sim/rendering/clouds3d-enable", false, "", 0 },
  {"enable-clouds3d",              false, OPTION_BOOL,   "/sim/rendering/clouds3d-enable", true, "", 0 },
  {"fov",                          true,  OPTION_FUNC,   "", false, "", fgOptFov },
  {"aspect-ratio-multiplier",      true,  OPTION_DOUBLE, "/sim/current-view/aspect-ratio-multiplier", false, "", 0 },
  {"disable-fullscreen",           false, OPTION_BOOL,   "/sim/startup/fullscreen", false, "", 0 },
  {"enable-fullscreen",            false, OPTION_BOOL,   "/sim/startup/fullscreen", true, "", 0 },
  {"disable-save-on-exit",         false, OPTION_BOOL,   "/sim/startup/save-on-exit", false, "", 0 },
  {"enable-save-on-exit",          false, OPTION_BOOL,   "/sim/startup/save-on-exit", true, "", 0 },
  {"shading-flat",                 false, OPTION_BOOL,   "/sim/rendering/shading", false, "", 0 },
  {"shading-smooth",               false, OPTION_BOOL,   "/sim/rendering/shading", true, "", 0 },
  {"disable-skyblend",             false, OPTION_BOOL,   "/sim/rendering/skyblend", false, "", 0 },
  {"enable-skyblend",              false, OPTION_BOOL,   "/sim/rendering/skyblend", true, "", 0 },
  {"disable-textures",             false, OPTION_BOOL,   "/sim/rendering/textures", false, "", 0 },
  {"enable-textures",              false, OPTION_BOOL,   "/sim/rendering/textures", true, "", 0 },
  {"texture-filtering",            false, OPTION_INT,    "/sim/rendering/filtering", 1, "", 0 },
  {"disable-wireframe",            false, OPTION_BOOL,   "/sim/rendering/wireframe", false, "", 0 },
  {"enable-wireframe",             false, OPTION_BOOL,   "/sim/rendering/wireframe", true, "", 0 },
  {"geometry",                     true,  OPTION_FUNC,   "", false, "", fgOptGeometry },
  {"bpp",                          true,  OPTION_FUNC,   "", false, "", fgOptBpp },
  {"units-feet",                   false, OPTION_STRING, "/sim/startup/units", false, "feet", 0 },
  {"units-meters",                 false, OPTION_STRING, "/sim/startup/units", false, "meters", 0 },
  {"timeofday",                    true,  OPTION_STRING, "/sim/startup/time-offset-type", false, "noon", 0 },
  {"season",                       true,  OPTION_STRING, "/sim/startup/season", false, "summer", 0 },
  {"time-offset",                  true,  OPTION_FUNC,   "", false, "", fgOptTimeOffset },
  {"time-match-real",              false, OPTION_STRING, "/sim/startup/time-offset-type", false, "system-offset", 0 },
  {"time-match-local",             false, OPTION_STRING, "/sim/startup/time-offset-type", false, "latitude-offset", 0 },
  {"start-date-sys",               true,  OPTION_FUNC,   "", false, "", fgOptStartDateSys },
  {"start-date-lat",               true,  OPTION_FUNC,   "", false, "", fgOptStartDateLat },
  {"start-date-gmt",               true,  OPTION_FUNC,   "", false, "", fgOptStartDateGmt },
  {"hud-tris",                     false, OPTION_STRING, "/sim/hud/frame-stat-type", false, "tris", 0 },
  {"hud-culled",                   false, OPTION_STRING, "/sim/hud/frame-stat-type", false, "culled", 0 },
  {"atcsim",                       true,  OPTION_CHANNEL, "", false, "dummy", 0 },
  {"atlas",                        true,  OPTION_CHANNEL, "", false, "", 0 },
  {"httpd",                        true,  OPTION_CHANNEL, "", false, "", 0 },
#ifdef FG_JPEG_SERVER
  {"jpg-httpd",                    true,  OPTION_CHANNEL, "", false, "", 0 },
#endif
  {"native",                       true,  OPTION_CHANNEL, "", false, "", 0 },
  {"native-ctrls",                 true,  OPTION_CHANNEL, "", false, "", 0 },
  {"native-fdm",                   true,  OPTION_CHANNEL, "", false, "", 0 },
  {"native-gui",                   true,  OPTION_CHANNEL, "", false, "", 0 },
  {"opengc",                       true,  OPTION_CHANNEL, "", false, "", 0 },
  {"AV400",                        true,  OPTION_CHANNEL, "", false, "", 0 },
  {"garmin",                       true,  OPTION_CHANNEL, "", false, "", 0 },
  {"nmea",                         true,  OPTION_CHANNEL, "", false, "", 0 },
  {"generic",                      true,  OPTION_CHANNEL, "", false, "", 0 },
  {"props",                        true,  OPTION_CHANNEL, "", false, "", 0 },
  {"telnet",                       true,  OPTION_CHANNEL, "", false, "", 0 },
  {"pve",                          true,  OPTION_CHANNEL, "", false, "", 0 },
  {"ray",                          true,  OPTION_CHANNEL, "", false, "", 0 },
  {"rul",                          true,  OPTION_CHANNEL, "", false, "", 0 },
  {"joyclient",                    true,  OPTION_CHANNEL, "", false, "", 0 },
  {"jsclient",                     true,  OPTION_CHANNEL, "", false, "", 0 },
  {"proxy",                        true,  OPTION_FUNC,    "", false, "", fgSetupProxy },
  {"callsign",                     true, OPTION_STRING,  "sim/multiplay/callsign", false, "", 0 },
  {"multiplay",                    true,  OPTION_CHANNEL, "", false, "", 0 },
  {"trace-read",                   true,  OPTION_FUNC,   "", false, "", fgOptTraceRead },
  {"trace-write",                  true,  OPTION_FUNC,   "", false, "", fgOptTraceWrite },
  {"log-level",                    true,  OPTION_FUNC,   "", false, "", fgOptLogLevel },
  {"view-offset",                  true,  OPTION_FUNC,   "", false, "", fgOptViewOffset },
  {"visibility",                   true,  OPTION_FUNC,   "", false, "", fgOptVisibilityMeters },
  {"visibility-miles",             true,  OPTION_FUNC,   "", false, "", fgOptVisibilityMiles },
  {"random-wind",                  false, OPTION_FUNC,   "", false, "", fgOptRandomWind },
  {"wind",                         true,  OPTION_FUNC,   "", false, "", fgOptWind },
  {"turbulence",                   true,  OPTION_FUNC,   "", false, "", fgOptTurbulence },
  {"ceiling",                      true,  OPTION_FUNC,   "", false, "", fgOptCeiling },
  {"wp",                           true,  OPTION_FUNC,   "", false, "", fgOptWp },
  {"flight-plan",                  true,  OPTION_FUNC,   "", false, "", fgOptFlightPlan },
  {"config",                       true,  OPTION_FUNC,   "", false, "", fgOptConfig },
  {"aircraft",                     true,  OPTION_STRING, "/sim/aircraft", false, "", 0 },
  {"vehicle",                      true,  OPTION_STRING, "/sim/aircraft", false, "", 0 },
  {"failure",                      true,  OPTION_FUNC,   "", false, "", fgOptFailure },
  {"com1",                         true,  OPTION_DOUBLE, "/instrumentation/comm[0]/frequencies/selected-mhz", false, "", 0 },
  {"com2",                         true,  OPTION_DOUBLE, "/instrumentation/comm[1]/frequencies/selected-mhz", false, "", 0 },
  {"nav1",                         true,  OPTION_FUNC,   "", false, "", fgOptNAV1 },
  {"nav2",                         true,  OPTION_FUNC,   "", false, "", fgOptNAV2 },
  {"adf",                          true,  OPTION_FUNC,   "", false, "", fgOptADF },
  {"dme",                          true,  OPTION_FUNC,   "", false, "", fgOptDME },
  {"min-status",                   true,  OPTION_STRING,  "/sim/aircraft-min-status", false, "all", 0 },
  {"livery",                       true,  OPTION_FUNC,   "", false, "", fgOptLivery },
  {"ai-scenario",                  true,  OPTION_FUNC,   "", false, "", fgOptScenario },
  {"parking-id",                   true,  OPTION_FUNC,   "", false, "", fgOptParking  },
  {"version",                      false, OPTION_FUNC,   "", false, "", fgOptVersion },
  {0}
};

Main Loop

See $FG_SRC/Main/main.cxx: void fgMainLoop(): (TODO)