Add basic timing information.
authorGareth Hughes <gareth@valinux.com>
Thu, 30 Nov 2000 01:44:24 +0000 (01:44 +0000)
committerGareth Hughes <gareth@valinux.com>
Thu, 30 Nov 2000 01:44:24 +0000 (01:44 +0000)
progs/demos/geartrain.c

index e36564715c207741dd3a5eca5734002cf65cc072..c612ad74bf0ffa54d0324462aae489eb9523635f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: geartrain.c,v 1.6 2000/04/06 02:22:59 brianp Exp $ */
+/* $Id: geartrain.c,v 1.7 2000/11/30 01:44:24 gareth Exp $ */
 
 /*
  * GearTrain Simulator * Version:  1.00
@@ -42,7 +42,7 @@ typedef GLfloat TDA[4];
 TDA background;
 
 
-struct AXLE 
+struct AXLE
   {
     char name[20];
       GLint id;
@@ -57,7 +57,7 @@ struct AXLE
   };
 
 
-struct GEAR 
+struct GEAR
   {
     char name[20];
     char type[7];
@@ -79,7 +79,7 @@ struct GEAR
   };
 
 
-struct BELT 
+struct BELT
   {
     char name[20];
       GLint id;
@@ -99,9 +99,12 @@ int number_of_belts;
 
 char Buf1[256], Buf2[256], Buf3[256], Buf4[256], Buf5[256];
 
+static GLint T0 = 0;
+static GLint Frames = 0;
 
-static void 
-strset (char buf[], char ch) 
+
+static void
+strset (char buf[], char ch)
 {
     int i;
     for (i = 0; i < strlen (buf); i++)
@@ -109,8 +112,8 @@ strset (char buf[], char ch)
 }
 
 
-static void 
-Clear_Buffers () 
+static void
+Clear_Buffers ()
 {
     strset (Buf1, 0);
     strset (Buf2, 0);
@@ -120,8 +123,8 @@ Clear_Buffers ()
 }
 
 
-static void 
-LoadTriplet (TDA A) 
+static void
+LoadTriplet (TDA A)
 {
     Clear_Buffers ();
     fscanf (mainfile, "%s %s %s %s", Buf1, Buf2, Buf3, Buf4);
@@ -131,8 +134,8 @@ LoadTriplet (TDA A)
 }
 
 
-static void 
-LoadReal (float *a) 
+static void
+LoadReal (float *a)
 {
     Clear_Buffers ();
     fscanf (mainfile, "%s %s", Buf1, Buf2);
@@ -140,8 +143,8 @@ LoadReal (float *a)
 }
 
 
-static void 
-LoadInteger (int *a) 
+static void
+LoadInteger (int *a)
 {
     Clear_Buffers ();
     fscanf (mainfile, "%s %s", Buf1, Buf2);
@@ -149,8 +152,8 @@ LoadInteger (int *a)
 }
 
 
-static void 
-LoadText (char *a) 
+static void
+LoadText (char *a)
 {
     Clear_Buffers ();
     fscanf (mainfile, "%s %s", Buf1, Buf2);
@@ -158,11 +161,11 @@ LoadText (char *a)
 }
 
 
-static void 
-getdata (char filename[]) 
+static void
+getdata (char filename[])
 {
     int gear_count = 0, axle_count = 0, belt_count = 0, i;
-    
+
     mainfile = fopen (filename, "r");
     if (!mainfile) {
        printf("Error: couldn't open %s\n", filename);
@@ -181,92 +184,92 @@ getdata (char filename[])
 
        if (!(strcmp (Buf1, "BACKGROUND")))
          LoadTriplet (background);
-      
+
        if (!(strcmp (Buf1, "ANAME")))
        {
            LoadText (a[axle_count].name);
            axle_count++;
        }
-      
+
        if (!(strcmp (Buf1, "ARADIUS")))
          LoadReal (&a[axle_count - 1].radius);
-      
+
        if (!(strcmp (Buf1, "AAXIS")))
          LoadInteger (&a[axle_count - 1].axis);
-      
+
        if (!(strcmp (Buf1, "ACOLOR")))
          LoadTriplet (a[axle_count - 1].color);
-      
+
        if (!(strcmp (Buf1, "APOSITION")))
          LoadTriplet (a[axle_count - 1].position);
-      
+
        if (!(strcmp (Buf1, "ALENGTH")))
          LoadReal (&a[axle_count - 1].length);
-      
+
        if (!(strcmp (Buf1, "AMOTORED")))
          LoadInteger (&a[axle_count - 1].motored);
-      
+
        if (!(strcmp (Buf1, "AANGULARVELOCITY")))
          LoadReal (&a[axle_count - 1].angular_velocity);
-      
+
        if (!(strcmp (Buf1, "ADIRECTION")))
          LoadInteger (&a[axle_count - 1].direction);
-      
+
        if (!(strcmp (Buf1, "GNAME")))
        {
            LoadText (g[gear_count].name);
            gear_count++;
        }
-      
+
        if (!(strcmp (Buf1, "GTYPE")))
          LoadText (g[gear_count - 1].type);
-      
+
        if (!(strcmp (Buf1, "GFACE")))
          LoadInteger (&g[gear_count - 1].face);
-      
+
        if (!(strcmp (Buf1, "GRADIUS")))
          LoadReal (&g[gear_count - 1].radius);
-      
+
        if (!(strcmp (Buf1, "GWIDTH")))
          LoadReal (&g[gear_count - 1].width);
-      
+
        if (!(strcmp (Buf1, "GTEETH")))
          LoadInteger (&g[gear_count - 1].teeth);
-      
+
        if (!(strcmp (Buf1, "GTOOTHDEPTH")))
          LoadReal (&g[gear_count - 1].tooth_depth);
-      
+
        if (!(strcmp (Buf1, "GCOLOR")))
          LoadTriplet (g[gear_count - 1].color);
-      
+
        if (!(strcmp (Buf1, "GAXLE")))
          LoadText (g[gear_count - 1].axle_name);
-      
+
        if (!(strcmp (Buf1, "GPOSITION")))
          LoadInteger (&g[gear_count - 1].relative_position);
-      
+
        if (!(strcmp (Buf1, "BELTNAME")))
        {
            LoadText (b[belt_count].name);
            belt_count++;
        }
-      
+
        if (!(strcmp (Buf1, "GEAR1NAME")))
          LoadText (b[belt_count - 1].gear1_name);
-      
+
        if (!(strcmp (Buf1, "GEAR2NAME")))
          LoadText (b[belt_count - 1].gear2_name);
     }
-  
+
     while (Buf1[0] != 0);
-  
+
     for (i = 0; i < number_of_gears; i++)
     {
        g[i].axis = -1;
        g[i].direction = 0;
        g[i].angular_velocity = 0.0;
     }
-  
+
     number_of_gears = gear_count;
     number_of_axles = axle_count;
     number_of_belts = belt_count;
@@ -274,12 +277,12 @@ getdata (char filename[])
 }
 
 
-static void 
-axle (GLint j, GLfloat radius, GLfloat length) 
+static void
+axle (GLint j, GLfloat radius, GLfloat length)
 {
     GLfloat angle, rad, incr = 10.0 * M_PI / 180.0;
-    
-    /* draw main cylinder */ 
+
+    /* draw main cylinder */
     glBegin (GL_QUADS);
     for (angle = 0.0; angle < 360.0; angle += 5.0)
     {
@@ -291,8 +294,8 @@ axle (GLint j, GLfloat radius, GLfloat length)
        glVertex3f (radius * cos (rad + incr), radius * sin (rad + incr), length / 2);
     }
     glEnd ();
-  
-    /* draw front face */ 
+
+    /* draw front face */
     glNormal3f (0.0, 0.0, 1.0);
     glBegin (GL_TRIANGLES);
     for (angle = 0.0; angle < 360.0; angle += 5.0)
@@ -304,8 +307,8 @@ axle (GLint j, GLfloat radius, GLfloat length)
        glVertex3f (0.0, 0.0, length / 2);
     }
     glEnd ();
-    
-    /* draw back face */ 
+
+    /* draw back face */
     glNormal3f (0.0, 0.0, -1.0);
     glBegin (GL_TRIANGLES);
     for (angle = 0.0; angle <= 360.0; angle += 5.0)
@@ -321,9 +324,9 @@ axle (GLint j, GLfloat radius, GLfloat length)
 
 
 
-static void 
-gear (GLint j, char type[], GLfloat radius, GLfloat width, 
-      GLint teeth, GLfloat tooth_depth) 
+static void
+gear (GLint j, char type[], GLfloat radius, GLfloat width,
+      GLint teeth, GLfloat tooth_depth)
 {
     GLint i;
     GLfloat r1, r2;
@@ -333,7 +336,7 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
 
     r1 = radius - tooth_depth;
     r2 = radius;
-    
+
     da = 2.0 * M_PI / teeth / 4.0;
     if (!g[j].face)
     {
@@ -346,7 +349,7 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
        n = 1.0;
     }
 
-    /* draw front face */ 
+    /* draw front face */
     if (!(strcmp (type, "NORMAL")))
     {
        glNormal3f (0.0, 0.0, 1.0 * n);
@@ -375,8 +378,8 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
        }
        glEnd ();
     }
-  
-    /* draw front sides of teeth */ 
+
+    /* draw front sides of teeth */
     if (!(strcmp (type, "NORMAL")))
     {
        glNormal3f (0.0, 0.0, 1.0 * n);
@@ -392,10 +395,10 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
        }
        glEnd ();
     }
-  
+
     glNormal3f (0.0, 0.0, -1.0 * n);
-  
-    /* draw back face */ 
+
+    /* draw back face */
     glBegin (GL_QUAD_STRIP);
     for (i = 0; i <= teeth; i++)
     {
@@ -406,8 +409,8 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
        glVertex3f (0.0, 0.0, -width * fraction);
     }
     glEnd ();
-  
-    /* draw back sides of teeth */ 
+
+    /* draw back sides of teeth */
     glNormal3f (0.0, 0.0, -1.0 * n);
     glBegin (GL_QUADS);
     da = 2.0 * M_PI / teeth / 4.0;
@@ -420,16 +423,16 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
        glVertex3f (r1 * cos (angle), r1 * sin (angle), -width * fraction);
     }
     glEnd ();
-    
-    
-    /* draw outward faces of teeth */ 
+
+
+    /* draw outward faces of teeth */
     if (!(strcmp (type, "NORMAL")))
     {
        glBegin (GL_QUAD_STRIP);
        for (i = 0; i < teeth; i++)
        {
            angle = i * 2.0 * M_PI / teeth;
-           
+
            glVertex3f (r1 * cos (angle), r1 * sin (angle), width * fraction);
            glVertex3f (r1 * cos (angle), r1 * sin (angle), -width * fraction);
            u = r2 * cos (angle + da) - r1 * cos (angle);
@@ -478,27 +481,27 @@ gear (GLint j, char type[], GLfloat radius, GLfloat width,
            glNormal3f (cos (angle), sin (angle), n);
        }
     }
-    
+
     glVertex3f (r1 * cos (0), r1 * sin (0), width * fraction);
     glVertex3f (r1 * cos (0), r1 * sin (0), -width * fraction);
     glEnd ();
 }
 
 
-static void 
-belt (struct GEAR g1, struct GEAR g2) 
+static void
+belt (struct GEAR g1, struct GEAR g2)
 {
     GLfloat D, alpha, phi, angle, incr, width;
     GLint indexes[3] =
     {
        0, 0, 0
     };
-    
+
     GLfloat col[3] =
     {
        0.0, 0.0, 0.0
     };
-    
+
     width = min (g1.width, g2.width);
     D = sqrt (pow (g1.position[0] - g2.position[0], 2) + pow (g1.position[1] - g2.position[1], 2) + pow (g1.position[2] - g2.position[2], 2));
     alpha = acos ((g2.position[0] - g1.position[0]) / D);
@@ -545,11 +548,11 @@ belt (struct GEAR g1, struct GEAR g2)
 }
 
 
-static int 
-axle_find (char axle_name[]) 
+static int
+axle_find (char axle_name[])
 {
     int i;
-    
+
     for (i = 0; i < number_of_axles; i++)
     {
        if (!(strcmp (axle_name, a[i].name)))
@@ -559,11 +562,11 @@ axle_find (char axle_name[])
 }
 
 
-static int 
-gear_find (char gear_name[]) 
+static int
+gear_find (char gear_name[])
 {
     int i;
-    
+
     for (i = 0; i < number_of_gears; i++)
     {
        if (!(strcmp (gear_name, g[i].name)))
@@ -573,13 +576,13 @@ gear_find (char gear_name[])
 }
 
 
-static void 
-process () 
+static void
+process ()
 {
     GLfloat x, y, z, D, dist;
     GLint axle_index, i, j, g1, g2, k;
     char error[80];
-    
+
     for (i = 0; i < number_of_gears; i++)
     {
        x = 0.0;
@@ -599,12 +602,12 @@ process ()
            y = 1.0;
         else
            z = 1.0;
-      
+
        g[i].position[0] = a[axle_index].position[0] + x * g[i].relative_position;
        g[i].position[1] = a[axle_index].position[1] + y * g[i].relative_position;
        g[i].position[2] = a[axle_index].position[2] + z * g[i].relative_position;
     }
-  
+
     for (k = 0; k < number_of_axles; k++)
     {
        for (i = 0; i < number_of_gears - 1; i++)
@@ -617,11 +620,11 @@ process ()
                    if (D < 1.1 * (g[i].radius - g[i].tooth_depth + g[j].radius - g[j].tooth_depth))
                    {
                        printf (error, "Gear %s and %s are too close to each other.", g[i].name, g[j].name);
-                     
+
                         /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
                        exit (1);
                    }
-                 
+
                    if (g[i].axis == 0)
                    {
                        dist = g[i].position[0] - g[j].position[0];
@@ -632,9 +635,9 @@ process ()
                    }
                    else
                        dist = g[i].position[2] - g[j].position[2];
-                 
+
                    dist = fabs (dist);
-                   
+
                    if (dist < (g[i].width / 2 + g[j].width / 2))
                    {
                        if ((g[i].motored) && (!(g[j].motored)) && (D < 0.95 * (g[i].radius + g[j].radius)))
@@ -646,13 +649,13 @@ process ()
                                 /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
                                exit (1);
                            }
-                         
+
                            g[j].motored = (a[axle_index].motored = 1);
                            g[j].direction = (a[axle_index].direction = -g[i].direction);
                            a[axle_index].angular_velocity = g[i].angular_velocity * g[i].teeth / g[j].teeth;
                            g[j].angular_velocity = (a[axle_index].angular_velocity *= g[i].radius / g[j].radius);
                        }
-                     
+
                        if ((!(g[i].motored)) && (g[j].motored) && (D < 0.95 * (g[i].radius + g[j].radius)))
                        {
                            axle_index = axle_find (g[i].axle_name);
@@ -662,16 +665,16 @@ process ()
                                 /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
                                exit (1);
                            }
-                         
+
                            g[i].motored = (a[axle_index].motored = 1);
                            g[i].direction = (a[axle_index].direction = -g[j].direction);
                            a[axle_index].angular_velocity = g[j].angular_velocity * g[j].teeth / g[i].teeth;
                            g[i].angular_velocity = (a[axle_index].angular_velocity *= g[j].radius / g[i].radius);
-                         
+
                        }
                    }
                }
-             
+
                if (!(strcmp (g[i].type, g[j].type)) && (!(strcmp (g[i].type, "BEVEL"))) && ((strcmp (g[i].axle_name, g[j].axle_name) != 0)) && (g[i].axis != g[j].axis))
                {
                    D = sqrt (pow (g[i].position[0] - g[j].position[0], 2) + pow (g[i].position[1] - g[j].position[1], 2) + pow (g[i].position[2] - g[j].position[2], 2));
@@ -689,8 +692,8 @@ process ()
                        a[axle_index].angular_velocity = g[i].angular_velocity * g[i].teeth / g[j].teeth;
                        g[j].angular_velocity = (a[axle_index].angular_velocity *= g[i].radius / g[j].radius);
                    }
-                 
-                   
+
+
                    if ((!(g[i].motored)) && (g[j].motored) && (D < 0.95 * sqrt (g[i].radius * g[i].radius + g[j].radius * g[j].radius)))
                    {
                        axle_index = axle_find (g[i].axle_name);
@@ -708,7 +711,7 @@ process ()
                }
            }
        }
-      
+
        for (i = 0; i < number_of_gears; i++)
        {
            axle_index = axle_find (g[i].axle_name);
@@ -719,7 +722,7 @@ process ()
                g[i].angular_velocity = a[axle_index].angular_velocity;
            }
        }
-      
+
        for (i = 0; i < number_of_belts; i++)
        {
            g1 = gear_find (b[i].gear1_name);
@@ -731,7 +734,7 @@ process ()
                 /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
                exit (1);
            }
-         
+
            if ((g[g1].axis == g[g2].axis) && (!strcmp (g[g1].type, g[g2].type)) && (!strcmp (g[g1].type, "NORMAL")))
            {
              /*
@@ -742,7 +745,7 @@ process ()
                 MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);
                 exit(1);
                 }
-              */ 
+              */
                if (g[g1].axis == 0)
                   {
                    dist = g[g1].position[0] - g[g2].position[0];
@@ -753,16 +756,16 @@ process ()
                }
                else
                    dist = g[g1].position[2] - g[g2].position[2];
-             
+
                dist = fabs (dist);
-               
+
                if (dist > (g[g1].width / 2 + g[g2].width / 2))
                {
                    printf (error, "Belt %s invalid.", b[i].name);
                     /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
                    exit (1);
                }
-             
+
                if (dist < (g[g1].width / 2 + g[g2].width / 2))
                {
                    if (D < g[g1].radius + g[g2].radius)
@@ -771,7 +774,7 @@ process ()
                         /*MessageBox(NULL,error,windowName,MB_ICONEXCLAMATION|MB_OK);*/
                        exit (1);
                    }
-                 
+
                    if ((g[g1].motored) && (!(g[g2].motored)))
                    {
                        axle_index = axle_find (g[g2].axle_name);
@@ -779,7 +782,7 @@ process ()
                        g[g2].direction = (a[axle_index].direction = g[g1].direction);
                        g[g2].angular_velocity = (a[axle_index].angular_velocity = g[g1].angular_velocity * g[g1].radius / g[g2].radius);
                    }
-                 
+
                    if ((!(g[g1].motored)) && (g[g2].motored))
                    {
                        axle_index = axle_find (g[g1].axle_name);
@@ -790,7 +793,7 @@ process ()
                }
            }
        }
-      
+
        for (i = 0; i < number_of_gears; i++)
        {
            axle_index = axle_find (g[i].axle_name);
@@ -809,20 +812,20 @@ process ()
 GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 10.0;
 
 
-static void 
-draw (void) 
+static void
+draw (void)
 {
     int i;
     GLfloat x, y, z;
     int index;
 
     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-    
+
     glPushMatrix ();
     glRotatef (view_rotx, 1.0, 0.0, 0.0);
     glRotatef (view_roty, 0.0, 1.0, 0.0);
     glRotatef (view_rotz, 0.0, 0.0, 1.0);
-    
+
     for (i = 0; i < number_of_gears; i++)
     {
        x = 0.0;
@@ -837,15 +840,15 @@ draw (void)
            x = 1.0;
         else
            z = 1.0;
-      
+
        if (z != 1.0)
            glRotatef (90.0, x, y, z);
-      
+
        glRotatef (g[i].direction * g[i].angle, 0.0, 0.0, 1.0);
        glCallList (g[i].id);
        glPopMatrix ();
     }
-  
+
     for (i = 0; i < number_of_axles; i++)
     {
        x = 0.0;
@@ -862,11 +865,11 @@ draw (void)
 
        if (z != 1.0)
            glRotatef (90.0, x, y, z);
-      
+
        glCallList (a[i].id);
        glPopMatrix ();
     }
-  
+
     for (i = 0; i < number_of_belts; i++)
     {
        x = 0.0;
@@ -881,23 +884,35 @@ draw (void)
            x = 1.0;
         else
            z = 1.0;
-      
+
        if (z != 1.0)
            glRotatef (90.0, x, y, z);
-      
+
        glCallList (b[i].id);
        glPopMatrix ();
     }
-  
+
     glPopMatrix ();
     glutSwapBuffers ();
+
+    {
+       GLint t = glutGet(GLUT_ELAPSED_TIME);
+       Frames++;
+       if (t - T0 >= 5000) {
+           GLfloat seconds = (t - T0) / 1000.0;
+           GLfloat fps = Frames / seconds;
+           printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps);
+           T0 = t;
+           Frames = 0;
+       }
+    }
 }
 
 
 
 
-static void 
-idle (void) 
+static void
+idle (void)
 {
     int i;
     for (i = 0; i < number_of_gears; i++)
@@ -908,9 +923,9 @@ idle (void)
 
 
 
-/* change view angle, exit upon ESC */ 
-static void 
-key (unsigned char k, int x, int y) 
+/* change view angle, exit upon ESC */
+static void
+key (unsigned char k, int x, int y)
 {
     switch (k)
     {
@@ -940,9 +955,9 @@ key (unsigned char k, int x, int y)
 
 
 
-/* new window size or exposure */ 
-static void 
-reshape (int width, int height) 
+/* new window size or exposure */
+static void
+reshape (int width, int height)
 {
     glViewport (0, 0, (GLint) width, (GLint) height);
     glMatrixMode (GL_PROJECTION);
@@ -957,7 +972,7 @@ reshape (int width, int height)
        GLfloat h = (GLfloat) height / (GLfloat) width;
        glFrustum (-1.0, 1.0, -h, h, 5.0, 60.0);
     }
-    
+
     glMatrixMode (GL_MODELVIEW);
     glLoadIdentity ();
     glTranslatef (0.0, 0.0, -40.0);
@@ -966,8 +981,8 @@ reshape (int width, int height)
 
 
 
-static void 
-init (void) 
+static void
+init (void)
 {
     GLfloat matShine = 20.00F;
     GLfloat light0Pos[4] =
@@ -975,19 +990,19 @@ init (void)
        0.70F, 0.70F, 1.25F, 0.50F
     };
     int i;
-    
+
     glClearColor (background[0], background[1], background[2], 1.0F);
     glClearIndex ((GLfloat) 0.0);
-    
+
     glMaterialf (GL_FRONT_AND_BACK, GL_SHININESS, matShine);
     glLightfv (GL_LIGHT0, GL_POSITION, light0Pos);
     glEnable (GL_LIGHT0);
-  
+
     glEnable (GL_LIGHTING);
     glEnable (GL_DEPTH_TEST);
     for (i = 0; i < number_of_gears; i++)
       g[i].angle = 0.0;
-  
+
     for (i = 0; i < number_of_gears; i++)
     {
        g[i].id = glGenLists (1);
@@ -997,7 +1012,7 @@ init (void)
        gear (i, g[i].type, g[i].radius, g[i].width, g[i].teeth, g[i].tooth_depth);
        glEndList ();
     }
-  
+
     for (i = 0; i < number_of_axles; i++)
     {
        a[i].id = glGenLists (1);
@@ -1007,7 +1022,7 @@ init (void)
        axle (i, a[i].radius, a[i].length);
        glEndList ();
     }
-  
+
     for (i = 0; i < number_of_belts; i++)
     {
        b[i].id = glGenLists (1);
@@ -1015,14 +1030,14 @@ init (void)
        belt (g[gear_find (b[i].gear1_name)], g[gear_find (b[i].gear2_name)]);
        glEndList ();
     }
-  
+
     glEnable (GL_COLOR_MATERIAL);
 }
 
 
 
-int 
-main (int argc, char *argv[]) 
+int
+main (int argc, char *argv[])
 {
     char *file;
 
@@ -1034,14 +1049,14 @@ main (int argc, char *argv[])
     glutInitWindowPosition (0, 0);
     glutInitWindowSize(640,480);
     glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE );
-    
+
     if (glutCreateWindow ("Gear Train Simulation") == GL_FALSE)
       exit (1);
 
     getdata (file);
     process ();
     init ();
-    
+
     glutDisplayFunc (draw);
     glutReshapeFunc (reshape);
     glutKeyboardFunc (key);
@@ -1049,4 +1064,3 @@ main (int argc, char *argv[])
     glutMainLoop ();
     return 0;
 }
-