diff --git a/src/mesa/glapi/glapitable.h b/src/mesa/glapi/glapitable.h
index ca069e3..305f71c 100644
--- a/src/mesa/glapi/glapitable.h
+++ b/src/mesa/glapi/glapitable.h
@@ -6,716 +6,716 @@
 
 struct _glapi_table
 {
-   void (*NewList)(GLuint list, GLenum mode); /* 0 */
-   void (*EndList)(void); /* 1 */
-   void (*CallList)(GLuint list); /* 2 */
-   void (*CallLists)(GLsizei n, GLenum type, const GLvoid * lists); /* 3 */
-   void (*DeleteLists)(GLuint list, GLsizei range); /* 4 */
-   GLuint (*GenLists)(GLsizei range); /* 5 */
-   void (*ListBase)(GLuint base); /* 6 */
-   void (*Begin)(GLenum mode); /* 7 */
-   void (*Bitmap)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap); /* 8 */
-   void (*Color3b)(GLbyte red, GLbyte green, GLbyte blue); /* 9 */
-   void (*Color3bv)(const GLbyte * v); /* 10 */
-   void (*Color3d)(GLdouble red, GLdouble green, GLdouble blue); /* 11 */
-   void (*Color3dv)(const GLdouble * v); /* 12 */
-   void (*Color3f)(GLfloat red, GLfloat green, GLfloat blue); /* 13 */
-   void (*Color3fv)(const GLfloat * v); /* 14 */
-   void (*Color3i)(GLint red, GLint green, GLint blue); /* 15 */
-   void (*Color3iv)(const GLint * v); /* 16 */
-   void (*Color3s)(GLshort red, GLshort green, GLshort blue); /* 17 */
-   void (*Color3sv)(const GLshort * v); /* 18 */
-   void (*Color3ub)(GLubyte red, GLubyte green, GLubyte blue); /* 19 */
-   void (*Color3ubv)(const GLubyte * v); /* 20 */
-   void (*Color3ui)(GLuint red, GLuint green, GLuint blue); /* 21 */
-   void (*Color3uiv)(const GLuint * v); /* 22 */
-   void (*Color3us)(GLushort red, GLushort green, GLushort blue); /* 23 */
-   void (*Color3usv)(const GLushort * v); /* 24 */
-   void (*Color4b)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); /* 25 */
-   void (*Color4bv)(const GLbyte * v); /* 26 */
-   void (*Color4d)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); /* 27 */
-   void (*Color4dv)(const GLdouble * v); /* 28 */
-   void (*Color4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); /* 29 */
-   void (*Color4fv)(const GLfloat * v); /* 30 */
-   void (*Color4i)(GLint red, GLint green, GLint blue, GLint alpha); /* 31 */
-   void (*Color4iv)(const GLint * v); /* 32 */
-   void (*Color4s)(GLshort red, GLshort green, GLshort blue, GLshort alpha); /* 33 */
-   void (*Color4sv)(const GLshort * v); /* 34 */
-   void (*Color4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); /* 35 */
-   void (*Color4ubv)(const GLubyte * v); /* 36 */
-   void (*Color4ui)(GLuint red, GLuint green, GLuint blue, GLuint alpha); /* 37 */
-   void (*Color4uiv)(const GLuint * v); /* 38 */
-   void (*Color4us)(GLushort red, GLushort green, GLushort blue, GLushort alpha); /* 39 */
-   void (*Color4usv)(const GLushort * v); /* 40 */
-   void (*EdgeFlag)(GLboolean flag); /* 41 */
-   void (*EdgeFlagv)(const GLboolean * flag); /* 42 */
-   void (*End)(void); /* 43 */
-   void (*Indexd)(GLdouble c); /* 44 */
-   void (*Indexdv)(const GLdouble * c); /* 45 */
-   void (*Indexf)(GLfloat c); /* 46 */
-   void (*Indexfv)(const GLfloat * c); /* 47 */
-   void (*Indexi)(GLint c); /* 48 */
-   void (*Indexiv)(const GLint * c); /* 49 */
-   void (*Indexs)(GLshort c); /* 50 */
-   void (*Indexsv)(const GLshort * c); /* 51 */
-   void (*Normal3b)(GLbyte nx, GLbyte ny, GLbyte nz); /* 52 */
-   void (*Normal3bv)(const GLbyte * v); /* 53 */
-   void (*Normal3d)(GLdouble nx, GLdouble ny, GLdouble nz); /* 54 */
-   void (*Normal3dv)(const GLdouble * v); /* 55 */
-   void (*Normal3f)(GLfloat nx, GLfloat ny, GLfloat nz); /* 56 */
-   void (*Normal3fv)(const GLfloat * v); /* 57 */
-   void (*Normal3i)(GLint nx, GLint ny, GLint nz); /* 58 */
-   void (*Normal3iv)(const GLint * v); /* 59 */
-   void (*Normal3s)(GLshort nx, GLshort ny, GLshort nz); /* 60 */
-   void (*Normal3sv)(const GLshort * v); /* 61 */
-   void (*RasterPos2d)(GLdouble x, GLdouble y); /* 62 */
-   void (*RasterPos2dv)(const GLdouble * v); /* 63 */
-   void (*RasterPos2f)(GLfloat x, GLfloat y); /* 64 */
-   void (*RasterPos2fv)(const GLfloat * v); /* 65 */
-   void (*RasterPos2i)(GLint x, GLint y); /* 66 */
-   void (*RasterPos2iv)(const GLint * v); /* 67 */
-   void (*RasterPos2s)(GLshort x, GLshort y); /* 68 */
-   void (*RasterPos2sv)(const GLshort * v); /* 69 */
-   void (*RasterPos3d)(GLdouble x, GLdouble y, GLdouble z); /* 70 */
-   void (*RasterPos3dv)(const GLdouble * v); /* 71 */
-   void (*RasterPos3f)(GLfloat x, GLfloat y, GLfloat z); /* 72 */
-   void (*RasterPos3fv)(const GLfloat * v); /* 73 */
-   void (*RasterPos3i)(GLint x, GLint y, GLint z); /* 74 */
-   void (*RasterPos3iv)(const GLint * v); /* 75 */
-   void (*RasterPos3s)(GLshort x, GLshort y, GLshort z); /* 76 */
-   void (*RasterPos3sv)(const GLshort * v); /* 77 */
-   void (*RasterPos4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 78 */
-   void (*RasterPos4dv)(const GLdouble * v); /* 79 */
-   void (*RasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 80 */
-   void (*RasterPos4fv)(const GLfloat * v); /* 81 */
-   void (*RasterPos4i)(GLint x, GLint y, GLint z, GLint w); /* 82 */
-   void (*RasterPos4iv)(const GLint * v); /* 83 */
-   void (*RasterPos4s)(GLshort x, GLshort y, GLshort z, GLshort w); /* 84 */
-   void (*RasterPos4sv)(const GLshort * v); /* 85 */
-   void (*Rectd)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); /* 86 */
-   void (*Rectdv)(const GLdouble * v1, const GLdouble * v2); /* 87 */
-   void (*Rectf)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); /* 88 */
-   void (*Rectfv)(const GLfloat * v1, const GLfloat * v2); /* 89 */
-   void (*Recti)(GLint x1, GLint y1, GLint x2, GLint y2); /* 90 */
-   void (*Rectiv)(const GLint * v1, const GLint * v2); /* 91 */
-   void (*Rects)(GLshort x1, GLshort y1, GLshort x2, GLshort y2); /* 92 */
-   void (*Rectsv)(const GLshort * v1, const GLshort * v2); /* 93 */
-   void (*TexCoord1d)(GLdouble s); /* 94 */
-   void (*TexCoord1dv)(const GLdouble * v); /* 95 */
-   void (*TexCoord1f)(GLfloat s); /* 96 */
-   void (*TexCoord1fv)(const GLfloat * v); /* 97 */
-   void (*TexCoord1i)(GLint s); /* 98 */
-   void (*TexCoord1iv)(const GLint * v); /* 99 */
-   void (*TexCoord1s)(GLshort s); /* 100 */
-   void (*TexCoord1sv)(const GLshort * v); /* 101 */
-   void (*TexCoord2d)(GLdouble s, GLdouble t); /* 102 */
-   void (*TexCoord2dv)(const GLdouble * v); /* 103 */
-   void (*TexCoord2f)(GLfloat s, GLfloat t); /* 104 */
-   void (*TexCoord2fv)(const GLfloat * v); /* 105 */
-   void (*TexCoord2i)(GLint s, GLint t); /* 106 */
-   void (*TexCoord2iv)(const GLint * v); /* 107 */
-   void (*TexCoord2s)(GLshort s, GLshort t); /* 108 */
-   void (*TexCoord2sv)(const GLshort * v); /* 109 */
-   void (*TexCoord3d)(GLdouble s, GLdouble t, GLdouble r); /* 110 */
-   void (*TexCoord3dv)(const GLdouble * v); /* 111 */
-   void (*TexCoord3f)(GLfloat s, GLfloat t, GLfloat r); /* 112 */
-   void (*TexCoord3fv)(const GLfloat * v); /* 113 */
-   void (*TexCoord3i)(GLint s, GLint t, GLint r); /* 114 */
-   void (*TexCoord3iv)(const GLint * v); /* 115 */
-   void (*TexCoord3s)(GLshort s, GLshort t, GLshort r); /* 116 */
-   void (*TexCoord3sv)(const GLshort * v); /* 117 */
-   void (*TexCoord4d)(GLdouble s, GLdouble t, GLdouble r, GLdouble q); /* 118 */
-   void (*TexCoord4dv)(const GLdouble * v); /* 119 */
-   void (*TexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q); /* 120 */
-   void (*TexCoord4fv)(const GLfloat * v); /* 121 */
-   void (*TexCoord4i)(GLint s, GLint t, GLint r, GLint q); /* 122 */
-   void (*TexCoord4iv)(const GLint * v); /* 123 */
-   void (*TexCoord4s)(GLshort s, GLshort t, GLshort r, GLshort q); /* 124 */
-   void (*TexCoord4sv)(const GLshort * v); /* 125 */
-   void (*Vertex2d)(GLdouble x, GLdouble y); /* 126 */
-   void (*Vertex2dv)(const GLdouble * v); /* 127 */
-   void (*Vertex2f)(GLfloat x, GLfloat y); /* 128 */
-   void (*Vertex2fv)(const GLfloat * v); /* 129 */
-   void (*Vertex2i)(GLint x, GLint y); /* 130 */
-   void (*Vertex2iv)(const GLint * v); /* 131 */
-   void (*Vertex2s)(GLshort x, GLshort y); /* 132 */
-   void (*Vertex2sv)(const GLshort * v); /* 133 */
-   void (*Vertex3d)(GLdouble x, GLdouble y, GLdouble z); /* 134 */
-   void (*Vertex3dv)(const GLdouble * v); /* 135 */
-   void (*Vertex3f)(GLfloat x, GLfloat y, GLfloat z); /* 136 */
-   void (*Vertex3fv)(const GLfloat * v); /* 137 */
-   void (*Vertex3i)(GLint x, GLint y, GLint z); /* 138 */
-   void (*Vertex3iv)(const GLint * v); /* 139 */
-   void (*Vertex3s)(GLshort x, GLshort y, GLshort z); /* 140 */
-   void (*Vertex3sv)(const GLshort * v); /* 141 */
-   void (*Vertex4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 142 */
-   void (*Vertex4dv)(const GLdouble * v); /* 143 */
-   void (*Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 144 */
-   void (*Vertex4fv)(const GLfloat * v); /* 145 */
-   void (*Vertex4i)(GLint x, GLint y, GLint z, GLint w); /* 146 */
-   void (*Vertex4iv)(const GLint * v); /* 147 */
-   void (*Vertex4s)(GLshort x, GLshort y, GLshort z, GLshort w); /* 148 */
-   void (*Vertex4sv)(const GLshort * v); /* 149 */
-   void (*ClipPlane)(GLenum plane, const GLdouble * equation); /* 150 */
-   void (*ColorMaterial)(GLenum face, GLenum mode); /* 151 */
-   void (*CullFace)(GLenum mode); /* 152 */
-   void (*Fogf)(GLenum pname, GLfloat param); /* 153 */
-   void (*Fogfv)(GLenum pname, const GLfloat * params); /* 154 */
-   void (*Fogi)(GLenum pname, GLint param); /* 155 */
-   void (*Fogiv)(GLenum pname, const GLint * params); /* 156 */
-   void (*FrontFace)(GLenum mode); /* 157 */
-   void (*Hint)(GLenum target, GLenum mode); /* 158 */
-   void (*Lightf)(GLenum light, GLenum pname, GLfloat param); /* 159 */
-   void (*Lightfv)(GLenum light, GLenum pname, const GLfloat * params); /* 160 */
-   void (*Lighti)(GLenum light, GLenum pname, GLint param); /* 161 */
-   void (*Lightiv)(GLenum light, GLenum pname, const GLint * params); /* 162 */
-   void (*LightModelf)(GLenum pname, GLfloat param); /* 163 */
-   void (*LightModelfv)(GLenum pname, const GLfloat * params); /* 164 */
-   void (*LightModeli)(GLenum pname, GLint param); /* 165 */
-   void (*LightModeliv)(GLenum pname, const GLint * params); /* 166 */
-   void (*LineStipple)(GLint factor, GLushort pattern); /* 167 */
-   void (*LineWidth)(GLfloat width); /* 168 */
-   void (*Materialf)(GLenum face, GLenum pname, GLfloat param); /* 169 */
-   void (*Materialfv)(GLenum face, GLenum pname, const GLfloat * params); /* 170 */
-   void (*Materiali)(GLenum face, GLenum pname, GLint param); /* 171 */
-   void (*Materialiv)(GLenum face, GLenum pname, const GLint * params); /* 172 */
-   void (*PointSize)(GLfloat size); /* 173 */
-   void (*PolygonMode)(GLenum face, GLenum mode); /* 174 */
-   void (*PolygonStipple)(const GLubyte * mask); /* 175 */
-   void (*Scissor)(GLint x, GLint y, GLsizei width, GLsizei height); /* 176 */
-   void (*ShadeModel)(GLenum mode); /* 177 */
-   void (*TexParameterf)(GLenum target, GLenum pname, GLfloat param); /* 178 */
-   void (*TexParameterfv)(GLenum target, GLenum pname, const GLfloat * params); /* 179 */
-   void (*TexParameteri)(GLenum target, GLenum pname, GLint param); /* 180 */
-   void (*TexParameteriv)(GLenum target, GLenum pname, const GLint * params); /* 181 */
-   void (*TexImage1D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels); /* 182 */
-   void (*TexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels); /* 183 */
-   void (*TexEnvf)(GLenum target, GLenum pname, GLfloat param); /* 184 */
-   void (*TexEnvfv)(GLenum target, GLenum pname, const GLfloat * params); /* 185 */
-   void (*TexEnvi)(GLenum target, GLenum pname, GLint param); /* 186 */
-   void (*TexEnviv)(GLenum target, GLenum pname, const GLint * params); /* 187 */
-   void (*TexGend)(GLenum coord, GLenum pname, GLdouble param); /* 188 */
-   void (*TexGendv)(GLenum coord, GLenum pname, const GLdouble * params); /* 189 */
-   void (*TexGenf)(GLenum coord, GLenum pname, GLfloat param); /* 190 */
-   void (*TexGenfv)(GLenum coord, GLenum pname, const GLfloat * params); /* 191 */
-   void (*TexGeni)(GLenum coord, GLenum pname, GLint param); /* 192 */
-   void (*TexGeniv)(GLenum coord, GLenum pname, const GLint * params); /* 193 */
-   void (*FeedbackBuffer)(GLsizei size, GLenum type, GLfloat * buffer); /* 194 */
-   void (*SelectBuffer)(GLsizei size, GLuint * buffer); /* 195 */
-   GLint (*RenderMode)(GLenum mode); /* 196 */
-   void (*InitNames)(void); /* 197 */
-   void (*LoadName)(GLuint name); /* 198 */
-   void (*PassThrough)(GLfloat token); /* 199 */
-   void (*PopName)(void); /* 200 */
-   void (*PushName)(GLuint name); /* 201 */
-   void (*DrawBuffer)(GLenum mode); /* 202 */
-   void (*Clear)(GLbitfield mask); /* 203 */
-   void (*ClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); /* 204 */
-   void (*ClearIndex)(GLfloat c); /* 205 */
-   void (*ClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); /* 206 */
-   void (*ClearStencil)(GLint s); /* 207 */
-   void (*ClearDepth)(GLclampd depth); /* 208 */
-   void (*StencilMask)(GLuint mask); /* 209 */
-   void (*ColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); /* 210 */
-   void (*DepthMask)(GLboolean flag); /* 211 */
-   void (*IndexMask)(GLuint mask); /* 212 */
-   void (*Accum)(GLenum op, GLfloat value); /* 213 */
-   void (*Disable)(GLenum cap); /* 214 */
-   void (*Enable)(GLenum cap); /* 215 */
-   void (*Finish)(void); /* 216 */
-   void (*Flush)(void); /* 217 */
-   void (*PopAttrib)(void); /* 218 */
-   void (*PushAttrib)(GLbitfield mask); /* 219 */
-   void (*Map1d)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); /* 220 */
-   void (*Map1f)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); /* 221 */
-   void (*Map2d)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); /* 222 */
-   void (*Map2f)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); /* 223 */
-   void (*MapGrid1d)(GLint un, GLdouble u1, GLdouble u2); /* 224 */
-   void (*MapGrid1f)(GLint un, GLfloat u1, GLfloat u2); /* 225 */
-   void (*MapGrid2d)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); /* 226 */
-   void (*MapGrid2f)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); /* 227 */
-   void (*EvalCoord1d)(GLdouble u); /* 228 */
-   void (*EvalCoord1dv)(const GLdouble * u); /* 229 */
-   void (*EvalCoord1f)(GLfloat u); /* 230 */
-   void (*EvalCoord1fv)(const GLfloat * u); /* 231 */
-   void (*EvalCoord2d)(GLdouble u, GLdouble v); /* 232 */
-   void (*EvalCoord2dv)(const GLdouble * u); /* 233 */
-   void (*EvalCoord2f)(GLfloat u, GLfloat v); /* 234 */
-   void (*EvalCoord2fv)(const GLfloat * u); /* 235 */
-   void (*EvalMesh1)(GLenum mode, GLint i1, GLint i2); /* 236 */
-   void (*EvalPoint1)(GLint i); /* 237 */
-   void (*EvalMesh2)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); /* 238 */
-   void (*EvalPoint2)(GLint i, GLint j); /* 239 */
-   void (*AlphaFunc)(GLenum func, GLclampf ref); /* 240 */
-   void (*BlendFunc)(GLenum sfactor, GLenum dfactor); /* 241 */
-   void (*LogicOp)(GLenum opcode); /* 242 */
-   void (*StencilFunc)(GLenum func, GLint ref, GLuint mask); /* 243 */
-   void (*StencilOp)(GLenum fail, GLenum zfail, GLenum zpass); /* 244 */
-   void (*DepthFunc)(GLenum func); /* 245 */
-   void (*PixelZoom)(GLfloat xfactor, GLfloat yfactor); /* 246 */
-   void (*PixelTransferf)(GLenum pname, GLfloat param); /* 247 */
-   void (*PixelTransferi)(GLenum pname, GLint param); /* 248 */
-   void (*PixelStoref)(GLenum pname, GLfloat param); /* 249 */
-   void (*PixelStorei)(GLenum pname, GLint param); /* 250 */
-   void (*PixelMapfv)(GLenum map, GLsizei mapsize, const GLfloat * values); /* 251 */
-   void (*PixelMapuiv)(GLenum map, GLsizei mapsize, const GLuint * values); /* 252 */
-   void (*PixelMapusv)(GLenum map, GLsizei mapsize, const GLushort * values); /* 253 */
-   void (*ReadBuffer)(GLenum mode); /* 254 */
-   void (*CopyPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); /* 255 */
-   void (*ReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels); /* 256 */
-   void (*DrawPixels)(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); /* 257 */
-   void (*GetBooleanv)(GLenum pname, GLboolean * params); /* 258 */
-   void (*GetClipPlane)(GLenum plane, GLdouble * equation); /* 259 */
-   void (*GetDoublev)(GLenum pname, GLdouble * params); /* 260 */
-   GLenum (*GetError)(void); /* 261 */
-   void (*GetFloatv)(GLenum pname, GLfloat * params); /* 262 */
-   void (*GetIntegerv)(GLenum pname, GLint * params); /* 263 */
-   void (*GetLightfv)(GLenum light, GLenum pname, GLfloat * params); /* 264 */
-   void (*GetLightiv)(GLenum light, GLenum pname, GLint * params); /* 265 */
-   void (*GetMapdv)(GLenum target, GLenum query, GLdouble * v); /* 266 */
-   void (*GetMapfv)(GLenum target, GLenum query, GLfloat * v); /* 267 */
-   void (*GetMapiv)(GLenum target, GLenum query, GLint * v); /* 268 */
-   void (*GetMaterialfv)(GLenum face, GLenum pname, GLfloat * params); /* 269 */
-   void (*GetMaterialiv)(GLenum face, GLenum pname, GLint * params); /* 270 */
-   void (*GetPixelMapfv)(GLenum map, GLfloat * values); /* 271 */
-   void (*GetPixelMapuiv)(GLenum map, GLuint * values); /* 272 */
-   void (*GetPixelMapusv)(GLenum map, GLushort * values); /* 273 */
-   void (*GetPolygonStipple)(GLubyte * mask); /* 274 */
-   const GLubyte * (*GetString)(GLenum name); /* 275 */
-   void (*GetTexEnvfv)(GLenum target, GLenum pname, GLfloat * params); /* 276 */
-   void (*GetTexEnviv)(GLenum target, GLenum pname, GLint * params); /* 277 */
-   void (*GetTexGendv)(GLenum coord, GLenum pname, GLdouble * params); /* 278 */
-   void (*GetTexGenfv)(GLenum coord, GLenum pname, GLfloat * params); /* 279 */
-   void (*GetTexGeniv)(GLenum coord, GLenum pname, GLint * params); /* 280 */
-   void (*GetTexImage)(GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels); /* 281 */
-   void (*GetTexParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 282 */
-   void (*GetTexParameteriv)(GLenum target, GLenum pname, GLint * params); /* 283 */
-   void (*GetTexLevelParameterfv)(GLenum target, GLint level, GLenum pname, GLfloat * params); /* 284 */
-   void (*GetTexLevelParameteriv)(GLenum target, GLint level, GLenum pname, GLint * params); /* 285 */
-   GLboolean (*IsEnabled)(GLenum cap); /* 286 */
-   GLboolean (*IsList)(GLuint list); /* 287 */
-   void (*DepthRange)(GLclampd zNear, GLclampd zFar); /* 288 */
-   void (*Frustum)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); /* 289 */
-   void (*LoadIdentity)(void); /* 290 */
-   void (*LoadMatrixf)(const GLfloat * m); /* 291 */
-   void (*LoadMatrixd)(const GLdouble * m); /* 292 */
-   void (*MatrixMode)(GLenum mode); /* 293 */
-   void (*MultMatrixf)(const GLfloat * m); /* 294 */
-   void (*MultMatrixd)(const GLdouble * m); /* 295 */
-   void (*Ortho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); /* 296 */
-   void (*PopMatrix)(void); /* 297 */
-   void (*PushMatrix)(void); /* 298 */
-   void (*Rotated)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); /* 299 */
-   void (*Rotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); /* 300 */
-   void (*Scaled)(GLdouble x, GLdouble y, GLdouble z); /* 301 */
-   void (*Scalef)(GLfloat x, GLfloat y, GLfloat z); /* 302 */
-   void (*Translated)(GLdouble x, GLdouble y, GLdouble z); /* 303 */
-   void (*Translatef)(GLfloat x, GLfloat y, GLfloat z); /* 304 */
-   void (*Viewport)(GLint x, GLint y, GLsizei width, GLsizei height); /* 305 */
-   void (*ArrayElement)(GLint i); /* 306 */
-   void (*BindTexture)(GLenum target, GLuint texture); /* 307 */
-   void (*ColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 308 */
-   void (*DisableClientState)(GLenum array); /* 309 */
-   void (*DrawArrays)(GLenum mode, GLint first, GLsizei count); /* 310 */
-   void (*DrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices); /* 311 */
-   void (*EdgeFlagPointer)(GLsizei stride, const GLvoid * pointer); /* 312 */
-   void (*EnableClientState)(GLenum array); /* 313 */
-   void (*IndexPointer)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 314 */
-   void (*Indexub)(GLubyte c); /* 315 */
-   void (*Indexubv)(const GLubyte * c); /* 316 */
-   void (*InterleavedArrays)(GLenum format, GLsizei stride, const GLvoid * pointer); /* 317 */
-   void (*NormalPointer)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 318 */
-   void (*PolygonOffset)(GLfloat factor, GLfloat units); /* 319 */
-   void (*TexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 320 */
-   void (*VertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 321 */
-   GLboolean (*AreTexturesResident)(GLsizei n, const GLuint * textures, GLboolean * residences); /* 322 */
-   void (*CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); /* 323 */
-   void (*CopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); /* 324 */
-   void (*CopyTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); /* 325 */
-   void (*CopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); /* 326 */
-   void (*DeleteTextures)(GLsizei n, const GLuint * textures); /* 327 */
-   void (*GenTextures)(GLsizei n, GLuint * textures); /* 328 */
-   void (*GetPointerv)(GLenum pname, GLvoid ** params); /* 329 */
-   GLboolean (*IsTexture)(GLuint texture); /* 330 */
-   void (*PrioritizeTextures)(GLsizei n, const GLuint * textures, const GLclampf * priorities); /* 331 */
-   void (*TexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); /* 332 */
-   void (*TexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); /* 333 */
-   void (*PopClientAttrib)(void); /* 334 */
-   void (*PushClientAttrib)(GLbitfield mask); /* 335 */
-   void (*BlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); /* 336 */
-   void (*BlendEquation)(GLenum mode); /* 337 */
-   void (*DrawRangeElements)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); /* 338 */
-   void (*ColorTable)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); /* 339 */
-   void (*ColorTableParameterfv)(GLenum target, GLenum pname, const GLfloat * params); /* 340 */
-   void (*ColorTableParameteriv)(GLenum target, GLenum pname, const GLint * params); /* 341 */
-   void (*CopyColorTable)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); /* 342 */
-   void (*GetColorTable)(GLenum target, GLenum format, GLenum type, GLvoid * table); /* 343 */
-   void (*GetColorTableParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 344 */
-   void (*GetColorTableParameteriv)(GLenum target, GLenum pname, GLint * params); /* 345 */
-   void (*ColorSubTable)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data); /* 346 */
-   void (*CopyColorSubTable)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); /* 347 */
-   void (*ConvolutionFilter1D)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image); /* 348 */
-   void (*ConvolutionFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image); /* 349 */
-   void (*ConvolutionParameterf)(GLenum target, GLenum pname, GLfloat params); /* 350 */
-   void (*ConvolutionParameterfv)(GLenum target, GLenum pname, const GLfloat * params); /* 351 */
-   void (*ConvolutionParameteri)(GLenum target, GLenum pname, GLint params); /* 352 */
-   void (*ConvolutionParameteriv)(GLenum target, GLenum pname, const GLint * params); /* 353 */
-   void (*CopyConvolutionFilter1D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); /* 354 */
-   void (*CopyConvolutionFilter2D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); /* 355 */
-   void (*GetConvolutionFilter)(GLenum target, GLenum format, GLenum type, GLvoid * image); /* 356 */
-   void (*GetConvolutionParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 357 */
-   void (*GetConvolutionParameteriv)(GLenum target, GLenum pname, GLint * params); /* 358 */
-   void (*GetSeparableFilter)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); /* 359 */
-   void (*SeparableFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column); /* 360 */
-   void (*GetHistogram)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 361 */
-   void (*GetHistogramParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 362 */
-   void (*GetHistogramParameteriv)(GLenum target, GLenum pname, GLint * params); /* 363 */
-   void (*GetMinmax)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 364 */
-   void (*GetMinmaxParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 365 */
-   void (*GetMinmaxParameteriv)(GLenum target, GLenum pname, GLint * params); /* 366 */
-   void (*Histogram)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); /* 367 */
-   void (*Minmax)(GLenum target, GLenum internalformat, GLboolean sink); /* 368 */
-   void (*ResetHistogram)(GLenum target); /* 369 */
-   void (*ResetMinmax)(GLenum target); /* 370 */
-   void (*TexImage3D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); /* 371 */
-   void (*TexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); /* 372 */
-   void (*CopyTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); /* 373 */
-   void (*ActiveTextureARB)(GLenum texture); /* 374 */
-   void (*ClientActiveTextureARB)(GLenum texture); /* 375 */
-   void (*MultiTexCoord1dARB)(GLenum target, GLdouble s); /* 376 */
-   void (*MultiTexCoord1dvARB)(GLenum target, const GLdouble * v); /* 377 */
-   void (*MultiTexCoord1fARB)(GLenum target, GLfloat s); /* 378 */
-   void (*MultiTexCoord1fvARB)(GLenum target, const GLfloat * v); /* 379 */
-   void (*MultiTexCoord1iARB)(GLenum target, GLint s); /* 380 */
-   void (*MultiTexCoord1ivARB)(GLenum target, const GLint * v); /* 381 */
-   void (*MultiTexCoord1sARB)(GLenum target, GLshort s); /* 382 */
-   void (*MultiTexCoord1svARB)(GLenum target, const GLshort * v); /* 383 */
-   void (*MultiTexCoord2dARB)(GLenum target, GLdouble s, GLdouble t); /* 384 */
-   void (*MultiTexCoord2dvARB)(GLenum target, const GLdouble * v); /* 385 */
-   void (*MultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t); /* 386 */
-   void (*MultiTexCoord2fvARB)(GLenum target, const GLfloat * v); /* 387 */
-   void (*MultiTexCoord2iARB)(GLenum target, GLint s, GLint t); /* 388 */
-   void (*MultiTexCoord2ivARB)(GLenum target, const GLint * v); /* 389 */
-   void (*MultiTexCoord2sARB)(GLenum target, GLshort s, GLshort t); /* 390 */
-   void (*MultiTexCoord2svARB)(GLenum target, const GLshort * v); /* 391 */
-   void (*MultiTexCoord3dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r); /* 392 */
-   void (*MultiTexCoord3dvARB)(GLenum target, const GLdouble * v); /* 393 */
-   void (*MultiTexCoord3fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r); /* 394 */
-   void (*MultiTexCoord3fvARB)(GLenum target, const GLfloat * v); /* 395 */
-   void (*MultiTexCoord3iARB)(GLenum target, GLint s, GLint t, GLint r); /* 396 */
-   void (*MultiTexCoord3ivARB)(GLenum target, const GLint * v); /* 397 */
-   void (*MultiTexCoord3sARB)(GLenum target, GLshort s, GLshort t, GLshort r); /* 398 */
-   void (*MultiTexCoord3svARB)(GLenum target, const GLshort * v); /* 399 */
-   void (*MultiTexCoord4dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); /* 400 */
-   void (*MultiTexCoord4dvARB)(GLenum target, const GLdouble * v); /* 401 */
-   void (*MultiTexCoord4fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); /* 402 */
-   void (*MultiTexCoord4fvARB)(GLenum target, const GLfloat * v); /* 403 */
-   void (*MultiTexCoord4iARB)(GLenum target, GLint s, GLint t, GLint r, GLint q); /* 404 */
-   void (*MultiTexCoord4ivARB)(GLenum target, const GLint * v); /* 405 */
-   void (*MultiTexCoord4sARB)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); /* 406 */
-   void (*MultiTexCoord4svARB)(GLenum target, const GLshort * v); /* 407 */
-   void (*LoadTransposeMatrixfARB)(const GLfloat * m); /* 408 */
-   void (*LoadTransposeMatrixdARB)(const GLdouble * m); /* 409 */
-   void (*MultTransposeMatrixfARB)(const GLfloat * m); /* 410 */
-   void (*MultTransposeMatrixdARB)(const GLdouble * m); /* 411 */
-   void (*SampleCoverageARB)(GLclampf value, GLboolean invert); /* 412 */
-   void (*__unused413)(void); /* 413 */
-   void (*PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 414 */
-   void (*GetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights); /* 415 */
-   void (*TexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); /* 416 */
-   void (*GetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 417 */
-   void (*GetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 418 */
-   void (*GetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 419 */
-   void (*GetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 420 */
-   void (*GetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 421 */
-   void (*GetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 422 */
-   void (*GetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * image); /* 423 */
-   void (*GetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 424 */
-   void (*GetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 425 */
-   void (*GetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); /* 426 */
-   void (*GetColorTableSGI)(GLenum target, GLenum format, GLenum type, GLvoid * table); /* 427 */
-   void (*GetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params); /* 428 */
-   void (*GetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params); /* 429 */
-   void (*PixelTexGenSGIX)(GLenum mode); /* 430 */
-   void (*PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 431 */
-   void (*PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 432 */
-   void (*PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 433 */
-   void (*PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 434 */
-   void (*GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 435 */
-   void (*GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 436 */
-   void (*TexImage4DSGIS)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels); /* 437 */
-   void (*TexSubImage4DSGIS)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels); /* 438 */
-   GLboolean (*AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences); /* 439 */
-   void (*GenTexturesEXT)(GLsizei n, GLuint * textures); /* 440 */
-   GLboolean (*IsTextureEXT)(GLuint texture); /* 441 */
-   void (*DetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); /* 442 */
-   void (*GetDetailTexFuncSGIS)(GLenum target, GLfloat * points); /* 443 */
-   void (*SharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); /* 444 */
-   void (*GetSharpenTexFuncSGIS)(GLenum target, GLfloat * points); /* 445 */
-   void (*SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 446 */
-   void (*SamplePatternSGIS)(GLenum pattern); /* 447 */
-   void (*ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 448 */
-   void (*EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 449 */
-   void (*IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 450 */
-   void (*NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 451 */
-   void (*TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 452 */
-   void (*VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 453 */
-   void (*SpriteParameterfSGIX)(GLenum pname, GLfloat param); /* 454 */
-   void (*SpriteParameterfvSGIX)(GLenum pname, const GLfloat * params); /* 455 */
-   void (*SpriteParameteriSGIX)(GLenum pname, GLint param); /* 456 */
-   void (*SpriteParameterivSGIX)(GLenum pname, const GLint * params); /* 457 */
-   void (*PointParameterfEXT)(GLenum pname, GLfloat param); /* 458 */
-   void (*PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 459 */
-   GLint (*GetInstrumentsSGIX)(void); /* 460 */
-   void (*InstrumentsBufferSGIX)(GLsizei size, GLint * buffer); /* 461 */
-   GLint (*PollInstrumentsSGIX)(GLint * marker_p); /* 462 */
-   void (*ReadInstrumentsSGIX)(GLint marker); /* 463 */
-   void (*StartInstrumentsSGIX)(void); /* 464 */
-   void (*StopInstrumentsSGIX)(GLint marker); /* 465 */
-   void (*FrameZoomSGIX)(GLint factor); /* 466 */
-   void (*TagSampleBufferSGIX)(void); /* 467 */
-   void (*ReferencePlaneSGIX)(const GLdouble * equation); /* 468 */
-   void (*FlushRasterSGIX)(void); /* 469 */
-   void (*GetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params); /* 470 */
-   void (*GetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params); /* 471 */
-   void (*ListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param); /* 472 */
-   void (*ListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params); /* 473 */
-   void (*ListParameteriSGIX)(GLuint list, GLenum pname, GLint param); /* 474 */
-   void (*ListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params); /* 475 */
-   void (*FragmentColorMaterialSGIX)(GLenum face, GLenum mode); /* 476 */
-   void (*FragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param); /* 477 */
-   void (*FragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params); /* 478 */
-   void (*FragmentLightiSGIX)(GLenum light, GLenum pname, GLint param); /* 479 */
-   void (*FragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params); /* 480 */
-   void (*FragmentLightModelfSGIX)(GLenum pname, GLfloat param); /* 481 */
-   void (*FragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params); /* 482 */
-   void (*FragmentLightModeliSGIX)(GLenum pname, GLint param); /* 483 */
-   void (*FragmentLightModelivSGIX)(GLenum pname, const GLint * params); /* 484 */
-   void (*FragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param); /* 485 */
-   void (*FragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params); /* 486 */
-   void (*FragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param); /* 487 */
-   void (*FragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params); /* 488 */
-   void (*GetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params); /* 489 */
-   void (*GetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params); /* 490 */
-   void (*GetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params); /* 491 */
-   void (*GetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params); /* 492 */
-   void (*LightEnviSGIX)(GLenum pname, GLint param); /* 493 */
-   void (*VertexWeightfEXT)(GLfloat weight); /* 494 */
-   void (*VertexWeightfvEXT)(const GLfloat * weight); /* 495 */
-   void (*VertexWeightPointerEXT)(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 496 */
-   void (*FlushVertexArrayRangeNV)(void); /* 497 */
-   void (*VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 498 */
-   void (*CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 499 */
-   void (*CombinerParameterfNV)(GLenum pname, GLfloat param); /* 500 */
-   void (*CombinerParameterivNV)(GLenum pname, const GLint * params); /* 501 */
-   void (*CombinerParameteriNV)(GLenum pname, GLint param); /* 502 */
-   void (*CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 503 */
-   void (*CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 504 */
-   void (*FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 505 */
-   void (*GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 506 */
-   void (*GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 507 */
-   void (*GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 508 */
-   void (*GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 509 */
-   void (*GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 510 */
-   void (*GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 511 */
-   void (*ResizeBuffersMESA)(void); /* 512 */
-   void (*WindowPos2dMESA)(GLdouble x, GLdouble y); /* 513 */
-   void (*WindowPos2dvMESA)(const GLdouble * v); /* 514 */
-   void (*WindowPos2fMESA)(GLfloat x, GLfloat y); /* 515 */
-   void (*WindowPos2fvMESA)(const GLfloat * v); /* 516 */
-   void (*WindowPos2iMESA)(GLint x, GLint y); /* 517 */
-   void (*WindowPos2ivMESA)(const GLint * v); /* 518 */
-   void (*WindowPos2sMESA)(GLshort x, GLshort y); /* 519 */
-   void (*WindowPos2svMESA)(const GLshort * v); /* 520 */
-   void (*WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 521 */
-   void (*WindowPos3dvMESA)(const GLdouble * v); /* 522 */
-   void (*WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 523 */
-   void (*WindowPos3fvMESA)(const GLfloat * v); /* 524 */
-   void (*WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 525 */
-   void (*WindowPos3ivMESA)(const GLint * v); /* 526 */
-   void (*WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 527 */
-   void (*WindowPos3svMESA)(const GLshort * v); /* 528 */
-   void (*WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 529 */
-   void (*WindowPos4dvMESA)(const GLdouble * v); /* 530 */
-   void (*WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 531 */
-   void (*WindowPos4fvMESA)(const GLfloat * v); /* 532 */
-   void (*WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 533 */
-   void (*WindowPos4ivMESA)(const GLint * v); /* 534 */
-   void (*WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 535 */
-   void (*WindowPos4svMESA)(const GLshort * v); /* 536 */
-   void (*BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 537 */
-   void (*IndexMaterialEXT)(GLenum face, GLenum mode); /* 538 */
-   void (*IndexFuncEXT)(GLenum func, GLclampf ref); /* 539 */
-   void (*LockArraysEXT)(GLint first, GLsizei count); /* 540 */
-   void (*UnlockArraysEXT)(void); /* 541 */
-   void (*CullParameterdvEXT)(GLenum pname, GLdouble * params); /* 542 */
-   void (*CullParameterfvEXT)(GLenum pname, GLfloat * params); /* 543 */
-   void (*HintPGI)(GLenum target, GLint mode); /* 544 */
-   void (*FogCoordfEXT)(GLfloat coord); /* 545 */
-   void (*FogCoordfvEXT)(const GLfloat * coord); /* 546 */
-   void (*FogCoorddEXT)(GLdouble coord); /* 547 */
-   void (*FogCoorddvEXT)(const GLdouble * coord); /* 548 */
-   void (*FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 549 */
-   void (*GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * data); /* 550 */
-   void (*GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 551 */
-   void (*GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 552 */
-   void (*TbufferMask3DFX)(GLuint mask); /* 553 */
-   void (*CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); /* 554 */
-   void (*CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); /* 555 */
-   void (*CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); /* 556 */
-   void (*CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); /* 557 */
-   void (*CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); /* 558 */
-   void (*CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); /* 559 */
-   void (*GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img); /* 560 */
-   void (*SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 561 */
-   void (*SecondaryColor3bvEXT)(const GLbyte * v); /* 562 */
-   void (*SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 563 */
-   void (*SecondaryColor3dvEXT)(const GLdouble * v); /* 564 */
-   void (*SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 565 */
-   void (*SecondaryColor3fvEXT)(const GLfloat * v); /* 566 */
-   void (*SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 567 */
-   void (*SecondaryColor3ivEXT)(const GLint * v); /* 568 */
-   void (*SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 569 */
-   void (*SecondaryColor3svEXT)(const GLshort * v); /* 570 */
-   void (*SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 571 */
-   void (*SecondaryColor3ubvEXT)(const GLubyte * v); /* 572 */
-   void (*SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 573 */
-   void (*SecondaryColor3uivEXT)(const GLuint * v); /* 574 */
-   void (*SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 575 */
-   void (*SecondaryColor3usvEXT)(const GLushort * v); /* 576 */
-   void (*SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 577 */
-   GLboolean (*AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 578 */
-   void (*BindProgramNV)(GLenum target, GLuint id); /* 579 */
-   void (*DeleteProgramsNV)(GLsizei n, const GLuint * ids); /* 580 */
-   void (*ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 581 */
-   void (*GenProgramsNV)(GLsizei n, GLuint * ids); /* 582 */
-   void (*GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 583 */
-   void (*GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 584 */
-   void (*GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 585 */
-   void (*GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 586 */
-   void (*GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 587 */
-   void (*GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 588 */
-   void (*GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 589 */
-   void (*GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 590 */
-   void (*GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer); /* 591 */
-   GLboolean (*IsProgramNV)(GLuint id); /* 592 */
-   void (*LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 593 */
-   void (*ProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 594 */
-   void (*ProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * params); /* 595 */
-   void (*ProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 596 */
-   void (*ProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * params); /* 597 */
-   void (*ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * params); /* 598 */
-   void (*ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params); /* 599 */
-   void (*RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 600 */
-   void (*TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 601 */
-   void (*VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 602 */
-   void (*VertexAttrib1dNV)(GLuint index, GLdouble x); /* 603 */
-   void (*VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 604 */
-   void (*VertexAttrib1fNV)(GLuint index, GLfloat x); /* 605 */
-   void (*VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 606 */
-   void (*VertexAttrib1sNV)(GLuint index, GLshort x); /* 607 */
-   void (*VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 608 */
-   void (*VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 609 */
-   void (*VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 610 */
-   void (*VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 611 */
-   void (*VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 612 */
-   void (*VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 613 */
-   void (*VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 614 */
-   void (*VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 615 */
-   void (*VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 616 */
-   void (*VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 617 */
-   void (*VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 618 */
-   void (*VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 619 */
-   void (*VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 620 */
-   void (*VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 621 */
-   void (*VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 622 */
-   void (*VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 623 */
-   void (*VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 624 */
-   void (*VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 625 */
-   void (*VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 626 */
-   void (*VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 627 */
-   void (*VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 628 */
-   void (*VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 629 */
-   void (*VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 630 */
-   void (*VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 631 */
-   void (*VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 632 */
-   void (*VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 633 */
-   void (*VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 634 */
-   void (*VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 635 */
-   void (*VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 636 */
-   void (*VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 637 */
-   void (*VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 638 */
-   void (*VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 639 */
-   void (*VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 640 */
-   void (*VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 641 */
-   void (*PointParameteriNV)(GLenum pname, GLint params); /* 642 */
-   void (*PointParameterivNV)(GLenum pname, const GLint * params); /* 643 */
-   void (*MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount); /* 644 */
-   void (*MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 645 */
-   void (*ActiveStencilFaceEXT)(GLenum face); /* 646 */
-   void (*DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 647 */
-   void (*GenFencesNV)(GLsizei n, GLuint * fences); /* 648 */
-   GLboolean (*IsFenceNV)(GLuint fence); /* 649 */
-   GLboolean (*TestFenceNV)(GLuint fence); /* 650 */
-   void (*GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 651 */
-   void (*FinishFenceNV)(GLuint fence); /* 652 */
-   void (*SetFenceNV)(GLuint fence, GLenum condition); /* 653 */
-   void (*VertexAttrib4bvARB)(GLuint index, const GLbyte * v); /* 654 */
-   void (*VertexAttrib4ivARB)(GLuint index, const GLint * v); /* 655 */
-   void (*VertexAttrib4ubvARB)(GLuint index, const GLubyte * v); /* 656 */
-   void (*VertexAttrib4usvARB)(GLuint index, const GLushort * v); /* 657 */
-   void (*VertexAttrib4uivARB)(GLuint index, const GLuint * v); /* 658 */
-   void (*VertexAttrib4NbvARB)(GLuint index, const GLbyte * v); /* 659 */
-   void (*VertexAttrib4NsvARB)(GLuint index, const GLshort * v); /* 660 */
-   void (*VertexAttrib4NivARB)(GLuint index, const GLint * v); /* 661 */
-   void (*VertexAttrib4NusvARB)(GLuint index, const GLushort * v); /* 662 */
-   void (*VertexAttrib4NuivARB)(GLuint index, const GLuint * v); /* 663 */
-   void (*VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); /* 664 */
-   void (*EnableVertexAttribArrayARB)(GLuint index); /* 665 */
-   void (*DisableVertexAttribArrayARB)(GLuint index); /* 666 */
-   void (*ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string); /* 667 */
-   void (*ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 668 */
-   void (*ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 669 */
-   void (*ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 670 */
-   void (*ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 671 */
-   void (*ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 672 */
-   void (*ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 673 */
-   void (*ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 674 */
-   void (*ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 675 */
-   void (*GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 676 */
-   void (*GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 677 */
-   void (*GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 678 */
-   void (*GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 679 */
-   void (*GetProgramivARB)(GLenum target, GLenum pname, GLint * params); /* 680 */
-   void (*GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string); /* 681 */
-   void (*ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 682 */
-   void (*ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 683 */
-   void (*ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 684 */
-   void (*ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 685 */
-   void (*GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 686 */
-   void (*GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 687 */
-   void (*BindBufferARB)(GLenum target, GLuint buffer); /* 688 */
-   void (*BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); /* 689 */
-   void (*BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); /* 690 */
-   void (*DeleteBuffersARB)(GLsizei n, const GLuint * buffer); /* 691 */
-   void (*GenBuffersARB)(GLsizei n, GLuint * buffer); /* 692 */
-   void (*GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); /* 693 */
-   void (*GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params); /* 694 */
-   void (*GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); /* 695 */
-   GLboolean (*IsBufferARB)(GLuint buffer); /* 696 */
-   void * (*MapBufferARB)(GLenum target, GLenum access); /* 697 */
-   GLboolean (*UnmapBufferARB)(GLenum target); /* 698 */
-   void (*DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 699 */
-   void (*GenQueriesARB)(GLsizei n, GLuint * ids); /* 700 */
-   void (*DeleteQueriesARB)(GLsizei n, const GLuint * ids); /* 701 */
-   GLboolean (*IsQueryARB)(GLuint id); /* 702 */
-   void (*BeginQueryARB)(GLenum target, GLuint id); /* 703 */
-   void (*EndQueryARB)(GLenum target); /* 704 */
-   void (*GetQueryivARB)(GLenum target, GLenum pname, GLint * params); /* 705 */
-   void (*GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params); /* 706 */
-   void (*GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params); /* 707 */
-   void (*MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 708 */
-   void (*MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 709 */
+   void (GLAPIENTRYP NewList)(GLuint list, GLenum mode); /* 0 */
+   void (GLAPIENTRYP EndList)(void); /* 1 */
+   void (GLAPIENTRYP CallList)(GLuint list); /* 2 */
+   void (GLAPIENTRYP CallLists)(GLsizei n, GLenum type, const GLvoid * lists); /* 3 */
+   void (GLAPIENTRYP DeleteLists)(GLuint list, GLsizei range); /* 4 */
+   GLuint (GLAPIENTRYP GenLists)(GLsizei range); /* 5 */
+   void (GLAPIENTRYP ListBase)(GLuint base); /* 6 */
+   void (GLAPIENTRYP Begin)(GLenum mode); /* 7 */
+   void (GLAPIENTRYP Bitmap)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap); /* 8 */
+   void (GLAPIENTRYP Color3b)(GLbyte red, GLbyte green, GLbyte blue); /* 9 */
+   void (GLAPIENTRYP Color3bv)(const GLbyte * v); /* 10 */
+   void (GLAPIENTRYP Color3d)(GLdouble red, GLdouble green, GLdouble blue); /* 11 */
+   void (GLAPIENTRYP Color3dv)(const GLdouble * v); /* 12 */
+   void (GLAPIENTRYP Color3f)(GLfloat red, GLfloat green, GLfloat blue); /* 13 */
+   void (GLAPIENTRYP Color3fv)(const GLfloat * v); /* 14 */
+   void (GLAPIENTRYP Color3i)(GLint red, GLint green, GLint blue); /* 15 */
+   void (GLAPIENTRYP Color3iv)(const GLint * v); /* 16 */
+   void (GLAPIENTRYP Color3s)(GLshort red, GLshort green, GLshort blue); /* 17 */
+   void (GLAPIENTRYP Color3sv)(const GLshort * v); /* 18 */
+   void (GLAPIENTRYP Color3ub)(GLubyte red, GLubyte green, GLubyte blue); /* 19 */
+   void (GLAPIENTRYP Color3ubv)(const GLubyte * v); /* 20 */
+   void (GLAPIENTRYP Color3ui)(GLuint red, GLuint green, GLuint blue); /* 21 */
+   void (GLAPIENTRYP Color3uiv)(const GLuint * v); /* 22 */
+   void (GLAPIENTRYP Color3us)(GLushort red, GLushort green, GLushort blue); /* 23 */
+   void (GLAPIENTRYP Color3usv)(const GLushort * v); /* 24 */
+   void (GLAPIENTRYP Color4b)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); /* 25 */
+   void (GLAPIENTRYP Color4bv)(const GLbyte * v); /* 26 */
+   void (GLAPIENTRYP Color4d)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); /* 27 */
+   void (GLAPIENTRYP Color4dv)(const GLdouble * v); /* 28 */
+   void (GLAPIENTRYP Color4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); /* 29 */
+   void (GLAPIENTRYP Color4fv)(const GLfloat * v); /* 30 */
+   void (GLAPIENTRYP Color4i)(GLint red, GLint green, GLint blue, GLint alpha); /* 31 */
+   void (GLAPIENTRYP Color4iv)(const GLint * v); /* 32 */
+   void (GLAPIENTRYP Color4s)(GLshort red, GLshort green, GLshort blue, GLshort alpha); /* 33 */
+   void (GLAPIENTRYP Color4sv)(const GLshort * v); /* 34 */
+   void (GLAPIENTRYP Color4ub)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); /* 35 */
+   void (GLAPIENTRYP Color4ubv)(const GLubyte * v); /* 36 */
+   void (GLAPIENTRYP Color4ui)(GLuint red, GLuint green, GLuint blue, GLuint alpha); /* 37 */
+   void (GLAPIENTRYP Color4uiv)(const GLuint * v); /* 38 */
+   void (GLAPIENTRYP Color4us)(GLushort red, GLushort green, GLushort blue, GLushort alpha); /* 39 */
+   void (GLAPIENTRYP Color4usv)(const GLushort * v); /* 40 */
+   void (GLAPIENTRYP EdgeFlag)(GLboolean flag); /* 41 */
+   void (GLAPIENTRYP EdgeFlagv)(const GLboolean * flag); /* 42 */
+   void (GLAPIENTRYP End)(void); /* 43 */
+   void (GLAPIENTRYP Indexd)(GLdouble c); /* 44 */
+   void (GLAPIENTRYP Indexdv)(const GLdouble * c); /* 45 */
+   void (GLAPIENTRYP Indexf)(GLfloat c); /* 46 */
+   void (GLAPIENTRYP Indexfv)(const GLfloat * c); /* 47 */
+   void (GLAPIENTRYP Indexi)(GLint c); /* 48 */
+   void (GLAPIENTRYP Indexiv)(const GLint * c); /* 49 */
+   void (GLAPIENTRYP Indexs)(GLshort c); /* 50 */
+   void (GLAPIENTRYP Indexsv)(const GLshort * c); /* 51 */
+   void (GLAPIENTRYP Normal3b)(GLbyte nx, GLbyte ny, GLbyte nz); /* 52 */
+   void (GLAPIENTRYP Normal3bv)(const GLbyte * v); /* 53 */
+   void (GLAPIENTRYP Normal3d)(GLdouble nx, GLdouble ny, GLdouble nz); /* 54 */
+   void (GLAPIENTRYP Normal3dv)(const GLdouble * v); /* 55 */
+   void (GLAPIENTRYP Normal3f)(GLfloat nx, GLfloat ny, GLfloat nz); /* 56 */
+   void (GLAPIENTRYP Normal3fv)(const GLfloat * v); /* 57 */
+   void (GLAPIENTRYP Normal3i)(GLint nx, GLint ny, GLint nz); /* 58 */
+   void (GLAPIENTRYP Normal3iv)(const GLint * v); /* 59 */
+   void (GLAPIENTRYP Normal3s)(GLshort nx, GLshort ny, GLshort nz); /* 60 */
+   void (GLAPIENTRYP Normal3sv)(const GLshort * v); /* 61 */
+   void (GLAPIENTRYP RasterPos2d)(GLdouble x, GLdouble y); /* 62 */
+   void (GLAPIENTRYP RasterPos2dv)(const GLdouble * v); /* 63 */
+   void (GLAPIENTRYP RasterPos2f)(GLfloat x, GLfloat y); /* 64 */
+   void (GLAPIENTRYP RasterPos2fv)(const GLfloat * v); /* 65 */
+   void (GLAPIENTRYP RasterPos2i)(GLint x, GLint y); /* 66 */
+   void (GLAPIENTRYP RasterPos2iv)(const GLint * v); /* 67 */
+   void (GLAPIENTRYP RasterPos2s)(GLshort x, GLshort y); /* 68 */
+   void (GLAPIENTRYP RasterPos2sv)(const GLshort * v); /* 69 */
+   void (GLAPIENTRYP RasterPos3d)(GLdouble x, GLdouble y, GLdouble z); /* 70 */
+   void (GLAPIENTRYP RasterPos3dv)(const GLdouble * v); /* 71 */
+   void (GLAPIENTRYP RasterPos3f)(GLfloat x, GLfloat y, GLfloat z); /* 72 */
+   void (GLAPIENTRYP RasterPos3fv)(const GLfloat * v); /* 73 */
+   void (GLAPIENTRYP RasterPos3i)(GLint x, GLint y, GLint z); /* 74 */
+   void (GLAPIENTRYP RasterPos3iv)(const GLint * v); /* 75 */
+   void (GLAPIENTRYP RasterPos3s)(GLshort x, GLshort y, GLshort z); /* 76 */
+   void (GLAPIENTRYP RasterPos3sv)(const GLshort * v); /* 77 */
+   void (GLAPIENTRYP RasterPos4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 78 */
+   void (GLAPIENTRYP RasterPos4dv)(const GLdouble * v); /* 79 */
+   void (GLAPIENTRYP RasterPos4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 80 */
+   void (GLAPIENTRYP RasterPos4fv)(const GLfloat * v); /* 81 */
+   void (GLAPIENTRYP RasterPos4i)(GLint x, GLint y, GLint z, GLint w); /* 82 */
+   void (GLAPIENTRYP RasterPos4iv)(const GLint * v); /* 83 */
+   void (GLAPIENTRYP RasterPos4s)(GLshort x, GLshort y, GLshort z, GLshort w); /* 84 */
+   void (GLAPIENTRYP RasterPos4sv)(const GLshort * v); /* 85 */
+   void (GLAPIENTRYP Rectd)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); /* 86 */
+   void (GLAPIENTRYP Rectdv)(const GLdouble * v1, const GLdouble * v2); /* 87 */
+   void (GLAPIENTRYP Rectf)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); /* 88 */
+   void (GLAPIENTRYP Rectfv)(const GLfloat * v1, const GLfloat * v2); /* 89 */
+   void (GLAPIENTRYP Recti)(GLint x1, GLint y1, GLint x2, GLint y2); /* 90 */
+   void (GLAPIENTRYP Rectiv)(const GLint * v1, const GLint * v2); /* 91 */
+   void (GLAPIENTRYP Rects)(GLshort x1, GLshort y1, GLshort x2, GLshort y2); /* 92 */
+   void (GLAPIENTRYP Rectsv)(const GLshort * v1, const GLshort * v2); /* 93 */
+   void (GLAPIENTRYP TexCoord1d)(GLdouble s); /* 94 */
+   void (GLAPIENTRYP TexCoord1dv)(const GLdouble * v); /* 95 */
+   void (GLAPIENTRYP TexCoord1f)(GLfloat s); /* 96 */
+   void (GLAPIENTRYP TexCoord1fv)(const GLfloat * v); /* 97 */
+   void (GLAPIENTRYP TexCoord1i)(GLint s); /* 98 */
+   void (GLAPIENTRYP TexCoord1iv)(const GLint * v); /* 99 */
+   void (GLAPIENTRYP TexCoord1s)(GLshort s); /* 100 */
+   void (GLAPIENTRYP TexCoord1sv)(const GLshort * v); /* 101 */
+   void (GLAPIENTRYP TexCoord2d)(GLdouble s, GLdouble t); /* 102 */
+   void (GLAPIENTRYP TexCoord2dv)(const GLdouble * v); /* 103 */
+   void (GLAPIENTRYP TexCoord2f)(GLfloat s, GLfloat t); /* 104 */
+   void (GLAPIENTRYP TexCoord2fv)(const GLfloat * v); /* 105 */
+   void (GLAPIENTRYP TexCoord2i)(GLint s, GLint t); /* 106 */
+   void (GLAPIENTRYP TexCoord2iv)(const GLint * v); /* 107 */
+   void (GLAPIENTRYP TexCoord2s)(GLshort s, GLshort t); /* 108 */
+   void (GLAPIENTRYP TexCoord2sv)(const GLshort * v); /* 109 */
+   void (GLAPIENTRYP TexCoord3d)(GLdouble s, GLdouble t, GLdouble r); /* 110 */
+   void (GLAPIENTRYP TexCoord3dv)(const GLdouble * v); /* 111 */
+   void (GLAPIENTRYP TexCoord3f)(GLfloat s, GLfloat t, GLfloat r); /* 112 */
+   void (GLAPIENTRYP TexCoord3fv)(const GLfloat * v); /* 113 */
+   void (GLAPIENTRYP TexCoord3i)(GLint s, GLint t, GLint r); /* 114 */
+   void (GLAPIENTRYP TexCoord3iv)(const GLint * v); /* 115 */
+   void (GLAPIENTRYP TexCoord3s)(GLshort s, GLshort t, GLshort r); /* 116 */
+   void (GLAPIENTRYP TexCoord3sv)(const GLshort * v); /* 117 */
+   void (GLAPIENTRYP TexCoord4d)(GLdouble s, GLdouble t, GLdouble r, GLdouble q); /* 118 */
+   void (GLAPIENTRYP TexCoord4dv)(const GLdouble * v); /* 119 */
+   void (GLAPIENTRYP TexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q); /* 120 */
+   void (GLAPIENTRYP TexCoord4fv)(const GLfloat * v); /* 121 */
+   void (GLAPIENTRYP TexCoord4i)(GLint s, GLint t, GLint r, GLint q); /* 122 */
+   void (GLAPIENTRYP TexCoord4iv)(const GLint * v); /* 123 */
+   void (GLAPIENTRYP TexCoord4s)(GLshort s, GLshort t, GLshort r, GLshort q); /* 124 */
+   void (GLAPIENTRYP TexCoord4sv)(const GLshort * v); /* 125 */
+   void (GLAPIENTRYP Vertex2d)(GLdouble x, GLdouble y); /* 126 */
+   void (GLAPIENTRYP Vertex2dv)(const GLdouble * v); /* 127 */
+   void (GLAPIENTRYP Vertex2f)(GLfloat x, GLfloat y); /* 128 */
+   void (GLAPIENTRYP Vertex2fv)(const GLfloat * v); /* 129 */
+   void (GLAPIENTRYP Vertex2i)(GLint x, GLint y); /* 130 */
+   void (GLAPIENTRYP Vertex2iv)(const GLint * v); /* 131 */
+   void (GLAPIENTRYP Vertex2s)(GLshort x, GLshort y); /* 132 */
+   void (GLAPIENTRYP Vertex2sv)(const GLshort * v); /* 133 */
+   void (GLAPIENTRYP Vertex3d)(GLdouble x, GLdouble y, GLdouble z); /* 134 */
+   void (GLAPIENTRYP Vertex3dv)(const GLdouble * v); /* 135 */
+   void (GLAPIENTRYP Vertex3f)(GLfloat x, GLfloat y, GLfloat z); /* 136 */
+   void (GLAPIENTRYP Vertex3fv)(const GLfloat * v); /* 137 */
+   void (GLAPIENTRYP Vertex3i)(GLint x, GLint y, GLint z); /* 138 */
+   void (GLAPIENTRYP Vertex3iv)(const GLint * v); /* 139 */
+   void (GLAPIENTRYP Vertex3s)(GLshort x, GLshort y, GLshort z); /* 140 */
+   void (GLAPIENTRYP Vertex3sv)(const GLshort * v); /* 141 */
+   void (GLAPIENTRYP Vertex4d)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 142 */
+   void (GLAPIENTRYP Vertex4dv)(const GLdouble * v); /* 143 */
+   void (GLAPIENTRYP Vertex4f)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 144 */
+   void (GLAPIENTRYP Vertex4fv)(const GLfloat * v); /* 145 */
+   void (GLAPIENTRYP Vertex4i)(GLint x, GLint y, GLint z, GLint w); /* 146 */
+   void (GLAPIENTRYP Vertex4iv)(const GLint * v); /* 147 */
+   void (GLAPIENTRYP Vertex4s)(GLshort x, GLshort y, GLshort z, GLshort w); /* 148 */
+   void (GLAPIENTRYP Vertex4sv)(const GLshort * v); /* 149 */
+   void (GLAPIENTRYP ClipPlane)(GLenum plane, const GLdouble * equation); /* 150 */
+   void (GLAPIENTRYP ColorMaterial)(GLenum face, GLenum mode); /* 151 */
+   void (GLAPIENTRYP CullFace)(GLenum mode); /* 152 */
+   void (GLAPIENTRYP Fogf)(GLenum pname, GLfloat param); /* 153 */
+   void (GLAPIENTRYP Fogfv)(GLenum pname, const GLfloat * params); /* 154 */
+   void (GLAPIENTRYP Fogi)(GLenum pname, GLint param); /* 155 */
+   void (GLAPIENTRYP Fogiv)(GLenum pname, const GLint * params); /* 156 */
+   void (GLAPIENTRYP FrontFace)(GLenum mode); /* 157 */
+   void (GLAPIENTRYP Hint)(GLenum target, GLenum mode); /* 158 */
+   void (GLAPIENTRYP Lightf)(GLenum light, GLenum pname, GLfloat param); /* 159 */
+   void (GLAPIENTRYP Lightfv)(GLenum light, GLenum pname, const GLfloat * params); /* 160 */
+   void (GLAPIENTRYP Lighti)(GLenum light, GLenum pname, GLint param); /* 161 */
+   void (GLAPIENTRYP Lightiv)(GLenum light, GLenum pname, const GLint * params); /* 162 */
+   void (GLAPIENTRYP LightModelf)(GLenum pname, GLfloat param); /* 163 */
+   void (GLAPIENTRYP LightModelfv)(GLenum pname, const GLfloat * params); /* 164 */
+   void (GLAPIENTRYP LightModeli)(GLenum pname, GLint param); /* 165 */
+   void (GLAPIENTRYP LightModeliv)(GLenum pname, const GLint * params); /* 166 */
+   void (GLAPIENTRYP LineStipple)(GLint factor, GLushort pattern); /* 167 */
+   void (GLAPIENTRYP LineWidth)(GLfloat width); /* 168 */
+   void (GLAPIENTRYP Materialf)(GLenum face, GLenum pname, GLfloat param); /* 169 */
+   void (GLAPIENTRYP Materialfv)(GLenum face, GLenum pname, const GLfloat * params); /* 170 */
+   void (GLAPIENTRYP Materiali)(GLenum face, GLenum pname, GLint param); /* 171 */
+   void (GLAPIENTRYP Materialiv)(GLenum face, GLenum pname, const GLint * params); /* 172 */
+   void (GLAPIENTRYP PointSize)(GLfloat size); /* 173 */
+   void (GLAPIENTRYP PolygonMode)(GLenum face, GLenum mode); /* 174 */
+   void (GLAPIENTRYP PolygonStipple)(const GLubyte * mask); /* 175 */
+   void (GLAPIENTRYP Scissor)(GLint x, GLint y, GLsizei width, GLsizei height); /* 176 */
+   void (GLAPIENTRYP ShadeModel)(GLenum mode); /* 177 */
+   void (GLAPIENTRYP TexParameterf)(GLenum target, GLenum pname, GLfloat param); /* 178 */
+   void (GLAPIENTRYP TexParameterfv)(GLenum target, GLenum pname, const GLfloat * params); /* 179 */
+   void (GLAPIENTRYP TexParameteri)(GLenum target, GLenum pname, GLint param); /* 180 */
+   void (GLAPIENTRYP TexParameteriv)(GLenum target, GLenum pname, const GLint * params); /* 181 */
+   void (GLAPIENTRYP TexImage1D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid * pixels); /* 182 */
+   void (GLAPIENTRYP TexImage2D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid * pixels); /* 183 */
+   void (GLAPIENTRYP TexEnvf)(GLenum target, GLenum pname, GLfloat param); /* 184 */
+   void (GLAPIENTRYP TexEnvfv)(GLenum target, GLenum pname, const GLfloat * params); /* 185 */
+   void (GLAPIENTRYP TexEnvi)(GLenum target, GLenum pname, GLint param); /* 186 */
+   void (GLAPIENTRYP TexEnviv)(GLenum target, GLenum pname, const GLint * params); /* 187 */
+   void (GLAPIENTRYP TexGend)(GLenum coord, GLenum pname, GLdouble param); /* 188 */
+   void (GLAPIENTRYP TexGendv)(GLenum coord, GLenum pname, const GLdouble * params); /* 189 */
+   void (GLAPIENTRYP TexGenf)(GLenum coord, GLenum pname, GLfloat param); /* 190 */
+   void (GLAPIENTRYP TexGenfv)(GLenum coord, GLenum pname, const GLfloat * params); /* 191 */
+   void (GLAPIENTRYP TexGeni)(GLenum coord, GLenum pname, GLint param); /* 192 */
+   void (GLAPIENTRYP TexGeniv)(GLenum coord, GLenum pname, const GLint * params); /* 193 */
+   void (GLAPIENTRYP FeedbackBuffer)(GLsizei size, GLenum type, GLfloat * buffer); /* 194 */
+   void (GLAPIENTRYP SelectBuffer)(GLsizei size, GLuint * buffer); /* 195 */
+   GLint (GLAPIENTRYP RenderMode)(GLenum mode); /* 196 */
+   void (GLAPIENTRYP InitNames)(void); /* 197 */
+   void (GLAPIENTRYP LoadName)(GLuint name); /* 198 */
+   void (GLAPIENTRYP PassThrough)(GLfloat token); /* 199 */
+   void (GLAPIENTRYP PopName)(void); /* 200 */
+   void (GLAPIENTRYP PushName)(GLuint name); /* 201 */
+   void (GLAPIENTRYP DrawBuffer)(GLenum mode); /* 202 */
+   void (GLAPIENTRYP Clear)(GLbitfield mask); /* 203 */
+   void (GLAPIENTRYP ClearAccum)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); /* 204 */
+   void (GLAPIENTRYP ClearIndex)(GLfloat c); /* 205 */
+   void (GLAPIENTRYP ClearColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); /* 206 */
+   void (GLAPIENTRYP ClearStencil)(GLint s); /* 207 */
+   void (GLAPIENTRYP ClearDepth)(GLclampd depth); /* 208 */
+   void (GLAPIENTRYP StencilMask)(GLuint mask); /* 209 */
+   void (GLAPIENTRYP ColorMask)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); /* 210 */
+   void (GLAPIENTRYP DepthMask)(GLboolean flag); /* 211 */
+   void (GLAPIENTRYP IndexMask)(GLuint mask); /* 212 */
+   void (GLAPIENTRYP Accum)(GLenum op, GLfloat value); /* 213 */
+   void (GLAPIENTRYP Disable)(GLenum cap); /* 214 */
+   void (GLAPIENTRYP Enable)(GLenum cap); /* 215 */
+   void (GLAPIENTRYP Finish)(void); /* 216 */
+   void (GLAPIENTRYP Flush)(void); /* 217 */
+   void (GLAPIENTRYP PopAttrib)(void); /* 218 */
+   void (GLAPIENTRYP PushAttrib)(GLbitfield mask); /* 219 */
+   void (GLAPIENTRYP Map1d)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble * points); /* 220 */
+   void (GLAPIENTRYP Map1f)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat * points); /* 221 */
+   void (GLAPIENTRYP Map2d)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble * points); /* 222 */
+   void (GLAPIENTRYP Map2f)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat * points); /* 223 */
+   void (GLAPIENTRYP MapGrid1d)(GLint un, GLdouble u1, GLdouble u2); /* 224 */
+   void (GLAPIENTRYP MapGrid1f)(GLint un, GLfloat u1, GLfloat u2); /* 225 */
+   void (GLAPIENTRYP MapGrid2d)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); /* 226 */
+   void (GLAPIENTRYP MapGrid2f)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); /* 227 */
+   void (GLAPIENTRYP EvalCoord1d)(GLdouble u); /* 228 */
+   void (GLAPIENTRYP EvalCoord1dv)(const GLdouble * u); /* 229 */
+   void (GLAPIENTRYP EvalCoord1f)(GLfloat u); /* 230 */
+   void (GLAPIENTRYP EvalCoord1fv)(const GLfloat * u); /* 231 */
+   void (GLAPIENTRYP EvalCoord2d)(GLdouble u, GLdouble v); /* 232 */
+   void (GLAPIENTRYP EvalCoord2dv)(const GLdouble * u); /* 233 */
+   void (GLAPIENTRYP EvalCoord2f)(GLfloat u, GLfloat v); /* 234 */
+   void (GLAPIENTRYP EvalCoord2fv)(const GLfloat * u); /* 235 */
+   void (GLAPIENTRYP EvalMesh1)(GLenum mode, GLint i1, GLint i2); /* 236 */
+   void (GLAPIENTRYP EvalPoint1)(GLint i); /* 237 */
+   void (GLAPIENTRYP EvalMesh2)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); /* 238 */
+   void (GLAPIENTRYP EvalPoint2)(GLint i, GLint j); /* 239 */
+   void (GLAPIENTRYP AlphaFunc)(GLenum func, GLclampf ref); /* 240 */
+   void (GLAPIENTRYP BlendFunc)(GLenum sfactor, GLenum dfactor); /* 241 */
+   void (GLAPIENTRYP LogicOp)(GLenum opcode); /* 242 */
+   void (GLAPIENTRYP StencilFunc)(GLenum func, GLint ref, GLuint mask); /* 243 */
+   void (GLAPIENTRYP StencilOp)(GLenum fail, GLenum zfail, GLenum zpass); /* 244 */
+   void (GLAPIENTRYP DepthFunc)(GLenum func); /* 245 */
+   void (GLAPIENTRYP PixelZoom)(GLfloat xfactor, GLfloat yfactor); /* 246 */
+   void (GLAPIENTRYP PixelTransferf)(GLenum pname, GLfloat param); /* 247 */
+   void (GLAPIENTRYP PixelTransferi)(GLenum pname, GLint param); /* 248 */
+   void (GLAPIENTRYP PixelStoref)(GLenum pname, GLfloat param); /* 249 */
+   void (GLAPIENTRYP PixelStorei)(GLenum pname, GLint param); /* 250 */
+   void (GLAPIENTRYP PixelMapfv)(GLenum map, GLsizei mapsize, const GLfloat * values); /* 251 */
+   void (GLAPIENTRYP PixelMapuiv)(GLenum map, GLsizei mapsize, const GLuint * values); /* 252 */
+   void (GLAPIENTRYP PixelMapusv)(GLenum map, GLsizei mapsize, const GLushort * values); /* 253 */
+   void (GLAPIENTRYP ReadBuffer)(GLenum mode); /* 254 */
+   void (GLAPIENTRYP CopyPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); /* 255 */
+   void (GLAPIENTRYP ReadPixels)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * pixels); /* 256 */
+   void (GLAPIENTRYP DrawPixels)(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); /* 257 */
+   void (GLAPIENTRYP GetBooleanv)(GLenum pname, GLboolean * params); /* 258 */
+   void (GLAPIENTRYP GetClipPlane)(GLenum plane, GLdouble * equation); /* 259 */
+   void (GLAPIENTRYP GetDoublev)(GLenum pname, GLdouble * params); /* 260 */
+   GLenum (GLAPIENTRYP GetError)(void); /* 261 */
+   void (GLAPIENTRYP GetFloatv)(GLenum pname, GLfloat * params); /* 262 */
+   void (GLAPIENTRYP GetIntegerv)(GLenum pname, GLint * params); /* 263 */
+   void (GLAPIENTRYP GetLightfv)(GLenum light, GLenum pname, GLfloat * params); /* 264 */
+   void (GLAPIENTRYP GetLightiv)(GLenum light, GLenum pname, GLint * params); /* 265 */
+   void (GLAPIENTRYP GetMapdv)(GLenum target, GLenum query, GLdouble * v); /* 266 */
+   void (GLAPIENTRYP GetMapfv)(GLenum target, GLenum query, GLfloat * v); /* 267 */
+   void (GLAPIENTRYP GetMapiv)(GLenum target, GLenum query, GLint * v); /* 268 */
+   void (GLAPIENTRYP GetMaterialfv)(GLenum face, GLenum pname, GLfloat * params); /* 269 */
+   void (GLAPIENTRYP GetMaterialiv)(GLenum face, GLenum pname, GLint * params); /* 270 */
+   void (GLAPIENTRYP GetPixelMapfv)(GLenum map, GLfloat * values); /* 271 */
+   void (GLAPIENTRYP GetPixelMapuiv)(GLenum map, GLuint * values); /* 272 */
+   void (GLAPIENTRYP GetPixelMapusv)(GLenum map, GLushort * values); /* 273 */
+   void (GLAPIENTRYP GetPolygonStipple)(GLubyte * mask); /* 274 */
+   const GLubyte * (GLAPIENTRYP GetString)(GLenum name); /* 275 */
+   void (GLAPIENTRYP GetTexEnvfv)(GLenum target, GLenum pname, GLfloat * params); /* 276 */
+   void (GLAPIENTRYP GetTexEnviv)(GLenum target, GLenum pname, GLint * params); /* 277 */
+   void (GLAPIENTRYP GetTexGendv)(GLenum coord, GLenum pname, GLdouble * params); /* 278 */
+   void (GLAPIENTRYP GetTexGenfv)(GLenum coord, GLenum pname, GLfloat * params); /* 279 */
+   void (GLAPIENTRYP GetTexGeniv)(GLenum coord, GLenum pname, GLint * params); /* 280 */
+   void (GLAPIENTRYP GetTexImage)(GLenum target, GLint level, GLenum format, GLenum type, GLvoid * pixels); /* 281 */
+   void (GLAPIENTRYP GetTexParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 282 */
+   void (GLAPIENTRYP GetTexParameteriv)(GLenum target, GLenum pname, GLint * params); /* 283 */
+   void (GLAPIENTRYP GetTexLevelParameterfv)(GLenum target, GLint level, GLenum pname, GLfloat * params); /* 284 */
+   void (GLAPIENTRYP GetTexLevelParameteriv)(GLenum target, GLint level, GLenum pname, GLint * params); /* 285 */
+   GLboolean (GLAPIENTRYP IsEnabled)(GLenum cap); /* 286 */
+   GLboolean (GLAPIENTRYP IsList)(GLuint list); /* 287 */
+   void (GLAPIENTRYP DepthRange)(GLclampd zNear, GLclampd zFar); /* 288 */
+   void (GLAPIENTRYP Frustum)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); /* 289 */
+   void (GLAPIENTRYP LoadIdentity)(void); /* 290 */
+   void (GLAPIENTRYP LoadMatrixf)(const GLfloat * m); /* 291 */
+   void (GLAPIENTRYP LoadMatrixd)(const GLdouble * m); /* 292 */
+   void (GLAPIENTRYP MatrixMode)(GLenum mode); /* 293 */
+   void (GLAPIENTRYP MultMatrixf)(const GLfloat * m); /* 294 */
+   void (GLAPIENTRYP MultMatrixd)(const GLdouble * m); /* 295 */
+   void (GLAPIENTRYP Ortho)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); /* 296 */
+   void (GLAPIENTRYP PopMatrix)(void); /* 297 */
+   void (GLAPIENTRYP PushMatrix)(void); /* 298 */
+   void (GLAPIENTRYP Rotated)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); /* 299 */
+   void (GLAPIENTRYP Rotatef)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); /* 300 */
+   void (GLAPIENTRYP Scaled)(GLdouble x, GLdouble y, GLdouble z); /* 301 */
+   void (GLAPIENTRYP Scalef)(GLfloat x, GLfloat y, GLfloat z); /* 302 */
+   void (GLAPIENTRYP Translated)(GLdouble x, GLdouble y, GLdouble z); /* 303 */
+   void (GLAPIENTRYP Translatef)(GLfloat x, GLfloat y, GLfloat z); /* 304 */
+   void (GLAPIENTRYP Viewport)(GLint x, GLint y, GLsizei width, GLsizei height); /* 305 */
+   void (GLAPIENTRYP ArrayElement)(GLint i); /* 306 */
+   void (GLAPIENTRYP BindTexture)(GLenum target, GLuint texture); /* 307 */
+   void (GLAPIENTRYP ColorPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 308 */
+   void (GLAPIENTRYP DisableClientState)(GLenum array); /* 309 */
+   void (GLAPIENTRYP DrawArrays)(GLenum mode, GLint first, GLsizei count); /* 310 */
+   void (GLAPIENTRYP DrawElements)(GLenum mode, GLsizei count, GLenum type, const GLvoid * indices); /* 311 */
+   void (GLAPIENTRYP EdgeFlagPointer)(GLsizei stride, const GLvoid * pointer); /* 312 */
+   void (GLAPIENTRYP EnableClientState)(GLenum array); /* 313 */
+   void (GLAPIENTRYP IndexPointer)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 314 */
+   void (GLAPIENTRYP Indexub)(GLubyte c); /* 315 */
+   void (GLAPIENTRYP Indexubv)(const GLubyte * c); /* 316 */
+   void (GLAPIENTRYP InterleavedArrays)(GLenum format, GLsizei stride, const GLvoid * pointer); /* 317 */
+   void (GLAPIENTRYP NormalPointer)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 318 */
+   void (GLAPIENTRYP PolygonOffset)(GLfloat factor, GLfloat units); /* 319 */
+   void (GLAPIENTRYP TexCoordPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 320 */
+   void (GLAPIENTRYP VertexPointer)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 321 */
+   GLboolean (GLAPIENTRYP AreTexturesResident)(GLsizei n, const GLuint * textures, GLboolean * residences); /* 322 */
+   void (GLAPIENTRYP CopyTexImage1D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); /* 323 */
+   void (GLAPIENTRYP CopyTexImage2D)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); /* 324 */
+   void (GLAPIENTRYP CopyTexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); /* 325 */
+   void (GLAPIENTRYP CopyTexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); /* 326 */
+   void (GLAPIENTRYP DeleteTextures)(GLsizei n, const GLuint * textures); /* 327 */
+   void (GLAPIENTRYP GenTextures)(GLsizei n, GLuint * textures); /* 328 */
+   void (GLAPIENTRYP GetPointerv)(GLenum pname, GLvoid ** params); /* 329 */
+   GLboolean (GLAPIENTRYP IsTexture)(GLuint texture); /* 330 */
+   void (GLAPIENTRYP PrioritizeTextures)(GLsizei n, const GLuint * textures, const GLclampf * priorities); /* 331 */
+   void (GLAPIENTRYP TexSubImage1D)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid * pixels); /* 332 */
+   void (GLAPIENTRYP TexSubImage2D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * pixels); /* 333 */
+   void (GLAPIENTRYP PopClientAttrib)(void); /* 334 */
+   void (GLAPIENTRYP PushClientAttrib)(GLbitfield mask); /* 335 */
+   void (GLAPIENTRYP BlendColor)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); /* 336 */
+   void (GLAPIENTRYP BlendEquation)(GLenum mode); /* 337 */
+   void (GLAPIENTRYP DrawRangeElements)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); /* 338 */
+   void (GLAPIENTRYP ColorTable)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * table); /* 339 */
+   void (GLAPIENTRYP ColorTableParameterfv)(GLenum target, GLenum pname, const GLfloat * params); /* 340 */
+   void (GLAPIENTRYP ColorTableParameteriv)(GLenum target, GLenum pname, const GLint * params); /* 341 */
+   void (GLAPIENTRYP CopyColorTable)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); /* 342 */
+   void (GLAPIENTRYP GetColorTable)(GLenum target, GLenum format, GLenum type, GLvoid * table); /* 343 */
+   void (GLAPIENTRYP GetColorTableParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 344 */
+   void (GLAPIENTRYP GetColorTableParameteriv)(GLenum target, GLenum pname, GLint * params); /* 345 */
+   void (GLAPIENTRYP ColorSubTable)(GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid * data); /* 346 */
+   void (GLAPIENTRYP CopyColorSubTable)(GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); /* 347 */
+   void (GLAPIENTRYP ConvolutionFilter1D)(GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid * image); /* 348 */
+   void (GLAPIENTRYP ConvolutionFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * image); /* 349 */
+   void (GLAPIENTRYP ConvolutionParameterf)(GLenum target, GLenum pname, GLfloat params); /* 350 */
+   void (GLAPIENTRYP ConvolutionParameterfv)(GLenum target, GLenum pname, const GLfloat * params); /* 351 */
+   void (GLAPIENTRYP ConvolutionParameteri)(GLenum target, GLenum pname, GLint params); /* 352 */
+   void (GLAPIENTRYP ConvolutionParameteriv)(GLenum target, GLenum pname, const GLint * params); /* 353 */
+   void (GLAPIENTRYP CopyConvolutionFilter1D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); /* 354 */
+   void (GLAPIENTRYP CopyConvolutionFilter2D)(GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); /* 355 */
+   void (GLAPIENTRYP GetConvolutionFilter)(GLenum target, GLenum format, GLenum type, GLvoid * image); /* 356 */
+   void (GLAPIENTRYP GetConvolutionParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 357 */
+   void (GLAPIENTRYP GetConvolutionParameteriv)(GLenum target, GLenum pname, GLint * params); /* 358 */
+   void (GLAPIENTRYP GetSeparableFilter)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); /* 359 */
+   void (GLAPIENTRYP SeparableFilter2D)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid * row, const GLvoid * column); /* 360 */
+   void (GLAPIENTRYP GetHistogram)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 361 */
+   void (GLAPIENTRYP GetHistogramParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 362 */
+   void (GLAPIENTRYP GetHistogramParameteriv)(GLenum target, GLenum pname, GLint * params); /* 363 */
+   void (GLAPIENTRYP GetMinmax)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 364 */
+   void (GLAPIENTRYP GetMinmaxParameterfv)(GLenum target, GLenum pname, GLfloat * params); /* 365 */
+   void (GLAPIENTRYP GetMinmaxParameteriv)(GLenum target, GLenum pname, GLint * params); /* 366 */
+   void (GLAPIENTRYP Histogram)(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); /* 367 */
+   void (GLAPIENTRYP Minmax)(GLenum target, GLenum internalformat, GLboolean sink); /* 368 */
+   void (GLAPIENTRYP ResetHistogram)(GLenum target); /* 369 */
+   void (GLAPIENTRYP ResetMinmax)(GLenum target); /* 370 */
+   void (GLAPIENTRYP TexImage3D)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid * pixels); /* 371 */
+   void (GLAPIENTRYP TexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid * pixels); /* 372 */
+   void (GLAPIENTRYP CopyTexSubImage3D)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); /* 373 */
+   void (GLAPIENTRYP ActiveTextureARB)(GLenum texture); /* 374 */
+   void (GLAPIENTRYP ClientActiveTextureARB)(GLenum texture); /* 375 */
+   void (GLAPIENTRYP MultiTexCoord1dARB)(GLenum target, GLdouble s); /* 376 */
+   void (GLAPIENTRYP MultiTexCoord1dvARB)(GLenum target, const GLdouble * v); /* 377 */
+   void (GLAPIENTRYP MultiTexCoord1fARB)(GLenum target, GLfloat s); /* 378 */
+   void (GLAPIENTRYP MultiTexCoord1fvARB)(GLenum target, const GLfloat * v); /* 379 */
+   void (GLAPIENTRYP MultiTexCoord1iARB)(GLenum target, GLint s); /* 380 */
+   void (GLAPIENTRYP MultiTexCoord1ivARB)(GLenum target, const GLint * v); /* 381 */
+   void (GLAPIENTRYP MultiTexCoord1sARB)(GLenum target, GLshort s); /* 382 */
+   void (GLAPIENTRYP MultiTexCoord1svARB)(GLenum target, const GLshort * v); /* 383 */
+   void (GLAPIENTRYP MultiTexCoord2dARB)(GLenum target, GLdouble s, GLdouble t); /* 384 */
+   void (GLAPIENTRYP MultiTexCoord2dvARB)(GLenum target, const GLdouble * v); /* 385 */
+   void (GLAPIENTRYP MultiTexCoord2fARB)(GLenum target, GLfloat s, GLfloat t); /* 386 */
+   void (GLAPIENTRYP MultiTexCoord2fvARB)(GLenum target, const GLfloat * v); /* 387 */
+   void (GLAPIENTRYP MultiTexCoord2iARB)(GLenum target, GLint s, GLint t); /* 388 */
+   void (GLAPIENTRYP MultiTexCoord2ivARB)(GLenum target, const GLint * v); /* 389 */
+   void (GLAPIENTRYP MultiTexCoord2sARB)(GLenum target, GLshort s, GLshort t); /* 390 */
+   void (GLAPIENTRYP MultiTexCoord2svARB)(GLenum target, const GLshort * v); /* 391 */
+   void (GLAPIENTRYP MultiTexCoord3dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r); /* 392 */
+   void (GLAPIENTRYP MultiTexCoord3dvARB)(GLenum target, const GLdouble * v); /* 393 */
+   void (GLAPIENTRYP MultiTexCoord3fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r); /* 394 */
+   void (GLAPIENTRYP MultiTexCoord3fvARB)(GLenum target, const GLfloat * v); /* 395 */
+   void (GLAPIENTRYP MultiTexCoord3iARB)(GLenum target, GLint s, GLint t, GLint r); /* 396 */
+   void (GLAPIENTRYP MultiTexCoord3ivARB)(GLenum target, const GLint * v); /* 397 */
+   void (GLAPIENTRYP MultiTexCoord3sARB)(GLenum target, GLshort s, GLshort t, GLshort r); /* 398 */
+   void (GLAPIENTRYP MultiTexCoord3svARB)(GLenum target, const GLshort * v); /* 399 */
+   void (GLAPIENTRYP MultiTexCoord4dARB)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); /* 400 */
+   void (GLAPIENTRYP MultiTexCoord4dvARB)(GLenum target, const GLdouble * v); /* 401 */
+   void (GLAPIENTRYP MultiTexCoord4fARB)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); /* 402 */
+   void (GLAPIENTRYP MultiTexCoord4fvARB)(GLenum target, const GLfloat * v); /* 403 */
+   void (GLAPIENTRYP MultiTexCoord4iARB)(GLenum target, GLint s, GLint t, GLint r, GLint q); /* 404 */
+   void (GLAPIENTRYP MultiTexCoord4ivARB)(GLenum target, const GLint * v); /* 405 */
+   void (GLAPIENTRYP MultiTexCoord4sARB)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); /* 406 */
+   void (GLAPIENTRYP MultiTexCoord4svARB)(GLenum target, const GLshort * v); /* 407 */
+   void (GLAPIENTRYP LoadTransposeMatrixfARB)(const GLfloat * m); /* 408 */
+   void (GLAPIENTRYP LoadTransposeMatrixdARB)(const GLdouble * m); /* 409 */
+   void (GLAPIENTRYP MultTransposeMatrixfARB)(const GLfloat * m); /* 410 */
+   void (GLAPIENTRYP MultTransposeMatrixdARB)(const GLdouble * m); /* 411 */
+   void (GLAPIENTRYP SampleCoverageARB)(GLclampf value, GLboolean invert); /* 412 */
+   void (GLAPIENTRYP __unused413)(void); /* 413 */
+   void (GLAPIENTRYP PolygonOffsetEXT)(GLfloat factor, GLfloat bias); /* 414 */
+   void (GLAPIENTRYP GetTexFilterFuncSGIS)(GLenum target, GLenum filter, GLfloat * weights); /* 415 */
+   void (GLAPIENTRYP TexFilterFuncSGIS)(GLenum target, GLenum filter, GLsizei n, const GLfloat * weights); /* 416 */
+   void (GLAPIENTRYP GetHistogramEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 417 */
+   void (GLAPIENTRYP GetHistogramParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 418 */
+   void (GLAPIENTRYP GetHistogramParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 419 */
+   void (GLAPIENTRYP GetMinmaxEXT)(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid * values); /* 420 */
+   void (GLAPIENTRYP GetMinmaxParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 421 */
+   void (GLAPIENTRYP GetMinmaxParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 422 */
+   void (GLAPIENTRYP GetConvolutionFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * image); /* 423 */
+   void (GLAPIENTRYP GetConvolutionParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 424 */
+   void (GLAPIENTRYP GetConvolutionParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 425 */
+   void (GLAPIENTRYP GetSeparableFilterEXT)(GLenum target, GLenum format, GLenum type, GLvoid * row, GLvoid * column, GLvoid * span); /* 426 */
+   void (GLAPIENTRYP GetColorTableSGI)(GLenum target, GLenum format, GLenum type, GLvoid * table); /* 427 */
+   void (GLAPIENTRYP GetColorTableParameterfvSGI)(GLenum target, GLenum pname, GLfloat * params); /* 428 */
+   void (GLAPIENTRYP GetColorTableParameterivSGI)(GLenum target, GLenum pname, GLint * params); /* 429 */
+   void (GLAPIENTRYP PixelTexGenSGIX)(GLenum mode); /* 430 */
+   void (GLAPIENTRYP PixelTexGenParameteriSGIS)(GLenum pname, GLint param); /* 431 */
+   void (GLAPIENTRYP PixelTexGenParameterivSGIS)(GLenum pname, const GLint * params); /* 432 */
+   void (GLAPIENTRYP PixelTexGenParameterfSGIS)(GLenum pname, GLfloat param); /* 433 */
+   void (GLAPIENTRYP PixelTexGenParameterfvSGIS)(GLenum pname, const GLfloat * params); /* 434 */
+   void (GLAPIENTRYP GetPixelTexGenParameterivSGIS)(GLenum pname, GLint * params); /* 435 */
+   void (GLAPIENTRYP GetPixelTexGenParameterfvSGIS)(GLenum pname, GLfloat * params); /* 436 */
+   void (GLAPIENTRYP TexImage4DSGIS)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid * pixels); /* 437 */
+   void (GLAPIENTRYP TexSubImage4DSGIS)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid * pixels); /* 438 */
+   GLboolean (GLAPIENTRYP AreTexturesResidentEXT)(GLsizei n, const GLuint * textures, GLboolean * residences); /* 439 */
+   void (GLAPIENTRYP GenTexturesEXT)(GLsizei n, GLuint * textures); /* 440 */
+   GLboolean (GLAPIENTRYP IsTextureEXT)(GLuint texture); /* 441 */
+   void (GLAPIENTRYP DetailTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); /* 442 */
+   void (GLAPIENTRYP GetDetailTexFuncSGIS)(GLenum target, GLfloat * points); /* 443 */
+   void (GLAPIENTRYP SharpenTexFuncSGIS)(GLenum target, GLsizei n, const GLfloat * points); /* 444 */
+   void (GLAPIENTRYP GetSharpenTexFuncSGIS)(GLenum target, GLfloat * points); /* 445 */
+   void (GLAPIENTRYP SampleMaskSGIS)(GLclampf value, GLboolean invert); /* 446 */
+   void (GLAPIENTRYP SamplePatternSGIS)(GLenum pattern); /* 447 */
+   void (GLAPIENTRYP ColorPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 448 */
+   void (GLAPIENTRYP EdgeFlagPointerEXT)(GLsizei stride, GLsizei count, const GLboolean * pointer); /* 449 */
+   void (GLAPIENTRYP IndexPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 450 */
+   void (GLAPIENTRYP NormalPointerEXT)(GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 451 */
+   void (GLAPIENTRYP TexCoordPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 452 */
+   void (GLAPIENTRYP VertexPointerEXT)(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid * pointer); /* 453 */
+   void (GLAPIENTRYP SpriteParameterfSGIX)(GLenum pname, GLfloat param); /* 454 */
+   void (GLAPIENTRYP SpriteParameterfvSGIX)(GLenum pname, const GLfloat * params); /* 455 */
+   void (GLAPIENTRYP SpriteParameteriSGIX)(GLenum pname, GLint param); /* 456 */
+   void (GLAPIENTRYP SpriteParameterivSGIX)(GLenum pname, const GLint * params); /* 457 */
+   void (GLAPIENTRYP PointParameterfEXT)(GLenum pname, GLfloat param); /* 458 */
+   void (GLAPIENTRYP PointParameterfvEXT)(GLenum pname, const GLfloat * params); /* 459 */
+   GLint (GLAPIENTRYP GetInstrumentsSGIX)(void); /* 460 */
+   void (GLAPIENTRYP InstrumentsBufferSGIX)(GLsizei size, GLint * buffer); /* 461 */
+   GLint (GLAPIENTRYP PollInstrumentsSGIX)(GLint * marker_p); /* 462 */
+   void (GLAPIENTRYP ReadInstrumentsSGIX)(GLint marker); /* 463 */
+   void (GLAPIENTRYP StartInstrumentsSGIX)(void); /* 464 */
+   void (GLAPIENTRYP StopInstrumentsSGIX)(GLint marker); /* 465 */
+   void (GLAPIENTRYP FrameZoomSGIX)(GLint factor); /* 466 */
+   void (GLAPIENTRYP TagSampleBufferSGIX)(void); /* 467 */
+   void (GLAPIENTRYP ReferencePlaneSGIX)(const GLdouble * equation); /* 468 */
+   void (GLAPIENTRYP FlushRasterSGIX)(void); /* 469 */
+   void (GLAPIENTRYP GetListParameterfvSGIX)(GLuint list, GLenum pname, GLfloat * params); /* 470 */
+   void (GLAPIENTRYP GetListParameterivSGIX)(GLuint list, GLenum pname, GLint * params); /* 471 */
+   void (GLAPIENTRYP ListParameterfSGIX)(GLuint list, GLenum pname, GLfloat param); /* 472 */
+   void (GLAPIENTRYP ListParameterfvSGIX)(GLuint list, GLenum pname, const GLfloat * params); /* 473 */
+   void (GLAPIENTRYP ListParameteriSGIX)(GLuint list, GLenum pname, GLint param); /* 474 */
+   void (GLAPIENTRYP ListParameterivSGIX)(GLuint list, GLenum pname, const GLint * params); /* 475 */
+   void (GLAPIENTRYP FragmentColorMaterialSGIX)(GLenum face, GLenum mode); /* 476 */
+   void (GLAPIENTRYP FragmentLightfSGIX)(GLenum light, GLenum pname, GLfloat param); /* 477 */
+   void (GLAPIENTRYP FragmentLightfvSGIX)(GLenum light, GLenum pname, const GLfloat * params); /* 478 */
+   void (GLAPIENTRYP FragmentLightiSGIX)(GLenum light, GLenum pname, GLint param); /* 479 */
+   void (GLAPIENTRYP FragmentLightivSGIX)(GLenum light, GLenum pname, const GLint * params); /* 480 */
+   void (GLAPIENTRYP FragmentLightModelfSGIX)(GLenum pname, GLfloat param); /* 481 */
+   void (GLAPIENTRYP FragmentLightModelfvSGIX)(GLenum pname, const GLfloat * params); /* 482 */
+   void (GLAPIENTRYP FragmentLightModeliSGIX)(GLenum pname, GLint param); /* 483 */
+   void (GLAPIENTRYP FragmentLightModelivSGIX)(GLenum pname, const GLint * params); /* 484 */
+   void (GLAPIENTRYP FragmentMaterialfSGIX)(GLenum face, GLenum pname, GLfloat param); /* 485 */
+   void (GLAPIENTRYP FragmentMaterialfvSGIX)(GLenum face, GLenum pname, const GLfloat * params); /* 486 */
+   void (GLAPIENTRYP FragmentMaterialiSGIX)(GLenum face, GLenum pname, GLint param); /* 487 */
+   void (GLAPIENTRYP FragmentMaterialivSGIX)(GLenum face, GLenum pname, const GLint * params); /* 488 */
+   void (GLAPIENTRYP GetFragmentLightfvSGIX)(GLenum light, GLenum pname, GLfloat * params); /* 489 */
+   void (GLAPIENTRYP GetFragmentLightivSGIX)(GLenum light, GLenum pname, GLint * params); /* 490 */
+   void (GLAPIENTRYP GetFragmentMaterialfvSGIX)(GLenum face, GLenum pname, GLfloat * params); /* 491 */
+   void (GLAPIENTRYP GetFragmentMaterialivSGIX)(GLenum face, GLenum pname, GLint * params); /* 492 */
+   void (GLAPIENTRYP LightEnviSGIX)(GLenum pname, GLint param); /* 493 */
+   void (GLAPIENTRYP VertexWeightfEXT)(GLfloat weight); /* 494 */
+   void (GLAPIENTRYP VertexWeightfvEXT)(const GLfloat * weight); /* 495 */
+   void (GLAPIENTRYP VertexWeightPointerEXT)(GLsizei size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 496 */
+   void (GLAPIENTRYP FlushVertexArrayRangeNV)(void); /* 497 */
+   void (GLAPIENTRYP VertexArrayRangeNV)(GLsizei length, const GLvoid * pointer); /* 498 */
+   void (GLAPIENTRYP CombinerParameterfvNV)(GLenum pname, const GLfloat * params); /* 499 */
+   void (GLAPIENTRYP CombinerParameterfNV)(GLenum pname, GLfloat param); /* 500 */
+   void (GLAPIENTRYP CombinerParameterivNV)(GLenum pname, const GLint * params); /* 501 */
+   void (GLAPIENTRYP CombinerParameteriNV)(GLenum pname, GLint param); /* 502 */
+   void (GLAPIENTRYP CombinerInputNV)(GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 503 */
+   void (GLAPIENTRYP CombinerOutputNV)(GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); /* 504 */
+   void (GLAPIENTRYP FinalCombinerInputNV)(GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); /* 505 */
+   void (GLAPIENTRYP GetCombinerInputParameterfvNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat * params); /* 506 */
+   void (GLAPIENTRYP GetCombinerInputParameterivNV)(GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint * params); /* 507 */
+   void (GLAPIENTRYP GetCombinerOutputParameterfvNV)(GLenum stage, GLenum portion, GLenum pname, GLfloat * params); /* 508 */
+   void (GLAPIENTRYP GetCombinerOutputParameterivNV)(GLenum stage, GLenum portion, GLenum pname, GLint * params); /* 509 */
+   void (GLAPIENTRYP GetFinalCombinerInputParameterfvNV)(GLenum variable, GLenum pname, GLfloat * params); /* 510 */
+   void (GLAPIENTRYP GetFinalCombinerInputParameterivNV)(GLenum variable, GLenum pname, GLint * params); /* 511 */
+   void (GLAPIENTRYP ResizeBuffersMESA)(void); /* 512 */
+   void (GLAPIENTRYP WindowPos2dMESA)(GLdouble x, GLdouble y); /* 513 */
+   void (GLAPIENTRYP WindowPos2dvMESA)(const GLdouble * v); /* 514 */
+   void (GLAPIENTRYP WindowPos2fMESA)(GLfloat x, GLfloat y); /* 515 */
+   void (GLAPIENTRYP WindowPos2fvMESA)(const GLfloat * v); /* 516 */
+   void (GLAPIENTRYP WindowPos2iMESA)(GLint x, GLint y); /* 517 */
+   void (GLAPIENTRYP WindowPos2ivMESA)(const GLint * v); /* 518 */
+   void (GLAPIENTRYP WindowPos2sMESA)(GLshort x, GLshort y); /* 519 */
+   void (GLAPIENTRYP WindowPos2svMESA)(const GLshort * v); /* 520 */
+   void (GLAPIENTRYP WindowPos3dMESA)(GLdouble x, GLdouble y, GLdouble z); /* 521 */
+   void (GLAPIENTRYP WindowPos3dvMESA)(const GLdouble * v); /* 522 */
+   void (GLAPIENTRYP WindowPos3fMESA)(GLfloat x, GLfloat y, GLfloat z); /* 523 */
+   void (GLAPIENTRYP WindowPos3fvMESA)(const GLfloat * v); /* 524 */
+   void (GLAPIENTRYP WindowPos3iMESA)(GLint x, GLint y, GLint z); /* 525 */
+   void (GLAPIENTRYP WindowPos3ivMESA)(const GLint * v); /* 526 */
+   void (GLAPIENTRYP WindowPos3sMESA)(GLshort x, GLshort y, GLshort z); /* 527 */
+   void (GLAPIENTRYP WindowPos3svMESA)(const GLshort * v); /* 528 */
+   void (GLAPIENTRYP WindowPos4dMESA)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 529 */
+   void (GLAPIENTRYP WindowPos4dvMESA)(const GLdouble * v); /* 530 */
+   void (GLAPIENTRYP WindowPos4fMESA)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 531 */
+   void (GLAPIENTRYP WindowPos4fvMESA)(const GLfloat * v); /* 532 */
+   void (GLAPIENTRYP WindowPos4iMESA)(GLint x, GLint y, GLint z, GLint w); /* 533 */
+   void (GLAPIENTRYP WindowPos4ivMESA)(const GLint * v); /* 534 */
+   void (GLAPIENTRYP WindowPos4sMESA)(GLshort x, GLshort y, GLshort z, GLshort w); /* 535 */
+   void (GLAPIENTRYP WindowPos4svMESA)(const GLshort * v); /* 536 */
+   void (GLAPIENTRYP BlendFuncSeparateEXT)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); /* 537 */
+   void (GLAPIENTRYP IndexMaterialEXT)(GLenum face, GLenum mode); /* 538 */
+   void (GLAPIENTRYP IndexFuncEXT)(GLenum func, GLclampf ref); /* 539 */
+   void (GLAPIENTRYP LockArraysEXT)(GLint first, GLsizei count); /* 540 */
+   void (GLAPIENTRYP UnlockArraysEXT)(void); /* 541 */
+   void (GLAPIENTRYP CullParameterdvEXT)(GLenum pname, GLdouble * params); /* 542 */
+   void (GLAPIENTRYP CullParameterfvEXT)(GLenum pname, GLfloat * params); /* 543 */
+   void (GLAPIENTRYP HintPGI)(GLenum target, GLint mode); /* 544 */
+   void (GLAPIENTRYP FogCoordfEXT)(GLfloat coord); /* 545 */
+   void (GLAPIENTRYP FogCoordfvEXT)(const GLfloat * coord); /* 546 */
+   void (GLAPIENTRYP FogCoorddEXT)(GLdouble coord); /* 547 */
+   void (GLAPIENTRYP FogCoorddvEXT)(const GLdouble * coord); /* 548 */
+   void (GLAPIENTRYP FogCoordPointerEXT)(GLenum type, GLsizei stride, const GLvoid * pointer); /* 549 */
+   void (GLAPIENTRYP GetColorTableEXT)(GLenum target, GLenum format, GLenum type, GLvoid * data); /* 550 */
+   void (GLAPIENTRYP GetColorTableParameterivEXT)(GLenum target, GLenum pname, GLint * params); /* 551 */
+   void (GLAPIENTRYP GetColorTableParameterfvEXT)(GLenum target, GLenum pname, GLfloat * params); /* 552 */
+   void (GLAPIENTRYP TbufferMask3DFX)(GLuint mask); /* 553 */
+   void (GLAPIENTRYP CompressedTexImage3DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid * data); /* 554 */
+   void (GLAPIENTRYP CompressedTexImage2DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid * data); /* 555 */
+   void (GLAPIENTRYP CompressedTexImage1DARB)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid * data); /* 556 */
+   void (GLAPIENTRYP CompressedTexSubImage3DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid * data); /* 557 */
+   void (GLAPIENTRYP CompressedTexSubImage2DARB)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid * data); /* 558 */
+   void (GLAPIENTRYP CompressedTexSubImage1DARB)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid * data); /* 559 */
+   void (GLAPIENTRYP GetCompressedTexImageARB)(GLenum target, GLint level, GLvoid * img); /* 560 */
+   void (GLAPIENTRYP SecondaryColor3bEXT)(GLbyte red, GLbyte green, GLbyte blue); /* 561 */
+   void (GLAPIENTRYP SecondaryColor3bvEXT)(const GLbyte * v); /* 562 */
+   void (GLAPIENTRYP SecondaryColor3dEXT)(GLdouble red, GLdouble green, GLdouble blue); /* 563 */
+   void (GLAPIENTRYP SecondaryColor3dvEXT)(const GLdouble * v); /* 564 */
+   void (GLAPIENTRYP SecondaryColor3fEXT)(GLfloat red, GLfloat green, GLfloat blue); /* 565 */
+   void (GLAPIENTRYP SecondaryColor3fvEXT)(const GLfloat * v); /* 566 */
+   void (GLAPIENTRYP SecondaryColor3iEXT)(GLint red, GLint green, GLint blue); /* 567 */
+   void (GLAPIENTRYP SecondaryColor3ivEXT)(const GLint * v); /* 568 */
+   void (GLAPIENTRYP SecondaryColor3sEXT)(GLshort red, GLshort green, GLshort blue); /* 569 */
+   void (GLAPIENTRYP SecondaryColor3svEXT)(const GLshort * v); /* 570 */
+   void (GLAPIENTRYP SecondaryColor3ubEXT)(GLubyte red, GLubyte green, GLubyte blue); /* 571 */
+   void (GLAPIENTRYP SecondaryColor3ubvEXT)(const GLubyte * v); /* 572 */
+   void (GLAPIENTRYP SecondaryColor3uiEXT)(GLuint red, GLuint green, GLuint blue); /* 573 */
+   void (GLAPIENTRYP SecondaryColor3uivEXT)(const GLuint * v); /* 574 */
+   void (GLAPIENTRYP SecondaryColor3usEXT)(GLushort red, GLushort green, GLushort blue); /* 575 */
+   void (GLAPIENTRYP SecondaryColor3usvEXT)(const GLushort * v); /* 576 */
+   void (GLAPIENTRYP SecondaryColorPointerEXT)(GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 577 */
+   GLboolean (GLAPIENTRYP AreProgramsResidentNV)(GLsizei n, const GLuint * ids, GLboolean * residences); /* 578 */
+   void (GLAPIENTRYP BindProgramNV)(GLenum target, GLuint id); /* 579 */
+   void (GLAPIENTRYP DeleteProgramsNV)(GLsizei n, const GLuint * ids); /* 580 */
+   void (GLAPIENTRYP ExecuteProgramNV)(GLenum target, GLuint id, const GLfloat * params); /* 581 */
+   void (GLAPIENTRYP GenProgramsNV)(GLsizei n, GLuint * ids); /* 582 */
+   void (GLAPIENTRYP GetProgramParameterdvNV)(GLenum target, GLuint index, GLenum pname, GLdouble * params); /* 583 */
+   void (GLAPIENTRYP GetProgramParameterfvNV)(GLenum target, GLuint index, GLenum pname, GLfloat * params); /* 584 */
+   void (GLAPIENTRYP GetProgramivNV)(GLuint id, GLenum pname, GLint * params); /* 585 */
+   void (GLAPIENTRYP GetProgramStringNV)(GLuint id, GLenum pname, GLubyte * program); /* 586 */
+   void (GLAPIENTRYP GetTrackMatrixivNV)(GLenum target, GLuint address, GLenum pname, GLint * params); /* 587 */
+   void (GLAPIENTRYP GetVertexAttribdvNV)(GLuint index, GLenum pname, GLdouble * params); /* 588 */
+   void (GLAPIENTRYP GetVertexAttribfvNV)(GLuint index, GLenum pname, GLfloat * params); /* 589 */
+   void (GLAPIENTRYP GetVertexAttribivNV)(GLuint index, GLenum pname, GLint * params); /* 590 */
+   void (GLAPIENTRYP GetVertexAttribPointervNV)(GLuint index, GLenum pname, GLvoid ** pointer); /* 591 */
+   GLboolean (GLAPIENTRYP IsProgramNV)(GLuint id); /* 592 */
+   void (GLAPIENTRYP LoadProgramNV)(GLenum target, GLuint id, GLsizei len, const GLubyte * program); /* 593 */
+   void (GLAPIENTRYP ProgramParameter4dNV)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 594 */
+   void (GLAPIENTRYP ProgramParameter4dvNV)(GLenum target, GLuint index, const GLdouble * params); /* 595 */
+   void (GLAPIENTRYP ProgramParameter4fNV)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 596 */
+   void (GLAPIENTRYP ProgramParameter4fvNV)(GLenum target, GLuint index, const GLfloat * params); /* 597 */
+   void (GLAPIENTRYP ProgramParameters4dvNV)(GLenum target, GLuint index, GLuint num, const GLdouble * params); /* 598 */
+   void (GLAPIENTRYP ProgramParameters4fvNV)(GLenum target, GLuint index, GLuint num, const GLfloat * params); /* 599 */
+   void (GLAPIENTRYP RequestResidentProgramsNV)(GLsizei n, const GLuint * ids); /* 600 */
+   void (GLAPIENTRYP TrackMatrixNV)(GLenum target, GLuint address, GLenum matrix, GLenum transform); /* 601 */
+   void (GLAPIENTRYP VertexAttribPointerNV)(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid * pointer); /* 602 */
+   void (GLAPIENTRYP VertexAttrib1dNV)(GLuint index, GLdouble x); /* 603 */
+   void (GLAPIENTRYP VertexAttrib1dvNV)(GLuint index, const GLdouble * v); /* 604 */
+   void (GLAPIENTRYP VertexAttrib1fNV)(GLuint index, GLfloat x); /* 605 */
+   void (GLAPIENTRYP VertexAttrib1fvNV)(GLuint index, const GLfloat * v); /* 606 */
+   void (GLAPIENTRYP VertexAttrib1sNV)(GLuint index, GLshort x); /* 607 */
+   void (GLAPIENTRYP VertexAttrib1svNV)(GLuint index, const GLshort * v); /* 608 */
+   void (GLAPIENTRYP VertexAttrib2dNV)(GLuint index, GLdouble x, GLdouble y); /* 609 */
+   void (GLAPIENTRYP VertexAttrib2dvNV)(GLuint index, const GLdouble * v); /* 610 */
+   void (GLAPIENTRYP VertexAttrib2fNV)(GLuint index, GLfloat x, GLfloat y); /* 611 */
+   void (GLAPIENTRYP VertexAttrib2fvNV)(GLuint index, const GLfloat * v); /* 612 */
+   void (GLAPIENTRYP VertexAttrib2sNV)(GLuint index, GLshort x, GLshort y); /* 613 */
+   void (GLAPIENTRYP VertexAttrib2svNV)(GLuint index, const GLshort * v); /* 614 */
+   void (GLAPIENTRYP VertexAttrib3dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z); /* 615 */
+   void (GLAPIENTRYP VertexAttrib3dvNV)(GLuint index, const GLdouble * v); /* 616 */
+   void (GLAPIENTRYP VertexAttrib3fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z); /* 617 */
+   void (GLAPIENTRYP VertexAttrib3fvNV)(GLuint index, const GLfloat * v); /* 618 */
+   void (GLAPIENTRYP VertexAttrib3sNV)(GLuint index, GLshort x, GLshort y, GLshort z); /* 619 */
+   void (GLAPIENTRYP VertexAttrib3svNV)(GLuint index, const GLshort * v); /* 620 */
+   void (GLAPIENTRYP VertexAttrib4dNV)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 621 */
+   void (GLAPIENTRYP VertexAttrib4dvNV)(GLuint index, const GLdouble * v); /* 622 */
+   void (GLAPIENTRYP VertexAttrib4fNV)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 623 */
+   void (GLAPIENTRYP VertexAttrib4fvNV)(GLuint index, const GLfloat * v); /* 624 */
+   void (GLAPIENTRYP VertexAttrib4sNV)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); /* 625 */
+   void (GLAPIENTRYP VertexAttrib4svNV)(GLuint index, const GLshort * v); /* 626 */
+   void (GLAPIENTRYP VertexAttrib4ubNV)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); /* 627 */
+   void (GLAPIENTRYP VertexAttrib4ubvNV)(GLuint index, const GLubyte * v); /* 628 */
+   void (GLAPIENTRYP VertexAttribs1dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 629 */
+   void (GLAPIENTRYP VertexAttribs1fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 630 */
+   void (GLAPIENTRYP VertexAttribs1svNV)(GLuint index, GLsizei n, const GLshort * v); /* 631 */
+   void (GLAPIENTRYP VertexAttribs2dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 632 */
+   void (GLAPIENTRYP VertexAttribs2fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 633 */
+   void (GLAPIENTRYP VertexAttribs2svNV)(GLuint index, GLsizei n, const GLshort * v); /* 634 */
+   void (GLAPIENTRYP VertexAttribs3dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 635 */
+   void (GLAPIENTRYP VertexAttribs3fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 636 */
+   void (GLAPIENTRYP VertexAttribs3svNV)(GLuint index, GLsizei n, const GLshort * v); /* 637 */
+   void (GLAPIENTRYP VertexAttribs4dvNV)(GLuint index, GLsizei n, const GLdouble * v); /* 638 */
+   void (GLAPIENTRYP VertexAttribs4fvNV)(GLuint index, GLsizei n, const GLfloat * v); /* 639 */
+   void (GLAPIENTRYP VertexAttribs4svNV)(GLuint index, GLsizei n, const GLshort * v); /* 640 */
+   void (GLAPIENTRYP VertexAttribs4ubvNV)(GLuint index, GLsizei n, const GLubyte * v); /* 641 */
+   void (GLAPIENTRYP PointParameteriNV)(GLenum pname, GLint params); /* 642 */
+   void (GLAPIENTRYP PointParameterivNV)(GLenum pname, const GLint * params); /* 643 */
+   void (GLAPIENTRYP MultiDrawArraysEXT)(GLenum mode, GLint * first, GLsizei * count, GLsizei primcount); /* 644 */
+   void (GLAPIENTRYP MultiDrawElementsEXT)(GLenum mode, const GLsizei * count, GLenum type, const GLvoid ** indices, GLsizei primcount); /* 645 */
+   void (GLAPIENTRYP ActiveStencilFaceEXT)(GLenum face); /* 646 */
+   void (GLAPIENTRYP DeleteFencesNV)(GLsizei n, const GLuint * fences); /* 647 */
+   void (GLAPIENTRYP GenFencesNV)(GLsizei n, GLuint * fences); /* 648 */
+   GLboolean (GLAPIENTRYP IsFenceNV)(GLuint fence); /* 649 */
+   GLboolean (GLAPIENTRYP TestFenceNV)(GLuint fence); /* 650 */
+   void (GLAPIENTRYP GetFenceivNV)(GLuint fence, GLenum pname, GLint * params); /* 651 */
+   void (GLAPIENTRYP FinishFenceNV)(GLuint fence); /* 652 */
+   void (GLAPIENTRYP SetFenceNV)(GLuint fence, GLenum condition); /* 653 */
+   void (GLAPIENTRYP VertexAttrib4bvARB)(GLuint index, const GLbyte * v); /* 654 */
+   void (GLAPIENTRYP VertexAttrib4ivARB)(GLuint index, const GLint * v); /* 655 */
+   void (GLAPIENTRYP VertexAttrib4ubvARB)(GLuint index, const GLubyte * v); /* 656 */
+   void (GLAPIENTRYP VertexAttrib4usvARB)(GLuint index, const GLushort * v); /* 657 */
+   void (GLAPIENTRYP VertexAttrib4uivARB)(GLuint index, const GLuint * v); /* 658 */
+   void (GLAPIENTRYP VertexAttrib4NbvARB)(GLuint index, const GLbyte * v); /* 659 */
+   void (GLAPIENTRYP VertexAttrib4NsvARB)(GLuint index, const GLshort * v); /* 660 */
+   void (GLAPIENTRYP VertexAttrib4NivARB)(GLuint index, const GLint * v); /* 661 */
+   void (GLAPIENTRYP VertexAttrib4NusvARB)(GLuint index, const GLushort * v); /* 662 */
+   void (GLAPIENTRYP VertexAttrib4NuivARB)(GLuint index, const GLuint * v); /* 663 */
+   void (GLAPIENTRYP VertexAttribPointerARB)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid * pointer); /* 664 */
+   void (GLAPIENTRYP EnableVertexAttribArrayARB)(GLuint index); /* 665 */
+   void (GLAPIENTRYP DisableVertexAttribArrayARB)(GLuint index); /* 666 */
+   void (GLAPIENTRYP ProgramStringARB)(GLenum target, GLenum format, GLsizei len, const GLvoid * string); /* 667 */
+   void (GLAPIENTRYP ProgramEnvParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 668 */
+   void (GLAPIENTRYP ProgramEnvParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 669 */
+   void (GLAPIENTRYP ProgramEnvParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 670 */
+   void (GLAPIENTRYP ProgramEnvParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 671 */
+   void (GLAPIENTRYP ProgramLocalParameter4dARB)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 672 */
+   void (GLAPIENTRYP ProgramLocalParameter4dvARB)(GLenum target, GLuint index, const GLdouble * params); /* 673 */
+   void (GLAPIENTRYP ProgramLocalParameter4fARB)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 674 */
+   void (GLAPIENTRYP ProgramLocalParameter4fvARB)(GLenum target, GLuint index, const GLfloat * params); /* 675 */
+   void (GLAPIENTRYP GetProgramEnvParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 676 */
+   void (GLAPIENTRYP GetProgramEnvParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 677 */
+   void (GLAPIENTRYP GetProgramLocalParameterdvARB)(GLenum target, GLuint index, GLdouble * params); /* 678 */
+   void (GLAPIENTRYP GetProgramLocalParameterfvARB)(GLenum target, GLuint index, GLfloat * params); /* 679 */
+   void (GLAPIENTRYP GetProgramivARB)(GLenum target, GLenum pname, GLint * params); /* 680 */
+   void (GLAPIENTRYP GetProgramStringARB)(GLenum target, GLenum pname, GLvoid * string); /* 681 */
+   void (GLAPIENTRYP ProgramNamedParameter4fNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); /* 682 */
+   void (GLAPIENTRYP ProgramNamedParameter4dNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); /* 683 */
+   void (GLAPIENTRYP ProgramNamedParameter4fvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLfloat * v); /* 684 */
+   void (GLAPIENTRYP ProgramNamedParameter4dvNV)(GLuint id, GLsizei len, const GLubyte * name, const GLdouble * v); /* 685 */
+   void (GLAPIENTRYP GetProgramNamedParameterfvNV)(GLuint id, GLsizei len, const GLubyte * name, GLfloat * params); /* 686 */
+   void (GLAPIENTRYP GetProgramNamedParameterdvNV)(GLuint id, GLsizei len, const GLubyte * name, GLdouble * params); /* 687 */
+   void (GLAPIENTRYP BindBufferARB)(GLenum target, GLuint buffer); /* 688 */
+   void (GLAPIENTRYP BufferDataARB)(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage); /* 689 */
+   void (GLAPIENTRYP BufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data); /* 690 */
+   void (GLAPIENTRYP DeleteBuffersARB)(GLsizei n, const GLuint * buffer); /* 691 */
+   void (GLAPIENTRYP GenBuffersARB)(GLsizei n, GLuint * buffer); /* 692 */
+   void (GLAPIENTRYP GetBufferParameterivARB)(GLenum target, GLenum pname, GLint * params); /* 693 */
+   void (GLAPIENTRYP GetBufferPointervARB)(GLenum target, GLenum pname, GLvoid ** params); /* 694 */
+   void (GLAPIENTRYP GetBufferSubDataARB)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data); /* 695 */
+   GLboolean (GLAPIENTRYP IsBufferARB)(GLuint buffer); /* 696 */
+   void * (GLAPIENTRYP MapBufferARB)(GLenum target, GLenum access); /* 697 */
+   GLboolean (GLAPIENTRYP UnmapBufferARB)(GLenum target); /* 698 */
+   void (GLAPIENTRYP DepthBoundsEXT)(GLclampd zmin, GLclampd zmax); /* 699 */
+   void (GLAPIENTRYP GenQueriesARB)(GLsizei n, GLuint * ids); /* 700 */
+   void (GLAPIENTRYP DeleteQueriesARB)(GLsizei n, const GLuint * ids); /* 701 */
+   GLboolean (GLAPIENTRYP IsQueryARB)(GLuint id); /* 702 */
+   void (GLAPIENTRYP BeginQueryARB)(GLenum target, GLuint id); /* 703 */
+   void (GLAPIENTRYP EndQueryARB)(GLenum target); /* 704 */
+   void (GLAPIENTRYP GetQueryivARB)(GLenum target, GLenum pname, GLint * params); /* 705 */
+   void (GLAPIENTRYP GetQueryObjectivARB)(GLuint id, GLenum pname, GLint * params); /* 706 */
+   void (GLAPIENTRYP GetQueryObjectuivARB)(GLuint id, GLenum pname, GLuint * params); /* 707 */
+   void (GLAPIENTRYP MultiModeDrawArraysIBM)(const GLenum * mode, const GLint * first, const GLsizei * count, GLsizei primcount, GLint modestride); /* 708 */
+   void (GLAPIENTRYP MultiModeDrawElementsIBM)(const GLenum * mode, const GLsizei * count, GLenum type, const GLvoid * const * indices, GLsizei primcount, GLint modestride); /* 709 */
 };
 
 #endif
diff --git a/src/mesa/glapi/gltable.py b/src/mesa/glapi/gltable.py
index 54dacb1..0cfa5ef 100644
--- a/src/mesa/glapi/gltable.py
+++ b/src/mesa/glapi/gltable.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-# $Id: gltable.py,v 1.3 2001/11/18 22:42:57 brianp Exp $
+# $Id: gltable.py,v 1.4 2003/10/21 22:22:18 kendallb Exp $
 
 # Mesa 3-D graphics library
 # Version:  4.1
@@ -77,7 +77,7 @@
 			pass
 		prevk = int(k)
 		(name, returnType, argList) = records[k]
-		print '   %s (*%s)(%s); /* %d */' % (returnType, name, argList, k)
+		print '   %s (GLAPIENTRYP %s)(%s); /* %d */' % (returnType, name, argList, k)
 #endef
 
 
diff --git a/src/mesa/main/accum.c b/src/mesa/main/accum.c
index 3ca7d27..74ea4dc 100644
--- a/src/mesa/main/accum.c
+++ b/src/mesa/main/accum.c
@@ -32,7 +32,7 @@
 #include "mtypes.h"
 
 
-void
+void GLAPIENTRY
 _mesa_ClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
 {
    GLfloat tmp[4];
@@ -53,7 +53,7 @@
 
 /* Should really be a driver-supplied function?
  */
-void
+void GLAPIENTRY
 _mesa_Accum( GLenum op, GLfloat value )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/accum.h b/src/mesa/main/accum.h
index 625d0bf..ce92688 100644
--- a/src/mesa/main/accum.h
+++ b/src/mesa/main/accum.h
@@ -42,11 +42,11 @@
 
 #if _HAVE_FULL_GL
 
-extern void
+extern void GLAPIENTRY
 _mesa_Accum( GLenum op, GLfloat value );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
 
 extern void 
diff --git a/src/mesa/main/api_loopback.c b/src/mesa/main/api_loopback.c
index 010a493..a2dc3c6 100644
--- a/src/mesa/main/api_loopback.c
+++ b/src/mesa/main/api_loopback.c
@@ -73,7 +73,7 @@
 #define SECONDARYCOLORF(a,b,c)      _glapi_Dispatch->SecondaryColor3fEXT(a,b,c)
 
 
-static void
+static void GLAPIENTRY
 loopback_Color3b( GLbyte red, GLbyte green, GLbyte blue )
 {
    GLubyte col[4];
@@ -84,7 +84,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3d( GLdouble red, GLdouble green, GLdouble blue )
 {
    GLubyte col[4];
@@ -98,7 +98,7 @@
    COLORUBV( col );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3i( GLint red, GLint green, GLint blue )
 {
    GLubyte col[4];
@@ -109,7 +109,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3s( GLshort red, GLshort green, GLshort blue )
 {
    GLubyte col[4];
@@ -120,7 +120,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3ui( GLuint red, GLuint green, GLuint blue )
 {
    GLubyte col[4];
@@ -131,7 +131,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3us( GLushort red, GLushort green, GLushort blue )
 {
    GLubyte col[4];
@@ -142,7 +142,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha )
 {
    GLubyte col[4];
@@ -153,7 +153,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha )
 {
    GLubyte col[4];
@@ -168,7 +168,7 @@
    COLORUBV( col );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4i( GLint red, GLint green, GLint blue, GLint alpha )
 {
    GLubyte col[4];
@@ -179,7 +179,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4s( GLshort red, GLshort green, GLshort blue,
 			GLshort alpha )
 {
@@ -191,7 +191,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha )
 {
    GLubyte col[4];
@@ -202,7 +202,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4us( GLushort red, GLushort green, GLushort blue,
 			 GLushort alpha )
 {
@@ -214,7 +214,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3bv( const GLbyte *v )
 {
    GLubyte col[4];
@@ -225,7 +225,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3dv( const GLdouble *v )
 {
    GLubyte col[4];
@@ -239,7 +239,7 @@
    COLORUBV( col );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3iv( const GLint *v )
 {
    GLubyte col[4];
@@ -250,7 +250,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3sv( const GLshort *v )
 {
    GLubyte col[4];
@@ -261,7 +261,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3uiv( const GLuint *v )
 {
    GLubyte col[4];
@@ -272,7 +272,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3usv( const GLushort *v )
 {
    GLubyte col[4];
@@ -284,7 +284,7 @@
 
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4bv( const GLbyte *v )
 {
    GLubyte col[4];
@@ -295,7 +295,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4dv( const GLdouble *v )
 {
    GLubyte col[4];
@@ -310,7 +310,7 @@
    COLORUBV( col );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4iv( const GLint *v )
 {
    GLubyte col[4];
@@ -321,7 +321,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4sv( const GLshort *v)
 {
    GLubyte col[4];
@@ -332,7 +332,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4uiv( const GLuint *v)
 {
    GLubyte col[4];
@@ -343,7 +343,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4usv( const GLushort *v)
 {
    GLubyte col[4];
@@ -354,7 +354,7 @@
    COLORUBV(col);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3b_f( GLbyte red, GLbyte green, GLbyte blue )
 {
    COLORF( BYTE_TO_FLOAT(red),
@@ -363,34 +363,34 @@
 	   1.0 );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3d_f( GLdouble red, GLdouble green, GLdouble blue )
 {
    COLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue, 1.0 );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3i_f( GLint red, GLint green, GLint blue )
 {
    COLORF( INT_TO_FLOAT(red), INT_TO_FLOAT(green),
 	   INT_TO_FLOAT(blue), 1.0);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3s_f( GLshort red, GLshort green, GLshort blue )
 {
    COLORF( SHORT_TO_FLOAT(red), SHORT_TO_FLOAT(green),
 	   SHORT_TO_FLOAT(blue), 1.0);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3ui_f( GLuint red, GLuint green, GLuint blue )
 {
    COLORF( UINT_TO_FLOAT(red), UINT_TO_FLOAT(green),
 	   UINT_TO_FLOAT(blue), 1.0 );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3us_f( GLushort red, GLushort green, GLushort blue )
 {
    COLORF( USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green),
@@ -398,41 +398,41 @@
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_Color3bv_f( const GLbyte *v )
 {
    COLORF( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
 	   BYTE_TO_FLOAT(v[2]), 1.0 );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3dv_f( const GLdouble *v )
 {
    COLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0 );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3iv_f( const GLint *v )
 {
    COLORF( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
 	   INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3]) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3sv_f( const GLshort *v )
 {
    COLORF( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
 	   SHORT_TO_FLOAT(v[2]), 1.0 );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3uiv_f( const GLuint *v )
 {
    COLORF( UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
 	   UINT_TO_FLOAT(v[2]), 1.0 );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color3usv_f( const GLushort *v )
 {
    COLORF( USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
@@ -440,7 +440,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_Color4b_f( GLbyte red, GLbyte green, GLbyte blue,
 			      GLbyte alpha )
 {
@@ -448,21 +448,21 @@
 	   BYTE_TO_FLOAT(blue), BYTE_TO_FLOAT(alpha) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4d_f( GLdouble red, GLdouble green, GLdouble blue,
 			      GLdouble alpha )
 {
    COLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue, (GLfloat) alpha );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4i_f( GLint red, GLint green, GLint blue, GLint alpha )
 {
    COLORF( INT_TO_FLOAT(red), INT_TO_FLOAT(green),
 	   INT_TO_FLOAT(blue), INT_TO_FLOAT(alpha) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4s_f( GLshort red, GLshort green, GLshort blue,
 			      GLshort alpha )
 {
@@ -470,14 +470,14 @@
 	   SHORT_TO_FLOAT(blue), SHORT_TO_FLOAT(alpha) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4ui_f( GLuint red, GLuint green, GLuint blue, GLuint alpha )
 {
    COLORF( UINT_TO_FLOAT(red), UINT_TO_FLOAT(green),
 	   UINT_TO_FLOAT(blue), UINT_TO_FLOAT(alpha) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4us_f( GLushort red, GLushort green, GLushort blue, GLushort alpha )
 {
    COLORF( USHORT_TO_FLOAT(red), USHORT_TO_FLOAT(green),
@@ -485,7 +485,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_Color4iv_f( const GLint *v )
 {
    COLORF( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
@@ -493,21 +493,21 @@
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_Color4bv_f( const GLbyte *v )
 {
    COLORF( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
 	   BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3]) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4dv_f( const GLdouble *v )
 {
    COLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3] );
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_Color4sv_f( const GLshort *v)
 {
    COLORF( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
@@ -515,577 +515,577 @@
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_Color4uiv_f( const GLuint *v)
 {
    COLORF( UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
 	   UINT_TO_FLOAT(v[2]), UINT_TO_FLOAT(v[3]) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Color4usv_f( const GLushort *v)
 {
    COLORF( USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
 	   USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3]) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_FogCoorddEXT( GLdouble d )
 {
    FOGCOORDF( (GLfloat) d );
 }
 
-static void
+static void GLAPIENTRY
 loopback_FogCoorddvEXT( const GLdouble *v )
 {
    FOGCOORDF( (GLfloat) *v );
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_Indexd( GLdouble c )
 {
    INDEX( (GLint) c );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Indexf( GLfloat c )
 {
    INDEX( (GLuint) (GLint) c );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Indexs( GLshort c )
 {
    INDEX( (GLint) c );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Indexub( GLubyte c )
 {
    INDEX( (GLint) c );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Indexdv( const GLdouble *c )
 {
    INDEX( (GLint) (GLint) *c );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Indexfv( const GLfloat *c )
 {
    INDEX( (GLint) (GLint) *c );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Indexiv( const GLint *c )
 {
    INDEX( *c );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Indexsv( const GLshort *c )
 {
    INDEX( (GLint) *c );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Indexubv( const GLubyte *c )
 {
    INDEX( (GLint) *c );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Normal3b( GLbyte nx, GLbyte ny, GLbyte nz )
 {
    NORMAL( BYTE_TO_FLOAT(nx), BYTE_TO_FLOAT(ny), BYTE_TO_FLOAT(nz) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Normal3d( GLdouble nx, GLdouble ny, GLdouble nz )
 {
    NORMAL((GLfloat) nx, (GLfloat) ny, (GLfloat) nz);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Normal3i( GLint nx, GLint ny, GLint nz )
 {
    NORMAL( INT_TO_FLOAT(nx), INT_TO_FLOAT(ny), INT_TO_FLOAT(nz) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Normal3s( GLshort nx, GLshort ny, GLshort nz )
 {
    NORMAL( SHORT_TO_FLOAT(nx), SHORT_TO_FLOAT(ny), SHORT_TO_FLOAT(nz) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Normal3bv( const GLbyte *v )
 {
    NORMAL( BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]), BYTE_TO_FLOAT(v[2]) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Normal3dv( const GLdouble *v )
 {
    NORMAL( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Normal3iv( const GLint *v )
 {
    NORMAL( INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]), INT_TO_FLOAT(v[2]) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Normal3sv( const GLshort *v )
 {
    NORMAL( SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]), SHORT_TO_FLOAT(v[2]) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord1d( GLdouble s )
 {
    TEXCOORD1((GLfloat) s);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord1i( GLint s )
 {
    TEXCOORD1((GLfloat) s);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord1s( GLshort s )
 {
    TEXCOORD1((GLfloat) s);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord2d( GLdouble s, GLdouble t )
 {
    TEXCOORD2((GLfloat) s,(GLfloat) t);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord2s( GLshort s, GLshort t )
 {
    TEXCOORD2((GLfloat) s,(GLfloat) t);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord2i( GLint s, GLint t )
 {
    TEXCOORD2((GLfloat) s,(GLfloat) t);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord3d( GLdouble s, GLdouble t, GLdouble r )
 {
    TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord3i( GLint s, GLint t, GLint r )
 {
    TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord3s( GLshort s, GLshort t, GLshort r )
 {
    TEXCOORD3((GLfloat) s,(GLfloat) t,(GLfloat) r);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q )
 {
    TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord4i( GLint s, GLint t, GLint r, GLint q )
 {
    TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q )
 {
    TEXCOORD4((GLfloat) s,(GLfloat) t,(GLfloat) r,(GLfloat) q);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord1dv( const GLdouble *v )
 {
    TEXCOORD1((GLfloat) v[0]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord1iv( const GLint *v )
 {
    TEXCOORD1((GLfloat) v[0]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord1sv( const GLshort *v )
 {
    TEXCOORD1((GLfloat) v[0]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord2dv( const GLdouble *v )
 {
    TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord2iv( const GLint *v )
 {
    TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord2sv( const GLshort *v )
 {
    TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord3dv( const GLdouble *v )
 {
    TEXCOORD2((GLfloat) v[0],(GLfloat) v[1]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord3iv( const GLint *v )
 {
    TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord3sv( const GLshort *v )
 {
    TEXCOORD3((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord4dv( const GLdouble *v )
 {
    TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord4iv( const GLint *v )
 {
    TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_TexCoord4sv( const GLshort *v )
 {
    TEXCOORD4((GLfloat) v[0],(GLfloat) v[1],(GLfloat) v[2],(GLfloat) v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex2d( GLdouble x, GLdouble y )
 {
    VERTEX2( (GLfloat) x, (GLfloat) y );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex2i( GLint x, GLint y )
 {
    VERTEX2( (GLfloat) x, (GLfloat) y );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex2s( GLshort x, GLshort y )
 {
    VERTEX2( (GLfloat) x, (GLfloat) y );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex3d( GLdouble x, GLdouble y, GLdouble z )
 {
    VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex3i( GLint x, GLint y, GLint z )
 {
    VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex3s( GLshort x, GLshort y, GLshort z )
 {
    VERTEX3( (GLfloat) x, (GLfloat) y, (GLfloat) z );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w )
 {
    VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex4i( GLint x, GLint y, GLint z, GLint w )
 {
    VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex4s( GLshort x, GLshort y, GLshort z, GLshort w )
 {
    VERTEX4( (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex2dv( const GLdouble *v )
 {
    VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex2iv( const GLint *v )
 {
    VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex2sv( const GLshort *v )
 {
    VERTEX2( (GLfloat) v[0], (GLfloat) v[1] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex3dv( const GLdouble *v )
 {
    VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex3iv( const GLint *v )
 {
    VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex3sv( const GLshort *v )
 {
    VERTEX3( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex4dv( const GLdouble *v )
 {
    VERTEX4( (GLfloat) v[0], (GLfloat) v[1],
 	    (GLfloat) v[2], (GLfloat) v[3] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex4iv( const GLint *v )
 {
    VERTEX4( (GLfloat) v[0], (GLfloat) v[1],
 	    (GLfloat) v[2], (GLfloat) v[3] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Vertex4sv( const GLshort *v )
 {
    VERTEX4( (GLfloat) v[0], (GLfloat) v[1],
 	    (GLfloat) v[2], (GLfloat) v[3] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord1dARB(GLenum target, GLdouble s)
 {
    MULTI_TEXCOORD1( target, (GLfloat) s );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord1dvARB(GLenum target, const GLdouble *v)
 {
    MULTI_TEXCOORD1( target, (GLfloat) v[0] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord1iARB(GLenum target, GLint s)
 {
    MULTI_TEXCOORD1( target, (GLfloat) s );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord1ivARB(GLenum target, const GLint *v)
 {
    MULTI_TEXCOORD1( target, (GLfloat) v[0] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord1sARB(GLenum target, GLshort s)
 {
    MULTI_TEXCOORD1( target, (GLfloat) s );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord1svARB(GLenum target, const GLshort *v)
 {
    MULTI_TEXCOORD1( target, (GLfloat) v[0] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t)
 {
    MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord2dvARB(GLenum target, const GLdouble *v)
 {
    MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord2iARB(GLenum target, GLint s, GLint t)
 {
    MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord2ivARB(GLenum target, const GLint *v)
 {
    MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord2sARB(GLenum target, GLshort s, GLshort t)
 {
    MULTI_TEXCOORD2( target, (GLfloat) s, (GLfloat) t );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord2svARB(GLenum target, const GLshort *v)
 {
    MULTI_TEXCOORD2( target, (GLfloat) v[0], (GLfloat) v[1] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r)
 {
    MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord3dvARB(GLenum target, const GLdouble *v)
 {
    MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r)
 {
    MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord3ivARB(GLenum target, const GLint *v)
 {
    MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r)
 {
    MULTI_TEXCOORD3( target, (GLfloat) s, (GLfloat) t, (GLfloat) r );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord3svARB(GLenum target, const GLshort *v)
 {
    MULTI_TEXCOORD3( target, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q)
 {
    MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t, 
 		    (GLfloat) r, (GLfloat) q );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord4dvARB(GLenum target, const GLdouble *v)
 {
    MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1], 
 		    (GLfloat) v[2], (GLfloat) v[3] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q)
 {
    MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t,
 		    (GLfloat) r, (GLfloat) q );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord4ivARB(GLenum target, const GLint *v)
 {
    MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1],
 		    (GLfloat) v[2], (GLfloat) v[3] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q)
 {
    MULTI_TEXCOORD4( target, (GLfloat) s, (GLfloat) t,
 		    (GLfloat) r, (GLfloat) q );
 }
 
-static void
+static void GLAPIENTRY
 loopback_MultiTexCoord4svARB(GLenum target, const GLshort *v)
 {
    MULTI_TEXCOORD4( target, (GLfloat) v[0], (GLfloat) v[1],
 		    (GLfloat) v[2], (GLfloat) v[3] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_EvalCoord2dv( const GLdouble *u )
 {
    EVALCOORD2( (GLfloat) u[0], (GLfloat) u[1] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_EvalCoord2fv( const GLfloat *u )
 {
    EVALCOORD2( u[0], u[1] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_EvalCoord2d( GLdouble u, GLdouble v )
 {
    EVALCOORD2( (GLfloat) u, (GLfloat) v );
 }
 
-static void
+static void GLAPIENTRY
 loopback_EvalCoord1dv( const GLdouble *u )
 {
    EVALCOORD1( (GLfloat) *u );
 }
 
-static void
+static void GLAPIENTRY
 loopback_EvalCoord1fv( const GLfloat *u )
 {
    EVALCOORD1( (GLfloat) *u );
 }
 
-static void
+static void GLAPIENTRY
 loopback_EvalCoord1d( GLdouble u )
 {
    EVALCOORD1( (GLfloat) u );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Materialf( GLenum face, GLenum pname, GLfloat param )
 {
    GLfloat fparam[4];
@@ -1093,14 +1093,14 @@
    MATERIALFV( face, pname, fparam );
 }
 
-static void
+static void GLAPIENTRY
 loopback_Materiali(GLenum face, GLenum pname, GLint param )
 {
    GLfloat p = (GLfloat) param;
    MATERIALFV(face, pname, &p);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Materialiv(GLenum face, GLenum pname, const GLint *params )
 {
    GLfloat fparam[4];
@@ -1130,49 +1130,49 @@
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_Rectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
 {
    RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Rectdv(const GLdouble *v1, const GLdouble *v2)
 {
    RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Rectfv(const GLfloat *v1, const GLfloat *v2)
 {
    RECTF(v1[0], v1[1], v2[0], v2[1]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Recti(GLint x1, GLint y1, GLint x2, GLint y2)
 {
    RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Rectiv(const GLint *v1, const GLint *v2)
 {
    RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Rects(GLshort x1, GLshort y1, GLshort x2, GLshort y2)
 {
    RECTF((GLfloat) x1, (GLfloat) y1, (GLfloat) x2, (GLfloat) y2);
 }
 
-static void
+static void GLAPIENTRY
 loopback_Rectsv(const GLshort *v1, const GLshort *v2)
 {
    RECTF((GLfloat) v1[0], (GLfloat) v1[1], (GLfloat) v2[0], (GLfloat) v2[1]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3bEXT( GLbyte red, GLbyte green, GLbyte blue )
 {
    SECONDARYCOLORUB( BYTE_TO_UBYTE(red),
@@ -1180,7 +1180,7 @@
 		     BYTE_TO_UBYTE(blue) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3dEXT( GLdouble red, GLdouble green, GLdouble blue )
 {
    GLubyte col[3];
@@ -1193,7 +1193,7 @@
    SECONDARYCOLORUB( col[0], col[1], col[2] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3iEXT( GLint red, GLint green, GLint blue )
 {
    SECONDARYCOLORUB( INT_TO_UBYTE(red),
@@ -1201,7 +1201,7 @@
 		     INT_TO_UBYTE(blue));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3sEXT( GLshort red, GLshort green, GLshort blue )
 {
    SECONDARYCOLORUB(SHORT_TO_UBYTE(red),
@@ -1209,7 +1209,7 @@
 		    SHORT_TO_UBYTE(blue));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3uiEXT( GLuint red, GLuint green, GLuint blue )
 {
    SECONDARYCOLORUB(UINT_TO_UBYTE(red),
@@ -1217,7 +1217,7 @@
 		    UINT_TO_UBYTE(blue));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3usEXT( GLushort red, GLushort green, GLushort blue )
 {
    SECONDARYCOLORUB(USHORT_TO_UBYTE(red),
@@ -1225,7 +1225,7 @@
 		    USHORT_TO_UBYTE(blue));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3bvEXT( const GLbyte *v )
 {
    const GLfloat a = BYTE_TO_FLOAT(v[0]);
@@ -1234,7 +1234,7 @@
    SECONDARYCOLORF(a,b,c);
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3dvEXT( const GLdouble *v )
 {
    GLubyte col[3];
@@ -1247,7 +1247,7 @@
    SECONDARYCOLORUB( col[0], col[1], col[2] );
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3ivEXT( const GLint *v )
 {
    SECONDARYCOLORUB(INT_TO_UBYTE(v[0]),
@@ -1255,7 +1255,7 @@
 		    INT_TO_UBYTE(v[2]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3svEXT( const GLshort *v )
 {
    SECONDARYCOLORUB(SHORT_TO_UBYTE(v[0]),
@@ -1263,7 +1263,7 @@
 		    SHORT_TO_UBYTE(v[2]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3uivEXT( const GLuint *v )
 {
    SECONDARYCOLORUB(UINT_TO_UBYTE(v[0]),
@@ -1271,7 +1271,7 @@
 		    UINT_TO_UBYTE(v[2]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3usvEXT( const GLushort *v )
 {
    SECONDARYCOLORUB(USHORT_TO_UBYTE(v[0]),
@@ -1280,7 +1280,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3bEXT_f( GLbyte red, GLbyte green, GLbyte blue )
 {
    SECONDARYCOLORF( BYTE_TO_FLOAT(red),
@@ -1288,13 +1288,13 @@
 		    BYTE_TO_FLOAT(blue) );
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3dEXT_f( GLdouble red, GLdouble green, GLdouble blue )
 {
    SECONDARYCOLORF( (GLfloat) red, (GLfloat) green, (GLfloat) blue );
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3iEXT_f( GLint red, GLint green, GLint blue )
 {
    SECONDARYCOLORF( INT_TO_FLOAT(red),
@@ -1302,7 +1302,7 @@
 		    INT_TO_FLOAT(blue));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3sEXT_f( GLshort red, GLshort green, GLshort blue )
 {
    SECONDARYCOLORF(SHORT_TO_FLOAT(red),
@@ -1310,7 +1310,7 @@
                    SHORT_TO_FLOAT(blue));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3uiEXT_f( GLuint red, GLuint green, GLuint blue )
 {
    SECONDARYCOLORF(UINT_TO_FLOAT(red),
@@ -1318,7 +1318,7 @@
                    UINT_TO_FLOAT(blue));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3usEXT_f( GLushort red, GLushort green, GLushort blue )
 {
    SECONDARYCOLORF(USHORT_TO_FLOAT(red),
@@ -1326,7 +1326,7 @@
                    USHORT_TO_FLOAT(blue));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3bvEXT_f( const GLbyte *v )
 {
    SECONDARYCOLORF(BYTE_TO_FLOAT(v[0]),
@@ -1334,12 +1334,12 @@
                    BYTE_TO_FLOAT(v[2]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3dvEXT_f( const GLdouble *v )
 {
    SECONDARYCOLORF( (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2] );
 }
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3ivEXT_f( const GLint *v )
 {
    SECONDARYCOLORF(INT_TO_FLOAT(v[0]),
@@ -1347,7 +1347,7 @@
                    INT_TO_FLOAT(v[2]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3svEXT_f( const GLshort *v )
 {
    SECONDARYCOLORF(SHORT_TO_FLOAT(v[0]),
@@ -1355,7 +1355,7 @@
                    SHORT_TO_FLOAT(v[2]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3uivEXT_f( const GLuint *v )
 {
    SECONDARYCOLORF(UINT_TO_FLOAT(v[0]),
@@ -1363,7 +1363,7 @@
                    UINT_TO_FLOAT(v[2]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_SecondaryColor3usvEXT_f( const GLushort *v )
 {
    SECONDARYCOLORF(USHORT_TO_FLOAT(v[0]),
@@ -1376,153 +1376,153 @@
  * GL_NV_vertex_program
  */
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib1sNV(GLuint index, GLshort x)
 {
    ATTRIB(index, (GLfloat) x, 0.0F, 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib1fNV(GLuint index, GLfloat x)
 {
    ATTRIB(index, x, 0.0F, 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib1dNV(GLuint index, GLdouble x)
 {
    ATTRIB(index, (GLfloat) x, 0.0F, 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib2sNV(GLuint index, GLshort x, GLshort y)
 {
    ATTRIB(index, (GLfloat) x, y, 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib2fNV(GLuint index, GLfloat x, GLfloat y)
 {
    ATTRIB(index, (GLfloat) x, y, 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib2dNV(GLuint index, GLdouble x, GLdouble y)
 {
    ATTRIB(index, (GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib3sNV(GLuint index, GLshort x, GLshort y, GLshort z)
 {
    ATTRIB(index, (GLfloat) x, y, z, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib3fNV(GLuint index, GLfloat x, GLfloat y, GLfloat z)
 {
    ATTRIB(index, x, y, z, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib3dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z)
 {
    ATTRIB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4sNV(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w)
 {
    ATTRIB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4dNV(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
    ATTRIB(index, (GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4ubNV(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w)
 {
    ATTRIB(index, UBYTE_TO_FLOAT(x), UBYTE_TO_FLOAT(y),
 	UBYTE_TO_FLOAT(z), UBYTE_TO_FLOAT(w));
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib1svNV(GLuint index, const GLshort *v)
 {
    ATTRIB(index, (GLfloat) v[0], 0.0F, 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib1fvNV(GLuint index, const GLfloat *v)
 {
    ATTRIB(index, v[0], 0.0F, 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib1dvNV(GLuint index, const GLdouble *v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib2svNV(GLuint index, const GLshort *v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib2fvNV(GLuint index, const GLfloat *v)
 {
    ATTRIB(index, v[0], v[1], 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib2dvNV(GLuint index, const GLdouble *v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib3svNV(GLuint index, const GLshort *v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib3fvNV(GLuint index, const GLfloat *v)
 {
    ATTRIB(index, v[0], v[1], v[2], 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib3dvNV(GLuint index, const GLdouble *v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4svNV(GLuint index, const GLshort *v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 
 	  (GLfloat)v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4fvNV(GLuint index, const GLfloat *v)
 {
    ATTRIB(index, v[0], v[1], v[2], v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4dvNV(GLuint index, const GLdouble *v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4ubvNV(GLuint index, const GLubyte *v)
 {
    ATTRIB(index, UBYTE_TO_FLOAT(v[0]), UBYTE_TO_FLOAT(v[1]),
@@ -1530,7 +1530,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs1svNV(GLuint index, GLsizei n, const GLshort *v)
 {
    GLint i;
@@ -1538,7 +1538,7 @@
       loopback_VertexAttrib1svNV(index + i, v + i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs1fvNV(GLuint index, GLsizei n, const GLfloat *v)
 {
    GLint i;
@@ -1546,7 +1546,7 @@
       loopback_VertexAttrib1fvNV(index + i, v + i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs1dvNV(GLuint index, GLsizei n, const GLdouble *v)
 {
    GLint i;
@@ -1554,7 +1554,7 @@
       loopback_VertexAttrib1dvNV(index + i, v + i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs2svNV(GLuint index, GLsizei n, const GLshort *v)
 {
    GLint i;
@@ -1562,7 +1562,7 @@
       loopback_VertexAttrib2svNV(index + i, v + 2 * i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs2fvNV(GLuint index, GLsizei n, const GLfloat *v)
 {
    GLint i;
@@ -1570,7 +1570,7 @@
       loopback_VertexAttrib2fvNV(index + i, v + 2 * i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs2dvNV(GLuint index, GLsizei n, const GLdouble *v)
 {
    GLint i;
@@ -1578,7 +1578,7 @@
       loopback_VertexAttrib2dvNV(index + i, v + 2 * i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs3svNV(GLuint index, GLsizei n, const GLshort *v)
 {
    GLint i;
@@ -1586,7 +1586,7 @@
       loopback_VertexAttrib3svNV(index + i, v + 3 * i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs3fvNV(GLuint index, GLsizei n, const GLfloat *v)
 {
    GLint i;
@@ -1594,7 +1594,7 @@
       loopback_VertexAttrib3fvNV(index + i, v + 3 * i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs3dvNV(GLuint index, GLsizei n, const GLdouble *v)
 {
    GLint i;
@@ -1602,7 +1602,7 @@
       loopback_VertexAttrib3dvNV(index + i, v + 3 * i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs4svNV(GLuint index, GLsizei n, const GLshort *v)
 {
    GLint i;
@@ -1610,7 +1610,7 @@
       loopback_VertexAttrib4svNV(index + i, v + 4 * i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs4fvNV(GLuint index, GLsizei n, const GLfloat *v)
 {
    GLint i;
@@ -1618,7 +1618,7 @@
       loopback_VertexAttrib4fvNV(index + i, v + 4 * i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs4dvNV(GLuint index, GLsizei n, const GLdouble *v)
 {
    GLint i;
@@ -1626,7 +1626,7 @@
       loopback_VertexAttrib4dvNV(index + i, v + 4 * i);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttribs4ubvNV(GLuint index, GLsizei n, const GLubyte *v)
 {
    GLint i;
@@ -1639,65 +1639,65 @@
  * GL_ARB_vertex_program
  */
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4bvARB(GLuint index, const GLbyte * v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4ivARB(GLuint index, const GLint * v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4ubvARB(GLuint index, const GLubyte * v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4usvARB(GLuint index, const GLushort * v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4uivARB(GLuint index, const GLuint * v)
 {
    ATTRIB(index, (GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4NbvARB(GLuint index, const GLbyte * v)
 {
    ATTRIB(index, BYTE_TO_FLOAT(v[0]), BYTE_TO_FLOAT(v[1]),
           BYTE_TO_FLOAT(v[2]), BYTE_TO_FLOAT(v[3]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4NsvARB(GLuint index, const GLshort * v)
 {
    ATTRIB(index, SHORT_TO_FLOAT(v[0]), SHORT_TO_FLOAT(v[1]),
           SHORT_TO_FLOAT(v[2]), SHORT_TO_FLOAT(v[3]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4NivARB(GLuint index, const GLint * v)
 {
    ATTRIB(index, INT_TO_FLOAT(v[0]), INT_TO_FLOAT(v[1]),
           INT_TO_FLOAT(v[2]), INT_TO_FLOAT(v[3]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4NusvARB(GLuint index, const GLushort * v)
 {
    ATTRIB(index, USHORT_TO_FLOAT(v[0]), USHORT_TO_FLOAT(v[1]),
           USHORT_TO_FLOAT(v[2]), USHORT_TO_FLOAT(v[3]));
 }
 
-static void
+static void GLAPIENTRY
 loopback_VertexAttrib4NuivARB(GLuint index, const GLuint * v)
 {
    ATTRIB(index, UINT_TO_FLOAT(v[0]), UINT_TO_FLOAT(v[1]),
diff --git a/src/mesa/main/arbprogram.c b/src/mesa/main/arbprogram.c
index 8ebae9d..5102758 100644
--- a/src/mesa/main/arbprogram.c
+++ b/src/mesa/main/arbprogram.c
@@ -44,7 +44,7 @@
 #include "nvvertprog.h"
 
 
-void
+void GLAPIENTRY
 _mesa_EnableVertexAttribArrayARB(GLuint index)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -62,7 +62,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_DisableVertexAttribArrayARB(GLuint index)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -80,7 +80,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble *params)
 {
    GLfloat fparams[4];
@@ -99,7 +99,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -143,7 +143,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetVertexAttribivARB(GLuint index, GLenum pname, GLint *params)
 {
    GLfloat fparams[4];
@@ -162,7 +162,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -182,7 +182,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ProgramStringARB(GLenum target, GLenum format, GLsizei len,
                        const GLvoid *string)
 {
@@ -215,7 +215,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ProgramEnvParameter4dARB(GLenum target, GLuint index,
                                GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
@@ -224,7 +224,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ProgramEnvParameter4dvARB(GLenum target, GLuint index,
                                 const GLdouble *params)
 {
@@ -234,7 +234,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ProgramEnvParameter4fARB(GLenum target, GLuint index,
                                GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
@@ -264,7 +264,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ProgramEnvParameter4fvARB(GLenum target, GLuint index,
                                    const GLfloat *params)
 {
@@ -273,7 +273,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetProgramEnvParameterdvARB(GLenum target, GLuint index,
                                   GLdouble *params)
 {
@@ -290,7 +290,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetProgramEnvParameterfvARB(GLenum target, GLuint index, 
                                   GLfloat *params)
 {
@@ -325,7 +325,7 @@
 /**
  * Note, this function is also used by the GL_NV_fragment_program extension.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramLocalParameter4fARB(GLenum target, GLuint index,
                                  GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
@@ -367,7 +367,7 @@
 /**
  * Note, this function is also used by the GL_NV_fragment_program extension.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramLocalParameter4fvARB(GLenum target, GLuint index,
                                   const GLfloat *params)
 {
@@ -379,7 +379,7 @@
 /**
  * Note, this function is also used by the GL_NV_fragment_program extension.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramLocalParameter4dARB(GLenum target, GLuint index,
                                  GLdouble x, GLdouble y,
                                  GLdouble z, GLdouble w)
@@ -392,7 +392,7 @@
 /**
  * Note, this function is also used by the GL_NV_fragment_program extension.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramLocalParameter4dvARB(GLenum target, GLuint index,
                                   const GLdouble *params)
 {
@@ -405,7 +405,7 @@
 /**
  * Note, this function is also used by the GL_NV_fragment_program extension.
  */
-void
+void GLAPIENTRY
 _mesa_GetProgramLocalParameterfvARB(GLenum target, GLuint index,
                                     GLfloat *params)
 {
@@ -450,7 +450,7 @@
 /**
  * Note, this function is also used by the GL_NV_fragment_program extension.
  */
-void
+void GLAPIENTRY
 _mesa_GetProgramLocalParameterdvARB(GLenum target, GLuint index,
                                     GLdouble *params)
 {
@@ -463,7 +463,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params)
 {
    struct program *prog;
@@ -670,7 +670,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetProgramStringARB(GLenum target, GLenum pname, GLvoid *string)
 {
    struct program *prog;
diff --git a/src/mesa/main/arbprogram.h b/src/mesa/main/arbprogram.h
index 8bfb180..e1b99ab 100644
--- a/src/mesa/main/arbprogram.h
+++ b/src/mesa/main/arbprogram.h
@@ -27,101 +27,101 @@
 #define ARBPROGRAM_H
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_EnableVertexAttribArrayARB(GLuint index);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_DisableVertexAttribArrayARB(GLuint index);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetVertexAttribdvARB(GLuint index, GLenum pname, GLdouble *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetVertexAttribfvARB(GLuint index, GLenum pname, GLfloat *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetVertexAttribivARB(GLuint index, GLenum pname, GLint *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetVertexAttribPointervARB(GLuint index, GLenum pname, GLvoid **pointer);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramStringARB(GLenum target, GLenum format, GLsizei len,
                        const GLvoid *string);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramEnvParameter4dARB(GLenum target, GLuint index,
                                GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramEnvParameter4dvARB(GLenum target, GLuint index,
                                 const GLdouble *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramEnvParameter4fARB(GLenum target, GLuint index,
                                GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramEnvParameter4fvARB(GLenum target, GLuint index,
                                 const GLfloat *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramLocalParameter4dARB(GLenum target, GLuint index,
                                  GLdouble x, GLdouble y,
                                  GLdouble z, GLdouble w);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramLocalParameter4dvARB(GLenum target, GLuint index,
                                   const GLdouble *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramLocalParameter4fARB(GLenum target, GLuint index,
                                  GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramLocalParameter4fvARB(GLenum target, GLuint index,
                                   const GLfloat *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramEnvParameterdvARB(GLenum target, GLuint index,
                                   GLdouble *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramEnvParameterfvARB(GLenum target, GLuint index, 
                                   GLfloat *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramLocalParameterdvARB(GLenum target, GLuint index,
                                     GLdouble *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramLocalParameterfvARB(GLenum target, GLuint index, 
                                     GLfloat *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramivARB(GLenum target, GLenum pname, GLint *params);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramStringARB(GLenum target, GLenum pname, GLvoid *string);
 
 
diff --git a/src/mesa/main/attrib.c b/src/mesa/main/attrib.c
index 198bb34..62d968a 100644
--- a/src/mesa/main/attrib.c
+++ b/src/mesa/main/attrib.c
@@ -65,7 +65,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_PushAttrib(GLbitfield mask)
 {
    struct gl_attrib_node *newnode;
@@ -783,7 +783,7 @@
  * We could at least check if the value to restore equals the current value
  * and then skip the Mesa call.
  */
-void
+void GLAPIENTRY
 _mesa_PopAttrib(void)
 {
    struct gl_attrib_node *attr, *next;
@@ -1138,7 +1138,7 @@
 #define GL_CLIENT_UNPACK_BIT (1<<21)
 
 
-void
+void GLAPIENTRY
 _mesa_PushClientAttrib(GLbitfield mask)
 {
    struct gl_attrib_node *newnode;
@@ -1190,7 +1190,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_PopClientAttrib(void)
 {
    struct gl_attrib_node *attr, *next;
diff --git a/src/mesa/main/attrib.h b/src/mesa/main/attrib.h
index 8267624..09d7519 100644
--- a/src/mesa/main/attrib.h
+++ b/src/mesa/main/attrib.h
@@ -43,16 +43,16 @@
 
 #if _HAVE_FULL_GL
 
-extern void
+extern void GLAPIENTRY
 _mesa_PushAttrib( GLbitfield mask );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PopAttrib( void );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PushClientAttrib( GLbitfield mask );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PopClientAttrib( void );
 
 extern void 
diff --git a/src/mesa/main/blend.c b/src/mesa/main/blend.c
index dad5184..e3cdbff 100644
--- a/src/mesa/main/blend.c
+++ b/src/mesa/main/blend.c
@@ -50,7 +50,7 @@
  * flushes the vertices and notifies the driver via
  * dd_function_table::BlendFunc callback.
  */
-void
+void GLAPIENTRY
 _mesa_BlendFunc( GLenum sfactor, GLenum dfactor )
 {
 
@@ -144,7 +144,7 @@
  * On a change, flush the vertices and notify the driver via
  * dd_function_table::BlendFuncSeparate.
  */
-void
+void GLAPIENTRY
 _mesa_BlendFuncSeparateEXT( GLenum sfactorRGB, GLenum dfactorRGB,
                             GLenum sfactorA, GLenum dfactorA )
 {
@@ -285,7 +285,7 @@
 
 
 /* This is really an extension function! */
-void
+void GLAPIENTRY
 _mesa_BlendEquation( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -358,7 +358,7 @@
  * change, flushes the vertices and notifies the driver via
  * dd_function_table::BlendColor callback.
  */
-void
+void GLAPIENTRY
 _mesa_BlendColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
 {
    GLfloat tmp[4];
@@ -391,7 +391,7 @@
  * On a change, flushes the vertices and notifies the driver via
  * dd_function_table::AlphaFunc callback.
  */
-void
+void GLAPIENTRY
 _mesa_AlphaFunc( GLenum func, GLclampf ref )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -436,7 +436,7 @@
  * On a change, flushes the vertices and notifies the driver via the
  * dd_function_table::LogicOpcode callback.
  */
-void
+void GLAPIENTRY
 _mesa_LogicOp( GLenum opcode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -476,7 +476,7 @@
 }
 
 #if _HAVE_FULL_GL
-void
+void GLAPIENTRY
 _mesa_IndexMask( GLuint mask )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -508,7 +508,7 @@
  * change, flushes the vertices and notifies the driver via the
  * dd_function_table::ColorMask callback.
  */
-void
+void GLAPIENTRY
 _mesa_ColorMask( GLboolean red, GLboolean green,
                  GLboolean blue, GLboolean alpha )
 {
diff --git a/src/mesa/main/blend.h b/src/mesa/main/blend.h
index a967937..ae96bd4 100644
--- a/src/mesa/main/blend.h
+++ b/src/mesa/main/blend.h
@@ -36,39 +36,39 @@
 #include "mtypes.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_BlendFunc( GLenum sfactor, GLenum dfactor );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_BlendFuncSeparateEXT( GLenum sfactorRGB, GLenum dfactorRGB,
                             GLenum sfactorA, GLenum dfactorA );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_BlendEquation( GLenum mode );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_AlphaFunc( GLenum func, GLclampf ref );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_LogicOp( GLenum opcode );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_IndexMask( GLuint mask );
 
-extern void
+extern void GLAPIENTRY
 _mesa_ColorMask( GLboolean red, GLboolean green,
                  GLboolean blue, GLboolean alpha );
 
-extern void 
+extern void  
 _mesa_init_color( GLcontext * ctx );
 
 #endif
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c
index 9304a85..0f70829 100644
--- a/src/mesa/main/bufferobj.c
+++ b/src/mesa/main/bufferobj.c
@@ -367,7 +367,7 @@
 /* API Functions                                                      */
 /**********************************************************************/
 
-void
+void GLAPIENTRY
 _mesa_BindBufferARB(GLenum target, GLuint buffer)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -436,7 +436,7 @@
  * \param n      Number of buffer objects to delete.
  * \param buffer Array of \c n buffer object IDs.
  */
-void
+void GLAPIENTRY
 _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -511,7 +511,7 @@
  * \param n       Number of IDs to generate.
  * \param buffer  Array of \c n locations to store the IDs.
  */
-void
+void GLAPIENTRY
 _mesa_GenBuffersARB(GLsizei n, GLuint *buffer)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -560,7 +560,7 @@
  * \return  \c GL_TRUE if \c id is the name of a buffer object, 
  *          \c GL_FALSE otherwise.
  */
-GLboolean
+GLboolean GLAPIENTRY
 _mesa_IsBufferARB(GLuint id)
 {
    struct gl_buffer_object * bufObj;
@@ -578,7 +578,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_BufferDataARB(GLenum target, GLsizeiptrARB size,
                     const GLvoid * data, GLenum usage)
 {
@@ -626,7 +626,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_BufferSubDataARB(GLenum target, GLintptrARB offset,
                        GLsizeiptrARB size, const GLvoid * data)
 {
@@ -651,7 +651,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetBufferSubDataARB(GLenum target, GLintptrARB offset,
                           GLsizeiptrARB size, void * data)
 {
@@ -676,7 +676,7 @@
 }
 
 
-void *
+void * GLAPIENTRY
 _mesa_MapBufferARB(GLenum target, GLenum access)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -717,7 +717,7 @@
 }
 
 
-GLboolean
+GLboolean GLAPIENTRY
 _mesa_UnmapBufferARB(GLenum target)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -747,7 +747,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetBufferParameterivARB(GLenum target, GLenum pname, GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -780,7 +780,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params)
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/bufferobj.h b/src/mesa/main/bufferobj.h
index 70a411b..8490e36 100644
--- a/src/mesa/main/bufferobj.h
+++ b/src/mesa/main/bufferobj.h
@@ -84,37 +84,37 @@
  * API functions
  */
 
-extern void
+extern void GLAPIENTRY
 _mesa_BindBufferARB(GLenum target, GLuint buffer);
 
-extern void
+extern void GLAPIENTRY
 _mesa_DeleteBuffersARB(GLsizei n, const GLuint * buffer);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GenBuffersARB(GLsizei n, GLuint * buffer);
 
-extern GLboolean
+extern GLboolean GLAPIENTRY
 _mesa_IsBufferARB(GLuint buffer);
 
-extern void
+extern void GLAPIENTRY
 _mesa_BufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage);
 
-extern void
+extern void GLAPIENTRY
 _mesa_BufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetBufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data);
 
-extern void *
+extern void * GLAPIENTRY
 _mesa_MapBufferARB(GLenum target, GLenum access);
 
-extern GLboolean
+extern GLboolean GLAPIENTRY
 _mesa_UnmapBufferARB(GLenum target);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetBufferParameterivARB(GLenum target, GLenum pname, GLint *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params);
 
 #endif
diff --git a/src/mesa/main/buffers.c b/src/mesa/main/buffers.c
index 6c58ed4..519bfb3 100644
--- a/src/mesa/main/buffers.c
+++ b/src/mesa/main/buffers.c
@@ -41,7 +41,7 @@
 
 
 #if _HAVE_FULL_GL
-void
+void GLAPIENTRY
 _mesa_ClearIndex( GLfloat c )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -75,7 +75,7 @@
  * change, flushes the vertices and notifies the driver via the
  * dd_function_table::ClearColor callback.
  */
-void
+void GLAPIENTRY
 _mesa_ClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha )
 {
    GLfloat tmp[4];
@@ -110,7 +110,7 @@
  * etc. If the rasterization mode is set to GL_RENDER then requests the driver
  * to clear the buffers, via the dd_function_table::Clear callback.
  */ 
-void
+void GLAPIENTRY
 _mesa_Clear( GLbitfield mask )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -176,7 +176,7 @@
  * __GLcontextRec::NewState and notifies the driver via the
  * dd_function_table::DrawBuffer callback.
  */
-void
+void GLAPIENTRY
 _mesa_DrawBuffer( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -327,7 +327,7 @@
  * new pixel state in __GLcontextRec::NewState and notifies the driver via
  * dd_function_table::ReadBuffer.
  */
-void
+void GLAPIENTRY
 _mesa_ReadBuffer( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -436,7 +436,7 @@
  * \note This function may be called from within Mesa or called by the
  * user directly (see the GL_MESA_resize_buffers extension).
  */
-void
+void GLAPIENTRY
 _mesa_ResizeBuffersMESA( void )
 {
    GLcontext *ctx = _mesa_get_current_context();
@@ -488,7 +488,7 @@
 /*
  * XXX move somewhere else someday?
  */
-void
+void GLAPIENTRY
 _mesa_SampleCoverageARB(GLclampf value, GLboolean invert)
 {
    GLcontext *ctx = _mesa_get_current_context();
@@ -520,7 +520,7 @@
  * change flushes the vertices and notifies the driver via
  * the dd_function_table::Scissor callback.
  */
-void
+void GLAPIENTRY
 _mesa_Scissor( GLint x, GLint y, GLsizei width, GLsizei height )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/buffers.h b/src/mesa/main/buffers.h
index 7c992a9..83e1b48 100644
--- a/src/mesa/main/buffers.h
+++ b/src/mesa/main/buffers.h
@@ -36,29 +36,29 @@
 #include "mtypes.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ClearIndex( GLfloat c );
 
-extern void
+extern void GLAPIENTRY
 _mesa_ClearColor( GLclampf red, GLclampf green,
                   GLclampf blue, GLclampf alpha );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Clear( GLbitfield mask );
 
-extern void
+extern void GLAPIENTRY
 _mesa_DrawBuffer( GLenum mode );
 
-extern void
+extern void GLAPIENTRY
 _mesa_ReadBuffer( GLenum mode );
 
-extern void
+extern void GLAPIENTRY
 _mesa_ResizeBuffersMESA( void );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Scissor( GLint x, GLint y, GLsizei width, GLsizei height );
 
-extern void
+extern void GLAPIENTRY
 _mesa_SampleCoverageARB(GLclampf value, GLboolean invert);
 
 extern void 
diff --git a/src/mesa/main/clip.c b/src/mesa/main/clip.c
index a061980..31e6af9 100644
--- a/src/mesa/main/clip.c
+++ b/src/mesa/main/clip.c
@@ -41,7 +41,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_ClipPlane( GLenum plane, const GLdouble *eq )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -98,7 +98,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetClipPlane( GLenum plane, GLdouble *equation )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/clip.h b/src/mesa/main/clip.h
index 154e3ce..9442e86 100644
--- a/src/mesa/main/clip.h
+++ b/src/mesa/main/clip.h
@@ -33,8 +33,10 @@
 
 #include "mtypes.h"
 
-extern void _mesa_ClipPlane( GLenum plane, const GLdouble *equation );
+extern void GLAPIENTRY 
+_mesa_ClipPlane( GLenum plane, const GLdouble *equation );
 
-extern void _mesa_GetClipPlane( GLenum plane, GLdouble *equation );
+extern void GLAPIENTRY 
+_mesa_GetClipPlane( GLenum plane, GLdouble *equation );
 
 #endif
diff --git a/src/mesa/main/colortab.c b/src/mesa/main/colortab.c
index cc26855..a44f9a0 100644
--- a/src/mesa/main/colortab.c
+++ b/src/mesa/main/colortab.c
@@ -155,7 +155,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_ColorTable( GLenum target, GLenum internalFormat,
                   GLsizei width, GLenum format, GLenum type,
                   const GLvoid *data )
@@ -439,7 +439,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_ColorSubTable( GLenum target, GLsizei start,
                      GLsizei count, GLenum format, GLenum type,
                      const GLvoid *data )
@@ -637,7 +637,7 @@
 
 
 /* XXX not tested */
-void
+void GLAPIENTRY
 _mesa_CopyColorTable(GLenum target, GLenum internalformat,
                      GLint x, GLint y, GLsizei width)
 {
@@ -651,7 +651,7 @@
 
 
 /* XXX not tested */
-void
+void GLAPIENTRY
 _mesa_CopyColorSubTable(GLenum target, GLsizei start,
                         GLint x, GLint y, GLsizei width)
 {
@@ -663,7 +663,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetColorTable( GLenum target, GLenum format,
                      GLenum type, GLvoid *data )
 {
@@ -864,7 +864,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_ColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -957,7 +957,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_ColorTableParameteriv(GLenum target, GLenum pname, const GLint *params)
 {
    GLfloat fparams[4];
@@ -980,7 +980,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1154,7 +1154,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/colortab.h b/src/mesa/main/colortab.h
index 9ccf276..4bd1621 100644
--- a/src/mesa/main/colortab.h
+++ b/src/mesa/main/colortab.h
@@ -41,40 +41,40 @@
 
 #if _HAVE_FULL_GL
 
-extern void
+extern void GLAPIENTRY
 _mesa_ColorTable( GLenum target, GLenum internalformat,
                   GLsizei width, GLenum format, GLenum type,
                   const GLvoid *table );
 
-extern void
+extern void GLAPIENTRY
 _mesa_ColorSubTable( GLenum target, GLsizei start,
                      GLsizei count, GLenum format, GLenum type,
                      const GLvoid *table );
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyColorSubTable(GLenum target, GLsizei start,
                         GLint x, GLint y, GLsizei width);
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyColorTable(GLenum target, GLenum internalformat,
                      GLint x, GLint y, GLsizei width);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetColorTable( GLenum target, GLenum format,
                      GLenum type, GLvoid *table );
 
-extern void
+extern void GLAPIENTRY
 _mesa_ColorTableParameterfv(GLenum target, GLenum pname,
                             const GLfloat *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ColorTableParameteriv(GLenum target, GLenum pname,
                             const GLint *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetColorTableParameteriv( GLenum target, GLenum pname, GLint *params );
 
 
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index ce35142..51abf86 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1908,7 +1908,7 @@
  * Calls the #ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH macro and the
  * dd_function_table::Finish driver callback, if not NULL.
  */
-void
+void GLAPIENTRY
 _mesa_Finish( void )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1924,7 +1924,7 @@
  * Calls the #ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH macro and the
  * dd_function_table::Flush driver callback, if not NULL.
  */
-void
+void GLAPIENTRY
 _mesa_Flush( void )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h
index 78b2179..838b7bb 100644
--- a/src/mesa/main/context.h
+++ b/src/mesa/main/context.h
@@ -249,10 +249,10 @@
 _mesa_record_error( GLcontext *ctx, GLenum error );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_Finish( void );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Flush( void );
 
 /*@}*/
diff --git a/src/mesa/main/convolve.c b/src/mesa/main/convolve.c
index 341d60e..b7d2eeb 100644
--- a/src/mesa/main/convolve.c
+++ b/src/mesa/main/convolve.c
@@ -101,7 +101,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *image)
 {
    GLint baseFormat;
@@ -174,7 +174,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ConvolutionFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image)
 {
    GLint baseFormat;
@@ -257,7 +257,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat param)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -300,7 +300,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -356,7 +356,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ConvolutionParameteri(GLenum target, GLenum pname, GLint param)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -399,7 +399,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -468,7 +468,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width)
 {
    GLint baseFormat;
@@ -496,7 +496,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height)
 {
    GLint baseFormat;
@@ -529,7 +529,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type, GLvoid *image)
 {
    const struct gl_convolution_attrib *filter;
@@ -579,7 +579,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -640,7 +640,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -710,7 +710,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span)
 {
    const GLint colStart = MAX_CONVOLUTION_WIDTH * 4;
@@ -768,7 +768,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_SeparableFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column)
 {
    const GLint colStart = MAX_CONVOLUTION_WIDTH * 4;
diff --git a/src/mesa/main/convolve.h b/src/mesa/main/convolve.h
index deac1e2..4505cda 100644
--- a/src/mesa/main/convolve.h
+++ b/src/mesa/main/convolve.h
@@ -32,51 +32,51 @@
 
 
 #if _HAVE_FULL_GL
-extern void
+extern void GLAPIENTRY
 _mesa_ConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width,
                           GLenum format, GLenum type, const GLvoid *image);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width,
                           GLsizei height, GLenum format, GLenum type,
                           const GLvoid *image);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ConvolutionParameterfv(GLenum target, GLenum pname,
                              const GLfloat *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ConvolutionParameteri(GLenum target, GLenum pname, GLint params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyConvolutionFilter1D(GLenum target, GLenum internalformat,
                               GLint x, GLint y, GLsizei width);
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalformat,
                               GLint x, GLint y, GLsizei width, GLsizei height);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type,
                            GLvoid *image);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type,
                          GLvoid *row, GLvoid *column, GLvoid *span);
 
-extern void
+extern void GLAPIENTRY
 _mesa_SeparableFilter2D(GLenum target, GLenum internalformat,
                         GLsizei width, GLsizei height,
                         GLenum format, GLenum type,
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index c6760d4..a4aa534 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -896,66 +896,66 @@
     * \name Vertex
     */
    /*@{*/
-   void (*ArrayElement)( GLint ); /* NOTE */
-   void (*Color3f)( GLfloat, GLfloat, GLfloat );
-   void (*Color3fv)( const GLfloat * );
-   void (*Color3ub)( GLubyte, GLubyte, GLubyte );
-   void (*Color3ubv)( const GLubyte * );
-   void (*Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
-   void (*Color4fv)( const GLfloat * );
-   void (*Color4ub)( GLubyte, GLubyte, GLubyte, GLubyte );
-   void (*Color4ubv)( const GLubyte * );
-   void (*EdgeFlag)( GLboolean );
-   void (*EdgeFlagv)( const GLboolean * );
-   void (*EvalCoord1f)( GLfloat );          /* NOTE */
-   void (*EvalCoord1fv)( const GLfloat * ); /* NOTE */
-   void (*EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */
-   void (*EvalCoord2fv)( const GLfloat * ); /* NOTE */
-   void (*EvalPoint1)( GLint );             /* NOTE */
-   void (*EvalPoint2)( GLint, GLint );      /* NOTE */
-   void (*FogCoordfEXT)( GLfloat );
-   void (*FogCoordfvEXT)( const GLfloat * );
-   void (*Indexi)( GLint );
-   void (*Indexiv)( const GLint * );
-   void (*Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */
-   void (*MultiTexCoord1fARB)( GLenum, GLfloat );
-   void (*MultiTexCoord1fvARB)( GLenum, const GLfloat * );
-   void (*MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
-   void (*MultiTexCoord2fvARB)( GLenum, const GLfloat * );
-   void (*MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
-   void (*MultiTexCoord3fvARB)( GLenum, const GLfloat * );
-   void (*MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
-   void (*MultiTexCoord4fvARB)( GLenum, const GLfloat * );
-   void (*Normal3f)( GLfloat, GLfloat, GLfloat );
-   void (*Normal3fv)( const GLfloat * );
-   void (*SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
-   void (*SecondaryColor3fvEXT)( const GLfloat * );
-   void (*SecondaryColor3ubEXT)( GLubyte, GLubyte, GLubyte );
-   void (*SecondaryColor3ubvEXT)( const GLubyte * );
-   void (*TexCoord1f)( GLfloat );
-   void (*TexCoord1fv)( const GLfloat * );
-   void (*TexCoord2f)( GLfloat, GLfloat );
-   void (*TexCoord2fv)( const GLfloat * );
-   void (*TexCoord3f)( GLfloat, GLfloat, GLfloat );
-   void (*TexCoord3fv)( const GLfloat * );
-   void (*TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
-   void (*TexCoord4fv)( const GLfloat * );
-   void (*Vertex2f)( GLfloat, GLfloat );
-   void (*Vertex2fv)( const GLfloat * );
-   void (*Vertex3f)( GLfloat, GLfloat, GLfloat );
-   void (*Vertex3fv)( const GLfloat * );
-   void (*Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
-   void (*Vertex4fv)( const GLfloat * );
-   void (*CallList)( GLuint );	/* NOTE */
-   void (*Begin)( GLenum );
-   void (*End)( void );
-   void (*VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
-   void (*VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
+   void (GLAPIENTRYP ArrayElement)( GLint ); /* NOTE */
+   void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP Color3fv)( const GLfloat * );
+   void (GLAPIENTRYP Color3ub)( GLubyte, GLubyte, GLubyte );
+   void (GLAPIENTRYP Color3ubv)( const GLubyte * );
+   void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP Color4fv)( const GLfloat * );
+   void (GLAPIENTRYP Color4ub)( GLubyte, GLubyte, GLubyte, GLubyte );
+   void (GLAPIENTRYP Color4ubv)( const GLubyte * );
+   void (GLAPIENTRYP EdgeFlag)( GLboolean );
+   void (GLAPIENTRYP EdgeFlagv)( const GLboolean * );
+   void (GLAPIENTRYP EvalCoord1f)( GLfloat );          /* NOTE */
+   void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); /* NOTE */
+   void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */
+   void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); /* NOTE */
+   void (GLAPIENTRYP EvalPoint1)( GLint );             /* NOTE */
+   void (GLAPIENTRYP EvalPoint2)( GLint, GLint );      /* NOTE */
+   void (GLAPIENTRYP FogCoordfEXT)( GLfloat );
+   void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * );
+   void (GLAPIENTRYP Indexi)( GLint );
+   void (GLAPIENTRYP Indexiv)( const GLint * );
+   void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */
+   void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat );
+   void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * );
+   void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat );
+   void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * );
+   void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * );
+   void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * );
+   void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP Normal3fv)( const GLfloat * );
+   void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * );
+   void (GLAPIENTRYP SecondaryColor3ubEXT)( GLubyte, GLubyte, GLubyte );
+   void (GLAPIENTRYP SecondaryColor3ubvEXT)( const GLubyte * );
+   void (GLAPIENTRYP TexCoord1f)( GLfloat );
+   void (GLAPIENTRYP TexCoord1fv)( const GLfloat * );
+   void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat );
+   void (GLAPIENTRYP TexCoord2fv)( const GLfloat * );
+   void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP TexCoord3fv)( const GLfloat * );
+   void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP TexCoord4fv)( const GLfloat * );
+   void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat );
+   void (GLAPIENTRYP Vertex2fv)( const GLfloat * );
+   void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP Vertex3fv)( const GLfloat * );
+   void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP Vertex4fv)( const GLfloat * );
+   void (GLAPIENTRYP CallList)( GLuint );	/* NOTE */
+   void (GLAPIENTRYP Begin)( GLenum );
+   void (GLAPIENTRYP End)( void );
+   void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
+   void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v );
    /*@}*/
 
    /*
     */
-   void (*Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
+   void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat );
 
    /**
     * \name Array
@@ -965,10 +965,10 @@
     * its current size natively.
     */
    /*@{*/
-   void (*DrawArrays)( GLenum mode, GLint start, GLsizei count );
-   void (*DrawElements)( GLenum mode, GLsizei count, GLenum type,
+   void (GLAPIENTRYP DrawArrays)( GLenum mode, GLint start, GLsizei count );
+   void (GLAPIENTRYP DrawElements)( GLenum mode, GLsizei count, GLenum type,
 			 const GLvoid *indices );
-   void (*DrawRangeElements)( GLenum mode, GLuint start,
+   void (GLAPIENTRYP DrawRangeElements)( GLenum mode, GLuint start,
 			      GLuint end, GLsizei count,
 			      GLenum type, const GLvoid *indices );
    /*@}*/
@@ -984,8 +984,8 @@
     * accelerated vertex formats, eventually...
     */
    /*@{*/
-   void (*EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
-   void (*EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
+   void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 );
+   void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
    /*@}*/
 
    /**
diff --git a/src/mesa/main/depth.c b/src/mesa/main/depth.c
index 8d61ff4..eb8c8b8 100644
--- a/src/mesa/main/depth.c
+++ b/src/mesa/main/depth.c
@@ -39,7 +39,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_ClearDepth( GLclampd depth )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -58,7 +58,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_DepthFunc( GLenum func )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -94,7 +94,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_DepthMask( GLboolean flag )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -120,7 +120,7 @@
 
 
 /* GL_EXT_depth_bounds_test */
-void
+void GLAPIENTRY
 _mesa_DepthBoundsEXT( GLclampd zmin, GLclampd zmax )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/depth.h b/src/mesa/main/depth.h
index ce5f28e..0532a2e 100644
--- a/src/mesa/main/depth.h
+++ b/src/mesa/main/depth.h
@@ -37,19 +37,19 @@
 
 #if _HAVE_FULL_GL
 
-extern void
+extern void GLAPIENTRY
 _mesa_ClearDepth( GLclampd depth );
 
-extern void
+extern void GLAPIENTRY
 _mesa_DepthFunc( GLenum func );
 
-extern void
+extern void GLAPIENTRY
 _mesa_DepthMask( GLboolean flag );
 
 extern void 
 _mesa_init_depth( GLcontext * ctx );
 
-extern void
+extern void GLAPIENTRY
 _mesa_DepthBoundsEXT( GLclampd zmin, GLclampd zmax );
 
 #else
diff --git a/src/mesa/main/dispatch.c b/src/mesa/main/dispatch.c
index 4bda6e1..87dc64f 100644
--- a/src/mesa/main/dispatch.c
+++ b/src/mesa/main/dispatch.c
@@ -41,7 +41,7 @@
 #include "glthread.h"
 
 
-#if !(defined(USE_X86_ASM) || defined(USE_SPARC_ASM)) || defined(__SCITECH_SNAP__)
+#if !(defined(USE_X86_ASM) || defined(USE_SPARC_ASM))
 
 #if defined(WIN32)
 #define KEYWORD1 GLAPI
diff --git a/src/mesa/main/dlist.c b/src/mesa/main/dlist.c
index 6efe540..c654cb6 100644
--- a/src/mesa/main/dlist.c
+++ b/src/mesa/main/dlist.c
@@ -816,7 +816,7 @@
 /*
  * Display List compilation functions
  */
-static void save_Accum( GLenum op, GLfloat value )
+static void GLAPIENTRY save_Accum( GLenum op, GLfloat value )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -832,7 +832,7 @@
 }
 
 
-static void save_AlphaFunc( GLenum func, GLclampf ref )
+static void GLAPIENTRY save_AlphaFunc( GLenum func, GLclampf ref )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -848,7 +848,7 @@
 }
 
 
-static void save_BindTexture( GLenum target, GLuint texture )
+static void GLAPIENTRY save_BindTexture( GLenum target, GLuint texture )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -864,7 +864,7 @@
 }
 
 
-static void save_Bitmap( GLsizei width, GLsizei height,
+static void GLAPIENTRY save_Bitmap( GLsizei width, GLsizei height,
                          GLfloat xorig, GLfloat yorig,
                          GLfloat xmove, GLfloat ymove,
                          const GLubyte *pixels )
@@ -893,7 +893,7 @@
 }
 
 
-static void save_BlendEquation( GLenum mode )
+static void GLAPIENTRY save_BlendEquation( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -908,7 +908,7 @@
 }
 
 
-static void save_BlendFunc( GLenum sfactor, GLenum dfactor )
+static void GLAPIENTRY save_BlendFunc( GLenum sfactor, GLenum dfactor )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -924,7 +924,7 @@
 }
 
 
-static void save_BlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfactorRGB,
+static void GLAPIENTRY save_BlendFuncSeparateEXT(GLenum sfactorRGB, GLenum dfactorRGB,
                                       GLenum sfactorA, GLenum dfactorA)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -944,7 +944,7 @@
 }
 
 
-static void save_BlendColor( GLfloat red, GLfloat green,
+static void GLAPIENTRY save_BlendColor( GLfloat red, GLfloat green,
                              GLfloat blue, GLfloat alpha )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -963,7 +963,7 @@
 }
 
 
-void _mesa_save_CallList( GLuint list )
+void GLAPIENTRY _mesa_save_CallList( GLuint list )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -980,7 +980,7 @@
 }
 
 
-void _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *lists )
+void GLAPIENTRY _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *lists )
 {
    GET_CURRENT_CONTEXT(ctx);
    GLint i;
@@ -1020,7 +1020,7 @@
 }
 
 
-static void save_Clear( GLbitfield mask )
+static void GLAPIENTRY save_Clear( GLbitfield mask )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1035,7 +1035,7 @@
 }
 
 
-static void save_ClearAccum( GLfloat red, GLfloat green,
+static void GLAPIENTRY save_ClearAccum( GLfloat red, GLfloat green,
                              GLfloat blue, GLfloat alpha )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1054,7 +1054,7 @@
 }
 
 
-static void save_ClearColor( GLclampf red, GLclampf green,
+static void GLAPIENTRY save_ClearColor( GLclampf red, GLclampf green,
                              GLclampf blue, GLclampf alpha )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1073,7 +1073,7 @@
 }
 
 
-static void save_ClearDepth( GLclampd depth )
+static void GLAPIENTRY save_ClearDepth( GLclampd depth )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1088,7 +1088,7 @@
 }
 
 
-static void save_ClearIndex( GLfloat c )
+static void GLAPIENTRY save_ClearIndex( GLfloat c )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1103,7 +1103,7 @@
 }
 
 
-static void save_ClearStencil( GLint s )
+static void GLAPIENTRY save_ClearStencil( GLint s )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1118,7 +1118,7 @@
 }
 
 
-static void save_ClipPlane( GLenum plane, const GLdouble *equ )
+static void GLAPIENTRY save_ClipPlane( GLenum plane, const GLdouble *equ )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1138,7 +1138,7 @@
 
 
 
-static void save_ColorMask( GLboolean red, GLboolean green,
+static void GLAPIENTRY save_ColorMask( GLboolean red, GLboolean green,
                             GLboolean blue, GLboolean alpha )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1157,7 +1157,7 @@
 }
 
 
-static void save_ColorMaterial( GLenum face, GLenum mode )
+static void GLAPIENTRY save_ColorMaterial( GLenum face, GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1175,7 +1175,7 @@
 }
 
 
-static void save_ColorTable( GLenum target, GLenum internalFormat,
+static void GLAPIENTRY save_ColorTable( GLenum target, GLenum internalFormat,
                              GLsizei width, GLenum format, GLenum type,
                              const GLvoid *table )
 {
@@ -1214,7 +1214,7 @@
 
 
 
-static void
+static void GLAPIENTRY
 save_ColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1243,7 +1243,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ColorTableParameteriv(GLenum target, GLenum pname, const GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1273,7 +1273,7 @@
 
 
 
-static void save_ColorSubTable( GLenum target, GLsizei start, GLsizei count,
+static void GLAPIENTRY save_ColorSubTable( GLenum target, GLsizei start, GLsizei count,
                                 GLenum format, GLenum type,
                                 const GLvoid *table)
 {
@@ -1300,7 +1300,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CopyColorSubTable(GLenum target, GLsizei start,
                        GLint x, GLint y, GLsizei width)
 {
@@ -1322,7 +1322,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CopyColorTable(GLenum target, GLenum internalformat,
                     GLint x, GLint y, GLsizei width)
 {
@@ -1344,7 +1344,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ConvolutionFilter1D(GLenum target, GLenum internalFormat, GLsizei width,
                          GLenum format, GLenum type, const GLvoid *filter)
 {
@@ -1372,7 +1372,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ConvolutionFilter2D(GLenum target, GLenum internalFormat,
                          GLsizei width, GLsizei height, GLenum format,
                          GLenum type, const GLvoid *filter)
@@ -1402,7 +1402,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ConvolutionParameteri(GLenum target, GLenum pname, GLint param)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1420,7 +1420,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1448,7 +1448,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat param)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1466,7 +1466,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1494,7 +1494,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CopyPixels( GLint x, GLint y,
 		 GLsizei width, GLsizei height, GLenum type )
 {
@@ -1516,7 +1516,7 @@
 
 
 
-static void
+static void GLAPIENTRY
 save_CopyTexImage1D( GLenum target, GLint level, GLenum internalformat,
                      GLint x, GLint y, GLsizei width, GLint border )
 {
@@ -1540,7 +1540,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CopyTexImage2D( GLenum target, GLint level,
                      GLenum internalformat,
                      GLint x, GLint y, GLsizei width,
@@ -1568,7 +1568,7 @@
 
 
 
-static void
+static void GLAPIENTRY
 save_CopyTexSubImage1D( GLenum target, GLint level,
                         GLint xoffset, GLint x, GLint y,
                         GLsizei width )
@@ -1591,7 +1591,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CopyTexSubImage2D( GLenum target, GLint level,
                         GLint xoffset, GLint yoffset,
                         GLint x, GLint y,
@@ -1618,7 +1618,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CopyTexSubImage3D( GLenum target, GLint level,
                         GLint xoffset, GLint yoffset, GLint zoffset,
                         GLint x, GLint y,
@@ -1647,7 +1647,7 @@
 }
 
 
-static void save_CullFace( GLenum mode )
+static void GLAPIENTRY save_CullFace( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1662,7 +1662,7 @@
 }
 
 
-static void save_DepthFunc( GLenum func )
+static void GLAPIENTRY save_DepthFunc( GLenum func )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1677,7 +1677,7 @@
 }
 
 
-static void save_DepthMask( GLboolean mask )
+static void GLAPIENTRY save_DepthMask( GLboolean mask )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1692,7 +1692,7 @@
 }
 
 
-static void save_DepthRange( GLclampd nearval, GLclampd farval )
+static void GLAPIENTRY save_DepthRange( GLclampd nearval, GLclampd farval )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1708,7 +1708,7 @@
 }
 
 
-static void save_Disable( GLenum cap )
+static void GLAPIENTRY save_Disable( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1723,7 +1723,7 @@
 }
 
 
-static void save_DrawBuffer( GLenum mode )
+static void GLAPIENTRY save_DrawBuffer( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1738,7 +1738,7 @@
 }
 
 
-static void save_DrawPixels( GLsizei width, GLsizei height,
+static void GLAPIENTRY save_DrawPixels( GLsizei width, GLsizei height,
                              GLenum format, GLenum type,
                              const GLvoid *pixels )
 {
@@ -1765,7 +1765,7 @@
 
 
 
-static void save_Enable( GLenum cap )
+static void GLAPIENTRY save_Enable( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1781,7 +1781,7 @@
 
 
 
-void _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
+void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1798,7 +1798,7 @@
 }
 
 
-void _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
+void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1819,7 +1819,7 @@
 
 
 
-static void save_Fogfv( GLenum pname, const GLfloat *params )
+static void GLAPIENTRY save_Fogfv( GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1838,13 +1838,13 @@
 }
 
 
-static void save_Fogf( GLenum pname, GLfloat param )
+static void GLAPIENTRY save_Fogf( GLenum pname, GLfloat param )
 {
    save_Fogfv(pname, &param);
 }
 
 
-static void save_Fogiv(GLenum pname, const GLint *params )
+static void GLAPIENTRY save_Fogiv(GLenum pname, const GLint *params )
 {
    GLfloat p[4];
    switch (pname) {
@@ -1869,13 +1869,13 @@
 }
 
 
-static void save_Fogi(GLenum pname, GLint param )
+static void GLAPIENTRY save_Fogi(GLenum pname, GLint param )
 {
    save_Fogiv(pname, &param);
 }
 
 
-static void save_FrontFace( GLenum mode )
+static void GLAPIENTRY save_FrontFace( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1890,7 +1890,7 @@
 }
 
 
-static void save_Frustum( GLdouble left, GLdouble right,
+static void GLAPIENTRY save_Frustum( GLdouble left, GLdouble right,
                       GLdouble bottom, GLdouble top,
                       GLdouble nearval, GLdouble farval )
 {
@@ -1912,7 +1912,7 @@
 }
 
 
-static void save_Hint( GLenum target, GLenum mode )
+static void GLAPIENTRY save_Hint( GLenum target, GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1928,7 +1928,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1948,7 +1948,7 @@
 }
 
 
-static void save_IndexMask( GLuint mask )
+static void GLAPIENTRY save_IndexMask( GLuint mask )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -1963,7 +1963,7 @@
 }
 
 
-static void save_InitNames( void )
+static void GLAPIENTRY save_InitNames( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
@@ -1974,7 +1974,7 @@
 }
 
 
-static void save_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
+static void GLAPIENTRY save_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2028,13 +2028,13 @@
 }
 
 
-static void save_Lightf( GLenum light, GLenum pname, GLfloat params )
+static void GLAPIENTRY save_Lightf( GLenum light, GLenum pname, GLfloat params )
 {
    save_Lightfv(light, pname, &params);
 }
 
 
-static void save_Lightiv( GLenum light, GLenum pname, const GLint *params )
+static void GLAPIENTRY save_Lightiv( GLenum light, GLenum pname, const GLint *params )
 {
    GLfloat fparam[4];
    switch (pname) {
@@ -2072,13 +2072,13 @@
 }
 
 
-static void save_Lighti( GLenum light, GLenum pname, GLint param )
+static void GLAPIENTRY save_Lighti( GLenum light, GLenum pname, GLint param )
 {
    save_Lightiv( light, pname, &param );
 }
 
 
-static void save_LightModelfv( GLenum pname, const GLfloat *params )
+static void GLAPIENTRY save_LightModelfv( GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2097,13 +2097,13 @@
 }
 
 
-static void save_LightModelf( GLenum pname, GLfloat param )
+static void GLAPIENTRY save_LightModelf( GLenum pname, GLfloat param )
 {
    save_LightModelfv(pname, &param);
 }
 
 
-static void save_LightModeliv( GLenum pname, const GLint *params )
+static void GLAPIENTRY save_LightModeliv( GLenum pname, const GLint *params )
 {
    GLfloat fparam[4];
    switch (pname) {
@@ -2126,13 +2126,13 @@
 }
 
 
-static void save_LightModeli( GLenum pname, GLint param )
+static void GLAPIENTRY save_LightModeli( GLenum pname, GLint param )
 {
    save_LightModeliv(pname, &param);
 }
 
 
-static void save_LineStipple( GLint factor, GLushort pattern )
+static void GLAPIENTRY save_LineStipple( GLint factor, GLushort pattern )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2148,7 +2148,7 @@
 }
 
 
-static void save_LineWidth( GLfloat width )
+static void GLAPIENTRY save_LineWidth( GLfloat width )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2163,7 +2163,7 @@
 }
 
 
-static void save_ListBase( GLuint base )
+static void GLAPIENTRY save_ListBase( GLuint base )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2178,7 +2178,7 @@
 }
 
 
-static void save_LoadIdentity( void )
+static void GLAPIENTRY save_LoadIdentity( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
@@ -2189,7 +2189,7 @@
 }
 
 
-static void save_LoadMatrixf( const GLfloat *m )
+static void GLAPIENTRY save_LoadMatrixf( const GLfloat *m )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2207,7 +2207,7 @@
 }
 
 
-static void save_LoadMatrixd( const GLdouble *m )
+static void GLAPIENTRY save_LoadMatrixd( const GLdouble *m )
 {
    GLfloat f[16];
    GLint i;
@@ -2218,7 +2218,7 @@
 }
 
 
-static void save_LoadName( GLuint name )
+static void GLAPIENTRY save_LoadName( GLuint name )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2233,7 +2233,7 @@
 }
 
 
-static void save_LogicOp( GLenum opcode )
+static void GLAPIENTRY save_LogicOp( GLenum opcode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2248,7 +2248,7 @@
 }
 
 
-static void save_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride,
+static void GLAPIENTRY save_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride,
                         GLint order, const GLdouble *points)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2269,7 +2269,7 @@
    }
 }
 
-static void save_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride,
+static void GLAPIENTRY save_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride,
                         GLint order, const GLfloat *points)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2291,7 +2291,7 @@
 }
 
 
-static void save_Map2d( GLenum target,
+static void GLAPIENTRY save_Map2d( GLenum target,
                         GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
                         GLdouble v1, GLdouble v2, GLint vstride, GLint vorder,
                         const GLdouble *points )
@@ -2323,7 +2323,7 @@
 }
 
 
-static void save_Map2f( GLenum target,
+static void GLAPIENTRY save_Map2f( GLenum target,
                         GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
                         GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
                         const GLfloat *points )
@@ -2354,7 +2354,7 @@
 }
 
 
-static void save_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 )
+static void GLAPIENTRY save_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2371,13 +2371,13 @@
 }
 
 
-static void save_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 )
+static void GLAPIENTRY save_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 )
 {
    save_MapGrid1f(un, (GLfloat) u1, (GLfloat) u2);
 }
 
 
-static void save_MapGrid2f( GLint un, GLfloat u1, GLfloat u2,
+static void GLAPIENTRY save_MapGrid2f( GLint un, GLfloat u1, GLfloat u2,
                             GLint vn, GLfloat v1, GLfloat v2 )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2399,7 +2399,7 @@
 
 
 
-static void save_MapGrid2d( GLint un, GLdouble u1, GLdouble u2,
+static void GLAPIENTRY save_MapGrid2d( GLint un, GLdouble u1, GLdouble u2,
                             GLint vn, GLdouble v1, GLdouble v2 )
 {
    save_MapGrid2f(un, (GLfloat) u1, (GLfloat) u2,
@@ -2407,7 +2407,7 @@
 }
 
 
-static void save_MatrixMode( GLenum mode )
+static void GLAPIENTRY save_MatrixMode( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2422,7 +2422,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_Minmax(GLenum target, GLenum internalFormat, GLboolean sink)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2441,7 +2441,7 @@
 }
 
 
-static void save_MultMatrixf( const GLfloat *m )
+static void GLAPIENTRY save_MultMatrixf( const GLfloat *m )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2459,7 +2459,7 @@
 }
 
 
-static void save_MultMatrixd( const GLdouble *m )
+static void GLAPIENTRY save_MultMatrixd( const GLdouble *m )
 {
    GLfloat f[16];
    GLint i;
@@ -2470,7 +2470,7 @@
 }
 
 
-static void save_NewList( GLuint list, GLenum mode )
+static void GLAPIENTRY save_NewList( GLuint list, GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    /* It's an error to call this function while building a display list */
@@ -2481,7 +2481,7 @@
 
 
 
-static void save_Ortho( GLdouble left, GLdouble right,
+static void GLAPIENTRY save_Ortho( GLdouble left, GLdouble right,
                     GLdouble bottom, GLdouble top,
                     GLdouble nearval, GLdouble farval )
 {
@@ -2503,7 +2503,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelMapfv( GLenum map, GLint mapsize, const GLfloat *values )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2522,7 +2522,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelMapuiv(GLenum map, GLint mapsize, const GLuint *values )
 {
    GLfloat fvalues[MAX_PIXEL_MAP_TABLE];
@@ -2541,7 +2541,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelMapusv(GLenum map, GLint mapsize, const GLushort *values)
 {
    GLfloat fvalues[MAX_PIXEL_MAP_TABLE];
@@ -2560,7 +2560,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelTransferf( GLenum pname, GLfloat param )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2577,14 +2577,14 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelTransferi( GLenum pname, GLint param )
 {
    save_PixelTransferf( pname, (GLfloat) param );
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelZoom( GLfloat xfactor, GLfloat yfactor )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2601,7 +2601,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_PointParameterfvEXT( GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2620,25 +2620,25 @@
 }
 
 
-static void save_PointParameterfEXT( GLenum pname, GLfloat param )
+static void GLAPIENTRY save_PointParameterfEXT( GLenum pname, GLfloat param )
 {
    save_PointParameterfvEXT(pname, &param);
 }
 
-static void save_PointParameteriNV( GLenum pname, GLint param )
+static void GLAPIENTRY save_PointParameteriNV( GLenum pname, GLint param )
 {
    GLfloat p = (GLfloat) param;
    save_PointParameterfvEXT(pname, &p);
 }
 
-static void save_PointParameterivNV( GLenum pname, const GLint *param )
+static void GLAPIENTRY save_PointParameterivNV( GLenum pname, const GLint *param )
 {
    GLfloat p = (GLfloat) param[0];
    save_PointParameterfvEXT(pname, &p);
 }
 
 
-static void save_PointSize( GLfloat size )
+static void GLAPIENTRY save_PointSize( GLfloat size )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2653,7 +2653,7 @@
 }
 
 
-static void save_PolygonMode( GLenum face, GLenum mode )
+static void GLAPIENTRY save_PolygonMode( GLenum face, GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2672,7 +2672,7 @@
 /*
  * Polygon stipple must have been upacked already!
  */
-static void save_PolygonStipple( const GLubyte *pattern )
+static void GLAPIENTRY save_PolygonStipple( const GLubyte *pattern )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2690,7 +2690,7 @@
 }
 
 
-static void save_PolygonOffset( GLfloat factor, GLfloat units )
+static void GLAPIENTRY save_PolygonOffset( GLfloat factor, GLfloat units )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2706,14 +2706,14 @@
 }
 
 
-static void save_PolygonOffsetEXT( GLfloat factor, GLfloat bias )
+static void GLAPIENTRY save_PolygonOffsetEXT( GLfloat factor, GLfloat bias )
 {
    GET_CURRENT_CONTEXT(ctx);
    save_PolygonOffset(factor, ctx->DepthMaxF * bias);
 }
 
 
-static void save_PopAttrib( void )
+static void GLAPIENTRY save_PopAttrib( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
@@ -2724,7 +2724,7 @@
 }
 
 
-static void save_PopMatrix( void )
+static void GLAPIENTRY save_PopMatrix( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
@@ -2736,7 +2736,7 @@
 }
 
 
-static void save_PopName( void )
+static void GLAPIENTRY save_PopName( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
@@ -2747,7 +2747,7 @@
 }
 
 
-static void save_PrioritizeTextures( GLsizei num, const GLuint *textures,
+static void GLAPIENTRY save_PrioritizeTextures( GLsizei num, const GLuint *textures,
                                      const GLclampf *priorities )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2768,7 +2768,7 @@
 }
 
 
-static void save_PushAttrib( GLbitfield mask )
+static void GLAPIENTRY save_PushAttrib( GLbitfield mask )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2784,7 +2784,7 @@
 }
 
 
-static void save_PushMatrix( void )
+static void GLAPIENTRY save_PushMatrix( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
@@ -2795,7 +2795,7 @@
 }
 
 
-static void save_PushName( GLuint name )
+static void GLAPIENTRY save_PushName( GLuint name )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2810,7 +2810,7 @@
 }
 
 
-static void save_RasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+static void GLAPIENTRY save_RasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2828,125 +2828,125 @@
    }
 }
 
-static void save_RasterPos2d(GLdouble x, GLdouble y)
+static void GLAPIENTRY save_RasterPos2d(GLdouble x, GLdouble y)
 {
    save_RasterPos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
 }
 
-static void save_RasterPos2f(GLfloat x, GLfloat y)
+static void GLAPIENTRY save_RasterPos2f(GLfloat x, GLfloat y)
 {
    save_RasterPos4f(x, y, 0.0F, 1.0F);
 }
 
-static void save_RasterPos2i(GLint x, GLint y)
+static void GLAPIENTRY save_RasterPos2i(GLint x, GLint y)
 {
    save_RasterPos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
 }
 
-static void save_RasterPos2s(GLshort x, GLshort y)
+static void GLAPIENTRY save_RasterPos2s(GLshort x, GLshort y)
 {
    save_RasterPos4f(x, y, 0.0F, 1.0F);
 }
 
-static void save_RasterPos3d(GLdouble x, GLdouble y, GLdouble z)
+static void GLAPIENTRY save_RasterPos3d(GLdouble x, GLdouble y, GLdouble z)
 {
    save_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
 }
 
-static void save_RasterPos3f(GLfloat x, GLfloat y, GLfloat z)
+static void GLAPIENTRY save_RasterPos3f(GLfloat x, GLfloat y, GLfloat z)
 {
    save_RasterPos4f(x, y, z, 1.0F);
 }
 
-static void save_RasterPos3i(GLint x, GLint y, GLint z)
+static void GLAPIENTRY save_RasterPos3i(GLint x, GLint y, GLint z)
 {
    save_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
 }
 
-static void save_RasterPos3s(GLshort x, GLshort y, GLshort z)
+static void GLAPIENTRY save_RasterPos3s(GLshort x, GLshort y, GLshort z)
 {
    save_RasterPos4f(x, y, z, 1.0F);
 }
 
-static void save_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+static void GLAPIENTRY save_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
    save_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
-static void save_RasterPos4i(GLint x, GLint y, GLint z, GLint w)
+static void GLAPIENTRY save_RasterPos4i(GLint x, GLint y, GLint z, GLint w)
 {
    save_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
-static void save_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
+static void GLAPIENTRY save_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
 {
    save_RasterPos4f(x, y, z, w);
 }
 
-static void save_RasterPos2dv(const GLdouble *v)
+static void GLAPIENTRY save_RasterPos2dv(const GLdouble *v)
 {
    save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
-static void save_RasterPos2fv(const GLfloat *v)
+static void GLAPIENTRY save_RasterPos2fv(const GLfloat *v)
 {
    save_RasterPos4f(v[0], v[1], 0.0F, 1.0F);
 }
 
-static void save_RasterPos2iv(const GLint *v)
+static void GLAPIENTRY save_RasterPos2iv(const GLint *v)
 {
    save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
-static void save_RasterPos2sv(const GLshort *v)
+static void GLAPIENTRY save_RasterPos2sv(const GLshort *v)
 {
    save_RasterPos4f(v[0], v[1], 0.0F, 1.0F);
 }
 
-static void save_RasterPos3dv(const GLdouble *v)
+static void GLAPIENTRY save_RasterPos3dv(const GLdouble *v)
 {
    save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
-static void save_RasterPos3fv(const GLfloat *v)
+static void GLAPIENTRY save_RasterPos3fv(const GLfloat *v)
 {
    save_RasterPos4f(v[0], v[1], v[2], 1.0F);
 }
 
-static void save_RasterPos3iv(const GLint *v)
+static void GLAPIENTRY save_RasterPos3iv(const GLint *v)
 {
    save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
-static void save_RasterPos3sv(const GLshort *v)
+static void GLAPIENTRY save_RasterPos3sv(const GLshort *v)
 {
    save_RasterPos4f(v[0], v[1], v[2], 1.0F);
 }
 
-static void save_RasterPos4dv(const GLdouble *v)
+static void GLAPIENTRY save_RasterPos4dv(const GLdouble *v)
 {
    save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1],
 		    (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void save_RasterPos4fv(const GLfloat *v)
+static void GLAPIENTRY save_RasterPos4fv(const GLfloat *v)
 {
    save_RasterPos4f(v[0], v[1], v[2], v[3]);
 }
 
-static void save_RasterPos4iv(const GLint *v)
+static void GLAPIENTRY save_RasterPos4iv(const GLint *v)
 {
    save_RasterPos4f((GLfloat) v[0], (GLfloat) v[1],
 		    (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void save_RasterPos4sv(const GLshort *v)
+static void GLAPIENTRY save_RasterPos4sv(const GLshort *v)
 {
    save_RasterPos4f(v[0], v[1], v[2], v[3]);
 }
 
 
-static void save_PassThrough( GLfloat token )
+static void GLAPIENTRY save_PassThrough( GLfloat token )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2961,7 +2961,7 @@
 }
 
 
-static void save_ReadBuffer( GLenum mode )
+static void GLAPIENTRY save_ReadBuffer( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -2976,7 +2976,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ResetHistogram(GLenum target)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2992,7 +2992,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ResetMinmax(GLenum target)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -3008,7 +3008,7 @@
 }
 
 
-static void save_Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
+static void GLAPIENTRY save_Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3026,13 +3026,13 @@
 }
 
 
-static void save_Rotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z )
+static void GLAPIENTRY save_Rotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z )
 {
    save_Rotatef((GLfloat) angle, (GLfloat) x, (GLfloat) y, (GLfloat) z);
 }
 
 
-static void save_Scalef( GLfloat x, GLfloat y, GLfloat z )
+static void GLAPIENTRY save_Scalef( GLfloat x, GLfloat y, GLfloat z )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3049,13 +3049,13 @@
 }
 
 
-static void save_Scaled( GLdouble x, GLdouble y, GLdouble z )
+static void GLAPIENTRY save_Scaled( GLdouble x, GLdouble y, GLdouble z )
 {
    save_Scalef((GLfloat) x, (GLfloat) y, (GLfloat) z);
 }
 
 
-static void save_Scissor( GLint x, GLint y, GLsizei width, GLsizei height )
+static void GLAPIENTRY save_Scissor( GLint x, GLint y, GLsizei width, GLsizei height )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3073,7 +3073,7 @@
 }
 
 
-static void save_ShadeModel( GLenum mode )
+static void GLAPIENTRY save_ShadeModel( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3088,7 +3088,7 @@
 }
 
 
-static void save_StencilFunc( GLenum func, GLint ref, GLuint mask )
+static void GLAPIENTRY save_StencilFunc( GLenum func, GLint ref, GLuint mask )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3105,7 +3105,7 @@
 }
 
 
-static void save_StencilMask( GLuint mask )
+static void GLAPIENTRY save_StencilMask( GLuint mask )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3120,7 +3120,7 @@
 }
 
 
-static void save_StencilOp( GLenum fail, GLenum zfail, GLenum zpass )
+static void GLAPIENTRY save_StencilOp( GLenum fail, GLenum zfail, GLenum zpass )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3137,7 +3137,7 @@
 }
 
 
-static void save_TexEnvfv( GLenum target, GLenum pname, const GLfloat *params )
+static void GLAPIENTRY save_TexEnvfv( GLenum target, GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3157,13 +3157,13 @@
 }
 
 
-static void save_TexEnvf( GLenum target, GLenum pname, GLfloat param )
+static void GLAPIENTRY save_TexEnvf( GLenum target, GLenum pname, GLfloat param )
 {
    save_TexEnvfv( target, pname, &param );
 }
 
 
-static void save_TexEnvi( GLenum target, GLenum pname, GLint param )
+static void GLAPIENTRY save_TexEnvi( GLenum target, GLenum pname, GLint param )
 {
    GLfloat p[4];
    p[0] = (GLfloat) param;
@@ -3172,7 +3172,7 @@
 }
 
 
-static void save_TexEnviv( GLenum target, GLenum pname, const GLint *param )
+static void GLAPIENTRY save_TexEnviv( GLenum target, GLenum pname, const GLint *param )
 {
    GLfloat p[4];
    p[0] = INT_TO_FLOAT( param[0] );
@@ -3183,7 +3183,7 @@
 }
 
 
-static void save_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
+static void GLAPIENTRY save_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3203,7 +3203,7 @@
 }
 
 
-static void save_TexGeniv(GLenum coord, GLenum pname, const GLint *params )
+static void GLAPIENTRY save_TexGeniv(GLenum coord, GLenum pname, const GLint *params )
 {
    GLfloat p[4];
    p[0] = (GLfloat) params[0];
@@ -3214,14 +3214,14 @@
 }
 
 
-static void save_TexGend(GLenum coord, GLenum pname, GLdouble param )
+static void GLAPIENTRY save_TexGend(GLenum coord, GLenum pname, GLdouble param )
 {
    GLfloat p = (GLfloat) param;
    save_TexGenfv( coord, pname, &p );
 }
 
 
-static void save_TexGendv(GLenum coord, GLenum pname, const GLdouble *params )
+static void GLAPIENTRY save_TexGendv(GLenum coord, GLenum pname, const GLdouble *params )
 {
    GLfloat p[4];
    p[0] = (GLfloat) params[0];
@@ -3232,19 +3232,19 @@
 }
 
 
-static void save_TexGenf( GLenum coord, GLenum pname, GLfloat param )
+static void GLAPIENTRY save_TexGenf( GLenum coord, GLenum pname, GLfloat param )
 {
    save_TexGenfv(coord, pname, &param);
 }
 
 
-static void save_TexGeni( GLenum coord, GLenum pname, GLint param )
+static void GLAPIENTRY save_TexGeni( GLenum coord, GLenum pname, GLint param )
 {
    save_TexGeniv( coord, pname, &param );
 }
 
 
-static void save_TexParameterfv( GLenum target,
+static void GLAPIENTRY save_TexParameterfv( GLenum target,
                              GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -3265,13 +3265,13 @@
 }
 
 
-static void save_TexParameterf( GLenum target, GLenum pname, GLfloat param )
+static void GLAPIENTRY save_TexParameterf( GLenum target, GLenum pname, GLfloat param )
 {
    save_TexParameterfv(target, pname, &param);
 }
 
 
-static void save_TexParameteri( GLenum target, GLenum pname, GLint param )
+static void GLAPIENTRY save_TexParameteri( GLenum target, GLenum pname, GLint param )
 {
    GLfloat fparam[4];
    fparam[0] = (GLfloat) param;
@@ -3280,7 +3280,7 @@
 }
 
 
-static void save_TexParameteriv( GLenum target, GLenum pname, const GLint *params )
+static void GLAPIENTRY save_TexParameteriv( GLenum target, GLenum pname, const GLint *params )
 {
    GLfloat fparam[4];
    fparam[0] = (GLfloat) params[0];
@@ -3289,7 +3289,7 @@
 }
 
 
-static void save_TexImage1D( GLenum target,
+static void GLAPIENTRY save_TexImage1D( GLenum target,
                              GLint level, GLint components,
                              GLsizei width, GLint border,
                              GLenum format, GLenum type,
@@ -3328,7 +3328,7 @@
 }
 
 
-static void save_TexImage2D( GLenum target,
+static void GLAPIENTRY save_TexImage2D( GLenum target,
                              GLint level, GLint components,
                              GLsizei width, GLsizei height, GLint border,
                              GLenum format, GLenum type,
@@ -3368,7 +3368,7 @@
 }
 
 
-static void save_TexImage3D( GLenum target,
+static void GLAPIENTRY save_TexImage3D( GLenum target,
                              GLint level, GLint internalFormat,
                              GLsizei width, GLsizei height, GLsizei depth,
                              GLint border,
@@ -3410,7 +3410,7 @@
 }
 
 
-static void save_TexSubImage1D( GLenum target, GLint level, GLint xoffset,
+static void GLAPIENTRY save_TexSubImage1D( GLenum target, GLint level, GLint xoffset,
                                 GLsizei width, GLenum format, GLenum type,
                                 const GLvoid *pixels )
 {
@@ -3439,7 +3439,7 @@
 }
 
 
-static void save_TexSubImage2D( GLenum target, GLint level,
+static void GLAPIENTRY save_TexSubImage2D( GLenum target, GLint level,
                                 GLint xoffset, GLint yoffset,
                                 GLsizei width, GLsizei height,
                                 GLenum format, GLenum type,
@@ -3472,7 +3472,7 @@
 }
 
 
-static void save_TexSubImage3D( GLenum target, GLint level,
+static void GLAPIENTRY save_TexSubImage3D( GLenum target, GLint level,
                                 GLint xoffset, GLint yoffset,GLint zoffset,
                                 GLsizei width, GLsizei height, GLsizei depth,
                                 GLenum format, GLenum type,
@@ -3508,7 +3508,7 @@
 }
 
 
-static void save_Translatef( GLfloat x, GLfloat y, GLfloat z )
+static void GLAPIENTRY save_Translatef( GLfloat x, GLfloat y, GLfloat z )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3525,14 +3525,14 @@
 }
 
 
-static void save_Translated( GLdouble x, GLdouble y, GLdouble z )
+static void GLAPIENTRY save_Translated( GLdouble x, GLdouble y, GLdouble z )
 {
    save_Translatef((GLfloat) x, (GLfloat) y, (GLfloat) z);
 }
 
 
 
-static void save_Viewport( GLint x, GLint y, GLsizei width, GLsizei height )
+static void GLAPIENTRY save_Viewport( GLint x, GLint y, GLsizei width, GLsizei height )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3550,7 +3550,7 @@
 }
 
 
-static void save_WindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+static void GLAPIENTRY save_WindowPos4fMESA( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3568,119 +3568,119 @@
    }
 }
 
-static void save_WindowPos2dMESA(GLdouble x, GLdouble y)
+static void GLAPIENTRY save_WindowPos2dMESA(GLdouble x, GLdouble y)
 {
    save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
 }
 
-static void save_WindowPos2fMESA(GLfloat x, GLfloat y)
+static void GLAPIENTRY save_WindowPos2fMESA(GLfloat x, GLfloat y)
 {
    save_WindowPos4fMESA(x, y, 0.0F, 1.0F);
 }
 
-static void save_WindowPos2iMESA(GLint x, GLint y)
+static void GLAPIENTRY save_WindowPos2iMESA(GLint x, GLint y)
 {
    save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
 }
 
-static void save_WindowPos2sMESA(GLshort x, GLshort y)
+static void GLAPIENTRY save_WindowPos2sMESA(GLshort x, GLshort y)
 {
    save_WindowPos4fMESA(x, y, 0.0F, 1.0F);
 }
 
-static void save_WindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z)
+static void GLAPIENTRY save_WindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z)
 {
    save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
 }
 
-static void save_WindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z)
+static void GLAPIENTRY save_WindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z)
 {
    save_WindowPos4fMESA(x, y, z, 1.0F);
 }
 
-static void save_WindowPos3iMESA(GLint x, GLint y, GLint z)
+static void GLAPIENTRY save_WindowPos3iMESA(GLint x, GLint y, GLint z)
 {
    save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
 }
 
-static void save_WindowPos3sMESA(GLshort x, GLshort y, GLshort z)
+static void GLAPIENTRY save_WindowPos3sMESA(GLshort x, GLshort y, GLshort z)
 {
    save_WindowPos4fMESA(x, y, z, 1.0F);
 }
 
-static void save_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
+static void GLAPIENTRY save_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
    save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
-static void save_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w)
+static void GLAPIENTRY save_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w)
 {
    save_WindowPos4fMESA((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
-static void save_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w)
+static void GLAPIENTRY save_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w)
 {
    save_WindowPos4fMESA(x, y, z, w);
 }
 
-static void save_WindowPos2dvMESA(const GLdouble *v)
+static void GLAPIENTRY save_WindowPos2dvMESA(const GLdouble *v)
 {
    save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
-static void save_WindowPos2fvMESA(const GLfloat *v)
+static void GLAPIENTRY save_WindowPos2fvMESA(const GLfloat *v)
 {
    save_WindowPos4fMESA(v[0], v[1], 0.0F, 1.0F);
 }
 
-static void save_WindowPos2ivMESA(const GLint *v)
+static void GLAPIENTRY save_WindowPos2ivMESA(const GLint *v)
 {
    save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
-static void save_WindowPos2svMESA(const GLshort *v)
+static void GLAPIENTRY save_WindowPos2svMESA(const GLshort *v)
 {
    save_WindowPos4fMESA(v[0], v[1], 0.0F, 1.0F);
 }
 
-static void save_WindowPos3dvMESA(const GLdouble *v)
+static void GLAPIENTRY save_WindowPos3dvMESA(const GLdouble *v)
 {
    save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
-static void save_WindowPos3fvMESA(const GLfloat *v)
+static void GLAPIENTRY save_WindowPos3fvMESA(const GLfloat *v)
 {
    save_WindowPos4fMESA(v[0], v[1], v[2], 1.0F);
 }
 
-static void save_WindowPos3ivMESA(const GLint *v)
+static void GLAPIENTRY save_WindowPos3ivMESA(const GLint *v)
 {
    save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
-static void save_WindowPos3svMESA(const GLshort *v)
+static void GLAPIENTRY save_WindowPos3svMESA(const GLshort *v)
 {
    save_WindowPos4fMESA(v[0], v[1], v[2], 1.0F);
 }
 
-static void save_WindowPos4dvMESA(const GLdouble *v)
+static void GLAPIENTRY save_WindowPos4dvMESA(const GLdouble *v)
 {
    save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1],
 			(GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void save_WindowPos4fvMESA(const GLfloat *v)
+static void GLAPIENTRY save_WindowPos4fvMESA(const GLfloat *v)
 {
    save_WindowPos4fMESA(v[0], v[1], v[2], v[3]);
 }
 
-static void save_WindowPos4ivMESA(const GLint *v)
+static void GLAPIENTRY save_WindowPos4ivMESA(const GLint *v)
 {
    save_WindowPos4fMESA((GLfloat) v[0], (GLfloat) v[1],
 			(GLfloat) v[2], (GLfloat) v[3]);
 }
 
-static void save_WindowPos4svMESA(const GLshort *v)
+static void GLAPIENTRY save_WindowPos4svMESA(const GLshort *v)
 {
    save_WindowPos4fMESA(v[0], v[1], v[2], v[3]);
 }
@@ -3688,7 +3688,7 @@
 
 
 /* GL_ARB_multitexture */
-static void save_ActiveTextureARB( GLenum target )
+static void GLAPIENTRY save_ActiveTextureARB( GLenum target )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -3705,7 +3705,7 @@
 
 /* GL_ARB_transpose_matrix */
 
-static void save_LoadTransposeMatrixdARB( const GLdouble m[16] )
+static void GLAPIENTRY save_LoadTransposeMatrixdARB( const GLdouble m[16] )
 {
    GLfloat tm[16];
    _math_transposefd(tm, m);
@@ -3713,7 +3713,7 @@
 }
 
 
-static void save_LoadTransposeMatrixfARB( const GLfloat m[16] )
+static void GLAPIENTRY save_LoadTransposeMatrixfARB( const GLfloat m[16] )
 {
    GLfloat tm[16];
    _math_transposef(tm, m);
@@ -3721,7 +3721,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_MultTransposeMatrixdARB( const GLdouble m[16] )
 {
    GLfloat tm[16];
@@ -3730,7 +3730,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_MultTransposeMatrixfARB( const GLfloat m[16] )
 {
    GLfloat tm[16];
@@ -3739,7 +3739,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelTexGenSGIX(GLenum mode)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -3756,7 +3756,7 @@
 
 
 /* GL_ARB_texture_compression */
-static void
+static void GLAPIENTRY
 save_CompressedTexImage1DARB(GLenum target, GLint level,
                              GLenum internalFormat, GLsizei width,
                              GLint border, GLsizei imageSize,
@@ -3800,7 +3800,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CompressedTexImage2DARB(GLenum target, GLint level,
                              GLenum internalFormat, GLsizei width,
                              GLsizei height, GLint border, GLsizei imageSize,
@@ -3845,7 +3845,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CompressedTexImage3DARB(GLenum target, GLint level,
                              GLenum internalFormat, GLsizei width,
                              GLsizei height, GLsizei depth, GLint border,
@@ -3891,7 +3891,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset,
                                 GLsizei width, GLenum format,
                                 GLsizei imageSize, const GLvoid *data)
@@ -3929,7 +3929,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset,
                                 GLint yoffset, GLsizei width, GLsizei height,
                                 GLenum format, GLsizei imageSize,
@@ -3970,7 +3970,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
                                 GLint yoffset, GLint zoffset, GLsizei width,
                                 GLsizei height, GLsizei depth, GLenum format,
@@ -4014,7 +4014,7 @@
 
 
 /* GL_ARB_multisample */
-static void
+static void GLAPIENTRY
 save_SampleCoverageARB(GLclampf value, GLboolean invert)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -4033,7 +4033,7 @@
 
 /* GL_SGIS_pixel_texture */
 
-static void
+static void GLAPIENTRY
 save_PixelTexGenParameteriSGIS(GLenum target, GLint value)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -4050,21 +4050,21 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelTexGenParameterfSGIS(GLenum target, GLfloat value)
 {
    save_PixelTexGenParameteriSGIS(target, (GLint) value);
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelTexGenParameterivSGIS(GLenum target, const GLint *value)
 {
    save_PixelTexGenParameteriSGIS(target, *value);
 }
 
 
-static void
+static void GLAPIENTRY
 save_PixelTexGenParameterfvSGIS(GLenum target, const GLfloat *value)
 {
    save_PixelTexGenParameteriSGIS(target, (GLint) *value);
@@ -4075,7 +4075,7 @@
  * GL_NV_vertex_program
  */
 #if FEATURE_NV_vertex_program
-static void
+static void GLAPIENTRY
 save_BindProgramNV(GLenum target, GLuint id)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -4091,7 +4091,7 @@
    }
 }
 
-static void
+static void GLAPIENTRY
 save_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -4112,7 +4112,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramParameter4fNV(GLenum target, GLuint index,
                           GLfloat x, GLfloat y,
                           GLfloat z, GLfloat w)
@@ -4135,7 +4135,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramParameter4fvNV(GLenum target, GLuint index, const GLfloat *params)
 {
    save_ProgramParameter4fNV(target, index, params[0], params[1],
@@ -4143,7 +4143,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramParameter4dNV(GLenum target, GLuint index,
                           GLdouble x, GLdouble y,
                           GLdouble z, GLdouble w)
@@ -4153,7 +4153,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramParameter4dvNV(GLenum target, GLuint index,
                            const GLdouble *params)
 {
@@ -4163,7 +4163,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramParameters4dvNV(GLenum target, GLuint index,
                             GLuint num, const GLdouble *params)
 {
@@ -4174,7 +4174,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramParameters4fvNV(GLenum target, GLuint index,
                             GLuint num, const GLfloat *params)
 {
@@ -4185,7 +4185,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_LoadProgramNV(GLenum target, GLuint id, GLsizei len,
                    const GLubyte *program)
 {
@@ -4214,7 +4214,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_RequestResidentProgramsNV(GLsizei num, const GLuint *ids)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -4237,7 +4237,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_TrackMatrixNV(GLenum target, GLuint address,
                    GLenum matrix, GLenum transform)
 {
@@ -4262,7 +4262,7 @@
  * GL_NV_fragment_program
  */
 #if FEATURE_NV_fragment_program
-static void
+static void GLAPIENTRY
 save_ProgramLocalParameter4fARB(GLenum target, GLuint index,
                                 GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
@@ -4284,7 +4284,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramLocalParameter4fvARB(GLenum target, GLuint index,
                                  const GLfloat *params)
 {
@@ -4306,7 +4306,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramLocalParameter4dARB(GLenum target, GLuint index,
                                 GLdouble x, GLdouble y,
                                 GLdouble z, GLdouble w)
@@ -4329,7 +4329,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramLocalParameter4dvARB(GLenum target, GLuint index,
                                  const GLdouble *params)
 {
@@ -4350,7 +4350,7 @@
    }
 }
 
-static void
+static void GLAPIENTRY
 save_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name,
                                GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
@@ -4380,7 +4380,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramNamedParameter4fvNV(GLuint id, GLsizei len, const GLubyte *name,
                                 const float v[])
 {
@@ -4388,7 +4388,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramNamedParameter4dNV(GLuint id, GLsizei len, const GLubyte *name,
                                GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
@@ -4397,7 +4397,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte *name,
                                 const double v[])
 {
@@ -4411,7 +4411,7 @@
 
 
 /* GL_EXT_stencil_two_side */
-static void save_ActiveStencilFaceEXT( GLenum face )
+static void GLAPIENTRY save_ActiveStencilFaceEXT( GLenum face )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -4427,7 +4427,7 @@
 
 
 /* GL_EXT_depth_bounds_test */
-static void save_DepthBoundsEXT( GLclampd zmin, GLclampd zmax )
+static void GLAPIENTRY save_DepthBoundsEXT( GLclampd zmin, GLclampd zmax )
 {
    GET_CURRENT_CONTEXT(ctx);
    Node *n;
@@ -4446,7 +4446,7 @@
 
 #if FEATURE_ARB_vertex_program || FEATURE_ARB_fragment_program
 
-static void
+static void GLAPIENTRY
 save_ProgramStringARB(GLenum target, GLenum format, GLsizei len,
                       const GLvoid *string)
 {
@@ -4475,7 +4475,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramEnvParameter4fARB(GLenum target, GLuint index,
                               GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
@@ -4497,7 +4497,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramEnvParameter4fvARB(GLenum target, GLuint index,
                                const GLfloat *params)
 {
@@ -4506,7 +4506,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramEnvParameter4dARB(GLenum target, GLuint index,
                               GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
@@ -4518,7 +4518,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 save_ProgramEnvParameter4dvARB(GLenum target, GLuint index,
                                const GLdouble *params)
 {
@@ -4590,7 +4590,7 @@
  * the absolute list number, not relative to ListBase.
  * \param list - display list number
  */
-static void
+static void GLAPIENTRY
 execute_list( GLcontext *ctx, GLuint list )
 {
    Node *n;
@@ -5332,7 +5332,7 @@
 /*
  * Test if a display list number is valid.
  */
-GLboolean
+GLboolean GLAPIENTRY
 _mesa_IsList( GLuint list )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5345,7 +5345,7 @@
 /*
  * Delete a sequence of consecutive display lists.
  */
-void
+void GLAPIENTRY
 _mesa_DeleteLists( GLuint list, GLsizei range )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5368,7 +5368,7 @@
  * Return a display list number, n, such that lists n through n+range-1
  * are free.
  */
-GLuint
+GLuint GLAPIENTRY
 _mesa_GenLists(GLsizei range )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5408,7 +5408,7 @@
 /*
  * Begin a new display list.
  */
-void
+void GLAPIENTRY
 _mesa_NewList( GLuint list, GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5456,7 +5456,7 @@
  * ASSERT_OUTSIDE_BEGIN_END strong enough to really guarentee that
  * we are outside begin/end calls?
  */
-void
+void GLAPIENTRY
 _mesa_EndList( void )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5496,7 +5496,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_CallList( GLuint list )
 {
    GLboolean save_compile_flag;
@@ -5535,7 +5535,7 @@
 /*
  * Execute glCallLists:  call multiple display lists.
  */
-void
+void GLAPIENTRY
 _mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5589,7 +5589,7 @@
 /*
  * Set the offset added to list numbers in glCallLists.
  */
-void
+void GLAPIENTRY
 _mesa_ListBase( GLuint base )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5601,182 +5601,182 @@
 
 /* Can no longer assume ctx->Exec->Func is equal to _mesa_Func.
  */
-static void exec_Finish( void )
+static void GLAPIENTRY exec_Finish( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->Finish();
 }
 
-static void exec_Flush( void )
+static void GLAPIENTRY exec_Flush( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->Flush( );
 }
 
-static void exec_GetBooleanv( GLenum pname, GLboolean *params )
+static void GLAPIENTRY exec_GetBooleanv( GLenum pname, GLboolean *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetBooleanv( pname, params );
 }
 
-static void exec_GetClipPlane( GLenum plane, GLdouble *equation )
+static void GLAPIENTRY exec_GetClipPlane( GLenum plane, GLdouble *equation )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetClipPlane( plane, equation );
 }
 
-static void exec_GetDoublev( GLenum pname, GLdouble *params )
+static void GLAPIENTRY exec_GetDoublev( GLenum pname, GLdouble *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetDoublev(  pname, params );
 }
 
-static GLenum exec_GetError( void )
+static GLenum GLAPIENTRY exec_GetError( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    return ctx->Exec->GetError( );
 }
 
-static void exec_GetFloatv( GLenum pname, GLfloat *params )
+static void GLAPIENTRY exec_GetFloatv( GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetFloatv( pname, params );
 }
 
-static void exec_GetIntegerv( GLenum pname, GLint *params )
+static void GLAPIENTRY exec_GetIntegerv( GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetIntegerv( pname, params );
 }
 
-static void exec_GetLightfv( GLenum light, GLenum pname, GLfloat *params )
+static void GLAPIENTRY exec_GetLightfv( GLenum light, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetLightfv( light, pname, params );
 }
 
-static void exec_GetLightiv( GLenum light, GLenum pname, GLint *params )
+static void GLAPIENTRY exec_GetLightiv( GLenum light, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetLightiv( light, pname, params );
 }
 
-static void exec_GetMapdv( GLenum target, GLenum query, GLdouble *v )
+static void GLAPIENTRY exec_GetMapdv( GLenum target, GLenum query, GLdouble *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetMapdv( target, query, v );
 }
 
-static void exec_GetMapfv( GLenum target, GLenum query, GLfloat *v )
+static void GLAPIENTRY exec_GetMapfv( GLenum target, GLenum query, GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetMapfv( target, query, v );
 }
 
-static void exec_GetMapiv( GLenum target, GLenum query, GLint *v )
+static void GLAPIENTRY exec_GetMapiv( GLenum target, GLenum query, GLint *v )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetMapiv( target, query, v );
 }
 
-static void exec_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
+static void GLAPIENTRY exec_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetMaterialfv( face, pname, params );
 }
 
-static void exec_GetMaterialiv( GLenum face, GLenum pname, GLint *params )
+static void GLAPIENTRY exec_GetMaterialiv( GLenum face, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetMaterialiv( face, pname, params );
 }
 
-static void exec_GetPixelMapfv( GLenum map, GLfloat *values )
+static void GLAPIENTRY exec_GetPixelMapfv( GLenum map, GLfloat *values )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetPixelMapfv( map,  values );
 }
 
-static void exec_GetPixelMapuiv( GLenum map, GLuint *values )
+static void GLAPIENTRY exec_GetPixelMapuiv( GLenum map, GLuint *values )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetPixelMapuiv( map, values );
 }
 
-static void exec_GetPixelMapusv( GLenum map, GLushort *values )
+static void GLAPIENTRY exec_GetPixelMapusv( GLenum map, GLushort *values )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetPixelMapusv( map, values );
 }
 
-static void exec_GetPolygonStipple( GLubyte *dest )
+static void GLAPIENTRY exec_GetPolygonStipple( GLubyte *dest )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetPolygonStipple( dest );
 }
 
-static const GLubyte *exec_GetString( GLenum name )
+static const GLubyte * GLAPIENTRY exec_GetString( GLenum name )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    return ctx->Exec->GetString( name );
 }
 
-static void exec_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
+static void GLAPIENTRY exec_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetTexEnvfv( target, pname, params );
 }
 
-static void exec_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
+static void GLAPIENTRY exec_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetTexEnviv( target, pname, params );
 }
 
-static void exec_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
+static void GLAPIENTRY exec_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetTexGendv( coord, pname, params );
 }
 
-static void exec_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
+static void GLAPIENTRY exec_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetTexGenfv( coord, pname, params );
 }
 
-static void exec_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
+static void GLAPIENTRY exec_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetTexGeniv( coord, pname, params );
 }
 
-static void exec_GetTexImage( GLenum target, GLint level, GLenum format,
+static void GLAPIENTRY exec_GetTexImage( GLenum target, GLint level, GLenum format,
                    GLenum type, GLvoid *pixels )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5784,7 +5784,7 @@
    ctx->Exec->GetTexImage( target, level, format, type, pixels );
 }
 
-static void exec_GetTexLevelParameterfv( GLenum target, GLint level,
+static void GLAPIENTRY exec_GetTexLevelParameterfv( GLenum target, GLint level,
                               GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5792,7 +5792,7 @@
    ctx->Exec->GetTexLevelParameterfv( target, level, pname, params );
 }
 
-static void exec_GetTexLevelParameteriv( GLenum target, GLint level,
+static void GLAPIENTRY exec_GetTexLevelParameteriv( GLenum target, GLint level,
                               GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5800,7 +5800,7 @@
    ctx->Exec->GetTexLevelParameteriv( target, level, pname, params );
 }
 
-static void exec_GetTexParameterfv( GLenum target, GLenum pname,
+static void GLAPIENTRY exec_GetTexParameterfv( GLenum target, GLenum pname,
 				    GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5808,35 +5808,35 @@
    ctx->Exec->GetTexParameterfv( target, pname, params );
 }
 
-static void exec_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
+static void GLAPIENTRY exec_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetTexParameteriv( target, pname, params );
 }
 
-static GLboolean exec_IsEnabled( GLenum cap )
+static GLboolean GLAPIENTRY exec_IsEnabled( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    return ctx->Exec->IsEnabled( cap );
 }
 
-static void exec_PixelStoref( GLenum pname, GLfloat param )
+static void GLAPIENTRY exec_PixelStoref( GLenum pname, GLfloat param )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->PixelStoref( pname, param );
 }
 
-static void exec_PixelStorei( GLenum pname, GLint param )
+static void GLAPIENTRY exec_PixelStorei( GLenum pname, GLint param )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->PixelStorei( pname, param );
 }
 
-static void exec_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
+static void GLAPIENTRY exec_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
 		  GLenum format, GLenum type, GLvoid *pixels )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5844,28 +5844,28 @@
    ctx->Exec->ReadPixels( x, y, width, height, format, type, pixels );
 }
 
-static GLint exec_RenderMode( GLenum mode )
+static GLint GLAPIENTRY exec_RenderMode( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    return ctx->Exec->RenderMode( mode );
 }
 
-static void exec_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )
+static void GLAPIENTRY exec_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->FeedbackBuffer( size, type, buffer );
 }
 
-static void exec_SelectBuffer( GLsizei size, GLuint *buffer )
+static void GLAPIENTRY exec_SelectBuffer( GLsizei size, GLuint *buffer )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->SelectBuffer( size, buffer );
 }
 
-static GLboolean exec_AreTexturesResident(GLsizei n, const GLuint *texName,
+static GLboolean GLAPIENTRY exec_AreTexturesResident(GLsizei n, const GLuint *texName,
 					  GLboolean *residences)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5873,7 +5873,7 @@
    return ctx->Exec->AreTexturesResident( n, texName, residences);
 }
 
-static void exec_ColorPointer(GLint size, GLenum type, GLsizei stride,
+static void GLAPIENTRY exec_ColorPointer(GLint size, GLenum type, GLsizei stride,
 			      const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5881,56 +5881,56 @@
    ctx->Exec->ColorPointer( size, type, stride, ptr);
 }
 
-static void exec_DeleteTextures( GLsizei n, const GLuint *texName)
+static void GLAPIENTRY exec_DeleteTextures( GLsizei n, const GLuint *texName)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->DeleteTextures( n, texName);
 }
 
-static void exec_DisableClientState( GLenum cap )
+static void GLAPIENTRY exec_DisableClientState( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->DisableClientState( cap );
 }
 
-static void exec_EdgeFlagPointer(GLsizei stride, const GLvoid *vptr)
+static void GLAPIENTRY exec_EdgeFlagPointer(GLsizei stride, const GLvoid *vptr)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->EdgeFlagPointer( stride, vptr);
 }
 
-static void exec_EnableClientState( GLenum cap )
+static void GLAPIENTRY exec_EnableClientState( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->EnableClientState( cap );
 }
 
-static void exec_GenTextures( GLsizei n, GLuint *texName )
+static void GLAPIENTRY exec_GenTextures( GLsizei n, GLuint *texName )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GenTextures( n, texName );
 }
 
-static void exec_GetPointerv( GLenum pname, GLvoid **params )
+static void GLAPIENTRY exec_GetPointerv( GLenum pname, GLvoid **params )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetPointerv( pname, params );
 }
 
-static void exec_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
+static void GLAPIENTRY exec_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->IndexPointer( type, stride, ptr);
 }
 
-static void exec_InterleavedArrays(GLenum format, GLsizei stride,
+static void GLAPIENTRY exec_InterleavedArrays(GLenum format, GLsizei stride,
 				   const GLvoid *pointer)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5938,35 +5938,35 @@
    ctx->Exec->InterleavedArrays( format, stride, pointer);
 }
 
-static GLboolean exec_IsTexture( GLuint texture )
+static GLboolean GLAPIENTRY exec_IsTexture( GLuint texture )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    return ctx->Exec->IsTexture( texture );
 }
 
-static void exec_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
+static void GLAPIENTRY exec_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->NormalPointer( type, stride, ptr );
 }
 
-static void exec_PopClientAttrib(void)
+static void GLAPIENTRY exec_PopClientAttrib(void)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->PopClientAttrib();
 }
 
-static void exec_PushClientAttrib(GLbitfield mask)
+static void GLAPIENTRY exec_PushClientAttrib(GLbitfield mask)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->PushClientAttrib( mask);
 }
 
-static void exec_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
+static void GLAPIENTRY exec_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
 				 const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5974,7 +5974,7 @@
    ctx->Exec->TexCoordPointer( size,  type,  stride, ptr);
 }
 
-static void exec_GetCompressedTexImageARB(GLenum target, GLint level,
+static void GLAPIENTRY exec_GetCompressedTexImageARB(GLenum target, GLint level,
 					  GLvoid *img)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5982,7 +5982,7 @@
    ctx->Exec->GetCompressedTexImageARB( target, level, img);
 }
 
-static void exec_VertexPointer(GLint size, GLenum type, GLsizei stride,
+static void GLAPIENTRY exec_VertexPointer(GLint size, GLenum type, GLsizei stride,
 			       const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5990,7 +5990,7 @@
    ctx->Exec->VertexPointer( size, type, stride, ptr);
 }
 
-static void exec_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat,
+static void GLAPIENTRY exec_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat,
 					 GLint x, GLint y, GLsizei width)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -5998,7 +5998,7 @@
    ctx->Exec->CopyConvolutionFilter1D( target, internalFormat, x, y, width);
 }
 
-static void exec_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat,
+static void GLAPIENTRY exec_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat,
 					 GLint x, GLint y, GLsizei width,
 					 GLsizei height)
 {
@@ -6008,7 +6008,7 @@
 				       height);
 }
 
-static void exec_GetColorTable( GLenum target, GLenum format,
+static void GLAPIENTRY exec_GetColorTable( GLenum target, GLenum format,
 				GLenum type, GLvoid *data )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6016,7 +6016,7 @@
    ctx->Exec->GetColorTable( target, format, type, data );
 }
 
-static void exec_GetColorTableParameterfv( GLenum target, GLenum pname,
+static void GLAPIENTRY exec_GetColorTableParameterfv( GLenum target, GLenum pname,
 					   GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6024,7 +6024,7 @@
    ctx->Exec->GetColorTableParameterfv( target, pname, params );
 }
 
-static void exec_GetColorTableParameteriv( GLenum target, GLenum pname,
+static void GLAPIENTRY exec_GetColorTableParameteriv( GLenum target, GLenum pname,
 					   GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6032,7 +6032,7 @@
    ctx->Exec->GetColorTableParameteriv( target, pname, params );
 }
 
-static void exec_GetConvolutionFilter(GLenum target, GLenum format, GLenum type,
+static void GLAPIENTRY exec_GetConvolutionFilter(GLenum target, GLenum format, GLenum type,
 				      GLvoid *image)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6040,7 +6040,7 @@
    ctx->Exec->GetConvolutionFilter( target, format, type, image);
 }
 
-static void exec_GetConvolutionParameterfv(GLenum target, GLenum pname,
+static void GLAPIENTRY exec_GetConvolutionParameterfv(GLenum target, GLenum pname,
 					   GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6048,7 +6048,7 @@
    ctx->Exec->GetConvolutionParameterfv( target, pname, params);
 }
 
-static void exec_GetConvolutionParameteriv(GLenum target, GLenum pname,
+static void GLAPIENTRY exec_GetConvolutionParameteriv(GLenum target, GLenum pname,
 					   GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6056,7 +6056,7 @@
    ctx->Exec->GetConvolutionParameteriv( target, pname, params);
 }
 
-static void exec_GetHistogram(GLenum target, GLboolean reset, GLenum format,
+static void GLAPIENTRY exec_GetHistogram(GLenum target, GLboolean reset, GLenum format,
 			      GLenum type, GLvoid *values)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6064,7 +6064,7 @@
    ctx->Exec->GetHistogram( target, reset, format, type, values);
 }
 
-static void exec_GetHistogramParameterfv(GLenum target, GLenum pname,
+static void GLAPIENTRY exec_GetHistogramParameterfv(GLenum target, GLenum pname,
 					 GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6072,7 +6072,7 @@
    ctx->Exec->GetHistogramParameterfv( target, pname, params);
 }
 
-static void exec_GetHistogramParameteriv(GLenum target, GLenum pname,
+static void GLAPIENTRY exec_GetHistogramParameteriv(GLenum target, GLenum pname,
 					 GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6080,7 +6080,7 @@
    ctx->Exec->GetHistogramParameteriv( target, pname, params);
 }
 
-static void exec_GetMinmax(GLenum target, GLboolean reset, GLenum format,
+static void GLAPIENTRY exec_GetMinmax(GLenum target, GLboolean reset, GLenum format,
 			   GLenum type, GLvoid *values)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6088,7 +6088,7 @@
    ctx->Exec->GetMinmax( target, reset, format, type, values);
 }
 
-static void exec_GetMinmaxParameterfv(GLenum target, GLenum pname,
+static void GLAPIENTRY exec_GetMinmaxParameterfv(GLenum target, GLenum pname,
 				      GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6096,7 +6096,7 @@
    ctx->Exec->GetMinmaxParameterfv( target, pname, params);
 }
 
-static void exec_GetMinmaxParameteriv(GLenum target, GLenum pname,
+static void GLAPIENTRY exec_GetMinmaxParameteriv(GLenum target, GLenum pname,
 				      GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6104,7 +6104,7 @@
    ctx->Exec->GetMinmaxParameteriv( target, pname, params);
 }
 
-static void exec_GetSeparableFilter(GLenum target, GLenum format, GLenum type,
+static void GLAPIENTRY exec_GetSeparableFilter(GLenum target, GLenum format, GLenum type,
 				    GLvoid *row, GLvoid *column, GLvoid *span)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6112,7 +6112,7 @@
    ctx->Exec->GetSeparableFilter( target, format, type, row, column, span);
 }
 
-static void exec_SeparableFilter2D(GLenum target, GLenum internalFormat,
+static void GLAPIENTRY exec_SeparableFilter2D(GLenum target, GLenum internalFormat,
 				   GLsizei width, GLsizei height, GLenum format,
 				   GLenum type, const GLvoid *row,
 				   const GLvoid *column)
@@ -6123,21 +6123,21 @@
 				 type, row, column);
 }
 
-static void exec_GetPixelTexGenParameterivSGIS(GLenum target, GLint *value)
+static void GLAPIENTRY exec_GetPixelTexGenParameterivSGIS(GLenum target, GLint *value)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetPixelTexGenParameterivSGIS( target, value);
 }
 
-static void exec_GetPixelTexGenParameterfvSGIS(GLenum target, GLfloat *value)
+static void GLAPIENTRY exec_GetPixelTexGenParameterfvSGIS(GLenum target, GLfloat *value)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->GetPixelTexGenParameterfvSGIS( target, value);
 }
 
-static void exec_ColorPointerEXT(GLint size, GLenum type, GLsizei stride,
+static void GLAPIENTRY exec_ColorPointerEXT(GLint size, GLenum type, GLsizei stride,
 				 GLsizei count, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6145,7 +6145,7 @@
    ctx->Exec->ColorPointerEXT( size, type, stride, count, ptr);
 }
 
-static void exec_EdgeFlagPointerEXT(GLsizei stride, GLsizei count,
+static void GLAPIENTRY exec_EdgeFlagPointerEXT(GLsizei stride, GLsizei count,
 				    const GLboolean *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6153,7 +6153,7 @@
    ctx->Exec->EdgeFlagPointerEXT( stride, count, ptr);
 }
 
-static void exec_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count,
+static void GLAPIENTRY exec_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count,
                       const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6161,7 +6161,7 @@
    ctx->Exec->IndexPointerEXT( type, stride, count, ptr);
 }
 
-static void exec_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count,
+static void GLAPIENTRY exec_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count,
                        const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6169,7 +6169,7 @@
    ctx->Exec->NormalPointerEXT( type, stride, count, ptr);
 }
 
-static void exec_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
+static void GLAPIENTRY exec_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
 				    GLsizei count, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6177,7 +6177,7 @@
    ctx->Exec->TexCoordPointerEXT( size, type, stride, count, ptr);
 }
 
-static void exec_VertexPointerEXT(GLint size, GLenum type, GLsizei stride,
+static void GLAPIENTRY exec_VertexPointerEXT(GLint size, GLenum type, GLsizei stride,
                        GLsizei count, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6185,21 +6185,21 @@
    ctx->Exec->VertexPointerEXT( size, type, stride, count, ptr);
 }
 
-static void exec_LockArraysEXT(GLint first, GLsizei count)
+static void GLAPIENTRY exec_LockArraysEXT(GLint first, GLsizei count)
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->LockArraysEXT( first, count);
 }
 
-static void exec_UnlockArraysEXT( void )
+static void GLAPIENTRY exec_UnlockArraysEXT( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->UnlockArraysEXT( );
 }
 
-static void exec_ResizeBuffersMESA( void )
+static void GLAPIENTRY exec_ResizeBuffersMESA( void )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
@@ -6207,14 +6207,14 @@
 }
 
 
-static void exec_ClientActiveTextureARB( GLenum target )
+static void GLAPIENTRY exec_ClientActiveTextureARB( GLenum target )
 {
    GET_CURRENT_CONTEXT(ctx);
    FLUSH_VERTICES(ctx, 0);
    ctx->Exec->ClientActiveTextureARB(target);
 }
 
-static void exec_SecondaryColorPointerEXT(GLint size, GLenum type,
+static void GLAPIENTRY exec_SecondaryColorPointerEXT(GLint size, GLenum type,
 			       GLsizei stride, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6222,7 +6222,7 @@
    ctx->Exec->SecondaryColorPointerEXT( size, type, stride, ptr);
 }
 
-static void exec_FogCoordPointerEXT(GLenum type, GLsizei stride,
+static void GLAPIENTRY exec_FogCoordPointerEXT(GLenum type, GLsizei stride,
 				    const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6231,7 +6231,7 @@
 }
 
 /* GL_EXT_multi_draw_arrays */
-static void exec_MultiDrawArraysEXT(GLenum mode, GLint *first,
+static void GLAPIENTRY exec_MultiDrawArraysEXT(GLenum mode, GLint *first,
                                     GLsizei *count, GLsizei primcount)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6240,7 +6240,7 @@
 }
 
 /* GL_EXT_multi_draw_arrays */
-static void exec_MultiDrawElementsEXT(GLenum mode, const GLsizei *count,
+static void GLAPIENTRY exec_MultiDrawElementsEXT(GLenum mode, const GLsizei *count,
                                       GLenum type, const GLvoid **indices,
                                       GLsizei primcount)
 {
@@ -6250,7 +6250,7 @@
 }
 
 /* GL_IBM_multimode_draw_arrays */
-static void exec_MultiModeDrawArraysIBM(const GLenum *mode, const GLint *first,
+static void GLAPIENTRY exec_MultiModeDrawArraysIBM(const GLenum *mode, const GLint *first,
 					const GLsizei *count, GLsizei primcount,
 					GLint modestride)
 {
@@ -6260,7 +6260,7 @@
 }
 
 /* GL_IBM_multimode_draw_arrays */
-static void exec_MultiModeDrawElementsIBM(const GLenum *mode,
+static void GLAPIENTRY exec_MultiModeDrawElementsIBM(const GLenum *mode,
 					  const GLsizei *count,
 					  GLenum type,
 					  const GLvoid * const *indices,
@@ -6804,7 +6804,7 @@
  * Print the commands in a display list.  For debugging only.
  * TODO: many commands aren't handled yet.
  */
-static void print_list( GLcontext *ctx, GLuint list )
+static void GLAPIENTRY print_list( GLcontext *ctx, GLuint list )
 {
    Node *n;
    GLboolean done;
diff --git a/src/mesa/main/dlist.h b/src/mesa/main/dlist.h
index 945cebb..ec2430e 100644
--- a/src/mesa/main/dlist.h
+++ b/src/mesa/main/dlist.h
@@ -42,21 +42,21 @@
 
 extern void _mesa_destroy_list( GLcontext *ctx, GLuint list );
 
-extern void _mesa_CallList( GLuint list );
+extern void GLAPIENTRY _mesa_CallList( GLuint list );
 
-extern void _mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists );
+extern void GLAPIENTRY _mesa_CallLists( GLsizei n, GLenum type, const GLvoid *lists );
 
-extern void _mesa_DeleteLists( GLuint list, GLsizei range );
+extern void GLAPIENTRY _mesa_DeleteLists( GLuint list, GLsizei range );
 
-extern void _mesa_EndList( void );
+extern void GLAPIENTRY _mesa_EndList( void );
 
-extern GLuint _mesa_GenLists( GLsizei range );
+extern GLuint GLAPIENTRY _mesa_GenLists( GLsizei range );
 
-extern GLboolean _mesa_IsList( GLuint list );
+extern GLboolean GLAPIENTRY _mesa_IsList( GLuint list );
 
-extern void _mesa_ListBase( GLuint base );
+extern void GLAPIENTRY _mesa_ListBase( GLuint base );
 
-extern void _mesa_NewList( GLuint list, GLenum mode );
+extern void GLAPIENTRY _mesa_NewList( GLuint list, GLenum mode );
 
 extern void _mesa_init_dlist_table( struct _glapi_table *table,
                                     GLuint tableSize );
@@ -73,11 +73,11 @@
                                void (*destroy)( GLcontext *, void * ),
                                void (*print)( GLcontext *, void * ) );
 
-extern void _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2,
+extern void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2,
 				 GLint j1, GLint j2 );
-extern void _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 );
-extern void _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *lists );
-extern void _mesa_save_CallList( GLuint list );
+extern void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 );
+extern void GLAPIENTRY _mesa_save_CallLists( GLsizei n, GLenum type, const GLvoid *lists );
+extern void GLAPIENTRY _mesa_save_CallList( GLuint list );
 extern void _mesa_init_display_list( GLcontext * ctx );
 
 #else
diff --git a/src/mesa/main/drawpix.c b/src/mesa/main/drawpix.c
index b9b4724..12b9f29 100644
--- a/src/mesa/main/drawpix.c
+++ b/src/mesa/main/drawpix.c
@@ -38,7 +38,7 @@
 /*
  * Execute glDrawPixels
  */
-void
+void GLAPIENTRY
 _mesa_DrawPixels( GLsizei width, GLsizei height,
                   GLenum format, GLenum type, const GLvoid *pixels )
 {
@@ -87,7 +87,7 @@
    }
 }
 
-void
+void GLAPIENTRY
 _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height,
                   GLenum type )
 {
@@ -139,7 +139,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
 		  GLenum format, GLenum type, GLvoid *pixels )
 {
@@ -168,7 +168,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_Bitmap( GLsizei width, GLsizei height,
               GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove,
               const GLubyte *bitmap )
@@ -232,7 +232,7 @@
  * Z-compositing.  Normally, this operation requires two glDrawPixels
  * calls with stencil testing.
  */
-void
+void GLAPIENTRY
 _mesa_DrawDepthPixelsMESA( GLsizei width, GLsizei height,
                            GLenum colorFormat, GLenum colorType,
                            const GLvoid *colors,
diff --git a/src/mesa/main/drawpix.h b/src/mesa/main/drawpix.h
index 478767a..2a2d7de 100644
--- a/src/mesa/main/drawpix.h
+++ b/src/mesa/main/drawpix.h
@@ -31,22 +31,22 @@
 #include "mtypes.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_DrawPixels( GLsizei width, GLsizei height,
                   GLenum format, GLenum type, const GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ReadPixels( GLint x, GLint y, GLsizei width, GLsizei height,
                   GLenum format, GLenum type, GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyPixels( GLint srcx, GLint srcy, GLsizei width, GLsizei height,
                   GLenum type );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_Bitmap( GLsizei width, GLsizei height,
               GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove,
               const GLubyte *bitmap );
diff --git a/src/mesa/main/enable.c b/src/mesa/main/enable.c
index 8cb84d5..f882f94 100644
--- a/src/mesa/main/enable.c
+++ b/src/mesa/main/enable.c
@@ -156,7 +156,7 @@
  * Get's the current context, assures that we're outside glBegin()/glEnd() and
  * calls client_state().
  */
-void
+void GLAPIENTRY
 _mesa_EnableClientState( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -175,7 +175,7 @@
  * Get's the current context, assures that we're outside glBegin()/glEnd() and
  * calls client_state().
  */
-void
+void GLAPIENTRY
 _mesa_DisableClientState( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1009,7 +1009,7 @@
  * Get's the current context, assures that we're outside glBegin()/glEnd() and
  * calls _mesa_set_enable().
  */
-void
+void GLAPIENTRY
 _mesa_Enable( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1029,7 +1029,7 @@
  * Get's the current context, assures that we're outside glBegin()/glEnd() and
  * calls _mesa_set_enable().
  */
-void
+void GLAPIENTRY
 _mesa_Disable( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1056,7 +1056,7 @@
  * For the capabilities associated with extensions verifies that those
  * extensions are effectively present before reporting.
  */
-GLboolean
+GLboolean GLAPIENTRY
 _mesa_IsEnabled( GLenum cap )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/enable.h b/src/mesa/main/enable.h
index eeafb2d..25c90b0 100644
--- a/src/mesa/main/enable.h
+++ b/src/mesa/main/enable.h
@@ -38,19 +38,19 @@
 extern void
 _mesa_set_enable( GLcontext* ctx, GLenum cap, GLboolean state );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Disable( GLenum cap );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Enable( GLenum cap );
 
-extern GLboolean
+extern GLboolean GLAPIENTRY
 _mesa_IsEnabled( GLenum cap );
 
-extern void
+extern void GLAPIENTRY
 _mesa_EnableClientState( GLenum cap );
 
-extern void
+extern void GLAPIENTRY
 _mesa_DisableClientState( GLenum cap );
 
 
diff --git a/src/mesa/main/eval.c b/src/mesa/main/eval.c
index 314ecf0..3f89f9c 100644
--- a/src/mesa/main/eval.c
+++ b/src/mesa/main/eval.c
@@ -417,7 +417,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride,
              GLint order, const GLfloat *points )
 {
@@ -425,7 +425,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride,
              GLint order, const GLdouble *points )
 {
@@ -516,7 +516,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Map2f( GLenum target,
              GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
              GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
@@ -527,7 +527,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Map2d( GLenum target,
              GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
              GLdouble v1, GLdouble v2, GLint vstride, GLint vorder,
@@ -539,7 +539,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetMapdv( GLenum target, GLenum query, GLdouble *v )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -604,7 +604,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetMapfv( GLenum target, GLenum query, GLfloat *v )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -669,7 +669,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetMapiv( GLenum target, GLenum query, GLint *v )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -735,7 +735,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -753,14 +753,14 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 )
 {
    _mesa_MapGrid1f( un, (GLfloat) u1, (GLfloat) u2 );
 }
 
 
-void
+void GLAPIENTRY
 _mesa_MapGrid2f( GLint un, GLfloat u1, GLfloat u2,
                  GLint vn, GLfloat v1, GLfloat v2 )
 {
@@ -788,7 +788,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_MapGrid2d( GLint un, GLdouble u1, GLdouble u2,
                  GLint vn, GLdouble v1, GLdouble v2 )
 {
diff --git a/src/mesa/main/eval.h b/src/mesa/main/eval.h
index 525835c..b3ff0a9 100644
--- a/src/mesa/main/eval.h
+++ b/src/mesa/main/eval.h
@@ -72,47 +72,47 @@
 
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_Map1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride,
              GLint order, const GLfloat *points );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Map2f( GLenum target,
              GLfloat u1, GLfloat u2, GLint ustride, GLint uorder,
              GLfloat v1, GLfloat v2, GLint vstride, GLint vorder,
              const GLfloat *points );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Map1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride,
              GLint order, const GLdouble *points );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Map2d( GLenum target,
              GLdouble u1, GLdouble u2, GLint ustride, GLint uorder,
              GLdouble v1, GLdouble v2, GLint vstride, GLint vorder,
              const GLdouble *points );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MapGrid1f( GLint un, GLfloat u1, GLfloat u2 );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MapGrid1d( GLint un, GLdouble u1, GLdouble u2 );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MapGrid2f( GLint un, GLfloat u1, GLfloat u2,
                  GLint vn, GLfloat v1, GLfloat v2 );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MapGrid2d( GLint un, GLdouble u1, GLdouble u2,
                  GLint vn, GLdouble v1, GLdouble v2 );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetMapdv( GLenum target, GLenum query, GLdouble *v );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetMapfv( GLenum target, GLenum query, GLfloat *v );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetMapiv( GLenum target, GLenum query, GLint *v );
 
 #else
diff --git a/src/mesa/main/feedback.c b/src/mesa/main/feedback.c
index 731fdf8..106f343 100644
--- a/src/mesa/main/feedback.c
+++ b/src/mesa/main/feedback.c
@@ -48,7 +48,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -102,7 +102,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_PassThrough( GLfloat token )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -171,7 +171,7 @@
  * Verifies we're not in selection mode, flushes the vertices and initialize
  * the fields in __GLcontextRec::Select with the given buffer.
  */
-void
+void GLAPIENTRY
 _mesa_SelectBuffer( GLsizei size, GLuint *buffer )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -273,7 +273,7 @@
  * the hit record data in gl_selection. Marks new render mode in
  * __GLcontextRec::NewState.
  */
-void
+void GLAPIENTRY
 _mesa_InitNames( void )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -304,7 +304,7 @@
  *
  * sa __GLcontextRec::Select.
  */
-void
+void GLAPIENTRY
 _mesa_LoadName( GLuint name )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -343,7 +343,7 @@
  *
  * sa __GLcontextRec::Select.
  */
-void
+void GLAPIENTRY
 _mesa_PushName( GLuint name )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -374,7 +374,7 @@
  *
  * sa __GLcontextRec::Select.
  */
-void
+void GLAPIENTRY
 _mesa_PopName( void )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -417,7 +417,7 @@
  * __GLcontextRec::RenderMode and notifies the driver via the
  * dd_function_table::RenderMode callback.
  */
-GLint
+GLint GLAPIENTRY
 _mesa_RenderMode( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/feedback.h b/src/mesa/main/feedback.h
index e1f4703..bbd27e3 100644
--- a/src/mesa/main/feedback.h
+++ b/src/mesa/main/feedback.h
@@ -54,28 +54,28 @@
 extern void _mesa_update_hitflag( GLcontext *ctx, GLfloat z );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_PassThrough( GLfloat token );
 
-extern void
+extern void GLAPIENTRY
 _mesa_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer );
 
-extern void
+extern void GLAPIENTRY
 _mesa_SelectBuffer( GLsizei size, GLuint *buffer );
 
-extern void
+extern void GLAPIENTRY
 _mesa_InitNames( void );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LoadName( GLuint name );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PushName( GLuint name );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PopName( void );
 
-extern GLint
+extern GLint GLAPIENTRY
 _mesa_RenderMode( GLenum mode );
 
 
diff --git a/src/mesa/main/fog.c b/src/mesa/main/fog.c
index b7f967e..d3b8a92 100644
--- a/src/mesa/main/fog.c
+++ b/src/mesa/main/fog.c
@@ -31,14 +31,14 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_Fogf(GLenum pname, GLfloat param)
 {
    _mesa_Fogfv(pname, &param);
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Fogi(GLenum pname, GLint param )
 {
    GLfloat fparam = (GLfloat) param;
@@ -46,7 +46,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Fogiv(GLenum pname, const GLint *params )
 {
    GLfloat p[4];
@@ -73,7 +73,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Fogfv( GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/fog.h b/src/mesa/main/fog.h
index 4a04175..a14d19c 100644
--- a/src/mesa/main/fog.h
+++ b/src/mesa/main/fog.h
@@ -42,16 +42,16 @@
 
 #if _HAVE_FULL_GL
 
-extern void
+extern void GLAPIENTRY
 _mesa_Fogf(GLenum pname, GLfloat param);
 
-extern void
+extern void GLAPIENTRY
 _mesa_Fogi(GLenum pname, GLint param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Fogfv(GLenum pname, const GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Fogiv(GLenum pname, const GLint *params );
 
 extern void _mesa_init_fog( GLcontext * ctx );
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index 6d98840..d2d5b78 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -133,7 +133,7 @@
  * otherwise gets the specified parameter from the current context, converting
  * it value into GLboolean.
  */
-void
+void GLAPIENTRY
 _mesa_GetBooleanv( GLenum pname, GLboolean *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1676,7 +1676,7 @@
  * otherwise gets the specified parameter from the current context, converting
  * it value into GLdouble.
  */
-void
+void GLAPIENTRY
 _mesa_GetDoublev( GLenum pname, GLdouble *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -3213,7 +3213,7 @@
  * otherwise gets the specified parameter from the current context, converting
  * it value into GLfloat.
  */
-void
+void GLAPIENTRY
 _mesa_GetFloatv( GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -4726,7 +4726,7 @@
  * otherwise gets the specified parameter from the current context, converting
  * it value into GLinteger.
  */
-void
+void GLAPIENTRY
 _mesa_GetIntegerv( GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6276,7 +6276,7 @@
  * Tries to get the specified pointer via dd_function_table::GetPointerv,
  * otherwise gets the specified pointer from the current context.
  */
-void
+void GLAPIENTRY
 _mesa_GetPointerv( GLenum pname, GLvoid **params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6371,7 +6371,7 @@
  * Tries to get the string from dd_function_table::GetString, otherwise returns
  * the hardcoded strings.
  */
-const GLubyte *
+const GLubyte * GLAPIENTRY
 _mesa_GetString( GLenum name )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6466,7 +6466,7 @@
  *
  * Returns __GLcontextRec::ErrorValue.
  */
-GLenum
+GLenum GLAPIENTRY
 _mesa_GetError( void )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/get.h b/src/mesa/main/get.h
index 5c7a81e..9b47b23 100644
--- a/src/mesa/main/get.h
+++ b/src/mesa/main/get.h
@@ -35,25 +35,25 @@
 #include "mtypes.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetBooleanv( GLenum pname, GLboolean *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetDoublev( GLenum pname, GLdouble *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetFloatv( GLenum pname, GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetIntegerv( GLenum pname, GLint *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetPointerv( GLenum pname, GLvoid **params );
 
-extern const GLubyte *
+extern const GLubyte * GLAPIENTRY
 _mesa_GetString( GLenum name );
 
-extern GLenum
+extern GLenum GLAPIENTRY
 _mesa_GetError( void );
 
 #endif
diff --git a/src/mesa/main/hint.c b/src/mesa/main/hint.c
index 5af8191..23ab1e6 100644
--- a/src/mesa/main/hint.c
+++ b/src/mesa/main/hint.c
@@ -32,7 +32,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_Hint( GLenum target, GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/hint.h b/src/mesa/main/hint.h
index 57f3823..bfc3887 100644
--- a/src/mesa/main/hint.h
+++ b/src/mesa/main/hint.h
@@ -41,7 +41,7 @@
 
 #if _HAVE_FULL_GL
 
-extern void
+extern void GLAPIENTRY
 _mesa_Hint( GLenum target, GLenum mode );
 
 extern void 
diff --git a/src/mesa/main/histogram.c b/src/mesa/main/histogram.c
index ea2c465..f390a2d 100644
--- a/src/mesa/main/histogram.c
+++ b/src/mesa/main/histogram.c
@@ -662,7 +662,7 @@
  */
 
 
-void
+void GLAPIENTRY
 _mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -729,7 +729,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -792,7 +792,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -839,7 +839,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -886,7 +886,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -912,7 +912,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -938,7 +938,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink)
 {
    GLuint i;
@@ -1021,7 +1021,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Minmax(GLenum target, GLenum internalFormat, GLboolean sink)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1049,7 +1049,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ResetHistogram(GLenum target)
 {
    GLuint i;
@@ -1077,7 +1077,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ResetMinmax(GLenum target)
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/histogram.h b/src/mesa/main/histogram.h
index 548e0ba..67ddce0 100644
--- a/src/mesa/main/histogram.h
+++ b/src/mesa/main/histogram.h
@@ -48,25 +48,35 @@
 _mesa_update_histogram(GLcontext *ctx, GLuint n, const GLfloat rgba[][4]);
 
 
-extern void _mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values);
+extern void GLAPIENTRY 
+_mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values);
 
-extern void _mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+extern void GLAPIENTRY 
+_mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
 
-extern void _mesa_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params);
+extern void GLAPIENTRY 
+_mesa_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params);
 
-extern void _mesa_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params);
+extern void GLAPIENTRY 
+_mesa_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params);
 
-extern void _mesa_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params);
+extern void GLAPIENTRY 
+_mesa_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params);
 
-extern void _mesa_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params);
+extern void GLAPIENTRY 
+_mesa_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params);
 
-extern void _mesa_Histogram(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+extern void GLAPIENTRY 
+_mesa_Histogram(GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
 
-extern void _mesa_Minmax(GLenum target, GLenum internalformat, GLboolean sink);
+extern void GLAPIENTRY 
+_mesa_Minmax(GLenum target, GLenum internalformat, GLboolean sink);
 
-extern void _mesa_ResetHistogram(GLenum target);
+extern void GLAPIENTRY 
+_mesa_ResetHistogram(GLenum target);
 
-extern void _mesa_ResetMinmax(GLenum target);
+extern void GLAPIENTRY 
+_mesa_ResetMinmax(GLenum target);
 
 extern void
 _mesa_update_minmax(GLcontext *ctx, GLuint n, const GLfloat rgba[][4]);
diff --git a/src/mesa/main/light.c b/src/mesa/main/light.c
index 5d47313..4febf6f 100644
--- a/src/mesa/main/light.c
+++ b/src/mesa/main/light.c
@@ -34,7 +34,7 @@
 #include "math/m_matrix.h"
 
 
-void
+void GLAPIENTRY
 _mesa_ShadeModel( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -59,14 +59,14 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Lightf( GLenum light, GLenum pname, GLfloat param )
 {
    _mesa_Lightfv( light, pname, &param );
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -192,14 +192,14 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Lighti( GLenum light, GLenum pname, GLint param )
 {
    _mesa_Lightiv( light, pname, &param );
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Lightiv( GLenum light, GLenum pname, const GLint *params )
 {
    GLfloat fparam[4];
@@ -241,7 +241,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetLightfv( GLenum light, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -291,7 +291,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetLightiv( GLenum light, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -361,7 +361,7 @@
 /**********************************************************************/
 
 
-void
+void GLAPIENTRY
 _mesa_LightModelfv( GLenum pname, const GLfloat *params )
 {
    GLenum newenum;
@@ -428,7 +428,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_LightModeliv( GLenum pname, const GLint *params )
 {
    GLfloat fparam[4];
@@ -453,14 +453,14 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_LightModeli( GLenum pname, GLint param )
 {
    _mesa_LightModeliv( pname, &param );
 }
 
 
-void
+void GLAPIENTRY
 _mesa_LightModelf( GLenum pname, GLfloat param )
 {
    _mesa_LightModelfv( pname, &param );
@@ -649,7 +649,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ColorMaterial( GLenum face, GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -687,7 +687,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -733,7 +733,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetMaterialiv( GLenum face, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/light.h b/src/mesa/main/light.h
index 1eb7f56..1f19019 100644
--- a/src/mesa/main/light.h
+++ b/src/mesa/main/light.h
@@ -34,47 +34,47 @@
 
 #include "mtypes.h"
 
-extern void
+extern void GLAPIENTRY
 _mesa_ShadeModel( GLenum mode );
 
 #if _HAVE_FULL_GL
-extern void
+extern void GLAPIENTRY
 _mesa_ColorMaterial( GLenum face, GLenum mode );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Lightf( GLenum light, GLenum pname, GLfloat param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Lightfv( GLenum light, GLenum pname, const GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Lightiv( GLenum light, GLenum pname, const GLint *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Lighti( GLenum light, GLenum pname, GLint param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LightModelf( GLenum pname, GLfloat param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LightModelfv( GLenum pname, const GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LightModeli( GLenum pname, GLint param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LightModeliv( GLenum pname, const GLint *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetLightfv( GLenum light, GLenum pname, GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetLightiv( GLenum light, GLenum pname, GLint *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetMaterialfv( GLenum face, GLenum pname, GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetMaterialiv( GLenum face, GLenum pname, GLint *params );
 
 
diff --git a/src/mesa/main/lines.c b/src/mesa/main/lines.c
index 27f778a3..122a27f 100644
--- a/src/mesa/main/lines.c
+++ b/src/mesa/main/lines.c
@@ -50,7 +50,7 @@
  * width is different from one. Notifies the driver via the
  * dd_function_table::LineWidth callback.
  */
-void
+void GLAPIENTRY
 _mesa_LineWidth( GLfloat width )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -93,7 +93,7 @@
  * change flushes the vertices and notifies the driver via
  * the dd_function_table::LineStipple callback.
  */
-void
+void GLAPIENTRY
 _mesa_LineStipple( GLint factor, GLushort pattern )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/lines.h b/src/mesa/main/lines.h
index 7305a98..5a47e98 100644
--- a/src/mesa/main/lines.h
+++ b/src/mesa/main/lines.h
@@ -36,13 +36,13 @@
 #include "mtypes.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_LineWidth( GLfloat width );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LineStipple( GLint factor, GLushort pattern );
 
-extern void 
+extern void GLAPIENTRY 
 _mesa_init_line( GLcontext * ctx );
 
 #endif
diff --git a/src/mesa/main/macros.h b/src/mesa/main/macros.h
index fcb63f5..e449ee3 100644
--- a/src/mesa/main/macros.h
+++ b/src/mesa/main/macros.h
@@ -44,45 +44,45 @@
 #define UBYTE_TO_FLOAT(u) _mesa_ubyte_to_float_color_tab[(unsigned int)(u)]
 
 /** Convert GLfloat in [0.0,1.0] to GLubyte in [0,255] */
-#define FLOAT_TO_UBYTE(X)	((GLubyte) (GLint) ((X) * 255.0F))
+#define FLOAT_TO_UBYTE(X)   ((GLubyte) (GLint) ((X) * 255.0F))
 
 
 /** Convert GLbyte in [-128,127] to GLfloat in [-1.0,1.0] */
-#define BYTE_TO_FLOAT(B)	((2.0F * (B) + 1.0F) * (1.0F/255.0F))
+#define BYTE_TO_FLOAT(B)    ((2.0F * (B) + 1.0F) * (1.0F/255.0F))
 
 /** Convert GLfloat in [-1.0,1.0] to GLbyte in [-128,127] */
-#define FLOAT_TO_BYTE(X)	( (((GLint) (255.0F * (X))) - 1) / 2 )
+#define FLOAT_TO_BYTE(X)    ( (((GLint) (255.0F * (X))) - 1) / 2 )
 
 
 /** Convert GLushort in [0,65536] to GLfloat in [0.0,1.0] */
-#define USHORT_TO_FLOAT(S)	((GLfloat) (S) * (1.0F / 65535.0F))
+#define USHORT_TO_FLOAT(S)  ((GLfloat) (S) * (1.0F / 65535.0F))
 
 /** Convert GLfloat in [0.0,1.0] to GLushort in [0,65536] */
-#define FLOAT_TO_USHORT(X)	((GLushort) (GLint) ((X) * 65535.0F))
+#define FLOAT_TO_USHORT(X)  ((GLushort) (GLint) ((X) * 65535.0F))
 
 /** Convert GLshort in [-32768,32767] to GLfloat in [-1.0,1.0] */
-#define SHORT_TO_FLOAT(S)	((2.0F * (S) + 1.0F) * (1.0F/65535.0F))
+#define SHORT_TO_FLOAT(S)   ((2.0F * (S) + 1.0F) * (1.0F/65535.0F))
 
 /** Convert GLfloat in [0.0,1.0] to GLshort in [-32768,32767] */
-#define FLOAT_TO_SHORT(X)	( (((GLint) (65535.0F * (X))) - 1) / 2 )
+#define FLOAT_TO_SHORT(X)   ( (((GLint) (65535.0F * (X))) - 1) / 2 )
 
 
 /** Convert GLuint in [0,4294967295] to GLfloat in [0.0,1.0] */
-#define UINT_TO_FLOAT(U)	((GLfloat) (U) * (1.0F / 4294967295.0F))
+#define UINT_TO_FLOAT(U)    ((GLfloat) (U) * (1.0F / 4294967295.0F))
 
 /** Convert GLfloat in [0.0,1.0] to GLuint in [0,4294967295] */
-#define FLOAT_TO_UINT(X)	((GLuint) ((X) * 4294967295.0))
+#define FLOAT_TO_UINT(X)    ((GLuint) ((X) * 4294967295.0))
 
 
 /** Convert GLint in [-2147483648,2147483647] to GLfloat in [-1.0,1.0] */
-#define INT_TO_FLOAT(I)		((2.0F * (I) + 1.0F) * (1.0F/4294967294.0F))
+#define INT_TO_FLOAT(I)     ((2.0F * (I) + 1.0F) * (1.0F/4294967294.0F))
 
 /** Convert GLfloat in [-1.0,1.0] to GLint in [-2147483648,2147483647] */
 /* causes overflow:
-#define FLOAT_TO_INT(X)		( (((GLint) (4294967294.0F * (X))) - 1) / 2 )
+#define FLOAT_TO_INT(X)     ( (((GLint) (4294967294.0F * (X))) - 1) / 2 )
 */
 /* a close approximation: */
-#define FLOAT_TO_INT(X)		( (GLint) (2147483647.0 * (X)) )
+#define FLOAT_TO_INT(X)     ( (GLint) (2147483647.0 * (X)) )
 
 
 #define BYTE_TO_UBYTE(b)   ((GLubyte) ((b) < 0 ? 0 : (GLubyte) (b)))
@@ -122,13 +122,13 @@
 /*@{*/
 
 /** Zero */
-#define ZERO_4V( DST )	(DST)[0] = (DST)[1] = (DST)[2] = (DST)[3] = 0
+#define ZERO_4V( DST )  (DST)[0] = (DST)[1] = (DST)[2] = (DST)[3] = 0
 
 /** Test for equality */
-#define TEST_EQ_4V(a,b)  ((a)[0] == (b)[0] && 	\
-			  (a)[1] == (b)[1] &&	\
-			  (a)[2] == (b)[2] &&	\
-			  (a)[3] == (b)[3])
+#define TEST_EQ_4V(a,b)  ((a)[0] == (b)[0] &&   \
+              (a)[1] == (b)[1] &&   \
+              (a)[2] == (b)[2] &&   \
+              (a)[3] == (b)[3])
 
 /** Test for equality (unsigned bytes) */
 #if defined(__i386__)
@@ -138,149 +138,148 @@
 #endif
 
 /** Copy a 4-element vector */
-#define COPY_4V( DST, SRC )			\
-do {						\
-   (DST)[0] = (SRC)[0];				\
-   (DST)[1] = (SRC)[1];				\
-   (DST)[2] = (SRC)[2];				\
-   (DST)[3] = (SRC)[3];				\
+#define COPY_4V( DST, SRC )         \
+do {                                \
+   (DST)[0] = (SRC)[0];             \
+   (DST)[1] = (SRC)[1];             \
+   (DST)[2] = (SRC)[2];             \
+   (DST)[3] = (SRC)[3];             \
 } while (0)
 
 /** Copy a 4-element vector with cast */
-#define COPY_4V_CAST( DST, SRC, CAST )		\
-do {						\
-   (DST)[0] = (CAST)(SRC)[0];			\
-   (DST)[1] = (CAST)(SRC)[1];			\
-   (DST)[2] = (CAST)(SRC)[2];			\
-   (DST)[3] = (CAST)(SRC)[3];			\
+#define COPY_4V_CAST( DST, SRC, CAST )  \
+do {                                    \
+   (DST)[0] = (CAST)(SRC)[0];           \
+   (DST)[1] = (CAST)(SRC)[1];           \
+   (DST)[2] = (CAST)(SRC)[2];           \
+   (DST)[3] = (CAST)(SRC)[3];           \
 } while (0)
 
 /** Copy a 4-element unsigned byte vector */
 #if defined(__i386__)
-#define COPY_4UBV(DST, SRC)			\
-do {						\
-   *((GLuint*)(DST)) = *((GLuint*)(SRC));	\
+#define COPY_4UBV(DST, SRC)         \
+do {                                \
+   *((GLuint*)(DST)) = *((GLuint*)(SRC));   \
 } while (0)
 #else
 /* The GLuint cast might fail if DST or SRC are not dword-aligned (RISC) */
-#define COPY_4UBV(DST, SRC)			\
-do {						\
-   (DST)[0] = (SRC)[0];				\
-   (DST)[1] = (SRC)[1];				\
-   (DST)[2] = (SRC)[2];				\
-   (DST)[3] = (SRC)[3];				\
+#define COPY_4UBV(DST, SRC)         \
+do {                                \
+   (DST)[0] = (SRC)[0];             \
+   (DST)[1] = (SRC)[1];             \
+   (DST)[2] = (SRC)[2];             \
+   (DST)[3] = (SRC)[3];             \
 } while (0)
 #endif
 
-/** Copy a 4-element float vector */
-#define COPY_4FV( DST, SRC )			\
-do {						\
-   const GLfloat *_tmp = (SRC);			\
-   (DST)[0] = _tmp[0];				\
-   (DST)[1] = _tmp[1];				\
-   (DST)[2] = _tmp[2];				\
-   (DST)[3] = _tmp[3];				\
+/** Copy a 4-element float vector (Use COPY_FLOAT to avoid loading FPU) */
+#define COPY_4FV( DST, SRC )        \
+do {                                \
+   COPY_FLOAT((DST)[0], (SRC)[0]);  \
+   COPY_FLOAT((DST)[1], (SRC)[1]);  \
+   COPY_FLOAT((DST)[2], (SRC)[2]);  \
+   COPY_FLOAT((DST)[3], (SRC)[3]);  \
 } while (0)
 
 
 /** Copy \p SZ elements into a 4-element vector */
-#define COPY_SZ_4V(DST, SZ, SRC) 		\
-do {						\
-   switch (SZ) {				\
-   case 4: (DST)[3] = (SRC)[3];			\
-   case 3: (DST)[2] = (SRC)[2];			\
-   case 2: (DST)[1] = (SRC)[1];			\
-   case 1: (DST)[0] = (SRC)[0];			\
-   }  						\
+#define COPY_SZ_4V(DST, SZ, SRC)        \
+do {                        \
+   switch (SZ) {                \
+   case 4: (DST)[3] = (SRC)[3];         \
+   case 3: (DST)[2] = (SRC)[2];         \
+   case 2: (DST)[1] = (SRC)[1];         \
+   case 1: (DST)[0] = (SRC)[0];         \
+   }                        \
 } while(0)
 
 /** Copy \p SZ elements into a homegeneous (4-element) vector, giving
  * default values to the remaining */
-#define COPY_CLEAN_4V(DST, SZ, SRC) 		\
-do {						\
-      ASSIGN_4V( DST, 0, 0, 0, 1 );		\
-      COPY_SZ_4V( DST, SZ, SRC );		\
+#define COPY_CLEAN_4V(DST, SZ, SRC)         \
+do {                        \
+      ASSIGN_4V( DST, 0, 0, 0, 1 );     \
+      COPY_SZ_4V( DST, SZ, SRC );       \
 } while (0)
 
 /** Subtraction */
-#define SUB_4V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] = (SRCA)[0] - (SRCB)[0];		\
-      (DST)[1] = (SRCA)[1] - (SRCB)[1];		\
-      (DST)[2] = (SRCA)[2] - (SRCB)[2];		\
-      (DST)[3] = (SRCA)[3] - (SRCB)[3];		\
+#define SUB_4V( DST, SRCA, SRCB )       \
+do {                        \
+      (DST)[0] = (SRCA)[0] - (SRCB)[0];     \
+      (DST)[1] = (SRCA)[1] - (SRCB)[1];     \
+      (DST)[2] = (SRCA)[2] - (SRCB)[2];     \
+      (DST)[3] = (SRCA)[3] - (SRCB)[3];     \
 } while (0)
 
 /** Addition */
-#define ADD_4V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] = (SRCA)[0] + (SRCB)[0];		\
-      (DST)[1] = (SRCA)[1] + (SRCB)[1];		\
-      (DST)[2] = (SRCA)[2] + (SRCB)[2];		\
-      (DST)[3] = (SRCA)[3] + (SRCB)[3];		\
+#define ADD_4V( DST, SRCA, SRCB )       \
+do {                        \
+      (DST)[0] = (SRCA)[0] + (SRCB)[0];     \
+      (DST)[1] = (SRCA)[1] + (SRCB)[1];     \
+      (DST)[2] = (SRCA)[2] + (SRCB)[2];     \
+      (DST)[3] = (SRCA)[3] + (SRCB)[3];     \
 } while (0)
 
 /** Element-wise multiplication */
-#define SCALE_4V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] = (SRCA)[0] * (SRCB)[0];		\
-      (DST)[1] = (SRCA)[1] * (SRCB)[1];		\
-      (DST)[2] = (SRCA)[2] * (SRCB)[2];		\
-      (DST)[3] = (SRCA)[3] * (SRCB)[3];		\
+#define SCALE_4V( DST, SRCA, SRCB )     \
+do {                        \
+      (DST)[0] = (SRCA)[0] * (SRCB)[0];     \
+      (DST)[1] = (SRCA)[1] * (SRCB)[1];     \
+      (DST)[2] = (SRCA)[2] * (SRCB)[2];     \
+      (DST)[3] = (SRCA)[3] * (SRCB)[3];     \
 } while (0)
 
 /** In-place addition */
-#define ACC_4V( DST, SRC )			\
-do {						\
-      (DST)[0] += (SRC)[0];			\
-      (DST)[1] += (SRC)[1];			\
-      (DST)[2] += (SRC)[2];			\
-      (DST)[3] += (SRC)[3];			\
+#define ACC_4V( DST, SRC )          \
+do {                        \
+      (DST)[0] += (SRC)[0];         \
+      (DST)[1] += (SRC)[1];         \
+      (DST)[2] += (SRC)[2];         \
+      (DST)[3] += (SRC)[3];         \
 } while (0)
 
 /** Element-wise multiplication and addition */
-#define ACC_SCALE_4V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] += (SRCA)[0] * (SRCB)[0];	\
-      (DST)[1] += (SRCA)[1] * (SRCB)[1];	\
-      (DST)[2] += (SRCA)[2] * (SRCB)[2];	\
-      (DST)[3] += (SRCA)[3] * (SRCB)[3];	\
+#define ACC_SCALE_4V( DST, SRCA, SRCB )     \
+do {                        \
+      (DST)[0] += (SRCA)[0] * (SRCB)[0];    \
+      (DST)[1] += (SRCA)[1] * (SRCB)[1];    \
+      (DST)[2] += (SRCA)[2] * (SRCB)[2];    \
+      (DST)[3] += (SRCA)[3] * (SRCB)[3];    \
 } while (0)
 
 /** In-place scalar multiplication and addition */
-#define ACC_SCALE_SCALAR_4V( DST, S, SRCB )	\
-do {						\
-      (DST)[0] += S * (SRCB)[0];		\
-      (DST)[1] += S * (SRCB)[1];		\
-      (DST)[2] += S * (SRCB)[2];		\
-      (DST)[3] += S * (SRCB)[3];		\
+#define ACC_SCALE_SCALAR_4V( DST, S, SRCB ) \
+do {                        \
+      (DST)[0] += S * (SRCB)[0];        \
+      (DST)[1] += S * (SRCB)[1];        \
+      (DST)[2] += S * (SRCB)[2];        \
+      (DST)[3] += S * (SRCB)[3];        \
 } while (0)
 
 /** Scalar multiplication */
-#define SCALE_SCALAR_4V( DST, S, SRCB )		\
-do {						\
-      (DST)[0] = S * (SRCB)[0];			\
-      (DST)[1] = S * (SRCB)[1];			\
-      (DST)[2] = S * (SRCB)[2];			\
-      (DST)[3] = S * (SRCB)[3];			\
+#define SCALE_SCALAR_4V( DST, S, SRCB )     \
+do {                        \
+      (DST)[0] = S * (SRCB)[0];         \
+      (DST)[1] = S * (SRCB)[1];         \
+      (DST)[2] = S * (SRCB)[2];         \
+      (DST)[3] = S * (SRCB)[3];         \
 } while (0)
 
 /** In-place scalar multiplication */
-#define SELF_SCALE_SCALAR_4V( DST, S )		\
-do {						\
-      (DST)[0] *= S;				\
-      (DST)[1] *= S;				\
-      (DST)[2] *= S;				\
-      (DST)[3] *= S;				\
+#define SELF_SCALE_SCALAR_4V( DST, S )      \
+do {                        \
+      (DST)[0] *= S;                \
+      (DST)[1] *= S;                \
+      (DST)[2] *= S;                \
+      (DST)[3] *= S;                \
 } while (0)
 
 /** Assignment */
-#define ASSIGN_4V( V, V0, V1, V2, V3 ) 		\
-do { 						\
-    V[0] = V0;					\
-    V[1] = V1;					\
-    V[2] = V2;					\
-    V[3] = V3; 					\
+#define ASSIGN_4V( V, V0, V1, V2, V3 )      \
+do {                        \
+    V[0] = V0;                  \
+    V[1] = V1;                  \
+    V[2] = V2;                  \
+    V[3] = V3;                  \
 } while(0)
 
 /*@}*/
@@ -291,124 +290,124 @@
 /*@{*/
 
 /** Zero */
-#define ZERO_3V( DST )	(DST)[0] = (DST)[1] = (DST)[2] = 0
+#define ZERO_3V( DST )  (DST)[0] = (DST)[1] = (DST)[2] = 0
 
 /** Test for equality */
-#define TEST_EQ_3V(a,b)  ((a)[0] == (b)[0] && 	\
-			  (a)[1] == (b)[1] &&	\
-			  (a)[2] == (b)[2])
+#define TEST_EQ_3V(a,b)  ((a)[0] == (b)[0] &&   \
+              (a)[1] == (b)[1] &&   \
+              (a)[2] == (b)[2])
 
 /** Copy a 3-element vector */
-#define COPY_3V( DST, SRC )			\
-do {						\
-   (DST)[0] = (SRC)[0];				\
-   (DST)[1] = (SRC)[1];				\
-   (DST)[2] = (SRC)[2];				\
+#define COPY_3V( DST, SRC )         \
+do {                        \
+   (DST)[0] = (SRC)[0];             \
+   (DST)[1] = (SRC)[1];             \
+   (DST)[2] = (SRC)[2];             \
 } while (0)
 
 /** Copy a 3-element vector with cast */
-#define COPY_3V_CAST( DST, SRC, CAST )		\
-do {						\
-   (DST)[0] = (CAST)(SRC)[0];			\
-   (DST)[1] = (CAST)(SRC)[1];			\
-   (DST)[2] = (CAST)(SRC)[2];			\
+#define COPY_3V_CAST( DST, SRC, CAST )      \
+do {                        \
+   (DST)[0] = (CAST)(SRC)[0];           \
+   (DST)[1] = (CAST)(SRC)[1];           \
+   (DST)[2] = (CAST)(SRC)[2];           \
 } while (0)
 
 /** Copy a 3-element float vector */
-#define COPY_3FV( DST, SRC )			\
-do {						\
-   const GLfloat *_tmp = (SRC);			\
-   (DST)[0] = _tmp[0];				\
-   (DST)[1] = _tmp[1];				\
-   (DST)[2] = _tmp[2];				\
+#define COPY_3FV( DST, SRC )            \
+do {                        \
+   const GLfloat *_tmp = (SRC);         \
+   (DST)[0] = _tmp[0];              \
+   (DST)[1] = _tmp[1];              \
+   (DST)[2] = _tmp[2];              \
 } while (0)
 
 /** Subtraction */
-#define SUB_3V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] = (SRCA)[0] - (SRCB)[0];		\
-      (DST)[1] = (SRCA)[1] - (SRCB)[1];		\
-      (DST)[2] = (SRCA)[2] - (SRCB)[2];		\
+#define SUB_3V( DST, SRCA, SRCB )       \
+do {                        \
+      (DST)[0] = (SRCA)[0] - (SRCB)[0];     \
+      (DST)[1] = (SRCA)[1] - (SRCB)[1];     \
+      (DST)[2] = (SRCA)[2] - (SRCB)[2];     \
 } while (0)
 
 /** Addition */
-#define ADD_3V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] = (SRCA)[0] + (SRCB)[0];		\
-      (DST)[1] = (SRCA)[1] + (SRCB)[1];		\
-      (DST)[2] = (SRCA)[2] + (SRCB)[2];		\
+#define ADD_3V( DST, SRCA, SRCB )       \
+do {                        \
+      (DST)[0] = (SRCA)[0] + (SRCB)[0];     \
+      (DST)[1] = (SRCA)[1] + (SRCB)[1];     \
+      (DST)[2] = (SRCA)[2] + (SRCB)[2];     \
 } while (0)
 
 /** In-place scalar multiplication */
-#define SCALE_3V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] = (SRCA)[0] * (SRCB)[0];		\
-      (DST)[1] = (SRCA)[1] * (SRCB)[1];		\
-      (DST)[2] = (SRCA)[2] * (SRCB)[2];		\
+#define SCALE_3V( DST, SRCA, SRCB )     \
+do {                        \
+      (DST)[0] = (SRCA)[0] * (SRCB)[0];     \
+      (DST)[1] = (SRCA)[1] * (SRCB)[1];     \
+      (DST)[2] = (SRCA)[2] * (SRCB)[2];     \
 } while (0)
 
 /** In-place element-wise multiplication */
-#define SELF_SCALE_3V( DST, SRC )		\
-do {						\
-      (DST)[0] *= (SRC)[0];			\
-      (DST)[1] *= (SRC)[1];			\
-      (DST)[2] *= (SRC)[2];			\
+#define SELF_SCALE_3V( DST, SRC )       \
+do {                        \
+      (DST)[0] *= (SRC)[0];         \
+      (DST)[1] *= (SRC)[1];         \
+      (DST)[2] *= (SRC)[2];         \
 } while (0)
 
 /** In-place addition */
-#define ACC_3V( DST, SRC )			\
-do {						\
-      (DST)[0] += (SRC)[0];			\
-      (DST)[1] += (SRC)[1];			\
-      (DST)[2] += (SRC)[2];			\
+#define ACC_3V( DST, SRC )          \
+do {                        \
+      (DST)[0] += (SRC)[0];         \
+      (DST)[1] += (SRC)[1];         \
+      (DST)[2] += (SRC)[2];         \
 } while (0)
 
 /** Element-wise multiplication and addition */
-#define ACC_SCALE_3V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] += (SRCA)[0] * (SRCB)[0];	\
-      (DST)[1] += (SRCA)[1] * (SRCB)[1];	\
-      (DST)[2] += (SRCA)[2] * (SRCB)[2];	\
+#define ACC_SCALE_3V( DST, SRCA, SRCB )     \
+do {                        \
+      (DST)[0] += (SRCA)[0] * (SRCB)[0];    \
+      (DST)[1] += (SRCA)[1] * (SRCB)[1];    \
+      (DST)[2] += (SRCA)[2] * (SRCB)[2];    \
 } while (0)
 
 /** Scalar multiplication */
-#define SCALE_SCALAR_3V( DST, S, SRCB ) 	\
-do {						\
-      (DST)[0] = S * (SRCB)[0];			\
-      (DST)[1] = S * (SRCB)[1];			\
-      (DST)[2] = S * (SRCB)[2];			\
+#define SCALE_SCALAR_3V( DST, S, SRCB )     \
+do {                        \
+      (DST)[0] = S * (SRCB)[0];         \
+      (DST)[1] = S * (SRCB)[1];         \
+      (DST)[2] = S * (SRCB)[2];         \
 } while (0)
 
 /** In-place scalar multiplication and addition */
-#define ACC_SCALE_SCALAR_3V( DST, S, SRCB )	\
-do {						\
-      (DST)[0] += S * (SRCB)[0];		\
-      (DST)[1] += S * (SRCB)[1];		\
-      (DST)[2] += S * (SRCB)[2];		\
+#define ACC_SCALE_SCALAR_3V( DST, S, SRCB ) \
+do {                        \
+      (DST)[0] += S * (SRCB)[0];        \
+      (DST)[1] += S * (SRCB)[1];        \
+      (DST)[2] += S * (SRCB)[2];        \
 } while (0)
 
 /** In-place scalar multiplication */
-#define SELF_SCALE_SCALAR_3V( DST, S )		\
-do {						\
-      (DST)[0] *= S;				\
-      (DST)[1] *= S;				\
-      (DST)[2] *= S;				\
+#define SELF_SCALE_SCALAR_3V( DST, S )      \
+do {                        \
+      (DST)[0] *= S;                \
+      (DST)[1] *= S;                \
+      (DST)[2] *= S;                \
 } while (0)
 
 /** In-place scalar addition */
-#define ACC_SCALAR_3V( DST, S ) 		\
-do {						\
-      (DST)[0] += S;				\
-      (DST)[1] += S;				\
-      (DST)[2] += S;				\
+#define ACC_SCALAR_3V( DST, S )         \
+do {                        \
+      (DST)[0] += S;                \
+      (DST)[1] += S;                \
+      (DST)[2] += S;                \
 } while (0)
 
 /** Assignment */
-#define ASSIGN_3V( V, V0, V1, V2 )	\
-do { 				 	\
-    V[0] = V0; 				\
-    V[1] = V1; 				\
-    V[2] = V2; 				\
+#define ASSIGN_3V( V, V0, V1, V2 )  \
+do {                    \
+    V[0] = V0;              \
+    V[1] = V1;              \
+    V[2] = V2;              \
 } while(0)
 
 /*@}*/
@@ -419,91 +418,91 @@
 /*@{*/
 
 /** Zero */
-#define ZERO_2V( DST )	(DST)[0] = (DST)[1] = 0
+#define ZERO_2V( DST )  (DST)[0] = (DST)[1] = 0
 
 /** Copy a 2-element vector */
-#define COPY_2V( DST, SRC )			\
-do {						\
-   (DST)[0] = (SRC)[0];				\
-   (DST)[1] = (SRC)[1];				\
+#define COPY_2V( DST, SRC )         \
+do {                        \
+   (DST)[0] = (SRC)[0];             \
+   (DST)[1] = (SRC)[1];             \
 } while (0)
 
 /** Copy a 2-element vector with cast */
-#define COPY_2V_CAST( DST, SRC, CAST )		\
-do {						\
-   (DST)[0] = (CAST)(SRC)[0];			\
-   (DST)[1] = (CAST)(SRC)[1];			\
+#define COPY_2V_CAST( DST, SRC, CAST )      \
+do {                        \
+   (DST)[0] = (CAST)(SRC)[0];           \
+   (DST)[1] = (CAST)(SRC)[1];           \
 } while (0)
 
 /** Copy a 2-element float vector */
-#define COPY_2FV( DST, SRC )			\
-do {						\
-   const GLfloat *_tmp = (SRC);			\
-   (DST)[0] = _tmp[0];				\
-   (DST)[1] = _tmp[1];				\
+#define COPY_2FV( DST, SRC )            \
+do {                        \
+   const GLfloat *_tmp = (SRC);         \
+   (DST)[0] = _tmp[0];              \
+   (DST)[1] = _tmp[1];              \
 } while (0)
 
 /** Subtraction */
-#define SUB_2V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] = (SRCA)[0] - (SRCB)[0];		\
-      (DST)[1] = (SRCA)[1] - (SRCB)[1];		\
+#define SUB_2V( DST, SRCA, SRCB )       \
+do {                        \
+      (DST)[0] = (SRCA)[0] - (SRCB)[0];     \
+      (DST)[1] = (SRCA)[1] - (SRCB)[1];     \
 } while (0)
 
 /** Addition */
-#define ADD_2V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] = (SRCA)[0] + (SRCB)[0];		\
-      (DST)[1] = (SRCA)[1] + (SRCB)[1];		\
+#define ADD_2V( DST, SRCA, SRCB )       \
+do {                        \
+      (DST)[0] = (SRCA)[0] + (SRCB)[0];     \
+      (DST)[1] = (SRCA)[1] + (SRCB)[1];     \
 } while (0)
 
 /** In-place scalar multiplication */
-#define SCALE_2V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] = (SRCA)[0] * (SRCB)[0];		\
-      (DST)[1] = (SRCA)[1] * (SRCB)[1];		\
+#define SCALE_2V( DST, SRCA, SRCB )     \
+do {                        \
+      (DST)[0] = (SRCA)[0] * (SRCB)[0];     \
+      (DST)[1] = (SRCA)[1] * (SRCB)[1];     \
 } while (0)
 
 /** In-place addition */
-#define ACC_2V( DST, SRC )			\
-do {						\
-      (DST)[0] += (SRC)[0];			\
-      (DST)[1] += (SRC)[1];			\
+#define ACC_2V( DST, SRC )          \
+do {                        \
+      (DST)[0] += (SRC)[0];         \
+      (DST)[1] += (SRC)[1];         \
 } while (0)
 
 /** Element-wise multiplication and addition */
-#define ACC_SCALE_2V( DST, SRCA, SRCB )		\
-do {						\
-      (DST)[0] += (SRCA)[0] * (SRCB)[0];	\
-      (DST)[1] += (SRCA)[1] * (SRCB)[1];	\
+#define ACC_SCALE_2V( DST, SRCA, SRCB )     \
+do {                        \
+      (DST)[0] += (SRCA)[0] * (SRCB)[0];    \
+      (DST)[1] += (SRCA)[1] * (SRCB)[1];    \
 } while (0)
 
 /** Scalar multiplication */
-#define SCALE_SCALAR_2V( DST, S, SRCB ) 	\
-do {						\
-      (DST)[0] = S * (SRCB)[0];			\
-      (DST)[1] = S * (SRCB)[1];			\
+#define SCALE_SCALAR_2V( DST, S, SRCB )     \
+do {                        \
+      (DST)[0] = S * (SRCB)[0];         \
+      (DST)[1] = S * (SRCB)[1];         \
 } while (0)
 
 /** In-place scalar multiplication and addition */
-#define ACC_SCALE_SCALAR_2V( DST, S, SRCB )	\
-do {						\
-      (DST)[0] += S * (SRCB)[0];		\
-      (DST)[1] += S * (SRCB)[1];		\
+#define ACC_SCALE_SCALAR_2V( DST, S, SRCB ) \
+do {                        \
+      (DST)[0] += S * (SRCB)[0];        \
+      (DST)[1] += S * (SRCB)[1];        \
 } while (0)
 
 /** In-place scalar multiplication */
-#define SELF_SCALE_SCALAR_2V( DST, S )		\
-do {						\
-      (DST)[0] *= S;				\
-      (DST)[1] *= S;				\
+#define SELF_SCALE_SCALAR_2V( DST, S )      \
+do {                        \
+      (DST)[0] *= S;                \
+      (DST)[1] *= S;                \
 } while (0)
 
 /** In-place scalar addition */
-#define ACC_SCALAR_2V( DST, S ) 		\
-do {						\
-      (DST)[0] += S;				\
-      (DST)[1] += S;				\
+#define ACC_SCALAR_2V( DST, S )         \
+do {                        \
+      (DST)[0] += S;                \
+      (DST)[1] += S;                \
 } while (0)
 
 
@@ -514,79 +513,79 @@
  * \note \p OUT argument is evaluated twice!
  * \note Be wary of using *coord++ as an argument to any of these macros!
  */
-#define LINTERP(T, OUT, IN)	((OUT) + (T) * ((IN) - (OUT)))
+#define LINTERP(T, OUT, IN) ((OUT) + (T) * ((IN) - (OUT)))
 
 /* Can do better with integer math
  */
-#define INTERP_UB( t, dstub, outub, inub )	\
-do {						\
-   GLfloat inf = UBYTE_TO_FLOAT( inub );	\
-   GLfloat outf = UBYTE_TO_FLOAT( outub );	\
-   GLfloat dstf = LINTERP( t, outf, inf );	\
-   UNCLAMPED_FLOAT_TO_UBYTE( dstub, dstf );	\
+#define INTERP_UB( t, dstub, outub, inub )  \
+do {                        \
+   GLfloat inf = UBYTE_TO_FLOAT( inub );    \
+   GLfloat outf = UBYTE_TO_FLOAT( outub );  \
+   GLfloat dstf = LINTERP( t, outf, inf );  \
+   UNCLAMPED_FLOAT_TO_UBYTE( dstub, dstf ); \
 } while (0)
 
-#define INTERP_CHAN( t, dstc, outc, inc )	\
-do {						\
-   GLfloat inf = CHAN_TO_FLOAT( inc );		\
-   GLfloat outf = CHAN_TO_FLOAT( outc );	\
-   GLfloat dstf = LINTERP( t, outf, inf );	\
-   UNCLAMPED_FLOAT_TO_CHAN( dstc, dstf );	\
+#define INTERP_CHAN( t, dstc, outc, inc )   \
+do {                        \
+   GLfloat inf = CHAN_TO_FLOAT( inc );      \
+   GLfloat outf = CHAN_TO_FLOAT( outc );    \
+   GLfloat dstf = LINTERP( t, outf, inf );  \
+   UNCLAMPED_FLOAT_TO_CHAN( dstc, dstf );   \
 } while (0)
 
-#define INTERP_UI( t, dstui, outui, inui )	\
+#define INTERP_UI( t, dstui, outui, inui )  \
    dstui = (GLuint) (GLint) LINTERP( (t), (GLfloat) (outui), (GLfloat) (inui) )
 
-#define INTERP_F( t, dstf, outf, inf )		\
+#define INTERP_F( t, dstf, outf, inf )      \
    dstf = LINTERP( t, outf, inf )
 
-#define INTERP_4F( t, dst, out, in )		\
-do {						\
-   dst[0] = LINTERP( (t), (out)[0], (in)[0] );	\
-   dst[1] = LINTERP( (t), (out)[1], (in)[1] );	\
-   dst[2] = LINTERP( (t), (out)[2], (in)[2] );	\
-   dst[3] = LINTERP( (t), (out)[3], (in)[3] );	\
+#define INTERP_4F( t, dst, out, in )        \
+do {                        \
+   dst[0] = LINTERP( (t), (out)[0], (in)[0] );  \
+   dst[1] = LINTERP( (t), (out)[1], (in)[1] );  \
+   dst[2] = LINTERP( (t), (out)[2], (in)[2] );  \
+   dst[3] = LINTERP( (t), (out)[3], (in)[3] );  \
 } while (0)
 
-#define INTERP_3F( t, dst, out, in )		\
-do {						\
-   dst[0] = LINTERP( (t), (out)[0], (in)[0] );	\
-   dst[1] = LINTERP( (t), (out)[1], (in)[1] );	\
-   dst[2] = LINTERP( (t), (out)[2], (in)[2] );	\
+#define INTERP_3F( t, dst, out, in )        \
+do {                        \
+   dst[0] = LINTERP( (t), (out)[0], (in)[0] );  \
+   dst[1] = LINTERP( (t), (out)[1], (in)[1] );  \
+   dst[2] = LINTERP( (t), (out)[2], (in)[2] );  \
 } while (0)
 
-#define INTERP_4CHAN( t, dst, out, in )			\
-do {							\
-   INTERP_CHAN( (t), (dst)[0], (out)[0], (in)[0] );	\
-   INTERP_CHAN( (t), (dst)[1], (out)[1], (in)[1] );	\
-   INTERP_CHAN( (t), (dst)[2], (out)[2], (in)[2] );	\
-   INTERP_CHAN( (t), (dst)[3], (out)[3], (in)[3] );	\
+#define INTERP_4CHAN( t, dst, out, in )         \
+do {                            \
+   INTERP_CHAN( (t), (dst)[0], (out)[0], (in)[0] ); \
+   INTERP_CHAN( (t), (dst)[1], (out)[1], (in)[1] ); \
+   INTERP_CHAN( (t), (dst)[2], (out)[2], (in)[2] ); \
+   INTERP_CHAN( (t), (dst)[3], (out)[3], (in)[3] ); \
 } while (0)
 
-#define INTERP_3CHAN( t, dst, out, in )			\
-do {							\
-   INTERP_CHAN( (t), (dst)[0], (out)[0], (in)[0] );	\
-   INTERP_CHAN( (t), (dst)[1], (out)[1], (in)[1] );	\
-   INTERP_CHAN( (t), (dst)[2], (out)[2], (in)[2] );	\
+#define INTERP_3CHAN( t, dst, out, in )         \
+do {                            \
+   INTERP_CHAN( (t), (dst)[0], (out)[0], (in)[0] ); \
+   INTERP_CHAN( (t), (dst)[1], (out)[1], (in)[1] ); \
+   INTERP_CHAN( (t), (dst)[2], (out)[2], (in)[2] ); \
 } while (0)
 
-#define INTERP_SZ( t, vec, to, out, in, sz )				\
-do {									\
-   switch (sz) {							\
-   case 4: vec[to][3] = LINTERP( (t), (vec)[out][3], (vec)[in][3] );	\
-   case 3: vec[to][2] = LINTERP( (t), (vec)[out][2], (vec)[in][2] );	\
-   case 2: vec[to][1] = LINTERP( (t), (vec)[out][1], (vec)[in][1] );	\
-   case 1: vec[to][0] = LINTERP( (t), (vec)[out][0], (vec)[in][0] );	\
-   }									\
+#define INTERP_SZ( t, vec, to, out, in, sz )                \
+do {                                    \
+   switch (sz) {                            \
+   case 4: vec[to][3] = LINTERP( (t), (vec)[out][3], (vec)[in][3] );    \
+   case 3: vec[to][2] = LINTERP( (t), (vec)[out][2], (vec)[in][2] );    \
+   case 2: vec[to][1] = LINTERP( (t), (vec)[out][1], (vec)[in][1] );    \
+   case 1: vec[to][0] = LINTERP( (t), (vec)[out][0], (vec)[in][0] );    \
+   }                                    \
 } while(0)
 
 
 
 /** Assign scalers to short vectors */
-#define ASSIGN_2V( V, V0, V1 )	\
-do { 				\
-    V[0] = V0; 			\
-    V[1] = V1; 			\
+#define ASSIGN_2V( V, V0, V1 )  \
+do {                \
+    V[0] = V0;          \
+    V[1] = V1;          \
 } while(0)
 
 /*@}*/
@@ -616,31 +615,31 @@
 
 /** Dot product of two 4-element vectors */
 #define DOT4( a, b )  ( (a)[0]*(b)[0] + (a)[1]*(b)[1] + \
-			(a)[2]*(b)[2] + (a)[3]*(b)[3] )
+            (a)[2]*(b)[2] + (a)[3]*(b)[3] )
 
 /** Dot product of two 4-element vectors */
 #define DOT4V(v,a,b,c,d) (v[0]*(a) + v[1]*(b) + v[2]*(c) + v[3]*(d))
 
 
 /** Cross product of two 3-element vectors */
-#define CROSS3(n, u, v) 			\
-do {						\
-   (n)[0] = (u)[1]*(v)[2] - (u)[2]*(v)[1]; 	\
-   (n)[1] = (u)[2]*(v)[0] - (u)[0]*(v)[2]; 	\
-   (n)[2] = (u)[0]*(v)[1] - (u)[1]*(v)[0];	\
+#define CROSS3(n, u, v)             \
+do {                        \
+   (n)[0] = (u)[1]*(v)[2] - (u)[2]*(v)[1];  \
+   (n)[1] = (u)[2]*(v)[0] - (u)[0]*(v)[2];  \
+   (n)[2] = (u)[0]*(v)[1] - (u)[1]*(v)[0];  \
 } while (0)
 
 
 /* Normalize a 3-element vector to unit length. */
-#define NORMALIZE_3FV( V )			\
-do {						\
-   GLfloat len = (GLfloat) LEN_SQUARED_3FV(V);	\
-   if (len) {					\
-      len = INV_SQRTF(len);			\
-      (V)[0] = (GLfloat) ((V)[0] * len);	\
-      (V)[1] = (GLfloat) ((V)[1] * len);	\
-      (V)[2] = (GLfloat) ((V)[2] * len);	\
-   }						\
+#define NORMALIZE_3FV( V )          \
+do {                        \
+   GLfloat len = (GLfloat) LEN_SQUARED_3FV(V);  \
+   if (len) {                   \
+      len = INV_SQRTF(len);         \
+      (V)[0] = (GLfloat) ((V)[0] * len);    \
+      (V)[1] = (GLfloat) ((V)[1] * len);    \
+      (V)[2] = (GLfloat) ((V)[2] * len);    \
+   }                        \
 } while(0)
 
 #define LEN_3FV( V ) (SQRTF((V)[0]*(V)[0]+(V)[1]*(V)[1]+(V)[2]*(V)[2]))
diff --git a/src/mesa/main/matrix.c b/src/mesa/main/matrix.c
index e74e172..76ca284 100644
--- a/src/mesa/main/matrix.c
+++ b/src/mesa/main/matrix.c
@@ -61,7 +61,7 @@
  * the top matrix of the current matrix stack and sets
  * __GLcontextRec::NewState.
  */
-void
+void GLAPIENTRY
 _mesa_Frustum( GLdouble left, GLdouble right,
                GLdouble bottom, GLdouble top,
                GLdouble nearval, GLdouble farval )
@@ -103,7 +103,7 @@
  * the top matrix of the current matrix stack and sets
  * __GLcontextRec::NewState.
  */
-void
+void GLAPIENTRY
 _mesa_Ortho( GLdouble left, GLdouble right,
              GLdouble bottom, GLdouble top,
              GLdouble nearval, GLdouble farval )
@@ -142,7 +142,7 @@
  * __GLcontextRec::CurrentStack and gl_transform_attrib::MatrixMode with the
  * specified matrix stack.
  */
-void
+void GLAPIENTRY
 _mesa_MatrixMode( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -222,7 +222,7 @@
  * matrix in the stack. Marks __GLcontextRec::NewState with the stack dirty
  * flag.
  */
-void
+void GLAPIENTRY
 _mesa_PushMatrix( void )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -254,7 +254,7 @@
  * moves the stack head down. Marks __GLcontextRec::NewState with the dirty
  * stack flag.
  */
-void
+void GLAPIENTRY
 _mesa_PopMatrix( void )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -284,7 +284,7 @@
  * matrix in the current stack. Marks __GLcontextRec::NewState with the stack
  * dirty flag.
  */
-void
+void GLAPIENTRY
 _mesa_LoadIdentity( void )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -309,7 +309,7 @@
  * in the current stack and the given matrix. Marks __GLcontextRec::NewState
  * with the dirty stack flag.
  */
-void
+void GLAPIENTRY
 _mesa_LoadMatrixf( const GLfloat *m )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -339,7 +339,7 @@
  * matrix in the current stack and the given matrix. Marks
  * __GLcontextRec::NewState with the dirty stack flag.
  */
-void
+void GLAPIENTRY
 _mesa_MultMatrixf( const GLfloat *m )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -371,7 +371,7 @@
  * matrix in the current stack and the given parameters. Marks
  * __GLcontextRec::NewState with the dirty stack flag.
  */
-void
+void GLAPIENTRY
 _mesa_Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -396,7 +396,7 @@
  * matrix in the current stack and the given parameters. Marks
  * __GLcontextRec::NewState with the dirty stack flag.
  */
-void
+void GLAPIENTRY
 _mesa_Scalef( GLfloat x, GLfloat y, GLfloat z )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -419,7 +419,7 @@
  * matrix in the current stack and the given parameters. Marks
  * __GLcontextRec::NewState with the dirty stack flag.
  */
-void
+void GLAPIENTRY
 _mesa_Translatef( GLfloat x, GLfloat y, GLfloat z )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -430,7 +430,7 @@
 
  
 #if _HAVE_FULL_GL
-void
+void GLAPIENTRY
 _mesa_LoadMatrixd( const GLdouble *m )
 {
    GLint i;
@@ -441,7 +441,7 @@
    _mesa_LoadMatrixf(f);
 }
 
-void
+void GLAPIENTRY
 _mesa_MultMatrixd( const GLdouble *m )
 {
    GLint i;
@@ -453,21 +453,21 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Rotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z )
 {
    _mesa_Rotatef((GLfloat) angle, (GLfloat) x, (GLfloat) y, (GLfloat) z);
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Scaled( GLdouble x, GLdouble y, GLdouble z )
 {
    _mesa_Scalef((GLfloat) x, (GLfloat) y, (GLfloat) z);
 }
 
 
-void
+void GLAPIENTRY
 _mesa_Translated( GLdouble x, GLdouble y, GLdouble z )
 {
    _mesa_Translatef((GLfloat) x, (GLfloat) y, (GLfloat) z);
@@ -476,7 +476,7 @@
 
 
 #if _HAVE_FULL_GL
-void
+void GLAPIENTRY
 _mesa_LoadTransposeMatrixfARB( const GLfloat *m )
 {
    GLfloat tm[16];
@@ -486,7 +486,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_LoadTransposeMatrixdARB( const GLdouble *m )
 {
    GLfloat tm[16];
@@ -496,7 +496,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_MultTransposeMatrixfARB( const GLfloat *m )
 {
    GLfloat tm[16];
@@ -506,7 +506,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_MultTransposeMatrixdARB( const GLdouble *m )
 {
    GLfloat tm[16];
@@ -528,7 +528,7 @@
  * Flushes the vertices and calls _mesa_set_viewport() with the given
  * parameters.
  */
-void
+void GLAPIENTRY
 _mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -625,7 +625,7 @@
 
 
 #if _HAVE_FULL_GL
-void
+void GLAPIENTRY
 _mesa_DepthRange( GLclampd nearval, GLclampd farval )
 {
    /*
diff --git a/src/mesa/main/matrix.h b/src/mesa/main/matrix.h
index b81ab84..3876986 100644
--- a/src/mesa/main/matrix.h
+++ b/src/mesa/main/matrix.h
@@ -35,77 +35,77 @@
 #include "mtypes.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_Frustum( GLdouble left, GLdouble right,
                GLdouble bottom, GLdouble top,
                GLdouble nearval, GLdouble farval );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Ortho( GLdouble left, GLdouble right,
              GLdouble bottom, GLdouble top,
              GLdouble nearval, GLdouble farval );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PushMatrix( void );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PopMatrix( void );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LoadIdentity( void );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LoadMatrixf( const GLfloat *m );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LoadMatrixd( const GLdouble *m );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MatrixMode( GLenum mode );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MultMatrixf( const GLfloat *m );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MultMatrixd( const GLdouble *m );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Rotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Rotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Scalef( GLfloat x, GLfloat y, GLfloat z );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Scaled( GLdouble x, GLdouble y, GLdouble z );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Translatef( GLfloat x, GLfloat y, GLfloat z );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Translated( GLdouble x, GLdouble y, GLdouble z );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LoadTransposeMatrixfARB( const GLfloat *m );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LoadTransposeMatrixdARB( const GLdouble *m );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MultTransposeMatrixfARB( const GLfloat *m );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MultTransposeMatrixdARB( const GLdouble *m );
 
-extern void
+extern void GLAPIENTRY
 _mesa_Viewport( GLint x, GLint y, GLsizei width, GLsizei height );
 
-extern void
+extern void 
 _mesa_set_viewport( GLcontext *ctx, GLint x, GLint y, GLsizei width, GLsizei height );
 
-extern void
+extern void GLAPIENTRY
 _mesa_DepthRange( GLclampd nearval, GLclampd farval );
 
 
diff --git a/src/mesa/main/nvprogram.c b/src/mesa/main/nvprogram.c
index 2fb2077..e51a8c2 100644
--- a/src/mesa/main/nvprogram.c
+++ b/src/mesa/main/nvprogram.c
@@ -49,7 +49,7 @@
  * Execute a vertex state program.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params)
 {
    struct vertex_program *vprog;
@@ -81,7 +81,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-GLboolean _mesa_AreProgramsResidentNV(GLsizei n, const GLuint *ids,
+GLboolean GLAPIENTRY _mesa_AreProgramsResidentNV(GLsizei n, const GLuint *ids,
                                       GLboolean *residences)
 {
    GLint i, j;
@@ -128,7 +128,7 @@
  * Request that a set of programs be resident in hardware.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_RequestResidentProgramsNV(GLsizei n, const GLuint *ids)
 {
    GLint i;
@@ -166,7 +166,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_GetProgramParameterfvNV(GLenum target, GLuint index,
                               GLenum pname, GLfloat *params)
 {
@@ -201,7 +201,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_GetProgramParameterdvNV(GLenum target, GLuint index,
                               GLenum pname, GLdouble *params)
 {
@@ -236,7 +236,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_GetProgramivNV(GLuint id, GLenum pname, GLint *params)
 {
    struct program *prog;
@@ -273,7 +273,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_GetProgramStringNV(GLuint id, GLenum pname, GLubyte *program)
 {
    struct program *prog;
@@ -307,7 +307,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_GetTrackMatrixivNV(GLenum target, GLuint address,
                          GLenum pname, GLint *params)
 {
@@ -349,7 +349,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_GetVertexAttribdvNV(GLuint index, GLenum pname, GLdouble *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -385,7 +385,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_GetVertexAttribfvNV(GLuint index, GLenum pname, GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -421,7 +421,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_GetVertexAttribivNV(GLuint index, GLenum pname, GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -468,7 +468,7 @@
  * \note Not compiled into display lists.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_GetVertexAttribPointervNV(GLuint index, GLenum pname, GLvoid **pointer)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -493,7 +493,7 @@
  * Load/parse/compile a program.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_LoadProgramNV(GLenum target, GLuint id, GLsizei len,
                     const GLubyte *program)
 {
@@ -555,7 +555,7 @@
  * Set a program parameter register.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramParameter4dNV(GLenum target, GLuint index,
                            GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
@@ -568,7 +568,7 @@
  * Set a program parameter register.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramParameter4dvNV(GLenum target, GLuint index,
                             const GLdouble *params)
 {
@@ -582,7 +582,7 @@
  * Set a program parameter register.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramParameter4fNV(GLenum target, GLuint index,
                            GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
@@ -609,7 +609,7 @@
  * Set a program parameter register.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramParameter4fvNV(GLenum target, GLuint index,
                             const GLfloat *params)
 {
@@ -623,7 +623,7 @@
  * Set a sequence of program parameter registers.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramParameters4dvNV(GLenum target, GLuint index,
                              GLuint num, const GLdouble *params)
 {
@@ -655,7 +655,7 @@
  * Set a sequence of program parameter registers.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_ProgramParameters4fvNV(GLenum target, GLuint index,
                              GLuint num, const GLfloat *params)
 {
@@ -685,7 +685,7 @@
  * Setup tracking of matrices into program parameter registers.
  * \note Called from the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _mesa_TrackMatrixNV(GLenum target, GLuint address,
                     GLenum matrix, GLenum transform)
 {
@@ -743,7 +743,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name,
                                 GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
@@ -779,7 +779,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ProgramNamedParameter4fvNV(GLuint id, GLsizei len, const GLubyte *name,
                                  const float v[])
 {
@@ -787,7 +787,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ProgramNamedParameter4dNV(GLuint id, GLsizei len, const GLubyte *name,
                                 GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
@@ -796,7 +796,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte *name,
                                  const double v[])
 {
@@ -806,7 +806,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte *name,
                                    GLfloat *params)
 {
@@ -844,7 +844,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte *name,
                                    GLdouble *params)
 {
diff --git a/src/mesa/main/nvprogram.h b/src/mesa/main/nvprogram.h
index f505a84..dcea772 100644
--- a/src/mesa/main/nvprogram.h
+++ b/src/mesa/main/nvprogram.h
@@ -30,88 +30,88 @@
 #define NVPROGRAM_H
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ExecuteProgramNV(GLenum target, GLuint id, const GLfloat *params);
 
-extern GLboolean
+extern GLboolean GLAPIENTRY 
 _mesa_AreProgramsResidentNV(GLsizei n, const GLuint *ids, GLboolean *residences);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RequestResidentProgramsNV(GLsizei n, const GLuint *ids);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramParameterfvNV(GLenum target, GLuint index, GLenum pname, GLfloat *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramParameterdvNV(GLenum target, GLuint index, GLenum pname, GLdouble *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramivNV(GLuint id, GLenum pname, GLint *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramStringNV(GLuint id, GLenum pname, GLubyte *program);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTrackMatrixivNV(GLenum target, GLuint address, GLenum pname, GLint *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetVertexAttribdvNV(GLuint index, GLenum pname, GLdouble *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetVertexAttribfvNV(GLuint index, GLenum pname, GLfloat *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetVertexAttribivNV(GLuint index, GLenum pname, GLint *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetVertexAttribPointervNV(GLuint index, GLenum pname, GLvoid **pointer);
 
-extern void
+extern void GLAPIENTRY
 _mesa_LoadProgramNV(GLenum target, GLuint id, GLsizei len, const GLubyte *program);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramParameter4dNV(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramParameter4dvNV(GLenum target, GLuint index, const GLdouble *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramParameter4fNV(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramParameter4fvNV(GLenum target, GLuint index, const GLfloat *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramParameters4dvNV(GLenum target, GLuint index, GLuint num, const GLdouble *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramParameters4fvNV(GLenum target, GLuint index, GLuint num, const GLfloat *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_TrackMatrixNV(GLenum target, GLuint address, GLenum matrix, GLenum transform);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramNamedParameter4fNV(GLuint id, GLsizei len, const GLubyte *name,
                                 GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramNamedParameter4fvNV(GLuint id, GLsizei len, const GLubyte *name,
                                  const float v[]);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramNamedParameter4dNV(GLuint id, GLsizei len, const GLubyte *name,
                                 GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_ProgramNamedParameter4dvNV(GLuint id, GLsizei len, const GLubyte *name,
                                  const double v[]);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramNamedParameterfvNV(GLuint id, GLsizei len, const GLubyte *name,
                                    GLfloat *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetProgramNamedParameterdvNV(GLuint id, GLsizei len, const GLubyte *name,
                                    GLdouble *params);
 
diff --git a/src/mesa/main/occlude.c b/src/mesa/main/occlude.c
index 871beb9..1285874 100644
--- a/src/mesa/main/occlude.c
+++ b/src/mesa/main/occlude.c
@@ -97,7 +97,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GenQueriesARB(GLsizei n, GLuint *ids)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -131,7 +131,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_DeleteQueriesARB(GLsizei n, const GLuint *ids)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -161,7 +161,7 @@
 }
 
 
-GLboolean
+GLboolean GLAPIENTRY
 _mesa_IsQueryARB(GLuint id)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -174,7 +174,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_BeginQueryARB(GLenum target, GLuint id)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -216,7 +216,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_EndQueryARB(GLenum target)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -245,7 +245,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetQueryivARB(GLenum target, GLenum pname, GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -270,7 +270,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -299,7 +299,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params)
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/occlude.h b/src/mesa/main/occlude.h
index e837dd7..5696463 100644
--- a/src/mesa/main/occlude.h
+++ b/src/mesa/main/occlude.h
@@ -30,28 +30,28 @@
 extern void
 _mesa_init_occlude(GLcontext *ctx);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GenQueriesARB(GLsizei n, GLuint *ids);
 
-extern void
+extern void GLAPIENTRY
 _mesa_DeleteQueriesARB(GLsizei n, const GLuint *ids);
 
-extern GLboolean
+extern GLboolean GLAPIENTRY
 _mesa_IsQueryARB(GLuint id);
 
-extern void
+extern void GLAPIENTRY
 _mesa_BeginQueryARB(GLenum target, GLuint id);
 
-extern void
+extern void GLAPIENTRY
 _mesa_EndQueryARB(GLenum target);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetQueryivARB(GLenum target, GLenum pname, GLint *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetQueryObjectivARB(GLuint id, GLenum pname, GLint *params);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetQueryObjectuivARB(GLuint id, GLenum pname, GLuint *params);
 
 
diff --git a/src/mesa/main/pixel.c b/src/mesa/main/pixel.c
index e0c792b..61c7e57 100644
--- a/src/mesa/main/pixel.c
+++ b/src/mesa/main/pixel.c
@@ -38,7 +38,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_PixelZoom( GLfloat xfactor, GLfloat yfactor )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -59,7 +59,7 @@
 /**********************************************************************/
 
 
-void
+void GLAPIENTRY
 _mesa_PixelStorei( GLenum pname, GLint param )
 {
    /* NOTE: this call can't be compiled into the display list */
@@ -240,7 +240,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_PixelStoref( GLenum pname, GLfloat param )
 {
    _mesa_PixelStorei( pname, (GLint) param );
@@ -254,7 +254,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_PixelMapfv( GLenum map, GLsizei mapsize, const GLfloat *values )
 {
    GLint i;
@@ -352,7 +352,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_PixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values )
 {
    const GLint n = MIN2(mapsize, MAX_PIXEL_MAP_TABLE);
@@ -373,7 +373,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_PixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values )
 {
    const GLint n = MIN2(mapsize, MAX_PIXEL_MAP_TABLE);
@@ -394,7 +394,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetPixelMapfv( GLenum map, GLfloat *values )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -442,7 +442,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetPixelMapuiv( GLenum map, GLuint *values )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -502,7 +502,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetPixelMapusv( GLenum map, GLushort *values )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -576,7 +576,7 @@
  * Implements glPixelTransfer[fi] whether called immediately or from a
  * display list.
  */
-void
+void GLAPIENTRY
 _mesa_PixelTransferf( GLenum pname, GLfloat param )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -770,7 +770,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_PixelTransferi( GLenum pname, GLint param )
 {
    _mesa_PixelTransferf( pname, (GLfloat) param );
diff --git a/src/mesa/main/pixel.h b/src/mesa/main/pixel.h
index e41d6b1..a3efcf5 100644
--- a/src/mesa/main/pixel.h
+++ b/src/mesa/main/pixel.h
@@ -38,37 +38,38 @@
 /** \name API functions */
 /*@*/
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetPixelMapfv( GLenum map, GLfloat *values );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetPixelMapuiv( GLenum map, GLuint *values );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetPixelMapusv( GLenum map, GLushort *values );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelMapfv( GLenum map, GLsizei mapsize, const GLfloat *values );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelMapuiv(GLenum map, GLsizei mapsize, const GLuint *values );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelMapusv(GLenum map, GLsizei mapsize, const GLushort *values );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelStoref( GLenum pname, GLfloat param );
 
-extern void
+
+extern void GLAPIENTRY
 _mesa_PixelStorei( GLenum pname, GLint param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelTransferf( GLenum pname, GLfloat param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelTransferi( GLenum pname, GLint param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelZoom( GLfloat xfactor, GLfloat yfactor );
 
 /*@}*/
diff --git a/src/mesa/main/points.c b/src/mesa/main/points.c
index 466be57..cbb9155 100644
--- a/src/mesa/main/points.c
+++ b/src/mesa/main/points.c
@@ -49,7 +49,7 @@
  * size is different from one. Notifies the driver via
  * the dd_function_table::PointSize callback.
  */
-void
+void GLAPIENTRY
 _mesa_PointSize( GLfloat size )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -84,7 +84,7 @@
 /*
  * Added by GL_NV_point_sprite
  */
-void
+void GLAPIENTRY
 _mesa_PointParameteriNV( GLenum pname, GLint param )
 {
    const GLfloat value = (GLfloat) param;
@@ -95,7 +95,7 @@
 /*
  * Added by GL_NV_point_sprite
  */
-void
+void GLAPIENTRY
 _mesa_PointParameterivNV( GLenum pname, const GLint *params )
 {
    const GLfloat value = (GLfloat) params[0];
@@ -107,7 +107,7 @@
 /*
  * Same for both GL_EXT_point_parameters and GL_ARB_point_parameters.
  */
-void
+void GLAPIENTRY
 _mesa_PointParameterfEXT( GLenum pname, GLfloat param)
 {
    _mesa_PointParameterfvEXT(pname, &param);
@@ -118,7 +118,7 @@
 /*
  * Same for both GL_EXT_point_parameters and GL_ARB_point_parameters.
  */
-void
+void GLAPIENTRY
 _mesa_PointParameterfvEXT( GLenum pname, const GLfloat *params)
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/points.h b/src/mesa/main/points.h
index 7a4a77c..16513c3 100644
--- a/src/mesa/main/points.h
+++ b/src/mesa/main/points.h
@@ -35,19 +35,19 @@
 #include "mtypes.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_PointSize( GLfloat size );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PointParameteriNV( GLenum pname, GLint param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PointParameterivNV( GLenum pname, const GLint *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PointParameterfEXT( GLenum pname, GLfloat param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PointParameterfvEXT( GLenum pname, const GLfloat *params );
 
 extern void 
diff --git a/src/mesa/main/polygon.c b/src/mesa/main/polygon.c
index 1051c8c..192c405 100644
--- a/src/mesa/main/polygon.c
+++ b/src/mesa/main/polygon.c
@@ -49,7 +49,7 @@
  * change, flushes the vertices and notifies the driver via
  * the dd_function_table::CullFace callback.
  */
-void
+void GLAPIENTRY
 _mesa_CullFace( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -85,7 +85,7 @@
  * flushes the vertices and notifies the driver via
  * the dd_function_table::FrontFace callback.
  */
-void
+void GLAPIENTRY
 _mesa_FrontFace( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -124,7 +124,7 @@
  * gl_polygon_attrib::BackMode. On change flushes the vertices and notifies the
  * driver via the dd_function_table::PolygonMode callback.
  */
-void
+void GLAPIENTRY
 _mesa_PolygonMode( GLenum face, GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -177,7 +177,7 @@
 
 #if _HAVE_FULL_GL
 
-void
+void GLAPIENTRY
 _mesa_PolygonStipple( const GLubyte *pattern )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -195,7 +195,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetPolygonStipple( GLubyte *dest )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -208,7 +208,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_PolygonOffset( GLfloat factor, GLfloat units )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -231,7 +231,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_PolygonOffsetEXT( GLfloat factor, GLfloat bias )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/polygon.h b/src/mesa/main/polygon.h
index ec0735b..ef2fd0e 100644
--- a/src/mesa/main/polygon.h
+++ b/src/mesa/main/polygon.h
@@ -35,28 +35,28 @@
 #include "mtypes.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_CullFace( GLenum mode );
 
-extern void
+extern void GLAPIENTRY
 _mesa_FrontFace( GLenum mode );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PolygonMode( GLenum face, GLenum mode );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PolygonOffset( GLfloat factor, GLfloat units );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PolygonOffsetEXT( GLfloat factor, GLfloat bias );
 
-extern void
+extern void GLAPIENTRY
 _mesa_PolygonStipple( const GLubyte *mask );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetPolygonStipple( GLubyte *mask );
 
-extern void 
+extern void  
 _mesa_update_polygon( GLcontext *ctx );
 
 extern void 
diff --git a/src/mesa/main/program.c b/src/mesa/main/program.c
index e07a4a0..4231b22 100644
--- a/src/mesa/main/program.c
+++ b/src/mesa/main/program.c
@@ -894,7 +894,7 @@
  * \note Not compiled into display lists.
  * \note Called by both glDeleteProgramsNV and glDeleteProgramsARB.
  */
-void
+void GLAPIENTRY 
 _mesa_DeletePrograms(GLsizei n, const GLuint *ids)
 {
    GLint i;
diff --git a/src/mesa/main/program.h b/src/mesa/main/program.h
index ac107d9..2380774 100644
--- a/src/mesa/main/program.h
+++ b/src/mesa/main/program.h
@@ -206,16 +206,16 @@
  * API functions
  */
 
-extern void
+extern void GLAPIENTRY
 _mesa_BindProgram(GLenum target, GLuint id);
 
-extern void
+extern void GLAPIENTRY
 _mesa_DeletePrograms(GLsizei n, const GLuint *ids);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GenPrograms(GLsizei n, GLuint *ids);
 
-extern GLboolean
+extern GLboolean GLAPIENTRY
 _mesa_IsProgram(GLuint id);
 
 
diff --git a/src/mesa/main/rastpos.c b/src/mesa/main/rastpos.c
index 7e39ddc..dfd404e 100644
--- a/src/mesa/main/rastpos.c
+++ b/src/mesa/main/rastpos.c
@@ -411,70 +411,70 @@
 
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos2d(GLdouble x, GLdouble y)
 {
    _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos2f(GLfloat x, GLfloat y)
 {
    _mesa_RasterPos4f(x, y, 0.0F, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos2i(GLint x, GLint y)
 {
    _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos2s(GLshort x, GLshort y)
 {
    _mesa_RasterPos4f(x, y, 0.0F, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos3d(GLdouble x, GLdouble y, GLdouble z)
 {
    _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos3f(GLfloat x, GLfloat y, GLfloat z)
 {
    _mesa_RasterPos4f(x, y, z, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos3i(GLint x, GLint y, GLint z)
 {
    _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos3s(GLshort x, GLshort y, GLshort z)
 {
    _mesa_RasterPos4f(x, y, z, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
    _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
 /** Calls raster_pos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -482,77 +482,77 @@
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos4i(GLint x, GLint y, GLint z, GLint w)
 {
    _mesa_RasterPos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w)
 {
    _mesa_RasterPos4f(x, y, z, w);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos2dv(const GLdouble *v)
 {
    _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos2fv(const GLfloat *v)
 {
    _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos2iv(const GLint *v)
 {
    _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos2sv(const GLshort *v)
 {
    _mesa_RasterPos4f(v[0], v[1], 0.0F, 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos3dv(const GLdouble *v)
 {
    _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos3fv(const GLfloat *v)
 {
    _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos3iv(const GLint *v)
 {
    _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos3sv(const GLshort *v)
 {
    _mesa_RasterPos4f(v[0], v[1], v[2], 1.0F);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos4dv(const GLdouble *v)
 {
    _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 
@@ -560,14 +560,14 @@
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos4fv(const GLfloat *v)
 {
    _mesa_RasterPos4f(v[0], v[1], v[2], v[3]);
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos4iv(const GLint *v)
 {
    _mesa_RasterPos4f((GLfloat) v[0], (GLfloat) v[1], 
@@ -575,7 +575,7 @@
 }
 
 /** Calls _mesa_RasterPos4f() */
-void
+void GLAPIENTRY
 _mesa_RasterPos4sv(const GLshort *v)
 {
    _mesa_RasterPos4f(v[0], v[1], v[2], v[3]);
@@ -664,147 +664,147 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_WindowPos2dMESA(GLdouble x, GLdouble y)
 {
    window_pos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos2fMESA(GLfloat x, GLfloat y)
 {
    window_pos4f(x, y, 0.0F, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos2iMESA(GLint x, GLint y)
 {
    window_pos4f((GLfloat) x, (GLfloat) y, 0.0F, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos2sMESA(GLshort x, GLshort y)
 {
    window_pos4f(x, y, 0.0F, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z)
 {
    window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z)
 {
    window_pos4f(x, y, z, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos3iMESA(GLint x, GLint y, GLint z)
 {
    window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos3sMESA(GLshort x, GLshort y, GLshort z)
 {
    window_pos4f(x, y, z, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w)
 {
    window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos4fMESA(GLfloat x, GLfloat y, GLfloat z, GLfloat w)
 {
    window_pos4f(x, y, z, w);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w)
 {
    window_pos4f((GLfloat) x, (GLfloat) y, (GLfloat) z, (GLfloat) w);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w)
 {
    window_pos4f(x, y, z, w);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos2dvMESA(const GLdouble *v)
 {
    window_pos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos2fvMESA(const GLfloat *v)
 {
    window_pos4f(v[0], v[1], 0.0F, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos2ivMESA(const GLint *v)
 {
    window_pos4f((GLfloat) v[0], (GLfloat) v[1], 0.0F, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos2svMESA(const GLshort *v)
 {
    window_pos4f(v[0], v[1], 0.0F, 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos3dvMESA(const GLdouble *v)
 {
    window_pos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos3fvMESA(const GLfloat *v)
 {
    window_pos4f(v[0], v[1], v[2], 1.0);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos3ivMESA(const GLint *v)
 {
    window_pos4f((GLfloat) v[0], (GLfloat) v[1], (GLfloat) v[2], 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos3svMESA(const GLshort *v)
 {
    window_pos4f(v[0], v[1], v[2], 1.0F);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos4dvMESA(const GLdouble *v)
 {
    window_pos4f((GLfloat) v[0], (GLfloat) v[1], 
 			 (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos4fvMESA(const GLfloat *v)
 {
    window_pos4f(v[0], v[1], v[2], v[3]);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos4ivMESA(const GLint *v)
 {
    window_pos4f((GLfloat) v[0], (GLfloat) v[1], 
 			 (GLfloat) v[2], (GLfloat) v[3]);
 }
 
-void
+void GLAPIENTRY
 _mesa_WindowPos4svMESA(const GLshort *v)
 {
    window_pos4f(v[0], v[1], v[2], v[3]);
diff --git a/src/mesa/main/rastpos.h b/src/mesa/main/rastpos.h
index ae7278c..363f86a 100644
--- a/src/mesa/main/rastpos.h
+++ b/src/mesa/main/rastpos.h
@@ -35,76 +35,76 @@
 #include "glheader.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos2d(GLdouble x, GLdouble y);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos2f(GLfloat x, GLfloat y);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos2i(GLint x, GLint y);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos2s(GLshort x, GLshort y);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos3d(GLdouble x, GLdouble y, GLdouble z);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos3f(GLfloat x, GLfloat y, GLfloat z);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos3i(GLint x, GLint y, GLint z);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos3s(GLshort x, GLshort y, GLshort z);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos4i(GLint x, GLint y, GLint z, GLint w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos4s(GLshort x, GLshort y, GLshort z, GLshort w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos2dv(const GLdouble *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos2fv(const GLfloat *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos2iv(const GLint *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos2sv(const GLshort *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos3dv(const GLdouble *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos3fv(const GLfloat *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos3iv(const GLint *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos3sv(const GLshort *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos4dv(const GLdouble *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos4fv(const GLfloat *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos4iv(const GLint *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_RasterPos4sv(const GLshort *v);
 
 
@@ -113,76 +113,76 @@
 /**********************************************************************/
 /*@{*/
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos2dMESA(GLdouble x, GLdouble y);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos2fMESA(GLfloat x, GLfloat y);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos2iMESA(GLint x, GLint y);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos2sMESA(GLshort x, GLshort y);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos3dMESA(GLdouble x, GLdouble y, GLdouble z);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos3fMESA(GLfloat x, GLfloat y, GLfloat z);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos3iMESA(GLint x, GLint y, GLint z);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos3sMESA(GLshort x, GLshort y, GLshort z);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos4dMESA(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos4fMESA(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos4iMESA(GLint x, GLint y, GLint z, GLint w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos4sMESA(GLshort x, GLshort y, GLshort z, GLshort w);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos2dvMESA(const GLdouble *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos2fvMESA(const GLfloat *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos2ivMESA(const GLint *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos2svMESA(const GLshort *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos3dvMESA(const GLdouble *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos3fvMESA(const GLfloat *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos3ivMESA(const GLint *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos3svMESA(const GLshort *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos4dvMESA(const GLdouble *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos4fvMESA(const GLfloat *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos4ivMESA(const GLint *v);
 
-extern void
+extern void GLAPIENTRY
 _mesa_WindowPos4svMESA(const GLshort *v);
 
 extern void 
diff --git a/src/mesa/main/stencil.c b/src/mesa/main/stencil.c
index bcfe383..8c89e8c 100644
--- a/src/mesa/main/stencil.c
+++ b/src/mesa/main/stencil.c
@@ -49,7 +49,7 @@
  * flushes the vertices and notifies the driver via
  * the dd_function_table::ClearStencil callback.
  */
-void
+void GLAPIENTRY
 _mesa_ClearStencil( GLint s )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -80,7 +80,7 @@
  * __GLcontextRec::Stencil. On change flushes the vertices and notifies the
  * driver via the dd_function_table::StencilFunc callback.
  */
-void
+void GLAPIENTRY
 _mesa_StencilFunc( GLenum func, GLint ref, GLuint mask )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -133,7 +133,7 @@
  * Updates gl_stencil_attrib::WriteMask. On change flushes the vertices and
  * notifies the driver via the dd_function_table::StencilMask callback.
  */
-void
+void GLAPIENTRY
 _mesa_StencilMask( GLuint mask )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -166,7 +166,7 @@
  * __GLcontextRec::Stencil. On change flushes the vertices and notifies the
  * driver via the dd_function_table::StencilOp callback.
  */
-void
+void GLAPIENTRY
 _mesa_StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -246,7 +246,7 @@
 
 #if _HAVE_FULL_GL
 /* GL_EXT_stencil_two_side */
-void
+void GLAPIENTRY
 _mesa_ActiveStencilFaceEXT(GLenum face)
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/stencil.h b/src/mesa/main/stencil.h
index cf64560..5620d14 100644
--- a/src/mesa/main/stencil.h
+++ b/src/mesa/main/stencil.h
@@ -35,27 +35,27 @@
 #include "mtypes.h"
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ClearStencil( GLint s );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_StencilFunc( GLenum func, GLint ref, GLuint mask );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_StencilMask( GLuint mask );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_StencilOp( GLenum fail, GLenum zfail, GLenum zpass );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ActiveStencilFaceEXT(GLenum face);
 
 
-extern void
+extern void 
 _mesa_init_stencil( GLcontext * ctx );
 
 #endif
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
index e10b75b..cf199dd 100644
--- a/src/mesa/main/teximage.c
+++ b/src/mesa/main/teximage.c
@@ -1756,7 +1756,7 @@
  * \param type pixel data type.
  * \param pixels pixel data.
  */
-void
+void GLAPIENTRY
 _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
                    GLenum type, GLvoid *pixels )
 {
@@ -1895,7 +1895,7 @@
 /*
  * Called from the API.  Note that width includes the border.
  */
-void
+void GLAPIENTRY
 _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
                   GLsizei width, GLint border, GLenum format,
                   GLenum type, const GLvoid *pixels )
@@ -1984,7 +1984,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
                   GLsizei width, GLsizei height, GLint border,
                   GLenum format, GLenum type,
@@ -2089,7 +2089,7 @@
  * Called by the API or display list executor.
  * Note that width and height include the border.
  */
-void
+void GLAPIENTRY
 _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
                   GLsizei width, GLsizei height, GLsizei depth,
                   GLint border, GLenum format, GLenum type,
@@ -2170,7 +2170,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalFormat,
                      GLsizei width, GLsizei height, GLsizei depth,
                      GLint border, GLenum format, GLenum type,
@@ -2182,7 +2182,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_TexSubImage1D( GLenum target, GLint level,
                      GLint xoffset, GLsizei width,
                      GLenum format, GLenum type,
@@ -2227,7 +2227,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexSubImage2D( GLenum target, GLint level,
                      GLint xoffset, GLint yoffset,
                      GLsizei width, GLsizei height,
@@ -2276,7 +2276,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_TexSubImage3D( GLenum target, GLint level,
                      GLint xoffset, GLint yoffset, GLint zoffset,
                      GLsizei width, GLsizei height, GLsizei depth,
@@ -2321,7 +2321,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_CopyTexImage1D( GLenum target, GLint level,
                       GLenum internalFormat,
                       GLint x, GLint y,
@@ -2381,7 +2381,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat,
                       GLint x, GLint y, GLsizei width, GLsizei height,
                       GLint border )
@@ -2441,7 +2441,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_CopyTexSubImage1D( GLenum target, GLint level,
                          GLint xoffset, GLint x, GLint y, GLsizei width )
 {
@@ -2477,7 +2477,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_CopyTexSubImage2D( GLenum target, GLint level,
                          GLint xoffset, GLint yoffset,
                          GLint x, GLint y, GLsizei width, GLsizei height )
@@ -2516,7 +2516,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_CopyTexSubImage3D( GLenum target, GLint level,
                          GLint xoffset, GLint yoffset, GLint zoffset,
                          GLint x, GLint y, GLsizei width, GLsizei height )
@@ -2733,7 +2733,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
                               GLenum internalFormat, GLsizei width,
                               GLint border, GLsizei imageSize,
@@ -2812,7 +2812,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
                               GLenum internalFormat, GLsizei width,
                               GLsizei height, GLint border, GLsizei imageSize,
@@ -2896,7 +2896,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
                               GLenum internalFormat, GLsizei width,
                               GLsizei height, GLsizei depth, GLint border,
@@ -2976,7 +2976,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset,
                                  GLsizei width, GLenum format,
                                  GLsizei imageSize, const GLvoid *data)
@@ -3024,7 +3024,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset,
                                  GLint yoffset, GLsizei width, GLsizei height,
                                  GLenum format, GLsizei imageSize,
@@ -3074,7 +3074,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
                                  GLint yoffset, GLint zoffset, GLsizei width,
                                  GLsizei height, GLsizei depth, GLenum format,
@@ -3126,7 +3126,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetCompressedTexImageARB(GLenum target, GLint level, GLvoid *img)
 {
    const struct gl_texture_unit *texUnit;
diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h
index e90cd71..699b4e6 100644
--- a/src/mesa/main/teximage.h
+++ b/src/mesa/main/teximage.h
@@ -97,44 +97,44 @@
 /** \name API entry point functions */
 /*@{*/
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexImage1D( GLenum target, GLint level, GLint internalformat,
                   GLsizei width, GLint border,
                   GLenum format, GLenum type, const GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexImage2D( GLenum target, GLint level, GLint internalformat,
                   GLsizei width, GLsizei height, GLint border,
                   GLenum format, GLenum type, const GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexImage3D( GLenum target, GLint level, GLint internalformat,
                   GLsizei width, GLsizei height, GLsizei depth, GLint border,
                   GLenum format, GLenum type, const GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalformat,
                      GLsizei width, GLsizei height, GLsizei depth,
                      GLint border, GLenum format, GLenum type,
                      const GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexImage( GLenum target, GLint level,
                    GLenum format, GLenum type, GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexSubImage1D( GLenum target, GLint level, GLint xoffset,
                      GLsizei width,
                      GLenum format, GLenum type,
                      const GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexSubImage2D( GLenum target, GLint level,
                      GLint xoffset, GLint yoffset,
                      GLsizei width, GLsizei height,
@@ -142,7 +142,7 @@
                      const GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexSubImage3D( GLenum target, GLint level,
                      GLint xoffset, GLint yoffset, GLint zoffset,
                      GLsizei width, GLsizei height, GLsizei depth,
@@ -150,48 +150,48 @@
                      const GLvoid *pixels );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyTexImage1D( GLenum target, GLint level, GLenum internalformat,
                       GLint x, GLint y, GLsizei width, GLint border );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyTexImage2D( GLenum target, GLint level,
                       GLenum internalformat, GLint x, GLint y,
                       GLsizei width, GLsizei height, GLint border );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyTexSubImage1D( GLenum target, GLint level, GLint xoffset,
                          GLint x, GLint y, GLsizei width );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyTexSubImage2D( GLenum target, GLint level,
                          GLint xoffset, GLint yoffset,
                          GLint x, GLint y, GLsizei width, GLsizei height );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_CopyTexSubImage3D( GLenum target, GLint level,
                          GLint xoffset, GLint yoffset, GLint zoffset,
                          GLint x, GLint y, GLsizei width, GLsizei height );
 
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
                               GLenum internalformat, GLsizei width,
                               GLint border, GLsizei imageSize,
                               const GLvoid *data);
 
-extern void
+extern void GLAPIENTRY
 _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
                               GLenum internalformat, GLsizei width,
                               GLsizei height, GLint border, GLsizei imageSize,
                               const GLvoid *data);
 
-extern void
+extern void GLAPIENTRY
 _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
                               GLenum internalformat, GLsizei width,
                               GLsizei height, GLsizei depth, GLint border,
@@ -202,24 +202,24 @@
 #define _mesa_CompressedTexSubImage2DARB _mesa_CompressedTexSubImage2DAR
 #define _mesa_CompressedTexSubImage3DARB _mesa_CompressedTexSubImage3DAR
 #endif
-extern void
+extern void GLAPIENTRY
 _mesa_CompressedTexSubImage1DARB(GLenum target, GLint level, GLint xoffset,
                                  GLsizei width, GLenum format,
                                  GLsizei imageSize, const GLvoid *data);
 
-extern void
+extern void GLAPIENTRY
 _mesa_CompressedTexSubImage2DARB(GLenum target, GLint level, GLint xoffset,
                                  GLint yoffset, GLsizei width, GLsizei height,
                                  GLenum format, GLsizei imageSize,
                                  const GLvoid *data);
 
-extern void
+extern void GLAPIENTRY
 _mesa_CompressedTexSubImage3DARB(GLenum target, GLint level, GLint xoffset,
                                  GLint yoffset, GLint zoffset, GLsizei width,
                                  GLsizei height, GLsizei depth, GLenum format,
                                  GLsizei imageSize, const GLvoid *data);
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetCompressedTexImageARB(GLenum target, GLint lod, GLvoid *img);
 
 /*@}*/
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c
index 08c59a0..10fff64 100644
--- a/src/mesa/main/texobj.c
+++ b/src/mesa/main/texobj.c
@@ -603,7 +603,7 @@
  * to find a block of free texture IDs which are stored in \p texName.
  * Corresponding empty texture objects are also generated.
  */ 
-void
+void GLAPIENTRY
 _mesa_GenTextures( GLsizei n, GLuint *texName )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -655,7 +655,7 @@
  * it and decrementing the reference count if so. If the texture reference
  * count is zero, delete its object.
  */
-void
+void GLAPIENTRY
 _mesa_DeleteTextures( GLsizei n, const GLuint *texName)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -744,7 +744,7 @@
  * calls dd_function_table::BindTexture. Decrements the old texture reference
  * count and deletes it if it reaches zero.
  */
-void
+void GLAPIENTRY
 _mesa_BindTexture( GLenum target, GLuint texName )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -900,7 +900,7 @@
  * Looks up each texture in the hash, clamps the corresponding priority between
  * 0.0 and 1.0, and calls dd_function_table::PrioritizeTexture.
  */
-void
+void GLAPIENTRY
 _mesa_PrioritizeTextures( GLsizei n, const GLuint *texName,
                           const GLclampf *priorities )
 {
@@ -945,7 +945,7 @@
  * Looks up each texture in the hash and calls
  * dd_function_table::IsTextureResident.
  */
-GLboolean
+GLboolean GLAPIENTRY
 _mesa_AreTexturesResident(GLsizei n, const GLuint *texName,
                           GLboolean *residences)
 {
@@ -1006,7 +1006,7 @@
  *
  * Calls _mesa_HashLookup().
  */
-GLboolean
+GLboolean GLAPIENTRY
 _mesa_IsTexture( GLuint texture )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h
index f7e8e69..c5cce28 100644
--- a/src/mesa/main/texobj.h
+++ b/src/mesa/main/texobj.h
@@ -72,28 +72,28 @@
  */
 /*@{*/
 
-extern void
+extern void GLAPIENTRY
 _mesa_GenTextures( GLsizei n, GLuint *textures );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_DeleteTextures( GLsizei n, const GLuint *textures );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_BindTexture( GLenum target, GLuint texture );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_PrioritizeTextures( GLsizei n, const GLuint *textures,
                           const GLclampf *priorities );
 
 
-extern GLboolean
+extern GLboolean GLAPIENTRY
 _mesa_AreTexturesResident( GLsizei n, const GLuint *textures,
                            GLboolean *residences );
 
-extern GLboolean
+extern GLboolean GLAPIENTRY
 _mesa_IsTexture( GLuint texture );
 
 /*@}*/
diff --git a/src/mesa/main/texstate.c b/src/mesa/main/texstate.c
index 95009a2..0cfddc1 100644
--- a/src/mesa/main/texstate.c
+++ b/src/mesa/main/texstate.c
@@ -151,7 +151,7 @@
 /**********************************************************************/
 
 
-void
+void GLAPIENTRY
 _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -580,7 +580,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexEnvf( GLenum target, GLenum pname, GLfloat param )
 {
    _mesa_TexEnvfv( target, pname, &param );
@@ -588,7 +588,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_TexEnvi( GLenum target, GLenum pname, GLint param )
 {
    GLfloat p[4];
@@ -598,7 +598,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexEnviv( GLenum target, GLenum pname, const GLint *param )
 {
    GLfloat p[4];
@@ -616,7 +616,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -827,7 +827,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1078,14 +1078,14 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexParameterf( GLenum target, GLenum pname, GLfloat param )
 {
    _mesa_TexParameterfv(target, pname, &param);
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1404,7 +1404,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexParameteri( GLenum target, GLenum pname, GLint param )
 {
    GLfloat fparam[4];
@@ -1417,7 +1417,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexParameteriv( GLenum target, GLenum pname, const GLint *params )
 {
    GLfloat fparam[4];
@@ -1438,7 +1438,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetTexLevelParameterfv( GLenum target, GLint level,
                               GLenum pname, GLfloat *params )
 {
@@ -1480,7 +1480,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
                               GLenum pname, GLint *params )
 {
@@ -1656,7 +1656,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1780,7 +1780,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1917,7 +1917,7 @@
 /**********************************************************************/
 
 #if FEATURE_texgen
-void
+void GLAPIENTRY
 _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2156,7 +2156,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexGeniv(GLenum coord, GLenum pname, const GLint *params )
 {
    GLfloat p[4];
@@ -2173,7 +2173,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexGend(GLenum coord, GLenum pname, GLdouble param )
 {
    GLfloat p = (GLfloat) param;
@@ -2181,7 +2181,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexGendv(GLenum coord, GLenum pname, const GLdouble *params )
 {
    GLfloat p[4];
@@ -2198,14 +2198,14 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexGenf( GLenum coord, GLenum pname, GLfloat param )
 {
    _mesa_TexGenfv(coord, pname, &param);
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexGeni( GLenum coord, GLenum pname, GLint param )
 {
    _mesa_TexGeniv( coord, pname, &param );
@@ -2213,7 +2213,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2290,7 +2290,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2367,7 +2367,7 @@
 
 
 
-void
+void GLAPIENTRY
 _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2468,7 +2468,7 @@
 #endif
 
 /* GL_ARB_multitexture */
-void
+void GLAPIENTRY
 _mesa_ActiveTextureARB( GLenum target )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2503,7 +2503,7 @@
 
 
 /* GL_ARB_multitexture */
-void
+void GLAPIENTRY
 _mesa_ClientActiveTextureARB( GLenum target )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2525,7 +2525,7 @@
 /*                     Pixel Texgen Extensions                        */
 /**********************************************************************/
 
-void
+void GLAPIENTRY
 _mesa_PixelTexGenSGIX(GLenum mode)
 {
    GLenum newRgbSource, newAlphaSource;
@@ -2564,21 +2564,21 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_PixelTexGenParameterfSGIS(GLenum target, GLfloat value)
 {
    _mesa_PixelTexGenParameteriSGIS(target, (GLint) value);
 }
 
 
-void
+void GLAPIENTRY
 _mesa_PixelTexGenParameterfvSGIS(GLenum target, const GLfloat *value)
 {
    _mesa_PixelTexGenParameteriSGIS(target, (GLint) *value);
 }
 
 
-void
+void GLAPIENTRY
 _mesa_PixelTexGenParameteriSGIS(GLenum target, GLint value)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2609,14 +2609,14 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_PixelTexGenParameterivSGIS(GLenum target, const GLint *value)
 {
   _mesa_PixelTexGenParameteriSGIS(target, *value);
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetPixelTexGenParameterfvSGIS(GLenum target, GLfloat *value)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -2634,7 +2634,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_GetPixelTexGenParameterivSGIS(GLenum target, GLint *value)
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/main/texstate.h b/src/mesa/main/texstate.h
index d2cde7b..7cc3d2c 100644
--- a/src/mesa/main/texstate.h
+++ b/src/mesa/main/texstate.h
@@ -47,89 +47,89 @@
  */
 /*@{*/
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexGendv( GLenum coord, GLenum pname, GLdouble *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexGeniv( GLenum coord, GLenum pname, GLint *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexLevelParameterfv( GLenum target, GLint level,
                               GLenum pname, GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexLevelParameteriv( GLenum target, GLint level,
                               GLenum pname, GLint *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_GetTexParameteriv( GLenum target, GLenum pname, GLint *params );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexEnvf( GLenum target, GLenum pname, GLfloat param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexEnvfv( GLenum target, GLenum pname, const GLfloat *param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexEnvi( GLenum target, GLenum pname, GLint param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexEnviv( GLenum target, GLenum pname, const GLint *param );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexParameterfv( GLenum target, GLenum pname, const GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexParameterf( GLenum target, GLenum pname, GLfloat param );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexParameteri( GLenum target, GLenum pname, GLint param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexParameteriv( GLenum target, GLenum pname, const GLint *params );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexGend( GLenum coord, GLenum pname, GLdouble param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexGendv( GLenum coord, GLenum pname, const GLdouble *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexGenf( GLenum coord, GLenum pname, GLfloat param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexGenfv( GLenum coord, GLenum pname, const GLfloat *params );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexGeni( GLenum coord, GLenum pname, GLint param );
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexGeniv( GLenum coord, GLenum pname, const GLint *params );
 
 
 /*
  * GL_ARB_multitexture
  */
-extern void
+extern void GLAPIENTRY
 _mesa_ActiveTextureARB( GLenum target );
 
-extern void
+extern void GLAPIENTRY
 _mesa_ClientActiveTextureARB( GLenum target );
 
 
@@ -137,37 +137,37 @@
  * Pixel Texture Extensions
  */
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelTexGenSGIX(GLenum mode);
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelTexGenParameterfSGIS(GLenum target, GLfloat value);
 
 #ifdef VMS
 #define _mesa_PixelTexGenParameterfvSGIS _mesa_PixelTexGenParameterfv
 #endif
-extern void
+extern void GLAPIENTRY
 _mesa_PixelTexGenParameterfvSGIS(GLenum target, const GLfloat *value);
 
-extern void
+extern void GLAPIENTRY
 _mesa_PixelTexGenParameteriSGIS(GLenum target, GLint value);
 
 #ifdef VMS
 #define _mesa_PixelTexGenParameterivSGIS _mesa_PixelTexGenParameteriv
 #endif
-extern void
+extern void GLAPIENTRY
 _mesa_PixelTexGenParameterivSGIS(GLenum target, const GLint *value);
 
 #ifdef VMS
 #define _mesa_GetPixelTexGenParameterfvSGIS _mesa_GetPixelTexGenParameterfv
 #endif
-extern void
+extern void GLAPIENTRY
 _mesa_GetPixelTexGenParameterfvSGIS(GLenum target, GLfloat *value);
 
 #ifdef VMS
 #define _mesa_GetPixelTexGenParameterivSGIS _mesa_GetPixelTexGenParameteriv
 #endif
-extern void
+extern void GLAPIENTRY
 _mesa_GetPixelTexGenParameterivSGIS(GLenum target, GLint *value);
 
 /*@}*/
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c
index fb41054..c03415f 100644
--- a/src/mesa/main/varray.c
+++ b/src/mesa/main/varray.c
@@ -34,7 +34,7 @@
 #include "varray.h"
 
 
-void
+void GLAPIENTRY
 _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -90,7 +90,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -143,7 +143,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -210,7 +210,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -251,7 +251,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -301,7 +301,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_SecondaryColorPointerEXT(GLint size, GLenum type,
 			       GLsizei stride, const GLvoid *ptr)
 {
@@ -369,7 +369,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
                       const GLvoid *ptr)
 {
@@ -427,7 +427,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *vptr)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -453,7 +453,7 @@
 
 
 #if FEATURE_NV_vertex_program
-void
+void GLAPIENTRY
 _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
                             GLsizei stride, const GLvoid *ptr)
 {
@@ -519,7 +519,7 @@
 
 
 #if FEATURE_ARB_vertex_program
-void
+void GLAPIENTRY
 _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
                              GLboolean normalized,
                              GLsizei stride, const GLvoid *ptr)
@@ -601,7 +601,7 @@
 #endif
 
 
-void
+void GLAPIENTRY
 _mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride,
                        GLsizei count, const GLvoid *ptr)
 {
@@ -610,7 +610,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count,
                        const GLvoid *ptr)
 {
@@ -619,7 +619,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count,
                       const GLvoid *ptr)
 {
@@ -628,7 +628,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count,
                       const GLvoid *ptr)
 {
@@ -637,7 +637,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
                          GLsizei count, const GLvoid *ptr)
 {
@@ -646,7 +646,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr)
 {
    (void) count;
@@ -654,7 +654,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -849,7 +849,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_LockArraysEXT(GLint first, GLsizei count)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -876,7 +876,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _mesa_UnlockArraysEXT( void )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -897,7 +897,7 @@
 
 /* GL_EXT_multi_draw_arrays */
 /* Somebody forgot to spec the first and count parameters as const! <sigh> */
-void
+void GLAPIENTRY
 _mesa_MultiDrawArraysEXT( GLenum mode, GLint *first,
                           GLsizei *count, GLsizei primcount )
 {
@@ -915,7 +915,7 @@
 
 
 /* GL_EXT_multi_draw_arrays */
-void
+void GLAPIENTRY
 _mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type,
                             const GLvoid **indices, GLsizei primcount )
 {
@@ -939,7 +939,7 @@
 
 
 /* GL_IBM_multimode_draw_arrays */
-void
+void GLAPIENTRY
 _mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first,
 			      const GLsizei * count,
 			      GLsizei primcount, GLint modestride )
@@ -959,7 +959,7 @@
 
 
 /* GL_IBM_multimode_draw_arrays */
-void
+void GLAPIENTRY
 _mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count,
 				GLenum type, const GLvoid * const * indices,
 				GLsizei primcount, GLint modestride )
@@ -984,7 +984,7 @@
 /*****                      Initialization                        *****/
 /**********************************************************************/
 
-void
+void 
 _mesa_init_varray( GLcontext * ctx )
 {
    GLuint i;
diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h
index d81213f..3589735 100644
--- a/src/mesa/main/varray.h
+++ b/src/mesa/main/varray.h
@@ -41,107 +41,107 @@
 
 #if _HAVE_FULL_GL
 
-extern void
+extern void GLAPIENTRY
 _mesa_VertexPointer(GLint size, GLenum type, GLsizei stride,
                     const GLvoid *ptr);
 
-extern void
+extern void GLAPIENTRY
 _mesa_UnlockArraysEXT( void );
 
-extern void
+extern void GLAPIENTRY
 _mesa_LockArraysEXT(GLint first, GLsizei count);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_NormalPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ColorPointer(GLint size, GLenum type, GLsizei stride, const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_IndexPointer(GLenum type, GLsizei stride, const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
                       const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_EdgeFlagPointer(GLsizei stride, const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_VertexPointerEXT(GLint size, GLenum type, GLsizei stride,
                        GLsizei count, const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_NormalPointerEXT(GLenum type, GLsizei stride, GLsizei count,
                        const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_ColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count,
                       const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_IndexPointerEXT(GLenum type, GLsizei stride, GLsizei count,
                       const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_TexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
                          GLsizei count, const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_EdgeFlagPointerEXT(GLsizei stride, GLsizei count, const GLboolean *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_FogCoordPointerEXT(GLenum type, GLsizei stride, const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_SecondaryColorPointerEXT(GLint size, GLenum type,
 			       GLsizei stride, const GLvoid *ptr);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_VertexAttribPointerNV(GLuint index, GLint size, GLenum type,
                             GLsizei stride, const GLvoid *pointer);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_VertexAttribPointerARB(GLuint index, GLint size, GLenum type,
                              GLboolean normalized, GLsizei stride,
                              const GLvoid *pointer);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_InterleavedArrays(GLenum format, GLsizei stride, const GLvoid *pointer);
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_MultiDrawArraysEXT( GLenum mode, GLint *first,
                           GLsizei *count, GLsizei primcount );
 
-extern void
+extern void GLAPIENTRY
 _mesa_MultiDrawElementsEXT( GLenum mode, const GLsizei *count, GLenum type,
                             const GLvoid **indices, GLsizei primcount );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_MultiModeDrawArraysIBM( const GLenum * mode, const GLint * first,
 			      const GLsizei * count,
 			      GLsizei primcount, GLint modestride );
 
 
-extern void
+extern void GLAPIENTRY
 _mesa_MultiModeDrawElementsIBM( const GLenum * mode, const GLsizei * count,
 				GLenum type, const GLvoid * const * indices,
 				GLsizei primcount, GLint modestride );
diff --git a/src/mesa/main/vtxfmt_tmp.h b/src/mesa/main/vtxfmt_tmp.h
index 3f4a9ce..204b299 100644
--- a/src/mesa/main/vtxfmt_tmp.h
+++ b/src/mesa/main/vtxfmt_tmp.h
@@ -30,346 +30,346 @@
 #define PRE_LOOPBACK( FUNC )
 #endif
 
-static void TAG(ArrayElement)( GLint i )
+static void GLAPIENTRY TAG(ArrayElement)( GLint i )
 {
    PRE_LOOPBACK( ArrayElement );
    _glapi_Dispatch->ArrayElement( i );
 }
 
-static void TAG(Color3f)( GLfloat r, GLfloat g, GLfloat b )
+static void GLAPIENTRY TAG(Color3f)( GLfloat r, GLfloat g, GLfloat b )
 {
    PRE_LOOPBACK( Color3f );
    _glapi_Dispatch->Color3f( r, g, b );
 }
 
-static void TAG(Color3fv)( const GLfloat *v )
+static void GLAPIENTRY TAG(Color3fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Color3fv );
    _glapi_Dispatch->Color3fv( v );
 }
 
-static void TAG(Color3ub)( GLubyte r, GLubyte g, GLubyte b )
+static void GLAPIENTRY TAG(Color3ub)( GLubyte r, GLubyte g, GLubyte b )
 {
    PRE_LOOPBACK( Color3ub );
    _glapi_Dispatch->Color3ub( r, g, b );
 }
 
-static void TAG(Color3ubv)( const GLubyte *v )
+static void GLAPIENTRY TAG(Color3ubv)( const GLubyte *v )
 {
    PRE_LOOPBACK( Color3ubv );
    _glapi_Dispatch->Color3ubv( v );
 }
 
-static void TAG(Color4f)( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
+static void GLAPIENTRY TAG(Color4f)( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
 {
    PRE_LOOPBACK( Color4f );
    _glapi_Dispatch->Color4f( r, g, b, a );
 }
 
-static void TAG(Color4fv)( const GLfloat *v )
+static void GLAPIENTRY TAG(Color4fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Color4fv );
    _glapi_Dispatch->Color4fv( v );
 }
 
-static void TAG(Color4ub)( GLubyte r, GLubyte g, GLubyte b, GLubyte a )
+static void GLAPIENTRY TAG(Color4ub)( GLubyte r, GLubyte g, GLubyte b, GLubyte a )
 {
    PRE_LOOPBACK( Color4ub );
    _glapi_Dispatch->Color4ub( r, g, b, a );
 }
 
-static void TAG(Color4ubv)( const GLubyte *v )
+static void GLAPIENTRY TAG(Color4ubv)( const GLubyte *v )
 {
    PRE_LOOPBACK( Color4ubv );
    _glapi_Dispatch->Color4ubv( v );
 }
 
-static void TAG(EdgeFlag)( GLboolean e )
+static void GLAPIENTRY TAG(EdgeFlag)( GLboolean e )
 {
    PRE_LOOPBACK( EdgeFlag );
    _glapi_Dispatch->EdgeFlag( e );
 }
 
-static void TAG(EdgeFlagv)( const GLboolean *v )
+static void GLAPIENTRY TAG(EdgeFlagv)( const GLboolean *v )
 {
    PRE_LOOPBACK( EdgeFlagv );
    _glapi_Dispatch->EdgeFlagv( v );
 }
 
-static void TAG(EvalCoord1f)( GLfloat s )
+static void GLAPIENTRY TAG(EvalCoord1f)( GLfloat s )
 {
    PRE_LOOPBACK( EvalCoord1f );
    _glapi_Dispatch->EvalCoord1f( s );
 }
 
-static void TAG(EvalCoord1fv)( const GLfloat *v )
+static void GLAPIENTRY TAG(EvalCoord1fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( EvalCoord1fv );
    _glapi_Dispatch->EvalCoord1fv( v );
 }
 
-static void TAG(EvalCoord2f)( GLfloat s, GLfloat t )
+static void GLAPIENTRY TAG(EvalCoord2f)( GLfloat s, GLfloat t )
 {
    PRE_LOOPBACK( EvalCoord2f );
    _glapi_Dispatch->EvalCoord2f( s, t );
 }
 
-static void TAG(EvalCoord2fv)( const GLfloat *v )
+static void GLAPIENTRY TAG(EvalCoord2fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( EvalCoord2fv );
    _glapi_Dispatch->EvalCoord2fv( v );
 }
 
-static void TAG(EvalPoint1)( GLint i )
+static void GLAPIENTRY TAG(EvalPoint1)( GLint i )
 {
    PRE_LOOPBACK( EvalPoint1 );
    _glapi_Dispatch->EvalPoint1( i );
 }
 
-static void TAG(EvalPoint2)( GLint i, GLint j )
+static void GLAPIENTRY TAG(EvalPoint2)( GLint i, GLint j )
 {
    PRE_LOOPBACK( EvalPoint2 );
    _glapi_Dispatch->EvalPoint2( i, j );
 }
 
-static void TAG(FogCoordfEXT)( GLfloat f )
+static void GLAPIENTRY TAG(FogCoordfEXT)( GLfloat f )
 {
    PRE_LOOPBACK( FogCoordfEXT );
    _glapi_Dispatch->FogCoordfEXT( f );
 }
 
-static void TAG(FogCoordfvEXT)( const GLfloat *v )
+static void GLAPIENTRY TAG(FogCoordfvEXT)( const GLfloat *v )
 {
    PRE_LOOPBACK( FogCoordfvEXT );
    _glapi_Dispatch->FogCoordfvEXT( v );
 }
 
-static void TAG(Indexi)( GLint i )
+static void GLAPIENTRY TAG(Indexi)( GLint i )
 {
    PRE_LOOPBACK( Indexi );
    _glapi_Dispatch->Indexi( i );
 }
 
-static void TAG(Indexiv)( const GLint *v )
+static void GLAPIENTRY TAG(Indexiv)( const GLint *v )
 {
    PRE_LOOPBACK( Indexiv );
    _glapi_Dispatch->Indexiv( v );
 }
 
-static void TAG(Materialfv)( GLenum face, GLenum pname, const GLfloat *v )
+static void GLAPIENTRY TAG(Materialfv)( GLenum face, GLenum pname, const GLfloat *v )
 {
    PRE_LOOPBACK( Materialfv );
    _glapi_Dispatch->Materialfv( face, pname, v );
 }
 
-static void TAG(MultiTexCoord1fARB)( GLenum target, GLfloat a )
+static void GLAPIENTRY TAG(MultiTexCoord1fARB)( GLenum target, GLfloat a )
 {
    PRE_LOOPBACK( MultiTexCoord1fARB );
    _glapi_Dispatch->MultiTexCoord1fARB( target, a );
 }
 
-static void TAG(MultiTexCoord1fvARB)( GLenum target, const GLfloat *tc )
+static void GLAPIENTRY TAG(MultiTexCoord1fvARB)( GLenum target, const GLfloat *tc )
 {
    PRE_LOOPBACK( MultiTexCoord1fvARB );
    _glapi_Dispatch->MultiTexCoord1fvARB( target, tc );
 }
 
-static void TAG(MultiTexCoord2fARB)( GLenum target, GLfloat s, GLfloat t )
+static void GLAPIENTRY TAG(MultiTexCoord2fARB)( GLenum target, GLfloat s, GLfloat t )
 {
    PRE_LOOPBACK( MultiTexCoord2fARB );
    _glapi_Dispatch->MultiTexCoord2fARB( target, s, t );
 }
 
-static void TAG(MultiTexCoord2fvARB)( GLenum target, const GLfloat *tc )
+static void GLAPIENTRY TAG(MultiTexCoord2fvARB)( GLenum target, const GLfloat *tc )
 {
    PRE_LOOPBACK( MultiTexCoord2fvARB );
    _glapi_Dispatch->MultiTexCoord2fvARB( target, tc );
 }
 
-static void TAG(MultiTexCoord3fARB)( GLenum target, GLfloat s,
+static void GLAPIENTRY TAG(MultiTexCoord3fARB)( GLenum target, GLfloat s,
 				     GLfloat t, GLfloat r )
 {
    PRE_LOOPBACK( MultiTexCoord3fARB );
    _glapi_Dispatch->MultiTexCoord3fARB( target, s, t, r );
 }
 
-static void TAG(MultiTexCoord3fvARB)( GLenum target, const GLfloat *tc )
+static void GLAPIENTRY TAG(MultiTexCoord3fvARB)( GLenum target, const GLfloat *tc )
 {
    PRE_LOOPBACK( MultiTexCoord3fvARB );
    _glapi_Dispatch->MultiTexCoord3fvARB( target, tc );
 }
 
-static void TAG(MultiTexCoord4fARB)( GLenum target, GLfloat s,
+static void GLAPIENTRY TAG(MultiTexCoord4fARB)( GLenum target, GLfloat s,
 				     GLfloat t, GLfloat r, GLfloat q )
 {
    PRE_LOOPBACK( MultiTexCoord4fARB );
    _glapi_Dispatch->MultiTexCoord4fARB( target, s, t, r, q );
 }
 
-static void TAG(MultiTexCoord4fvARB)( GLenum target, const GLfloat *tc )
+static void GLAPIENTRY TAG(MultiTexCoord4fvARB)( GLenum target, const GLfloat *tc )
 {
    PRE_LOOPBACK( MultiTexCoord4fvARB );
    _glapi_Dispatch->MultiTexCoord4fvARB( target, tc );
 }
 
-static void TAG(Normal3f)( GLfloat x, GLfloat y, GLfloat z )
+static void GLAPIENTRY TAG(Normal3f)( GLfloat x, GLfloat y, GLfloat z )
 {
    PRE_LOOPBACK( Normal3f );
    _glapi_Dispatch->Normal3f( x, y, z );
 }
 
-static void TAG(Normal3fv)( const GLfloat *v )
+static void GLAPIENTRY TAG(Normal3fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Normal3fv );
    _glapi_Dispatch->Normal3fv( v );
 }
 
-static void TAG(SecondaryColor3fEXT)( GLfloat r, GLfloat g, GLfloat b )
+static void GLAPIENTRY TAG(SecondaryColor3fEXT)( GLfloat r, GLfloat g, GLfloat b )
 {
    PRE_LOOPBACK( SecondaryColor3fEXT );
    _glapi_Dispatch->SecondaryColor3fEXT( r, g, b );
 }
 
-static void TAG(SecondaryColor3fvEXT)( const GLfloat *v )
+static void GLAPIENTRY TAG(SecondaryColor3fvEXT)( const GLfloat *v )
 {
    PRE_LOOPBACK( SecondaryColor3fvEXT );
    _glapi_Dispatch->SecondaryColor3fvEXT( v );
 }
 
-static void TAG(SecondaryColor3ubEXT)( GLubyte r, GLubyte g, GLubyte b )
+static void GLAPIENTRY TAG(SecondaryColor3ubEXT)( GLubyte r, GLubyte g, GLubyte b )
 {
    PRE_LOOPBACK( SecondaryColor3ubEXT );
    _glapi_Dispatch->SecondaryColor3ubEXT( r, g, b );
 }
 
-static void TAG(SecondaryColor3ubvEXT)( const GLubyte *v )
+static void GLAPIENTRY TAG(SecondaryColor3ubvEXT)( const GLubyte *v )
 {
    PRE_LOOPBACK( SecondaryColor3ubvEXT );
    _glapi_Dispatch->SecondaryColor3ubvEXT( v );
 }
 
-static void TAG(TexCoord1f)( GLfloat s )
+static void GLAPIENTRY TAG(TexCoord1f)( GLfloat s )
 {
    PRE_LOOPBACK( TexCoord1f );
    _glapi_Dispatch->TexCoord1f( s );
 }
 
-static void TAG(TexCoord1fv)( const GLfloat *tc )
+static void GLAPIENTRY TAG(TexCoord1fv)( const GLfloat *tc )
 {
    PRE_LOOPBACK( TexCoord1fv );
    _glapi_Dispatch->TexCoord1fv( tc );
 }
 
-static void TAG(TexCoord2f)( GLfloat s, GLfloat t )
+static void GLAPIENTRY TAG(TexCoord2f)( GLfloat s, GLfloat t )
 {
    PRE_LOOPBACK( TexCoord2f );
    _glapi_Dispatch->TexCoord2f( s, t );
 }
 
-static void TAG(TexCoord2fv)( const GLfloat *tc )
+static void GLAPIENTRY TAG(TexCoord2fv)( const GLfloat *tc )
 {
    PRE_LOOPBACK( TexCoord2fv );
    _glapi_Dispatch->TexCoord2fv( tc );
 }
 
-static void TAG(TexCoord3f)( GLfloat s, GLfloat t, GLfloat r )
+static void GLAPIENTRY TAG(TexCoord3f)( GLfloat s, GLfloat t, GLfloat r )
 {
    PRE_LOOPBACK( TexCoord3f );
    _glapi_Dispatch->TexCoord3f( s, t, r );
 }
 
-static void TAG(TexCoord3fv)( const GLfloat *tc )
+static void GLAPIENTRY TAG(TexCoord3fv)( const GLfloat *tc )
 {
    PRE_LOOPBACK( TexCoord3fv );
    _glapi_Dispatch->TexCoord3fv( tc );
 }
 
-static void TAG(TexCoord4f)( GLfloat s, GLfloat t, GLfloat r, GLfloat q )
+static void GLAPIENTRY TAG(TexCoord4f)( GLfloat s, GLfloat t, GLfloat r, GLfloat q )
 {
    PRE_LOOPBACK( TexCoord4f );
    _glapi_Dispatch->TexCoord4f( s, t, r, q );
 }
 
-static void TAG(TexCoord4fv)( const GLfloat *tc )
+static void GLAPIENTRY TAG(TexCoord4fv)( const GLfloat *tc )
 {
    PRE_LOOPBACK( TexCoord4fv );
    _glapi_Dispatch->TexCoord4fv( tc );
 }
 
-static void TAG(Vertex2f)( GLfloat x, GLfloat y )
+static void GLAPIENTRY TAG(Vertex2f)( GLfloat x, GLfloat y )
 {
    PRE_LOOPBACK( Vertex2f );
    _glapi_Dispatch->Vertex2f( x, y );
 }
 
-static void TAG(Vertex2fv)( const GLfloat *v )
+static void GLAPIENTRY TAG(Vertex2fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Vertex2fv );
    _glapi_Dispatch->Vertex2fv( v );
 }
 
-static void TAG(Vertex3f)( GLfloat x, GLfloat y, GLfloat z )
+static void GLAPIENTRY TAG(Vertex3f)( GLfloat x, GLfloat y, GLfloat z )
 {
    PRE_LOOPBACK( Vertex3f );
    _glapi_Dispatch->Vertex3f( x, y, z );
 }
 
-static void TAG(Vertex3fv)( const GLfloat *v )
+static void GLAPIENTRY TAG(Vertex3fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Vertex3fv );
    _glapi_Dispatch->Vertex3fv( v );
 }
 
-static void TAG(Vertex4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+static void GLAPIENTRY TAG(Vertex4f)( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
 {
    PRE_LOOPBACK( Vertex4f );
    _glapi_Dispatch->Vertex4f( x, y, z, w );
 }
 
-static void TAG(Vertex4fv)( const GLfloat *v )
+static void GLAPIENTRY TAG(Vertex4fv)( const GLfloat *v )
 {
    PRE_LOOPBACK( Vertex4fv );
    _glapi_Dispatch->Vertex4fv( v );
 }
 
-static void TAG(CallList)( GLuint i )
+static void GLAPIENTRY TAG(CallList)( GLuint i )
 {
    PRE_LOOPBACK( CallList );
    _glapi_Dispatch->CallList( i );
 }
 
-static void TAG(Begin)( GLenum mode )
+static void GLAPIENTRY TAG(Begin)( GLenum mode )
 {
    PRE_LOOPBACK( Begin );
    _glapi_Dispatch->Begin( mode );
 }
 
-static void TAG(End)( void )
+static void GLAPIENTRY TAG(End)( void )
 {
    PRE_LOOPBACK( End );
    _glapi_Dispatch->End();
 }
 
-static void TAG(Rectf)( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
+static void GLAPIENTRY TAG(Rectf)( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
 {
    PRE_LOOPBACK( Rectf );
    _glapi_Dispatch->Rectf( x1, y1, x2, y2 );
 }
 
-static void TAG(DrawArrays)( GLenum mode, GLint start, GLsizei count )
+static void GLAPIENTRY TAG(DrawArrays)( GLenum mode, GLint start, GLsizei count )
 {
    PRE_LOOPBACK( DrawArrays );
    _glapi_Dispatch->DrawArrays( mode, start, count );
 }
 
-static void TAG(DrawElements)( GLenum mode, GLsizei count, GLenum type,
+static void GLAPIENTRY TAG(DrawElements)( GLenum mode, GLsizei count, GLenum type,
 			       const GLvoid *indices )
 {
    PRE_LOOPBACK( DrawElements );
    _glapi_Dispatch->DrawElements( mode, count, type, indices );
 }
 
-static void TAG(DrawRangeElements)( GLenum mode, GLuint start,
+static void GLAPIENTRY TAG(DrawRangeElements)( GLenum mode, GLuint start,
 				    GLuint end, GLsizei count,
 				    GLenum type, const GLvoid *indices )
 {
@@ -377,26 +377,26 @@
    _glapi_Dispatch->DrawRangeElements( mode, start, end, count, type, indices );
 }
 
-static void TAG(EvalMesh1)( GLenum mode, GLint i1, GLint i2 )
+static void GLAPIENTRY TAG(EvalMesh1)( GLenum mode, GLint i1, GLint i2 )
 {
    PRE_LOOPBACK( EvalMesh1 );
    _glapi_Dispatch->EvalMesh1( mode, i1, i2 );
 }
 
-static void TAG(EvalMesh2)( GLenum mode, GLint i1, GLint i2,
+static void GLAPIENTRY TAG(EvalMesh2)( GLenum mode, GLint i1, GLint i2,
 			    GLint j1, GLint j2 )
 {
    PRE_LOOPBACK( EvalMesh2 );
    _glapi_Dispatch->EvalMesh2( mode, i1, i2, j1, j2 );
 }
 
-static void TAG(VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w )
+static void GLAPIENTRY TAG(VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w )
 {
    PRE_LOOPBACK( VertexAttrib4fNV );
    _glapi_Dispatch->VertexAttrib4fNV( index, x, y, z, w );
 }
 
-static void TAG(VertexAttrib4fvNV)( GLuint index, const GLfloat *v )
+static void GLAPIENTRY TAG(VertexAttrib4fvNV)( GLuint index, const GLfloat *v )
 {
    PRE_LOOPBACK( VertexAttrib4fvNV );
    _glapi_Dispatch->VertexAttrib4fvNV( index, v );
diff --git a/src/mesa/tnl/t_array_api.c b/src/mesa/tnl/t_array_api.c
index 229371f..85fada8 100644
--- a/src/mesa/tnl/t_array_api.c
+++ b/src/mesa/tnl/t_array_api.c
@@ -117,7 +117,7 @@
 /**
  * Called via the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -255,7 +255,7 @@
 /**
  * Called via the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _tnl_DrawRangeElements(GLenum mode,
 		       GLuint start, GLuint end,
 		       GLsizei count, GLenum type, const GLvoid *indices)
@@ -329,7 +329,7 @@
 /**
  * Called via the GL API dispatcher.
  */
-void
+void GLAPIENTRY
 _tnl_DrawElements(GLenum mode, GLsizei count, GLenum type,
 		  const GLvoid *indices)
 {
diff --git a/src/mesa/tnl/t_array_api.h b/src/mesa/tnl/t_array_api.h
index c26112b..61d1f69 100644
--- a/src/mesa/tnl/t_array_api.h
+++ b/src/mesa/tnl/t_array_api.h
@@ -30,12 +30,12 @@
 #include "t_context.h"
 
 
-extern void _tnl_DrawArrays(GLenum mode, GLint first, GLsizei count);
+extern void GLAPIENTRY _tnl_DrawArrays(GLenum mode, GLint first, GLsizei count);
 
-extern void _tnl_DrawElements(GLenum mode, GLsizei count, GLenum type,
+extern void GLAPIENTRY _tnl_DrawElements(GLenum mode, GLsizei count, GLenum type,
 			      const GLvoid *indices);
 
-extern void _tnl_DrawRangeElements(GLenum mode, GLuint start,
+extern void GLAPIENTRY _tnl_DrawRangeElements(GLenum mode, GLuint start,
 				   GLuint end, GLsizei count, GLenum type,
 				   const GLvoid *indices);
 
diff --git a/src/mesa/tnl/t_eval_api.c b/src/mesa/tnl/t_eval_api.c
index 294f1b7..5e68d7c 100644
--- a/src/mesa/tnl/t_eval_api.c
+++ b/src/mesa/tnl/t_eval_api.c
@@ -51,7 +51,7 @@
  *     map(1,2)_vertex is disabled, and to purge those vertices from
  *     the vb.
  */
-void
+void GLAPIENTRY
 _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -139,7 +139,7 @@
 
 
 
-void
+void GLAPIENTRY
 _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/tnl/t_eval_api.h b/src/mesa/tnl/t_eval_api.h
index 0ac6c0b..a24b121 100644
--- a/src/mesa/tnl/t_eval_api.h
+++ b/src/mesa/tnl/t_eval_api.h
@@ -33,9 +33,9 @@
 
 /* Use _mesa_save_EvalMesh{1,2} to save these to display lists.
  */
-extern void _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 );
+extern void GLAPIENTRY _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 );
 
-extern void _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2,
+extern void GLAPIENTRY _tnl_exec_EvalMesh2( GLenum mode, GLint i1, GLint i2,
 				 GLint j1, GLint j2 );
 
 void _tnl_eval_init( GLcontext *ctx );
diff --git a/src/mesa/tnl/t_imm_api.c b/src/mesa/tnl/t_imm_api.c
index c0dcb18..b4e67d8 100644
--- a/src/mesa/tnl/t_imm_api.c
+++ b/src/mesa/tnl/t_imm_api.c
@@ -99,7 +99,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _tnl_save_Begin( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -177,7 +177,7 @@
 }
 
 
-void
+void GLAPIENTRY
 _tnl_Begin( GLenum mode )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -382,7 +382,7 @@
       _tnl_flush_immediate( ctx, IM );
 }
 
-void
+void GLAPIENTRY
 _tnl_End(void)
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -427,13 +427,13 @@
    IM->Flag[count] |= VERT_BIT_COLOR0;				\
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Color3f( GLfloat red, GLfloat green, GLfloat blue )
 {
    COLOR( red, green, blue, 1.0 );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Color3ub( GLubyte red, GLubyte green, GLubyte blue )
 {
    COLOR(UBYTE_TO_FLOAT(red),
@@ -442,13 +442,13 @@
          1.0);
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Color4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
 {
    COLOR( red, green, blue, alpha );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Color4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha )
 {
    COLOR(UBYTE_TO_FLOAT(red),
@@ -457,13 +457,13 @@
          UBYTE_TO_FLOAT(alpha));
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Color3fv( const GLfloat *v )
 {
    COLOR( v[0], v[1], v[2], 1.0 );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Color3ubv( const GLubyte *v )
 {
    COLOR(UBYTE_TO_FLOAT(v[0]),
@@ -472,13 +472,13 @@
          1.0 );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Color4fv( const GLfloat *v )
 {
    COLOR( v[0], v[1], v[2], v[3] );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Color4ubv( const GLubyte *v)
 {
    COLOR(UBYTE_TO_FLOAT(v[0]),
@@ -502,13 +502,13 @@
    IM->Flag[count] |= VERT_BIT_COLOR1;			\
 }
 
-static void
+static void GLAPIENTRY
 _tnl_SecondaryColor3fEXT( GLfloat red, GLfloat green, GLfloat blue )
 {
    SECONDARY_COLOR( red, green, blue );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_SecondaryColor3ubEXT( GLubyte red, GLubyte green, GLubyte blue )
 {
    SECONDARY_COLOR(UBYTE_TO_FLOAT(red),
@@ -516,13 +516,13 @@
                    UBYTE_TO_FLOAT(blue));
 }
 
-static void
+static void GLAPIENTRY
 _tnl_SecondaryColor3fvEXT( const GLfloat *v )
 {
    SECONDARY_COLOR( v[0], v[1], v[2] );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_SecondaryColor3ubvEXT( const GLubyte *v )
 {
    SECONDARY_COLOR(UBYTE_TO_FLOAT(v[0]),
@@ -531,7 +531,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_EdgeFlag( GLboolean flag )
 {
    GLuint count;
@@ -542,7 +542,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_EdgeFlagv( const GLboolean *flag )
 {
    GLuint count;
@@ -553,7 +553,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_FogCoordfEXT( GLfloat f )
 {
    GET_IMMEDIATE;
@@ -563,7 +563,7 @@
    IM->Flag[count] |= VERT_BIT_FOG;
 }
 
-static void
+static void GLAPIENTRY
 _tnl_FogCoordfvEXT( const GLfloat *v )
 {
    GET_IMMEDIATE;
@@ -574,7 +574,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_Indexi( GLint c )
 {
    GLuint count;
@@ -585,7 +585,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_Indexiv( const GLint *c )
 {
    GLuint count;
@@ -624,14 +624,14 @@
 #define NORMALF NORMAL
 #endif
 
-static void
+static void GLAPIENTRY
 _tnl_Normal3f( GLfloat nx, GLfloat ny, GLfloat nz )
 {
    NORMALF(nx, ny, nz);
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_Normal3fv( const GLfloat *v )
 {
    NORMALF( v[0], v[1], v[2] );
@@ -703,51 +703,51 @@
 #define TEXCOORD2F TEXCOORD2
 #endif
 
-static void
+static void GLAPIENTRY
 _tnl_TexCoord1f( GLfloat s )
 {
    TEXCOORD1(s);
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_TexCoord2f( GLfloat s, GLfloat t )
 {
    TEXCOORD2F(s, t);
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_TexCoord3f( GLfloat s, GLfloat t, GLfloat r )
 {
    TEXCOORD3(s, t, r);
 }
 
-static void
+static void GLAPIENTRY
 _tnl_TexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q )
 {
    TEXCOORD4(s, t, r, q)
 }
 
-static void
+static void GLAPIENTRY
 _tnl_TexCoord1fv( const GLfloat *v )
 {
    TEXCOORD1(v[0]);
 }
 
-static void
+static void GLAPIENTRY
 _tnl_TexCoord2fv( const GLfloat *v )
 {
    TEXCOORD2F(v[0], v[1]);
 }
 
-static void
+static void GLAPIENTRY
 _tnl_TexCoord3fv( const GLfloat *v )
 {
    TEXCOORD3(v[0], v[1], v[2]);
 }
 
-static void
+static void GLAPIENTRY
 _tnl_TexCoord4fv( const GLfloat *v )
 {
    TEXCOORD4(v[0], v[1], v[2], v[3]);
@@ -845,41 +845,41 @@
 
 
 
-static void
+static void GLAPIENTRY
 _tnl_Vertex2f( GLfloat x, GLfloat y )
 {
    GET_IMMEDIATE;
    VERTEX2F( IM, x, y );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Vertex3f( GLfloat x, GLfloat y, GLfloat z )
 {
    GET_IMMEDIATE;
    VERTEX3F( IM, x, y, z );
 }
-static void
+static void GLAPIENTRY
 _tnl_Vertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
 {
    GET_IMMEDIATE;
    VERTEX4F( IM, x, y, z, w );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Vertex2fv( const GLfloat *v )
 {
    GET_IMMEDIATE;
    VERTEX2F( IM, v[0], v[1] );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Vertex3fv( const GLfloat *v )
 {
    GET_IMMEDIATE;
    VERTEX3F( IM, v[0], v[1], v[2] );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Vertex4fv( const GLfloat *v )
 {
    GET_IMMEDIATE;
@@ -978,49 +978,49 @@
 #define MULTI_TEXCOORD2F MULTI_TEXCOORD2
 #endif
 
-static void
+static void GLAPIENTRY
 _tnl_MultiTexCoord1fARB(GLenum target, GLfloat s)
 {
    MULTI_TEXCOORD1( target, s );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_MultiTexCoord1fvARB(GLenum target, const GLfloat *v)
 {
    MULTI_TEXCOORD1( target, v[0] );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_MultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t)
 {
    MULTI_TEXCOORD2F( target, s, t );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_MultiTexCoord2fvARB(GLenum target, const GLfloat *v)
 {
    MULTI_TEXCOORD2F( target, v[0], v[1] );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_MultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r)
 {
    MULTI_TEXCOORD3( target, s, t, r );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_MultiTexCoord3fvARB(GLenum target, const GLfloat *v)
 {
    MULTI_TEXCOORD3( target, v[0], v[1], v[2] );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_MultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q)
 {
    MULTI_TEXCOORD4( target, s, t, r, q );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_MultiTexCoord4fvARB(GLenum target, const GLfloat *v)
 {
    MULTI_TEXCOORD4( target, v[0], v[1], v[2], v[3] );
@@ -1082,28 +1082,28 @@
       _tnl_flush_immediate( NULL, IM );			\
 }
 
-static void
+static void GLAPIENTRY
 _tnl_EvalCoord1f( GLfloat u )
 {
    GET_IMMEDIATE;
    EVALCOORD1( IM, u );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_EvalCoord1fv( const GLfloat *u )
 {
    GET_IMMEDIATE;
    EVALCOORD1( IM, (GLfloat) *u );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_EvalCoord2f( GLfloat u, GLfloat v )
 {
    GET_IMMEDIATE;
    EVALCOORD2( IM, u, v );
 }
 
-static void
+static void GLAPIENTRY
 _tnl_EvalCoord2fv( const GLfloat *u )
 {
    GET_IMMEDIATE;
@@ -1111,7 +1111,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_EvalPoint1( GLint i )
 {
    GET_IMMEDIATE;
@@ -1119,7 +1119,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_EvalPoint2( GLint i, GLint j )
 {
    GET_IMMEDIATE;
@@ -1143,7 +1143,7 @@
 }
 
 
-static void
+static void GLAPIENTRY
 _tnl_ArrayElement( GLint i )
 {
    GET_IMMEDIATE;
@@ -1181,7 +1181,7 @@
  * NV_vertex_program
  */
 
-static void
+static void GLAPIENTRY
 _tnl_VertexAttrib4fNV( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w )
 {
    if (index < VERT_ATTRIB_MAX) {
@@ -1204,7 +1204,7 @@
    }
 }   
 
-static void
+static void GLAPIENTRY
 _tnl_VertexAttrib4fvNV( GLuint index, const GLfloat *v )
 {
    if (index < VERT_ATTRIB_MAX) {
@@ -1233,7 +1233,7 @@
  * vertices can now participate in the same immediate as regular ones,
  * even in most display lists.  
  */
-static void
+static void GLAPIENTRY
 _tnl_Rectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -1247,7 +1247,7 @@
    }
 }
 
-static void
+static void GLAPIENTRY
 _tnl_Materialfv( GLenum face, GLenum pname, const GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
diff --git a/src/mesa/tnl/t_imm_api.h b/src/mesa/tnl/t_imm_api.h
index a6a0623..a61b0d0 100644
--- a/src/mesa/tnl/t_imm_api.h
+++ b/src/mesa/tnl/t_imm_api.h
@@ -31,12 +31,12 @@
 #include "t_context.h"
 
 
-extern void _tnl_save_Begin( GLenum mode );
-extern void _tnl_Begin( GLenum mode );
+extern void GLAPIENTRY _tnl_save_Begin( GLenum mode );
+extern void GLAPIENTRY _tnl_Begin( GLenum mode );
 
-extern void _tnl_Begin( GLenum mode );
+extern void GLAPIENTRY _tnl_Begin( GLenum mode );
 
-extern void _tnl_End(void);
+extern void GLAPIENTRY _tnl_End(void);
 
 
 /* TNL-private internal functions for building higher-level operations:
