First attempt at adding John Tsiombikas' spaceball support for X11. It compiles...
[freeglut] / src / freeglut_init.c
index 01dabc7..7893f05 100644 (file)
@@ -25,6 +25,7 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
+#define FREEGLUT_BUILDING_LIB
 #include <GL/freeglut.h>
 #include "freeglut_internal.h"
 
@@ -88,7 +89,8 @@ SFG_State fgState = { { -1, -1, GL_FALSE },  /* Position */
                       4,                      /* SampleNumber */
                       1,                      /* MajorVersion */
                       0,                      /* MajorVersion */
-                      0                       /* ContextFlags */
+                      0,                      /* ContextFlags */
+                      0                       /* ContextProfile */
 };
 
 
@@ -424,6 +426,7 @@ void fgDeinitialize( void )
     fgState.MajorVersion = 1;
     fgState.MinorVersion = 0;
     fgState.ContextFlags = 0;
+    fgState.ContextProfile = 0;
 
     fgState.Initialised = GL_FALSE;
 
@@ -680,8 +683,10 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
     /* will return true for VC8 (VC2005) and higher */
 #if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 )
     size_t sLen;
+#if HAVE_ERRNO
     errno_t err;
 #endif
+#endif
 
     if( fgState.Initialised )
         fgError( "illegal glutInit() reinitialization attempt" );
@@ -703,7 +708,7 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
 #ifndef _WIN32_WCE
     {
     /* will return true for VC8 (VC2005) and higher */
-#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 )
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
         char* fps = NULL;
         err = _dupenv_s( &fps, &sLen, "GLUT_FPS" );
         if (err)
@@ -722,13 +727,13 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
                 fgState.FPSInterval = interval;
         }
     /* will return true for VC8 (VC2005) and higher */
-#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 )
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
         free ( fps );  fps = NULL;  /* dupenv_s allocates a string that we must free */
 #endif
     }
 
     /* will return true for VC8 (VC2005) and higher */
-#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 )
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
     err = _dupenv_s( &displayName, &sLen, "DISPLAY" );
     if (err)
         fgError("Error getting DISPLAY environment variable");
@@ -820,7 +825,7 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
      */
     fghInitialize( displayName );
     /* will return true for VC8 (VC2005) and higher */
-#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 )
+#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO
     free ( displayName );  displayName = NULL;  /* dupenv_s allocates a string that we must free */
 #endif
 
@@ -853,6 +858,16 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
     }
 }
 
+#if TARGET_HOST_MS_WINDOWS
+void (__cdecl *__glutExitFunc)( int return_value ) = NULL;
+
+void FGAPIENTRY __glutInitWithExit( int *pargc, char **argv, void (__cdecl *exit_function)(int) )
+{
+  __glutExitFunc = exit_function;
+  glutInit(pargc, argv);
+}
+#endif
+
 /*
  * Undoes all the "glutInit" stuff
  */
@@ -1142,4 +1157,10 @@ void FGAPIENTRY glutInitContextFlags( int flags )
     fgState.ContextFlags = flags;
 }
 
+void FGAPIENTRY glutInitContextProfile( int profile )
+{
+    /* We will make use of this value when creating a new OpenGL context... */
+    fgState.ContextProfile = profile;
+}
+
 /*** END OF FILE ***/