]> git.mxchange.org Git - flightgear.git/commitdiff
add --version option that works something like this:
authormfranz <mfranz>
Sat, 15 Mar 2008 12:10:44 +0000 (12:10 +0000)
committermfranz <mfranz>
Sat, 15 Mar 2008 12:10:44 +0000 (12:10 +0000)
  $ fgfs --version
  2.0pre-20080314
  FG_ROOT=/usr/local/share/FlightGear
  FG_HOME=/home/foo/.fgfs

... assuming that VERSION in config.h is "2.0pre-20080314". Which it isn't.
Instead it's "1.0.0" since yesterday, and was "0.9.10" before that. This
has yet to be discussed, and I'll add the option to options.xml later.

src/Main/options.cxx

index fa91c395237f71fff7cf4ff15dc7e2ffc168101c..0d9ce7851a34d20f2e231be308bc0e39748d1950 100644 (file)
@@ -64,6 +64,9 @@ SG_USING_STD(string);
 SG_USING_STD(sort);
 SG_USING_NAMESPACE(std);
 
+#ifndef VERSION
+#define VERSION "CVS "__DATE__
+#endif
 
 #define NEW_DEFAULT_MODEL_HZ 120
 
@@ -72,8 +75,9 @@ enum
     FG_OPTIONS_OK = 0,
     FG_OPTIONS_HELP = 1,
     FG_OPTIONS_ERROR = 2,
-    FG_OPTIONS_VERBOSE_HELP = 3,
-    FG_OPTIONS_SHOW_AIRCRAFT = 4
+    FG_OPTIONS_EXIT = 3,
+    FG_OPTIONS_VERBOSE_HELP = 4,
+    FG_OPTIONS_SHOW_AIRCRAFT = 5
 };
 
 static double
@@ -1198,6 +1202,14 @@ fgOptParking( const char *arg )
     return FG_OPTIONS_OK;
 }
 
+static int
+fgOptVersion( const char *arg )
+{
+    cerr << VERSION << endl;
+    cerr << "FG_ROOT=" << globals->get_fg_root() << endl;
+    cerr << "FG_HOME=" << fgGetString("/sim/fg-home") << endl;
+    return FG_OPTIONS_EXIT;
+}
 
 static map<string,size_t> fgOptionMap;
 
@@ -1405,6 +1417,7 @@ struct OptionDesc {
     {"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}
 };
 
@@ -1479,11 +1492,13 @@ parse_option (const string& arg)
         }
     } else if ( arg.find( "--" ) == 0 ) {
         size_t pos = arg.find( '=' );
-        string arg_name;
+        string arg_name, arg_value;
         if ( pos == string::npos ) {
             arg_name = arg.substr( 2 );
         } else {
             arg_name = arg.substr( 2, pos - 2 );
+            arg_value = arg.substr( pos + 1);
+            cerr << "KEY=" << arg_name << "   VAL=" << arg_value << endl;
         }
         map<string,size_t>::iterator it = fgOptionMap.find( arg_name );
         if ( it != fgOptionMap.end() ) {
@@ -1493,9 +1508,9 @@ parse_option (const string& arg)
                     fgSetBool( pt->property, pt->b_param );
                     break;
                 case OPTION_STRING:
-                    if ( pt->has_param && pos != string::npos && pos + 1 < arg.size() ) {
-                        fgSetString( pt->property, arg.substr( pos + 1 ).c_str() );
-                    } else if ( !pt->has_param && pos == string::npos ) {
+                    if ( pt->has_param && !arg_value.empty() ) {
+                        fgSetString( pt->property, arg_value.c_str() );
+                    } else if ( !pt->has_param && arg_value.empty() ) {
                         fgSetString( pt->property, pt->s_param );
                     } else if ( pt->has_param ) {
                         SG_LOG( SG_GENERAL, SG_ALERT, "Option '" << arg << "' needs a parameter" );
@@ -1506,25 +1521,25 @@ parse_option (const string& arg)
                     }
                     break;
                 case OPTION_DOUBLE:
-                    if ( pos != string::npos && pos + 1 < arg.size() ) {
-                        fgSetDouble( pt->property, atof( arg.substr( pos + 1 ) ) );
+                    if ( !arg_value.empty() ) {
+                        fgSetDouble( pt->property, atof( arg_value ) );
                     } else {
                         SG_LOG( SG_GENERAL, SG_ALERT, "Option '" << arg << "' needs a parameter" );
                         return FG_OPTIONS_ERROR;
                     }
                     break;
                 case OPTION_INT:
-                    if ( pos != string::npos && pos + 1 < arg.size() ) {
-                        fgSetInt( pt->property, atoi( arg.substr( pos + 1 ) ) );
+                    if ( !arg_value.empty() ) {
+                        fgSetInt( pt->property, atoi( arg_value ) );
                     } else {
                         SG_LOG( SG_GENERAL, SG_ALERT, "Option '" << arg << "' needs a parameter" );
                         return FG_OPTIONS_ERROR;
                     }
                     break;
                 case OPTION_CHANNEL:
-                    if ( pt->has_param && pos != string::npos && pos + 1 < arg.size() ) {
-                        add_channel( pt->option, arg.substr( pos + 1 ) );
-                    } else if ( !pt->has_param && pos == string::npos ) {
+                    if ( pt->has_param && !arg_value.empty() ) {
+                        add_channel( pt->option, arg_value );
+                    } else if ( !pt->has_param && arg_value.empty() ) {
                         add_channel( pt->option, pt->s_param );
                     } else if ( pt->has_param ) {
                         SG_LOG( SG_GENERAL, SG_ALERT, "Option '" << arg << "' needs a parameter" );
@@ -1535,9 +1550,9 @@ parse_option (const string& arg)
                     }
                     break;
                 case OPTION_FUNC:
-                    if ( pt->has_param && pos != string::npos && pos + 1 < arg.size() ) {
-                        return pt->func( arg.substr( pos + 1 ).c_str() );
-                    } else if ( !pt->has_param && pos == string::npos ) {
+                    if ( pt->has_param && !arg_value.empty() ) {
+                        return pt->func( arg_value.c_str() );
+                    } else if ( !pt->has_param && arg_value.empty() ) {
                         return pt->func( 0 );
                     } else if ( pt->has_param ) {
                         SG_LOG( SG_GENERAL, SG_ALERT, "Option '" << arg << "' needs a parameter" );
@@ -1592,6 +1607,9 @@ fgParseArgs (int argc, char **argv)
                fgShowAircraft(path, true);
                exit(0);
             }
+
+            else if (result == FG_OPTIONS_EXIT)
+               exit(0);
          }
        } else {
          in_options = false;