X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_init.c;h=7893f058ac6cce409d0caf036e84f1afdaca9679;hb=bb97ecab3add22cf774d3bb8bdb9d1be537cc524;hp=768f89e7bcec755e285f744b32e8486acbe37296;hpb=fd77927b8883b81cc4a7bcb79f216e524043407d;p=freeglut diff --git a/src/freeglut_init.c b/src/freeglut_init.c index 768f89e..7893f05 100644 --- a/src/freeglut_init.c +++ b/src/freeglut_init.c @@ -25,6 +25,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#define FREEGLUT_BUILDING_LIB #include #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; @@ -677,6 +680,14 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) char* geometry = NULL; int i, j, argc = *pargc; + /* 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" ); @@ -696,7 +707,15 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) /* check if GLUT_FPS env var is set */ #ifndef _WIN32_WCE { + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO + char* fps = NULL; + err = _dupenv_s( &fps, &sLen, "GLUT_FPS" ); + if (err) + fgError("Error getting GLUT_FPS environment variable"); +#else const char *fps = getenv( "GLUT_FPS" ); +#endif if( fps ) { int interval; @@ -707,9 +726,20 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) else fgState.FPSInterval = interval; } + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO + free ( fps ); fps = NULL; /* dupenv_s allocates a string that we must free */ +#endif } - displayName = getenv( "DISPLAY"); + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO + err = _dupenv_s( &displayName, &sLen, "DISPLAY" ); + if (err) + fgError("Error getting DISPLAY environment variable"); +#else + displayName = getenv( "DISPLAY" ); +#endif for( i = 1; i < argc; i++ ) { @@ -794,6 +824,10 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) * variable for opening the X display (see code above): */ fghInitialize( displayName ); + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) && HAVE_ERRNO + free ( displayName ); displayName = NULL; /* dupenv_s allocates a string that we must free */ +#endif /* * Geometry parsing deffered until here because we may need the screen @@ -824,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 */ @@ -892,12 +936,21 @@ void FGAPIENTRY glutInitDisplayString( const char* displayMode ) * delimited by blanks or tabs. */ char *token ; + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) + char *next_token = NULL; +#endif size_t len = strlen ( displayMode ); char *buffer = (char *)malloc ( (len+1) * sizeof(char) ); memcpy ( buffer, displayMode, len ); buffer[len] = '\0'; + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) + token = strtok_s ( buffer, " \t", &next_token ); +#else token = strtok ( buffer, " \t" ); +#endif while ( token ) { /* Process this token */ @@ -1074,7 +1127,12 @@ void FGAPIENTRY glutInitDisplayString( const char* displayMode ) break ; } + /* will return true for VC8 (VC2005) and higher */ +#if TARGET_HOST_MS_WINDOWS && ( _MSC_VER >= 1400 ) + token = strtok_s ( NULL, " \t", &next_token ); +#else token = strtok ( NULL, " \t" ); +#endif } free ( buffer ); @@ -1099,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 ***/