X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffg_main.c;h=ff0111055bf11b3d89feab40f6eee7cd1956303c;hb=6036c01688246f8f824de48ca2557ab9f881eee0;hp=f409b330d3745805bdf0fa0467f53b6e09a171aa;hpb=0bae56c1cef93abbe6ae23e091f03ce8ffa8d68e;p=freeglut diff --git a/src/fg_main.c b/src/fg_main.c index f409b33..ff01110 100644 --- a/src/fg_main.c +++ b/src/fg_main.c @@ -1,5 +1,5 @@ /* - * freeglut_main.c + * fg_main.c * * The windows message processing methods. * @@ -27,17 +27,8 @@ #include #include "fg_internal.h" -#ifdef HAVE_ERRNO_H -# include -#endif +#include #include -#ifdef HAVE_VFPRINTF -# define VFPRINTF(s,f,a) vfprintf((s),(f),(a)) -#elif defined(HAVE__DOPRNT) -# define VFPRINTF(s,f,a) _doprnt((f),(a),(s)) -#else -# define VFPRINTF(s,f,a) -#endif /* * Try to get the maximum value allowed for ints, falling back to the minimum @@ -163,7 +154,7 @@ static void fghcbProcessWork( SFG_Window *window, SFG_Enumerator *enumerator ) { if( window->State.WorkMask ) - fgProcessWork ( window ); + fgProcessWork ( window ); fgEnumSubWindows( window, fghcbProcessWork, enumerator ); } @@ -188,7 +179,7 @@ static void fghcbCheckJoystickPolls( SFG_Window *window, SFG_Enumerator *enumerator ) { fg_time_t checkTime; - + if (window->State.JoystickPollRate > 0 && FETCH_WCB( *window, Joystick )) { /* This window has a joystick to be polled (if pollrate <= 0, user needs to poll manually with glutForceJoystickFunc */ @@ -209,7 +200,7 @@ static void fghcbCheckJoystickPolls( SFG_Window *window, /* * Check all windows for joystick polling - * + * * The real way to do this is to make use of the glutTimer() API * to more cleanly re-implement the joystick API. Then, this code * and all other "joystick timer" code can be yanked. @@ -242,22 +233,22 @@ static void fghCheckTimers( void ) fgListRemove( &fgState.Timers, &timer->Node ); fgListAppend( &fgState.FreeTimers, &timer->Node ); - timer->Callback( timer->ID ); + timer->Callback( timer->ID, timer->CallbackData ); } } - + /* Platform-dependent time in milliseconds, as an unsigned 64-bit integer. * This doesn't overflow in any reasonable time, so no need to worry about * that. The GLUT API return value will however overflow after 49.7 days, * which means you will still get in trouble when running the * application for more than 49.7 days. - */ + */ fg_time_t fgSystemTime(void) { - return fgPlatformSystemTime(); + return fgPlatformSystemTime(); } - + /* * Elapsed Time */ @@ -278,7 +269,7 @@ void fgError( const char *fmt, ... ) va_start( ap, fmt ); /* call user set error handler here */ - fgState.ErrorFunc(fmt, ap); + fgState.ErrorFunc(fmt, ap, fgState.ErrorFuncData); va_end( ap ); @@ -289,7 +280,7 @@ void fgError( const char *fmt, ... ) fprintf( stderr, "freeglut "); if( fgState.ProgramName ) fprintf( stderr, "(%s): ", fgState.ProgramName ); - VFPRINTF( stderr, fmt, ap ); + vfprintf( stderr, fmt, ap ); fprintf( stderr, "\n" ); va_end( ap ); @@ -311,7 +302,7 @@ void fgWarning( const char *fmt, ... ) va_start( ap, fmt ); /* call user set warning handler here */ - fgState.WarningFunc(fmt, ap); + fgState.WarningFunc(fmt, ap, fgState.WarningFuncData); va_end( ap ); @@ -322,7 +313,7 @@ void fgWarning( const char *fmt, ... ) fprintf( stderr, "freeglut "); if( fgState.ProgramName ) fprintf( stderr, "(%s): ", fgState.ProgramName ); - VFPRINTF( stderr, fmt, ap ); + vfprintf( stderr, fmt, ap ); fprintf( stderr, "\n" ); va_end( ap ); @@ -385,10 +376,10 @@ static void fghSleepForEvents( void ) msec = fghNextTimer( ); /* XXX Should use GLUT timers for joysticks... */ /* XXX Dumb; forces granularity to .01sec */ - if( fgState.NumActiveJoysticks>0 && ( msec > 10 ) ) + if( fgState.NumActiveJoysticks>0 && ( msec > 10 ) ) msec = 10; - fgPlatformSleepForEvents ( msec ); + fgPlatformSleepForEvents ( msec ); } @@ -409,7 +400,7 @@ void fgProcessWork(SFG_Window *window) fgPlatformInitWork(window); /* Call init context callback */ - INVOKE_WCB( *window, InitContext, ()); + INVOKE_WCB( *window, InitContext, ( ) ); /* Lastly, check if we have a display callback, error out if not * This is the right place to do it, as the redisplay will be @@ -455,7 +446,7 @@ void fgProcessWork(SFG_Window *window) void FGAPIENTRY glutMainLoopEvent( void ) { /* Process input */ - fgPlatformProcessSingleEvent (); + fgPlatformProcessSingleEvent (); if( fgState.Timers.First ) fghCheckTimers( ); @@ -488,14 +479,16 @@ void FGAPIENTRY glutMainLoop( void ) if (!fgStructure.Windows.First) fgError(" ERROR: glutMainLoop called with no windows created."); - fgPlatformMainLoopPreliminaryWork (); + fgPlatformMainLoopPreliminaryWork (); fgState.ExecState = GLUT_EXEC_STATE_RUNNING ; - while( fgState.ExecState == GLUT_EXEC_STATE_RUNNING ) + for(;;) { SFG_Window *window; glutMainLoopEvent( ); + if( fgState.ExecState != GLUT_EXEC_STATE_RUNNING ) + break; /* * Step through the list of windows, seeing if there are any * that are not menus @@ -516,7 +509,7 @@ void FGAPIENTRY glutMainLoop( void ) fgStructure.CurrentWindow->IsMenu ) /* fail safe */ fgSetWindow( window ); - fgState.IdleCallback( ); + fgState.IdleCallback( fgState.IdleCallbackData ); } else fghSleepForEvents( );