X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_init.c;h=b419025e949652356d151de96155abef598f1c8c;hb=7f1fdd0379f174a74b4b61f0dbcdf2b39e7e9d97;hp=bf5b5ac8bb19100d175ebeec28e14de96c41b9eb;hpb=9e31ffd2f4fe1e5093876e56a0da3db3f66acdfb;p=freeglut diff --git a/src/freeglut_init.c b/src/freeglut_init.c index bf5b5ac..b419025 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" @@ -84,8 +85,8 @@ SFG_State fgState = { { -1, -1, GL_FALSE }, /* Position */ NULL, /* ProgramName */ GL_FALSE, /* JoysticksInitialised */ GL_FALSE, /* InputDevsInitialised */ - 0, /* AuxiliaryBufferNumber */ - 0, /* SampleNumber */ + 1, /* AuxiliaryBufferNumber */ + 4, /* SampleNumber */ 1, /* MajorVersion */ 0, /* MajorVersion */ 0 /* ContextFlags */ @@ -677,6 +678,12 @@ 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; + errno_t err; +#endif + if( fgState.Initialised ) fgError( "illegal glutInit() reinitialization attempt" ); @@ -696,7 +703,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 ) + 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 +722,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 ) + 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 ) + 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 +820,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 ) + 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 +854,16 @@ void FGAPIENTRY glutInit( int* pargc, char** argv ) } } +#ifdef 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 +932,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 +1123,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 );