Moving the command-line parsing into its own function in preparation for splitting...
authorJohn F. Fay <johnffay@nettally.com>
Fri, 20 Jan 2012 04:38:09 +0000 (04:38 +0000)
committerJohn F. Fay <johnffay@nettally.com>
Fri, 20 Jan 2012 04:38:09 +0000 (04:38 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@990 7f0cb862-5218-0410-a997-914c9d46530a

src/Common/freeglut_init.c

index 0a96b14..d5a8ae9 100644 (file)
@@ -322,6 +322,110 @@ static void fghInitialize( const char* displayName )
 \r
 #endif\r
 \r
+\r
+void fghParseCommandLineArguments ( int* pargc, char** argv, char **pDisplayName, char **pGeometry )\r
+{\r
+#ifndef _WIN32_WCE\r
+    int i, j, argc = *pargc;\r
+\r
+    {\r
+           /* check if GLUT_FPS env var is set */\r
+        const char *fps = getenv( "GLUT_FPS" );\r
+\r
+        if( fps )\r
+        {\r
+            int interval;\r
+            sscanf( fps, "%d", &interval );\r
+\r
+            if( interval <= 0 )\r
+                fgState.FPSInterval = 5000;  /* 5000 millisecond default */\r
+            else\r
+                fgState.FPSInterval = interval;\r
+        }\r
+    }\r
+\r
+    *pDisplayName = getenv( "DISPLAY" );\r
+\r
+    for( i = 1; i < argc; i++ )\r
+    {\r
+        if( strcmp( argv[ i ], "-display" ) == 0 )\r
+        {\r
+            if( ++i >= argc )\r
+                fgError( "-display parameter must be followed by display name" );\r
+\r
+            *pDisplayName = argv[ i ];\r
+\r
+            argv[ i - 1 ] = NULL;\r
+            argv[ i     ] = NULL;\r
+            ( *pargc ) -= 2;\r
+        }\r
+        else if( strcmp( argv[ i ], "-geometry" ) == 0 )\r
+        {\r
+            if( ++i >= argc )\r
+                fgError( "-geometry parameter must be followed by window "\r
+                         "geometry settings" );\r
+\r
+            *pGeometry = argv[ i ];\r
+\r
+            argv[ i - 1 ] = NULL;\r
+            argv[ i     ] = NULL;\r
+            ( *pargc ) -= 2;\r
+        }\r
+        else if( strcmp( argv[ i ], "-direct" ) == 0)\r
+        {\r
+            if( fgState.DirectContext == GLUT_FORCE_INDIRECT_CONTEXT )\r
+                fgError( "parameters ambiguity, -direct and -indirect "\r
+                    "cannot be both specified" );\r
+\r
+            fgState.DirectContext = GLUT_FORCE_DIRECT_CONTEXT;\r
+            argv[ i ] = NULL;\r
+            ( *pargc )--;\r
+        }\r
+        else if( strcmp( argv[ i ], "-indirect" ) == 0 )\r
+        {\r
+            if( fgState.DirectContext == GLUT_FORCE_DIRECT_CONTEXT )\r
+                fgError( "parameters ambiguity, -direct and -indirect "\r
+                    "cannot be both specified" );\r
+\r
+            fgState.DirectContext = GLUT_FORCE_INDIRECT_CONTEXT;\r
+            argv[ i ] = NULL;\r
+            (*pargc)--;\r
+        }\r
+        else if( strcmp( argv[ i ], "-iconic" ) == 0 )\r
+        {\r
+            fgState.ForceIconic = GL_TRUE;\r
+            argv[ i ] = NULL;\r
+            ( *pargc )--;\r
+        }\r
+        else if( strcmp( argv[ i ], "-gldebug" ) == 0 )\r
+        {\r
+            fgState.GLDebugSwitch = GL_TRUE;\r
+            argv[ i ] = NULL;\r
+            ( *pargc )--;\r
+        }\r
+        else if( strcmp( argv[ i ], "-sync" ) == 0 )\r
+        {\r
+            fgState.XSyncSwitch = GL_TRUE;\r
+            argv[ i ] = NULL;\r
+            ( *pargc )--;\r
+        }\r
+    }\r
+\r
+    /* Compact {argv}. */\r
+    for( i = j = 1; i < *pargc; i++, j++ )\r
+    {\r
+        /* Guaranteed to end because there are "*pargc" arguments left */\r
+        while ( argv[ j ] == NULL )\r
+            j++;\r
+        if ( i != j )\r
+            argv[ i ] = argv[ j ];\r
+    }\r
+\r
+#endif /* _WIN32_WCE */\r
+\r
+}\r
+\r
+\r
 void fghCloseInputDevices ( void )\r
 {\r
     if ( fgState.JoysticksInitialised )\r
@@ -642,8 +746,6 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
 {\r
     char* displayName = NULL;\r
     char* geometry = NULL;\r
-    int i, j, argc = *pargc;\r
-\r
     if( fgState.Initialised )\r
         fgError( "illegal glutInit() reinitialization attempt" );\r
 \r
@@ -660,101 +762,7 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
     /* Get start time */\r
     fgState.Time = fgSystemTime();\r
 \r
-    /* check if GLUT_FPS env var is set */\r
-#ifndef _WIN32_WCE\r
-    {\r
-        const char *fps = getenv( "GLUT_FPS" );\r
-\r
-        if( fps )\r
-        {\r
-            int interval;\r
-            sscanf( fps, "%d", &interval );\r
-\r
-            if( interval <= 0 )\r
-                fgState.FPSInterval = 5000;  /* 5000 millisecond default */\r
-            else\r
-                fgState.FPSInterval = interval;\r
-        }\r
-    }\r
-\r
-    displayName = getenv( "DISPLAY" );\r
-\r
-    for( i = 1; i < argc; i++ )\r
-    {\r
-        if( strcmp( argv[ i ], "-display" ) == 0 )\r
-        {\r
-            if( ++i >= argc )\r
-                fgError( "-display parameter must be followed by display name" );\r
-\r
-            displayName = argv[ i ];\r
-\r
-            argv[ i - 1 ] = NULL;\r
-            argv[ i     ] = NULL;\r
-            ( *pargc ) -= 2;\r
-        }\r
-        else if( strcmp( argv[ i ], "-geometry" ) == 0 )\r
-        {\r
-            if( ++i >= argc )\r
-                fgError( "-geometry parameter must be followed by window "\r
-                         "geometry settings" );\r
-\r
-            geometry = argv[ i ];\r
-\r
-            argv[ i - 1 ] = NULL;\r
-            argv[ i     ] = NULL;\r
-            ( *pargc ) -= 2;\r
-        }\r
-        else if( strcmp( argv[ i ], "-direct" ) == 0)\r
-        {\r
-            if( fgState.DirectContext == GLUT_FORCE_INDIRECT_CONTEXT )\r
-                fgError( "parameters ambiguity, -direct and -indirect "\r
-                    "cannot be both specified" );\r
-\r
-            fgState.DirectContext = GLUT_FORCE_DIRECT_CONTEXT;\r
-            argv[ i ] = NULL;\r
-            ( *pargc )--;\r
-        }\r
-        else if( strcmp( argv[ i ], "-indirect" ) == 0 )\r
-        {\r
-            if( fgState.DirectContext == GLUT_FORCE_DIRECT_CONTEXT )\r
-                fgError( "parameters ambiguity, -direct and -indirect "\r
-                    "cannot be both specified" );\r
-\r
-            fgState.DirectContext = GLUT_FORCE_INDIRECT_CONTEXT;\r
-            argv[ i ] = NULL;\r
-            (*pargc)--;\r
-        }\r
-        else if( strcmp( argv[ i ], "-iconic" ) == 0 )\r
-        {\r
-            fgState.ForceIconic = GL_TRUE;\r
-            argv[ i ] = NULL;\r
-            ( *pargc )--;\r
-        }\r
-        else if( strcmp( argv[ i ], "-gldebug" ) == 0 )\r
-        {\r
-            fgState.GLDebugSwitch = GL_TRUE;\r
-            argv[ i ] = NULL;\r
-            ( *pargc )--;\r
-        }\r
-        else if( strcmp( argv[ i ], "-sync" ) == 0 )\r
-        {\r
-            fgState.XSyncSwitch = GL_TRUE;\r
-            argv[ i ] = NULL;\r
-            ( *pargc )--;\r
-        }\r
-    }\r
-\r
-    /* Compact {argv}. */\r
-    for( i = j = 1; i < *pargc; i++, j++ )\r
-    {\r
-        /* Guaranteed to end because there are "*pargc" arguments left */\r
-        while ( argv[ j ] == NULL )\r
-            j++;\r
-        if ( i != j )\r
-            argv[ i ] = argv[ j ];\r
-    }\r
-\r
-#endif /* _WIN32_WCE */\r
+       fghParseCommandLineArguments ( pargc, argv, &displayName, &geometry );\r
 \r
     /*\r
      * Have the display created now. If there wasn't a "-display"\r