X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=progs%2Fdemos%2FLorenz%2Florenz.c;h=a3a61dbe5aa20242b90f47e36f10c712facb1594;hb=8f7014249e5f2b352569c7b22aa190125aeef9ab;hp=be32c771c226a3c8ad608624afe5bb7ce93493d0;hpb=89c225066899f8956939f8175a0d548cd6f63a62;p=freeglut diff --git a/progs/demos/Lorenz/lorenz.c b/progs/demos/Lorenz/lorenz.c index be32c77..a3a61db 100644 --- a/progs/demos/Lorenz/lorenz.c +++ b/progs/demos/Lorenz/lorenz.c @@ -29,11 +29,11 @@ /* Include Files */ #include #include +#include #include #include -#include #include -#ifdef WIN32 +#ifdef _MSC_VER /* DUMP MEMORY LEAKS */ #include #endif @@ -108,6 +108,16 @@ void advance_in_time ( double time_step, double position[3], double new_position ( deriv0[i] + 2.0 * ( deriv1[i] + deriv2[i] ) + deriv3[i] ) ; } +static void +checkedFGets ( char *s, int size, FILE *stream ) +{ + if ( fgets ( s, size, stream ) == NULL ) { + fprintf ( stderr, "fgets failed\n"); + exit ( EXIT_FAILURE ); + } +} + + /* GLUT callbacks */ #define INPUT_LINE_LENGTH 80 @@ -143,15 +153,15 @@ void key_cb ( unsigned char key, int x, int y ) case 'm' : case 'M' : /* Modify the Lorenz parameters */ printf ( "Please enter new value for (default %f, currently %f): ", s0, sigma ) ; - fgets ( inputline, INPUT_LINE_LENGTH-1, stdin ) ; + checkedFGets ( inputline, sizeof ( inputline ), stdin ) ; sscanf ( inputline, "%lf", &sigma ) ; printf ( "Please enter new value for (default %f, currently %f): ", b0, b ) ; - fgets ( inputline, INPUT_LINE_LENGTH-1, stdin ) ; + checkedFGets ( inputline, sizeof ( inputline ), stdin ) ; sscanf ( inputline, "%lf", &b ) ; printf ( "Please enter new value for (default %f, currently %f): ", r0, r ) ; - fgets ( inputline, INPUT_LINE_LENGTH-1, stdin ) ; + checkedFGets ( inputline, sizeof ( inputline ), stdin ) ; sscanf ( inputline, "%lf", &r ) ; break ; @@ -210,8 +220,7 @@ void mouse_cb ( int button, int updown, int x, int y ) { if ( updown == GLUT_DOWN ) { - double dist = 1.0e20 ; /* A very large number */ - dist = 0.0 ; /* so we don't get "unused variable" compiler warning */ + /*double dist = 1.0e20 ; A very large number */ /* The idea here is that we go into "pick" mode and pick the nearest point to the mouse click position. Unfortunately I don't have the time to implement it at the moment. */ @@ -233,10 +242,23 @@ void draw_curve ( int index, double position [ NUM_POINTS ][3] ) glEnd () ; } -void display_cb ( void ) +void bitmapPrintf (const char *fmt, ...) { - char string [ 80 ] ; + static char buf[256]; + va_list args; + + va_start(args, fmt); +#if defined(WIN32) && !defined(__CYGWIN__) + (void) _vsnprintf (buf, sizeof(buf), fmt, args); +#else + (void) vsnprintf (buf, sizeof(buf), fmt, args); +#endif + va_end(args); + glutBitmapString ( GLUT_BITMAP_HELVETICA_12, (unsigned char*)buf ) ; +} +void display_cb ( void ) +{ glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ; glColor3d ( 1.0, 1.0, 1.0 ) ; /* White */ @@ -258,9 +280,8 @@ void display_cb ( void ) /* Print the distance between the two points */ glColor3d ( 1.0, 1.0, 1.0 ) ; /* White */ - sprintf ( string, "Distance: %10.6f", distance ) ; - glRasterPos2i ( 10, 10 ) ; - glutBitmapString ( GLUT_BITMAP_HELVETICA_12, (unsigned char*)string ) ; + glRasterPos2i ( 1, 1 ) ; + bitmapPrintf ( "Distance: %10.6f", distance ) ; glutSwapBuffers(); } @@ -347,7 +368,7 @@ int main ( int argc, char *argv[] ) /* Enter the GLUT main loop */ glutMainLoop () ; -#ifdef WIN32 +#ifdef _MSC_VER /* DUMP MEMORY LEAK INFORMATION */ _CrtDumpMemoryLeaks () ; #endif