X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_main.c;h=d464ca4f7d5e59de8ea9a7cbbecca135cf1a5fbb;hb=edcfc6757dc71f2764b1a6b44c9b0bde45364b16;hp=134ffb3071ccb7cffdb71f3e25ad35d26295f187;hpb=0fd65e65061141e7317caba38801580374f09d0b;p=freeglut diff --git a/src/freeglut_main.c b/src/freeglut_main.c index 134ffb3..d464ca4 100644 --- a/src/freeglut_main.c +++ b/src/freeglut_main.c @@ -27,16 +27,17 @@ #include #include "freeglut_internal.h" - -#include -#if TARGET_HOST_UNIX_X11 -#include -#include -#include #include -#include -#elif TARGET_HOST_WIN32 -#elif TARGET_HOST_WINCE +#include +#if HAVE_VPRINTF +# define VFPRINTF(s,f,a) vfprintf((s),(f),(a)) +#elif HAVE_DOPRNT +# define VFPRINTF(s,f,a) _doprnt((f),(a),(s)) +#else +# define VFPRINTF(s,f,a) +#endif + +#if TARGET_HOST_WINCE typedef struct GXDisplayProperties GXDisplayProperties; typedef struct GXKeyList GXKeyList; @@ -52,8 +53,15 @@ struct GXKeyList gxKeyList; #endif -#ifndef MAX -#define MAX(a,b) (((a)>(b)) ? (a) : (b)) +/* + * Try to get the maximum value allowed for ints, falling back to the minimum + * guaranteed by ISO C99 if there is no suitable header. + */ +#if HAVE_LIMITS_H +# include +#endif +#ifndef INT_MAX +# define INT_MAX 32767 #endif #ifndef MIN @@ -346,8 +354,8 @@ void fgError( const char *fmt, ... ) fprintf( stderr, "freeglut "); if( fgState.ProgramName ) - fprintf (stderr, "(%s): ", fgState.ProgramName); - vfprintf( stderr, fmt, ap ); + fprintf( stderr, "(%s): ", fgState.ProgramName ); + VFPRINTF( stderr, fmt, ap ); fprintf( stderr, "\n" ); va_end( ap ); @@ -367,7 +375,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 ); @@ -448,8 +456,10 @@ static void fghSleepForEvents( void ) return; msec = fghNextTimer( ); - if( fghHaveJoystick( ) ) /* XXX Use GLUT timers for joysticks... */ - msec = MIN( msec, 10 ); /* XXX Dumb; forces granularity to .01sec */ + /* XXX Use GLUT timers for joysticks... */ + /* XXX Dumb; forces granularity to .01sec */ + if( fghHaveJoystick( ) && ( msec < 10 ) ) + msec = 10; #if TARGET_HOST_UNIX_X11 /* @@ -475,7 +485,7 @@ static void fghSleepForEvents( void ) wait.tv_usec = (msec % 1000) * 1000; err = select( socket+1, &fdset, NULL, NULL, &wait ); - if( -1 == err ) + if( ( -1 == err ) && ( errno != EINTR ) ) fgWarning ( "freeglut select() error: %d", errno ); } #elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE @@ -1213,7 +1223,6 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, case WM_ACTIVATE: if (LOWORD(wParam) != WA_INACTIVE) { - /* glutSetCursor( fgStructure.Window->State.Cursor ); */ /* printf("WM_ACTIVATE: glutSetCursor( %p, %d)\n", window, window->State.Cursor ); */ glutSetCursor( window->State.Cursor ); @@ -1232,38 +1241,9 @@ LRESULT CALLBACK fgWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, * XXX and implementing a nested case in-line. */ case WM_SETCURSOR: - /* Set the cursor AND change it for this window class. */ -#define MAP_CURSOR(a,b) \ - case a: \ - SetCursor( LoadCursor( NULL, b ) ); \ - break; - - /* Nuke the cursor AND change it for this window class. */ -#define ZAP_CURSOR(a,b) \ - case a: \ - SetCursor( NULL ); \ - break; - /* printf ( "Cursor event %x %x %x %x\n", window, window->State.Cursor, lParam, wParam ) ; */ if( LOWORD( lParam ) == HTCLIENT ) - switch( window->State.Cursor ) - { - MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW, IDC_ARROW ); - MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW, IDC_ARROW ); - MAP_CURSOR( GLUT_CURSOR_INFO, IDC_HELP ); - MAP_CURSOR( GLUT_CURSOR_DESTROY, IDC_CROSS ); - MAP_CURSOR( GLUT_CURSOR_HELP, IDC_HELP ); - MAP_CURSOR( GLUT_CURSOR_CYCLE, IDC_SIZEALL ); - MAP_CURSOR( GLUT_CURSOR_SPRAY, IDC_CROSS ); - MAP_CURSOR( GLUT_CURSOR_WAIT, IDC_WAIT ); - MAP_CURSOR( GLUT_CURSOR_TEXT, IDC_UPARROW ); - MAP_CURSOR( GLUT_CURSOR_CROSSHAIR, IDC_CROSS ); - /* MAP_CURSOR( GLUT_CURSOR_NONE, IDC_NO ); */ - ZAP_CURSOR( GLUT_CURSOR_NONE, NULL ); - - default: - MAP_CURSOR( GLUT_CURSOR_UP_DOWN, IDC_ARROW ); - } + glutSetCursor ( window->State.Cursor ) ; else lRet = DefWindowProc( hWnd, uMsg, wParam, lParam ); break;