+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <math.h> /* for cos(), sin(), and sqrt() */\r
+#include <GL/glut.h> /* OpenGL Utility Toolkit header */\r
+\r
+/* Some <math.h> files do not define M_PI... */\r
+#ifndef M_PI\r
+#define M_PI 3.14159265\r
+#endif\r
+\r
+/* Variable controlling various rendering modes. */\r
+static int stencilReflection = 1, stencilShadow = 1, offsetShadow = 1;\r
+static int renderShadow = 1, renderDinosaur = 1, renderReflection = 1;\r
+static int linearFiltering = 0, useMipmaps = 0, useTexture = 1;\r
+static int reportSpeed = 0;\r
+static int animation = 1;\r
+static GLboolean lightSwitch = GL_TRUE;\r
+static int directionalLight = 1;\r
+static int forceExtension = 0;\r
+\r
+/* Time varying or user-controled variables. */\r
+static float jump = 0.0;\r
+static float lightAngle = 0.0, lightHeight = 20;\r
+GLfloat angle = -150; /* in degrees */\r
+GLfloat angle2 = 30; /* in degrees */\r
+\r
+int moving, startx, starty;\r
+int lightMoving = 0, lightStartX, lightStartY;\r
+\r
+enum {\r
+ MISSING, EXTENSION, ONE_DOT_ONE\r
+};\r
+int polygonOffsetVersion;\r
+\r
+static GLdouble bodyWidth = 3.0;\r
+/* *INDENT-OFF* */\r
+static GLfloat body[][2] = { {0, 3}, {1, 1}, {5, 1}, {8, 4}, {10, 4}, {11, 5},\r
+ {11, 11.5}, {13, 12}, {13, 13}, {10, 13.5}, {13, 14}, {13, 15}, {11, 16},\r
+ {8, 16}, {7, 15}, {7, 13}, {8, 12}, {7, 11}, {6, 6}, {4, 3}, {3, 2},\r
+ {1, 2} };\r
+static GLfloat arm[][2] = { {8, 10}, {9, 9}, {10, 9}, {13, 8}, {14, 9}, {16, 9},\r
+ {15, 9.5}, {16, 10}, {15, 10}, {15.5, 11}, {14.5, 10}, {14, 11}, {14, 10},\r
+ {13, 9}, {11, 11}, {9, 11} };\r
+static GLfloat leg[][2] = { {8, 6}, {8, 4}, {9, 3}, {9, 2}, {8, 1}, {8, 0.5}, {9, 0},\r
+ {12, 0}, {10, 1}, {10, 2}, {12, 4}, {11, 6}, {10, 7}, {9, 7} };\r
+static GLfloat eye[][2] = { {8.75, 15}, {9, 14.7}, {9.6, 14.7}, {10.1, 15},\r
+ {9.6, 15.25}, {9, 15.25} };\r
+static GLfloat lightPosition[4];\r
+static GLfloat lightColor[] = {0.8, 1.0, 0.8, 1.0}; /* green-tinted */\r
+static GLfloat skinColor[] = {0.1, 1.0, 0.1, 1.0}, eyeColor[] = {1.0, 0.2, 0.2, 1.0};\r
+/* *INDENT-ON* */\r
+\r
+/* Nice floor texture tiling pattern. */\r
+static char *circles[] = {\r
+ "....xxxx........",\r
+ "..xxxxxxxx......",\r
+ ".xxxxxxxxxx.....",\r
+ ".xxx....xxx.....",\r
+ "xxx......xxx....",\r
+ "xxx......xxx....",\r
+ "xxx......xxx....",\r
+ "xxx......xxx....",\r
+ ".xxx....xxx.....",\r
+ ".xxxxxxxxxx.....",\r
+ "..xxxxxxxx......",\r
+ "....xxxx........",\r
+ "................",\r
+ "................",\r
+ "................",\r
+ "................",\r
+};\r