Naveen Neel / shedskin

Files at this revision

API Documentation at this revision

Comitter:
sca8er
Date:
Mon Mar 05 04:56:58 2012 +0000
Parent:
2:5853bf44af9f
Commit message:

Changed in this revision

GL/gl.h Show annotated file Show diff for this revision Revisions of this file
GL/glext.h Show annotated file Show diff for this revision Revisions of this file
GL/glu.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplus.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusbase.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusbrush.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdipluscolor.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdipluscolormatrix.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdipluseffects.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusenums.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusflat.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusgpstubs.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusgraphics.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusheaders.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusimageattributes.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusimagecodec.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusimaging.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusimpl.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusinit.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdipluslinecaps.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusmatrix.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusmem.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusmetafile.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusmetaheader.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdipluspath.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdipluspen.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdipluspixelformats.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplusstringformat.h Show annotated file Show diff for this revision Revisions of this file
gdiplus/gdiplustypes.h Show annotated file Show diff for this revision Revisions of this file
sys/fcntl.h Show annotated file Show diff for this revision Revisions of this file
sys/file.h Show annotated file Show diff for this revision Revisions of this file
sys/locking.h Show annotated file Show diff for this revision Revisions of this file
sys/param.h Show annotated file Show diff for this revision Revisions of this file
sys/stat.h Show annotated file Show diff for this revision Revisions of this file
sys/time.h Show annotated file Show diff for this revision Revisions of this file
sys/timeb.h Show annotated file Show diff for this revision Revisions of this file
sys/types.h Show annotated file Show diff for this revision Revisions of this file
sys/unistd.h Show annotated file Show diff for this revision Revisions of this file
sys/utime.h Show annotated file Show diff for this revision Revisions of this file
diff -r 5853bf44af9f -r 0c3bcea5b4d0 GL/gl.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GL/gl.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,1470 @@
+/*
+ * Mesa 3-D graphics library
+ * Version:  4.0
+ *
+ * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+/************************************************************************
+ * 2002-Apr-22, José Fonseca:
+ *   Removed non Win32 system-specific stuff
+ *
+ * 2002-Apr-17, Marcus Geelnard:
+ *   For win32, OpenGL 1.2 & 1.3 definitions are not made in this file
+ *   anymore, since under Windows those are regarded as extensions, and
+ *   are better defined in glext.h (especially the function prototypes may
+ *   conflict with extension function pointers). A few "cosmetical"
+ *   changes were also made to this file.
+ *
+ * 2002-Apr-15, Marcus Geelnard:
+ *   Modified this file to better fit a wider range of compilers, removed
+ *   Mesa specific stuff, and removed extension definitions (this file now
+ *   relies on GL/glext.h). Hopefully this file should now function as a
+ *   generic OpenGL gl.h include file for most compilers and environments.
+ *   Changed GLAPIENTRY to APIENTRY (to be consistent with GL/glext.h).
+ ************************************************************************/
+
+
+#ifndef __gl_h_
+#define __gl_h_
+
+
+
+/************************************************************************
+ * Begin system-specific stuff.
+ */
+/* __WIN32__ */
+#if !defined(__WIN32__) && (defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__))
+#  define __WIN32__
+#endif
+
+/* GLAPI, part 1 (use WINGDIAPI, if defined) */
+#if defined(__WIN32__) && defined(WINGDIAPI)
+#  define GLAPI WINGDIAPI
+#endif
+
+/* GLAPI, part 2 */
+#if !defined(GLAPI)
+#  if defined(_MSC_VER)                        /* Microsoft Visual C++ */
+#    define GLAPI __declspec(dllimport)
+#  elif defined(__LCC__) && defined(__WIN32__) /* LCC-Win32 */
+#    define GLAPI __stdcall
+#  else                                        /* Others (e.g. MinGW, Cygwin, non-win32) */
+#    define GLAPI extern
+#  endif
+#endif
+
+/* APIENTRY */
+#if !defined(APIENTRY)
+#  if defined(__WIN32__)
+#    define APIENTRY __stdcall
+#  else
+#    define APIENTRY
+#  endif
+#endif
+/*
+ * End system-specific stuff.
+ ************************************************************************/
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define GL_VERSION_1_1   1
+
+#if !defined(__WIN32__)
+#define GL_VERSION_1_2   1
+#define GL_VERSION_1_3   1
+#define GL_ARB_imaging   1
+#endif
+
+
+/*
+ *
+ * Datatypes
+ *
+ */
+#ifdef CENTERLINE_CLPP
+#define signed
+#endif
+typedef unsigned int    GLenum;
+typedef unsigned char   GLboolean;
+typedef unsigned int    GLbitfield;
+typedef void            GLvoid;
+typedef signed char     GLbyte;         /* 1-byte signed */
+typedef short           GLshort;        /* 2-byte signed */
+typedef int             GLint;          /* 4-byte signed */
+typedef unsigned char   GLubyte;        /* 1-byte unsigned */
+typedef unsigned short  GLushort;       /* 2-byte unsigned */
+typedef unsigned int    GLuint;         /* 4-byte unsigned */
+typedef int             GLsizei;        /* 4-byte signed */
+typedef float           GLfloat;        /* single precision float */
+typedef float           GLclampf;       /* single precision float in [0,1] */
+typedef double          GLdouble;       /* double precision float */
+typedef double          GLclampd;       /* double precision float in [0,1] */
+
+
+
+/************************************************************************
+ *
+ * Constants
+ *
+ ************************************************************************/
+
+/* Boolean values */
+#define GL_FALSE                                0x0
+#define GL_TRUE                                 0x1
+
+/* Data types */
+#define GL_BYTE                                 0x1400
+#define GL_UNSIGNED_BYTE                        0x1401
+#define GL_SHORT                                0x1402
+#define GL_UNSIGNED_SHORT                       0x1403
+#define GL_INT                                  0x1404
+#define GL_UNSIGNED_INT                         0x1405
+#define GL_FLOAT                                0x1406
+#define GL_DOUBLE                               0x140A
+#define GL_2_BYTES                              0x1407
+#define GL_3_BYTES                              0x1408
+#define GL_4_BYTES                              0x1409
+
+/* Primitives */
+#define GL_POINTS                               0x0000
+#define GL_LINES                                0x0001
+#define GL_LINE_LOOP                            0x0002
+#define GL_LINE_STRIP                           0x0003
+#define GL_TRIANGLES                            0x0004
+#define GL_TRIANGLE_STRIP                       0x0005
+#define GL_TRIANGLE_FAN                         0x0006
+#define GL_QUADS                                0x0007
+#define GL_QUAD_STRIP                           0x0008
+#define GL_POLYGON                              0x0009
+
+/* Vertex Arrays */
+#define GL_VERTEX_ARRAY                         0x8074
+#define GL_NORMAL_ARRAY                         0x8075
+#define GL_COLOR_ARRAY                          0x8076
+#define GL_INDEX_ARRAY                          0x8077
+#define GL_TEXTURE_COORD_ARRAY                  0x8078
+#define GL_EDGE_FLAG_ARRAY                      0x8079
+#define GL_VERTEX_ARRAY_SIZE                    0x807A
+#define GL_VERTEX_ARRAY_TYPE                    0x807B
+#define GL_VERTEX_ARRAY_STRIDE                  0x807C
+#define GL_NORMAL_ARRAY_TYPE                    0x807E
+#define GL_NORMAL_ARRAY_STRIDE                  0x807F
+#define GL_COLOR_ARRAY_SIZE                     0x8081
+#define GL_COLOR_ARRAY_TYPE                     0x8082
+#define GL_COLOR_ARRAY_STRIDE                   0x8083
+#define GL_INDEX_ARRAY_TYPE                     0x8085
+#define GL_INDEX_ARRAY_STRIDE                   0x8086
+#define GL_TEXTURE_COORD_ARRAY_SIZE             0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE             0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE           0x808A
+#define GL_EDGE_FLAG_ARRAY_STRIDE               0x808C
+#define GL_VERTEX_ARRAY_POINTER                 0x808E
+#define GL_NORMAL_ARRAY_POINTER                 0x808F
+#define GL_COLOR_ARRAY_POINTER                  0x8090
+#define GL_INDEX_ARRAY_POINTER                  0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER          0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER              0x8093
+#define GL_V2F                                  0x2A20
+#define GL_V3F                                  0x2A21
+#define GL_C4UB_V2F                             0x2A22
+#define GL_C4UB_V3F                             0x2A23
+#define GL_C3F_V3F                              0x2A24
+#define GL_N3F_V3F                              0x2A25
+#define GL_C4F_N3F_V3F                          0x2A26
+#define GL_T2F_V3F                              0x2A27
+#define GL_T4F_V4F                              0x2A28
+#define GL_T2F_C4UB_V3F                         0x2A29
+#define GL_T2F_C3F_V3F                          0x2A2A
+#define GL_T2F_N3F_V3F                          0x2A2B
+#define GL_T2F_C4F_N3F_V3F                      0x2A2C
+#define GL_T4F_C4F_N3F_V4F                      0x2A2D
+
+/* Matrix Mode */
+#define GL_MATRIX_MODE                          0x0BA0
+#define GL_MODELVIEW                            0x1700
+#define GL_PROJECTION                           0x1701
+#define GL_TEXTURE                              0x1702
+
+/* Points */
+#define GL_POINT_SMOOTH                         0x0B10
+#define GL_POINT_SIZE                           0x0B11
+#define GL_POINT_SIZE_GRANULARITY               0x0B13
+#define GL_POINT_SIZE_RANGE                     0x0B12
+
+/* Lines */
+#define GL_LINE_SMOOTH                          0x0B20
+#define GL_LINE_STIPPLE                         0x0B24
+#define GL_LINE_STIPPLE_PATTERN                 0x0B25
+#define GL_LINE_STIPPLE_REPEAT                  0x0B26
+#define GL_LINE_WIDTH                           0x0B21
+#define GL_LINE_WIDTH_GRANULARITY               0x0B23
+#define GL_LINE_WIDTH_RANGE                     0x0B22
+
+/* Polygons */
+#define GL_POINT                                0x1B00
+#define GL_LINE                                 0x1B01
+#define GL_FILL                                 0x1B02
+#define GL_CW                                   0x0900
+#define GL_CCW                                  0x0901
+#define GL_FRONT                                0x0404
+#define GL_BACK                                 0x0405
+#define GL_POLYGON_MODE                         0x0B40
+#define GL_POLYGON_SMOOTH                       0x0B41
+#define GL_POLYGON_STIPPLE                      0x0B42
+#define GL_EDGE_FLAG                            0x0B43
+#define GL_CULL_FACE                            0x0B44
+#define GL_CULL_FACE_MODE                       0x0B45
+#define GL_FRONT_FACE                           0x0B46
+#define GL_POLYGON_OFFSET_FACTOR                0x8038
+#define GL_POLYGON_OFFSET_UNITS                 0x2A00
+#define GL_POLYGON_OFFSET_POINT                 0x2A01
+#define GL_POLYGON_OFFSET_LINE                  0x2A02
+#define GL_POLYGON_OFFSET_FILL                  0x8037
+
+/* Display Lists */
+#define GL_COMPILE                              0x1300
+#define GL_COMPILE_AND_EXECUTE                  0x1301
+#define GL_LIST_BASE                            0x0B32
+#define GL_LIST_INDEX                           0x0B33
+#define GL_LIST_MODE                            0x0B30
+
+/* Depth buffer */
+#define GL_NEVER                                0x0200
+#define GL_LESS                                 0x0201
+#define GL_EQUAL                                0x0202
+#define GL_LEQUAL                               0x0203
+#define GL_GREATER                              0x0204
+#define GL_NOTEQUAL                             0x0205
+#define GL_GEQUAL                               0x0206
+#define GL_ALWAYS                               0x0207
+#define GL_DEPTH_TEST                           0x0B71
+#define GL_DEPTH_BITS                           0x0D56
+#define GL_DEPTH_CLEAR_VALUE                    0x0B73
+#define GL_DEPTH_FUNC                           0x0B74
+#define GL_DEPTH_RANGE                          0x0B70
+#define GL_DEPTH_WRITEMASK                      0x0B72
+#define GL_DEPTH_COMPONENT                      0x1902
+
+/* Lighting */
+#define GL_LIGHTING                             0x0B50
+#define GL_LIGHT0                               0x4000
+#define GL_LIGHT1                               0x4001
+#define GL_LIGHT2                               0x4002
+#define GL_LIGHT3                               0x4003
+#define GL_LIGHT4                               0x4004
+#define GL_LIGHT5                               0x4005
+#define GL_LIGHT6                               0x4006
+#define GL_LIGHT7                               0x4007
+#define GL_SPOT_EXPONENT                        0x1205
+#define GL_SPOT_CUTOFF                          0x1206
+#define GL_CONSTANT_ATTENUATION                 0x1207
+#define GL_LINEAR_ATTENUATION                   0x1208
+#define GL_QUADRATIC_ATTENUATION                0x1209
+#define GL_AMBIENT                              0x1200
+#define GL_DIFFUSE                              0x1201
+#define GL_SPECULAR                             0x1202
+#define GL_SHININESS                            0x1601
+#define GL_EMISSION                             0x1600
+#define GL_POSITION                             0x1203
+#define GL_SPOT_DIRECTION                       0x1204
+#define GL_AMBIENT_AND_DIFFUSE                  0x1602
+#define GL_COLOR_INDEXES                        0x1603
+#define GL_LIGHT_MODEL_TWO_SIDE                 0x0B52
+#define GL_LIGHT_MODEL_LOCAL_VIEWER             0x0B51
+#define GL_LIGHT_MODEL_AMBIENT                  0x0B53
+#define GL_FRONT_AND_BACK                       0x0408
+#define GL_SHADE_MODEL                          0x0B54
+#define GL_FLAT                                 0x1D00
+#define GL_SMOOTH                               0x1D01
+#define GL_COLOR_MATERIAL                       0x0B57
+#define GL_COLOR_MATERIAL_FACE                  0x0B55
+#define GL_COLOR_MATERIAL_PARAMETER             0x0B56
+#define GL_NORMALIZE                            0x0BA1
+
+/* User clipping planes */
+#define GL_CLIP_PLANE0                          0x3000
+#define GL_CLIP_PLANE1                          0x3001
+#define GL_CLIP_PLANE2                          0x3002
+#define GL_CLIP_PLANE3                          0x3003
+#define GL_CLIP_PLANE4                          0x3004
+#define GL_CLIP_PLANE5                          0x3005
+
+/* Accumulation buffer */
+#define GL_ACCUM_RED_BITS                       0x0D58
+#define GL_ACCUM_GREEN_BITS                     0x0D59
+#define GL_ACCUM_BLUE_BITS                      0x0D5A
+#define GL_ACCUM_ALPHA_BITS                     0x0D5B
+#define GL_ACCUM_CLEAR_VALUE                    0x0B80
+#define GL_ACCUM                                0x0100
+#define GL_ADD                                  0x0104
+#define GL_LOAD                                 0x0101
+#define GL_MULT                                 0x0103
+#define GL_RETURN                               0x0102
+
+/* Alpha testing */
+#define GL_ALPHA_TEST                           0x0BC0
+#define GL_ALPHA_TEST_REF                       0x0BC2
+#define GL_ALPHA_TEST_FUNC                      0x0BC1
+
+/* Blending */
+#define GL_BLEND                                0x0BE2
+#define GL_BLEND_SRC                            0x0BE1
+#define GL_BLEND_DST                            0x0BE0
+#define GL_ZERO                                 0x0
+#define GL_ONE                                  0x1
+#define GL_SRC_COLOR                            0x0300
+#define GL_ONE_MINUS_SRC_COLOR                  0x0301
+#define GL_SRC_ALPHA                            0x0302
+#define GL_ONE_MINUS_SRC_ALPHA                  0x0303
+#define GL_DST_ALPHA                            0x0304
+#define GL_ONE_MINUS_DST_ALPHA                  0x0305
+#define GL_DST_COLOR                            0x0306
+#define GL_ONE_MINUS_DST_COLOR                  0x0307
+#define GL_SRC_ALPHA_SATURATE                   0x0308
+#define GL_CONSTANT_COLOR                       0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR             0x8002
+#define GL_CONSTANT_ALPHA                       0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA             0x8004
+
+/* Render Mode */
+#define GL_FEEDBACK                             0x1C01
+#define GL_RENDER                               0x1C00
+#define GL_SELECT                               0x1C02
+
+/* Feedback */
+#define GL_2D                                   0x0600
+#define GL_3D                                   0x0601
+#define GL_3D_COLOR                             0x0602
+#define GL_3D_COLOR_TEXTURE                     0x0603
+#define GL_4D_COLOR_TEXTURE                     0x0604
+#define GL_POINT_TOKEN                          0x0701
+#define GL_LINE_TOKEN                           0x0702
+#define GL_LINE_RESET_TOKEN                     0x0707
+#define GL_POLYGON_TOKEN                        0x0703
+#define GL_BITMAP_TOKEN                         0x0704
+#define GL_DRAW_PIXEL_TOKEN                     0x0705
+#define GL_COPY_PIXEL_TOKEN                     0x0706
+#define GL_PASS_THROUGH_TOKEN                   0x0700
+#define GL_FEEDBACK_BUFFER_POINTER              0x0DF0
+#define GL_FEEDBACK_BUFFER_SIZE                 0x0DF1
+#define GL_FEEDBACK_BUFFER_TYPE                 0x0DF2
+
+/* Selection */
+#define GL_SELECTION_BUFFER_POINTER             0x0DF3
+#define GL_SELECTION_BUFFER_SIZE                0x0DF4
+
+/* Fog */
+#define GL_FOG                                  0x0B60
+#define GL_FOG_MODE                             0x0B65
+#define GL_FOG_DENSITY                          0x0B62
+#define GL_FOG_COLOR                            0x0B66
+#define GL_FOG_INDEX                            0x0B61
+#define GL_FOG_START                            0x0B63
+#define GL_FOG_END                              0x0B64
+#define GL_LINEAR                               0x2601
+#define GL_EXP                                  0x0800
+#define GL_EXP2                                 0x0801
+
+/* Logic Ops */
+#define GL_LOGIC_OP                             0x0BF1
+#define GL_INDEX_LOGIC_OP                       0x0BF1
+#define GL_COLOR_LOGIC_OP                       0x0BF2
+#define GL_LOGIC_OP_MODE                        0x0BF0
+#define GL_CLEAR                                0x1500
+#define GL_SET                                  0x150F
+#define GL_COPY                                 0x1503
+#define GL_COPY_INVERTED                        0x150C
+#define GL_NOOP                                 0x1505
+#define GL_INVERT                               0x150A
+#define GL_AND                                  0x1501
+#define GL_NAND                                 0x150E
+#define GL_OR                                   0x1507
+#define GL_NOR                                  0x1508
+#define GL_XOR                                  0x1506
+#define GL_EQUIV                                0x1509
+#define GL_AND_REVERSE                          0x1502
+#define GL_AND_INVERTED                         0x1504
+#define GL_OR_REVERSE                           0x150B
+#define GL_OR_INVERTED                          0x150D
+
+/* Stencil */
+#define GL_STENCIL_TEST                         0x0B90
+#define GL_STENCIL_WRITEMASK                    0x0B98
+#define GL_STENCIL_BITS                         0x0D57
+#define GL_STENCIL_FUNC                         0x0B92
+#define GL_STENCIL_VALUE_MASK                   0x0B93
+#define GL_STENCIL_REF                          0x0B97
+#define GL_STENCIL_FAIL                         0x0B94
+#define GL_STENCIL_PASS_DEPTH_PASS              0x0B96
+#define GL_STENCIL_PASS_DEPTH_FAIL              0x0B95
+#define GL_STENCIL_CLEAR_VALUE                  0x0B91
+#define GL_STENCIL_INDEX                        0x1901
+#define GL_KEEP                                 0x1E00
+#define GL_REPLACE                              0x1E01
+#define GL_INCR                                 0x1E02
+#define GL_DECR                                 0x1E03
+
+/* Buffers, Pixel Drawing/Reading */
+#define GL_NONE                                 0x0
+#define GL_LEFT                                 0x0406
+#define GL_RIGHT                                0x0407
+/*GL_FRONT                                      0x0404 */
+/*GL_BACK                                       0x0405 */
+/*GL_FRONT_AND_BACK                             0x0408 */
+#define GL_FRONT_LEFT                           0x0400
+#define GL_FRONT_RIGHT                          0x0401
+#define GL_BACK_LEFT                            0x0402
+#define GL_BACK_RIGHT                           0x0403
+#define GL_AUX0                                 0x0409
+#define GL_AUX1                                 0x040A
+#define GL_AUX2                                 0x040B
+#define GL_AUX3                                 0x040C
+#define GL_COLOR_INDEX                          0x1900
+#define GL_RED                                  0x1903
+#define GL_GREEN                                0x1904
+#define GL_BLUE                                 0x1905
+#define GL_ALPHA                                0x1906
+#define GL_LUMINANCE                            0x1909
+#define GL_LUMINANCE_ALPHA                      0x190A
+#define GL_ALPHA_BITS                           0x0D55
+#define GL_RED_BITS                             0x0D52
+#define GL_GREEN_BITS                           0x0D53
+#define GL_BLUE_BITS                            0x0D54
+#define GL_INDEX_BITS                           0x0D51
+#define GL_SUBPIXEL_BITS                        0x0D50
+#define GL_AUX_BUFFERS                          0x0C00
+#define GL_READ_BUFFER                          0x0C02
+#define GL_DRAW_BUFFER                          0x0C01
+#define GL_DOUBLEBUFFER                         0x0C32
+#define GL_STEREO                               0x0C33
+#define GL_BITMAP                               0x1A00
+#define GL_COLOR                                0x1800
+#define GL_DEPTH                                0x1801
+#define GL_STENCIL                              0x1802
+#define GL_DITHER                               0x0BD0
+#define GL_RGB                                  0x1907
+#define GL_RGBA                                 0x1908
+
+/* Implementation limits */
+#define GL_MAX_LIST_NESTING                     0x0B31
+#define GL_MAX_ATTRIB_STACK_DEPTH               0x0D35
+#define GL_MAX_MODELVIEW_STACK_DEPTH            0x0D36
+#define GL_MAX_NAME_STACK_DEPTH                 0x0D37
+#define GL_MAX_PROJECTION_STACK_DEPTH           0x0D38
+#define GL_MAX_TEXTURE_STACK_DEPTH              0x0D39
+#define GL_MAX_EVAL_ORDER                       0x0D30
+#define GL_MAX_LIGHTS                           0x0D31
+#define GL_MAX_CLIP_PLANES                      0x0D32
+#define GL_MAX_TEXTURE_SIZE                     0x0D33
+#define GL_MAX_PIXEL_MAP_TABLE                  0x0D34
+#define GL_MAX_VIEWPORT_DIMS                    0x0D3A
+#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH        0x0D3B
+
+/* Gets */
+#define GL_ATTRIB_STACK_DEPTH                   0x0BB0
+#define GL_CLIENT_ATTRIB_STACK_DEPTH            0x0BB1
+#define GL_COLOR_CLEAR_VALUE                    0x0C22
+#define GL_COLOR_WRITEMASK                      0x0C23
+#define GL_CURRENT_INDEX                        0x0B01
+#define GL_CURRENT_COLOR                        0x0B00
+#define GL_CURRENT_NORMAL                       0x0B02
+#define GL_CURRENT_RASTER_COLOR                 0x0B04
+#define GL_CURRENT_RASTER_DISTANCE              0x0B09
+#define GL_CURRENT_RASTER_INDEX                 0x0B05
+#define GL_CURRENT_RASTER_POSITION              0x0B07
+#define GL_CURRENT_RASTER_TEXTURE_COORDS        0x0B06
+#define GL_CURRENT_RASTER_POSITION_VALID        0x0B08
+#define GL_CURRENT_TEXTURE_COORDS               0x0B03
+#define GL_INDEX_CLEAR_VALUE                    0x0C20
+#define GL_INDEX_MODE                           0x0C30
+#define GL_INDEX_WRITEMASK                      0x0C21
+#define GL_MODELVIEW_MATRIX                     0x0BA6
+#define GL_MODELVIEW_STACK_DEPTH                0x0BA3
+#define GL_NAME_STACK_DEPTH                     0x0D70
+#define GL_PROJECTION_MATRIX                    0x0BA7
+#define GL_PROJECTION_STACK_DEPTH               0x0BA4
+#define GL_RENDER_MODE                          0x0C40
+#define GL_RGBA_MODE                            0x0C31
+#define GL_TEXTURE_MATRIX                       0x0BA8
+#define GL_TEXTURE_STACK_DEPTH                  0x0BA5
+#define GL_VIEWPORT                             0x0BA2
+
+/* Evaluators */
+#define GL_AUTO_NORMAL                          0x0D80
+#define GL_MAP1_COLOR_4                         0x0D90
+#define GL_MAP1_GRID_DOMAIN                     0x0DD0
+#define GL_MAP1_GRID_SEGMENTS                   0x0DD1
+#define GL_MAP1_INDEX                           0x0D91
+#define GL_MAP1_NORMAL                          0x0D92
+#define GL_MAP1_TEXTURE_COORD_1                 0x0D93
+#define GL_MAP1_TEXTURE_COORD_2                 0x0D94
+#define GL_MAP1_TEXTURE_COORD_3                 0x0D95
+#define GL_MAP1_TEXTURE_COORD_4                 0x0D96
+#define GL_MAP1_VERTEX_3                        0x0D97
+#define GL_MAP1_VERTEX_4                        0x0D98
+#define GL_MAP2_COLOR_4                         0x0DB0
+#define GL_MAP2_GRID_DOMAIN                     0x0DD2
+#define GL_MAP2_GRID_SEGMENTS                   0x0DD3
+#define GL_MAP2_INDEX                           0x0DB1
+#define GL_MAP2_NORMAL                          0x0DB2
+#define GL_MAP2_TEXTURE_COORD_1                 0x0DB3
+#define GL_MAP2_TEXTURE_COORD_2                 0x0DB4
+#define GL_MAP2_TEXTURE_COORD_3                 0x0DB5
+#define GL_MAP2_TEXTURE_COORD_4                 0x0DB6
+#define GL_MAP2_VERTEX_3                        0x0DB7
+#define GL_MAP2_VERTEX_4                        0x0DB8
+#define GL_COEFF                                0x0A00
+#define GL_DOMAIN                               0x0A02
+#define GL_ORDER                                0x0A01
+
+/* Hints */
+#define GL_FOG_HINT                             0x0C54
+#define GL_LINE_SMOOTH_HINT                     0x0C52
+#define GL_PERSPECTIVE_CORRECTION_HINT          0x0C50
+#define GL_POINT_SMOOTH_HINT                    0x0C51
+#define GL_POLYGON_SMOOTH_HINT                  0x0C53
+#define GL_DONT_CARE                            0x1100
+#define GL_FASTEST                              0x1101
+#define GL_NICEST                               0x1102
+
+/* Scissor box */
+#define GL_SCISSOR_TEST                         0x0C11
+#define GL_SCISSOR_BOX                          0x0C10
+
+/* Pixel Mode / Transfer */
+#define GL_MAP_COLOR                            0x0D10
+#define GL_MAP_STENCIL                          0x0D11
+#define GL_INDEX_SHIFT                          0x0D12
+#define GL_INDEX_OFFSET                         0x0D13
+#define GL_RED_SCALE                            0x0D14
+#define GL_RED_BIAS                             0x0D15
+#define GL_GREEN_SCALE                          0x0D18
+#define GL_GREEN_BIAS                           0x0D19
+#define GL_BLUE_SCALE                           0x0D1A
+#define GL_BLUE_BIAS                            0x0D1B
+#define GL_ALPHA_SCALE                          0x0D1C
+#define GL_ALPHA_BIAS                           0x0D1D
+#define GL_DEPTH_SCALE                          0x0D1E
+#define GL_DEPTH_BIAS                           0x0D1F
+#define GL_PIXEL_MAP_S_TO_S_SIZE                0x0CB1
+#define GL_PIXEL_MAP_I_TO_I_SIZE                0x0CB0
+#define GL_PIXEL_MAP_I_TO_R_SIZE                0x0CB2
+#define GL_PIXEL_MAP_I_TO_G_SIZE                0x0CB3
+#define GL_PIXEL_MAP_I_TO_B_SIZE                0x0CB4
+#define GL_PIXEL_MAP_I_TO_A_SIZE                0x0CB5
+#define GL_PIXEL_MAP_R_TO_R_SIZE                0x0CB6
+#define GL_PIXEL_MAP_G_TO_G_SIZE                0x0CB7
+#define GL_PIXEL_MAP_B_TO_B_SIZE                0x0CB8
+#define GL_PIXEL_MAP_A_TO_A_SIZE                0x0CB9
+#define GL_PIXEL_MAP_S_TO_S                     0x0C71
+#define GL_PIXEL_MAP_I_TO_I                     0x0C70
+#define GL_PIXEL_MAP_I_TO_R                     0x0C72
+#define GL_PIXEL_MAP_I_TO_G                     0x0C73
+#define GL_PIXEL_MAP_I_TO_B                     0x0C74
+#define GL_PIXEL_MAP_I_TO_A                     0x0C75
+#define GL_PIXEL_MAP_R_TO_R                     0x0C76
+#define GL_PIXEL_MAP_G_TO_G                     0x0C77
+#define GL_PIXEL_MAP_B_TO_B                     0x0C78
+#define GL_PIXEL_MAP_A_TO_A                     0x0C79
+#define GL_PACK_ALIGNMENT                       0x0D05
+#define GL_PACK_LSB_FIRST                       0x0D01
+#define GL_PACK_ROW_LENGTH                      0x0D02
+#define GL_PACK_SKIP_PIXELS                     0x0D04
+#define GL_PACK_SKIP_ROWS                       0x0D03
+#define GL_PACK_SWAP_BYTES                      0x0D00
+#define GL_UNPACK_ALIGNMENT                     0x0CF5
+#define GL_UNPACK_LSB_FIRST                     0x0CF1
+#define GL_UNPACK_ROW_LENGTH                    0x0CF2
+#define GL_UNPACK_SKIP_PIXELS                   0x0CF4
+#define GL_UNPACK_SKIP_ROWS                     0x0CF3
+#define GL_UNPACK_SWAP_BYTES                    0x0CF0
+#define GL_ZOOM_X                               0x0D16
+#define GL_ZOOM_Y                               0x0D17
+
+/* Texture mapping */
+#define GL_TEXTURE_ENV                          0x2300
+#define GL_TEXTURE_ENV_MODE                     0x2200
+#define GL_TEXTURE_1D                           0x0DE0
+#define GL_TEXTURE_2D                           0x0DE1
+#define GL_TEXTURE_WRAP_S                       0x2802
+#define GL_TEXTURE_WRAP_T                       0x2803
+#define GL_TEXTURE_MAG_FILTER                   0x2800
+#define GL_TEXTURE_MIN_FILTER                   0x2801
+#define GL_TEXTURE_ENV_COLOR                    0x2201
+#define GL_TEXTURE_GEN_S                        0x0C60
+#define GL_TEXTURE_GEN_T                        0x0C61
+#define GL_TEXTURE_GEN_MODE                     0x2500
+#define GL_TEXTURE_BORDER_COLOR                 0x1004
+#define GL_TEXTURE_WIDTH                        0x1000
+#define GL_TEXTURE_HEIGHT                       0x1001
+#define GL_TEXTURE_BORDER                       0x1005
+#define GL_TEXTURE_COMPONENTS                   0x1003
+#define GL_TEXTURE_RED_SIZE                     0x805C
+#define GL_TEXTURE_GREEN_SIZE                   0x805D
+#define GL_TEXTURE_BLUE_SIZE                    0x805E
+#define GL_TEXTURE_ALPHA_SIZE                   0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE               0x8060
+#define GL_TEXTURE_INTENSITY_SIZE               0x8061
+#define GL_NEAREST_MIPMAP_NEAREST               0x2700
+#define GL_NEAREST_MIPMAP_LINEAR                0x2702
+#define GL_LINEAR_MIPMAP_NEAREST                0x2701
+#define GL_LINEAR_MIPMAP_LINEAR                 0x2703
+#define GL_OBJECT_LINEAR                        0x2401
+#define GL_OBJECT_PLANE                         0x2501
+#define GL_EYE_LINEAR                           0x2400
+#define GL_EYE_PLANE                            0x2502
+#define GL_SPHERE_MAP                           0x2402
+#define GL_DECAL                                0x2101
+#define GL_MODULATE                             0x2100
+#define GL_NEAREST                              0x2600
+#define GL_REPEAT                               0x2901
+#define GL_CLAMP                                0x2900
+#define GL_S                                    0x2000
+#define GL_T                                    0x2001
+#define GL_R                                    0x2002
+#define GL_Q                                    0x2003
+#define GL_TEXTURE_GEN_R                        0x0C62
+#define GL_TEXTURE_GEN_Q                        0x0C63
+
+/* Utility */
+#define GL_VENDOR                               0x1F00
+#define GL_RENDERER                             0x1F01
+#define GL_VERSION                              0x1F02
+#define GL_EXTENSIONS                           0x1F03
+
+/* Errors */
+#define GL_NO_ERROR                             0x0
+#define GL_INVALID_VALUE                        0x0501
+#define GL_INVALID_ENUM                         0x0500
+#define GL_INVALID_OPERATION                    0x0502
+#define GL_STACK_OVERFLOW                       0x0503
+#define GL_STACK_UNDERFLOW                      0x0504
+#define GL_OUT_OF_MEMORY                        0x0505
+
+/* glPush/PopAttrib bits */
+#define GL_CURRENT_BIT                          0x00000001
+#define GL_POINT_BIT                            0x00000002
+#define GL_LINE_BIT                             0x00000004
+#define GL_POLYGON_BIT                          0x00000008
+#define GL_POLYGON_STIPPLE_BIT                  0x00000010
+#define GL_PIXEL_MODE_BIT                       0x00000020
+#define GL_LIGHTING_BIT                         0x00000040
+#define GL_FOG_BIT                              0x00000080
+#define GL_DEPTH_BUFFER_BIT                     0x00000100
+#define GL_ACCUM_BUFFER_BIT                     0x00000200
+#define GL_STENCIL_BUFFER_BIT                   0x00000400
+#define GL_VIEWPORT_BIT                         0x00000800
+#define GL_TRANSFORM_BIT                        0x00001000
+#define GL_ENABLE_BIT                           0x00002000
+#define GL_COLOR_BUFFER_BIT                     0x00004000
+#define GL_HINT_BIT                             0x00008000
+#define GL_EVAL_BIT                             0x00010000
+#define GL_LIST_BIT                             0x00020000
+#define GL_TEXTURE_BIT                          0x00040000
+#define GL_SCISSOR_BIT                          0x00080000
+#define GL_ALL_ATTRIB_BITS                      0x000FFFFF
+
+
+/* OpenGL 1.1 */
+#define GL_PROXY_TEXTURE_1D                     0x8063
+#define GL_PROXY_TEXTURE_2D                     0x8064
+#define GL_TEXTURE_PRIORITY                     0x8066
+#define GL_TEXTURE_RESIDENT                     0x8067
+#define GL_TEXTURE_BINDING_1D                   0x8068
+#define GL_TEXTURE_BINDING_2D                   0x8069
+#define GL_TEXTURE_INTERNAL_FORMAT              0x1003
+#define GL_ALPHA4                               0x803B
+#define GL_ALPHA8                               0x803C
+#define GL_ALPHA12                              0x803D
+#define GL_ALPHA16                              0x803E
+#define GL_LUMINANCE4                           0x803F
+#define GL_LUMINANCE8                           0x8040
+#define GL_LUMINANCE12                          0x8041
+#define GL_LUMINANCE16                          0x8042
+#define GL_LUMINANCE4_ALPHA4                    0x8043
+#define GL_LUMINANCE6_ALPHA2                    0x8044
+#define GL_LUMINANCE8_ALPHA8                    0x8045
+#define GL_LUMINANCE12_ALPHA4                   0x8046
+#define GL_LUMINANCE12_ALPHA12                  0x8047
+#define GL_LUMINANCE16_ALPHA16                  0x8048
+#define GL_INTENSITY                            0x8049
+#define GL_INTENSITY4                           0x804A
+#define GL_INTENSITY8                           0x804B
+#define GL_INTENSITY12                          0x804C
+#define GL_INTENSITY16                          0x804D
+#define GL_R3_G3_B2                             0x2A10
+#define GL_RGB4                                 0x804F
+#define GL_RGB5                                 0x8050
+#define GL_RGB8                                 0x8051
+#define GL_RGB10                                0x8052
+#define GL_RGB12                                0x8053
+#define GL_RGB16                                0x8054
+#define GL_RGBA2                                0x8055
+#define GL_RGBA4                                0x8056
+#define GL_RGB5_A1                              0x8057
+#define GL_RGBA8                                0x8058
+#define GL_RGB10_A2                             0x8059
+#define GL_RGBA12                               0x805A
+#define GL_RGBA16                               0x805B
+#define GL_CLIENT_PIXEL_STORE_BIT               0x00000001
+#define GL_CLIENT_VERTEX_ARRAY_BIT              0x00000002
+#define GL_ALL_CLIENT_ATTRIB_BITS               0xFFFFFFFF
+#define GL_CLIENT_ALL_ATTRIB_BITS               0xFFFFFFFF
+
+
+/* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since
+   it is treated as extensions (defined in glext.h) */
+#if !defined(__WIN32__)
+
+/* OpenGL 1.2 */
+#define GL_RESCALE_NORMAL                       0x803A
+#define GL_CLAMP_TO_EDGE                        0x812F
+#define GL_MAX_ELEMENTS_VERTICES                0x80E8
+#define GL_MAX_ELEMENTS_INDICES                 0x80E9
+#define GL_BGR                                  0x80E0
+#define GL_BGRA                                 0x80E1
+#define GL_UNSIGNED_BYTE_3_3_2                  0x8032
+#define GL_UNSIGNED_BYTE_2_3_3_REV              0x8362
+#define GL_UNSIGNED_SHORT_5_6_5                 0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV             0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4               0x8033
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV           0x8365
+#define GL_UNSIGNED_SHORT_5_5_5_1               0x8034
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV           0x8366
+#define GL_UNSIGNED_INT_8_8_8_8                 0x8035
+#define GL_UNSIGNED_INT_8_8_8_8_REV             0x8367
+#define GL_UNSIGNED_INT_10_10_10_2              0x8036
+#define GL_UNSIGNED_INT_2_10_10_10_REV          0x8368
+#define GL_LIGHT_MODEL_COLOR_CONTROL            0x81F8
+#define GL_SINGLE_COLOR                         0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR              0x81FA
+#define GL_TEXTURE_MIN_LOD                      0x813A
+#define GL_TEXTURE_MAX_LOD                      0x813B
+#define GL_TEXTURE_BASE_LEVEL                   0x813C
+#define GL_TEXTURE_MAX_LEVEL                    0x813D
+#define GL_SMOOTH_POINT_SIZE_RANGE              0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY        0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE              0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY        0x0B23
+#define GL_ALIASED_POINT_SIZE_RANGE             0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE             0x846E
+#define GL_PACK_SKIP_IMAGES                     0x806B
+#define GL_PACK_IMAGE_HEIGHT                    0x806C
+#define GL_UNPACK_SKIP_IMAGES                   0x806D
+#define GL_UNPACK_IMAGE_HEIGHT                  0x806E
+#define GL_TEXTURE_3D                           0x806F
+#define GL_PROXY_TEXTURE_3D                     0x8070
+#define GL_TEXTURE_DEPTH                        0x8071
+#define GL_TEXTURE_WRAP_R                       0x8072
+#define GL_MAX_3D_TEXTURE_SIZE                  0x8073
+#define GL_TEXTURE_BINDING_3D                   0x806A
+
+/* OpenGL 1.2 imaging subset */
+/* GL_EXT_color_table */
+#define GL_COLOR_TABLE                          0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE         0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE        0x80D2
+#define GL_PROXY_COLOR_TABLE                    0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE   0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE  0x80D5
+#define GL_COLOR_TABLE_SCALE                    0x80D6
+#define GL_COLOR_TABLE_BIAS                     0x80D7
+#define GL_COLOR_TABLE_FORMAT                   0x80D8
+#define GL_COLOR_TABLE_WIDTH                    0x80D9
+#define GL_COLOR_TABLE_RED_SIZE                 0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE               0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE                0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE               0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE           0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE           0x80DF
+/* GL_EXT_convolution and GL_HP_convolution_border_modes */
+#define GL_CONVOLUTION_1D                       0x8010
+#define GL_CONVOLUTION_2D                       0x8011
+#define GL_SEPARABLE_2D                         0x8012
+#define GL_CONVOLUTION_BORDER_MODE              0x8013
+#define GL_CONVOLUTION_FILTER_SCALE             0x8014
+#define GL_CONVOLUTION_FILTER_BIAS              0x8015
+#define GL_REDUCE                               0x8016
+#define GL_CONVOLUTION_FORMAT                   0x8017
+#define GL_CONVOLUTION_WIDTH                    0x8018
+#define GL_CONVOLUTION_HEIGHT                   0x8019
+#define GL_MAX_CONVOLUTION_WIDTH                0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT               0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE           0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE         0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE          0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE         0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS            0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS          0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS           0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS          0x8023
+#define GL_CONSTANT_BORDER                      0x8151
+#define GL_REPLICATE_BORDER                     0x8153
+#define GL_CONVOLUTION_BORDER_COLOR             0x8154
+/* GL_SGI_color_matrix */
+#define GL_COLOR_MATRIX                         0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH             0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH         0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE          0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE        0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE         0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE        0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS           0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS         0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS          0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS         0x80BB
+/* GL_EXT_histogram */
+#define GL_HISTOGRAM                            0x8024
+#define GL_PROXY_HISTOGRAM                      0x8025
+#define GL_HISTOGRAM_WIDTH                      0x8026
+#define GL_HISTOGRAM_FORMAT                     0x8027
+#define GL_HISTOGRAM_RED_SIZE                   0x8028
+#define GL_HISTOGRAM_GREEN_SIZE                 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE                  0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE                 0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE             0x802C
+#define GL_HISTOGRAM_SINK                       0x802D
+#define GL_MINMAX                               0x802E
+#define GL_MINMAX_FORMAT                        0x802F
+#define GL_MINMAX_SINK                          0x8030
+#define GL_TABLE_TOO_LARGE                      0x8031
+/* GL_EXT_blend_color, GL_EXT_blend_minmax */
+#define GL_BLEND_EQUATION                       0x8009
+#define GL_MIN                                  0x8007
+#define GL_MAX                                  0x8008
+#define GL_FUNC_ADD                             0x8006
+#define GL_FUNC_SUBTRACT                        0x800A
+#define GL_FUNC_REVERSE_SUBTRACT                0x800B
+#define GL_BLEND_COLOR                          0x8005
+
+
+/* OpenGL 1.3 */
+/* multitexture */
+#define GL_TEXTURE0                             0x84C0
+#define GL_TEXTURE1                             0x84C1
+#define GL_TEXTURE2                             0x84C2
+#define GL_TEXTURE3                             0x84C3
+#define GL_TEXTURE4                             0x84C4
+#define GL_TEXTURE5                             0x84C5
+#define GL_TEXTURE6                             0x84C6
+#define GL_TEXTURE7                             0x84C7
+#define GL_TEXTURE8                             0x84C8
+#define GL_TEXTURE9                             0x84C9
+#define GL_TEXTURE10                            0x84CA
+#define GL_TEXTURE11                            0x84CB
+#define GL_TEXTURE12                            0x84CC
+#define GL_TEXTURE13                            0x84CD
+#define GL_TEXTURE14                            0x84CE
+#define GL_TEXTURE15                            0x84CF
+#define GL_TEXTURE16                            0x84D0
+#define GL_TEXTURE17                            0x84D1
+#define GL_TEXTURE18                            0x84D2
+#define GL_TEXTURE19                            0x84D3
+#define GL_TEXTURE20                            0x84D4
+#define GL_TEXTURE21                            0x84D5
+#define GL_TEXTURE22                            0x84D6
+#define GL_TEXTURE23                            0x84D7
+#define GL_TEXTURE24                            0x84D8
+#define GL_TEXTURE25                            0x84D9
+#define GL_TEXTURE26                            0x84DA
+#define GL_TEXTURE27                            0x84DB
+#define GL_TEXTURE28                            0x84DC
+#define GL_TEXTURE29                            0x84DD
+#define GL_TEXTURE30                            0x84DE
+#define GL_TEXTURE31                            0x84DF
+#define GL_ACTIVE_TEXTURE                       0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE                0x84E1
+#define GL_MAX_TEXTURE_UNITS                    0x84E2
+/* texture_cube_map */
+#define GL_NORMAL_MAP                           0x8511
+#define GL_REFLECTION_MAP                       0x8512
+#define GL_TEXTURE_CUBE_MAP                     0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP             0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X          0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X          0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y          0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y          0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z          0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z          0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP               0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE            0x851C
+/* texture_compression */
+#define GL_COMPRESSED_ALPHA                     0x84E9
+#define GL_COMPRESSED_LUMINANCE                 0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA           0x84EB
+#define GL_COMPRESSED_INTENSITY                 0x84EC
+#define GL_COMPRESSED_RGB                       0x84ED
+#define GL_COMPRESSED_RGBA                      0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT             0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE        0x86A0
+#define GL_TEXTURE_COMPRESSED                   0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS       0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS           0x86A3
+/* multisample */
+#define GL_MULTISAMPLE                          0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE             0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE                  0x809F
+#define GL_SAMPLE_COVERAGE                      0x80A0
+#define GL_SAMPLE_BUFFERS                       0x80A8
+#define GL_SAMPLES                              0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE                0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT               0x80AB
+#define GL_MULTISAMPLE_BIT                      0x20000000
+/* transpose_matrix */
+#define GL_TRANSPOSE_MODELVIEW_MATRIX           0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX          0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX             0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX               0x84E6
+/* texture_env_combine */
+#define GL_COMBINE                              0x8570
+#define GL_COMBINE_RGB                          0x8571
+#define GL_COMBINE_ALPHA                        0x8572
+#define GL_SOURCE0_RGB                          0x8580
+#define GL_SOURCE1_RGB                          0x8581
+#define GL_SOURCE2_RGB                          0x8582
+#define GL_SOURCE0_ALPHA                        0x8588
+#define GL_SOURCE1_ALPHA                        0x8589
+#define GL_SOURCE2_ALPHA                        0x858A
+#define GL_OPERAND0_RGB                         0x8590
+#define GL_OPERAND1_RGB                         0x8591
+#define GL_OPERAND2_RGB                         0x8592
+#define GL_OPERAND0_ALPHA                       0x8598
+#define GL_OPERAND1_ALPHA                       0x8599
+#define GL_OPERAND2_ALPHA                       0x859A
+#define GL_RGB_SCALE                            0x8573
+#define GL_ADD_SIGNED                           0x8574
+#define GL_INTERPOLATE                          0x8575
+#define GL_SUBTRACT                             0x84E7
+#define GL_CONSTANT                             0x8576
+#define GL_PRIMARY_COLOR                        0x8577
+#define GL_PREVIOUS                             0x8578
+/* texture_env_dot3 */
+#define GL_DOT3_RGB                             0x86AE
+#define GL_DOT3_RGBA                            0x86AF
+/* texture_border_clamp */
+#define GL_CLAMP_TO_BORDER                      0x812D
+
+#endif /* __WIN32__ */
+
+
+
+/************************************************************************
+ *
+ * Function prototypes
+ *
+ ************************************************************************/
+
+/* Miscellaneous */
+GLAPI void APIENTRY glClearIndex( GLfloat c );
+GLAPI void APIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
+GLAPI void APIENTRY glClear( GLbitfield mask );
+GLAPI void APIENTRY glIndexMask( GLuint mask );
+GLAPI void APIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha );
+GLAPI void APIENTRY glAlphaFunc( GLenum func, GLclampf ref );
+GLAPI void APIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor );
+GLAPI void APIENTRY glLogicOp( GLenum opcode );
+GLAPI void APIENTRY glCullFace( GLenum mode );
+GLAPI void APIENTRY glFrontFace( GLenum mode );
+GLAPI void APIENTRY glPointSize( GLfloat size );
+GLAPI void APIENTRY glLineWidth( GLfloat width );
+GLAPI void APIENTRY glLineStipple( GLint factor, GLushort pattern );
+GLAPI void APIENTRY glPolygonMode( GLenum face, GLenum mode );
+GLAPI void APIENTRY glPolygonOffset( GLfloat factor, GLfloat units );
+GLAPI void APIENTRY glPolygonStipple( const GLubyte *mask );
+GLAPI void APIENTRY glGetPolygonStipple( GLubyte *mask );
+GLAPI void APIENTRY glEdgeFlag( GLboolean flag );
+GLAPI void APIENTRY glEdgeFlagv( const GLboolean *flag );
+GLAPI void APIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glClipPlane( GLenum plane, const GLdouble *equation );
+GLAPI void APIENTRY glGetClipPlane( GLenum plane, GLdouble *equation );
+GLAPI void APIENTRY glDrawBuffer( GLenum mode );
+GLAPI void APIENTRY glReadBuffer( GLenum mode );
+GLAPI void APIENTRY glEnable( GLenum cap );
+GLAPI void APIENTRY glDisable( GLenum cap );
+GLAPI GLboolean APIENTRY glIsEnabled( GLenum cap );
+GLAPI void APIENTRY glEnableClientState( GLenum cap );  /* 1.1 */
+GLAPI void APIENTRY glDisableClientState( GLenum cap );  /* 1.1 */
+GLAPI void APIENTRY glGetBooleanv( GLenum pname, GLboolean *params );
+GLAPI void APIENTRY glGetDoublev( GLenum pname, GLdouble *params );
+GLAPI void APIENTRY glGetFloatv( GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetIntegerv( GLenum pname, GLint *params );
+GLAPI void APIENTRY glPushAttrib( GLbitfield mask );
+GLAPI void APIENTRY glPopAttrib( void );
+GLAPI void APIENTRY glPushClientAttrib( GLbitfield mask );  /* 1.1 */
+GLAPI void APIENTRY glPopClientAttrib( void );  /* 1.1 */
+GLAPI GLint APIENTRY glRenderMode( GLenum mode );
+GLAPI GLenum APIENTRY glGetError( void );
+GLAPI const GLubyte* APIENTRY glGetString( GLenum name );
+GLAPI void APIENTRY glFinish( void );
+GLAPI void APIENTRY glFlush( void );
+GLAPI void APIENTRY glHint( GLenum target, GLenum mode );
+
+/* Depth Buffer */
+GLAPI void APIENTRY glClearDepth( GLclampd depth );
+GLAPI void APIENTRY glDepthFunc( GLenum func );
+GLAPI void APIENTRY glDepthMask( GLboolean flag );
+GLAPI void APIENTRY glDepthRange( GLclampd near_val, GLclampd far_val );
+
+/* Accumulation Buffer */
+GLAPI void APIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
+GLAPI void APIENTRY glAccum( GLenum op, GLfloat value );
+
+/* Transformation */
+GLAPI void APIENTRY glMatrixMode( GLenum mode );
+GLAPI void APIENTRY glOrtho( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
+GLAPI void APIENTRY glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
+GLAPI void APIENTRY glViewport( GLint x, GLint y, GLsizei width, GLsizei height );
+GLAPI void APIENTRY glPushMatrix( void );
+GLAPI void APIENTRY glPopMatrix( void );
+GLAPI void APIENTRY glLoadIdentity( void );
+GLAPI void APIENTRY glLoadMatrixd( const GLdouble *m );
+GLAPI void APIENTRY glLoadMatrixf( const GLfloat *m );
+GLAPI void APIENTRY glMultMatrixd( const GLdouble *m );
+GLAPI void APIENTRY glMultMatrixf( const GLfloat *m );
+GLAPI void APIENTRY glRotated( GLdouble angle, GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glRotatef( GLfloat angle, GLfloat x, GLfloat y, GLfloat z );
+GLAPI void APIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z );
+GLAPI void APIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z );
+
+/* Display Lists */
+GLAPI GLboolean APIENTRY glIsList( GLuint list );
+GLAPI void APIENTRY glDeleteLists( GLuint list, GLsizei range );
+GLAPI GLuint APIENTRY glGenLists( GLsizei range );
+GLAPI void APIENTRY glNewList( GLuint list, GLenum mode );
+GLAPI void APIENTRY glEndList( void );
+GLAPI void APIENTRY glCallList( GLuint list );
+GLAPI void APIENTRY glCallLists( GLsizei n, GLenum type, const GLvoid *lists );
+GLAPI void APIENTRY glListBase( GLuint base );
+
+/* Drawing Functions */
+GLAPI void APIENTRY glBegin( GLenum mode );
+GLAPI void APIENTRY glEnd( void );
+GLAPI void APIENTRY glVertex2d( GLdouble x, GLdouble y );
+GLAPI void APIENTRY glVertex2f( GLfloat x, GLfloat y );
+GLAPI void APIENTRY glVertex2i( GLint x, GLint y );
+GLAPI void APIENTRY glVertex2s( GLshort x, GLshort y );
+GLAPI void APIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z );
+GLAPI void APIENTRY glVertex3i( GLint x, GLint y, GLint z );
+GLAPI void APIENTRY glVertex3s( GLshort x, GLshort y, GLshort z );
+GLAPI void APIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
+GLAPI void APIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
+GLAPI void APIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w );
+GLAPI void APIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w );
+GLAPI void APIENTRY glVertex2dv( const GLdouble *v );
+GLAPI void APIENTRY glVertex2fv( const GLfloat *v );
+GLAPI void APIENTRY glVertex2iv( const GLint *v );
+GLAPI void APIENTRY glVertex2sv( const GLshort *v );
+GLAPI void APIENTRY glVertex3dv( const GLdouble *v );
+GLAPI void APIENTRY glVertex3fv( const GLfloat *v );
+GLAPI void APIENTRY glVertex3iv( const GLint *v );
+GLAPI void APIENTRY glVertex3sv( const GLshort *v );
+GLAPI void APIENTRY glVertex4dv( const GLdouble *v );
+GLAPI void APIENTRY glVertex4fv( const GLfloat *v );
+GLAPI void APIENTRY glVertex4iv( const GLint *v );
+GLAPI void APIENTRY glVertex4sv( const GLshort *v );
+GLAPI void APIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz );
+GLAPI void APIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz );
+GLAPI void APIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz );
+GLAPI void APIENTRY glNormal3i( GLint nx, GLint ny, GLint nz );
+GLAPI void APIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz );
+GLAPI void APIENTRY glNormal3bv( const GLbyte *v );
+GLAPI void APIENTRY glNormal3dv( const GLdouble *v );
+GLAPI void APIENTRY glNormal3fv( const GLfloat *v );
+GLAPI void APIENTRY glNormal3iv( const GLint *v );
+GLAPI void APIENTRY glNormal3sv( const GLshort *v );
+GLAPI void APIENTRY glIndexd( GLdouble c );
+GLAPI void APIENTRY glIndexf( GLfloat c );
+GLAPI void APIENTRY glIndexi( GLint c );
+GLAPI void APIENTRY glIndexs( GLshort c );
+GLAPI void APIENTRY glIndexub( GLubyte c );  /* 1.1 */
+GLAPI void APIENTRY glIndexdv( const GLdouble *c );
+GLAPI void APIENTRY glIndexfv( const GLfloat *c );
+GLAPI void APIENTRY glIndexiv( const GLint *c );
+GLAPI void APIENTRY glIndexsv( const GLshort *c );
+GLAPI void APIENTRY glIndexubv( const GLubyte *c );  /* 1.1 */
+GLAPI void APIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue );
+GLAPI void APIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue );
+GLAPI void APIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue );
+GLAPI void APIENTRY glColor3i( GLint red, GLint green, GLint blue );
+GLAPI void APIENTRY glColor3s( GLshort red, GLshort green, GLshort blue );
+GLAPI void APIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue );
+GLAPI void APIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue );
+GLAPI void APIENTRY glColor3us( GLushort red, GLushort green, GLushort blue );
+GLAPI void APIENTRY glColor4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha );
+GLAPI void APIENTRY glColor4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha );
+GLAPI void APIENTRY glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
+GLAPI void APIENTRY glColor4i( GLint red, GLint green, GLint blue, GLint alpha );
+GLAPI void APIENTRY glColor4s( GLshort red, GLshort green, GLshort blue, GLshort alpha );
+GLAPI void APIENTRY glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
+GLAPI void APIENTRY glColor4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha );
+GLAPI void APIENTRY glColor4us( GLushort red, GLushort green, GLushort blue, GLushort alpha );
+GLAPI void APIENTRY glColor3bv( const GLbyte *v );
+GLAPI void APIENTRY glColor3dv( const GLdouble *v );
+GLAPI void APIENTRY glColor3fv( const GLfloat *v );
+GLAPI void APIENTRY glColor3iv( const GLint *v );
+GLAPI void APIENTRY glColor3sv( const GLshort *v );
+GLAPI void APIENTRY glColor3ubv( const GLubyte *v );
+GLAPI void APIENTRY glColor3uiv( const GLuint *v );
+GLAPI void APIENTRY glColor3usv( const GLushort *v );
+GLAPI void APIENTRY glColor4bv( const GLbyte *v );
+GLAPI void APIENTRY glColor4dv( const GLdouble *v );
+GLAPI void APIENTRY glColor4fv( const GLfloat *v );
+GLAPI void APIENTRY glColor4iv( const GLint *v );
+GLAPI void APIENTRY glColor4sv( const GLshort *v );
+GLAPI void APIENTRY glColor4ubv( const GLubyte *v );
+GLAPI void APIENTRY glColor4uiv( const GLuint *v );
+GLAPI void APIENTRY glColor4usv( const GLushort *v );
+GLAPI void APIENTRY glTexCoord1d( GLdouble s );
+GLAPI void APIENTRY glTexCoord1f( GLfloat s );
+GLAPI void APIENTRY glTexCoord1i( GLint s );
+GLAPI void APIENTRY glTexCoord1s( GLshort s );
+GLAPI void APIENTRY glTexCoord2d( GLdouble s, GLdouble t );
+GLAPI void APIENTRY glTexCoord2f( GLfloat s, GLfloat t );
+GLAPI void APIENTRY glTexCoord2i( GLint s, GLint t );
+GLAPI void APIENTRY glTexCoord2s( GLshort s, GLshort t );
+GLAPI void APIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r );
+GLAPI void APIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r );
+GLAPI void APIENTRY glTexCoord3i( GLint s, GLint t, GLint r );
+GLAPI void APIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r );
+GLAPI void APIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q );
+GLAPI void APIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q );
+GLAPI void APIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q );
+GLAPI void APIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q );
+GLAPI void APIENTRY glTexCoord1dv( const GLdouble *v );
+GLAPI void APIENTRY glTexCoord1fv( const GLfloat *v );
+GLAPI void APIENTRY glTexCoord1iv( const GLint *v );
+GLAPI void APIENTRY glTexCoord1sv( const GLshort *v );
+GLAPI void APIENTRY glTexCoord2dv( const GLdouble *v );
+GLAPI void APIENTRY glTexCoord2fv( const GLfloat *v );
+GLAPI void APIENTRY glTexCoord2iv( const GLint *v );
+GLAPI void APIENTRY glTexCoord2sv( const GLshort *v );
+GLAPI void APIENTRY glTexCoord3dv( const GLdouble *v );
+GLAPI void APIENTRY glTexCoord3fv( const GLfloat *v );
+GLAPI void APIENTRY glTexCoord3iv( const GLint *v );
+GLAPI void APIENTRY glTexCoord3sv( const GLshort *v );
+GLAPI void APIENTRY glTexCoord4dv( const GLdouble *v );
+GLAPI void APIENTRY glTexCoord4fv( const GLfloat *v );
+GLAPI void APIENTRY glTexCoord4iv( const GLint *v );
+GLAPI void APIENTRY glTexCoord4sv( const GLshort *v );
+GLAPI void APIENTRY glRasterPos2d( GLdouble x, GLdouble y );
+GLAPI void APIENTRY glRasterPos2f( GLfloat x, GLfloat y );
+GLAPI void APIENTRY glRasterPos2i( GLint x, GLint y );
+GLAPI void APIENTRY glRasterPos2s( GLshort x, GLshort y );
+GLAPI void APIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z );
+GLAPI void APIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z );
+GLAPI void APIENTRY glRasterPos3i( GLint x, GLint y, GLint z );
+GLAPI void APIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z );
+GLAPI void APIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
+GLAPI void APIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
+GLAPI void APIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w );
+GLAPI void APIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w );
+GLAPI void APIENTRY glRasterPos2dv( const GLdouble *v );
+GLAPI void APIENTRY glRasterPos2fv( const GLfloat *v );
+GLAPI void APIENTRY glRasterPos2iv( const GLint *v );
+GLAPI void APIENTRY glRasterPos2sv( const GLshort *v );
+GLAPI void APIENTRY glRasterPos3dv( const GLdouble *v );
+GLAPI void APIENTRY glRasterPos3fv( const GLfloat *v );
+GLAPI void APIENTRY glRasterPos3iv( const GLint *v );
+GLAPI void APIENTRY glRasterPos3sv( const GLshort *v );
+GLAPI void APIENTRY glRasterPos4dv( const GLdouble *v );
+GLAPI void APIENTRY glRasterPos4fv( const GLfloat *v );
+GLAPI void APIENTRY glRasterPos4iv( const GLint *v );
+GLAPI void APIENTRY glRasterPos4sv( const GLshort *v );
+GLAPI void APIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 );
+GLAPI void APIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 );
+GLAPI void APIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 );
+GLAPI void APIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 );
+GLAPI void APIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 );
+GLAPI void APIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 );
+GLAPI void APIENTRY glRectiv( const GLint *v1, const GLint *v2 );
+GLAPI void APIENTRY glRectsv( const GLshort *v1, const GLshort *v2 );
+
+/* Lighting */
+GLAPI void APIENTRY glShadeModel( GLenum mode );
+GLAPI void APIENTRY glLightf( GLenum light, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glLighti( GLenum light, GLenum pname, GLint param );
+GLAPI void APIENTRY glLightfv( GLenum light, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glLightiv( GLenum light, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetLightfv( GLenum light, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetLightiv( GLenum light, GLenum pname, GLint *params );
+GLAPI void APIENTRY glLightModelf( GLenum pname, GLfloat param );
+GLAPI void APIENTRY glLightModeli( GLenum pname, GLint param );
+GLAPI void APIENTRY glLightModelfv( GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glLightModeliv( GLenum pname, const GLint *params );
+GLAPI void APIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glMateriali( GLenum face, GLenum pname, GLint param );
+GLAPI void APIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params );
+GLAPI void APIENTRY glColorMaterial( GLenum face, GLenum mode );
+
+/* Raster functions */
+GLAPI void APIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor );
+GLAPI void APIENTRY glPixelStoref( GLenum pname, GLfloat param );
+GLAPI void APIENTRY glPixelStorei( GLenum pname, GLint param );
+GLAPI void APIENTRY glPixelTransferf( GLenum pname, GLfloat param );
+GLAPI void APIENTRY glPixelTransferi( GLenum pname, GLint param );
+GLAPI void APIENTRY glPixelMapfv( GLenum map, GLint mapsize, const GLfloat *values );
+GLAPI void APIENTRY glPixelMapuiv( GLenum map, GLint mapsize, const GLuint *values );
+GLAPI void APIENTRY glPixelMapusv( GLenum map, GLint mapsize, const GLushort *values );
+GLAPI void APIENTRY glGetPixelMapfv( GLenum map, GLfloat *values );
+GLAPI void APIENTRY glGetPixelMapuiv( GLenum map, GLuint *values );
+GLAPI void APIENTRY glGetPixelMapusv( GLenum map, GLushort *values );
+GLAPI void APIENTRY glBitmap( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap );
+GLAPI void APIENTRY glReadPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels );
+GLAPI void APIENTRY glDrawPixels( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glCopyPixels( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type );
+
+/* Stenciling */
+GLAPI void APIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask );
+GLAPI void APIENTRY glStencilMask( GLuint mask );
+GLAPI void APIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass );
+GLAPI void APIENTRY glClearStencil( GLint s );
+
+/* Texture mapping */
+GLAPI void APIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param );
+GLAPI void APIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param );
+GLAPI void APIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params );
+GLAPI void APIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params );
+GLAPI void APIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params );
+GLAPI void APIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param );
+GLAPI void APIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param );
+GLAPI void APIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param );
+GLAPI void APIENTRY glTexParameterfv( GLenum target, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glTexParameteriv( GLenum target, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glGetTexParameterfv( GLenum target, GLenum pname, GLfloat *params);
+GLAPI void APIENTRY glGetTexParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, GLenum pname, GLint *params );
+GLAPI void APIENTRY glTexImage1D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glTexImage2D( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glGetTexImage( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels );
+
+/* Evaluators */
+GLAPI void APIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points );
+GLAPI void APIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points );
+GLAPI void APIENTRY glMap2d( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points );
+GLAPI void APIENTRY glMap2f( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points );
+GLAPI void APIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v );
+GLAPI void APIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v );
+GLAPI void APIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v );
+GLAPI void APIENTRY glEvalCoord1d( GLdouble u );
+GLAPI void APIENTRY glEvalCoord1f( GLfloat u );
+GLAPI void APIENTRY glEvalCoord1dv( const GLdouble *u );
+GLAPI void APIENTRY glEvalCoord1fv( const GLfloat *u );
+GLAPI void APIENTRY glEvalCoord2d( GLdouble u, GLdouble v );
+GLAPI void APIENTRY glEvalCoord2f( GLfloat u, GLfloat v );
+GLAPI void APIENTRY glEvalCoord2dv( const GLdouble *u );
+GLAPI void APIENTRY glEvalCoord2fv( const GLfloat *u );
+GLAPI void APIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 );
+GLAPI void APIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 );
+GLAPI void APIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 );
+GLAPI void APIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 );
+GLAPI void APIENTRY glEvalPoint1( GLint i );
+GLAPI void APIENTRY glEvalPoint2( GLint i, GLint j );
+GLAPI void APIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 );
+GLAPI void APIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
+
+/* Fog */
+GLAPI void APIENTRY glFogf( GLenum pname, GLfloat param );
+GLAPI void APIENTRY glFogi( GLenum pname, GLint param );
+GLAPI void APIENTRY glFogfv( GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glFogiv( GLenum pname, const GLint *params );
+
+/* Selection and Feedback */
+GLAPI void APIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer );
+GLAPI void APIENTRY glPassThrough( GLfloat token );
+GLAPI void APIENTRY glSelectBuffer( GLsizei size, GLuint *buffer );
+GLAPI void APIENTRY glInitNames( void );
+GLAPI void APIENTRY glLoadName( GLuint name );
+GLAPI void APIENTRY glPushName( GLuint name );
+GLAPI void APIENTRY glPopName( void );
+
+
+/* 1.1 functions */
+/* texture objects */
+GLAPI void APIENTRY glGenTextures( GLsizei n, GLuint *textures );
+GLAPI void APIENTRY glDeleteTextures( GLsizei n, const GLuint *textures);
+GLAPI void APIENTRY glBindTexture( GLenum target, GLuint texture );
+GLAPI void APIENTRY glPrioritizeTextures( GLsizei n, const GLuint *textures, const GLclampf *priorities );
+GLAPI GLboolean APIENTRY glAreTexturesResident( GLsizei n, const GLuint *textures, GLboolean *residences );
+GLAPI GLboolean APIENTRY glIsTexture( GLuint texture );
+/* texture mapping */
+GLAPI void APIENTRY glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glCopyTexImage1D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border );
+GLAPI void APIENTRY glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border );
+GLAPI void APIENTRY glCopyTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width );
+GLAPI void APIENTRY glCopyTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height );
+/* vertex arrays */
+GLAPI void APIENTRY glVertexPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glNormalPointer( GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glIndexPointer( GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glTexCoordPointer( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr );
+GLAPI void APIENTRY glGetPointerv( GLenum pname, GLvoid **params );
+GLAPI void APIENTRY glArrayElement( GLint i );
+GLAPI void APIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count );
+GLAPI void APIENTRY glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );
+GLAPI void APIENTRY glInterleavedArrays( GLenum format, GLsizei stride, const GLvoid *pointer );
+
+
+
+/* Under Windows, we do not define OpenGL 1.2 & 1.3 functionality, since
+   it is treated as extensions (defined in glext.h) */
+#if !defined(__WIN32__)
+
+/* 1.2 functions */
+GLAPI void APIENTRY glDrawRangeElements( GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices );
+GLAPI void APIENTRY glTexImage3D( GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
+GLAPI void APIENTRY glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+GLAPI void APIENTRY glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height );
+
+/* 1.2 imaging extension functions */
+GLAPI void APIENTRY glColorTable( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table );
+GLAPI void APIENTRY glColorSubTable( GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data );
+GLAPI void APIENTRY glColorTableParameteriv(GLenum target, GLenum pname, const GLint *params);
+GLAPI void APIENTRY glColorTableParameterfv(GLenum target, GLenum pname, const GLfloat *params);
+GLAPI void APIENTRY glCopyColorSubTable( GLenum target, GLsizei start, GLint x, GLint y, GLsizei width );
+GLAPI void APIENTRY glCopyColorTable( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width );
+GLAPI void APIENTRY glGetColorTable( GLenum target, GLenum format, GLenum type, GLvoid *table );
+GLAPI void APIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glBlendEquation( GLenum mode );
+GLAPI void APIENTRY glBlendColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
+GLAPI void APIENTRY glHistogram( GLenum target, GLsizei width, GLenum internalformat, GLboolean sink );
+GLAPI void APIENTRY glResetHistogram( GLenum target );
+GLAPI void APIENTRY glGetHistogram( GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values );
+GLAPI void APIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glMinmax( GLenum target, GLenum internalformat, GLboolean sink );
+GLAPI void APIENTRY glResetMinmax( GLenum target );
+GLAPI void APIENTRY glGetMinmax( GLenum target, GLboolean reset, GLenum format, GLenum types, GLvoid *values );
+GLAPI void APIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glConvolutionFilter1D( GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image );
+GLAPI void APIENTRY glConvolutionFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image );
+GLAPI void APIENTRY glConvolutionParameterf( GLenum target, GLenum pname, GLfloat params );
+GLAPI void APIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, const GLfloat *params );
+GLAPI void APIENTRY glConvolutionParameteri( GLenum target, GLenum pname, GLint params );
+GLAPI void APIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, const GLint *params );
+GLAPI void APIENTRY glCopyConvolutionFilter1D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width );
+GLAPI void APIENTRY glCopyConvolutionFilter2D( GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+GLAPI void APIENTRY glGetConvolutionFilter( GLenum target, GLenum format, GLenum type, GLvoid *image );
+GLAPI void APIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, GLfloat *params );
+GLAPI void APIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, GLint *params );
+GLAPI void APIENTRY glSeparableFilter2D( GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column );
+GLAPI void APIENTRY glGetSeparableFilter( GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span );
+
+/* 1.3 functions */
+GLAPI void APIENTRY glActiveTexture( GLenum texture );
+GLAPI void APIENTRY glClientActiveTexture( GLenum texture );
+GLAPI void APIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data );
+GLAPI void APIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img );
+GLAPI void APIENTRY glMultiTexCoord1d( GLenum target, GLdouble s );
+GLAPI void APIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v );
+GLAPI void APIENTRY glMultiTexCoord1f( GLenum target, GLfloat s );
+GLAPI void APIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v );
+GLAPI void APIENTRY glMultiTexCoord1i( GLenum target, GLint s );
+GLAPI void APIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v );
+GLAPI void APIENTRY glMultiTexCoord1s( GLenum target, GLshort s );
+GLAPI void APIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v );
+GLAPI void APIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t );
+GLAPI void APIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v );
+GLAPI void APIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t );
+GLAPI void APIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v );
+GLAPI void APIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t );
+GLAPI void APIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v );
+GLAPI void APIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t );
+GLAPI void APIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v );
+GLAPI void APIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r );
+GLAPI void APIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v );
+GLAPI void APIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r );
+GLAPI void APIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v );
+GLAPI void APIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r );
+GLAPI void APIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v );
+GLAPI void APIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r );
+GLAPI void APIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v );
+GLAPI void APIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q );
+GLAPI void APIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v );
+GLAPI void APIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q );
+GLAPI void APIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v );
+GLAPI void APIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q );
+GLAPI void APIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v );
+GLAPI void APIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q );
+GLAPI void APIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v );
+GLAPI void APIENTRY glLoadTransposeMatrixd( const GLdouble m[16] );
+GLAPI void APIENTRY glLoadTransposeMatrixf( const GLfloat m[16] );
+GLAPI void APIENTRY glMultTransposeMatrixd( const GLdouble m[16] );
+GLAPI void APIENTRY glMultTransposeMatrixf( const GLfloat m[16] );
+GLAPI void APIENTRY glSampleCoverage( GLclampf value, GLboolean invert );
+GLAPI void APIENTRY glSamplePass( GLenum pass );
+
+#endif /* __WIN32__ */
+
+
+/* Include external definitions of OpenGL extensions */
+/* Removed, see this bug report for reference:
+ * http://sourceforge.net/tracker/index.php?func=detail&aid=610178&group_id=2435&atid=102435
+ * 
+ * #include <GL/glext.h>
+ */
+
+
+/************************************************************************
+ * Begin system-specific stuff
+ */
+/*
+ * End system-specific stuff
+ ************************************************************************/
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __gl_h_ */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 GL/glext.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GL/glext.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,4623 @@
+#ifndef __glext_h_
+#define __glext_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+** License Applicability. Except to the extent portions of this file are
+** made subject to an alternative license as permitted in the SGI Free
+** Software License B, Version 1.1 (the "License"), the contents of this
+** file are subject only to the provisions of the License. You may not use
+** this file except in compliance with the License. You may obtain a copy
+** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
+** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+** 
+** http://oss.sgi.com/projects/FreeB
+** 
+** Note that, as provided in the License, the Software is distributed on an
+** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
+** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
+** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
+** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+** 
+** Original Code. The Original Code is: OpenGL Sample Implementation,
+** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
+** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
+** Copyright in any portions created by third parties is as indicated
+** elsewhere herein. All Rights Reserved.
+** 
+** Additional Notice Provisions: This software was created using the
+** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
+** not been independently verified as being compliant with the OpenGL(R)
+** version 1.2.1 Specification.
+*/
+
+#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__)
+#define WIN32_LEAN_AND_MEAN 1
+#include <windows.h>
+#endif
+
+#ifndef APIENTRY
+#define APIENTRY
+#endif
+#ifndef GLAPI
+#define GLAPI extern
+#endif
+
+/*************************************************************/
+
+/* Header file version number, required by OpenGL ABI for Linux */
+/* glext.h last updated 2002/03/22 */
+/* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */
+#define GL_GLEXT_VERSION 11
+
+#ifndef GL_VERSION_1_2
+#define GL_CONSTANT_COLOR                 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR       0x8002
+#define GL_CONSTANT_ALPHA                 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA       0x8004
+#define GL_BLEND_COLOR                    0x8005
+#define GL_FUNC_ADD                       0x8006
+#define GL_MIN                            0x8007
+#define GL_MAX                            0x8008
+#define GL_BLEND_EQUATION                 0x8009
+#define GL_FUNC_SUBTRACT                  0x800A
+#define GL_FUNC_REVERSE_SUBTRACT          0x800B
+#define GL_CONVOLUTION_1D                 0x8010
+#define GL_CONVOLUTION_2D                 0x8011
+#define GL_SEPARABLE_2D                   0x8012
+#define GL_CONVOLUTION_BORDER_MODE        0x8013
+#define GL_CONVOLUTION_FILTER_SCALE       0x8014
+#define GL_CONVOLUTION_FILTER_BIAS        0x8015
+#define GL_REDUCE                         0x8016
+#define GL_CONVOLUTION_FORMAT             0x8017
+#define GL_CONVOLUTION_WIDTH              0x8018
+#define GL_CONVOLUTION_HEIGHT             0x8019
+#define GL_MAX_CONVOLUTION_WIDTH          0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT         0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE     0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE   0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE    0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE   0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS      0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS    0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS     0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS    0x8023
+#define GL_HISTOGRAM                      0x8024
+#define GL_PROXY_HISTOGRAM                0x8025
+#define GL_HISTOGRAM_WIDTH                0x8026
+#define GL_HISTOGRAM_FORMAT               0x8027
+#define GL_HISTOGRAM_RED_SIZE             0x8028
+#define GL_HISTOGRAM_GREEN_SIZE           0x8029
+#define GL_HISTOGRAM_BLUE_SIZE            0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE           0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE       0x802C
+#define GL_HISTOGRAM_SINK                 0x802D
+#define GL_MINMAX                         0x802E
+#define GL_MINMAX_FORMAT                  0x802F
+#define GL_MINMAX_SINK                    0x8030
+#define GL_TABLE_TOO_LARGE                0x8031
+#define GL_UNSIGNED_BYTE_3_3_2            0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4         0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1         0x8034
+#define GL_UNSIGNED_INT_8_8_8_8           0x8035
+#define GL_UNSIGNED_INT_10_10_10_2        0x8036
+#define GL_RESCALE_NORMAL                 0x803A
+#define GL_UNSIGNED_BYTE_2_3_3_REV        0x8362
+#define GL_UNSIGNED_SHORT_5_6_5           0x8363
+#define GL_UNSIGNED_SHORT_5_6_5_REV       0x8364
+#define GL_UNSIGNED_SHORT_4_4_4_4_REV     0x8365
+#define GL_UNSIGNED_SHORT_1_5_5_5_REV     0x8366
+#define GL_UNSIGNED_INT_8_8_8_8_REV       0x8367
+#define GL_UNSIGNED_INT_2_10_10_10_REV    0x8368
+#define GL_COLOR_MATRIX                   0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH       0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH   0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE    0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE  0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE   0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE  0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS     0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS   0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS    0x80BA
+#define GL_COLOR_TABLE                    0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE   0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE  0x80D2
+#define GL_PROXY_COLOR_TABLE              0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
+#define GL_COLOR_TABLE_SCALE              0x80D6
+#define GL_COLOR_TABLE_BIAS               0x80D7
+#define GL_COLOR_TABLE_FORMAT             0x80D8
+#define GL_COLOR_TABLE_WIDTH              0x80D9
+#define GL_COLOR_TABLE_RED_SIZE           0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE         0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE          0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE         0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE     0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE     0x80DF
+#define GL_BGR                            0x80E0
+#define GL_BGRA                           0x80E1
+#define GL_MAX_ELEMENTS_VERTICES          0x80E8
+#define GL_MAX_ELEMENTS_INDICES           0x80E9
+#define GL_CLAMP_TO_EDGE                  0x812F
+#define GL_TEXTURE_MIN_LOD                0x813A
+#define GL_TEXTURE_MAX_LOD                0x813B
+#define GL_TEXTURE_BASE_LEVEL             0x813C
+#define GL_TEXTURE_MAX_LEVEL              0x813D
+#define GL_IGNORE_BORDER                  0x8150
+#define GL_CONSTANT_BORDER                0x8151
+#define GL_WRAP_BORDER                    0x8152
+#define GL_REPLICATE_BORDER               0x8153
+#define GL_CONVOLUTION_BORDER_COLOR       0x8154
+#define GL_LIGHT_MODEL_COLOR_CONTROL      0x81F8
+#define GL_SINGLE_COLOR                   0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR        0x81FA
+#define GL_SMOOTH_POINT_SIZE_RANGE        0x0B12
+#define GL_SMOOTH_POINT_SIZE_GRANULARITY  0x0B13
+#define GL_SMOOTH_LINE_WIDTH_RANGE        0x0B22
+#define GL_SMOOTH_LINE_WIDTH_GRANULARITY  0x0B23
+#define GL_ALIASED_POINT_SIZE_RANGE       0x846D
+#define GL_ALIASED_LINE_WIDTH_RANGE       0x846E
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_TEXTURE0                       0x84C0
+#define GL_TEXTURE1                       0x84C1
+#define GL_TEXTURE2                       0x84C2
+#define GL_TEXTURE3                       0x84C3
+#define GL_TEXTURE4                       0x84C4
+#define GL_TEXTURE5                       0x84C5
+#define GL_TEXTURE6                       0x84C6
+#define GL_TEXTURE7                       0x84C7
+#define GL_TEXTURE8                       0x84C8
+#define GL_TEXTURE9                       0x84C9
+#define GL_TEXTURE10                      0x84CA
+#define GL_TEXTURE11                      0x84CB
+#define GL_TEXTURE12                      0x84CC
+#define GL_TEXTURE13                      0x84CD
+#define GL_TEXTURE14                      0x84CE
+#define GL_TEXTURE15                      0x84CF
+#define GL_TEXTURE16                      0x84D0
+#define GL_TEXTURE17                      0x84D1
+#define GL_TEXTURE18                      0x84D2
+#define GL_TEXTURE19                      0x84D3
+#define GL_TEXTURE20                      0x84D4
+#define GL_TEXTURE21                      0x84D5
+#define GL_TEXTURE22                      0x84D6
+#define GL_TEXTURE23                      0x84D7
+#define GL_TEXTURE24                      0x84D8
+#define GL_TEXTURE25                      0x84D9
+#define GL_TEXTURE26                      0x84DA
+#define GL_TEXTURE27                      0x84DB
+#define GL_TEXTURE28                      0x84DC
+#define GL_TEXTURE29                      0x84DD
+#define GL_TEXTURE30                      0x84DE
+#define GL_TEXTURE31                      0x84DF
+#define GL_ACTIVE_TEXTURE                 0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE          0x84E1
+#define GL_MAX_TEXTURE_UNITS              0x84E2
+#define GL_TRANSPOSE_MODELVIEW_MATRIX     0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX    0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX       0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX         0x84E6
+#define GL_MULTISAMPLE                    0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE       0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE            0x809F
+#define GL_SAMPLE_COVERAGE                0x80A0
+#define GL_SAMPLE_BUFFERS                 0x80A8
+#define GL_SAMPLES                        0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE          0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT         0x80AB
+#define GL_MULTISAMPLE_BIT                0x20000000
+#define GL_NORMAL_MAP                     0x8511
+#define GL_REFLECTION_MAP                 0x8512
+#define GL_TEXTURE_CUBE_MAP               0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP       0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X    0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X    0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y    0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y    0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z    0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z    0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP         0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE      0x851C
+#define GL_COMPRESSED_ALPHA               0x84E9
+#define GL_COMPRESSED_LUMINANCE           0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA     0x84EB
+#define GL_COMPRESSED_INTENSITY           0x84EC
+#define GL_COMPRESSED_RGB                 0x84ED
+#define GL_COMPRESSED_RGBA                0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT       0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE  0x86A0
+#define GL_TEXTURE_COMPRESSED             0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS     0x86A3
+#define GL_CLAMP_TO_BORDER                0x812D
+#define GL_CLAMP_TO_BORDER_SGIS           0x812D
+#define GL_COMBINE                        0x8570
+#define GL_COMBINE_RGB                    0x8571
+#define GL_COMBINE_ALPHA                  0x8572
+#define GL_SOURCE0_RGB                    0x8580
+#define GL_SOURCE1_RGB                    0x8581
+#define GL_SOURCE2_RGB                    0x8582
+#define GL_SOURCE0_ALPHA                  0x8588
+#define GL_SOURCE1_ALPHA                  0x8589
+#define GL_SOURCE2_ALPHA                  0x858A
+#define GL_OPERAND0_RGB                   0x8590
+#define GL_OPERAND1_RGB                   0x8591
+#define GL_OPERAND2_RGB                   0x8592
+#define GL_OPERAND0_ALPHA                 0x8598
+#define GL_OPERAND1_ALPHA                 0x8599
+#define GL_OPERAND2_ALPHA                 0x859A
+#define GL_RGB_SCALE                      0x8573
+#define GL_ADD_SIGNED                     0x8574
+#define GL_INTERPOLATE                    0x8575
+#define GL_SUBTRACT                       0x84E7
+#define GL_CONSTANT                       0x8576
+#define GL_PRIMARY_COLOR                  0x8577
+#define GL_PREVIOUS                       0x8578
+#define GL_DOT3_RGB                       0x86AE
+#define GL_DOT3_RGBA                      0x86AF
+#endif
+
+#ifndef GL_ARB_multitexture
+#define GL_TEXTURE0_ARB                   0x84C0
+#define GL_TEXTURE1_ARB                   0x84C1
+#define GL_TEXTURE2_ARB                   0x84C2
+#define GL_TEXTURE3_ARB                   0x84C3
+#define GL_TEXTURE4_ARB                   0x84C4
+#define GL_TEXTURE5_ARB                   0x84C5
+#define GL_TEXTURE6_ARB                   0x84C6
+#define GL_TEXTURE7_ARB                   0x84C7
+#define GL_TEXTURE8_ARB                   0x84C8
+#define GL_TEXTURE9_ARB                   0x84C9
+#define GL_TEXTURE10_ARB                  0x84CA
+#define GL_TEXTURE11_ARB                  0x84CB
+#define GL_TEXTURE12_ARB                  0x84CC
+#define GL_TEXTURE13_ARB                  0x84CD
+#define GL_TEXTURE14_ARB                  0x84CE
+#define GL_TEXTURE15_ARB                  0x84CF
+#define GL_TEXTURE16_ARB                  0x84D0
+#define GL_TEXTURE17_ARB                  0x84D1
+#define GL_TEXTURE18_ARB                  0x84D2
+#define GL_TEXTURE19_ARB                  0x84D3
+#define GL_TEXTURE20_ARB                  0x84D4
+#define GL_TEXTURE21_ARB                  0x84D5
+#define GL_TEXTURE22_ARB                  0x84D6
+#define GL_TEXTURE23_ARB                  0x84D7
+#define GL_TEXTURE24_ARB                  0x84D8
+#define GL_TEXTURE25_ARB                  0x84D9
+#define GL_TEXTURE26_ARB                  0x84DA
+#define GL_TEXTURE27_ARB                  0x84DB
+#define GL_TEXTURE28_ARB                  0x84DC
+#define GL_TEXTURE29_ARB                  0x84DD
+#define GL_TEXTURE30_ARB                  0x84DE
+#define GL_TEXTURE31_ARB                  0x84DF
+#define GL_ACTIVE_TEXTURE_ARB             0x84E0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB      0x84E1
+#define GL_MAX_TEXTURE_UNITS_ARB          0x84E2
+#endif
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3
+#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4
+#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB   0x84E5
+#define GL_TRANSPOSE_COLOR_MATRIX_ARB     0x84E6
+#endif
+
+#ifndef GL_ARB_multisample
+#define GL_MULTISAMPLE_ARB                0x809D
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB   0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB        0x809F
+#define GL_SAMPLE_COVERAGE_ARB            0x80A0
+#define GL_SAMPLE_BUFFERS_ARB             0x80A8
+#define GL_SAMPLES_ARB                    0x80A9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB      0x80AA
+#define GL_SAMPLE_COVERAGE_INVERT_ARB     0x80AB
+#define GL_MULTISAMPLE_BIT_ARB            0x20000000
+#endif
+
+#ifndef GL_ARB_texture_env_add
+#endif
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_NORMAL_MAP_ARB                 0x8511
+#define GL_REFLECTION_MAP_ARB             0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB           0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB   0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB     0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB  0x851C
+#endif
+
+#ifndef GL_ARB_texture_compression
+#define GL_COMPRESSED_ALPHA_ARB           0x84E9
+#define GL_COMPRESSED_LUMINANCE_ARB       0x84EA
+#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB
+#define GL_COMPRESSED_INTENSITY_ARB       0x84EC
+#define GL_COMPRESSED_RGB_ARB             0x84ED
+#define GL_COMPRESSED_RGBA_ARB            0x84EE
+#define GL_TEXTURE_COMPRESSION_HINT_ARB   0x84EF
+#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0
+#define GL_TEXTURE_COMPRESSED_ARB         0x86A1
+#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2
+#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3
+#endif
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_CLAMP_TO_BORDER_ARB            0x812D
+#endif
+
+#ifndef GL_ARB_point_parameters
+#define GL_POINT_SIZE_MIN_ARB             0x8126
+#define GL_POINT_SIZE_MIN_EXT             0x8126
+#define GL_POINT_SIZE_MIN_SGIS            0x8126
+#define GL_POINT_SIZE_MAX_ARB             0x8127
+#define GL_POINT_SIZE_MAX_EXT             0x8127
+#define GL_POINT_SIZE_MAX_SGIS            0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB  0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT  0x8128
+#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+#define GL_DISTANCE_ATTENUATION_EXT       0x8129
+#define GL_DISTANCE_ATTENUATION_SGIS      0x8129
+#endif
+
+#ifndef GL_ARB_vertex_blend
+#define GL_MAX_VERTEX_UNITS_ARB           0x86A4
+#define GL_ACTIVE_VERTEX_UNITS_ARB        0x86A5
+#define GL_WEIGHT_SUM_UNITY_ARB           0x86A6
+#define GL_VERTEX_BLEND_ARB               0x86A7
+#define GL_CURRENT_WEIGHT_ARB             0x86A8
+#define GL_WEIGHT_ARRAY_TYPE_ARB          0x86A9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB        0x86AA
+#define GL_WEIGHT_ARRAY_SIZE_ARB          0x86AB
+#define GL_WEIGHT_ARRAY_POINTER_ARB       0x86AC
+#define GL_WEIGHT_ARRAY_ARB               0x86AD
+#define GL_MODELVIEW0_ARB                 0x1700
+#define GL_MODELVIEW1_ARB                 0x850A
+#define GL_MODELVIEW2_ARB                 0x8722
+#define GL_MODELVIEW3_ARB                 0x8723
+#define GL_MODELVIEW4_ARB                 0x8724
+#define GL_MODELVIEW5_ARB                 0x8725
+#define GL_MODELVIEW6_ARB                 0x8726
+#define GL_MODELVIEW7_ARB                 0x8727
+#define GL_MODELVIEW8_ARB                 0x8728
+#define GL_MODELVIEW9_ARB                 0x8729
+#define GL_MODELVIEW10_ARB                0x872A
+#define GL_MODELVIEW11_ARB                0x872B
+#define GL_MODELVIEW12_ARB                0x872C
+#define GL_MODELVIEW13_ARB                0x872D
+#define GL_MODELVIEW14_ARB                0x872E
+#define GL_MODELVIEW15_ARB                0x872F
+#define GL_MODELVIEW16_ARB                0x8730
+#define GL_MODELVIEW17_ARB                0x8731
+#define GL_MODELVIEW18_ARB                0x8732
+#define GL_MODELVIEW19_ARB                0x8733
+#define GL_MODELVIEW20_ARB                0x8734
+#define GL_MODELVIEW21_ARB                0x8735
+#define GL_MODELVIEW22_ARB                0x8736
+#define GL_MODELVIEW23_ARB                0x8737
+#define GL_MODELVIEW24_ARB                0x8738
+#define GL_MODELVIEW25_ARB                0x8739
+#define GL_MODELVIEW26_ARB                0x873A
+#define GL_MODELVIEW27_ARB                0x873B
+#define GL_MODELVIEW28_ARB                0x873C
+#define GL_MODELVIEW29_ARB                0x873D
+#define GL_MODELVIEW30_ARB                0x873E
+#define GL_MODELVIEW31_ARB                0x873F
+#endif
+
+#ifndef GL_ARB_matrix_palette
+#define GL_MATRIX_PALETTE_ARB             0x8840
+#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841
+#define GL_MAX_PALETTE_MATRICES_ARB       0x8842
+#define GL_CURRENT_PALETTE_MATRIX_ARB     0x8843
+#define GL_MATRIX_INDEX_ARRAY_ARB         0x8844
+#define GL_CURRENT_MATRIX_INDEX_ARB       0x8845
+#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB    0x8846
+#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB    0x8847
+#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB  0x8848
+#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849
+#endif
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_COMBINE_ARB                    0x8570
+#define GL_COMBINE_RGB_ARB                0x8571
+#define GL_COMBINE_ALPHA_ARB              0x8572
+#define GL_SOURCE0_RGB_ARB                0x8580
+#define GL_SOURCE1_RGB_ARB                0x8581
+#define GL_SOURCE2_RGB_ARB                0x8582
+#define GL_SOURCE0_ALPHA_ARB              0x8588
+#define GL_SOURCE1_ALPHA_ARB              0x8589
+#define GL_SOURCE2_ALPHA_ARB              0x858A
+#define GL_OPERAND0_RGB_ARB               0x8590
+#define GL_OPERAND1_RGB_ARB               0x8591
+#define GL_OPERAND2_RGB_ARB               0x8592
+#define GL_OPERAND0_ALPHA_ARB             0x8598
+#define GL_OPERAND1_ALPHA_ARB             0x8599
+#define GL_OPERAND2_ALPHA_ARB             0x859A
+#define GL_RGB_SCALE_ARB                  0x8573
+#define GL_ADD_SIGNED_ARB                 0x8574
+#define GL_INTERPOLATE_ARB                0x8575
+#define GL_SUBTRACT_ARB                   0x84E7
+#define GL_CONSTANT_ARB                   0x8576
+#define GL_PRIMARY_COLOR_ARB              0x8577
+#define GL_PREVIOUS_ARB                   0x8578
+#endif
+
+#ifndef GL_ARB_texture_env_crossbar
+#endif
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_DOT3_RGB_ARB                   0x86AE
+#define GL_DOT3_RGB_EXT                   0x86AE
+#define GL_DOT3_RGBA_ARB                  0x86AF
+#define GL_DOT3_RGBA_EXT                  0x86AF
+#endif
+
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_MIRRORED_REPEAT_ARB            0x8370
+#endif
+
+#ifndef GL_ARB_depth_texture
+#define GL_DEPTH_COMPONENT16_ARB          0x81A5
+#define GL_DEPTH_COMPONENT24_ARB          0x81A6
+#define GL_DEPTH_COMPONENT32_ARB          0x81A7
+#define GL_TEXTURE_DEPTH_SIZE_ARB         0x884A
+#define GL_DEPTH_TEXTURE_MODE_ARB         0x884B
+#endif
+
+#ifndef GL_ARB_shadow
+#define GL_TEXTURE_COMPARE_MODE_ARB       0x884C
+#define GL_TEXTURE_COMPARE_FUNC_ARB       0x884D
+#define GL_COMPARE_R_TO_TEXTURE_ARB       0x884E
+#endif
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF
+#endif
+
+#ifndef GL_ARB_window_pos
+#endif
+
+#ifndef GL_EXT_abgr
+#define GL_ABGR_EXT                       0x8000
+#endif
+
+#ifndef GL_EXT_blend_color
+#define GL_CONSTANT_COLOR_EXT             0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR_EXT   0x8002
+#define GL_CONSTANT_ALPHA_EXT             0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT   0x8004
+#define GL_BLEND_COLOR_EXT                0x8005
+#endif
+
+#ifndef GL_EXT_polygon_offset
+#define GL_POLYGON_OFFSET_EXT             0x8037
+#define GL_POLYGON_OFFSET_FACTOR_EXT      0x8038
+#define GL_POLYGON_OFFSET_BIAS_EXT        0x8039
+#endif
+
+#ifndef GL_EXT_texture
+#define GL_ALPHA4_EXT                     0x803B
+#define GL_ALPHA8_EXT                     0x803C
+#define GL_ALPHA12_EXT                    0x803D
+#define GL_ALPHA16_EXT                    0x803E
+#define GL_LUMINANCE4_EXT                 0x803F
+#define GL_LUMINANCE8_EXT                 0x8040
+#define GL_LUMINANCE12_EXT                0x8041
+#define GL_LUMINANCE16_EXT                0x8042
+#define GL_LUMINANCE4_ALPHA4_EXT          0x8043
+#define GL_LUMINANCE6_ALPHA2_EXT          0x8044
+#define GL_LUMINANCE8_ALPHA8_EXT          0x8045
+#define GL_LUMINANCE12_ALPHA4_EXT         0x8046
+#define GL_LUMINANCE12_ALPHA12_EXT        0x8047
+#define GL_LUMINANCE16_ALPHA16_EXT        0x8048
+#define GL_INTENSITY_EXT                  0x8049
+#define GL_INTENSITY4_EXT                 0x804A
+#define GL_INTENSITY8_EXT                 0x804B
+#define GL_INTENSITY12_EXT                0x804C
+#define GL_INTENSITY16_EXT                0x804D
+#define GL_RGB2_EXT                       0x804E
+#define GL_RGB4_EXT                       0x804F
+#define GL_RGB5_EXT                       0x8050
+#define GL_RGB8_EXT                       0x8051
+#define GL_RGB10_EXT                      0x8052
+#define GL_RGB12_EXT                      0x8053
+#define GL_RGB16_EXT                      0x8054
+#define GL_RGBA2_EXT                      0x8055
+#define GL_RGBA4_EXT                      0x8056
+#define GL_RGB5_A1_EXT                    0x8057
+#define GL_RGBA8_EXT                      0x8058
+#define GL_RGB10_A2_EXT                   0x8059
+#define GL_RGBA12_EXT                     0x805A
+#define GL_RGBA16_EXT                     0x805B
+#define GL_TEXTURE_RED_SIZE_EXT           0x805C
+#define GL_TEXTURE_GREEN_SIZE_EXT         0x805D
+#define GL_TEXTURE_BLUE_SIZE_EXT          0x805E
+#define GL_TEXTURE_ALPHA_SIZE_EXT         0x805F
+#define GL_TEXTURE_LUMINANCE_SIZE_EXT     0x8060
+#define GL_TEXTURE_INTENSITY_SIZE_EXT     0x8061
+#define GL_REPLACE_EXT                    0x8062
+#define GL_PROXY_TEXTURE_1D_EXT           0x8063
+#define GL_PROXY_TEXTURE_2D_EXT           0x8064
+#define GL_TEXTURE_TOO_LARGE_EXT          0x8065
+#endif
+
+#ifndef GL_EXT_texture3D
+#define GL_PACK_SKIP_IMAGES               0x806B
+#define GL_PACK_SKIP_IMAGES_EXT           0x806B
+#define GL_PACK_IMAGE_HEIGHT              0x806C
+#define GL_PACK_IMAGE_HEIGHT_EXT          0x806C
+#define GL_UNPACK_SKIP_IMAGES             0x806D
+#define GL_UNPACK_SKIP_IMAGES_EXT         0x806D
+#define GL_UNPACK_IMAGE_HEIGHT            0x806E
+#define GL_UNPACK_IMAGE_HEIGHT_EXT        0x806E
+#define GL_TEXTURE_3D                     0x806F
+#define GL_TEXTURE_3D_EXT                 0x806F
+#define GL_PROXY_TEXTURE_3D               0x8070
+#define GL_PROXY_TEXTURE_3D_EXT           0x8070
+#define GL_TEXTURE_DEPTH                  0x8071
+#define GL_TEXTURE_DEPTH_EXT              0x8071
+#define GL_TEXTURE_WRAP_R                 0x8072
+#define GL_TEXTURE_WRAP_R_EXT             0x8072
+#define GL_MAX_3D_TEXTURE_SIZE            0x8073
+#define GL_MAX_3D_TEXTURE_SIZE_EXT        0x8073
+#endif
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_FILTER4_SGIS                   0x8146
+#define GL_TEXTURE_FILTER4_SIZE_SGIS      0x8147
+#endif
+
+#ifndef GL_EXT_subtexture
+#endif
+
+#ifndef GL_EXT_copy_texture
+#endif
+
+#ifndef GL_EXT_histogram
+#define GL_HISTOGRAM_EXT                  0x8024
+#define GL_PROXY_HISTOGRAM_EXT            0x8025
+#define GL_HISTOGRAM_WIDTH_EXT            0x8026
+#define GL_HISTOGRAM_FORMAT_EXT           0x8027
+#define GL_HISTOGRAM_RED_SIZE_EXT         0x8028
+#define GL_HISTOGRAM_GREEN_SIZE_EXT       0x8029
+#define GL_HISTOGRAM_BLUE_SIZE_EXT        0x802A
+#define GL_HISTOGRAM_ALPHA_SIZE_EXT       0x802B
+#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT   0x802C
+#define GL_HISTOGRAM_SINK_EXT             0x802D
+#define GL_MINMAX_EXT                     0x802E
+#define GL_MINMAX_FORMAT_EXT              0x802F
+#define GL_MINMAX_SINK_EXT                0x8030
+#define GL_TABLE_TOO_LARGE_EXT            0x8031
+#endif
+
+#ifndef GL_EXT_convolution
+#define GL_CONVOLUTION_1D_EXT             0x8010
+#define GL_CONVOLUTION_2D_EXT             0x8011
+#define GL_SEPARABLE_2D_EXT               0x8012
+#define GL_CONVOLUTION_BORDER_MODE_EXT    0x8013
+#define GL_CONVOLUTION_FILTER_SCALE_EXT   0x8014
+#define GL_CONVOLUTION_FILTER_BIAS_EXT    0x8015
+#define GL_REDUCE_EXT                     0x8016
+#define GL_CONVOLUTION_FORMAT_EXT         0x8017
+#define GL_CONVOLUTION_WIDTH_EXT          0x8018
+#define GL_CONVOLUTION_HEIGHT_EXT         0x8019
+#define GL_MAX_CONVOLUTION_WIDTH_EXT      0x801A
+#define GL_MAX_CONVOLUTION_HEIGHT_EXT     0x801B
+#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C
+#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D
+#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E
+#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F
+#define GL_POST_CONVOLUTION_RED_BIAS_EXT  0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023
+#endif
+
+#ifndef GL_SGI_color_matrix
+#define GL_COLOR_MATRIX_SGI               0x80B1
+#define GL_COLOR_MATRIX_STACK_DEPTH_SGI   0x80B2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3
+#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7
+#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB
+#endif
+
+#ifndef GL_SGI_color_table
+#define GL_COLOR_TABLE_SGI                0x80D0
+#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2
+#define GL_PROXY_COLOR_TABLE_SGI          0x80D3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5
+#define GL_COLOR_TABLE_SCALE_SGI          0x80D6
+#define GL_COLOR_TABLE_BIAS_SGI           0x80D7
+#define GL_COLOR_TABLE_FORMAT_SGI         0x80D8
+#define GL_COLOR_TABLE_WIDTH_SGI          0x80D9
+#define GL_COLOR_TABLE_RED_SIZE_SGI       0x80DA
+#define GL_COLOR_TABLE_GREEN_SIZE_SGI     0x80DB
+#define GL_COLOR_TABLE_BLUE_SIZE_SGI      0x80DC
+#define GL_COLOR_TABLE_ALPHA_SIZE_SGI     0x80DD
+#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE
+#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF
+#endif
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_PIXEL_TEXTURE_SGIS             0x8353
+#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354
+#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355
+#define GL_PIXEL_GROUP_COLOR_SGIS         0x8356
+#endif
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_PIXEL_TEX_GEN_SGIX             0x8139
+#define GL_PIXEL_TEX_GEN_MODE_SGIX        0x832B
+#endif
+
+#ifndef GL_SGIS_texture4D
+#define GL_PACK_SKIP_VOLUMES_SGIS         0x8130
+#define GL_PACK_IMAGE_DEPTH_SGIS          0x8131
+#define GL_UNPACK_SKIP_VOLUMES_SGIS       0x8132
+#define GL_UNPACK_IMAGE_DEPTH_SGIS        0x8133
+#define GL_TEXTURE_4D_SGIS                0x8134
+#define GL_PROXY_TEXTURE_4D_SGIS          0x8135
+#define GL_TEXTURE_4DSIZE_SGIS            0x8136
+#define GL_TEXTURE_WRAP_Q_SGIS            0x8137
+#define GL_MAX_4D_TEXTURE_SIZE_SGIS       0x8138
+#define GL_TEXTURE_4D_BINDING_SGIS        0x814F
+#endif
+
+#ifndef GL_SGI_texture_color_table
+#define GL_TEXTURE_COLOR_TABLE_SGI        0x80BC
+#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI  0x80BD
+#endif
+
+#ifndef GL_EXT_cmyka
+#define GL_CMYK_EXT                       0x800C
+#define GL_CMYKA_EXT                      0x800D
+#define GL_PACK_CMYK_HINT_EXT             0x800E
+#define GL_UNPACK_CMYK_HINT_EXT           0x800F
+#endif
+
+#ifndef GL_EXT_texture_object
+#define GL_TEXTURE_PRIORITY_EXT           0x8066
+#define GL_TEXTURE_RESIDENT_EXT           0x8067
+#define GL_TEXTURE_1D_BINDING_EXT         0x8068
+#define GL_TEXTURE_2D_BINDING_EXT         0x8069
+#define GL_TEXTURE_3D_BINDING_EXT         0x806A
+#endif
+
+#ifndef GL_SGIS_detail_texture
+#define GL_DETAIL_TEXTURE_2D_SGIS         0x8095
+#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096
+#define GL_LINEAR_DETAIL_SGIS             0x8097
+#define GL_LINEAR_DETAIL_ALPHA_SGIS       0x8098
+#define GL_LINEAR_DETAIL_COLOR_SGIS       0x8099
+#define GL_DETAIL_TEXTURE_LEVEL_SGIS      0x809A
+#define GL_DETAIL_TEXTURE_MODE_SGIS       0x809B
+#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C
+#endif
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_LINEAR_SHARPEN_SGIS            0x80AD
+#define GL_LINEAR_SHARPEN_ALPHA_SGIS      0x80AE
+#define GL_LINEAR_SHARPEN_COLOR_SGIS      0x80AF
+#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0
+#endif
+
+#ifndef GL_EXT_packed_pixels
+#define GL_UNSIGNED_BYTE_3_3_2_EXT        0x8032
+#define GL_UNSIGNED_SHORT_4_4_4_4_EXT     0x8033
+#define GL_UNSIGNED_SHORT_5_5_5_1_EXT     0x8034
+#define GL_UNSIGNED_INT_8_8_8_8_EXT       0x8035
+#define GL_UNSIGNED_INT_10_10_10_2_EXT    0x8036
+#endif
+
+#ifndef GL_SGIS_texture_lod
+#define GL_TEXTURE_MIN_LOD_SGIS           0x813A
+#define GL_TEXTURE_MAX_LOD_SGIS           0x813B
+#define GL_TEXTURE_BASE_LEVEL_SGIS        0x813C
+#define GL_TEXTURE_MAX_LEVEL_SGIS         0x813D
+#endif
+
+#ifndef GL_SGIS_multisample
+#define GL_MULTISAMPLE_SGIS               0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_SGIS      0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_SGIS       0x809F
+#define GL_SAMPLE_MASK_SGIS               0x80A0
+#define GL_1PASS_SGIS                     0x80A1
+#define GL_2PASS_0_SGIS                   0x80A2
+#define GL_2PASS_1_SGIS                   0x80A3
+#define GL_4PASS_0_SGIS                   0x80A4
+#define GL_4PASS_1_SGIS                   0x80A5
+#define GL_4PASS_2_SGIS                   0x80A6
+#define GL_4PASS_3_SGIS                   0x80A7
+#define GL_SAMPLE_BUFFERS_SGIS            0x80A8
+#define GL_SAMPLES_SGIS                   0x80A9
+#define GL_SAMPLE_MASK_VALUE_SGIS         0x80AA
+#define GL_SAMPLE_MASK_INVERT_SGIS        0x80AB
+#define GL_SAMPLE_PATTERN_SGIS            0x80AC
+#endif
+
+#ifndef GL_EXT_rescale_normal
+#define GL_RESCALE_NORMAL_EXT             0x803A
+#endif
+
+#ifndef GL_EXT_vertex_array
+#define GL_VERTEX_ARRAY_EXT               0x8074
+#define GL_NORMAL_ARRAY_EXT               0x8075
+#define GL_COLOR_ARRAY_EXT                0x8076
+#define GL_INDEX_ARRAY_EXT                0x8077
+#define GL_TEXTURE_COORD_ARRAY_EXT        0x8078
+#define GL_EDGE_FLAG_ARRAY_EXT            0x8079
+#define GL_VERTEX_ARRAY_SIZE_EXT          0x807A
+#define GL_VERTEX_ARRAY_TYPE_EXT          0x807B
+#define GL_VERTEX_ARRAY_STRIDE_EXT        0x807C
+#define GL_VERTEX_ARRAY_COUNT_EXT         0x807D
+#define GL_NORMAL_ARRAY_TYPE_EXT          0x807E
+#define GL_NORMAL_ARRAY_STRIDE_EXT        0x807F
+#define GL_NORMAL_ARRAY_COUNT_EXT         0x8080
+#define GL_COLOR_ARRAY_SIZE_EXT           0x8081
+#define GL_COLOR_ARRAY_TYPE_EXT           0x8082
+#define GL_COLOR_ARRAY_STRIDE_EXT         0x8083
+#define GL_COLOR_ARRAY_COUNT_EXT          0x8084
+#define GL_INDEX_ARRAY_TYPE_EXT           0x8085
+#define GL_INDEX_ARRAY_STRIDE_EXT         0x8086
+#define GL_INDEX_ARRAY_COUNT_EXT          0x8087
+#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT   0x8088
+#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT   0x8089
+#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A
+#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT  0x808B
+#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT     0x808C
+#define GL_EDGE_FLAG_ARRAY_COUNT_EXT      0x808D
+#define GL_VERTEX_ARRAY_POINTER_EXT       0x808E
+#define GL_NORMAL_ARRAY_POINTER_EXT       0x808F
+#define GL_COLOR_ARRAY_POINTER_EXT        0x8090
+#define GL_INDEX_ARRAY_POINTER_EXT        0x8091
+#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092
+#define GL_EDGE_FLAG_ARRAY_POINTER_EXT    0x8093
+#endif
+
+#ifndef GL_EXT_misc_attribute
+#endif
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_GENERATE_MIPMAP_SGIS           0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS      0x8192
+#endif
+
+#ifndef GL_SGIX_clipmap
+#define GL_LINEAR_CLIPMAP_LINEAR_SGIX     0x8170
+#define GL_TEXTURE_CLIPMAP_CENTER_SGIX    0x8171
+#define GL_TEXTURE_CLIPMAP_FRAME_SGIX     0x8172
+#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX    0x8173
+#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174
+#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175
+#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX     0x8176
+#define GL_MAX_CLIPMAP_DEPTH_SGIX         0x8177
+#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178
+#define GL_NEAREST_CLIPMAP_NEAREST_SGIX   0x844D
+#define GL_NEAREST_CLIPMAP_LINEAR_SGIX    0x844E
+#define GL_LINEAR_CLIPMAP_NEAREST_SGIX    0x844F
+#endif
+
+#ifndef GL_SGIX_shadow
+#define GL_TEXTURE_COMPARE_SGIX           0x819A
+#define GL_TEXTURE_COMPARE_OPERATOR_SGIX  0x819B
+#define GL_TEXTURE_LEQUAL_R_SGIX          0x819C
+#define GL_TEXTURE_GEQUAL_R_SGIX          0x819D
+#endif
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_CLAMP_TO_EDGE_SGIS             0x812F
+#endif
+
+#ifndef GL_EXT_blend_minmax
+#define GL_FUNC_ADD_EXT                   0x8006
+#define GL_MIN_EXT                        0x8007
+#define GL_MAX_EXT                        0x8008
+#define GL_BLEND_EQUATION_EXT             0x8009
+#endif
+
+#ifndef GL_EXT_blend_subtract
+#define GL_FUNC_SUBTRACT_EXT              0x800A
+#define GL_FUNC_REVERSE_SUBTRACT_EXT      0x800B
+#endif
+
+#ifndef GL_EXT_blend_logic_op
+#endif
+
+#ifndef GL_SGIX_interlace
+#define GL_INTERLACE_SGIX                 0x8094
+#endif
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E
+#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F
+#define GL_PIXEL_TILE_WIDTH_SGIX          0x8140
+#define GL_PIXEL_TILE_HEIGHT_SGIX         0x8141
+#define GL_PIXEL_TILE_GRID_WIDTH_SGIX     0x8142
+#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX    0x8143
+#define GL_PIXEL_TILE_GRID_DEPTH_SGIX     0x8144
+#define GL_PIXEL_TILE_CACHE_SIZE_SGIX     0x8145
+#endif
+
+#ifndef GL_SGIS_texture_select
+#define GL_DUAL_ALPHA4_SGIS               0x8110
+#define GL_DUAL_ALPHA8_SGIS               0x8111
+#define GL_DUAL_ALPHA12_SGIS              0x8112
+#define GL_DUAL_ALPHA16_SGIS              0x8113
+#define GL_DUAL_LUMINANCE4_SGIS           0x8114
+#define GL_DUAL_LUMINANCE8_SGIS           0x8115
+#define GL_DUAL_LUMINANCE12_SGIS          0x8116
+#define GL_DUAL_LUMINANCE16_SGIS          0x8117
+#define GL_DUAL_INTENSITY4_SGIS           0x8118
+#define GL_DUAL_INTENSITY8_SGIS           0x8119
+#define GL_DUAL_INTENSITY12_SGIS          0x811A
+#define GL_DUAL_INTENSITY16_SGIS          0x811B
+#define GL_DUAL_LUMINANCE_ALPHA4_SGIS     0x811C
+#define GL_DUAL_LUMINANCE_ALPHA8_SGIS     0x811D
+#define GL_QUAD_ALPHA4_SGIS               0x811E
+#define GL_QUAD_ALPHA8_SGIS               0x811F
+#define GL_QUAD_LUMINANCE4_SGIS           0x8120
+#define GL_QUAD_LUMINANCE8_SGIS           0x8121
+#define GL_QUAD_INTENSITY4_SGIS           0x8122
+#define GL_QUAD_INTENSITY8_SGIS           0x8123
+#define GL_DUAL_TEXTURE_SELECT_SGIS       0x8124
+#define GL_QUAD_TEXTURE_SELECT_SGIS       0x8125
+#endif
+
+#ifndef GL_SGIX_sprite
+#define GL_SPRITE_SGIX                    0x8148
+#define GL_SPRITE_MODE_SGIX               0x8149
+#define GL_SPRITE_AXIS_SGIX               0x814A
+#define GL_SPRITE_TRANSLATION_SGIX        0x814B
+#define GL_SPRITE_AXIAL_SGIX              0x814C
+#define GL_SPRITE_OBJECT_ALIGNED_SGIX     0x814D
+#define GL_SPRITE_EYE_ALIGNED_SGIX        0x814E
+#endif
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E
+#endif
+
+#ifndef GL_SGIX_instruments
+#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180
+#define GL_INSTRUMENT_MEASUREMENTS_SGIX   0x8181
+#endif
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_POST_TEXTURE_FILTER_BIAS_SGIX  0x8179
+#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A
+#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B
+#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C
+#endif
+
+#ifndef GL_SGIX_framezoom
+#define GL_FRAMEZOOM_SGIX                 0x818B
+#define GL_FRAMEZOOM_FACTOR_SGIX          0x818C
+#define GL_MAX_FRAMEZOOM_FACTOR_SGIX      0x818D
+#endif
+
+#ifndef GL_SGIX_tag_sample_buffer
+#endif
+
+#ifndef GL_FfdMaskSGIX
+#define GL_TEXTURE_DEFORMATION_BIT_SGIX   0x00000001
+#define GL_GEOMETRY_DEFORMATION_BIT_SGIX  0x00000002
+#endif
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_GEOMETRY_DEFORMATION_SGIX      0x8194
+#define GL_TEXTURE_DEFORMATION_SGIX       0x8195
+#define GL_DEFORMATIONS_MASK_SGIX         0x8196
+#define GL_MAX_DEFORMATION_ORDER_SGIX     0x8197
+#endif
+
+#ifndef GL_SGIX_reference_plane
+#define GL_REFERENCE_PLANE_SGIX           0x817D
+#define GL_REFERENCE_PLANE_EQUATION_SGIX  0x817E
+#endif
+
+#ifndef GL_SGIX_flush_raster
+#endif
+
+#ifndef GL_SGIX_depth_texture
+#define GL_DEPTH_COMPONENT16_SGIX         0x81A5
+#define GL_DEPTH_COMPONENT24_SGIX         0x81A6
+#define GL_DEPTH_COMPONENT32_SGIX         0x81A7
+#endif
+
+#ifndef GL_SGIS_fog_function
+#define GL_FOG_FUNC_SGIS                  0x812A
+#define GL_FOG_FUNC_POINTS_SGIS           0x812B
+#define GL_MAX_FOG_FUNC_POINTS_SGIS       0x812C
+#endif
+
+#ifndef GL_SGIX_fog_offset
+#define GL_FOG_OFFSET_SGIX                0x8198
+#define GL_FOG_OFFSET_VALUE_SGIX          0x8199
+#endif
+
+#ifndef GL_HP_image_transform
+#define GL_IMAGE_SCALE_X_HP               0x8155
+#define GL_IMAGE_SCALE_Y_HP               0x8156
+#define GL_IMAGE_TRANSLATE_X_HP           0x8157
+#define GL_IMAGE_TRANSLATE_Y_HP           0x8158
+#define GL_IMAGE_ROTATE_ANGLE_HP          0x8159
+#define GL_IMAGE_ROTATE_ORIGIN_X_HP       0x815A
+#define GL_IMAGE_ROTATE_ORIGIN_Y_HP       0x815B
+#define GL_IMAGE_MAG_FILTER_HP            0x815C
+#define GL_IMAGE_MIN_FILTER_HP            0x815D
+#define GL_IMAGE_CUBIC_WEIGHT_HP          0x815E
+#define GL_CUBIC_HP                       0x815F
+#define GL_AVERAGE_HP                     0x8160
+#define GL_IMAGE_TRANSFORM_2D_HP          0x8161
+#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162
+#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163
+#endif
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_IGNORE_BORDER_HP               0x8150
+#define GL_CONSTANT_BORDER_HP             0x8151
+#define GL_REPLICATE_BORDER_HP            0x8153
+#define GL_CONVOLUTION_BORDER_COLOR_HP    0x8154
+#endif
+
+#ifndef GL_INGR_palette_buffer
+#endif
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_TEXTURE_ENV_BIAS_SGIX          0x80BE
+#endif
+
+#ifndef GL_EXT_color_subtable
+#endif
+
+#ifndef GL_PGI_vertex_hints
+#define GL_VERTEX_DATA_HINT_PGI           0x1A22A
+#define GL_VERTEX_CONSISTENT_HINT_PGI     0x1A22B
+#define GL_MATERIAL_SIDE_HINT_PGI         0x1A22C
+#define GL_MAX_VERTEX_HINT_PGI            0x1A22D
+#define GL_COLOR3_BIT_PGI                 0x00010000
+#define GL_COLOR4_BIT_PGI                 0x00020000
+#define GL_EDGEFLAG_BIT_PGI               0x00040000
+#define GL_INDEX_BIT_PGI                  0x00080000
+#define GL_MAT_AMBIENT_BIT_PGI            0x00100000
+#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000
+#define GL_MAT_DIFFUSE_BIT_PGI            0x00400000
+#define GL_MAT_EMISSION_BIT_PGI           0x00800000
+#define GL_MAT_COLOR_INDEXES_BIT_PGI      0x01000000
+#define GL_MAT_SHININESS_BIT_PGI          0x02000000
+#define GL_MAT_SPECULAR_BIT_PGI           0x04000000
+#define GL_NORMAL_BIT_PGI                 0x08000000
+#define GL_TEXCOORD1_BIT_PGI              0x10000000
+#define GL_TEXCOORD2_BIT_PGI              0x20000000
+#define GL_TEXCOORD3_BIT_PGI              0x40000000
+#define GL_TEXCOORD4_BIT_PGI              0x80000000
+#define GL_VERTEX23_BIT_PGI               0x00000004
+#define GL_VERTEX4_BIT_PGI                0x00000008
+#endif
+
+#ifndef GL_PGI_misc_hints
+#define GL_PREFER_DOUBLEBUFFER_HINT_PGI   0x1A1F8
+#define GL_CONSERVE_MEMORY_HINT_PGI       0x1A1FD
+#define GL_RECLAIM_MEMORY_HINT_PGI        0x1A1FE
+#define GL_NATIVE_GRAPHICS_HANDLE_PGI     0x1A202
+#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203
+#define GL_NATIVE_GRAPHICS_END_HINT_PGI   0x1A204
+#define GL_ALWAYS_FAST_HINT_PGI           0x1A20C
+#define GL_ALWAYS_SOFT_HINT_PGI           0x1A20D
+#define GL_ALLOW_DRAW_OBJ_HINT_PGI        0x1A20E
+#define GL_ALLOW_DRAW_WIN_HINT_PGI        0x1A20F
+#define GL_ALLOW_DRAW_FRG_HINT_PGI        0x1A210
+#define GL_ALLOW_DRAW_MEM_HINT_PGI        0x1A211
+#define GL_STRICT_DEPTHFUNC_HINT_PGI      0x1A216
+#define GL_STRICT_LIGHTING_HINT_PGI       0x1A217
+#define GL_STRICT_SCISSOR_HINT_PGI        0x1A218
+#define GL_FULL_STIPPLE_HINT_PGI          0x1A219
+#define GL_CLIP_NEAR_HINT_PGI             0x1A220
+#define GL_CLIP_FAR_HINT_PGI              0x1A221
+#define GL_WIDE_LINE_HINT_PGI             0x1A222
+#define GL_BACK_NORMALS_HINT_PGI          0x1A223
+#endif
+
+#ifndef GL_EXT_paletted_texture
+#define GL_COLOR_INDEX1_EXT               0x80E2
+#define GL_COLOR_INDEX2_EXT               0x80E3
+#define GL_COLOR_INDEX4_EXT               0x80E4
+#define GL_COLOR_INDEX8_EXT               0x80E5
+#define GL_COLOR_INDEX12_EXT              0x80E6
+#define GL_COLOR_INDEX16_EXT              0x80E7
+#define GL_TEXTURE_INDEX_SIZE_EXT         0x80ED
+#endif
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT  0x80F0
+#endif
+
+#ifndef GL_SGIX_list_priority
+#define GL_LIST_PRIORITY_SGIX             0x8182
+#endif
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_IR_INSTRUMENT1_SGIX            0x817F
+#endif
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_CALLIGRAPHIC_FRAGMENT_SGIX     0x8183
+#endif
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_TEXTURE_LOD_BIAS_S_SGIX        0x818E
+#define GL_TEXTURE_LOD_BIAS_T_SGIX        0x818F
+#define GL_TEXTURE_LOD_BIAS_R_SGIX        0x8190
+#endif
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SHADOW_AMBIENT_SGIX            0x80BF
+#endif
+
+#ifndef GL_EXT_index_texture
+#endif
+
+#ifndef GL_EXT_index_material
+#define GL_INDEX_MATERIAL_EXT             0x81B8
+#define GL_INDEX_MATERIAL_PARAMETER_EXT   0x81B9
+#define GL_INDEX_MATERIAL_FACE_EXT        0x81BA
+#endif
+
+#ifndef GL_EXT_index_func
+#define GL_INDEX_TEST_EXT                 0x81B5
+#define GL_INDEX_TEST_FUNC_EXT            0x81B6
+#define GL_INDEX_TEST_REF_EXT             0x81B7
+#endif
+
+#ifndef GL_EXT_index_array_formats
+#define GL_IUI_V2F_EXT                    0x81AD
+#define GL_IUI_V3F_EXT                    0x81AE
+#define GL_IUI_N3F_V2F_EXT                0x81AF
+#define GL_IUI_N3F_V3F_EXT                0x81B0
+#define GL_T2F_IUI_V2F_EXT                0x81B1
+#define GL_T2F_IUI_V3F_EXT                0x81B2
+#define GL_T2F_IUI_N3F_V2F_EXT            0x81B3
+#define GL_T2F_IUI_N3F_V3F_EXT            0x81B4
+#endif
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT   0x81A8
+#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT   0x81A9
+#endif
+
+#ifndef GL_EXT_cull_vertex
+#define GL_CULL_VERTEX_EXT                0x81AA
+#define GL_CULL_VERTEX_EYE_POSITION_EXT   0x81AB
+#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC
+#endif
+
+#ifndef GL_SGIX_ycrcb
+#define GL_YCRCB_422_SGIX                 0x81BB
+#define GL_YCRCB_444_SGIX                 0x81BC
+#endif
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_FRAGMENT_LIGHTING_SGIX         0x8400
+#define GL_FRAGMENT_COLOR_MATERIAL_SGIX   0x8401
+#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402
+#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403
+#define GL_MAX_FRAGMENT_LIGHTS_SGIX       0x8404
+#define GL_MAX_ACTIVE_LIGHTS_SGIX         0x8405
+#define GL_CURRENT_RASTER_NORMAL_SGIX     0x8406
+#define GL_LIGHT_ENV_MODE_SGIX            0x8407
+#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408
+#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409
+#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A
+#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B
+#define GL_FRAGMENT_LIGHT0_SGIX           0x840C
+#define GL_FRAGMENT_LIGHT1_SGIX           0x840D
+#define GL_FRAGMENT_LIGHT2_SGIX           0x840E
+#define GL_FRAGMENT_LIGHT3_SGIX           0x840F
+#define GL_FRAGMENT_LIGHT4_SGIX           0x8410
+#define GL_FRAGMENT_LIGHT5_SGIX           0x8411
+#define GL_FRAGMENT_LIGHT6_SGIX           0x8412
+#define GL_FRAGMENT_LIGHT7_SGIX           0x8413
+#endif
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_RASTER_POSITION_UNCLIPPED_IBM  0x19262
+#endif
+
+#ifndef GL_HP_texture_lighting
+#define GL_TEXTURE_LIGHTING_MODE_HP       0x8167
+#define GL_TEXTURE_POST_SPECULAR_HP       0x8168
+#define GL_TEXTURE_PRE_SPECULAR_HP        0x8169
+#endif
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_MAX_ELEMENTS_VERTICES_EXT      0x80E8
+#define GL_MAX_ELEMENTS_INDICES_EXT       0x80E9
+#endif
+
+#ifndef GL_WIN_phong_shading
+#define GL_PHONG_WIN                      0x80EA
+#define GL_PHONG_HINT_WIN                 0x80EB
+#endif
+
+#ifndef GL_WIN_specular_fog
+#define GL_FOG_SPECULAR_TEXTURE_WIN       0x80EC
+#endif
+
+#ifndef GL_EXT_light_texture
+#define GL_FRAGMENT_MATERIAL_EXT          0x8349
+#define GL_FRAGMENT_NORMAL_EXT            0x834A
+#define GL_FRAGMENT_COLOR_EXT             0x834C
+#define GL_ATTENUATION_EXT                0x834D
+#define GL_SHADOW_ATTENUATION_EXT         0x834E
+#define GL_TEXTURE_APPLICATION_MODE_EXT   0x834F
+#define GL_TEXTURE_LIGHT_EXT              0x8350
+#define GL_TEXTURE_MATERIAL_FACE_EXT      0x8351
+#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352
+/* reuse GL_FRAGMENT_DEPTH_EXT */
+#endif
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_ALPHA_MIN_SGIX                 0x8320
+#define GL_ALPHA_MAX_SGIX                 0x8321
+#endif
+
+#ifndef GL_SGIX_impact_pixel_texture
+#define GL_PIXEL_TEX_GEN_Q_CEILING_SGIX   0x8184
+#define GL_PIXEL_TEX_GEN_Q_ROUND_SGIX     0x8185
+#define GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX     0x8186
+#define GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX 0x8187
+#define GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX 0x8188
+#define GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX    0x8189
+#define GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX    0x818A
+#endif
+
+#ifndef GL_EXT_bgra
+#define GL_BGR_EXT                        0x80E0
+#define GL_BGRA_EXT                       0x80E1
+#endif
+
+#ifndef GL_SGIX_async
+#define GL_ASYNC_MARKER_SGIX              0x8329
+#endif
+
+#ifndef GL_SGIX_async_pixel
+#define GL_ASYNC_TEX_IMAGE_SGIX           0x835C
+#define GL_ASYNC_DRAW_PIXELS_SGIX         0x835D
+#define GL_ASYNC_READ_PIXELS_SGIX         0x835E
+#define GL_MAX_ASYNC_TEX_IMAGE_SGIX       0x835F
+#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX     0x8360
+#define GL_MAX_ASYNC_READ_PIXELS_SGIX     0x8361
+#endif
+
+#ifndef GL_SGIX_async_histogram
+#define GL_ASYNC_HISTOGRAM_SGIX           0x832C
+#define GL_MAX_ASYNC_HISTOGRAM_SGIX       0x832D
+#endif
+
+#ifndef GL_INTEL_texture_scissor
+#endif
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_PARALLEL_ARRAYS_INTEL          0x83F4
+#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5
+#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6
+#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7
+#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8
+#endif
+
+#ifndef GL_HP_occlusion_test
+#define GL_OCCLUSION_TEST_HP              0x8165
+#define GL_OCCLUSION_TEST_RESULT_HP       0x8166
+#endif
+
+#ifndef GL_EXT_pixel_transform
+#define GL_PIXEL_TRANSFORM_2D_EXT         0x8330
+#define GL_PIXEL_MAG_FILTER_EXT           0x8331
+#define GL_PIXEL_MIN_FILTER_EXT           0x8332
+#define GL_PIXEL_CUBIC_WEIGHT_EXT         0x8333
+#define GL_CUBIC_EXT                      0x8334
+#define GL_AVERAGE_EXT                    0x8335
+#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336
+#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337
+#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT  0x8338
+#endif
+
+#ifndef GL_EXT_pixel_transform_color_table
+#endif
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_SHARED_TEXTURE_PALETTE_EXT     0x81FB
+#endif
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT  0x81F8
+#define GL_SINGLE_COLOR_EXT               0x81F9
+#define GL_SEPARATE_SPECULAR_COLOR_EXT    0x81FA
+#endif
+
+#ifndef GL_EXT_secondary_color
+#define GL_COLOR_SUM_EXT                  0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT    0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
+#define GL_SECONDARY_COLOR_ARRAY_EXT      0x845E
+#endif
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_PERTURB_EXT                    0x85AE
+#define GL_TEXTURE_NORMAL_EXT             0x85AF
+#endif
+
+#ifndef GL_EXT_multi_draw_arrays
+#endif
+
+#ifndef GL_EXT_fog_coord
+#define GL_FOG_COORDINATE_SOURCE_EXT      0x8450
+#define GL_FOG_COORDINATE_EXT             0x8451
+#define GL_FRAGMENT_DEPTH_EXT             0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT     0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT  0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT       0x8457
+#endif
+
+#ifndef GL_REND_screen_coordinates
+#define GL_SCREEN_COORDINATES_REND        0x8490
+#define GL_INVERTED_SCREEN_W_REND         0x8491
+#endif
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_TANGENT_ARRAY_EXT              0x8439
+#define GL_BINORMAL_ARRAY_EXT             0x843A
+#define GL_CURRENT_TANGENT_EXT            0x843B
+#define GL_CURRENT_BINORMAL_EXT           0x843C
+#define GL_TANGENT_ARRAY_TYPE_EXT         0x843E
+#define GL_TANGENT_ARRAY_STRIDE_EXT       0x843F
+#define GL_BINORMAL_ARRAY_TYPE_EXT        0x8440
+#define GL_BINORMAL_ARRAY_STRIDE_EXT      0x8441
+#define GL_TANGENT_ARRAY_POINTER_EXT      0x8442
+#define GL_BINORMAL_ARRAY_POINTER_EXT     0x8443
+#define GL_MAP1_TANGENT_EXT               0x8444
+#define GL_MAP2_TANGENT_EXT               0x8445
+#define GL_MAP1_BINORMAL_EXT              0x8446
+#define GL_MAP2_BINORMAL_EXT              0x8447
+#endif
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_COMBINE_EXT                    0x8570
+#define GL_COMBINE_RGB_EXT                0x8571
+#define GL_COMBINE_ALPHA_EXT              0x8572
+#define GL_RGB_SCALE_EXT                  0x8573
+#define GL_ADD_SIGNED_EXT                 0x8574
+#define GL_INTERPOLATE_EXT                0x8575
+#define GL_CONSTANT_EXT                   0x8576
+#define GL_PRIMARY_COLOR_EXT              0x8577
+#define GL_PREVIOUS_EXT                   0x8578
+#define GL_SOURCE0_RGB_EXT                0x8580
+#define GL_SOURCE1_RGB_EXT                0x8581
+#define GL_SOURCE2_RGB_EXT                0x8582
+#define GL_SOURCE0_ALPHA_EXT              0x8588
+#define GL_SOURCE1_ALPHA_EXT              0x8589
+#define GL_SOURCE2_ALPHA_EXT              0x858A
+#define GL_OPERAND0_RGB_EXT               0x8590
+#define GL_OPERAND1_RGB_EXT               0x8591
+#define GL_OPERAND2_RGB_EXT               0x8592
+#define GL_OPERAND0_ALPHA_EXT             0x8598
+#define GL_OPERAND1_ALPHA_EXT             0x8599
+#define GL_OPERAND2_ALPHA_EXT             0x859A
+#endif
+
+#ifndef GL_APPLE_specular_vector
+#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0
+#endif
+
+#ifndef GL_APPLE_transform_hint
+#define GL_TRANSFORM_HINT_APPLE           0x85B1
+#endif
+
+#ifndef GL_SGIX_fog_scale
+#define GL_FOG_SCALE_SGIX                 0x81FC
+#define GL_FOG_SCALE_VALUE_SGIX           0x81FD
+#endif
+
+#ifndef GL_SUNX_constant_data
+#define GL_UNPACK_CONSTANT_DATA_SUNX      0x81D5
+#define GL_TEXTURE_CONSTANT_DATA_SUNX     0x81D6
+#endif
+
+#ifndef GL_SUN_global_alpha
+#define GL_GLOBAL_ALPHA_SUN               0x81D9
+#define GL_GLOBAL_ALPHA_FACTOR_SUN        0x81DA
+#endif
+
+#ifndef GL_SUN_triangle_list
+#define GL_RESTART_SUN                    0x0001
+#define GL_REPLACE_MIDDLE_SUN             0x0002
+#define GL_REPLACE_OLDEST_SUN             0x0003
+#define GL_TRIANGLE_LIST_SUN              0x81D7
+#define GL_REPLACEMENT_CODE_SUN           0x81D8
+#define GL_REPLACEMENT_CODE_ARRAY_SUN     0x85C0
+#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1
+#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2
+#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3
+#define GL_R1UI_V3F_SUN                   0x85C4
+#define GL_R1UI_C4UB_V3F_SUN              0x85C5
+#define GL_R1UI_C3F_V3F_SUN               0x85C6
+#define GL_R1UI_N3F_V3F_SUN               0x85C7
+#define GL_R1UI_C4F_N3F_V3F_SUN           0x85C8
+#define GL_R1UI_T2F_V3F_SUN               0x85C9
+#define GL_R1UI_T2F_N3F_V3F_SUN           0x85CA
+#define GL_R1UI_T2F_C4F_N3F_V3F_SUN       0x85CB
+#endif
+
+#ifndef GL_SUN_vertex
+#endif
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_BLEND_DST_RGB_EXT              0x80C8
+#define GL_BLEND_SRC_RGB_EXT              0x80C9
+#define GL_BLEND_DST_ALPHA_EXT            0x80CA
+#define GL_BLEND_SRC_ALPHA_EXT            0x80CB
+#endif
+
+#ifndef GL_INGR_color_clamp
+#define GL_RED_MIN_CLAMP_INGR             0x8560
+#define GL_GREEN_MIN_CLAMP_INGR           0x8561
+#define GL_BLUE_MIN_CLAMP_INGR            0x8562
+#define GL_ALPHA_MIN_CLAMP_INGR           0x8563
+#define GL_RED_MAX_CLAMP_INGR             0x8564
+#define GL_GREEN_MAX_CLAMP_INGR           0x8565
+#define GL_BLUE_MAX_CLAMP_INGR            0x8566
+#define GL_ALPHA_MAX_CLAMP_INGR           0x8567
+#endif
+
+#ifndef GL_INGR_interlace_read
+#define GL_INTERLACE_READ_INGR            0x8568
+#endif
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_INCR_WRAP_EXT                  0x8507
+#define GL_DECR_WRAP_EXT                  0x8508
+#endif
+
+#ifndef GL_EXT_422_pixels
+#define GL_422_EXT                        0x80CC
+#define GL_422_REV_EXT                    0x80CD
+#define GL_422_AVERAGE_EXT                0x80CE
+#define GL_422_REV_AVERAGE_EXT            0x80CF
+#endif
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NORMAL_MAP_NV                  0x8511
+#define GL_REFLECTION_MAP_NV              0x8512
+#endif
+
+#ifndef GL_EXT_texture_cube_map
+#define GL_NORMAL_MAP_EXT                 0x8511
+#define GL_REFLECTION_MAP_EXT             0x8512
+#define GL_TEXTURE_CUBE_MAP_EXT           0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_EXT   0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A
+#define GL_PROXY_TEXTURE_CUBE_MAP_EXT     0x851B
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT  0x851C
+#endif
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_WRAP_BORDER_SUN                0x81D4
+#endif
+
+#ifndef GL_EXT_texture_env_add
+#endif
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT       0x84FD
+#define GL_TEXTURE_FILTER_CONTROL_EXT     0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT           0x8501
+#endif
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT     0x84FE
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
+#endif
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_MODELVIEW0_STACK_DEPTH_EXT     GL_MODELVIEW_STACK_DEPTH
+#define GL_MODELVIEW1_STACK_DEPTH_EXT     0x8502
+#define GL_MODELVIEW0_MATRIX_EXT          GL_MODELVIEW_MATRIX
+#define GL_MODELVIEW1_MATRIX_EXT          0x8506
+#define GL_VERTEX_WEIGHTING_EXT           0x8509
+#define GL_MODELVIEW0_EXT                 GL_MODELVIEW
+#define GL_MODELVIEW1_EXT                 0x850A
+#define GL_CURRENT_VERTEX_WEIGHT_EXT      0x850B
+#define GL_VERTEX_WEIGHT_ARRAY_EXT        0x850C
+#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT   0x850D
+#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT   0x850E
+#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F
+#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510
+#endif
+
+#ifndef GL_NV_light_max_exponent
+#define GL_MAX_SHININESS_NV               0x8504
+#define GL_MAX_SPOT_EXPONENT_NV           0x8505
+#endif
+
+#ifndef GL_NV_vertex_array_range
+#define GL_VERTEX_ARRAY_RANGE_NV          0x851D
+#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV   0x851E
+#define GL_VERTEX_ARRAY_RANGE_VALID_NV    0x851F
+#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520
+#define GL_VERTEX_ARRAY_RANGE_POINTER_NV  0x8521
+#endif
+
+#ifndef GL_NV_register_combiners
+#define GL_REGISTER_COMBINERS_NV          0x8522
+#define GL_VARIABLE_A_NV                  0x8523
+#define GL_VARIABLE_B_NV                  0x8524
+#define GL_VARIABLE_C_NV                  0x8525
+#define GL_VARIABLE_D_NV                  0x8526
+#define GL_VARIABLE_E_NV                  0x8527
+#define GL_VARIABLE_F_NV                  0x8528
+#define GL_VARIABLE_G_NV                  0x8529
+#define GL_CONSTANT_COLOR0_NV             0x852A
+#define GL_CONSTANT_COLOR1_NV             0x852B
+#define GL_PRIMARY_COLOR_NV               0x852C
+#define GL_SECONDARY_COLOR_NV             0x852D
+#define GL_SPARE0_NV                      0x852E
+#define GL_SPARE1_NV                      0x852F
+#define GL_DISCARD_NV                     0x8530
+#define GL_E_TIMES_F_NV                   0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV           0x8536
+#define GL_UNSIGNED_INVERT_NV             0x8537
+#define GL_EXPAND_NORMAL_NV               0x8538
+#define GL_EXPAND_NEGATE_NV               0x8539
+#define GL_HALF_BIAS_NORMAL_NV            0x853A
+#define GL_HALF_BIAS_NEGATE_NV            0x853B
+#define GL_SIGNED_IDENTITY_NV             0x853C
+#define GL_SIGNED_NEGATE_NV               0x853D
+#define GL_SCALE_BY_TWO_NV                0x853E
+#define GL_SCALE_BY_FOUR_NV               0x853F
+#define GL_SCALE_BY_ONE_HALF_NV           0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV   0x8541
+#define GL_COMBINER_INPUT_NV              0x8542
+#define GL_COMBINER_MAPPING_NV            0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV    0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV     0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV     0x8546
+#define GL_COMBINER_MUX_SUM_NV            0x8547
+#define GL_COMBINER_SCALE_NV              0x8548
+#define GL_COMBINER_BIAS_NV               0x8549
+#define GL_COMBINER_AB_OUTPUT_NV          0x854A
+#define GL_COMBINER_CD_OUTPUT_NV          0x854B
+#define GL_COMBINER_SUM_OUTPUT_NV         0x854C
+#define GL_MAX_GENERAL_COMBINERS_NV       0x854D
+#define GL_NUM_GENERAL_COMBINERS_NV       0x854E
+#define GL_COLOR_SUM_CLAMP_NV             0x854F
+#define GL_COMBINER0_NV                   0x8550
+#define GL_COMBINER1_NV                   0x8551
+#define GL_COMBINER2_NV                   0x8552
+#define GL_COMBINER3_NV                   0x8553
+#define GL_COMBINER4_NV                   0x8554
+#define GL_COMBINER5_NV                   0x8555
+#define GL_COMBINER6_NV                   0x8556
+#define GL_COMBINER7_NV                   0x8557
+/* reuse GL_TEXTURE0_ARB */
+/* reuse GL_TEXTURE1_ARB */
+/* reuse GL_ZERO */
+/* reuse GL_NONE */
+/* reuse GL_FOG */
+#endif
+
+#ifndef GL_NV_fog_distance
+#define GL_FOG_DISTANCE_MODE_NV           0x855A
+#define GL_EYE_RADIAL_NV                  0x855B
+#define GL_EYE_PLANE_ABSOLUTE_NV          0x855C
+/* reuse GL_EYE_PLANE */
+#endif
+
+#ifndef GL_NV_texgen_emboss
+#define GL_EMBOSS_LIGHT_NV                0x855D
+#define GL_EMBOSS_CONSTANT_NV             0x855E
+#define GL_EMBOSS_MAP_NV                  0x855F
+#endif
+
+#ifndef GL_NV_blend_square
+#endif
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_COMBINE4_NV                    0x8503
+#define GL_SOURCE3_RGB_NV                 0x8583
+#define GL_SOURCE3_ALPHA_NV               0x858B
+#define GL_OPERAND3_RGB_NV                0x8593
+#define GL_OPERAND3_ALPHA_NV              0x859B
+#endif
+
+#ifndef GL_MESA_resize_buffers
+#endif
+
+#ifndef GL_MESA_window_pos
+#endif
+
+#ifndef GL_EXT_texture_compression_s3tc
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT   0x83F0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT  0x83F1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT  0x83F2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT  0x83F3
+#endif
+
+#ifndef GL_IBM_cull_vertex
+#define GL_CULL_VERTEX_IBM                103050
+#endif
+
+#ifndef GL_IBM_multimode_draw_arrays
+#endif
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_VERTEX_ARRAY_LIST_IBM          103070
+#define GL_NORMAL_ARRAY_LIST_IBM          103071
+#define GL_COLOR_ARRAY_LIST_IBM           103072
+#define GL_INDEX_ARRAY_LIST_IBM           103073
+#define GL_TEXTURE_COORD_ARRAY_LIST_IBM   103074
+#define GL_EDGE_FLAG_ARRAY_LIST_IBM       103075
+#define GL_FOG_COORDINATE_ARRAY_LIST_IBM  103076
+#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077
+#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM   103080
+#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM   103081
+#define GL_COLOR_ARRAY_LIST_STRIDE_IBM    103082
+#define GL_INDEX_ARRAY_LIST_STRIDE_IBM    103083
+#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084
+#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085
+#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086
+#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087
+#endif
+
+#ifndef GL_SGIX_subsample
+#define GL_PACK_SUBSAMPLE_RATE_SGIX       0x85A0
+#define GL_UNPACK_SUBSAMPLE_RATE_SGIX     0x85A1
+#define GL_PIXEL_SUBSAMPLE_4444_SGIX      0x85A2
+#define GL_PIXEL_SUBSAMPLE_2424_SGIX      0x85A3
+#define GL_PIXEL_SUBSAMPLE_4242_SGIX      0x85A4
+#endif
+
+#ifndef GL_SGIX_ycrcb_subsample
+#endif
+
+#ifndef GL_SGIX_ycrcba
+#define GL_YCRCB_SGIX                     0x8318
+#define GL_YCRCBA_SGIX                    0x8319
+#endif
+
+#ifndef GL_SGI_depth_pass_instrument
+#define GL_DEPTH_PASS_INSTRUMENT_SGIX     0x8310
+#define GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX 0x8311
+#define GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX 0x8312
+#endif
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_COMPRESSED_RGB_FXT1_3DFX       0x86B0
+#define GL_COMPRESSED_RGBA_FXT1_3DFX      0x86B1
+#endif
+
+#ifndef GL_3DFX_multisample
+#define GL_MULTISAMPLE_3DFX               0x86B2
+#define GL_SAMPLE_BUFFERS_3DFX            0x86B3
+#define GL_SAMPLES_3DFX                   0x86B4
+#define GL_MULTISAMPLE_BIT_3DFX           0x20000000
+#endif
+
+#ifndef GL_3DFX_tbuffer
+#endif
+
+#ifndef GL_EXT_multisample
+#define GL_MULTISAMPLE_EXT                0x809D
+#define GL_SAMPLE_ALPHA_TO_MASK_EXT       0x809E
+#define GL_SAMPLE_ALPHA_TO_ONE_EXT        0x809F
+#define GL_SAMPLE_MASK_EXT                0x80A0
+#define GL_1PASS_EXT                      0x80A1
+#define GL_2PASS_0_EXT                    0x80A2
+#define GL_2PASS_1_EXT                    0x80A3
+#define GL_4PASS_0_EXT                    0x80A4
+#define GL_4PASS_1_EXT                    0x80A5
+#define GL_4PASS_2_EXT                    0x80A6
+#define GL_4PASS_3_EXT                    0x80A7
+#define GL_SAMPLE_BUFFERS_EXT             0x80A8
+#define GL_SAMPLES_EXT                    0x80A9
+#define GL_SAMPLE_MASK_VALUE_EXT          0x80AA
+#define GL_SAMPLE_MASK_INVERT_EXT         0x80AB
+#define GL_SAMPLE_PATTERN_EXT             0x80AC
+#define GL_MULTISAMPLE_BIT_EXT            0x20000000
+#endif
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_VERTEX_PRECLIP_SGIX            0x83EE
+#define GL_VERTEX_PRECLIP_HINT_SGIX       0x83EF
+#endif
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_CONVOLUTION_HINT_SGIX          0x8316
+#endif
+
+#ifndef GL_SGIX_resample
+#define GL_PACK_RESAMPLE_SGIX             0x842C
+#define GL_UNPACK_RESAMPLE_SGIX           0x842D
+#define GL_RESAMPLE_REPLICATE_SGIX        0x842E
+#define GL_RESAMPLE_ZERO_FILL_SGIX        0x842F
+#define GL_RESAMPLE_DECIMATE_SGIX         0x8430
+#endif
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_EYE_DISTANCE_TO_POINT_SGIS     0x81F0
+#define GL_OBJECT_DISTANCE_TO_POINT_SGIS  0x81F1
+#define GL_EYE_DISTANCE_TO_LINE_SGIS      0x81F2
+#define GL_OBJECT_DISTANCE_TO_LINE_SGIS   0x81F3
+#define GL_EYE_POINT_SGIS                 0x81F4
+#define GL_OBJECT_POINT_SGIS              0x81F5
+#define GL_EYE_LINE_SGIS                  0x81F6
+#define GL_OBJECT_LINE_SGIS               0x81F7
+#endif
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_TEXTURE_COLOR_WRITEMASK_SGIS   0x81EF
+#endif
+
+#ifndef GL_NV_fence
+#define GL_ALL_COMPLETED_NV               0x84F2
+#define GL_FENCE_STATUS_NV                0x84F3
+#define GL_FENCE_CONDITION_NV             0x84F4
+#endif
+
+#ifndef GL_IBM_texture_mirrored_repeat
+#define GL_MIRRORED_REPEAT_IBM            0x8370
+#endif
+
+#ifndef GL_NV_evaluators
+#define GL_EVAL_2D_NV                     0x86C0
+#define GL_EVAL_TRIANGULAR_2D_NV          0x86C1
+#define GL_MAP_TESSELLATION_NV            0x86C2
+#define GL_MAP_ATTRIB_U_ORDER_NV          0x86C3
+#define GL_MAP_ATTRIB_V_ORDER_NV          0x86C4
+#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5
+#define GL_EVAL_VERTEX_ATTRIB0_NV         0x86C6
+#define GL_EVAL_VERTEX_ATTRIB1_NV         0x86C7
+#define GL_EVAL_VERTEX_ATTRIB2_NV         0x86C8
+#define GL_EVAL_VERTEX_ATTRIB3_NV         0x86C9
+#define GL_EVAL_VERTEX_ATTRIB4_NV         0x86CA
+#define GL_EVAL_VERTEX_ATTRIB5_NV         0x86CB
+#define GL_EVAL_VERTEX_ATTRIB6_NV         0x86CC
+#define GL_EVAL_VERTEX_ATTRIB7_NV         0x86CD
+#define GL_EVAL_VERTEX_ATTRIB8_NV         0x86CE
+#define GL_EVAL_VERTEX_ATTRIB9_NV         0x86CF
+#define GL_EVAL_VERTEX_ATTRIB10_NV        0x86D0
+#define GL_EVAL_VERTEX_ATTRIB11_NV        0x86D1
+#define GL_EVAL_VERTEX_ATTRIB12_NV        0x86D2
+#define GL_EVAL_VERTEX_ATTRIB13_NV        0x86D3
+#define GL_EVAL_VERTEX_ATTRIB14_NV        0x86D4
+#define GL_EVAL_VERTEX_ATTRIB15_NV        0x86D5
+#define GL_MAX_MAP_TESSELLATION_NV        0x86D6
+#define GL_MAX_RATIONAL_EVAL_ORDER_NV     0x86D7
+#endif
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_DEPTH_STENCIL_NV               0x84F9
+#define GL_UNSIGNED_INT_24_8_NV           0x84FA
+#endif
+
+#ifndef GL_NV_register_combiners2
+#define GL_PER_STAGE_CONSTANTS_NV         0x8535
+#endif
+
+#ifndef GL_NV_texture_compression_vtc
+#endif
+
+#ifndef GL_NV_texture_rectangle
+#define GL_TEXTURE_RECTANGLE_NV           0x84F5
+#define GL_TEXTURE_BINDING_RECTANGLE_NV   0x84F6
+#define GL_PROXY_TEXTURE_RECTANGLE_NV     0x84F7
+#define GL_MAX_TEXTURE_RECTANGLE_SIZE_NV  0x84F8
+#endif
+
+#ifndef GL_NV_texture_shader
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV    0x864C
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV      0x86DA
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV  0x86DB
+#define GL_DSDT_MAG_INTENSITY_NV          0x86DC
+#define GL_SHADER_CONSISTENT_NV           0x86DD
+#define GL_TEXTURE_SHADER_NV              0x86DE
+#define GL_SHADER_OPERATION_NV            0x86DF
+#define GL_CULL_MODES_NV                  0x86E0
+#define GL_OFFSET_TEXTURE_MATRIX_NV       0x86E1
+#define GL_OFFSET_TEXTURE_SCALE_NV        0x86E2
+#define GL_OFFSET_TEXTURE_BIAS_NV         0x86E3
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV    GL_OFFSET_TEXTURE_MATRIX_NV
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV     GL_OFFSET_TEXTURE_SCALE_NV
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV      GL_OFFSET_TEXTURE_BIAS_NV
+#define GL_PREVIOUS_TEXTURE_INPUT_NV      0x86E4
+#define GL_CONST_EYE_NV                   0x86E5
+#define GL_PASS_THROUGH_NV                0x86E6
+#define GL_CULL_FRAGMENT_NV               0x86E7
+#define GL_OFFSET_TEXTURE_2D_NV           0x86E8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV     0x86E9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV     0x86EA
+#define GL_DOT_PRODUCT_NV                 0x86EC
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV   0x86ED
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV      0x86EE
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
+#define GL_HILO_NV                        0x86F4
+#define GL_DSDT_NV                        0x86F5
+#define GL_DSDT_MAG_NV                    0x86F6
+#define GL_DSDT_MAG_VIB_NV                0x86F7
+#define GL_HILO16_NV                      0x86F8
+#define GL_SIGNED_HILO_NV                 0x86F9
+#define GL_SIGNED_HILO16_NV               0x86FA
+#define GL_SIGNED_RGBA_NV                 0x86FB
+#define GL_SIGNED_RGBA8_NV                0x86FC
+#define GL_SIGNED_RGB_NV                  0x86FE
+#define GL_SIGNED_RGB8_NV                 0x86FF
+#define GL_SIGNED_LUMINANCE_NV            0x8701
+#define GL_SIGNED_LUMINANCE8_NV           0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV      0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV    0x8704
+#define GL_SIGNED_ALPHA_NV                0x8705
+#define GL_SIGNED_ALPHA8_NV               0x8706
+#define GL_SIGNED_INTENSITY_NV            0x8707
+#define GL_SIGNED_INTENSITY8_NV           0x8708
+#define GL_DSDT8_NV                       0x8709
+#define GL_DSDT8_MAG8_NV                  0x870A
+#define GL_DSDT8_MAG8_INTENSITY8_NV       0x870B
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV   0x870C
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
+#define GL_HI_SCALE_NV                    0x870E
+#define GL_LO_SCALE_NV                    0x870F
+#define GL_DS_SCALE_NV                    0x8710
+#define GL_DT_SCALE_NV                    0x8711
+#define GL_MAGNITUDE_SCALE_NV             0x8712
+#define GL_VIBRANCE_SCALE_NV              0x8713
+#define GL_HI_BIAS_NV                     0x8714
+#define GL_LO_BIAS_NV                     0x8715
+#define GL_DS_BIAS_NV                     0x8716
+#define GL_DT_BIAS_NV                     0x8717
+#define GL_MAGNITUDE_BIAS_NV              0x8718
+#define GL_VIBRANCE_BIAS_NV               0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV       0x871A
+#define GL_TEXTURE_HI_SIZE_NV             0x871B
+#define GL_TEXTURE_LO_SIZE_NV             0x871C
+#define GL_TEXTURE_DS_SIZE_NV             0x871D
+#define GL_TEXTURE_DT_SIZE_NV             0x871E
+#define GL_TEXTURE_MAG_SIZE_NV            0x871F
+#endif
+
+#ifndef GL_NV_texture_shader2
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV      0x86EF
+#endif
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533
+#endif
+
+#ifndef GL_NV_vertex_program
+#define GL_VERTEX_PROGRAM_NV              0x8620
+#define GL_VERTEX_STATE_PROGRAM_NV        0x8621
+#define GL_ATTRIB_ARRAY_SIZE_NV           0x8623
+#define GL_ATTRIB_ARRAY_STRIDE_NV         0x8624
+#define GL_ATTRIB_ARRAY_TYPE_NV           0x8625
+#define GL_CURRENT_ATTRIB_NV              0x8626
+#define GL_PROGRAM_LENGTH_NV              0x8627
+#define GL_PROGRAM_STRING_NV              0x8628
+#define GL_MODELVIEW_PROJECTION_NV        0x8629
+#define GL_IDENTITY_NV                    0x862A
+#define GL_INVERSE_NV                     0x862B
+#define GL_TRANSPOSE_NV                   0x862C
+#define GL_INVERSE_TRANSPOSE_NV           0x862D
+#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E
+#define GL_MAX_TRACK_MATRICES_NV          0x862F
+#define GL_MATRIX0_NV                     0x8630
+#define GL_MATRIX1_NV                     0x8631
+#define GL_MATRIX2_NV                     0x8632
+#define GL_MATRIX3_NV                     0x8633
+#define GL_MATRIX4_NV                     0x8634
+#define GL_MATRIX5_NV                     0x8635
+#define GL_MATRIX6_NV                     0x8636
+#define GL_MATRIX7_NV                     0x8637
+#define GL_CURRENT_MATRIX_STACK_DEPTH_NV  0x8640
+#define GL_CURRENT_MATRIX_NV              0x8641
+#define GL_VERTEX_PROGRAM_POINT_SIZE_NV   0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_NV     0x8643
+#define GL_PROGRAM_PARAMETER_NV           0x8644
+#define GL_ATTRIB_ARRAY_POINTER_NV        0x8645
+#define GL_PROGRAM_TARGET_NV              0x8646
+#define GL_PROGRAM_RESIDENT_NV            0x8647
+#define GL_TRACK_MATRIX_NV                0x8648
+#define GL_TRACK_MATRIX_TRANSFORM_NV      0x8649
+#define GL_VERTEX_PROGRAM_BINDING_NV      0x864A
+#define GL_PROGRAM_ERROR_POSITION_NV      0x864B
+#define GL_VERTEX_ATTRIB_ARRAY0_NV        0x8650
+#define GL_VERTEX_ATTRIB_ARRAY1_NV        0x8651
+#define GL_VERTEX_ATTRIB_ARRAY2_NV        0x8652
+#define GL_VERTEX_ATTRIB_ARRAY3_NV        0x8653
+#define GL_VERTEX_ATTRIB_ARRAY4_NV        0x8654
+#define GL_VERTEX_ATTRIB_ARRAY5_NV        0x8655
+#define GL_VERTEX_ATTRIB_ARRAY6_NV        0x8656
+#define GL_VERTEX_ATTRIB_ARRAY7_NV        0x8657
+#define GL_VERTEX_ATTRIB_ARRAY8_NV        0x8658
+#define GL_VERTEX_ATTRIB_ARRAY9_NV        0x8659
+#define GL_VERTEX_ATTRIB_ARRAY10_NV       0x865A
+#define GL_VERTEX_ATTRIB_ARRAY11_NV       0x865B
+#define GL_VERTEX_ATTRIB_ARRAY12_NV       0x865C
+#define GL_VERTEX_ATTRIB_ARRAY13_NV       0x865D
+#define GL_VERTEX_ATTRIB_ARRAY14_NV       0x865E
+#define GL_VERTEX_ATTRIB_ARRAY15_NV       0x865F
+#define GL_MAP1_VERTEX_ATTRIB0_4_NV       0x8660
+#define GL_MAP1_VERTEX_ATTRIB1_4_NV       0x8661
+#define GL_MAP1_VERTEX_ATTRIB2_4_NV       0x8662
+#define GL_MAP1_VERTEX_ATTRIB3_4_NV       0x8663
+#define GL_MAP1_VERTEX_ATTRIB4_4_NV       0x8664
+#define GL_MAP1_VERTEX_ATTRIB5_4_NV       0x8665
+#define GL_MAP1_VERTEX_ATTRIB6_4_NV       0x8666
+#define GL_MAP1_VERTEX_ATTRIB7_4_NV       0x8667
+#define GL_MAP1_VERTEX_ATTRIB8_4_NV       0x8668
+#define GL_MAP1_VERTEX_ATTRIB9_4_NV       0x8669
+#define GL_MAP1_VERTEX_ATTRIB10_4_NV      0x866A
+#define GL_MAP1_VERTEX_ATTRIB11_4_NV      0x866B
+#define GL_MAP1_VERTEX_ATTRIB12_4_NV      0x866C
+#define GL_MAP1_VERTEX_ATTRIB13_4_NV      0x866D
+#define GL_MAP1_VERTEX_ATTRIB14_4_NV      0x866E
+#define GL_MAP1_VERTEX_ATTRIB15_4_NV      0x866F
+#define GL_MAP2_VERTEX_ATTRIB0_4_NV       0x8670
+#define GL_MAP2_VERTEX_ATTRIB1_4_NV       0x8671
+#define GL_MAP2_VERTEX_ATTRIB2_4_NV       0x8672
+#define GL_MAP2_VERTEX_ATTRIB3_4_NV       0x8673
+#define GL_MAP2_VERTEX_ATTRIB4_4_NV       0x8674
+#define GL_MAP2_VERTEX_ATTRIB5_4_NV       0x8675
+#define GL_MAP2_VERTEX_ATTRIB6_4_NV       0x8676
+#define GL_MAP2_VERTEX_ATTRIB7_4_NV       0x8677
+#define GL_MAP2_VERTEX_ATTRIB8_4_NV       0x8678
+#define GL_MAP2_VERTEX_ATTRIB9_4_NV       0x8679
+#define GL_MAP2_VERTEX_ATTRIB10_4_NV      0x867A
+#define GL_MAP2_VERTEX_ATTRIB11_4_NV      0x867B
+#define GL_MAP2_VERTEX_ATTRIB12_4_NV      0x867C
+#define GL_MAP2_VERTEX_ATTRIB13_4_NV      0x867D
+#define GL_MAP2_VERTEX_ATTRIB14_4_NV      0x867E
+#define GL_MAP2_VERTEX_ATTRIB15_4_NV      0x867F
+#endif
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_TEXTURE_MAX_CLAMP_S_SGIX       0x8369
+#define GL_TEXTURE_MAX_CLAMP_T_SGIX       0x836A
+#define GL_TEXTURE_MAX_CLAMP_R_SGIX       0x836B
+#endif
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SCALEBIAS_HINT_SGIX            0x8322
+#endif
+
+#ifndef GL_OML_interlace
+#define GL_INTERLACE_OML                  0x8980
+#define GL_INTERLACE_READ_OML             0x8981
+#endif
+
+#ifndef GL_OML_subsample
+#define GL_FORMAT_SUBSAMPLE_24_24_OML     0x8982
+#define GL_FORMAT_SUBSAMPLE_244_244_OML   0x8983
+#endif
+
+#ifndef GL_OML_resample
+#define GL_PACK_RESAMPLE_OML              0x8984
+#define GL_UNPACK_RESAMPLE_OML            0x8985
+#define GL_RESAMPLE_REPLICATE_OML         0x8986
+#define GL_RESAMPLE_ZERO_FILL_OML         0x8987
+#define GL_RESAMPLE_AVERAGE_OML           0x8988
+#define GL_RESAMPLE_DECIMATE_OML          0x8989
+#endif
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_DEPTH_STENCIL_TO_RGBA_NV       0x886E
+#define GL_DEPTH_STENCIL_TO_BGRA_NV       0x886F
+#endif
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_BUMP_ROT_MATRIX_ATI            0x8775
+#define GL_BUMP_ROT_MATRIX_SIZE_ATI       0x8776
+#define GL_BUMP_NUM_TEX_UNITS_ATI         0x8777
+#define GL_BUMP_TEX_UNITS_ATI             0x8778
+#define GL_DUDV_ATI                       0x8779
+#define GL_DU8DV8_ATI                     0x877A
+#define GL_BUMP_ENVMAP_ATI                0x877B
+#define GL_BUMP_TARGET_ATI                0x877C
+#endif
+
+#ifndef GL_ATI_fragment_shader
+#define GL_FRAGMENT_SHADER_ATI            0x8920
+#define GL_REG_0_ATI                      0x8921
+#define GL_REG_1_ATI                      0x8922
+#define GL_REG_2_ATI                      0x8923
+#define GL_REG_3_ATI                      0x8924
+#define GL_REG_4_ATI                      0x8925
+#define GL_REG_5_ATI                      0x8926
+#define GL_REG_6_ATI                      0x8927
+#define GL_REG_7_ATI                      0x8928
+#define GL_REG_8_ATI                      0x8929
+#define GL_REG_9_ATI                      0x892A
+#define GL_REG_10_ATI                     0x892B
+#define GL_REG_11_ATI                     0x892C
+#define GL_REG_12_ATI                     0x892D
+#define GL_REG_13_ATI                     0x892E
+#define GL_REG_14_ATI                     0x892F
+#define GL_REG_15_ATI                     0x8930
+#define GL_REG_16_ATI                     0x8931
+#define GL_REG_17_ATI                     0x8932
+#define GL_REG_18_ATI                     0x8933
+#define GL_REG_19_ATI                     0x8934
+#define GL_REG_20_ATI                     0x8935
+#define GL_REG_21_ATI                     0x8936
+#define GL_REG_22_ATI                     0x8937
+#define GL_REG_23_ATI                     0x8938
+#define GL_REG_24_ATI                     0x8939
+#define GL_REG_25_ATI                     0x893A
+#define GL_REG_26_ATI                     0x893B
+#define GL_REG_27_ATI                     0x893C
+#define GL_REG_28_ATI                     0x893D
+#define GL_REG_29_ATI                     0x893E
+#define GL_REG_30_ATI                     0x893F
+#define GL_REG_31_ATI                     0x8940
+#define GL_CON_0_ATI                      0x8941
+#define GL_CON_1_ATI                      0x8942
+#define GL_CON_2_ATI                      0x8943
+#define GL_CON_3_ATI                      0x8944
+#define GL_CON_4_ATI                      0x8945
+#define GL_CON_5_ATI                      0x8946
+#define GL_CON_6_ATI                      0x8947
+#define GL_CON_7_ATI                      0x8948
+#define GL_CON_8_ATI                      0x8949
+#define GL_CON_9_ATI                      0x894A
+#define GL_CON_10_ATI                     0x894B
+#define GL_CON_11_ATI                     0x894C
+#define GL_CON_12_ATI                     0x894D
+#define GL_CON_13_ATI                     0x894E
+#define GL_CON_14_ATI                     0x894F
+#define GL_CON_15_ATI                     0x8950
+#define GL_CON_16_ATI                     0x8951
+#define GL_CON_17_ATI                     0x8952
+#define GL_CON_18_ATI                     0x8953
+#define GL_CON_19_ATI                     0x8954
+#define GL_CON_20_ATI                     0x8955
+#define GL_CON_21_ATI                     0x8956
+#define GL_CON_22_ATI                     0x8957
+#define GL_CON_23_ATI                     0x8958
+#define GL_CON_24_ATI                     0x8959
+#define GL_CON_25_ATI                     0x895A
+#define GL_CON_26_ATI                     0x895B
+#define GL_CON_27_ATI                     0x895C
+#define GL_CON_28_ATI                     0x895D
+#define GL_CON_29_ATI                     0x895E
+#define GL_CON_30_ATI                     0x895F
+#define GL_CON_31_ATI                     0x8960
+#define GL_MOV_ATI                        0x8961
+#define GL_ADD_ATI                        0x8963
+#define GL_MUL_ATI                        0x8964
+#define GL_SUB_ATI                        0x8965
+#define GL_DOT3_ATI                       0x8966
+#define GL_DOT4_ATI                       0x8967
+#define GL_MAD_ATI                        0x8968
+#define GL_LERP_ATI                       0x8969
+#define GL_CND_ATI                        0x896A
+#define GL_CND0_ATI                       0x896B
+#define GL_DOT2_ADD_ATI                   0x896C
+#define GL_SECONDARY_INTERPOLATOR_ATI     0x896D
+#define GL_NUM_FRAGMENT_REGISTERS_ATI     0x896E
+#define GL_NUM_FRAGMENT_CONSTANTS_ATI     0x896F
+#define GL_NUM_PASSES_ATI                 0x8970
+#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI  0x8971
+#define GL_NUM_INSTRUCTIONS_TOTAL_ATI     0x8972
+#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973
+#define GL_NUM_LOOPBACK_COMPONENTS_ATI    0x8974
+#define GL_COLOR_ALPHA_PAIRING_ATI        0x8975
+#define GL_SWIZZLE_STR_ATI                0x8976
+#define GL_SWIZZLE_STQ_ATI                0x8977
+#define GL_SWIZZLE_STR_DR_ATI             0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI             0x8979
+#define GL_SWIZZLE_STRQ_ATI               0x897A
+#define GL_SWIZZLE_STRQ_DQ_ATI            0x897B
+#define GL_RED_BIT_ATI                    0x00000001
+#define GL_GREEN_BIT_ATI                  0x00000002
+#define GL_BLUE_BIT_ATI                   0x00000004
+#define GL_2X_BIT_ATI                     0x00000001
+#define GL_4X_BIT_ATI                     0x00000002
+#define GL_8X_BIT_ATI                     0x00000004
+#define GL_HALF_BIT_ATI                   0x00000008
+#define GL_QUARTER_BIT_ATI                0x00000010
+#define GL_EIGHTH_BIT_ATI                 0x00000020
+#define GL_SATURATE_BIT_ATI               0x00000040
+#define GL_COMP_BIT_ATI                   0x00000002
+#define GL_NEGATE_BIT_ATI                 0x00000004
+#define GL_BIAS_BIT_ATI                   0x00000008
+#endif
+
+#ifndef GL_ATI_pn_triangles
+#define GL_PN_TRIANGLES_ATI               0x87F0
+#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1
+#define GL_PN_TRIANGLES_POINT_MODE_ATI    0x87F2
+#define GL_PN_TRIANGLES_NORMAL_MODE_ATI   0x87F3
+#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4
+#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5
+#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6
+#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7
+#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8
+#endif
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_STATIC_ATI                     0x8760
+#define GL_DYNAMIC_ATI                    0x8761
+#define GL_PRESERVE_ATI                   0x8762
+#define GL_DISCARD_ATI                    0x8763
+#define GL_OBJECT_BUFFER_SIZE_ATI         0x8764
+#define GL_OBJECT_BUFFER_USAGE_ATI        0x8765
+#define GL_ARRAY_OBJECT_BUFFER_ATI        0x8766
+#define GL_ARRAY_OBJECT_OFFSET_ATI        0x8767
+#endif
+
+#ifndef GL_EXT_vertex_shader
+#define GL_VERTEX_SHADER_EXT              0x8780
+#define GL_VERTEX_SHADER_BINDING_EXT      0x8781
+#define GL_OP_INDEX_EXT                   0x8782
+#define GL_OP_NEGATE_EXT                  0x8783
+#define GL_OP_DOT3_EXT                    0x8784
+#define GL_OP_DOT4_EXT                    0x8785
+#define GL_OP_MUL_EXT                     0x8786
+#define GL_OP_ADD_EXT                     0x8787
+#define GL_OP_MADD_EXT                    0x8788
+#define GL_OP_FRAC_EXT                    0x8789
+#define GL_OP_MAX_EXT                     0x878A
+#define GL_OP_MIN_EXT                     0x878B
+#define GL_OP_SET_GE_EXT                  0x878C
+#define GL_OP_SET_LT_EXT                  0x878D
+#define GL_OP_CLAMP_EXT                   0x878E
+#define GL_OP_FLOOR_EXT                   0x878F
+#define GL_OP_ROUND_EXT                   0x8790
+#define GL_OP_EXP_BASE_2_EXT              0x8791
+#define GL_OP_LOG_BASE_2_EXT              0x8792
+#define GL_OP_POWER_EXT                   0x8793
+#define GL_OP_RECIP_EXT                   0x8794
+#define GL_OP_RECIP_SQRT_EXT              0x8795
+#define GL_OP_SUB_EXT                     0x8796
+#define GL_OP_CROSS_PRODUCT_EXT           0x8797
+#define GL_OP_MULTIPLY_MATRIX_EXT         0x8798
+#define GL_OP_MOV_EXT                     0x8799
+#define GL_OUTPUT_VERTEX_EXT              0x879A
+#define GL_OUTPUT_COLOR0_EXT              0x879B
+#define GL_OUTPUT_COLOR1_EXT              0x879C
+#define GL_OUTPUT_TEXTURE_COORD0_EXT      0x879D
+#define GL_OUTPUT_TEXTURE_COORD1_EXT      0x879E
+#define GL_OUTPUT_TEXTURE_COORD2_EXT      0x879F
+#define GL_OUTPUT_TEXTURE_COORD3_EXT      0x87A0
+#define GL_OUTPUT_TEXTURE_COORD4_EXT      0x87A1
+#define GL_OUTPUT_TEXTURE_COORD5_EXT      0x87A2
+#define GL_OUTPUT_TEXTURE_COORD6_EXT      0x87A3
+#define GL_OUTPUT_TEXTURE_COORD7_EXT      0x87A4
+#define GL_OUTPUT_TEXTURE_COORD8_EXT      0x87A5
+#define GL_OUTPUT_TEXTURE_COORD9_EXT      0x87A6
+#define GL_OUTPUT_TEXTURE_COORD10_EXT     0x87A7
+#define GL_OUTPUT_TEXTURE_COORD11_EXT     0x87A8
+#define GL_OUTPUT_TEXTURE_COORD12_EXT     0x87A9
+#define GL_OUTPUT_TEXTURE_COORD13_EXT     0x87AA
+#define GL_OUTPUT_TEXTURE_COORD14_EXT     0x87AB
+#define GL_OUTPUT_TEXTURE_COORD15_EXT     0x87AC
+#define GL_OUTPUT_TEXTURE_COORD16_EXT     0x87AD
+#define GL_OUTPUT_TEXTURE_COORD17_EXT     0x87AE
+#define GL_OUTPUT_TEXTURE_COORD18_EXT     0x87AF
+#define GL_OUTPUT_TEXTURE_COORD19_EXT     0x87B0
+#define GL_OUTPUT_TEXTURE_COORD20_EXT     0x87B1
+#define GL_OUTPUT_TEXTURE_COORD21_EXT     0x87B2
+#define GL_OUTPUT_TEXTURE_COORD22_EXT     0x87B3
+#define GL_OUTPUT_TEXTURE_COORD23_EXT     0x87B4
+#define GL_OUTPUT_TEXTURE_COORD24_EXT     0x87B5
+#define GL_OUTPUT_TEXTURE_COORD25_EXT     0x87B6
+#define GL_OUTPUT_TEXTURE_COORD26_EXT     0x87B7
+#define GL_OUTPUT_TEXTURE_COORD27_EXT     0x87B8
+#define GL_OUTPUT_TEXTURE_COORD28_EXT     0x87B9
+#define GL_OUTPUT_TEXTURE_COORD29_EXT     0x87BA
+#define GL_OUTPUT_TEXTURE_COORD30_EXT     0x87BB
+#define GL_OUTPUT_TEXTURE_COORD31_EXT     0x87BC
+#define GL_OUTPUT_FOG_EXT                 0x87BD
+#define GL_SCALAR_EXT                     0x87BE
+#define GL_VECTOR_EXT                     0x87BF
+#define GL_MATRIX_EXT                     0x87C0
+#define GL_VARIANT_EXT                    0x87C1
+#define GL_INVARIANT_EXT                  0x87C2
+#define GL_LOCAL_CONSTANT_EXT             0x87C3
+#define GL_LOCAL_EXT                      0x87C4
+#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5
+#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6
+#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7
+#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8
+#define GL_MAX_VERTEX_SHADER_LOCALS_EXT   0x87C9
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INARIANTS_EXT 0x87CD
+#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE
+#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF
+#define GL_VERTEX_SHADER_VARIANTS_EXT     0x87D0
+#define GL_VERTEX_SHADER_INVARIANTS_EXT   0x87D1
+#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2
+#define GL_VERTEX_SHADER_LOCALS_EXT       0x87D3
+#define GL_VERTEX_SHADER_OPTIMIZED_EXT    0x87D4
+#define GL_X_EXT                          0x87D5
+#define GL_Y_EXT                          0x87D6
+#define GL_Z_EXT                          0x87D7
+#define GL_W_EXT                          0x87D8
+#define GL_NEGATIVE_X_EXT                 0x87D9
+#define GL_NEGATIVE_Y_EXT                 0x87DA
+#define GL_NEGATIVE_Z_EXT                 0x87DB
+#define GL_NEGATIVE_W_EXT                 0x87DC
+#define GL_ZERO_EXT                       0x87DD
+#define GL_ONE_EXT                        0x87DE
+#define GL_NEGATIVE_ONE_EXT               0x87DF
+#define GL_NORMALIZED_RANGE_EXT           0x87E0
+#define GL_FULL_RANGE_EXT                 0x87E1
+#define GL_CURRENT_VERTEX_EXT             0x87E2
+#define GL_MVP_MATRIX_EXT                 0x87E3
+#define GL_VARIANT_VALUE_EXT              0x87E4
+#define GL_VARIANT_DATATYPE_EXT           0x87E5
+#define GL_VARIANT_ARRAY_STRIDE_EXT       0x87E6
+#define GL_VARIANT_ARRAY_TYPE_EXT         0x87E7
+#define GL_VARIANT_ARRAY_EXT              0x87E8
+#define GL_VARIANT_ARRAY_POINTER_EXT      0x87E9
+#define GL_INVARIANT_VALUE_EXT            0x87EA
+#define GL_INVARIANT_DATATYPE_EXT         0x87EB
+#define GL_LOCAL_CONSTANT_VALUE_EXT       0x87EC
+#define GL_LOCAL_CONSTANT_DATATYPE_EXT    0x87ED
+#endif
+
+#ifndef GL_ATI_vertex_streams
+#define GL_MAX_VERTEX_STREAMS_ATI         0x876B
+#define GL_VERTEX_STREAM0_ATI             0x876C
+#define GL_VERTEX_STREAM1_ATI             0x876D
+#define GL_VERTEX_STREAM2_ATI             0x876E
+#define GL_VERTEX_STREAM3_ATI             0x876F
+#define GL_VERTEX_STREAM4_ATI             0x8770
+#define GL_VERTEX_STREAM5_ATI             0x8771
+#define GL_VERTEX_STREAM6_ATI             0x8772
+#define GL_VERTEX_STREAM7_ATI             0x8773
+#define GL_VERTEX_SOURCE_ATI              0x8774
+#endif
+
+#ifndef GL_ATI_element_array
+#define GL_ELEMENT_ARRAY_ATI              0x8768
+#define GL_ELEMENT_ARRAY_TYPE_ATI         0x8769
+#define GL_ELEMENT_ARRAY_POINTER_ATI      0x876A
+#endif
+
+#ifndef GL_SUN_mesh_array
+#define GL_QUAD_MESH_SUN                  0x8614
+#define GL_TRIANGLE_MESH_SUN              0x8615
+#endif
+
+#ifndef GL_SUN_slice_accum
+#define GL_SLICE_ACCUM_SUN                0x85CC
+#endif
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_MULTISAMPLE_FILTER_HINT_NV     0x8534
+#endif
+
+#ifndef GL_NV_depth_clamp
+#define GL_DEPTH_CLAMP_NV                 0x864F
+#endif
+
+#ifndef GL_NV_occlusion_query
+#define GL_PIXEL_COUNTER_BITS_NV          0x8864
+#define GL_CURRENT_OCCLUSION_QUERY_ID_NV  0x8865
+#define GL_PIXEL_COUNT_NV                 0x8866
+#define GL_PIXEL_COUNT_AVAILABLE_NV       0x8867
+#endif
+
+#ifndef GL_NV_point_sprite
+#define GL_POINT_SPRITE_NV                0x8861
+#define GL_COORD_REPLACE_NV               0x8862
+#define GL_POINT_SPRITE_R_MODE_NV         0x8863
+#endif
+
+#ifndef GL_NV_texture_shader3
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
+#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
+#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
+#define GL_OFFSET_HILO_TEXTURE_2D_NV      0x8854
+#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
+#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
+#define GL_DEPENDENT_HILO_TEXTURE_2D_NV   0x8858
+#define GL_DEPENDENT_RGB_TEXTURE_3D_NV    0x8859
+#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
+#define GL_DOT_PRODUCT_PASS_THROUGH_NV    0x885B
+#define GL_DOT_PRODUCT_TEXTURE_1D_NV      0x885C
+#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
+#define GL_HILO8_NV                       0x885E
+#define GL_SIGNED_HILO8_NV                0x885F
+#define GL_FORCE_BLUE_TO_ONE_NV           0x8860
+#endif
+
+#ifndef GL_NV_vertex_program1_1
+#endif
+
+
+/*************************************************************/
+
+#ifndef GL_VERSION_1_2
+#define GL_VERSION_1_2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColor (GLclampf, GLclampf, GLclampf, GLclampf);
+GLAPI void APIENTRY glBlendEquation (GLenum);
+GLAPI void APIENTRY glDrawRangeElements (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
+GLAPI void APIENTRY glColorTable (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glColorTableParameterfv (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glColorTableParameteriv (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyColorTable (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glGetColorTable (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetColorTableParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetColorTableParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glColorSubTable (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glCopyColorSubTable (GLenum, GLsizei, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glConvolutionFilter1D (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionParameterf (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glConvolutionParameterfv (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glConvolutionParameteri (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glConvolutionParameteriv (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glGetConvolutionFilter (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetSeparableFilter (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);
+GLAPI void APIENTRY glSeparableFilter2D (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);
+GLAPI void APIENTRY glGetHistogram (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetHistogramParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetHistogramParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetMinmax (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glHistogram (GLenum, GLsizei, GLenum, GLboolean);
+GLAPI void APIENTRY glMinmax (GLenum, GLenum, GLboolean);
+GLAPI void APIENTRY glResetHistogram (GLenum);
+GLAPI void APIENTRY glResetMinmax (GLenum);
+GLAPI void APIENTRY glTexImage3D (GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glCopyTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+typedef void (APIENTRY * PFNGLBLENDEQUATIONPROC) (GLenum mode);
+typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+typedef void (APIENTRY * PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (APIENTRY * PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRY * PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRY * PFNGLRESETHISTOGRAMPROC) (GLenum target);
+typedef void (APIENTRY * PFNGLRESETMINMAXPROC) (GLenum target);
+typedef void (APIENTRY * PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_VERSION_1_3
+#define GL_VERSION_1_3 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTexture (GLenum);
+GLAPI void APIENTRY glClientActiveTexture (GLenum);
+GLAPI void APIENTRY glMultiTexCoord1d (GLenum, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord1dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord1f (GLenum, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord1fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord1i (GLenum, GLint);
+GLAPI void APIENTRY glMultiTexCoord1iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord1s (GLenum, GLshort);
+GLAPI void APIENTRY glMultiTexCoord1sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord2d (GLenum, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord2dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord2fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord2i (GLenum, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord2iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord2s (GLenum, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord2sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord3d (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord3dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord3f (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord3fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord3i (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord3iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord3s (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord3sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord4d (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord4dv (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord4f (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord4fv (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord4i (GLenum, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord4iv (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord4s (GLenum, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord4sv (GLenum, const GLshort *);
+GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *);
+GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *);
+GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *);
+GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *);
+GLAPI void APIENTRY glSampleCoverage (GLclampf, GLboolean);
+GLAPI void APIENTRY glCompressedTexImage3D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage2D (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage1D (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glGetCompressedTexImage (GLenum, GLint, void *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);
+typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);
+typedef void (APIENTRY * PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img);
+#endif
+
+#ifndef GL_ARB_multitexture
+#define GL_ARB_multitexture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glActiveTextureARB (GLenum);
+GLAPI void APIENTRY glClientActiveTextureARB (GLenum);
+GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum, GLint);
+GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum, GLshort);
+GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum, const GLshort *);
+GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum, const GLdouble *);
+GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum, const GLfloat *);
+GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum, const GLint *);
+GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum, const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRY * PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);
+typedef void (APIENTRY * PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+#endif
+
+#ifndef GL_ARB_transpose_matrix
+#define GL_ARB_transpose_matrix 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *);
+GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *);
+GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *);
+GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRY * PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);
+typedef void (APIENTRY * PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);
+#endif
+
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleCoverageARB (GLclampf, GLboolean);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);
+#endif
+
+#ifndef GL_ARB_texture_env_add
+#define GL_ARB_texture_env_add 1
+#endif
+
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#endif
+
+#ifndef GL_ARB_texture_compression
+#define GL_ARB_texture_compression 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum, GLint, void *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (APIENTRY * PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img);
+#endif
+
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#endif
+
+#ifndef GL_ARB_point_parameters
+#define GL_ARB_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfARB (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfvARB (GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_ARB_vertex_blend
+#define GL_ARB_vertex_blend 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWeightbvARB (GLint, const GLbyte *);
+GLAPI void APIENTRY glWeightsvARB (GLint, const GLshort *);
+GLAPI void APIENTRY glWeightivARB (GLint, const GLint *);
+GLAPI void APIENTRY glWeightfvARB (GLint, const GLfloat *);
+GLAPI void APIENTRY glWeightdvARB (GLint, const GLdouble *);
+GLAPI void APIENTRY glWeightubvARB (GLint, const GLubyte *);
+GLAPI void APIENTRY glWeightusvARB (GLint, const GLushort *);
+GLAPI void APIENTRY glWeightuivARB (GLint, const GLuint *);
+GLAPI void APIENTRY glWeightPointerARB (GLint, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glVertexBlendARB (GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);
+typedef void (APIENTRY * PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);
+typedef void (APIENTRY * PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);
+typedef void (APIENTRY * PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);
+typedef void (APIENTRY * PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);
+typedef void (APIENTRY * PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);
+typedef void (APIENTRY * PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);
+typedef void (APIENTRY * PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);
+typedef void (APIENTRY * PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLVERTEXBLENDARBPROC) (GLint count);
+#endif
+
+#ifndef GL_ARB_matrix_palette
+#define GL_ARB_matrix_palette 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint);
+GLAPI void APIENTRY glMatrixIndexubvARB (GLint, const GLubyte *);
+GLAPI void APIENTRY glMatrixIndexusvARB (GLint, const GLushort *);
+GLAPI void APIENTRY glMatrixIndexuivARB (GLint, const GLuint *);
+GLAPI void APIENTRY glMatrixIndexPointerARB (GLint, GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);
+typedef void (APIENTRY * PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);
+typedef void (APIENTRY * PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);
+typedef void (APIENTRY * PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);
+typedef void (APIENTRY * PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_ARB_texture_env_combine
+#define GL_ARB_texture_env_combine 1
+#endif
+
+#ifndef GL_ARB_texture_env_crossbar
+#define GL_ARB_texture_env_crossbar 1
+#endif
+
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#endif
+
+#ifndef GL_ARB_texture_mirror_repeat
+#define GL_ARB_texture_mirror_repeat 1
+#endif
+
+#ifndef GL_ARB_depth_texture
+#define GL_ARB_depth_texture 1
+#endif
+
+#ifndef GL_ARB_shadow
+#define GL_ARB_shadow 1
+#endif
+
+#ifndef GL_ARB_shadow_ambient
+#define GL_ARB_shadow_ambient 1
+#endif
+
+#ifndef GL_ARB_window_pos
+#define GL_ARB_window_pos 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dARB (GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *);
+GLAPI void APIENTRY glWindowPos2fARB (GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *);
+GLAPI void APIENTRY glWindowPos2iARB (GLint, GLint);
+GLAPI void APIENTRY glWindowPos2ivARB (const GLint *);
+GLAPI void APIENTRY glWindowPos2sARB (GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos2svARB (const GLshort *);
+GLAPI void APIENTRY glWindowPos3dARB (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *);
+GLAPI void APIENTRY glWindowPos3fARB (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *);
+GLAPI void APIENTRY glWindowPos3iARB (GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos3ivARB (const GLint *);
+GLAPI void APIENTRY glWindowPos3sARB (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos3svARB (const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_EXT_abgr
+#define GL_EXT_abgr 1
+#endif
+
+#ifndef GL_EXT_blend_color
+#define GL_EXT_blend_color 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendColorEXT (GLclampf, GLclampf, GLclampf, GLclampf);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+#endif
+
+#ifndef GL_EXT_polygon_offset
+#define GL_EXT_polygon_offset 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat, GLfloat);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);
+#endif
+
+#ifndef GL_EXT_texture
+#define GL_EXT_texture 1
+#endif
+
+#ifndef GL_EXT_texture3D
+#define GL_EXT_texture3D 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage3DEXT (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_SGIS_texture_filter4
+#define GL_SGIS_texture_filter4 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum, GLenum, GLsizei, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);
+typedef void (APIENTRY * PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);
+#endif
+
+#ifndef GL_EXT_subtexture
+#define GL_EXT_subtexture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexSubImage1DEXT (GLenum, GLint, GLint, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
+#endif
+
+#ifndef GL_EXT_copy_texture
+#define GL_EXT_copy_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);
+GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
+GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum, GLint, GLint, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);
+typedef void (APIENTRY * PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
+typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRY * PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);
+#endif
+
+#ifndef GL_EXT_histogram
+#define GL_EXT_histogram 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetHistogramEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetMinmaxEXT (GLenum, GLboolean, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glHistogramEXT (GLenum, GLsizei, GLenum, GLboolean);
+GLAPI void APIENTRY glMinmaxEXT (GLenum, GLenum, GLboolean);
+GLAPI void APIENTRY glResetHistogramEXT (GLenum);
+GLAPI void APIENTRY glResetMinmaxEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);
+typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRY * PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);
+typedef void (APIENTRY * PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);
+typedef void (APIENTRY * PFNGLRESETMINMAXEXTPROC) (GLenum target);
+#endif
+
+#ifndef GL_EXT_convolution
+#define GL_EXT_convolution 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum, GLenum, GLint, GLint, GLsizei, GLsizei);
+GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum, GLenum, GLenum, GLvoid *, GLvoid *, GLvoid *);
+GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRY * PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);
+typedef void (APIENTRY * PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);
+typedef void (APIENTRY * PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);
+#endif
+
+#ifndef GL_EXT_color_matrix
+#define GL_EXT_color_matrix 1
+#endif
+
+#ifndef GL_SGI_color_table
+#define GL_SGI_color_table 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableSGI (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glColorTableParameterivSGI (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glCopyColorTableSGI (GLenum, GLenum, GLint, GLint, GLsizei);
+GLAPI void APIENTRY glGetColorTableSGI (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);
+typedef void (APIENTRY * PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_SGIX_pixel_texture
+#define GL_SGIX_pixel_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenSGIX (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);
+#endif
+
+#ifndef GL_SGIS_pixel_texture
+#define GL_SGIS_pixel_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum, GLint);
+GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum, const GLint *);
+GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum, GLfloat);
+GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum, GLint *);
+GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_SGIS_texture4D
+#define GL_SGIS_texture4D 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexImage4DSGIS (GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (APIENTRY * PFNGLTEXSUBIMAGE4DSGISPROC) (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);
+#endif
+
+#ifndef GL_SGI_texture_color_table
+#define GL_SGI_texture_color_table 1
+#endif
+
+#ifndef GL_EXT_cmyka
+#define GL_EXT_cmyka 1
+#endif
+
+#ifndef GL_EXT_texture_object
+#define GL_EXT_texture_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei, const GLuint *, GLboolean *);
+GLAPI void APIENTRY glBindTextureEXT (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenTexturesEXT (GLsizei, GLuint *);
+GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint);
+GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei, const GLuint *, const GLclampf *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRY * PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);
+typedef void (APIENTRY * PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);
+typedef void (APIENTRY * PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);
+typedef void (APIENTRY * PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);
+typedef GLboolean (APIENTRY * PFNGLISTEXTUREEXTPROC) (GLuint texture);
+typedef void (APIENTRY * PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);
+#endif
+
+#ifndef GL_SGIS_detail_texture
+#define GL_SGIS_detail_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRY * PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#endif
+
+#ifndef GL_SGIS_sharpen_texture
+#define GL_SGIS_sharpen_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);
+typedef void (APIENTRY * PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);
+#endif
+
+#ifndef GL_EXT_packed_pixels
+#define GL_EXT_packed_pixels 1
+#endif
+
+#ifndef GL_SGIS_texture_lod
+#define GL_SGIS_texture_lod 1
+#endif
+
+#ifndef GL_SGIS_multisample
+#define GL_SGIS_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskSGIS (GLclampf, GLboolean);
+GLAPI void APIENTRY glSamplePatternSGIS (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRY * PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);
+#endif
+
+#ifndef GL_EXT_rescale_normal
+#define GL_EXT_rescale_normal 1
+#endif
+
+#ifndef GL_EXT_vertex_array
+#define GL_EXT_vertex_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glArrayElementEXT (GLint);
+GLAPI void APIENTRY glColorPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glDrawArraysEXT (GLenum, GLint, GLsizei);
+GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei, GLsizei, const GLboolean *);
+GLAPI void APIENTRY glGetPointervEXT (GLenum, GLvoid* *);
+GLAPI void APIENTRY glIndexPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glNormalPointerEXT (GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glTexCoordPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glVertexPointerEXT (GLint, GLenum, GLsizei, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLARRAYELEMENTEXTPROC) (GLint i);
+typedef void (APIENTRY * PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);
+typedef void (APIENTRY * PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);
+typedef void (APIENTRY * PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params);
+typedef void (APIENTRY * PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_misc_attribute
+#define GL_EXT_misc_attribute 1
+#endif
+
+#ifndef GL_SGIS_generate_mipmap
+#define GL_SGIS_generate_mipmap 1
+#endif
+
+#ifndef GL_SGIX_clipmap
+#define GL_SGIX_clipmap 1
+#endif
+
+#ifndef GL_SGIX_shadow
+#define GL_SGIX_shadow 1
+#endif
+
+#ifndef GL_SGIS_texture_edge_clamp
+#define GL_SGIS_texture_edge_clamp 1
+#endif
+
+#ifndef GL_SGIS_texture_border_clamp
+#define GL_SGIS_texture_border_clamp 1
+#endif
+
+#ifndef GL_EXT_blend_minmax
+#define GL_EXT_blend_minmax 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendEquationEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_blend_subtract
+#define GL_EXT_blend_subtract 1
+#endif
+
+#ifndef GL_EXT_blend_logic_op
+#define GL_EXT_blend_logic_op 1
+#endif
+
+#ifndef GL_SGIX_interlace
+#define GL_SGIX_interlace 1
+#endif
+
+#ifndef GL_SGIX_pixel_tiles
+#define GL_SGIX_pixel_tiles 1
+#endif
+
+#ifndef GL_SGIX_texture_select
+#define GL_SGIX_texture_select 1
+#endif
+
+#ifndef GL_SGIX_sprite
+#define GL_SGIX_sprite 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum, GLfloat);
+GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum, const GLfloat *);
+GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum, GLint);
+GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum, const GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_SGIX_texture_multi_buffer
+#define GL_SGIX_texture_multi_buffer 1
+#endif
+
+#ifndef GL_EXT_point_parameters
+#define GL_EXT_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfEXT (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfvEXT (GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_SGIS_point_parameters
+#define GL_SGIS_point_parameters 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameterfSGIS (GLenum, GLfloat);
+GLAPI void APIENTRY glPointParameterfvSGIS (GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_SGIX_instruments
+#define GL_SGIX_instruments 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLint APIENTRY glGetInstrumentsSGIX (void);
+GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei, GLint *);
+GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *);
+GLAPI void APIENTRY glReadInstrumentsSGIX (GLint);
+GLAPI void APIENTRY glStartInstrumentsSGIX (void);
+GLAPI void APIENTRY glStopInstrumentsSGIX (GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLint (APIENTRY * PFNGLGETINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRY * PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);
+typedef GLint (APIENTRY * PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);
+typedef void (APIENTRY * PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);
+typedef void (APIENTRY * PFNGLSTARTINSTRUMENTSSGIXPROC) (void);
+typedef void (APIENTRY * PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);
+#endif
+
+#ifndef GL_SGIX_texture_scale_bias
+#define GL_SGIX_texture_scale_bias 1
+#endif
+
+#ifndef GL_SGIX_framezoom
+#define GL_SGIX_framezoom 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFrameZoomSGIX (GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFRAMEZOOMSGIXPROC) (GLint factor);
+#endif
+
+#ifndef GL_SGIX_tag_sample_buffer
+#define GL_SGIX_tag_sample_buffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTagSampleBufferSGIX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);
+#endif
+
+#ifndef GL_SGIX_polynomial_ffd
+#define GL_SGIX_polynomial_ffd 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, const GLdouble *);
+GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, const GLfloat *);
+GLAPI void APIENTRY glDeformSGIX (GLbitfield);
+GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);
+typedef void (APIENTRY * PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);
+typedef void (APIENTRY * PFNGLDEFORMSGIXPROC) (GLbitfield mask);
+typedef void (APIENTRY * PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);
+#endif
+
+#ifndef GL_SGIX_reference_plane
+#define GL_SGIX_reference_plane 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);
+#endif
+
+#ifndef GL_SGIX_flush_raster
+#define GL_SGIX_flush_raster 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushRasterSGIX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void);
+#endif
+
+#ifndef GL_SGIX_depth_texture
+#define GL_SGIX_depth_texture 1
+#endif
+
+#ifndef GL_SGIS_fog_function
+#define GL_SGIS_fog_function 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogFuncSGIS (GLsizei, const GLfloat *);
+GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);
+typedef void (APIENTRY * PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);
+#endif
+
+#ifndef GL_SGIX_fog_offset
+#define GL_SGIX_fog_offset 1
+#endif
+
+#ifndef GL_HP_image_transform
+#define GL_HP_image_transform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glImageTransformParameteriHP (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glImageTransformParameterfHP (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glImageTransformParameterivHP (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_HP_convolution_border_modes
+#define GL_HP_convolution_border_modes 1
+#endif
+
+#ifndef GL_SGIX_texture_add_env
+#define GL_SGIX_texture_add_env 1
+#endif
+
+#ifndef GL_EXT_color_subtable
+#define GL_EXT_color_subtable 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorSubTableEXT (GLenum, GLsizei, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum, GLsizei, GLint, GLint, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);
+typedef void (APIENTRY * PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);
+#endif
+
+#ifndef GL_PGI_vertex_hints
+#define GL_PGI_vertex_hints 1
+#endif
+
+#ifndef GL_PGI_misc_hints
+#define GL_PGI_misc_hints 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glHintPGI (GLenum, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLHINTPGIPROC) (GLenum target, GLint mode);
+#endif
+
+#ifndef GL_EXT_paletted_texture
+#define GL_EXT_paletted_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorTableEXT (GLenum, GLenum, GLsizei, GLenum, GLenum, const GLvoid *);
+GLAPI void APIENTRY glGetColorTableEXT (GLenum, GLenum, GLenum, GLvoid *);
+GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_EXT_clip_volume_hint
+#define GL_EXT_clip_volume_hint 1
+#endif
+
+#ifndef GL_SGIX_list_priority
+#define GL_SGIX_list_priority 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetListParameterivSGIX (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glListParameterfSGIX (GLuint, GLenum, GLfloat);
+GLAPI void APIENTRY glListParameterfvSGIX (GLuint, GLenum, const GLfloat *);
+GLAPI void APIENTRY glListParameteriSGIX (GLuint, GLenum, GLint);
+GLAPI void APIENTRY glListParameterivSGIX (GLuint, GLenum, const GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_SGIX_ir_instrument1
+#define GL_SGIX_ir_instrument1 1
+#endif
+
+#ifndef GL_SGIX_calligraphic_fragment
+#define GL_SGIX_calligraphic_fragment 1
+#endif
+
+#ifndef GL_SGIX_texture_lod_bias
+#define GL_SGIX_texture_lod_bias 1
+#endif
+
+#ifndef GL_SGIX_shadow_ambient
+#define GL_SGIX_shadow_ambient 1
+#endif
+
+#ifndef GL_EXT_index_texture
+#define GL_EXT_index_texture 1
+#endif
+
+#ifndef GL_EXT_index_material
+#define GL_EXT_index_material 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexMaterialEXT (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);
+#endif
+
+#ifndef GL_EXT_index_func
+#define GL_EXT_index_func 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIndexFuncEXT (GLenum, GLclampf);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);
+#endif
+
+#ifndef GL_EXT_index_array_formats
+#define GL_EXT_index_array_formats 1
+#endif
+
+#ifndef GL_EXT_compiled_vertex_array
+#define GL_EXT_compiled_vertex_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glLockArraysEXT (GLint, GLsizei);
+GLAPI void APIENTRY glUnlockArraysEXT (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);
+typedef void (APIENTRY * PFNGLUNLOCKARRAYSEXTPROC) (void);
+#endif
+
+#ifndef GL_EXT_cull_vertex
+#define GL_EXT_cull_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCullParameterdvEXT (GLenum, GLdouble *);
+GLAPI void APIENTRY glCullParameterfvEXT (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);
+typedef void (APIENTRY * PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_SGIX_ycrcb
+#define GL_SGIX_ycrcb 1
+#endif
+
+#ifndef GL_SGIX_fragment_lighting
+#define GL_SGIX_fragment_lighting 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum, GLenum);
+GLAPI void APIENTRY glFragmentLightfSGIX (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glFragmentLightiSGIX (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glFragmentLightivSGIX (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum, GLfloat);
+GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum, const GLfloat *);
+GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum, GLint);
+GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum, const GLint *);
+GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glLightEnviSGIX (GLenum, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);
+#endif
+
+#ifndef GL_IBM_rasterpos_clip
+#define GL_IBM_rasterpos_clip 1
+#endif
+
+#ifndef GL_HP_texture_lighting
+#define GL_HP_texture_lighting 1
+#endif
+
+#ifndef GL_EXT_draw_range_elements
+#define GL_EXT_draw_range_elements 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum, GLuint, GLuint, GLsizei, GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);
+#endif
+
+#ifndef GL_WIN_phong_shading
+#define GL_WIN_phong_shading 1
+#endif
+
+#ifndef GL_WIN_specular_fog
+#define GL_WIN_specular_fog 1
+#endif
+
+#ifndef GL_EXT_light_texture
+#define GL_EXT_light_texture 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glApplyTextureEXT (GLenum);
+GLAPI void APIENTRY glTextureLightEXT (GLenum);
+GLAPI void APIENTRY glTextureMaterialEXT (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);
+typedef void (APIENTRY * PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);
+typedef void (APIENTRY * PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);
+#endif
+
+#ifndef GL_SGIX_blend_alpha_minmax
+#define GL_SGIX_blend_alpha_minmax 1
+#endif
+
+#ifndef GL_EXT_bgra
+#define GL_EXT_bgra 1
+#endif
+
+#ifndef GL_SGIX_async
+#define GL_SGIX_async 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint);
+GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *);
+GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *);
+GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei);
+GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint, GLsizei);
+GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLASYNCMARKERSGIXPROC) (GLuint marker);
+typedef GLint (APIENTRY * PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);
+typedef GLint (APIENTRY * PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);
+typedef GLuint (APIENTRY * PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);
+typedef void (APIENTRY * PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);
+typedef GLboolean (APIENTRY * PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);
+#endif
+
+#ifndef GL_SGIX_async_pixel
+#define GL_SGIX_async_pixel 1
+#endif
+
+#ifndef GL_SGIX_async_histogram
+#define GL_SGIX_async_histogram 1
+#endif
+
+#ifndef GL_INTEL_parallel_arrays
+#define GL_INTEL_parallel_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexPointervINTEL (GLint, GLenum, const GLvoid* *);
+GLAPI void APIENTRY glNormalPointervINTEL (GLenum, const GLvoid* *);
+GLAPI void APIENTRY glColorPointervINTEL (GLint, GLenum, const GLvoid* *);
+GLAPI void APIENTRY glTexCoordPointervINTEL (GLint, GLenum, const GLvoid* *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRY * PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRY * PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+typedef void (APIENTRY * PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);
+#endif
+
+#ifndef GL_HP_occlusion_test
+#define GL_HP_occlusion_test 1
+#endif
+
+#ifndef GL_EXT_pixel_transform
+#define GL_EXT_pixel_transform 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum, GLenum, GLint);
+GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum, GLenum, GLfloat);
+GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum, GLenum, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);
+#endif
+
+#ifndef GL_EXT_pixel_transform_color_table
+#define GL_EXT_pixel_transform_color_table 1
+#endif
+
+#ifndef GL_EXT_shared_texture_palette
+#define GL_EXT_shared_texture_palette 1
+#endif
+
+#ifndef GL_EXT_separate_specular_color
+#define GL_EXT_separate_specular_color 1
+#endif
+
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *);
+GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *);
+GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *);
+GLAPI void APIENTRY glSecondaryColor3iEXT (GLint, GLint, GLint);
+GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *);
+GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *);
+GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte, GLubyte, GLubyte);
+GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *);
+GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *);
+GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort, GLushort, GLushort);
+GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *);
+GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint, GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);
+typedef void (APIENTRY * PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);
+typedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_texture_perturb_normal
+#define GL_EXT_texture_perturb_normal 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureNormalEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXTURENORMALEXTPROC) (GLenum mode);
+#endif
+
+#ifndef GL_EXT_multi_draw_arrays
+#define GL_EXT_multi_draw_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum, GLint *, GLsizei *, GLsizei);
+GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum, const GLsizei *, GLenum, const GLvoid* *, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);
+typedef void (APIENTRY * PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);
+#endif
+
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFogCoordfEXT (GLfloat);
+GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *);
+GLAPI void APIENTRY glFogCoorddEXT (GLdouble);
+GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *);
+GLAPI void APIENTRY glFogCoordPointerEXT (GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
+typedef void (APIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
+typedef void (APIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
+typedef void (APIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
+typedef void (APIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_REND_screen_coordinates
+#define GL_REND_screen_coordinates 1
+#endif
+
+#ifndef GL_EXT_coordinate_frame
+#define GL_EXT_coordinate_frame 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTangent3bEXT (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *);
+GLAPI void APIENTRY glTangent3dEXT (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *);
+GLAPI void APIENTRY glTangent3fEXT (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *);
+GLAPI void APIENTRY glTangent3iEXT (GLint, GLint, GLint);
+GLAPI void APIENTRY glTangent3ivEXT (const GLint *);
+GLAPI void APIENTRY glTangent3sEXT (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glTangent3svEXT (const GLshort *);
+GLAPI void APIENTRY glBinormal3bEXT (GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *);
+GLAPI void APIENTRY glBinormal3dEXT (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *);
+GLAPI void APIENTRY glBinormal3fEXT (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *);
+GLAPI void APIENTRY glBinormal3iEXT (GLint, GLint, GLint);
+GLAPI void APIENTRY glBinormal3ivEXT (const GLint *);
+GLAPI void APIENTRY glBinormal3sEXT (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glBinormal3svEXT (const GLshort *);
+GLAPI void APIENTRY glTangentPointerEXT (GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glBinormalPointerEXT (GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);
+typedef void (APIENTRY * PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRY * PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);
+typedef void (APIENTRY * PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);
+typedef void (APIENTRY * PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);
+typedef void (APIENTRY * PFNGLTANGENT3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);
+typedef void (APIENTRY * PFNGLTANGENT3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);
+typedef void (APIENTRY * PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);
+typedef void (APIENTRY * PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);
+typedef void (APIENTRY * PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);
+typedef void (APIENTRY * PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);
+typedef void (APIENTRY * PFNGLBINORMAL3IVEXTPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);
+typedef void (APIENTRY * PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#endif
+
+#ifndef GL_APPLE_specular_vector
+#define GL_APPLE_specular_vector 1
+#endif
+
+#ifndef GL_APPLE_transform_hint
+#define GL_APPLE_transform_hint 1
+#endif
+
+#ifndef GL_SGIX_fog_scale
+#define GL_SGIX_fog_scale 1
+#endif
+
+#ifndef GL_SUNX_constant_data
+#define GL_SUNX_constant_data 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFinishTextureSUNX (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFINISHTEXTURESUNXPROC) (void);
+#endif
+
+#ifndef GL_SUN_global_alpha
+#define GL_SUN_global_alpha 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte);
+GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort);
+GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint);
+GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat);
+GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble);
+GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte);
+GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort);
+GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);
+typedef void (APIENTRY * PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);
+#endif
+
+#ifndef GL_SUN_triangle_list
+#define GL_SUN_triangle_list 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint);
+GLAPI void APIENTRY glReplacementCodeusSUN (GLushort);
+GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte);
+GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *);
+GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *);
+GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *);
+GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum, GLsizei, const GLvoid* *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer);
+#endif
+
+#ifndef GL_SUN_vertex
+#define GL_SUN_vertex 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *, const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLenum *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLenum, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLenum *, const GLubyte *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLenum, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLenum *, const GLfloat *, const GLfloat *, const GLfloat *, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLenum rc, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLenum rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLenum *rc, const GLubyte *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLenum rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLenum *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);
+#endif
+
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum, GLenum, GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+typedef void (APIENTRY * PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
+#endif
+
+#ifndef GL_INGR_color_clamp
+#define GL_INGR_color_clamp 1
+#endif
+
+#ifndef GL_INGR_interlace_read
+#define GL_INGR_interlace_read 1
+#endif
+
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#endif
+
+#ifndef GL_EXT_422_pixels
+#define GL_EXT_422_pixels 1
+#endif
+
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#endif
+
+#ifndef GL_SUN_convolution_border_modes
+#define GL_SUN_convolution_border_modes 1
+#endif
+
+#ifndef GL_EXT_texture_env_add
+#define GL_EXT_texture_env_add 1
+#endif
+
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#endif
+
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#endif
+
+#ifndef GL_EXT_vertex_weighting
+#define GL_EXT_vertex_weighting 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexWeightfEXT (GLfloat);
+GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *);
+GLAPI void APIENTRY glVertexWeightPointerEXT (GLsizei, GLenum, GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);
+typedef void (APIENTRY * PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);
+typedef void (APIENTRY * PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer);
+#endif
+
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#endif
+
+#ifndef GL_NV_vertex_array_range
+#define GL_NV_vertex_array_range 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glFlushVertexArrayRangeNV (void);
+GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);
+typedef void (APIENTRY * PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer);
+#endif
+
+#ifndef GL_NV_register_combiners
+#define GL_NV_register_combiners 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerParameterfvNV (GLenum, const GLfloat *);
+GLAPI void APIENTRY glCombinerParameterfNV (GLenum, GLfloat);
+GLAPI void APIENTRY glCombinerParameterivNV (GLenum, const GLint *);
+GLAPI void APIENTRY glCombinerParameteriNV (GLenum, GLint);
+GLAPI void APIENTRY glCombinerInputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glCombinerOutputNV (GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean);
+GLAPI void APIENTRY glFinalCombinerInputNV (GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum, GLenum, GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum, GLenum, GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum, GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum, GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
+typedef void (APIENTRY * PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRY * PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (APIENTRY * PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_NV_fog_distance
+#define GL_NV_fog_distance 1
+#endif
+
+#ifndef GL_NV_texgen_emboss
+#define GL_NV_texgen_emboss 1
+#endif
+
+#ifndef GL_NV_blend_square
+#define GL_NV_blend_square 1
+#endif
+
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#endif
+
+#ifndef GL_MESA_resize_buffers
+#define GL_MESA_resize_buffers 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glResizeBuffersMESA (void);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLRESIZEBUFFERSMESAPROC) (void);
+#endif
+
+#ifndef GL_MESA_window_pos
+#define GL_MESA_window_pos 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glWindowPos2dMESA (GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *);
+GLAPI void APIENTRY glWindowPos2fMESA (GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *);
+GLAPI void APIENTRY glWindowPos2iMESA (GLint, GLint);
+GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *);
+GLAPI void APIENTRY glWindowPos2sMESA (GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *);
+GLAPI void APIENTRY glWindowPos3dMESA (GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *);
+GLAPI void APIENTRY glWindowPos3fMESA (GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *);
+GLAPI void APIENTRY glWindowPos3iMESA (GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *);
+GLAPI void APIENTRY glWindowPos3sMESA (GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *);
+GLAPI void APIENTRY glWindowPos4dMESA (GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *);
+GLAPI void APIENTRY glWindowPos4fMESA (GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *);
+GLAPI void APIENTRY glWindowPos4iMESA (GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *);
+GLAPI void APIENTRY glWindowPos4sMESA (GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);
+typedef void (APIENTRY * PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRY * PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRY * PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRY * PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);
+typedef void (APIENTRY * PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRY * PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);
+#endif
+
+#ifndef GL_IBM_cull_vertex
+#define GL_IBM_cull_vertex 1
+#endif
+
+#ifndef GL_IBM_multimode_draw_arrays
+#define GL_IBM_multimode_draw_arrays 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMultiModeDrawArraysIBM (GLenum, const GLint *, const GLsizei *, GLsizei, GLint);
+GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *, const GLsizei *, GLenum, const GLvoid* *, GLsizei, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLMULTIMODEDRAWARRAYSIBMPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);
+typedef void (APIENTRY * PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount, GLint modestride);
+#endif
+
+#ifndef GL_IBM_vertex_array_lists
+#define GL_IBM_vertex_array_lists 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint, const GLboolean* *, GLint);
+GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glIndexPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glNormalPointerListIBM (GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glTexCoordPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+GLAPI void APIENTRY glVertexPointerListIBM (GLint, GLenum, GLint, const GLvoid* *, GLint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+typedef void (APIENTRY * PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);
+#endif
+
+#ifndef GL_SGIX_subsample
+#define GL_SGIX_subsample 1
+#endif
+
+#ifndef GL_SGIX_ycrcba
+#define GL_SGIX_ycrcba 1
+#endif
+
+#ifndef GL_SGIX_ycrcb_subsample
+#define GL_SGIX_ycrcb_subsample 1
+#endif
+
+#ifndef GL_SGIX_depth_pass_instrument
+#define GL_SGIX_depth_pass_instrument 1
+#endif
+
+#ifndef GL_3DFX_texture_compression_FXT1
+#define GL_3DFX_texture_compression_FXT1 1
+#endif
+
+#ifndef GL_3DFX_multisample
+#define GL_3DFX_multisample 1
+#endif
+
+#ifndef GL_3DFX_tbuffer
+#define GL_3DFX_tbuffer 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTbufferMask3DFX (GLuint);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);
+#endif
+
+#ifndef GL_EXT_multisample
+#define GL_EXT_multisample 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glSampleMaskEXT (GLclampf, GLboolean);
+GLAPI void APIENTRY glSamplePatternEXT (GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);
+typedef void (APIENTRY * PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);
+#endif
+
+#ifndef GL_SGIX_vertex_preclip
+#define GL_SGIX_vertex_preclip 1
+#endif
+
+#ifndef GL_SGIX_convolution_accuracy
+#define GL_SGIX_convolution_accuracy 1
+#endif
+
+#ifndef GL_SGIX_resample
+#define GL_SGIX_resample 1
+#endif
+
+#ifndef GL_SGIS_point_line_texgen
+#define GL_SGIS_point_line_texgen 1
+#endif
+
+#ifndef GL_SGIS_texture_color_mask
+#define GL_SGIS_texture_color_mask 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean, GLboolean, GLboolean, GLboolean);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
+#endif
+
+#ifndef GL_SGIX_igloo_interface
+#define GL_SGIX_igloo_interface 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum, const GLvoid *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params);
+#endif
+
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDeleteFencesNV (GLsizei, const GLuint *);
+GLAPI void APIENTRY glGenFencesNV (GLsizei, GLuint *);
+GLAPI GLboolean APIENTRY glIsFenceNV (GLuint);
+GLAPI GLboolean APIENTRY glTestFenceNV (GLuint);
+GLAPI void APIENTRY glGetFenceivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glFinishFenceNV (GLuint);
+GLAPI void APIENTRY glSetFenceNV (GLuint, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);
+typedef void (APIENTRY * PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);
+typedef GLboolean (APIENTRY * PFNGLISFENCENVPROC) (GLuint fence);
+typedef GLboolean (APIENTRY * PFNGLTESTFENCENVPROC) (GLuint fence);
+typedef void (APIENTRY * PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLFINISHFENCENVPROC) (GLuint fence);
+typedef void (APIENTRY * PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);
+#endif
+
+#ifndef GL_NV_evaluators
+#define GL_NV_evaluators 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, const GLvoid *);
+GLAPI void APIENTRY glMapParameterivNV (GLenum, GLenum, const GLint *);
+GLAPI void APIENTRY glMapParameterfvNV (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetMapControlPointsNV (GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, GLvoid *);
+GLAPI void APIENTRY glGetMapParameterivNV (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glGetMapParameterfvNV (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum, GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glEvalMapsNV (GLenum, GLenum);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);
+typedef void (APIENTRY * PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);
+typedef void (APIENTRY * PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);
+typedef void (APIENTRY * PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);
+#endif
+
+#ifndef GL_NV_packed_depth_stencil
+#define GL_NV_packed_depth_stencil 1
+#endif
+
+#ifndef GL_NV_register_combiners2
+#define GL_NV_register_combiners2 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum, GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);
+#endif
+
+#ifndef GL_NV_texture_compression_vtc
+#define GL_NV_texture_compression_vtc 1
+#endif
+
+#ifndef GL_NV_texture_rectangle
+#define GL_NV_texture_rectangle 1
+#endif
+
+#ifndef GL_NV_texture_shader
+#define GL_NV_texture_shader 1
+#endif
+
+#ifndef GL_NV_texture_shader2
+#define GL_NV_texture_shader2 1
+#endif
+
+#ifndef GL_NV_vertex_array_range2
+#define GL_NV_vertex_array_range2 1
+#endif
+
+#ifndef GL_NV_vertex_program
+#define GL_NV_vertex_program 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei, const GLuint *, GLboolean *);
+GLAPI void APIENTRY glBindProgramNV (GLenum, GLuint);
+GLAPI void APIENTRY glDeleteProgramsNV (GLsizei, const GLuint *);
+GLAPI void APIENTRY glExecuteProgramNV (GLenum, GLuint, const GLfloat *);
+GLAPI void APIENTRY glGenProgramsNV (GLsizei, GLuint *);
+GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum, GLuint, GLenum, GLdouble *);
+GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum, GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetProgramivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetProgramStringNV (GLuint, GLenum, GLubyte *);
+GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum, GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint, GLenum, GLdouble *);
+GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVertexAttribivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint, GLenum, GLvoid* *);
+GLAPI GLboolean APIENTRY glIsProgramNV (GLuint);
+GLAPI void APIENTRY glLoadProgramNV (GLenum, GLuint, GLsizei, const GLubyte *);
+GLAPI void APIENTRY glProgramParameter4dNV (GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glProgramParameter4dvNV (GLenum, GLuint, const GLdouble *);
+GLAPI void APIENTRY glProgramParameter4fNV (GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glProgramParameter4fvNV (GLenum, GLuint, const GLfloat *);
+GLAPI void APIENTRY glProgramParameters4dvNV (GLenum, GLuint, GLuint, const GLdouble *);
+GLAPI void APIENTRY glProgramParameters4fvNV (GLenum, GLuint, GLuint, const GLfloat *);
+GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei, const GLuint *);
+GLAPI void APIENTRY glTrackMatrixNV (GLenum, GLuint, GLenum, GLenum);
+GLAPI void APIENTRY glVertexAttribPointerNV (GLuint, GLint, GLenum, GLsizei, const GLvoid *);
+GLAPI void APIENTRY glVertexAttrib1dNV (GLuint, GLdouble);
+GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib1fNV (GLuint, GLfloat);
+GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib1sNV (GLuint, GLshort);
+GLAPI void APIENTRY glVertexAttrib1svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib2dNV (GLuint, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib2fNV (GLuint, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib2sNV (GLuint, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib2svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib3dNV (GLuint, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib3fNV (GLuint, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib3sNV (GLuint, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib3svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4dNV (GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVertexAttrib4fNV (GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVertexAttrib4sNV (GLuint, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexAttrib4svNV (GLuint, const GLshort *);
+GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
+GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs1svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs2svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs3svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint, GLsizei, const GLdouble *);
+GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint, GLsizei, const GLfloat *);
+GLAPI void APIENTRY glVertexAttribs4svNV (GLuint, GLsizei, const GLshort *);
+GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint, GLsizei, const GLubyte *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLboolean (APIENTRY * PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);
+typedef void (APIENTRY * PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);
+typedef void (APIENTRY * PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRY * PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);
+typedef void (APIENTRY * PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);
+typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRY * PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);
+typedef void (APIENTRY * PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);
+typedef void (APIENTRY * PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (APIENTRY * PFNGLISPROGRAMNVPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);
+typedef void (APIENTRY * PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (APIENTRY * PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);
+typedef void (APIENTRY * PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);
+#endif
+
+#ifndef GL_SGIX_texture_coordinate_clamp
+#define GL_SGIX_texture_coordinate_clamp 1
+#endif
+
+#ifndef GL_SGIX_scalebias_hint
+#define GL_SGIX_scalebias_hint 1
+#endif
+
+#ifndef GL_OML_interlace
+#define GL_OML_interlace 1
+#endif
+
+#ifndef GL_OML_subsample
+#define GL_OML_subsample 1
+#endif
+
+#ifndef GL_OML_resample
+#define GL_OML_resample 1
+#endif
+
+#ifndef GL_NV_copy_depth_to_color
+#define GL_NV_copy_depth_to_color 1
+#endif
+
+#ifndef GL_ATI_envmap_bumpmap
+#define GL_ATI_envmap_bumpmap 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glTexBumpParameterivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum, GLint *);
+GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);
+typedef void (APIENTRY * PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);
+typedef void (APIENTRY * PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);
+typedef void (APIENTRY * PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);
+#endif
+
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint);
+GLAPI void APIENTRY glBindFragmentShaderATI (GLuint);
+GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint);
+GLAPI void APIENTRY glBeginFragmentShaderATI (void);
+GLAPI void APIENTRY glEndFragmentShaderATI (void);
+GLAPI void APIENTRY glPassTexCoordATI (GLuint, GLuint, GLenum);
+GLAPI void APIENTRY glSampleMapATI (GLuint, GLuint, GLenum);
+GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint, const GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint (APIENTRY * PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);
+typedef void (APIENTRY * PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLBEGINFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRY * PFNGLENDFRAGMENTSHADERATIPROC) (void);
+typedef void (APIENTRY * PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (APIENTRY * PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (APIENTRY * PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRY * PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRY * PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRY * PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (APIENTRY * PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (APIENTRY * PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (APIENTRY * PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);
+#endif
+
+#ifndef GL_ATI_pn_triangles
+#define GL_ATI_pn_triangles 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPNTrianglesiATI (GLenum, GLint);
+GLAPI void APIENTRY glPNTrianglesfATI (GLenum, GLfloat);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);
+#endif
+
+#ifndef GL_ATI_vertex_array_object
+#define GL_ATI_vertex_array_object 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei, const GLvoid *, GLenum);
+GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint);
+GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint, GLuint, GLsizei, const GLvoid *, GLenum);
+GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetObjectBufferivATI (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glDeleteObjectBufferATI (GLuint);
+GLAPI void APIENTRY glArrayObjectATI (GLenum, GLint, GLenum, GLsizei, GLuint, GLuint);
+GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetArrayObjectivATI (GLenum, GLenum, GLint *);
+GLAPI void APIENTRY glVariantArrayObjectATI (GLuint, GLenum, GLsizei, GLuint, GLuint);
+GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint, GLenum, GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef GLuint (APIENTRY * PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage);
+typedef GLboolean (APIENTRY * PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRY * PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);
+typedef void (APIENTRY * PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLDELETEOBJECTBUFFERATIPROC) (GLuint buffer);
+typedef void (APIENTRY * PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRY * PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);
+typedef void (APIENTRY * PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);
+typedef void (APIENTRY * PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);
+#endif
+
+#ifndef GL_EXT_vertex_shader
+#define GL_EXT_vertex_shader 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glBeginVertexShaderEXT (void);
+GLAPI void APIENTRY glEndVertexShaderEXT (void);
+GLAPI void APIENTRY glBindVertexShaderEXT (GLuint);
+GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint);
+GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint);
+GLAPI void APIENTRY glShaderOp1EXT (GLenum, GLuint, GLuint);
+GLAPI void APIENTRY glShaderOp2EXT (GLenum, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glShaderOp3EXT (GLenum, GLuint, GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glSwizzleEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glWriteMaskEXT (GLuint, GLuint, GLenum, GLenum, GLenum, GLenum);
+GLAPI void APIENTRY glInsertComponentEXT (GLuint, GLuint, GLuint);
+GLAPI void APIENTRY glExtractComponentEXT (GLuint, GLuint, GLuint);
+GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum, GLenum, GLenum, GLuint);
+GLAPI void APIENTRY glSetInvariantEXT (GLuint, GLenum, const void *);
+GLAPI void APIENTRY glSetLocalConstantEXT (GLuint, GLenum, const void *);
+GLAPI void APIENTRY glVariantbvEXT (GLuint, const GLbyte *);
+GLAPI void APIENTRY glVariantsvEXT (GLuint, const GLshort *);
+GLAPI void APIENTRY glVariantivEXT (GLuint, const GLint *);
+GLAPI void APIENTRY glVariantfvEXT (GLuint, const GLfloat *);
+GLAPI void APIENTRY glVariantdvEXT (GLuint, const GLdouble *);
+GLAPI void APIENTRY glVariantubvEXT (GLuint, const GLubyte *);
+GLAPI void APIENTRY glVariantusvEXT (GLuint, const GLushort *);
+GLAPI void APIENTRY glVariantuivEXT (GLuint, const GLuint *);
+GLAPI void APIENTRY glVariantPointerEXT (GLuint, GLenum, GLuint, const void *);
+GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint);
+GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint);
+GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum, GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum, GLenum);
+GLAPI GLuint APIENTRY glBindParameterEXT (GLenum);
+GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint, GLenum);
+GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint, GLenum, GLboolean *);
+GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetVariantPointervEXT (GLuint, GLenum, GLvoid* *);
+GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint, GLenum, GLboolean *);
+GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint, GLenum, GLfloat *);
+GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint, GLenum, GLboolean *);
+GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint, GLenum, GLfloat *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLBEGINVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRY * PFNGLENDVERTEXSHADEREXTPROC) (void);
+typedef void (APIENTRY * PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);
+typedef GLuint (APIENTRY * PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);
+typedef void (APIENTRY * PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);
+typedef void (APIENTRY * PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);
+typedef void (APIENTRY * PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);
+typedef void (APIENTRY * PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRY * PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);
+typedef void (APIENTRY * PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef void (APIENTRY * PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);
+typedef GLuint (APIENTRY * PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);
+typedef void (APIENTRY * PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRY * PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr);
+typedef void (APIENTRY * PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);
+typedef void (APIENTRY * PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);
+typedef void (APIENTRY * PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);
+typedef void (APIENTRY * PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);
+typedef void (APIENTRY * PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);
+typedef void (APIENTRY * PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);
+typedef void (APIENTRY * PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);
+typedef void (APIENTRY * PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);
+typedef void (APIENTRY * PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr);
+typedef void (APIENTRY * PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);
+typedef GLuint (APIENTRY * PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);
+typedef GLuint (APIENTRY * PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);
+typedef GLuint (APIENTRY * PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);
+typedef GLuint (APIENTRY * PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);
+typedef GLuint (APIENTRY * PFNGLBINDPARAMETEREXTPROC) (GLenum value);
+typedef GLboolean (APIENTRY * PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);
+typedef void (APIENTRY * PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRY * PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRY * PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRY * PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data);
+typedef void (APIENTRY * PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRY * PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRY * PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+typedef void (APIENTRY * PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);
+typedef void (APIENTRY * PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);
+typedef void (APIENTRY * PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);
+#endif
+
+#ifndef GL_ATI_vertex_streams
+#define GL_ATI_vertex_streams 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glVertexStream1sATI (GLenum, GLshort);
+GLAPI void APIENTRY glVertexStream1svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream1iATI (GLenum, GLint);
+GLAPI void APIENTRY glVertexStream1ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream1fATI (GLenum, GLfloat);
+GLAPI void APIENTRY glVertexStream1fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream1dATI (GLenum, GLdouble);
+GLAPI void APIENTRY glVertexStream1dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glVertexStream2sATI (GLenum, GLshort, GLshort);
+GLAPI void APIENTRY glVertexStream2svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream2iATI (GLenum, GLint, GLint);
+GLAPI void APIENTRY glVertexStream2ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream2fATI (GLenum, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexStream2fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream2dATI (GLenum, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexStream2dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glVertexStream3sATI (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexStream3svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream3iATI (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glVertexStream3ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexStream3fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexStream3dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glVertexStream4sATI (GLenum, GLshort, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glVertexStream4svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glVertexStream4iATI (GLenum, GLint, GLint, GLint, GLint);
+GLAPI void APIENTRY glVertexStream4ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glVertexStream4fATI (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glVertexStream4fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glVertexStream4dATI (GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glVertexStream4dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glNormalStream3bATI (GLenum, GLbyte, GLbyte, GLbyte);
+GLAPI void APIENTRY glNormalStream3bvATI (GLenum, const GLbyte *);
+GLAPI void APIENTRY glNormalStream3sATI (GLenum, GLshort, GLshort, GLshort);
+GLAPI void APIENTRY glNormalStream3svATI (GLenum, const GLshort *);
+GLAPI void APIENTRY glNormalStream3iATI (GLenum, GLint, GLint, GLint);
+GLAPI void APIENTRY glNormalStream3ivATI (GLenum, const GLint *);
+GLAPI void APIENTRY glNormalStream3fATI (GLenum, GLfloat, GLfloat, GLfloat);
+GLAPI void APIENTRY glNormalStream3fvATI (GLenum, const GLfloat *);
+GLAPI void APIENTRY glNormalStream3dATI (GLenum, GLdouble, GLdouble, GLdouble);
+GLAPI void APIENTRY glNormalStream3dvATI (GLenum, const GLdouble *);
+GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum);
+GLAPI void APIENTRY glVertexBlendEnviATI (GLenum, GLint);
+GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum, GLfloat);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (APIENTRY * PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);
+typedef void (APIENTRY * PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);
+typedef void (APIENTRY * PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);
+typedef void (APIENTRY * PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);
+#endif
+
+#ifndef GL_ATI_element_array
+#define GL_ATI_element_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glElementPointerATI (GLenum, const GLvoid *);
+GLAPI void APIENTRY glDrawElementArrayATI (GLenum, GLsizei);
+GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum, GLuint, GLuint, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer);
+typedef void (APIENTRY * PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);
+typedef void (APIENTRY * PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);
+#endif
+
+#ifndef GL_SUN_mesh_array
+#define GL_SUN_mesh_array 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum, GLint, GLsizei, GLsizei);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);
+#endif
+
+#ifndef GL_SUN_slice_accum
+#define GL_SUN_slice_accum 1
+#endif
+
+#ifndef GL_NV_multisample_filter_hint
+#define GL_NV_multisample_filter_hint 1
+#endif
+
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#endif
+
+#ifndef GL_NV_occlusion_query
+#define GL_NV_occlusion_query 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei, GLuint *);
+GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei, const GLuint *);
+GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint);
+GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint);
+GLAPI void APIENTRY glEndOcclusionQueryNV (void);
+GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint, GLenum, GLint *);
+GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint, GLenum, GLuint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);
+typedef void (APIENTRY * PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);
+typedef GLboolean (APIENTRY * PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
+typedef void (APIENTRY * PFNGLENDOCCLUSIONQUERYNVPROC) (void);
+typedef void (APIENTRY * PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);
+typedef void (APIENTRY * PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);
+#endif
+
+#ifndef GL_NV_point_sprite
+#define GL_NV_point_sprite 1
+#ifdef GL_GLEXT_PROTOTYPES
+GLAPI void APIENTRY glPointParameteriNV (GLenum, GLint);
+GLAPI void APIENTRY glPointParameterivNV (GLenum, const GLint *);
+#endif /* GL_GLEXT_PROTOTYPES */
+typedef void (APIENTRY * PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);
+typedef void (APIENTRY * PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
+#endif
+
+#ifndef GL_NV_texture_shader3
+#define GL_NV_texture_shader3 1
+#endif
+
+#ifndef GL_NV_vertex_program1_1
+#define GL_NV_vertex_program1_1 1
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff -r 5853bf44af9f -r 0c3bcea5b4d0 GL/glu.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GL/glu.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,289 @@
+/*
+** License Applicability. Except to the extent portions of this file are
+** made subject to an alternative license as permitted in the SGI Free
+** Software License B, Version 1.1 (the "License"), the contents of this
+** file are subject only to the provisions of the License. You may not use
+** this file except in compliance with the License. You may obtain a copy
+** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
+** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
+** 
+** http://oss.sgi.com/projects/FreeB
+** 
+** Note that, as provided in the License, the Software is distributed on an
+** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
+** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
+** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
+** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
+** 
+** Original Code. The Original Code is: OpenGL Sample Implementation,
+** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
+** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
+** Copyright in any portions created by third parties is as indicated
+** elsewhere herein. All Rights Reserved.
+** 
+** Additional Notice Provisions: This software was created using the
+** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has
+** not been independently verified as being compliant with the OpenGL(R)
+** version 1.2.1 Specification.
+*/
+
+#ifndef __glu_h__
+#define __glu_h__
+#define _GLU_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+#include <stddef.h> /* for wchar_t */
+#include <GL/gl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*************************************************************/
+
+/* Boolean */
+#define GLU_FALSE                          0
+#define GLU_TRUE                           1
+
+/* Version */
+#define GLU_VERSION_1_1                    1
+#define GLU_VERSION_1_2                    1
+
+/* StringName */
+#define GLU_VERSION                        100800
+#define GLU_EXTENSIONS                     100801
+
+/* ErrorCode */
+#define GLU_INVALID_ENUM                   100900
+#define GLU_INVALID_VALUE                  100901
+#define GLU_OUT_OF_MEMORY                  100902
+#define GLU_INVALID_OPERATION              100904
+
+/* NurbsDisplay */
+/*      GLU_FILL */
+#define GLU_OUTLINE_POLYGON                100240
+#define GLU_OUTLINE_PATCH                  100241
+
+/* NurbsError */
+#define GLU_NURBS_ERROR1                   100251
+#define GLU_NURBS_ERROR2                   100252
+#define GLU_NURBS_ERROR3                   100253
+#define GLU_NURBS_ERROR4                   100254
+#define GLU_NURBS_ERROR5                   100255
+#define GLU_NURBS_ERROR6                   100256
+#define GLU_NURBS_ERROR7                   100257
+#define GLU_NURBS_ERROR8                   100258
+#define GLU_NURBS_ERROR9                   100259
+#define GLU_NURBS_ERROR10                  100260
+#define GLU_NURBS_ERROR11                  100261
+#define GLU_NURBS_ERROR12                  100262
+#define GLU_NURBS_ERROR13                  100263
+#define GLU_NURBS_ERROR14                  100264
+#define GLU_NURBS_ERROR15                  100265
+#define GLU_NURBS_ERROR16                  100266
+#define GLU_NURBS_ERROR17                  100267
+#define GLU_NURBS_ERROR18                  100268
+#define GLU_NURBS_ERROR19                  100269
+#define GLU_NURBS_ERROR20                  100270
+#define GLU_NURBS_ERROR21                  100271
+#define GLU_NURBS_ERROR22                  100272
+#define GLU_NURBS_ERROR23                  100273
+#define GLU_NURBS_ERROR24                  100274
+#define GLU_NURBS_ERROR25                  100275
+#define GLU_NURBS_ERROR26                  100276
+#define GLU_NURBS_ERROR27                  100277
+#define GLU_NURBS_ERROR28                  100278
+#define GLU_NURBS_ERROR29                  100279
+#define GLU_NURBS_ERROR30                  100280
+#define GLU_NURBS_ERROR31                  100281
+#define GLU_NURBS_ERROR32                  100282
+#define GLU_NURBS_ERROR33                  100283
+#define GLU_NURBS_ERROR34                  100284
+#define GLU_NURBS_ERROR35                  100285
+#define GLU_NURBS_ERROR36                  100286
+#define GLU_NURBS_ERROR37                  100287
+
+/* NurbsProperty */
+#define GLU_AUTO_LOAD_MATRIX               100200
+#define GLU_CULLING                        100201
+#define GLU_SAMPLING_TOLERANCE             100203
+#define GLU_DISPLAY_MODE                   100204
+#define GLU_PARAMETRIC_TOLERANCE           100202
+#define GLU_SAMPLING_METHOD                100205
+#define GLU_U_STEP                         100206
+#define GLU_V_STEP                         100207
+
+/* NurbsSampling */
+#define GLU_PATH_LENGTH                    100215
+#define GLU_PARAMETRIC_ERROR               100216
+#define GLU_DOMAIN_DISTANCE                100217
+
+/* NurbsTrim */
+#define GLU_MAP1_TRIM_2                    100210
+#define GLU_MAP1_TRIM_3                    100211
+
+/* QuadricDrawStyle */
+#define GLU_POINT                          100010
+#define GLU_LINE                           100011
+#define GLU_FILL                           100012
+#define GLU_SILHOUETTE                     100013
+
+/* QuadricCallback */
+#define GLU_ERROR                          100103
+
+/* QuadricNormal */
+#define GLU_SMOOTH                         100000
+#define GLU_FLAT                           100001
+#define GLU_NONE                           100002
+
+/* QuadricOrientation */
+#define GLU_OUTSIDE                        100020
+#define GLU_INSIDE                         100021
+
+/* TessCallback */
+#define GLU_TESS_BEGIN                     100100
+#define GLU_BEGIN                          100100
+#define GLU_TESS_VERTEX                    100101
+#define GLU_VERTEX                         100101
+#define GLU_TESS_END                       100102
+#define GLU_END                            100102
+#define GLU_TESS_ERROR                     100103
+#define GLU_TESS_EDGE_FLAG                 100104
+#define GLU_EDGE_FLAG                      100104
+#define GLU_TESS_COMBINE                   100105
+#define GLU_TESS_BEGIN_DATA                100106
+#define GLU_TESS_VERTEX_DATA               100107
+#define GLU_TESS_END_DATA                  100108
+#define GLU_TESS_ERROR_DATA                100109
+#define GLU_TESS_EDGE_FLAG_DATA            100110
+#define GLU_TESS_COMBINE_DATA              100111
+
+/* TessContour */
+#define GLU_CW                             100120
+#define GLU_CCW                            100121
+#define GLU_INTERIOR                       100122
+#define GLU_EXTERIOR                       100123
+#define GLU_UNKNOWN                        100124
+
+/* TessProperty */
+#define GLU_TESS_WINDING_RULE              100140
+#define GLU_TESS_BOUNDARY_ONLY             100141
+#define GLU_TESS_TOLERANCE                 100142
+
+/* TessError */
+#define GLU_TESS_ERROR1                    100151
+#define GLU_TESS_ERROR2                    100152
+#define GLU_TESS_ERROR3                    100153
+#define GLU_TESS_ERROR4                    100154
+#define GLU_TESS_ERROR5                    100155
+#define GLU_TESS_ERROR6                    100156
+#define GLU_TESS_ERROR7                    100157
+#define GLU_TESS_ERROR8                    100158
+#define GLU_TESS_MISSING_BEGIN_POLYGON     100151
+#define GLU_TESS_MISSING_BEGIN_CONTOUR     100152
+#define GLU_TESS_MISSING_END_POLYGON       100153
+#define GLU_TESS_MISSING_END_CONTOUR       100154
+#define GLU_TESS_COORD_TOO_LARGE           100155
+#define GLU_TESS_NEED_COMBINE_CALLBACK     100156
+
+/* TessWinding */
+#define GLU_TESS_WINDING_ODD               100130
+#define GLU_TESS_WINDING_NONZERO           100131
+#define GLU_TESS_WINDING_POSITIVE          100132
+#define GLU_TESS_WINDING_NEGATIVE          100133
+#define GLU_TESS_WINDING_ABS_GEQ_TWO       100134
+
+/* Obsolete. For compatibility with previous Sun OpenGL versions */
+#define GLU_INCOMPATIBLE_GL_VERSION        100903
+
+
+/*************************************************************/
+
+
+#ifdef __cplusplus
+class GLUnurbs;
+class GLUquadric;
+class GLUtesselator;
+#else
+typedef struct GLUnurbs GLUnurbs;
+typedef struct GLUquadric GLUquadric;
+typedef struct GLUtesselator GLUtesselator;
+#endif
+
+typedef GLUnurbs GLUnurbsObj;
+typedef GLUquadric GLUquadricObj;
+typedef GLUtesselator GLUtesselatorObj;
+typedef GLUtesselator GLUtriangulatorObj;
+
+#define GLU_TESS_MAX_COORD 1.0e150
+
+/* Internal convenience typedefs */
+typedef void (APIENTRY *_GLUfuncptr)();
+
+GLAPI void APIENTRY gluBeginCurve (GLUnurbs* nurb);
+GLAPI void APIENTRY gluBeginPolygon (GLUtesselator* tess);
+GLAPI void APIENTRY gluBeginSurface (GLUnurbs* nurb);
+GLAPI void APIENTRY gluBeginTrim (GLUnurbs* nurb);
+GLAPI GLint APIENTRY gluBuild1DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLenum format, GLenum type, const void *data);
+GLAPI GLint APIENTRY gluBuild2DMipmaps (GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *data);
+GLAPI void APIENTRY gluCylinder (GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks);
+GLAPI void APIENTRY gluDeleteNurbsRenderer (GLUnurbs* nurb);
+GLAPI void APIENTRY gluDeleteQuadric (GLUquadric* quad);
+GLAPI void APIENTRY gluDeleteTess (GLUtesselator* tess);
+GLAPI void APIENTRY gluDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops);
+GLAPI void APIENTRY gluEndCurve (GLUnurbs* nurb);
+GLAPI void APIENTRY gluEndPolygon (GLUtesselator* tess);
+GLAPI void APIENTRY gluEndSurface (GLUnurbs* nurb);
+GLAPI void APIENTRY gluEndTrim (GLUnurbs* nurb);
+GLAPI const GLubyte * APIENTRY gluErrorString (GLenum error);
+GLAPI const wchar_t * APIENTRY gluErrorUnicodeStringEXT (GLenum error);
+GLAPI void APIENTRY gluGetNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat* data);
+GLAPI const GLubyte * APIENTRY gluGetString (GLenum name);
+GLAPI void APIENTRY gluGetTessProperty (GLUtesselator* tess, GLenum which, GLdouble* data);
+GLAPI void APIENTRY gluLoadSamplingMatrices (GLUnurbs* nurb, const GLfloat *model, const GLfloat *perspective, const GLint *view);
+GLAPI void APIENTRY gluLookAt (GLdouble eyeX, GLdouble eyeY, GLdouble eyeZ, GLdouble centerX, GLdouble centerY, GLdouble centerZ, GLdouble upX, GLdouble upY, GLdouble upZ);
+GLAPI GLUnurbs* APIENTRY gluNewNurbsRenderer (void);
+GLAPI GLUquadric* APIENTRY gluNewQuadric (void);
+GLAPI GLUtesselator* APIENTRY gluNewTess (void);
+GLAPI void APIENTRY gluNextContour (GLUtesselator* tess, GLenum type);
+GLAPI void APIENTRY gluNurbsCallback (GLUnurbs* nurb, GLenum which, _GLUfuncptr CallBackFunc);
+GLAPI void APIENTRY gluNurbsCurve (GLUnurbs* nurb, GLint knotCount, GLfloat *knots, GLint stride, GLfloat *control, GLint order, GLenum type);
+GLAPI void APIENTRY gluNurbsProperty (GLUnurbs* nurb, GLenum property, GLfloat value);
+GLAPI void APIENTRY gluNurbsSurface (GLUnurbs* nurb, GLint sKnotCount, GLfloat* sKnots, GLint tKnotCount, GLfloat* tKnots, GLint sStride, GLint tStride, GLfloat* control, GLint sOrder, GLint tOrder, GLenum type);
+GLAPI void APIENTRY gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
+GLAPI void APIENTRY gluPartialDisk (GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep);
+GLAPI void APIENTRY gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);
+GLAPI void APIENTRY gluPickMatrix (GLdouble x, GLdouble y, GLdouble delX, GLdouble delY, GLint *viewport);
+GLAPI GLint APIENTRY gluProject (GLdouble objX, GLdouble objY, GLdouble objZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* winX, GLdouble* winY, GLdouble* winZ);
+GLAPI void APIENTRY gluPwlCurve (GLUnurbs* nurb, GLint count, GLfloat* data, GLint stride, GLenum type);
+GLAPI void APIENTRY gluQuadricCallback (GLUquadric* quad, GLenum which, _GLUfuncptr CallBackFunc);
+GLAPI void APIENTRY gluQuadricDrawStyle (GLUquadric* quad, GLenum draw);
+GLAPI void APIENTRY gluQuadricNormals (GLUquadric* quad, GLenum normal);
+GLAPI void APIENTRY gluQuadricOrientation (GLUquadric* quad, GLenum orientation);
+GLAPI void APIENTRY gluQuadricTexture (GLUquadric* quad, GLboolean texture);
+GLAPI GLint APIENTRY gluScaleImage (GLenum format, GLsizei wIn, GLsizei hIn, GLenum typeIn, const void *dataIn, GLsizei wOut, GLsizei hOut, GLenum typeOut, GLvoid* dataOut);
+GLAPI void APIENTRY gluSphere (GLUquadric* quad, GLdouble radius, GLint slices, GLint stacks);
+GLAPI void APIENTRY gluTessBeginContour (GLUtesselator* tess);
+GLAPI void APIENTRY gluTessBeginPolygon (GLUtesselator* tess, GLvoid* data);
+GLAPI void APIENTRY gluTessCallback (GLUtesselator* tess, GLenum which, _GLUfuncptr CallBackFunc);
+GLAPI void APIENTRY gluTessEndContour (GLUtesselator* tess);
+GLAPI void APIENTRY gluTessEndPolygon (GLUtesselator* tess);
+GLAPI void APIENTRY gluTessNormal (GLUtesselator* tess, GLdouble valueX, GLdouble valueY, GLdouble valueZ);
+GLAPI void APIENTRY gluTessProperty (GLUtesselator* tess, GLenum which, GLdouble data);
+GLAPI void APIENTRY gluTessVertex (GLUtesselator* tess, GLdouble *location, GLvoid* data);
+GLAPI GLint APIENTRY gluUnProject (GLdouble winX, GLdouble winY, GLdouble winZ, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble* objX, GLdouble* objY, GLdouble* objZ);
+GLAPI GLint APIENTRY gluUnProject4 (GLdouble winX, GLdouble winY, GLdouble winZ, GLdouble clipW, const GLdouble *model, const GLdouble *proj, const GLint *view, GLdouble nearVal, GLdouble farVal, GLdouble* objX, GLdouble* objY, GLdouble* objZ, GLdouble* objW);
+
+#ifdef UNICODE
+#define gluErrorStringWIN gluErrorUnicodeStringEXT
+#else
+#define gluErrorStringWIN gluErrorString
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __glu_h__ */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplus.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplus.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,81 @@
+/*
+ * gdiplus.h
+ *
+ * GDI+ main header
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_H
+#define __GDIPLUS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef RC_INVOKED
+
+#include <stddef.h>
+#include <math.h>
+#include <windef.h>
+#include <wingdi.h>
+
+#include <basetyps.h>
+typedef _COM_interface IStream IStream;
+typedef _COM_interface IDirectDrawSurface7 IDirectDrawSurface7;
+
+#ifdef __cplusplus
+namespace Gdiplus {
+#endif
+
+typedef float REAL;
+typedef SHORT INT16;
+typedef WORD UINT16;
+
+#include "gdiplusenums.h"
+#include "gdiplustypes.h"
+#include "gdiplusgpstubs.h"
+#include "gdiplusimaging.h"
+#include "gdiplusinit.h"
+#include "gdiplusmem.h"
+#include "gdiplusmetaheader.h"
+#include "gdipluspixelformats.h"
+#include "gdipluscolor.h"
+#include "gdipluscolormatrix.h"
+#include "gdiplusflat.h"
+#include "gdipluseffects.h"
+#include "gdiplusimagecodec.h"
+
+#ifdef __cplusplus
+#include "gdiplusbase.h"
+#include "gdiplusheaders.h"
+#include "gdiplusimageattributes.h"
+#include "gdiplusmatrix.h"
+#include "gdiplusbrush.h"
+#include "gdiplusmetafile.h"
+#include "gdipluspen.h"
+#include "gdiplusstringformat.h"
+#include "gdipluspath.h"
+#include "gdiplusgraphics.h"
+#include "gdipluslinecaps.h"
+#include "gdiplusimpl.h"
+
+}  /* namespace Gdiplus */
+#endif /* __cplusplus */
+
+#endif /* !RC_INVOKED */
+
+#endif /* __GDIPLUS_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusbase.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusbase.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,54 @@
+/*
+ * gdiplusbase.h
+ *
+ * GDI+ base class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_BASE_H
+#define __GDIPLUS_BASE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusbase.h."
+#endif
+
+class GdiplusBase
+{
+public:
+	static void* operator new(size_t in_size)
+	{
+		return DllExports::GdipAlloc(in_size);
+	}
+	static void* operator new[](size_t in_size)
+	{
+		return DllExports::GdipAlloc(in_size);
+	}
+	static void operator delete(void *in_pVoid)
+	{
+		DllExports::GdipFree(in_pVoid);
+	}
+	static void operator delete[](void *in_pVoid)
+	{
+		DllExports::GdipFree(in_pVoid);
+	}
+};
+
+#endif /* __GDIPLUS_BASE_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusbrush.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusbrush.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,606 @@
+/*
+ * gdiplusbrush.h
+ *
+ * GDI+ brush classes
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_BRUSH_H
+#define __GDIPLUS_BRUSH_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusbrush.h."
+#endif
+
+class Brush: public GdiplusBase
+{
+	friend class HatchBrush;
+	friend class LinearGradientBrush;
+	friend class PathGradientBrush;
+	friend class SolidBrush;
+	friend class TextureBrush;
+	friend class Graphics;
+	friend class Pen;
+
+public:
+	virtual ~Brush()
+	{
+		DllExports::GdipDeleteBrush(nativeBrush);
+	}
+	virtual Brush* Clone() const  // each subclass must implement this
+	{
+		lastStatus = NotImplemented;
+		return NULL;
+	}
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	BrushType GetType() const
+	{
+		BrushType result = BrushTypeSolidColor;
+		updateStatus(DllExports::GdipGetBrushType(nativeBrush, &result));
+		return result;  
+	}
+
+private:
+	Brush(): nativeBrush(NULL), lastStatus(Ok) {}
+	Brush(GpBrush *brush, Status status):
+		nativeBrush(brush), lastStatus(status) {}
+	Brush(const Brush& brush);
+	Brush& operator=(const Brush&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpBrush *nativeBrush;
+	mutable Status lastStatus;
+};
+
+class HatchBrush: public Brush
+{
+public:
+	HatchBrush(HatchStyle hatchStyle,
+			const Color& foreColor,
+			const Color& backColor = Color())
+	{
+		GpHatch *nativeHatch = NULL;
+		lastStatus = DllExports::GdipCreateHatchBrush(hatchStyle,
+				foreColor.GetValue(), backColor.GetValue(),
+				&nativeHatch);
+		nativeBrush = nativeHatch; 
+	}
+	virtual HatchBrush* Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			HatchBrush *result =
+				new HatchBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status GetBackgroundColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetHatchBackgroundColor(
+				(GpHatch*) nativeBrush,
+				color ? &color->Value : NULL));
+	}
+	Status GetForegroundColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetHatchForegroundColor(
+				(GpHatch*) nativeBrush,
+				color ? &color->Value : NULL));
+	}
+	HatchStyle GetHatchStyle() const
+	{
+		HatchStyle result;
+		updateStatus(DllExports::GdipGetHatchStyle(
+				(GpHatch*) nativeBrush, &result));
+		return result;
+	}
+
+private:
+	HatchBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	HatchBrush(const HatchBrush& brush);
+	HatchBrush& operator=(const HatchBrush&);
+};
+
+class LinearGradientBrush: public Brush
+{
+public:
+	LinearGradientBrush(const PointF& point1, const PointF& point2,
+			const Color& color1, const Color& color2)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrush(
+				&point1, &point2,
+				color1.GetValue(), color2.GetValue(),
+				WrapModeTile, &nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const Point& point1, const Point& point2,
+			const Color& color1, const Color& color2)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushI(
+				&point1, &point2,
+				color1.GetValue(), color2.GetValue(),
+				WrapModeTile, &nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const RectF& rect, const Color& color1,
+			const Color& color2, LinearGradientMode mode)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushFromRect(
+				&rect, color1.GetValue(), color2.GetValue(),
+				mode, WrapModeTile, &nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const Rect& rect, const Color& color1,
+			const Color& color2, LinearGradientMode mode)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushFromRectI(
+				&rect, color1.GetValue(), color2.GetValue(),
+				mode, WrapModeTile, &nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const RectF& rect, const Color& color1,
+			const Color& color2, REAL angle,
+			BOOL isAngleScalable = FALSE)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushFromRectWithAngle(
+				&rect, color1.GetValue(), color2.GetValue(),
+				angle, isAngleScalable, WrapModeTile,
+				&nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	LinearGradientBrush(const Rect& rect, const Color& color1,
+			const Color& color2, REAL angle,
+			BOOL isAngleScalable = FALSE)
+	{
+		GpLineGradient *nativeLineGradient = NULL;
+		lastStatus = DllExports::GdipCreateLineBrushFromRectWithAngleI(
+				&rect, color1.GetValue(), color2.GetValue(),
+				angle, isAngleScalable, WrapModeTile,
+				&nativeLineGradient);
+		nativeBrush = nativeLineGradient;
+	}
+	virtual LinearGradientBrush* Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			LinearGradientBrush *result =
+				new LinearGradientBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status GetBlend(REAL *blendFactors, REAL *blendPositions,
+			INT count) const
+	{
+		return updateStatus(DllExports::GdipGetLineBlend(
+				(GpLineGradient*) nativeBrush,
+				blendFactors, blendPositions, count));
+	}
+	INT GetBlendCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetLineBlendCount(
+				(GpLineGradient*) nativeBrush, &result));
+		return result;
+	}
+	BOOL GetGammaCorrection() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipGetLineGammaCorrection(
+				(GpLineGradient*) nativeBrush, &result));
+		return result;
+	}
+	INT GetInterpolationColorCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetLinePresetBlendCount(
+				(GpLineGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetInterpolationColors(Color *presetColors,
+			REAL *blendPositions, INT count) const
+	{
+		if (!presetColors || count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *presetArgb =
+			(ARGB*) DllExports::GdipAlloc(count * sizeof(ARGB));
+		if (!presetArgb)
+			return lastStatus = OutOfMemory;
+
+		Status status = updateStatus(DllExports::GdipGetLinePresetBlend(
+				(GpLineGradient*) nativeBrush, presetArgb,
+				blendPositions, count));
+		for (INT i = 0; i < count; ++i) {
+			presetColors[i].SetValue(presetArgb[i]);
+		}
+		DllExports::GdipFree((void*) presetArgb);
+		return status;
+	}
+	Status GetLinearColors(Color *colors) const
+	{
+		if (!colors) return lastStatus = InvalidParameter;
+
+		ARGB colorsArgb[2];
+		Status status = updateStatus(DllExports::GdipGetLineColors(
+				(GpLineGradient*) nativeBrush, colorsArgb));
+		colors[0].SetValue(colorsArgb[0]);
+		colors[1].SetValue(colorsArgb[1]);
+		return status;
+	}
+	Status GetRectangle(RectF *rect) const
+	{
+		return updateStatus(DllExports::GdipGetLineRect(
+				(GpLineGradient*) nativeBrush, rect));
+	}
+	Status GetRectangle(Rect *rect) const
+	{
+		return updateStatus(DllExports::GdipGetLineRectI(
+				(GpLineGradient*) nativeBrush, rect));
+	}
+	Status GetTransform(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetLineTransform(
+				(GpLineGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	WrapMode GetWrapMode() const
+	{
+		WrapMode wrapMode = WrapModeTile;
+		updateStatus(DllExports::GdipGetLineWrapMode(
+				(GpLineGradient*) nativeBrush, &wrapMode));
+		return wrapMode;
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyLineTransform(
+				(GpLineGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetLineTransform(
+				(GpLineGradient*) nativeBrush));
+	}
+	Status RotateTranform(REAL angle, MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotateLineTransform(
+				(GpLineGradient*) nativeBrush, angle, order));
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScaleLineTransform(
+				(GpLineGradient*) nativeBrush, sx, sy, order));
+	}
+	Status SetBlend(const REAL *blendFactors,
+			const REAL *blendPositions, INT count)
+	{
+		return updateStatus(DllExports::GdipSetLineBlend(
+				(GpLineGradient*) nativeBrush,
+				blendFactors, blendPositions, count));
+	}
+	Status SetBlendBellShape(REAL focus, REAL scale = 1.0f)
+	{
+		return updateStatus(DllExports::GdipSetLineSigmaBlend(
+				(GpLineGradient*) nativeBrush,
+				focus, scale));
+	}
+	Status SetBlendTriangularShape(REAL focus, REAL scale = 1.0f)
+	{
+		return updateStatus(DllExports::GdipSetLineLinearBlend(
+				(GpLineGradient*) nativeBrush,
+				focus, scale));
+	}
+	Status SetGammaCorrection(BOOL useGammaCorrection)
+	{
+		return updateStatus(DllExports::GdipSetLineGammaCorrection(
+				(GpLineGradient*) nativeBrush,
+				useGammaCorrection));
+	}
+	Status SetInterpolationColors(const Color *presetColors,
+			const REAL *blendPositions, INT count)
+	{
+		if (!presetColors || count < 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *presetArgb =
+			(ARGB*) DllExports::GdipAlloc(count * sizeof(ARGB));
+		if (!presetArgb)
+			return lastStatus = OutOfMemory;
+		for (INT i = 0; i < count; ++i) {
+			presetArgb[i] = presetColors[i].GetValue();
+		}
+
+		Status status = updateStatus(DllExports::GdipSetLinePresetBlend(
+				(GpLineGradient*) nativeBrush,
+				presetArgb, blendPositions, count));
+		DllExports::GdipFree((void*) presetArgb);
+		return status;
+	}
+	Status SetLinearColors(const Color& color1, const Color& color2)
+	{
+		return updateStatus(DllExports::GdipSetLineColors(
+				(GpLineGradient*) nativeBrush,
+				color1.GetValue(), color2.GetValue()));
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetLineTransform(
+				(GpLineGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status SetWrapMode(WrapMode wrapMode)
+	{
+		return updateStatus(DllExports::GdipSetLineWrapMode(
+				(GpLineGradient*) nativeBrush, wrapMode));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslateLineTransform(
+				(GpLineGradient*) nativeBrush, dx, dy, order));
+	}
+
+private:
+	LinearGradientBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	LinearGradientBrush(const LinearGradientBrush& brush);
+	LinearGradientBrush& operator=(const LinearGradientBrush&);
+};
+
+class SolidBrush: public Brush
+{
+public:
+	SolidBrush(const Color& color)
+	{
+		GpSolidFill *nativeSolidFill = NULL;
+		lastStatus = DllExports::GdipCreateSolidFill(
+				color.GetValue(), &nativeSolidFill);
+		nativeBrush = nativeSolidFill; 
+	}
+	virtual SolidBrush* Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			SolidBrush *result =
+				new SolidBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status GetColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetSolidFillColor(
+				(GpSolidFill*) nativeBrush,
+				color ? &color->Value : NULL));
+	}
+	Status SetColor(const Color& color)
+	{
+		return updateStatus(DllExports::GdipSetSolidFillColor(
+				(GpSolidFill*) nativeBrush, color.GetValue()));
+	}
+
+private:
+	SolidBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	SolidBrush(const SolidBrush&);
+	SolidBrush& operator=(const SolidBrush&);
+};
+
+class TextureBrush: public Brush
+{
+public:
+	TextureBrush(Image *image, WrapMode wrapMode = WrapModeTile)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture(
+				image ? image->nativeImage : NULL,
+				wrapMode, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, WrapMode wrapMode,
+			REAL dstX, REAL dstY, REAL dstWidth, REAL dstHeight)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture2(
+				image ? image->nativeImage : NULL,
+				wrapMode, dstX, dstY, dstWidth, dstHeight,
+				&nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, WrapMode wrapMode,
+			INT dstX, INT dstY, INT dstWidth, INT dstHeight)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture2I(
+				image ? image->nativeImage : NULL,
+				wrapMode, dstX, dstY, dstWidth, dstHeight,
+				&nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, WrapMode wrapMode, const RectF& dstRect)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture2(
+				image ? image->nativeImage : NULL, wrapMode,
+				dstRect.X, dstRect.Y,
+				dstRect.Width, dstRect.Height, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, WrapMode wrapMode, const Rect& dstRect)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTexture2I(
+				image ? image->nativeImage : NULL, wrapMode,
+				dstRect.X, dstRect.Y,
+				dstRect.Width, dstRect.Height, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, const RectF& dstRect,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTextureIA(
+				image ? image->nativeImage : NULL,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				dstRect.X, dstRect.Y,
+				dstRect.Width, dstRect.Height, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	TextureBrush(Image *image, const Rect& dstRect,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		GpTexture *nativeTexture = NULL;
+		lastStatus = DllExports::GdipCreateTextureIAI(
+				image ? image->nativeImage : NULL,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				dstRect.X, dstRect.Y,
+				dstRect.Width, dstRect.Height, &nativeTexture);
+		nativeBrush = nativeTexture;
+	}
+	virtual TextureBrush* Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			TextureBrush *result =
+				new TextureBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	//TODO: implement TextureBrush::GetImage()
+	//Image *GetImage() const
+	//{
+	//	// where is the Image allocated (static,member,new,other)?
+	//	// GdipGetTextureImage just returns a GpImage*
+	//	updateStatus(NotImplemented);
+	//	return NULL;
+	//}
+	Status GetTransfrom(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetTextureTransform(
+				(GpTexture*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	WrapMode GetWrapMode() const
+	{
+		WrapMode result = WrapModeTile;
+		updateStatus(DllExports::GdipGetTextureWrapMode(
+				(GpTexture*) nativeBrush, &result));
+		return result;
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyTextureTransform(
+				(GpTexture*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetTextureTransform(
+				(GpTexture*) nativeBrush));
+	}
+	Status RotateTransform(REAL angle,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotateTextureTransform(
+				(GpTexture*) nativeBrush, angle, order));
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScaleTextureTransform(
+				(GpTexture*) nativeBrush, sx, sy, order));
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetTextureTransform(
+				(GpTexture*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status SetWrapMode(WrapMode wrapMode)
+	{
+		return updateStatus(DllExports::GdipSetTextureWrapMode(
+				(GpTexture*) nativeBrush, wrapMode));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslateTextureTransform(
+				(GpTexture*) nativeBrush, dx, dy, order));
+	}
+
+private:
+	TextureBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	TextureBrush(const TextureBrush&);
+	TextureBrush& operator=(const TextureBrush&);
+};
+
+#endif /* __GDIPLUS_BRUSH_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdipluscolor.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdipluscolor.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,262 @@
+/*
+ * gdipluscolor.h
+ *
+ * GDI+ color
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_COLOR_H
+#define __GDIPLUS_COLOR_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum ColorChannelFlags {
+	ColorChannelFlagsC = 0,
+	ColorChannelFlagsM = 1,
+	ColorChannelFlagsY = 2,
+	ColorChannelFlagsK = 3,
+	ColorChannelFlagsLast = 4
+} ColorChannelFlags;
+
+typedef struct Color
+{
+	#ifdef __cplusplus
+	private:
+	#endif
+	ARGB Value;
+
+	#ifdef __cplusplus
+	public:
+	friend class Bitmap;
+	friend class Graphics;
+	friend class HatchBrush;
+	friend class PathGradientBrush;
+	friend class Pen;
+	friend class SolidBrush;
+
+	static ARGB MakeARGB(BYTE a, BYTE r, BYTE g, BYTE b)
+	{
+		return (ARGB) ((((DWORD) a) << 24) | (((DWORD) r) << 16)
+		             | (((DWORD) g) << 8) | ((DWORD) b));
+	}
+
+	static const ARGB AlphaMask            = 0xFF000000UL;
+
+	static const ARGB AliceBlue            = 0xFFF0F8FFUL;
+	static const ARGB AntiqueWhite         = 0xFFFAEBD7UL;
+	static const ARGB Aqua                 = 0xFF00FFFFUL;
+	static const ARGB Aquamarine           = 0xFF7FFFD4UL;
+	static const ARGB Azure                = 0xFFF0FFFFUL;
+	static const ARGB Beige                = 0xFFF5F5DCUL;
+	static const ARGB Bisque               = 0xFFFFE4C4UL;
+	static const ARGB Black                = 0xFF000000UL;
+	static const ARGB BlanchedAlmond       = 0xFFFFEBCDUL;
+	static const ARGB Blue                 = 0xFF0000FFUL;
+	static const ARGB BlueViolet           = 0xFF8A2BE2UL;
+	static const ARGB Brown                = 0xFFA52A2AUL;
+	static const ARGB BurlyWood            = 0xFFDEB887UL;
+	static const ARGB CadetBlue            = 0xFF5F9EA0UL;
+	static const ARGB Chartreuse           = 0xFF7FFF00UL;
+	static const ARGB Chocolate            = 0xFFD2691EUL;
+	static const ARGB Coral                = 0xFFFF7F50UL;
+	static const ARGB CornflowerBlue       = 0xFF6495EDUL;
+	static const ARGB Cornsilk             = 0xFFFFF8DCUL;
+	static const ARGB Crimson              = 0xFFDC143CUL;
+	static const ARGB Cyan                 = 0xFF00FFFFUL;
+	static const ARGB DarkBlue             = 0xFF00008BUL;
+	static const ARGB DarkCyan             = 0xFF008B8BUL;
+	static const ARGB DarkGoldenrod        = 0xFFB8860BUL;
+	static const ARGB DarkGray             = 0xFFA9A9A9UL;
+	static const ARGB DarkGreen            = 0xFF006400UL;
+	static const ARGB DarkKhaki            = 0xFFBDB76BUL;
+	static const ARGB DarkMagenta          = 0xFF8B008BUL;
+	static const ARGB DarkOliveGreen       = 0xFF556B2FUL;
+	static const ARGB DarkOrange           = 0xFFFF8C00UL;
+	static const ARGB DarkOrchid           = 0xFF9932CCUL;
+	static const ARGB DarkRed              = 0xFF8B0000UL;
+	static const ARGB DarkSalmon           = 0xFFE9967AUL;
+	static const ARGB DarkSeaGreen         = 0xFF8FBC8FUL;
+	static const ARGB DarkSlateBlue        = 0xFF483D8BUL;
+	static const ARGB DarkSlateGray        = 0xFF2F4F4FUL;
+	static const ARGB DarkTurquoise        = 0xFF00CED1UL;
+	static const ARGB DarkViolet           = 0xFF9400D3UL;
+	static const ARGB DeepPink             = 0xFFFF1493UL;
+	static const ARGB DeepSkyBlue          = 0xFF00BFFFUL;
+	static const ARGB DimGray              = 0xFF696969UL;
+	static const ARGB DodgerBlue           = 0xFF1E90FFUL;
+	static const ARGB Firebrick            = 0xFFB22222UL;
+	static const ARGB FloralWhite          = 0xFFFFFAF0UL;
+	static const ARGB ForestGreen          = 0xFF228B22UL;
+	static const ARGB Fuchsia              = 0xFFFF00FFUL;
+	static const ARGB Gainsboro            = 0xFFDCDCDCUL;
+	static const ARGB GhostWhite           = 0xFFF8F8FFUL;
+	static const ARGB Gold                 = 0xFFFFD700UL;
+	static const ARGB Goldenrod            = 0xFFDAA520UL;
+	static const ARGB Gray                 = 0xFF808080UL;
+	static const ARGB Green                = 0xFF008000UL;
+	static const ARGB GreenYellow          = 0xFFADFF2FUL;
+	static const ARGB Honeydew             = 0xFFF0FFF0UL;
+	static const ARGB HotPink              = 0xFFFF69B4UL;
+	static const ARGB IndianRed            = 0xFFCD5C5CUL;
+	static const ARGB Indigo               = 0xFF4B0082UL;
+	static const ARGB Ivory                = 0xFFFFFFF0UL;
+	static const ARGB Khaki                = 0xFFF0E68CUL;
+	static const ARGB Lavender             = 0xFFE6E6FAUL;
+	static const ARGB LavenderBlush        = 0xFFFFF0F5UL;
+	static const ARGB LawnGreen            = 0xFF7CFC00UL;
+	static const ARGB LemonChiffon         = 0xFFFFFACDUL;
+	static const ARGB LightBlue            = 0xFFADD8E6UL;
+	static const ARGB LightCoral           = 0xFFF08080UL;
+	static const ARGB LightCyan            = 0xFFE0FFFFUL;
+	static const ARGB LightGoldenrodYellow = 0xFFFAFAD2UL;
+	static const ARGB LightGray            = 0xFFD3D3D3UL;
+	static const ARGB LightGreen           = 0xFF90EE90UL;
+	static const ARGB LightPink            = 0xFFFFB6C1UL;
+	static const ARGB LightSalmon          = 0xFFFFA07AUL;
+	static const ARGB LightSeaGreen        = 0xFF20B2AAUL;
+	static const ARGB LightSkyBlue         = 0xFF87CEFAUL;
+	static const ARGB LightSlateGray       = 0xFF778899UL;
+	static const ARGB LightSteelBlue       = 0xFFB0C4DEUL;
+	static const ARGB LightYellow          = 0xFFFFFFE0UL;
+	static const ARGB Lime                 = 0xFF00FF00UL;
+	static const ARGB LimeGreen            = 0xFF32CD32UL;
+	static const ARGB Linen                = 0xFFFAF0E6UL;
+	static const ARGB Magenta              = 0xFFFF00FFUL;
+	static const ARGB Maroon               = 0xFF800000UL;
+	static const ARGB MediumAquamarine     = 0xFF66CDAAUL;
+	static const ARGB MediumBlue           = 0xFF0000CDUL;
+	static const ARGB MediumOrchid         = 0xFFBA55D3UL;
+	static const ARGB MediumPurple         = 0xFF9370DBUL;
+	static const ARGB MediumSeaGreen       = 0xFF3CB371UL;
+	static const ARGB MediumSlateBlue      = 0xFF7B68EEUL;
+	static const ARGB MediumSpringGreen    = 0xFF00FA9AUL;
+	static const ARGB MediumTurquoise      = 0xFF48D1CCUL;
+	static const ARGB MediumVioletRed      = 0xFFC71585UL;
+	static const ARGB MidnightBlue         = 0xFF191970UL;
+	static const ARGB MintCream            = 0xFFF5FFFAUL;
+	static const ARGB MistyRose            = 0xFFFFE4E1UL;
+	static const ARGB Moccasin             = 0xFFFFE4B5UL;
+	static const ARGB NavajoWhite          = 0xFFFFDEADUL;
+	static const ARGB Navy                 = 0xFF000080UL;
+	static const ARGB OldLace              = 0xFFFDF5E6UL;
+	static const ARGB Olive                = 0xFF808000UL;
+	static const ARGB OliveDrab            = 0xFF6B8E23UL;
+	static const ARGB Orange               = 0xFFFFA500UL;
+	static const ARGB OrangeRed            = 0xFFFF4500UL;
+	static const ARGB Orchid               = 0xFFDA70D6UL;
+	static const ARGB PaleGoldenrod        = 0xFFEEE8AAUL;
+	static const ARGB PaleGreen            = 0xFF98FB98UL;
+	static const ARGB PaleTurquoise        = 0xFFAFEEEEUL;
+	static const ARGB PaleVioletRed        = 0xFFDB7093UL;
+	static const ARGB PapayaWhip           = 0xFFFFEFD5UL;
+	static const ARGB PeachPuff            = 0xFFFFDAB9UL;
+	static const ARGB Peru                 = 0xFFCD853FUL;
+	static const ARGB Pink                 = 0xFFFFC0CBUL;
+	static const ARGB Plum                 = 0xFFDDA0DDUL;
+	static const ARGB PowderBlue           = 0xFFB0E0E6UL;
+	static const ARGB Purple               = 0xFF800080UL;
+	static const ARGB Red                  = 0xFFFF0000UL;
+	static const ARGB RosyBrown            = 0xFFBC8F8FUL;
+	static const ARGB RoyalBlue            = 0xFF4169E1UL;
+	static const ARGB SaddleBrown          = 0xFF8B4513UL;
+	static const ARGB Salmon               = 0xFFFA8072UL;
+	static const ARGB SandyBrown           = 0xFFF4A460UL;
+	static const ARGB SeaGreen             = 0xFF2E8B57UL;
+	static const ARGB SeaShell             = 0xFFFFF5EEUL;
+	static const ARGB Sienna               = 0xFFA0522DUL;
+	static const ARGB Silver               = 0xFFC0C0C0UL;
+	static const ARGB SkyBlue              = 0xFF87CEEBUL;
+	static const ARGB SlateBlue            = 0xFF6A5ACDUL;
+	static const ARGB SlateGray            = 0xFF708090UL;
+	static const ARGB Snow                 = 0xFFFFFAFAUL;
+	static const ARGB SpringGreen          = 0xFF00FF7FUL;
+	static const ARGB SteelBlue            = 0xFF4682B4UL;
+	static const ARGB Tan                  = 0xFFD2B48CUL;
+	static const ARGB Teal                 = 0xFF008080UL;
+	static const ARGB Thistle              = 0xFFD8BFD8UL;
+	static const ARGB Tomato               = 0xFFFF6347UL;
+	static const ARGB Transparent          = 0x00FFFFFFUL;
+	static const ARGB Turquoise            = 0xFF40E0D0UL;
+	static const ARGB Violet               = 0xFFEE82EEUL;
+	static const ARGB Wheat                = 0xFFF5DEB3UL;
+	static const ARGB White                = 0xFFFFFFFFUL;
+	static const ARGB WhiteSmoke           = 0xFFF5F5F5UL;
+	static const ARGB Yellow               = 0xFFFFFF00UL;
+	static const ARGB YellowGreen          = 0xFF9ACD32UL;
+
+	Color(): Value(0xFF000000) {}
+	Color(ARGB argb): Value(argb) {}
+	Color(BYTE r, BYTE g, BYTE b): Value(MakeARGB(0xFF, r, g, b)) {}
+	Color(BYTE a, BYTE r, BYTE g, BYTE b): Value(MakeARGB(a, r, g, b)) {}
+
+	BYTE GetA() const
+	{
+		return (BYTE) (Value >> 24);
+	}
+	BYTE GetAlpha() const
+	{
+		return (BYTE) (Value >> 24);
+	}
+	BYTE GetB() const
+	{
+		return (BYTE) Value;
+	}
+	BYTE GetBlue() const
+	{
+		return (BYTE) Value;
+	}
+	BYTE GetG() const
+	{
+		return (BYTE) (Value >> 8);
+	}
+	BYTE GetGreen() const
+	{
+		return (BYTE) (Value >> 8);
+	}
+	BYTE GetR() const
+	{
+		return (BYTE) (Value >> 16);
+	}
+	BYTE GetRed() const
+	{
+		return (BYTE) (Value >> 16);
+	}
+	ARGB GetValue() const
+	{
+		return Value;
+	}
+	VOID SetFromCOLORREF(COLORREF rgb)
+	{
+		BYTE r = (BYTE) rgb;
+		BYTE g = (BYTE) (rgb >> 8);
+		BYTE b = (BYTE) (rgb >> 16);
+		Value = MakeARGB(0xFF, r, g, b);
+	}
+	VOID SetValue(ARGB argb)
+	{
+		Value = argb;
+	}
+	COLORREF ToCOLORREF() const
+	{
+		return RGB(GetRed(), GetGreen(), GetBlue());
+	}
+	#endif /* __cplusplus */
+} Color;
+
+#endif /* __GDIPLUS_COLOR_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdipluscolormatrix.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdipluscolormatrix.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,67 @@
+/*
+ * gdipluscolormatrix.h
+ *
+ * GDI+ color mappings
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_COLORMATRIX_H
+#define __GDIPLUS_COLORMATRIX_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum ColorAdjustType {
+	ColorAdjustTypeDefault = 0,
+	ColorAdjustTypeBitmap = 1,
+	ColorAdjustTypeBrush = 2,
+	ColorAdjustTypePen = 3,
+	ColorAdjustTypeText = 4,
+	ColorAdjustTypeCount = 5,
+	ColorAdjustTypeAny = 6
+} ColorAdjustType;
+
+typedef enum ColorMatrixFlags {
+	ColorMatrixFlagsDefault = 0,
+	ColorMatrixFlagsSkipGrays = 1,
+	ColorMatrixFlagsAltGray = 2
+} ColorMatrixFlags;
+
+typedef enum HistogramFormat {
+	HistogramFormatARGB = 0,
+	HistogramFormatPARGB = 1,
+	HistogramFormatRGB = 2,
+	HistogramFormatGray = 3,
+	HistogramFormatB = 4,
+	HistogramFormatG = 5,
+	HistogramFormatR = 6,
+	HistogramFormatA = 7
+} HistogramFormat;
+
+typedef struct ColorMap {
+	Color oldColor;
+	Color newColor;
+} ColorMap;
+
+typedef struct ColorMatrix {
+	REAL m[5][5];
+} ColorMatrix;
+
+typedef BYTE ColorChannelLUT[256];
+
+#endif /* __GDIPLUS_COLORMATRIX_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdipluseffects.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdipluseffects.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,116 @@
+/*
+ * gdipluseffects.h
+ *
+ * GDI+ filters and effects
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_EFFECTS_H
+#define __GDIPLUS_EFFECTS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum CurveAdjustments {
+	AdjustExposure = 0,
+	AdjustDensity = 1,
+	AdjustContrast = 2,
+	AdjustHighlight = 3,
+	AdjustShadow = 4,
+	AdjustMidtone = 5,
+	AdjustWhiteSaturation = 6,
+	AdjustBlackSaturation = 7
+} CurveAdjustments;
+
+typedef enum CurveChannel {
+	CurveChannelAll = 0,
+	CurveChannelRed = 1,
+	CurveChannelGreen = 2,
+	CurveChannelBlue = 3
+} CurveChannel;
+
+typedef struct BlurParams {
+	REAL radius;
+	BOOL expandEdge;
+} BlurParams;
+
+typedef struct BrightnessContrastParams {
+	INT brightnessLevel;
+	INT contrastLevel;
+} BrightnessContrastParams;
+
+typedef struct ColorBalanceParams {
+	INT cyanRed;
+	INT magentaGreen;
+	INT yellowBlue;
+} ColorBalanceParams;
+
+typedef struct ColorCurveParams {
+	CurveAdjustments adjustment;
+	CurveChannel channel;
+	INT adjustValue;
+} ColorCurveParams;
+
+typedef struct ColorLUTParams {
+	ColorChannelLUT lutB;
+	ColorChannelLUT lutG;
+	ColorChannelLUT lutR;
+	ColorChannelLUT lutA;
+} ColorLUTParams;
+
+typedef struct HueSaturationLightnessParams {
+	INT hueLevel;
+	INT saturationLevel;
+	INT lightnessLevel;
+} HueSaturationLightnessParams;
+
+typedef struct LevelsParams {
+	INT highlight;
+	INT midtone;
+	INT shadow;
+} LevelsParams;
+
+typedef struct RedEyeCorrectionParams {
+	UINT numberOfAreas;
+	RECT *areas;
+} RedEyeCorrectionParams;
+
+typedef struct SharpenParams {
+	REAL radius;
+	REAL amount;
+} SharpenParams;
+
+typedef struct TintParams {
+	INT hue;
+	INT amount;
+} TintParams;
+
+extern const GUID BlurEffectGuid;                    /* ? */
+extern const GUID BrightnessContrastEffectGuid;      /* ? */
+extern const GUID ColorBalanceEffectGuid;            /* ? */
+extern const GUID ColorCurveEffectGuid;              /* ? */
+extern const GUID ColorLUTEffectGuid;                /* ? */
+extern const GUID ColorMatrixEffectGuid;             /* ? */
+extern const GUID HueSaturationLightnessEffectGuid;  /* ? */
+extern const GUID LevelsEffectGuid;                  /* ? */
+extern const GUID RedEyeCorrectionEffectGuid;        /* ? */
+extern const GUID SharpenEffectGuid;                 /* ? */
+extern const GUID TintEffectGuid;                    /* ? */
+
+
+#endif /* __GDIPLUS_EFFECTS_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusenums.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusenums.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,755 @@
+/*
+ * gdiplusenums.h
+ *
+ * GDI+ enumerations
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_ENUMS_H
+#define __GDIPLUS_ENUMS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum BrushType {
+	BrushTypeSolidColor = 0,
+	BrushTypeHatchFill = 1,
+	BrushTypeTextureFill = 2,
+	BrushTypePathGradient = 3,
+	BrushTypeLinearGradient = 4
+} BrushType;
+
+typedef enum CombineMode {
+	CombineModeReplace = 0,
+	CombineModeIntersect = 1,
+	CombineModeUnion = 2,
+	CombineModeXor = 3,
+	CombineModeExclude = 4,
+	CombineModeComplement = 5
+} CombineMode;
+
+typedef enum CompositingMode {
+	CompositingModeSourceOver = 0,
+	CompositingModeSourceCopy = 1
+} CompositingMode;
+
+typedef enum CompositingQuality {
+	CompositingQualityDefault = 0,
+	CompositingQualityHighSpeed = 1,
+	CompositingQualityHighQuality = 2,
+	CompositingQualityGammaCorrected = 3,
+	CompositingQualityAssumeLinear = 4
+} CompositingQuality;
+
+typedef enum CoordinateSpace {
+	CoordinateSpaceWorld = 0,
+	CoordinateSpacePage = 1,
+	CoordinateSpaceDevice = 2
+} CoordinateSpace;
+
+typedef enum CustomLineCapType {
+	CustomLineCapTypeDefault = 0,
+	CustomLineCapTypeAdjustableArrow = 1
+} CustomLineCapType;
+
+typedef enum DashCap {
+	DashCapFlat = 0,
+	DashCapRound = 2,
+	DashCapTriangle = 3
+} DashCap;
+
+typedef enum DashStyle {
+	DashStyleSolid = 0,
+	DashStyleDash = 1,
+	DashStyleDot = 2,
+	DashStyleDashDot = 3,
+	DashStyleDashDotDot = 4,
+	DashStyleCustom = 5
+} DashStyle;
+
+typedef enum DitherType {
+	DitherTypeNone = 0,
+	DitherTypeSolid = 1,
+	DitherTypeOrdered4x4 = 2,
+	DitherTypeOrdered8x8 = 3,
+	DitherTypeOrdered16x16 = 4,
+	DitherTypeOrdered91x91 = 5,
+	DitherTypeSpiral4x4 = 6,
+	DitherTypeSpiral8x8 = 7,
+	DitherTypeDualSpiral4x4 = 8,
+	DitherTypeDualSpiral8x8 = 9,
+	DitherTypeErrorDiffusion = 10
+} DitherType;
+
+typedef enum DriverStringOptions {
+	DriverStringOptionsCmapLookup = 1,
+	DriverStringOptionsVertical = 2,
+	DriverStringOptionsRealizedAdvance = 4,
+	DriverStringOptionsLimitSubpixel = 8
+} DriverStringOptions;
+
+#define GDIP_WMF_RECORD_TO_EMFPLUS(meta) ((meta) | 0x10000)
+#define GDIP_EMFPLUS_RECORD_BASE (0x4000)
+typedef enum EmfPlusRecordType {
+	WmfRecordTypeSetBkColor                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKCOLOR),
+	WmfRecordTypeSetBkMode                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETBKMODE),
+	WmfRecordTypeSetMapMode                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPMODE),
+	WmfRecordTypeSetROP2                       = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETROP2),
+	WmfRecordTypeSetRelAbs                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETRELABS),
+	WmfRecordTypeSetPolyFillMode               = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPOLYFILLMODE),
+	WmfRecordTypeSetStretchBltMode             = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETSTRETCHBLTMODE),
+	WmfRecordTypeSetTextCharExtra              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCHAREXTRA),
+	WmfRecordTypeSetTextColor                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTCOLOR),
+	WmfRecordTypeSetTextJustification          = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTJUSTIFICATION),
+	WmfRecordTypeSetWindowOrg                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWORG),
+	WmfRecordTypeSetWindowExt                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETWINDOWEXT),
+	WmfRecordTypeSetViewportOrg                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTORG),
+	WmfRecordTypeSetViewportExt                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETVIEWPORTEXT),
+	WmfRecordTypeOffsetWindowOrg               = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETWINDOWORG),
+	WmfRecordTypeScaleWindowExt                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEWINDOWEXT),
+	WmfRecordTypeOffsetViewportOrg             = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETVIEWPORTORG),
+	WmfRecordTypeScaleViewportExt              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SCALEVIEWPORTEXT),
+	WmfRecordTypeLineTo                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_LINETO),
+	WmfRecordTypeMoveTo                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_MOVETO),
+	WmfRecordTypeExcludeClipRect               = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXCLUDECLIPRECT),
+	WmfRecordTypeIntersectClipRect             = GDIP_WMF_RECORD_TO_EMFPLUS(META_INTERSECTCLIPRECT),
+	WmfRecordTypeArc                           = GDIP_WMF_RECORD_TO_EMFPLUS(META_ARC),
+	WmfRecordTypeEllipse                       = GDIP_WMF_RECORD_TO_EMFPLUS(META_ELLIPSE),
+	WmfRecordTypeFloodFill                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_FLOODFILL),
+	WmfRecordTypePie                           = GDIP_WMF_RECORD_TO_EMFPLUS(META_PIE),
+	WmfRecordTypeRectangle                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_RECTANGLE),
+	WmfRecordTypeRoundRect                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_ROUNDRECT),
+	WmfRecordTypePatBlt                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_PATBLT),
+	WmfRecordTypeSaveDC                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_SAVEDC),
+	WmfRecordTypeSetPixel                      = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPIXEL),
+	WmfRecordTypeOffsetClipRgn                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_OFFSETCLIPRGN),
+	WmfRecordTypeTextOut                       = GDIP_WMF_RECORD_TO_EMFPLUS(META_TEXTOUT),
+	WmfRecordTypeBitBlt                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_BITBLT),
+	WmfRecordTypeStretchBlt                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHBLT),
+	WmfRecordTypePolygon                       = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYGON),
+	WmfRecordTypePolyline                      = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYLINE),
+	WmfRecordTypeEscape                        = GDIP_WMF_RECORD_TO_EMFPLUS(META_ESCAPE),
+	WmfRecordTypeRestoreDC                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESTOREDC),
+	WmfRecordTypeFillRegion                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_FILLREGION),
+	WmfRecordTypeFrameRegion                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_FRAMEREGION),
+	WmfRecordTypeInvertRegion                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_INVERTREGION),
+	WmfRecordTypePaintRegion                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_PAINTREGION),
+	WmfRecordTypeSelectClipRegion              = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTCLIPREGION),
+	WmfRecordTypeSelectObject                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTOBJECT),
+	WmfRecordTypeSetTextAlign                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETTEXTALIGN),
+	WmfRecordTypeDrawText                      = GDIP_WMF_RECORD_TO_EMFPLUS(0x062F),
+	WmfRecordTypeChord                         = GDIP_WMF_RECORD_TO_EMFPLUS(META_CHORD),
+	WmfRecordTypeSetMapperFlags                = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETMAPPERFLAGS),
+	WmfRecordTypeExtTextOut                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTTEXTOUT),
+	WmfRecordTypeSetDIBToDev                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETDIBTODEV),
+	WmfRecordTypeSelectPalette                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SELECTPALETTE),
+	WmfRecordTypeRealizePalette                = GDIP_WMF_RECORD_TO_EMFPLUS(META_REALIZEPALETTE),
+	WmfRecordTypeAnimatePalette                = GDIP_WMF_RECORD_TO_EMFPLUS(META_ANIMATEPALETTE),
+	WmfRecordTypeSetPalEntries                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_SETPALENTRIES),
+	WmfRecordTypePolyPolygon                   = GDIP_WMF_RECORD_TO_EMFPLUS(META_POLYPOLYGON),
+	WmfRecordTypeResizePalette                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_RESIZEPALETTE),
+	WmfRecordTypeDIBBitBlt                     = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBBITBLT),
+	WmfRecordTypeDIBStretchBlt                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBSTRETCHBLT),
+	WmfRecordTypeDIBCreatePatternBrush         = GDIP_WMF_RECORD_TO_EMFPLUS(META_DIBCREATEPATTERNBRUSH),
+	WmfRecordTypeStretchDIB                    = GDIP_WMF_RECORD_TO_EMFPLUS(META_STRETCHDIB),
+	WmfRecordTypeExtFloodFill                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_EXTFLOODFILL),
+	WmfRecordTypeSetLayout                     = GDIP_WMF_RECORD_TO_EMFPLUS(0x0149),
+	WmfRecordTypeResetDC                       = GDIP_WMF_RECORD_TO_EMFPLUS(0x014C),
+	WmfRecordTypeStartDoc                      = GDIP_WMF_RECORD_TO_EMFPLUS(0x014D),
+	WmfRecordTypeStartPage                     = GDIP_WMF_RECORD_TO_EMFPLUS(0x004F),
+	WmfRecordTypeEndPage                       = GDIP_WMF_RECORD_TO_EMFPLUS(0x0050),
+	WmfRecordTypeAbortDoc                      = GDIP_WMF_RECORD_TO_EMFPLUS(0x0052),
+	WmfRecordTypeEndDoc                        = GDIP_WMF_RECORD_TO_EMFPLUS(0x005E),
+	WmfRecordTypeDeleteObject                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_DELETEOBJECT),
+	WmfRecordTypeCreatePalette                 = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPALETTE),
+	WmfRecordTypeCreateBrush                   = GDIP_WMF_RECORD_TO_EMFPLUS(0x00F8),
+	WmfRecordTypeCreatePatternBrush            = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPATTERNBRUSH),
+	WmfRecordTypeCreatePenIndirect             = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEPENINDIRECT),
+	WmfRecordTypeCreateFontIndirect            = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEFONTINDIRECT),
+	WmfRecordTypeCreateBrushIndirect           = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEBRUSHINDIRECT),
+	WmfRecordTypeCreateBitmapIndirect          = GDIP_WMF_RECORD_TO_EMFPLUS(0x02FD),
+	WmfRecordTypeCreateBitmap                  = GDIP_WMF_RECORD_TO_EMFPLUS(0x06FE),
+	WmfRecordTypeCreateRegion                  = GDIP_WMF_RECORD_TO_EMFPLUS(META_CREATEREGION),
+	EmfRecordTypeHeader                        = EMR_HEADER,
+	EmfRecordTypePolyBezier                    = EMR_POLYBEZIER,
+	EmfRecordTypePolygon                       = EMR_POLYGON,
+	EmfRecordTypePolyline                      = EMR_POLYLINE,
+	EmfRecordTypePolyBezierTo                  = EMR_POLYBEZIERTO,
+	EmfRecordTypePolyLineTo                    = EMR_POLYLINETO,
+	EmfRecordTypePolyPolyline                  = EMR_POLYPOLYLINE,
+	EmfRecordTypePolyPolygon                   = EMR_POLYPOLYGON,
+	EmfRecordTypeSetWindowExtEx                = EMR_SETWINDOWEXTEX,
+	EmfRecordTypeSetWindowOrgEx                = EMR_SETWINDOWORGEX,
+	EmfRecordTypeSetViewportExtEx              = EMR_SETVIEWPORTEXTEX,
+	EmfRecordTypeSetViewportOrgEx              = EMR_SETVIEWPORTORGEX,
+	EmfRecordTypeSetBrushOrgEx                 = EMR_SETBRUSHORGEX,
+	EmfRecordTypeEOF                           = EMR_EOF,
+	EmfRecordTypeSetPixelV                     = EMR_SETPIXELV,
+	EmfRecordTypeSetMapperFlags                = EMR_SETMAPPERFLAGS,
+	EmfRecordTypeSetMapMode                    = EMR_SETMAPMODE,
+	EmfRecordTypeSetBkMode                     = EMR_SETBKMODE,
+	EmfRecordTypeSetPolyFillMode               = EMR_SETPOLYFILLMODE,
+	EmfRecordTypeSetROP2                       = EMR_SETROP2,
+	EmfRecordTypeSetStretchBltMode             = EMR_SETSTRETCHBLTMODE,
+	EmfRecordTypeSetTextAlign                  = EMR_SETTEXTALIGN,
+	EmfRecordTypeSetColorAdjustment            = EMR_SETCOLORADJUSTMENT,
+	EmfRecordTypeSetTextColor                  = EMR_SETTEXTCOLOR,
+	EmfRecordTypeSetBkColor                    = EMR_SETBKCOLOR,
+	EmfRecordTypeOffsetClipRgn                 = EMR_OFFSETCLIPRGN,
+	EmfRecordTypeMoveToEx                      = EMR_MOVETOEX,
+	EmfRecordTypeSetMetaRgn                    = EMR_SETMETARGN,
+	EmfRecordTypeExcludeClipRect               = EMR_EXCLUDECLIPRECT,
+	EmfRecordTypeIntersectClipRect             = EMR_INTERSECTCLIPRECT,
+	EmfRecordTypeScaleViewportExtEx            = EMR_SCALEVIEWPORTEXTEX,
+	EmfRecordTypeScaleWindowExtEx              = EMR_SCALEWINDOWEXTEX,
+	EmfRecordTypeSaveDC                        = EMR_SAVEDC,
+	EmfRecordTypeRestoreDC                     = EMR_RESTOREDC,
+	EmfRecordTypeSetWorldTransform             = EMR_SETWORLDTRANSFORM,
+	EmfRecordTypeModifyWorldTransform          = EMR_MODIFYWORLDTRANSFORM,
+	EmfRecordTypeSelectObject                  = EMR_SELECTOBJECT,
+	EmfRecordTypeCreatePen                     = EMR_CREATEPEN,
+	EmfRecordTypeCreateBrushIndirect           = EMR_CREATEBRUSHINDIRECT,
+	EmfRecordTypeDeleteObject                  = EMR_DELETEOBJECT,
+	EmfRecordTypeAngleArc                      = EMR_ANGLEARC,
+	EmfRecordTypeEllipse                       = EMR_ELLIPSE,
+	EmfRecordTypeRectangle                     = EMR_RECTANGLE,
+	EmfRecordTypeRoundRect                     = EMR_ROUNDRECT,
+	EmfRecordTypeArc                           = EMR_ARC,
+	EmfRecordTypeChord                         = EMR_CHORD,
+	EmfRecordTypePie                           = EMR_PIE,
+	EmfRecordTypeSelectPalette                 = EMR_SELECTPALETTE,
+	EmfRecordTypeCreatePalette                 = EMR_CREATEPALETTE,
+	EmfRecordTypeSetPaletteEntries             = EMR_SETPALETTEENTRIES,
+	EmfRecordTypeResizePalette                 = EMR_RESIZEPALETTE,
+	EmfRecordTypeRealizePalette                = EMR_REALIZEPALETTE,
+	EmfRecordTypeExtFloodFill                  = EMR_EXTFLOODFILL,
+	EmfRecordTypeLineTo                        = EMR_LINETO,
+	EmfRecordTypeArcTo                         = EMR_ARCTO,
+	EmfRecordTypePolyDraw                      = EMR_POLYDRAW,
+	EmfRecordTypeSetArcDirection               = EMR_SETARCDIRECTION,
+	EmfRecordTypeSetMiterLimit                 = EMR_SETMITERLIMIT,
+	EmfRecordTypeBeginPath                     = EMR_BEGINPATH,
+	EmfRecordTypeEndPath                       = EMR_ENDPATH,
+	EmfRecordTypeCloseFigure                   = EMR_CLOSEFIGURE,
+	EmfRecordTypeFillPath                      = EMR_FILLPATH,
+	EmfRecordTypeStrokeAndFillPath             = EMR_STROKEANDFILLPATH,
+	EmfRecordTypeStrokePath                    = EMR_STROKEPATH,
+	EmfRecordTypeFlattenPath                   = EMR_FLATTENPATH,
+	EmfRecordTypeWidenPath                     = EMR_WIDENPATH,
+	EmfRecordTypeSelectClipPath                = EMR_SELECTCLIPPATH,
+	EmfRecordTypeAbortPath                     = EMR_ABORTPATH,
+	EmfRecordTypeReserved_069                  = 69,
+	EmfRecordTypeGdiComment                    = EMR_GDICOMMENT,
+	EmfRecordTypeFillRgn                       = EMR_FILLRGN,
+	EmfRecordTypeFrameRgn                      = EMR_FRAMERGN,
+	EmfRecordTypeInvertRgn                     = EMR_INVERTRGN,
+	EmfRecordTypePaintRgn                      = EMR_PAINTRGN,
+	EmfRecordTypeExtSelectClipRgn              = EMR_EXTSELECTCLIPRGN,
+	EmfRecordTypeBitBlt                        = EMR_BITBLT,
+	EmfRecordTypeStretchBlt                    = EMR_STRETCHBLT,
+	EmfRecordTypeMaskBlt                       = EMR_MASKBLT,
+	EmfRecordTypePlgBlt                        = EMR_PLGBLT,
+	EmfRecordTypeSetDIBitsToDevice             = EMR_SETDIBITSTODEVICE,
+	EmfRecordTypeStretchDIBits                 = EMR_STRETCHDIBITS,
+	EmfRecordTypeExtCreateFontIndirect         = EMR_EXTCREATEFONTINDIRECTW,
+	EmfRecordTypeExtTextOutA                   = EMR_EXTTEXTOUTA,
+	EmfRecordTypeExtTextOutW                   = EMR_EXTTEXTOUTW,
+	EmfRecordTypePolyBezier16                  = EMR_POLYBEZIER16,
+	EmfRecordTypePolygon16                     = EMR_POLYGON16,
+	EmfRecordTypePolyline16                    = EMR_POLYLINE16,
+	EmfRecordTypePolyBezierTo16                = EMR_POLYBEZIERTO16,
+	EmfRecordTypePolylineTo16                  = EMR_POLYLINETO16,
+	EmfRecordTypePolyPolyline16                = EMR_POLYPOLYLINE16,
+	EmfRecordTypePolyPolygon16                 = EMR_POLYPOLYGON16,
+	EmfRecordTypePolyDraw16                    = EMR_POLYDRAW16,
+	EmfRecordTypeCreateMonoBrush               = EMR_CREATEMONOBRUSH,
+	EmfRecordTypeCreateDIBPatternBrushPt       = EMR_CREATEDIBPATTERNBRUSHPT,
+	EmfRecordTypeExtCreatePen                  = EMR_EXTCREATEPEN,
+	EmfRecordTypePolyTextOutA                  = EMR_POLYTEXTOUTA,
+	EmfRecordTypePolyTextOutW                  = EMR_POLYTEXTOUTW,
+	EmfRecordTypeSetICMMode                    = 98,
+	EmfRecordTypeCreateColorSpace              = 99,
+	EmfRecordTypeSetColorSpace                 = 100,
+	EmfRecordTypeDeleteColorSpace              = 101,
+	EmfRecordTypeGLSRecord                     = 102,
+	EmfRecordTypeGLSBoundedRecord              = 103,
+	EmfRecordTypePixelFormat                   = 104,
+	EmfRecordTypeDrawEscape                    = 105,
+	EmfRecordTypeExtEscape                     = 106,
+	EmfRecordTypeStartDoc                      = 107,
+	EmfRecordTypeSmallTextOut                  = 108,
+	EmfRecordTypeForceUFIMapping               = 109,
+	EmfRecordTypeNamedEscape                   = 110,
+	EmfRecordTypeColorCorrectPalette           = 111,
+	EmfRecordTypeSetICMProfileA                = 112,
+	EmfRecordTypeSetICMProfileW                = 113,
+	EmfRecordTypeAlphaBlend                    = 114,
+	EmfRecordTypeSetLayout                     = 115,
+	EmfRecordTypeTransparentBlt                = 116,
+	EmfRecordTypeReserved_117                  = 117,
+	EmfRecordTypeGradientFill                  = 118,
+	EmfRecordTypeSetLinkedUFIs                 = 119,
+	EmfRecordTypeSetTextJustification          = 120,
+	EmfRecordTypeColorMatchToTargetW           = 121,
+	EmfRecordTypeCreateColorSpaceW             = 122,
+	EmfRecordTypeMax                           = 122,
+	EmfRecordTypeMin                           = 1,
+	EmfPlusRecordTypeInvalid                   = GDIP_EMFPLUS_RECORD_BASE,
+	EmfPlusRecordTypeHeader,
+	EmfPlusRecordTypeEndOfFile,
+	EmfPlusRecordTypeComment,
+	EmfPlusRecordTypeGetDC,
+	EmfPlusRecordTypeMultiFormatStart,
+	EmfPlusRecordTypeMultiFormatSection,
+	EmfPlusRecordTypeMultiFormatEnd,
+	EmfPlusRecordTypeObject,
+	EmfPlusRecordTypeClear,
+	EmfPlusRecordTypeFillRects,
+	EmfPlusRecordTypeDrawRects,
+	EmfPlusRecordTypeFillPolygon,
+	EmfPlusRecordTypeDrawLines,
+	EmfPlusRecordTypeFillEllipse,
+	EmfPlusRecordTypeDrawEllipse,
+	EmfPlusRecordTypeFillPie,
+	EmfPlusRecordTypeDrawPie,
+	EmfPlusRecordTypeDrawArc,
+	EmfPlusRecordTypeFillRegion,
+	EmfPlusRecordTypeFillPath,
+	EmfPlusRecordTypeDrawPath,
+	EmfPlusRecordTypeFillClosedCurve,
+	EmfPlusRecordTypeDrawClosedCurve,
+	EmfPlusRecordTypeDrawCurve,
+	EmfPlusRecordTypeDrawBeziers,
+	EmfPlusRecordTypeDrawImage,
+	EmfPlusRecordTypeDrawImagePoints,
+	EmfPlusRecordTypeDrawString,
+	EmfPlusRecordTypeSetRenderingOrigin,
+	EmfPlusRecordTypeSetAntiAliasMode,
+	EmfPlusRecordTypeSetTextRenderingHint,
+	EmfPlusRecordTypeSetTextContrast,
+	EmfPlusRecordTypeSetGammaValue,
+	EmfPlusRecordTypeSetInterpolationMode,
+	EmfPlusRecordTypeSetPixelOffsetMode,
+	EmfPlusRecordTypeSetCompositingMode,
+	EmfPlusRecordTypeSetCompositingQuality,
+	EmfPlusRecordTypeSave,
+	EmfPlusRecordTypeRestore,
+	EmfPlusRecordTypeBeginContainer,
+	EmfPlusRecordTypeBeginContainerNoParams,
+	EmfPlusRecordTypeEndContainer,
+	EmfPlusRecordTypeSetWorldTransform,
+	EmfPlusRecordTypeResetWorldTransform,
+	EmfPlusRecordTypeMultiplyWorldTransform,
+	EmfPlusRecordTypeTranslateWorldTransform,
+	EmfPlusRecordTypeScaleWorldTransform,
+	EmfPlusRecordTypeRotateWorldTransform,
+	EmfPlusRecordTypeSetPageTransform,
+	EmfPlusRecordTypeResetClip,
+	EmfPlusRecordTypeSetClipRect,
+	EmfPlusRecordTypeSetClipPath,
+	EmfPlusRecordTypeSetClipRegion,
+	EmfPlusRecordTypeOffsetClip,
+	EmfPlusRecordTypeDrawDriverString,
+	EmfPlusRecordTypeStrokeFillPath,
+	EmfPlusRecordTypeSerializableObject,
+	EmfPlusRecordTypeSetTSGraphics,
+	EmfPlusRecordTypeSetTSClip,
+	EmfPlusRecordTotal,
+	EmfPlusRecordTypeMax = EmfPlusRecordTotal-1,
+	EmfPlusRecordTypeMin = EmfPlusRecordTypeHeader
+} EmfPlusRecordType;
+
+typedef enum EmfToWmfBitsFlags {
+	EmfToWmfBitsFlagsDefault = 0,
+	EmfToWmfBitsFlagsEmbedEmf = 1,
+	EmfToWmfBitsFlagsIncludePlaceable = 2,
+	EmfToWmfBitsFlagsNoXORClip = 4
+} EmfToWmfBitsFlags;
+
+typedef enum EmfType {
+	EmfTypeEmfOnly = 3,
+	EmfTypeEmfPlusOnly = 4,
+	EmfTypeEmfPlusDual = 5
+} EmfType;
+
+typedef enum EncoderParameterValueType {
+	EncoderParameterValueTypeByte = 1,
+	EncoderParameterValueTypeASCII = 2,
+	EncoderParameterValueTypeShort = 3,
+	EncoderParameterValueTypeLong = 4,
+	EncoderParameterValueTypeRational = 5,
+	EncoderParameterValueTypeLongRange = 6,
+	EncoderParameterValueTypeUndefined = 7,
+	EncoderParameterValueTypeRationalRange = 8,
+	EncoderParameterValueTypePointer = 9
+} EncoderParameterValueType;
+
+typedef enum EncoderValue {
+	EncoderValueColorTypeCMYK = 0,
+	EncoderValueColorTypeYCCK = 1,
+	EncoderValueCompressionLZW = 2,
+	EncoderValueCompressionCCITT3 = 3,
+	EncoderValueCompressionCCITT4 = 4,
+	EncoderValueCompressionRle = 5,
+	EncoderValueCompressionNone = 6,
+	EncoderValueScanMethodInterlaced = 7,
+	EncoderValueScanMethodNonInterlaced = 8,
+	EncoderValueVersionGif87 = 9,
+	EncoderValueVersionGif89 = 10,
+	EncoderValueRenderProgressive = 11,
+	EncoderValueRenderNonProgressive = 12,
+	EncoderValueTransformRotate90 = 13,
+	EncoderValueTransformRotate180 = 14,
+	EncoderValueTransformRotate270 = 15,
+	EncoderValueTransformFlipHorizontal = 16,
+	EncoderValueTransformFlipVertical = 17,
+	EncoderValueMultiFrame = 18,
+	EncoderValueLastFrame = 19,
+	EncoderValueFlush = 20,
+	EncoderValueFrameDimensionTime = 21,
+	EncoderValueFrameDimensionResolution = 22,
+	EncoderValueFrameDimensionPage = 23
+} EncoderValue;
+
+typedef enum FillMode {
+	FillModeAlternate = 0,
+	FillModeWinding = 1
+} FillMode;
+
+typedef enum FlushIntention {
+	FlushIntentionFlush = 0,
+	FlushIntentionSync = 1
+} FlushIntention;
+
+typedef enum FontStyle {
+	FontStyleRegular = 0,
+	FontStyleBold = 1,
+	FontStyleItalic = 2,
+	FontStyleBoldItalic = 3,
+	FontStyleUnderline = 4,
+	FontStyleStrikeout = 8
+} FontStyle;
+
+typedef enum HatchStyle {
+	HatchStyleHorizontal = 0,
+	HatchStyleVertical = 1,
+	HatchStyleForwardDiagonal = 2,
+	HatchStyleBackwardDiagonal = 3,
+	HatchStyleCross = 4,
+	HatchStyleLargeGrid = 4,
+	HatchStyleDiagonalCross = 5,
+	HatchStyle05Percent = 6,
+	HatchStyle10Percent = 7,
+	HatchStyle20Percent = 8,
+	HatchStyle25Percent = 9,
+	HatchStyle30Percent = 10,
+	HatchStyle40Percent = 11,
+	HatchStyle50Percent = 12,
+	HatchStyle60Percent = 13,
+	HatchStyle70Percent = 14,
+	HatchStyle75Percent = 15,
+	HatchStyle80Percent = 16,
+	HatchStyle90Percent = 17,
+	HatchStyleLightDownwardDiagonal = 18,
+	HatchStyleLightUpwardDiagonal = 19,
+	HatchStyleDarkDownwardDiagonal = 20,
+	HatchStyleDarkUpwardDiagonal = 21,
+	HatchStyleWideDownwardDiagonal = 22,
+	HatchStyleWideUpwardDiagonal = 23,
+	HatchStyleLightVertical = 24,
+	HatchStyleLightHorizontal = 25,
+	HatchStyleNarrowVertical = 26,
+	HatchStyleNarrowHorizontal = 27,
+	HatchStyleDarkVertical = 28,
+	HatchStyleDarkHorizontal = 29,
+	HatchStyleDashedDownwardDiagonal = 30,
+	HatchStyleDashedUpwardDiagonal = 31,
+	HatchStyleDashedHorizontal = 32,
+	HatchStyleDashedVertical = 33,
+	HatchStyleSmallConfetti = 34,
+	HatchStyleLargeConfetti = 35,
+	HatchStyleZigZag = 36,
+	HatchStyleWave = 37,
+	HatchStyleDiagonalBrick = 38,
+	HatchStyleHorizontalBrick = 39,
+	HatchStyleWeave = 40,
+	HatchStylePlaid = 41,
+	HatchStyleDivot = 42,
+	HatchStyleDottedGrid = 43,
+	HatchStyleDottedDiamond = 44,
+	HatchStyleShingle = 45,
+	HatchStyleTrellis = 46,
+	HatchStyleSphere = 47,
+	HatchStyleSmallGrid = 48,
+	HatchStyleSmallCheckerBoard = 49,
+	HatchStyleLargeCheckerBoard = 50,
+	HatchStyleOutlinedDiamond = 51,
+	HatchStyleSolidDiamond = 52,
+	HatchStyleTotal = 53,
+	HatchStyleMin = HatchStyleHorizontal,
+	HatchStyleMax = HatchStyleTotal - 1
+} HatchStyle;
+
+typedef enum HotkeyPrefix {
+	HotkeyPrefixNone = 0,
+	HotkeyPrefixShow = 1,
+	HotkeyPrefixHide = 2
+} HotkeyPrefix;
+
+typedef enum ImageType {
+	ImageTypeUnknown = 0,
+	ImageTypeBitmap = 1,
+	ImageTypeMetafile = 2
+} ImageType;
+
+/* TODO: InterpolationMode */
+typedef enum InterpolationMode {
+	/*InterpolationModeInvalid = QualityModeInvalid,*/
+	InterpolationModeDefault = 0,
+	InterpolationModeLowQuality = 1,
+	InterpolationModeHighQuality = 2,
+	InterpolationModeBilinear = 3,
+	InterpolationModeBicubic = 4,
+	InterpolationModeNearestNeighbor = 5,
+	InterpolationModeHighQualityBilinear = 6,
+	InterpolationModeHighQualityBicubic = 7
+} InterpolationMode;
+
+typedef enum LinearGradientMode {
+	LinearGradientModeHorizontal = 0,
+	LinearGradientModeVertical = 1,
+	LinearGradientModeForwardDiagonal = 2,
+	LinearGradientModeBackwardDiagonal = 3 
+} LinearGradientMode;
+
+typedef enum LineCap {
+	LineCapFlat = 0,
+	LineCapSquare = 1,
+	LineCapRound = 2,
+	LineCapTriangle = 3,
+	LineCapNoAnchor = 16,
+	LineCapSquareAnchor = 17,
+	LineCapRoundAnchor = 18,
+	LineCapDiamondAnchor = 19,
+	LineCapArrowAnchor = 20,
+	LineCapCustom = 255
+} LineCap;
+
+typedef enum LineJoin {
+	LineJoinMiter = 0,
+	LineJoinBevel = 1,
+	LineJoinRound = 2,
+	LineJoinMiterClipped = 3
+} LineJoin;
+
+typedef enum MatrixOrder {
+	MatrixOrderPrepend = 0,
+	MatrixOrderAppend = 1
+} MatrixOrder;
+
+typedef enum MetafileFrameUnit {
+	MetafileFrameUnitPixel = 2,
+	MetafileFrameUnitPoint = 3,
+	MetafileFrameUnitInch = 4,
+	MetafileFrameUnitDocument = 5,
+	MetafileFrameUnitMillimeter = 6,
+	MetafileFrameUnitGdi = 7
+} MetafileFrameUnit;
+
+typedef enum MetafileType {
+	MetafileTypeInvalid = 0,
+	MetafileTypeWmf = 1,
+	MetafileTypeWmfPlaceable = 2,
+	MetafileTypeEmf = 3,
+	MetafileTypeEmfPlusOnly = 4,
+	MetafileTypeEmfPlusDual = 5
+} MetafileType;
+
+typedef enum ObjectType {
+	ObjectTypeInvalid = 0,
+	ObjectTypeBrush = 1,
+	ObjectTypePen = 2,
+	ObjectTypePath = 3,
+	ObjectTypeRegion = 4,
+	ObjectTypeFont = 5,
+	ObjectTypeStringFormat = 6,
+	ObjectTypeImageAttributes = 7,
+	ObjectTypeCustomLineCap = 8,
+	ObjectTypeGraphics = 9,
+	ObjectTypeMin = ObjectTypeBrush,
+	ObjectTypeMax = ObjectTypeGraphics
+} ObjectType;
+
+typedef enum PathPointType {
+	PathPointTypeStart = 0x00,
+	PathPointTypeLine = 0x01,
+	PathPointTypeBezier = 0x03,
+	PathPointTypeBezier3 = 0x03,
+	PathPointTypePathTypeMask = 0x07,
+	PathPointTypePathDashMode = 0x10,
+	PathPointTypePathMarker = 0x20,
+	PathPointTypeCloseSubpath = 0x80
+} PathPointType;
+
+typedef enum PenAlignment {
+	PenAlignmentCenter = 0,
+	PenAlignmentInset = 1
+} PenAlignment;
+
+typedef enum PenType {
+	PenTypeUnknown = -1, 
+	PenTypeSolidColor = 0,
+	PenTypeHatchFill = 1,
+	PenTypeTextureFill = 2,
+	PenTypePathGradient = 3,
+	PenTypeLinearGradient = 4
+} PenType;
+
+/* TODO: PixelOffsetMode */
+typedef enum PixelOffsetMode {
+	/*PixelOffsetModeInvalid = QualityModeInvalid,*/
+	PixelOffsetModeDefault = 0,
+	PixelOffsetModeHighSpeed = 1,
+	PixelOffsetModeHighQuality = 2,
+	PixelOffsetModeNone = 3,
+	PixelOffsetModeHalf = 4
+} PixelOffsetMode;
+
+/* TODO: QualityMode */
+typedef enum QualityMode {
+	/*QualityModeInvalid = ?,*/
+	QualityModeDefault = 0,
+	QualityModeLow = 1,
+	QualityModeHigh = 2
+} QualityMode;
+
+/* TODO: SmoothingMode */
+typedef enum SmoothingMode {
+	/*SmoothingModeInvalid = QualityModeInvalid,*/
+	SmoothingModeDefault = 0,
+	SmoothingModeHighSpeed = 1,
+	SmoothingModeHighQuality = 2,
+	SmoothingModeNone = 3,
+	SmoothingModeAntiAlias8x4 = 4,
+	SmoothingModeAntiAlias = 4,
+	SmoothingModeAntiAlias8x8 = 5
+} SmoothingMode;
+
+typedef enum StringAlignment {
+	StringAlignmentNear = 0,
+	StringAlignmentCenter = 1,
+	StringAlignmentFar = 2
+} StringAlignment;
+
+typedef enum StringDigitSubstitute {
+	StringDigitSubstituteUser = 0,
+	StringDigitSubstituteNone = 1,
+	StringDigitSubstituteNational = 2,
+	StringDigitSubstituteTraditional = 3
+} StringDigitSubstitute;
+
+typedef enum StringFormatFlags {
+	StringFormatFlagsDirectionRightToLeft = 0x00000001,
+	StringFormatFlagsDirectionVertical = 0x00000002,
+	StringFormatFlagsNoFitBlackBox = 0x00000004,
+	StringFormatFlagsDisplayFormatControl = 0x00000020,
+	StringFormatFlagsNoFontFallback = 0x00000400,
+	StringFormatFlagsMeasureTrailingSpaces = 0x00000800,
+	StringFormatFlagsNoWrap = 0x00001000,
+	StringFormatFlagsLineLimit = 0x00002000,
+	StringFormatFlagsNoClip = 0x00004000
+} StringFormatFlags;
+
+typedef enum StringTrimming {
+	StringTrimmingNone = 0,
+	StringTrimmingCharacter = 1,
+	StringTrimmingWord = 2,
+	StringTrimmingEllipsisCharacter = 3,
+	StringTrimmingEllipsisWord = 4,
+	StringTrimmingEllipsisPath = 5
+} StringTrimming;
+
+typedef enum TextRenderingHint {
+	TextRenderingHintSystemDefault = 0,
+	TextRenderingHintSingleBitPerPixelGridFit = 1,
+	TextRenderingHintSingleBitPerPixel = 2,
+	TextRenderingHintAntiAliasGridFit = 3,
+	TextRenderingHintAntiAlias = 4,
+	TextRenderingHintClearTypeGridFit = 5
+} TextRenderingHint;
+
+typedef enum Unit {
+	UnitWorld = 0,
+	UnitDisplay = 1,
+	UnitPixel = 2,
+	UnitPoint = 3,
+	UnitInch = 4,
+	UnitDocument = 5,
+	UnitMillimeter = 6
+} Unit;
+
+typedef enum WarpMode {
+	WarpModePerspective = 0,
+	WarpModeBilinear = 1
+} WarpMode;
+
+typedef enum WrapMode {
+	WrapModeTile = 0,
+	WrapModeTileFlipX = 1,
+	WrapModeTileFlipY = 2,
+	WrapModeTileFlipXY = 3,
+	WrapModeClamp = 4
+} WrapMode;
+
+typedef enum GpTestControlEnum {
+	TestControlForceBilinear = 0,
+	TestControlForceNoICM = 1,
+	TestControlGetBuildNumber = 2
+} GpTestControlEnum;
+
+/* Opaque handles to information blocks on an internal GDI+ stack. */
+typedef DWORD GraphicsContainer;
+typedef DWORD GraphicsState;
+
+/* Default flatness for GraphicsPath methods Flatten, Outline, Warp, Widen */
+/* FIXME: Is FlatnessDefault = 0.25f correct? */
+#ifdef __cplusplus
+const REAL FlatnessDefault = 0.25f;
+#else
+#define FlatnessDefault ((REAL) 0.25f)
+#endif
+
+static __inline__ BOOL ObjectTypeIsValid(ObjectType type)
+{
+	switch (type) {
+		case ObjectTypeBrush:
+		case ObjectTypePen:
+		case ObjectTypePath:
+		case ObjectTypeRegion:
+		case ObjectTypeFont:
+		case ObjectTypeStringFormat:
+		case ObjectTypeImageAttributes:
+		case ObjectTypeCustomLineCap:
+		case ObjectTypeGraphics:
+			return TRUE;
+		default:
+			return FALSE;
+	}
+}
+
+#endif /* __GDIPLUS_ENUMS_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusflat.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusflat.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,722 @@
+/*
+ * gdiplusflat.h
+ *
+ * GDI+ Flat API
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_FLAT_H
+#define __GDIPLUS_FLAT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+namespace DllExports {
+extern "C" {
+#endif
+
+/* AdjustableArrowCap functions */
+GpStatus WINGDIPAPI GdipCreateAdjustableArrowCap(REAL,REAL,BOOL,GpAdjustableArrowCap**);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapHeight(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapWidth(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapMiddleInset(GpAdjustableArrowCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL);
+GpStatus WINGDIPAPI GdipGetAdjustableArrowCapFillState(GpAdjustableArrowCap*,BOOL*);
+
+/* Bitmap functions */
+GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromStreamICM(IStream*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromDirectDrawSurface(IDirectDrawSurface7*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP,HPALETTE,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap*,HBITMAP*,ARGB);
+GpStatus WINGDIPAPI GdipCreateBitmapFromHICON(HICON,GpBitmap**);
+GpStatus WINGDIPAPI GdipCreateHICONFromBitmap(GpBitmap*,HICON*);
+GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCloneBitmapArea(REAL,REAL,REAL,REAL,PixelFormat,GpBitmap*,GpBitmap**);
+GpStatus WINGDIPAPI GdipCloneBitmapAreaI(INT,INT,INT,INT,PixelFormat,GpBitmap*,GpBitmap**);
+GpStatus WINGDIPAPI GdipBitmapLockBits(GpBitmap*,GDIPCONST GpRect*,UINT,PixelFormat,BitmapData*);
+GpStatus WINGDIPAPI GdipBitmapUnlockBits(GpBitmap*,BitmapData*);
+GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*);
+GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB);
+GpStatus WINGDIPAPI GdipBitmapSetResolution(GpBitmap*,REAL,REAL);
+GpStatus WINGDIPAPI GdipBitmapConvertFormat(GpBitmap*,PixelFormat,DitherType,PaletteType,ColorPalette*,REAL);
+GpStatus WINGDIPAPI GdipInitializePalette(ColorPalette*,PaletteType,INT,BOOL,GpBitmap*);
+GpStatus WINGDIPAPI GdipBitmapApplyEffect(GpBitmap*,CGpEffect*,RECT*,BOOL,VOID**,INT*);
+GpStatus WINGDIPAPI GdipBitmapCreateApplyEffect(GpBitmap**,INT,CGpEffect*,RECT*,RECT*,GpBitmap**,BOOL,VOID**,INT*);
+GpStatus WINGDIPAPI GdipBitmapGetHistogram(GpBitmap*,HistogramFormat,UINT,UINT*,UINT*,UINT*,UINT*);
+GpStatus WINGDIPAPI GdipBitmapGetHistogramSize(HistogramFormat,UINT*);
+
+/* Brush functions */
+GpStatus WINGDIPAPI GdipCloneBrush(GpBrush*,GpBrush**);
+GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*);
+GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*);
+
+/* CachedBitmap functions */
+GpStatus WINGDIPAPI GdipCreateCachedBitmap(GpBitmap*,GpGraphics*,GpCachedBitmap**);
+GpStatus WINGDIPAPI GdipDeleteCachedBitmap(GpCachedBitmap*);
+GpStatus WINGDIPAPI GdipDrawCachedBitmap(GpGraphics*,GpCachedBitmap*,INT,INT);
+
+/* CustomLineCap functions */
+GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath*,GpPath*,GpLineCap,REAL,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipCloneCustomLineCap(GpCustomLineCap*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipGetCustomLineCapType(GpCustomLineCap*,CustomLineCapType*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap,GpLineCap);
+GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap*,GpLineCap*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin);
+GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap);
+GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap*,REAL);
+GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*);
+GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap*,REAL);
+GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*);
+
+/* Effect functions */
+GpStatus WINGDIPAPI GdipCreateEffect(GDIPCONST GUID,CGpEffect**);
+GpStatus WINGDIPAPI GdipDeleteEffect(CGpEffect*);
+GpStatus WINGDIPAPI GdipGetEffectParameterSize(CGpEffect*,UINT*);
+GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect*,GDIPCONST VOID*,UINT);
+GpStatus WINGDIPAPI GdipGetEffectParameters(CGpEffect*,UINT*,VOID*);
+
+/* Font functions */
+GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC,GDIPCONST LOGFONTA*,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC,GDIPCONST LOGFONTW*,GpFont**);
+GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily*,REAL,INT,Unit,GpFont**);
+GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**);
+GpStatus WINGDIPAPI GdipDeleteFont(GpFont*);
+GpStatus WINGDIPAPI GdipGetFamily(GpFont*,GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetFontStyle(GpFont*,INT*);
+GpStatus WINGDIPAPI GdipGetFontSize(GpFont*,REAL*);
+GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*,Unit*);
+GpStatus WINGDIPAPI GdipGetFontHeight(GDIPCONST GpFont*,GDIPCONST GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*,REAL,REAL*);
+GpStatus WINGDIPAPI GdipGetLogFontA(GpFont*,GpGraphics*,LOGFONTA*);
+GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*);
+GpStatus WINGDIPAPI GdipNewInstalledFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**);
+GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*,INT*);
+GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*,INT,GpFontFamily**,INT*);
+GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*,GDIPCONST WCHAR*);
+GpStatus WINGDIPAPI GdipPrivateAddMemoryFont(GpFontCollection*,GDIPCONST void*,INT);
+
+/* FontFamily functions */
+GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*,GpFontCollection*,GpFontFamily**);
+GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*);
+GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*,GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**);
+GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*,WCHAR[LF_FACESIZE],LANGID);
+GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily*,INT,BOOL*);
+GpStatus WINGDIPAPI GdipFontCollectionEnumerable(GpFontCollection*,GpGraphics*,INT*);
+GpStatus WINGDIPAPI GdipFontCollectionEnumerate(GpFontCollection*,INT,GpFontFamily**,INT*,GpGraphics*);
+GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*,INT,UINT16*);
+GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*,INT,UINT16*);
+GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*,INT,UINT16*);
+GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*,INT,UINT16*);
+
+/* Graphics functions */
+GpStatus WINGDIPAPI GdipFlush(GpGraphics*,GpFlushIntention);
+GpStatus WINGDIPAPI GdipCreateFromHDC(HDC,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHDC2(HDC,HANDLE,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHWND(HWND,GpGraphics**);
+GpStatus WINGDIPAPI GdipCreateFromHWNDICM(HWND,GpGraphics**);
+GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics*);
+GpStatus WINGDIPAPI GdipGetDC(GpGraphics*,HDC*);
+GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC);
+GpStatus WINGDIPAPI GdipSetCompositingMode(GpGraphics*,CompositingMode);
+GpStatus WINGDIPAPI GdipGetCompositingMode(GpGraphics*,CompositingMode*);
+GpStatus WINGDIPAPI GdipSetRenderingOrigin(GpGraphics*,INT,INT);
+GpStatus WINGDIPAPI GdipGetRenderingOrigin(GpGraphics*,INT*,INT*);
+GpStatus WINGDIPAPI GdipSetCompositingQuality(GpGraphics*,CompositingQuality);
+GpStatus WINGDIPAPI GdipGetCompositingQuality(GpGraphics*,CompositingQuality*);
+GpStatus WINGDIPAPI GdipSetSmoothingMode(GpGraphics*,SmoothingMode);
+GpStatus WINGDIPAPI GdipGetSmoothingMode(GpGraphics*,SmoothingMode*);
+GpStatus WINGDIPAPI GdipSetPixelOffsetMode(GpGraphics*,PixelOffsetMode);
+GpStatus WINGDIPAPI GdipGetPixelOffsetMode(GpGraphics*,PixelOffsetMode*);
+GpStatus WINGDIPAPI GdipSetTextRenderingHint(GpGraphics*,TextRenderingHint);
+GpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics*,TextRenderingHint*);
+GpStatus WINGDIPAPI GdipSetTextContrast(GpGraphics*,UINT);
+GpStatus WINGDIPAPI GdipGetTextContrast(GpGraphics*,UINT*);
+GpStatus WINGDIPAPI GdipSetInterpolationMode(GpGraphics*,InterpolationMode);
+GpStatus WINGDIPAPI GdipGraphicsSetAbort(GpGraphics*,GdiplusAbort*);
+GpStatus WINGDIPAPI GdipGetInterpolationMode(GpGraphics*,InterpolationMode*);
+GpStatus WINGDIPAPI GdipSetWorldTransform(GpGraphics*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics*);
+GpStatus WINGDIPAPI GdipMultiplyWorldTransform(GpGraphics*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslateWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleWorldTransform(GpGraphics*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetPageTransform(GpGraphics*);
+GpStatus WINGDIPAPI GdipGetPageUnit(GpGraphics*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetPageScale(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipSetPageUnit(GpGraphics*,GpUnit);
+GpStatus WINGDIPAPI GdipSetPageScale(GpGraphics*,REAL);
+GpStatus WINGDIPAPI GdipGetDpiX(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics*,REAL*);
+GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics*,GpCoordinateSpace,GpCoordinateSpace,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*,GpCoordinateSpace,GpCoordinateSpace,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipGetNearestColor(GpGraphics*,ARGB*);
+HPALETTE WINGDIPAPI GdipCreateHalftonePalette(void);
+GpStatus WINGDIPAPI GdipDrawLine(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawLineI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawLines(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawLinesI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawArcI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawBezierI(GpGraphics*,GpPen*,INT,INT,INT,INT,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawBeziers(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawRectangle(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawRectangleI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawRectangles(GpGraphics*,GpPen*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipDrawRectanglesI(GpGraphics*,GpPen*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipDrawEllipse(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawEllipseI(GpGraphics*,GpPen*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawPie(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawPieI(GpGraphics*,GpPen*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawPolygon(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawPolygonI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawPath(GpGraphics*,GpPen*,GpPath*);
+GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve3(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawCurve3I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipGraphicsClear(GpGraphics*,ARGB);
+GpStatus WINGDIPAPI GdipFillRectangle(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillRectangleI(GpGraphics*,GpBrush*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipFillRectangles(GpGraphics*,GpBrush*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics*,GpBrush*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipFillPolygon(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT,GpFillMode);
+GpStatus WINGDIPAPI GdipFillPolygonI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT,GpFillMode);
+GpStatus WINGDIPAPI GdipFillPolygon2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipFillPolygon2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFillEllipse(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillEllipseI(GpGraphics*,GpBrush*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipFillPie(GpGraphics*,GpBrush*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillPieI(GpGraphics*,GpBrush*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipFillPath(GpGraphics*,GpBrush*,GpPath*);
+GpStatus WINGDIPAPI GdipFillClosedCurve(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipFillClosedCurveI(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFillClosedCurve2(GpGraphics*,GpBrush*,GDIPCONST GpPointF*,INT,REAL,GpFillMode);
+GpStatus WINGDIPAPI GdipFillClosedCurve2I(GpGraphics*,GpBrush*,GDIPCONST GpPoint*,INT,REAL,GpFillMode);
+GpStatus WINGDIPAPI GdipFillRegion(GpGraphics*,GpBrush*,GpRegion*);
+GpStatus WINGDIPAPI GdipDrawImage(GpGraphics*,GpImage*,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawImageI(GpGraphics*,GpImage*,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImageRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipDrawImageRectI(GpGraphics*,GpImage*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipDrawImagePoints(GpGraphics*,GpImage*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointsI(GpGraphics*,GpImage*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipDrawImagePointRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL,REAL,REAL,GpUnit);
+GpStatus WINGDIPAPI GdipDrawImagePointRectI(GpGraphics*,GpImage*,INT,INT,INT,INT,INT,INT,GpUnit);
+GpStatus WINGDIPAPI GdipDrawImageRectRect(GpGraphics*,GpImage*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImageRectRectI(GpGraphics*,GpImage*,INT,INT,INT,INT,INT,INT,INT,INT,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics*,GpImage*,GDIPCONST GpPointF*,INT,REAL,REAL,REAL,REAL,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImagePointsRectI(GpGraphics*,GpImage*,GDIPCONST GpPoint*,INT,INT,INT,INT,INT,GpUnit,GDIPCONST GpImageAttributes*,DrawImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipDrawImageFX(GpGraphics*,GpImage*,GpRectF*,GpMatrix*,CGpEffect*,GpImageAttributes*,GpUnit);
+#ifdef __cplusplus
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPoint(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST PointF&,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPointI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Point&,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestRect(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST RectF&,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestRectI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Rect&,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+#endif
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPoints(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST PointF*,INT,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileDestPointsI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Point*,INT,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+#ifdef __cplusplus
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPoint(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST PointF&,GDIPCONST RectF&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPointI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Point&,GDIPCONST Rect&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestRect(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST RectF&,GDIPCONST RectF&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestRectI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Rect&,GDIPCONST Rect&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPoints(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST PointF*,INT,GDIPCONST RectF&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+GpStatus WINGDIPAPI GdipEnumerateMetafileSrcRectDestPointsI(GpGraphics*,GDIPCONST GpMetafile*,GDIPCONST Point*,INT,GDIPCONST Rect&,Unit,EnumerateMetafileProc,VOID*,GDIPCONST GpImageAttributes*);
+#endif
+GpStatus WINGDIPAPI GdipSetClipGraphics(GpGraphics*,GpGraphics*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRect(GpGraphics*,REAL,REAL,REAL,REAL,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRectI(GpGraphics*,INT,INT,INT,INT,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipPath(GpGraphics*,GpPath*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipRegion(GpGraphics*,GpRegion*,CombineMode);
+GpStatus WINGDIPAPI GdipSetClipHrgn(GpGraphics*,HRGN,CombineMode);
+GpStatus WINGDIPAPI GdipResetClip(GpGraphics*);
+GpStatus WINGDIPAPI GdipTranslateClip(GpGraphics*,REAL,REAL);
+GpStatus WINGDIPAPI GdipTranslateClipI(GpGraphics*,INT,INT);
+GpStatus WINGDIPAPI GdipGetClip(GpGraphics*,GpRegion*);
+GpStatus WINGDIPAPI GdipGetClipBounds(GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetClipBoundsI(GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipIsClipEmpty(GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipGetVisibleClipBounds(GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetVisibleClipBoundsI(GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipIsVisibleClipEmpty(GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePoint(GpGraphics*,REAL,REAL,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePointI(GpGraphics*,INT,INT,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRect(GpGraphics*,REAL,REAL,REAL,REAL,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRectI(GpGraphics*,INT,INT,INT,INT,BOOL*);
+GpStatus WINGDIPAPI GdipSaveGraphics(GpGraphics*,GraphicsState*);
+GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState);
+GpStatus WINGDIPAPI GdipBeginContainer(GpGraphics*,GDIPCONST GpRectF*,GDIPCONST GpRectF*,GpUnit,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipBeginContainerI(GpGraphics*,GDIPCONST GpRect*,GDIPCONST GpRect*,GpUnit,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipBeginContainer2(GpGraphics*,GraphicsContainer*);
+GpStatus WINGDIPAPI GdipEndContainer(GpGraphics*,GraphicsContainer);
+GpStatus WINGDIPAPI GdipComment(GpGraphics*,UINT,GDIPCONST BYTE*);
+
+/* GraphicsPath functions */
+GpStatus WINGDIPAPI GdipCreatePath(GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipCreatePath2(GDIPCONST GpPointF*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipCreatePath2I(GDIPCONST GpPoint*,GDIPCONST BYTE*,INT,GpFillMode,GpPath**);
+GpStatus WINGDIPAPI GdipClonePath(GpPath*,GpPath**);
+GpStatus WINGDIPAPI GdipDeletePath(GpPath*);
+GpStatus WINGDIPAPI GdipResetPath(GpPath*);
+GpStatus WINGDIPAPI GdipGetPointCount(GpPath*,INT*);
+GpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT);
+GpStatus WINGDIPAPI GdipGetPathPoints(GpPath*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipGetPathPointsI(GpPath*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipGetPathFillMode(GpPath*,GpFillMode*);
+GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode);
+GpStatus WINGDIPAPI GdipGetPathData(GpPath*,GpPathData*);
+GpStatus WINGDIPAPI GdipStartPathFigure(GpPath*);
+GpStatus WINGDIPAPI GdipClosePathFigure(GpPath*);
+GpStatus WINGDIPAPI GdipClosePathFigures(GpPath*);
+GpStatus WINGDIPAPI GdipSetPathMarker(GpPath*);
+GpStatus WINGDIPAPI GdipClearPathMarkers(GpPath*);
+GpStatus WINGDIPAPI GdipReversePath(GpPath*);
+GpStatus WINGDIPAPI GdipGetPathLastPoint(GpPath*,GpPointF*);
+GpStatus WINGDIPAPI GdipAddPathLine(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathLine2(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBezier(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurve(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve3(GpPath*,GDIPCONST GpPointF*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathRectangle(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathRectangles(GpPath*,GDIPCONST GpRectF*,INT);
+GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPie(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPolygon(GpPath*,GDIPCONST GpPointF*,INT);
+GpStatus WINGDIPAPI GdipAddPathPath(GpPath*,GDIPCONST GpPath*,BOOL);
+GpStatus WINGDIPAPI GdipAddPathString(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST RectF*,GDIPCONST GpStringFormat*);
+GpStatus WINGDIPAPI GdipAddPathStringI(GpPath*,GDIPCONST WCHAR*,INT,GDIPCONST GpFontFamily*,INT,REAL,GDIPCONST Rect*,GDIPCONST GpStringFormat*);
+GpStatus WINGDIPAPI GdipAddPathLineI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathLine2I(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathArcI(GpPath*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathBezierI(GpPath*,INT,INT,INT,INT,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathCurve3I(GpPath*,GDIPCONST GpPoint*,INT,INT,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL);
+GpStatus WINGDIPAPI GdipAddPathRectangleI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathRectanglesI(GpPath*,GDIPCONST GpRect*,INT);
+GpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath*,INT,INT,INT,INT);
+GpStatus WINGDIPAPI GdipAddPathPieI(GpPath*,INT,INT,INT,INT,REAL,REAL);
+GpStatus WINGDIPAPI GdipAddPathPolygonI(GpPath*,GDIPCONST GpPoint*,INT);
+GpStatus WINGDIPAPI GdipFlattenPath(GpPath*,GpMatrix*,REAL);
+GpStatus WINGDIPAPI GdipWindingModeOutline(GpPath*,GpMatrix*,REAL);
+GpStatus WINGDIPAPI GdipWidenPath(GpPath*,GpPen*,GpMatrix*,REAL);
+GpStatus WINGDIPAPI GdipWarpPath(GpPath*,GpMatrix*,GDIPCONST GpPointF*,INT,REAL,REAL,REAL,REAL,WarpMode,REAL);
+GpStatus WINGDIPAPI GdipTransformPath(GpPath*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath*,GpRectF*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);
+GpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath*,GpRect*,GDIPCONST GpMatrix*,GDIPCONST GpPen*);
+GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*,GpGraphics*,BOOL*);
+
+/* HatchBrush functions */
+GpStatus WINGDIPAPI GdipCreateHatchBrush(GpHatchStyle,ARGB,ARGB,GpHatch**);
+GpStatus WINGDIPAPI GdipGetHatchStyle(GpHatch*,GpHatchStyle*);
+GpStatus WINGDIPAPI GdipGetHatchForegroundColor(GpHatch*,ARGB*);
+GpStatus WINGDIPAPI GdipGetHatchBackgroundColor(GpHatch*,ARGB*);
+
+/* Image functions */
+GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromStreamICM(IStream*,GpImage**);
+GpStatus WINGDIPAPI GdipLoadImageFromFileICM(GDIPCONST WCHAR*,GpImage**);
+GpStatus WINGDIPAPI GdipCloneImage(GpImage*,GpImage**);
+GpStatus WINGDIPAPI GdipDisposeImage(GpImage*);
+GpStatus WINGDIPAPI GdipSaveImageToFile(GpImage*,GDIPCONST WCHAR*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage*,IStream*,GDIPCONST CLSID*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSaveAdd(GpImage*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipSaveAddImage(GpImage*,GpImage*,GDIPCONST EncoderParameters*);
+GpStatus WINGDIPAPI GdipGetImageGraphicsContext(GpImage*,GpGraphics**);
+GpStatus WINGDIPAPI GdipGetImageBounds(GpImage*,GpRectF*,GpUnit*);
+GpStatus WINGDIPAPI GdipGetImageDimension(GpImage*,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageType(GpImage*,ImageType*);
+GpStatus WINGDIPAPI GdipGetImageWidth(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageHeight(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageHorizontalResolution(GpImage*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageVerticalResolution(GpImage*,REAL*);
+GpStatus WINGDIPAPI GdipGetImageFlags(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageRawFormat(GpImage*,GUID*);
+GpStatus WINGDIPAPI GdipGetImagePixelFormat(GpImage*,PixelFormat*);
+GpStatus WINGDIPAPI GdipGetImageThumbnail(GpImage*,UINT,UINT,GpImage**,GetThumbnailImageAbort,VOID*);
+GpStatus WINGDIPAPI GdipGetEncoderParameterListSize(GpImage*,GDIPCONST CLSID*,UINT*);
+GpStatus WINGDIPAPI GdipGetEncoderParameterList(GpImage*,GDIPCONST CLSID*,UINT,EncoderParameters*);
+GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage*,GUID*,UINT);
+GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage*,GDIPCONST GUID*,UINT*);
+GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage*,GDIPCONST GUID*,UINT);
+GpStatus WINGDIPAPI GdipImageRotateFlip(GpImage*,RotateFlipType);
+GpStatus WINGDIPAPI GdipGetImagePalette(GpImage*,ColorPalette*,INT);
+GpStatus WINGDIPAPI GdipSetImagePalette(GpImage*,GDIPCONST ColorPalette*);
+GpStatus WINGDIPAPI GdipGetImagePaletteSize(GpImage*,INT*);
+GpStatus WINGDIPAPI GdipGetPropertyCount(GpImage*,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertyIdList(GpImage*,UINT,PROPID*);
+GpStatus WINGDIPAPI GdipGetPropertyItemSize(GpImage*,PROPID,UINT*);
+GpStatus WINGDIPAPI GdipGetPropertyItem(GpImage*,PROPID,UINT,PropertyItem*);
+GpStatus WINGDIPAPI GdipGetPropertySize(GpImage*,UINT*,UINT*);
+GpStatus WINGDIPAPI GdipGetAllPropertyItems(GpImage*,UINT,UINT,PropertyItem*);
+GpStatus WINGDIPAPI GdipRemovePropertyItem(GpImage*,PROPID);
+GpStatus WINGDIPAPI GdipSetPropertyItem(GpImage*,GDIPCONST PropertyItem*);
+GpStatus WINGDIPAPI GdipFindFirstImageItem(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipFindNextImageItem(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipGetImageItemData(GpImage*,ImageItemData*);
+GpStatus WINGDIPAPI GdipImageSetAbort(GpImage*,GdiplusAbort*);
+GpStatus WINGDIPAPI GdipImageForceValidation(GpImage*);
+
+/* Image codec functions */
+GpStatus WINGDIPAPI GdipGetImageDecodersSize(UINT*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageDecoders(UINT,UINT,ImageCodecInfo*);
+GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT*,UINT*);
+GpStatus WINGDIPAPI GdipGetImageEncoders(UINT,UINT,ImageCodecInfo*);
+
+/* ImageAttributes functions */
+GpStatus WINGDIPAPI GdipCreateImageAttributes(GpImageAttributes**);
+GpStatus WINGDIPAPI GdipCloneImageAttributes(GDIPCONST GpImageAttributes*,GpImageAttributes**);
+GpStatus WINGDIPAPI GdipDisposeImageAttributes(GpImageAttributes*);
+GpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes*,ColorAdjustType);
+GpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes*,ColorAdjustType);
+GpStatus WINGDIPAPI GdipSetImageAttributesColorMatrix(GpImageAttributes*,ColorAdjustType,BOOL,GDIPCONST ColorMatrix*,GDIPCONST ColorMatrix*,ColorMatrixFlags);
+GpStatus WINGDIPAPI GdipSetImageAttributesThreshold(GpImageAttributes*,ColorAdjustType,BOOL,REAL);
+GpStatus WINGDIPAPI GdipSetImageAttributesGamma(GpImageAttributes*,ColorAdjustType,BOOL,REAL);
+GpStatus WINGDIPAPI GdipSetImageAttributesNoOp(GpImageAttributes*,ColorAdjustType,BOOL);
+GpStatus WINGDIPAPI GdipSetImageAttributesColorKeys(GpImageAttributes*,ColorAdjustType,BOOL,ARGB,ARGB);
+GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannel(GpImageAttributes*,ColorAdjustType,BOOL,ColorChannelFlags);
+GpStatus WINGDIPAPI GdipSetImageAttributesOutputChannelColorProfile(GpImageAttributes*,ColorAdjustType,BOOL,GDIPCONST WCHAR*);
+GpStatus WINGDIPAPI GdipSetImageAttributesRemapTable(GpImageAttributes*,ColorAdjustType,BOOL,UINT,GDIPCONST ColorMap*);
+GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode,ARGB,BOOL);
+GpStatus WINGDIPAPI GdipSetImageAttributesICMMode(GpImageAttributes*,BOOL);
+GpStatus WINGDIPAPI GdipGetImageAttributesAdjustedPalette(GpImageAttributes*,ColorPalette*,ColorAdjustType);
+GpStatus WINGDIPAPI GdipSetImageAttributesCachedBackground(GpImageAttributes*,BOOL);
+
+/* LinearGradientBrush functions */
+GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*,ARGB,ARGB,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushI(GDIPCONST GpPoint*,GDIPCONST GpPoint*,ARGB,ARGB,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB,LinearGradientMode,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB,LinearGradientMode,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*,ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*,ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**);
+GpStatus WINGDIPAPI GdipSetLineColors(GpLineGradient*,ARGB,ARGB);
+GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*);
+GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*);
+GpStatus WINGDIPAPI GdipSetLineGammaCorrection(GpLineGradient*,BOOL);
+GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*);
+GpStatus WINGDIPAPI GdipGetLineBlendCount(GpLineGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetLineBlend(GpLineGradient*,REAL*,REAL*,INT);
+GpStatus WINGDIPAPI GdipSetLineBlend(GpLineGradient*,GDIPCONST REAL*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetLinePresetBlendCount(GpLineGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetLinePresetBlend(GpLineGradient*,ARGB*,REAL*,INT);
+GpStatus WINGDIPAPI GdipSetLinePresetBlend(GpLineGradient*,GDIPCONST ARGB*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetLineSigmaBlend(GpLineGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetLineLinearBlend(GpLineGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetLineWrapMode(GpLineGradient*,GpWrapMode);
+GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipGetLineTransform(GpLineGradient*,GpMatrix*);
+GpStatus WINGDIPAPI GdipSetLineTransform(GpLineGradient*,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipResetLineTransform(GpLineGradient*);
+GpStatus WINGDIPAPI GdipMultiplyLineTransform(GpLineGradient*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslateLineTransform(GpLineGradient*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleLineTransform(GpLineGradient*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateLineTransform(GpLineGradient*,REAL,GpMatrixOrder);
+
+/* Matrix functions */
+GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF*,GDIPCONST GpPointF*,GpMatrix**);
+GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**);
+GpStatus WINGDIPAPI GdipCloneMatrix(GpMatrix*,GpMatrix**);
+GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*);
+GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix*,REAL,REAL,REAL,REAL,REAL,REAL);
+GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix*,GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslateMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateMatrix(GpMatrix*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*);
+GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipVectorTransformMatrixPoints(GpMatrix*,GpPointF*,INT);
+GpStatus WINGDIPAPI GdipVectorTransformMatrixPointsI(GpMatrix*,GpPoint*,INT);
+GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*);
+GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*,BOOL*);
+GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*,BOOL*);
+GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*,GDIPCONST GpMatrix*,BOOL*);
+
+/* Metafile functions */
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromEmf(HENHMETAFILE,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromFile(GDIPCONST WCHAR*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromStream(IStream*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetMetafileHeaderFromMetafile(GpMetafile*,MetafileHeader*);
+GpStatus WINGDIPAPI GdipGetHemfFromMetafile(GpMetafile*,HENHMETAFILE*);
+GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL,GDIPCONST WmfPlaceableFileHeader*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromFile(GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*,GDIPCONST WmfPlaceableFileHeader*,GpMetafile**);
+GpStatus WINGDIPAPI GdipCreateMetafileFromStream(IStream*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafile(HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileI(HDC,EmfType,GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileFileName(GDIPCONST WCHAR*,HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR*,HDC,EmfType,GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileStream(IStream*,HDC,EmfType,GDIPCONST GpRectF*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipRecordMetafileStreamI(IStream*,HDC,EmfType,GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipPlayMetafileRecord(GDIPCONST GpMetafile*,EmfPlusRecordType,UINT,UINT,GDIPCONST BYTE*);
+GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile*,UINT);
+GpStatus WINGDIPAPI GdipGetMetafileDownLevelRasterizationLimit(GDIPCONST GpMetafile*,UINT*);
+GpStatus WINGDIPAPI GdipConvertToEmfPlus(GDIPCONST GpGraphics*,GpMetafile*,BOOL*,EmfType,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(GDIPCONST GpGraphics*,GpMetafile*,BOOL*,GDIPCONST WCHAR*,EmfType,GDIPCONST WCHAR*,GpMetafile**);
+GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(GDIPCONST GpGraphics*,GpMetafile*,BOOL*,IStream*,EmfType,GDIPCONST WCHAR*,GpMetafile**);
+UINT WINGDIPAPI GdipEmfToWmfBits(HENHMETAFILE,UINT,LPBYTE,INT,INT);
+
+/* PathGradientBrush functions */
+GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF*,INT,GpWrapMode,GpPathGradient**);
+GpStatus WINGDIPAPI GdipCreatePathGradientI(GDIPCONST GpPoint*,INT,GpWrapMode,GpPathGradient**);
+GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath*,GpPathGradient**);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterColor(GpPathGradient*,ARGB);
+GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*,ARGB*,INT*);
+GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*,GDIPCONST ARGB*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientPath(GpPathGradient*,GpPath*);
+GpStatus WINGDIPAPI GdipSetPathGradientPath(GpPathGradient*,GDIPCONST GpPath*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*);
+GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterPoint(GpPathGradient*,GDIPCONST GpPointF*);
+GpStatus WINGDIPAPI GdipSetPathGradientCenterPointI(GpPathGradient*,GDIPCONST GpPoint*);
+GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*);
+GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipSetPathGradientGammaCorrection(GpPathGradient*,BOOL);
+GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*);
+GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPathGradientBlend(GpPathGradient*,GDIPCONST REAL*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPathGradientPresetBlendCount(GpPathGradient*,INT*);
+GpStatus WINGDIPAPI GdipGetPathGradientPresetBlend(GpPathGradient*,ARGB*,REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPathGradientPresetBlend(GpPathGradient*,GDIPCONST ARGB*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipSetPathGradientSigmaBlend(GpPathGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipSetPathGradientLinearBlend(GpPathGradient*,REAL,REAL);
+GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode);
+GpStatus WINGDIPAPI GdipGetPathGradientTransform(GpPathGradient*,GpMatrix*);
+GpStatus WINGDIPAPI GdipSetPathGradientTransform(GpPathGradient*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetPathGradientTransform(GpPathGradient*);
+GpStatus WINGDIPAPI GdipMultiplyPathGradientTransform(GpPathGradient*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslatePathGradientTransform(GpPathGradient*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScalePathGradientTransform(GpPathGradient*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotatePathGradientTransform(GpPathGradient*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipSetPathGradientFocusScales(GpPathGradient*,REAL,REAL);
+
+/* PathIterator functions */
+GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*);
+GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*);
+GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterNextSubpathPath(GpPathIterator*,INT*,GpPath*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterNextPathType(GpPathIterator*,INT*,BYTE*,INT*,INT*);
+GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*);
+GpStatus WINGDIPAPI GdipPathIterNextMarkerPath(GpPathIterator*,INT*,GpPath*);
+GpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*);
+GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*);
+GpStatus WINGDIPAPI GdipPathIterIsValid(GpPathIterator*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*);
+GpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*);
+GpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT);
+GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*,INT,INT);
+
+/* Pen functions */
+GpStatus WINGDIPAPI GdipCreatePen1(ARGB,REAL,GpUnit,GpPen**);
+GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**);
+GpStatus WINGDIPAPI GdipClonePen(GpPen*,GpPen**);
+GpStatus WINGDIPAPI GdipDeletePen(GpPen*);
+GpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipGetPenWidth(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipSetPenUnit(GpPen*,GpUnit);
+GpStatus WINGDIPAPI GdipGetPenUnit(GpPen*,GpUnit*);
+GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap);
+GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap);
+GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap);
+GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap);
+GpStatus WINGDIPAPI GdipGetPenStartCap(GpPen*,GpLineCap*);
+GpStatus WINGDIPAPI GdipGetPenEndCap(GpPen*,GpLineCap*);
+GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen*,GpDashCap*);
+GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin);
+GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen*,GpLineJoin*);
+GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*);
+GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**);
+GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment);
+GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*);
+GpStatus WINGDIPAPI GdipSetPenTransform(GpPen*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetPenTransform(GpPen*,GpMatrix*);
+GpStatus WINGDIPAPI GdipResetPenTransform(GpPen*);
+GpStatus WINGDIPAPI GdipMultiplyPenTransform(GpPen*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslatePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScalePenTransform(GpPen*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotatePenTransform(GpPen*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB);
+GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*);
+GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*);
+GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**);
+GpStatus WINGDIPAPI GdipGetPenFillType(GpPen*,GpPenType*);
+GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*);
+GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle);
+GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*);
+GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL);
+GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*);
+GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPenCompoundCount(GpPen*,INT*);
+GpStatus WINGDIPAPI GdipSetPenCompoundArray(GpPen*,GDIPCONST REAL*,INT);
+GpStatus WINGDIPAPI GdipGetPenCompoundArray(GpPen*,REAL*,INT);
+
+/* Region functions */
+GpStatus WINGDIPAPI GdipCreateRegion(GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF*,GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect*,GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath*,GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionRgnData(GDIPCONST BYTE*,INT,GpRegion**);
+GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN,GpRegion**);
+GpStatus WINGDIPAPI GdipCloneRegion(GpRegion*,GpRegion**);
+GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion*);
+GpStatus WINGDIPAPI GdipSetInfinite(GpRegion*);
+GpStatus WINGDIPAPI GdipSetEmpty(GpRegion*);
+GpStatus WINGDIPAPI GdipCombineRegionRect(GpRegion*,GDIPCONST GpRectF*,CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion*,GDIPCONST GpRect*,CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionPath(GpRegion*,GpPath*,CombineMode);
+GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion*,GpRegion*,CombineMode);
+GpStatus WINGDIPAPI GdipTranslateRegion(GpRegion*,REAL,REAL);
+GpStatus WINGDIPAPI GdipTranslateRegionI(GpRegion*,INT,INT);
+GpStatus WINGDIPAPI GdipTransformRegion(GpRegion*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion*,GpGraphics*,GpRectF*);
+GpStatus WINGDIPAPI GdipGetRegionBoundsI(GpRegion*,GpGraphics*,GpRect*);
+GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion*,GpGraphics*,HRGN*);
+GpStatus WINGDIPAPI GdipIsEmptyRegion(GpRegion*,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion*,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsEqualRegion(GpRegion*,GpRegion*,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion*,UINT*);
+GpStatus WINGDIPAPI GdipGetRegionData(GpRegion*,BYTE*,UINT,UINT*);
+GpStatus WINGDIPAPI GdipIsVisibleRegionPoint(GpRegion*,REAL,REAL,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRegionPointI(GpRegion*,INT,INT,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRegionRect(GpRegion*,REAL,REAL,REAL,REAL,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipIsVisibleRegionRectI(GpRegion*,INT,INT,INT,INT,GpGraphics*,BOOL*);
+GpStatus WINGDIPAPI GdipGetRegionScansCount(GpRegion*,UINT*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetRegionScans(GpRegion*,GpRectF*,INT*,GpMatrix*);
+GpStatus WINGDIPAPI GdipGetRegionScansI(GpRegion*,GpRect*,INT*,GpMatrix*);
+
+/* SolidBrush functions */
+GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB,GpSolidFill**);
+GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB);
+GpStatus WINGDIPAPI GdipGetSolidFillColor(GpSolidFill*,ARGB*);
+
+/* StringFormat functions */
+GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**);
+GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat**);
+GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat**);
+GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*);
+GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**);
+GpStatus WINGDIPAPI GdipSetStringFormatFlags(GpStringFormat*,INT);
+GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment);
+GpStatus WINGDIPAPI GdipGetStringFormatAlign(GDIPCONST GpStringFormat*,StringAlignment*);
+GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment);
+GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GDIPCONST GpStringFormat*,StringAlignment*);
+GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming);
+GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GDIPCONST GpStringFormat*,StringTrimming*);
+GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT);
+GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*);
+GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*);
+GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute);
+GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*,StringDigitSubstitute*);
+GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount(GDIPCONST GpStringFormat*,INT*);
+GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(GpStringFormat*,INT,GDIPCONST CharacterRange*);
+
+/* Text functions */
+GpStatus WINGDIPAPI GdipDrawString(GpGraphics*,GDIPCONST WCHAR*,INT,GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,GDIPCONST GpBrush*);
+GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT,GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*);
+#ifdef __cplusplus
+GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*,GDIPCONST WCHAR*,INT,GDIPCONST GpFont*,GDIPCONST RectF&,GDIPCONST GpStringFormat*,INT,GpRegion**);
+#endif
+GpStatus WINGDIPAPI GdipDrawDriverString(GpGraphics*,GDIPCONST UINT16*,INT,GDIPCONST GpFont*,GDIPCONST GpBrush*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipMeasureDriverString(GpGraphics*,GDIPCONST UINT16*,INT,GDIPCONST GpFont*,GDIPCONST PointF*,INT,GDIPCONST GpMatrix*,RectF*);
+
+/* TextureBrush functions */
+GpStatus WINGDIPAPI GdipCreateTexture(GpImage*,GpWrapMode,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTexture2(GpImage*,GpWrapMode,REAL,REAL,REAL,REAL,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTexture2I(GpImage*,GpWrapMode,INT,INT,INT,INT,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTextureIA(GpImage*,GDIPCONST GpImageAttributes*,REAL,REAL,REAL,REAL,GpTexture**);
+GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*,INT,INT,INT,INT,GpTexture**);
+GpStatus WINGDIPAPI GdipGetTextureTransform(GpTexture*,GpMatrix*);
+GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture*,GDIPCONST GpMatrix*);
+GpStatus WINGDIPAPI GdipResetTextureTransform(GpTexture*);
+GpStatus WINGDIPAPI GdipMultiplyTextureTransform(GpTexture*,GDIPCONST GpMatrix*,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipTranslateTextureTransform(GpTexture*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipScaleTextureTransform(GpTexture*,REAL,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipRotateTextureTransform(GpTexture*,REAL,GpMatrixOrder);
+GpStatus WINGDIPAPI GdipSetTextureWrapMode(GpTexture*,GpWrapMode);
+GpStatus WINGDIPAPI GdipGetTextureWrapMode(GpTexture*,GpWrapMode*);
+GpStatus WINGDIPAPI GdipGetTextureImage(GpTexture*,GpImage**);
+
+/* uncategorized functions */
+GpStatus WINGDIPAPI GdipTestControl(GpTestControlEnum,void*);
+
+#ifdef __cplusplus
+}  /* extern "C" */
+}  /* namespace DllExports */
+#endif
+
+#endif /* __GDIPLUS_FLAT_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusgpstubs.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusgpstubs.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,139 @@
+/*
+ * gdiplusgpstubs.h
+ *
+ * GDI+ Gp* type declarations
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_GPSTUBS_H
+#define __GDIPLUS_GPSTUBS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef Point GpPoint;
+typedef PointF GpPointF;
+typedef Rect GpRect;
+typedef RectF GpRectF;
+typedef Size GpSize;
+typedef SizeF GpSizeF;
+
+typedef enum BrushType GpBrushType;
+typedef enum CombineMode GpCombineMode;
+typedef enum CompositingMode GpCompositingMode;
+typedef enum CompositingQuality GpCompositingQuality;
+typedef enum CoordinateSpace GpCoordinateSpace;
+typedef enum CustomLineCapType GpCustomLineCapType;
+typedef enum DashCap GpDashCap;
+typedef enum DashStyle GpDashStyle;
+typedef enum DitherType GpDitherType;
+typedef enum DriverStringOptions GpDriverStringOptions;
+typedef enum EmfPlusRecordType GpEmfPlusRecordType;
+typedef enum EmfToWmfBitsFlags GpEmfToWmfBitsFlags;
+typedef enum EmfType GpEmfType;
+typedef enum EncoderParameterValueType GpEncoderParameterValueType;
+typedef enum EncoderValue GpEncoderValue;
+typedef enum FillMode GpFillMode;
+typedef enum FlushIntention GpFlushIntention;
+typedef enum FontStyle GpFontStyle;
+typedef enum HatchStyle GpHatchStyle;
+typedef enum HotkeyPrefix GpHotkeyPrefix;
+typedef enum ImageType GpImageType;
+typedef enum InterpolationMode GpInterpolationMode;
+typedef enum LinearGradientMode GpLinearGradientMode;
+typedef enum LineCap GpLineCap;
+typedef enum LineJoin GpLineJoin;
+typedef enum MatrixOrder GpMatrixOrder;
+typedef enum MetafileFrameUnit GpMetafileFrameUnit;
+typedef enum MetafileType GpMetafileType;
+typedef enum ObjectType GpObjectType;
+typedef enum PathPointType GpPathPointType;
+typedef enum PenAlignment GpPenAlignment;
+typedef enum PenType GpPenType;
+typedef enum PixelOffsetMode GpPixelOffsetMode;
+typedef enum QualityMode GpQualityMode;
+typedef enum SmoothingMode GpSmoothingMode;
+typedef enum StringAlignment GpStringAlignment;
+typedef enum StringDigitSubstitute GpStringDigitSubstitute;
+typedef enum StringFormatFlags GpStringFormatFlags;
+typedef enum StringTrimming GpStringTrimming;
+typedef enum TextRenderingHint GpTextRenderingHint;
+typedef enum Unit GpUnit;
+typedef enum WarpMode GpWarpMode;
+typedef enum WrapMode GpWrapMode;
+
+#ifdef __cplusplus
+
+class CGpEffect {}; 
+class GpCustomLineCap {};
+class GpImage {};
+
+class GpAdjustableArrowCap: public GpCustomLineCap {};
+class GpBitmap: public GpImage {};
+class GpBrush {};
+class GpCachedBitmap {};
+class GpFont {};
+class GpFontCollection {};
+class GpFontFamily {};
+class GpGraphics {};
+class GpHatch: public GpBrush {};         /* HatchBrush */
+class GpImageAttributes {};
+class GpLineGradient: public GpBrush {};  /* LinearGradientBrush */
+class GpMatrix {};
+class GpMetafile: public GpImage {};
+class GpPath {};                          /* GraphicsPath */
+class GpPathData {};
+class GpPathGradient: public GpBrush {};  /* PathGradientBrush */
+class GpPathIterator {};                  /* GraphicsPathIterator */
+class GpPen {};
+class GpRegion {};
+class GpSolidFill: public GpBrush {};     /* SolidBrush */
+class GpStringFormat {};
+class GpTexture: public GpBrush {};       /* TextureBrush */
+
+#else /* !__cplusplus */
+
+typedef void CGpEffect;
+typedef void GpAdjustableArrowCap;
+typedef void GpBitmap;
+typedef void GpBrush;
+typedef void GpCachedBitmap;
+typedef void GpCustomLineCap;
+typedef void GpFont;
+typedef void GpFontFamily;
+typedef void GpFontCollection;
+typedef void GpGraphics;
+typedef void GpHatch;
+typedef void GpImage;
+typedef void GpImageAttributes;
+typedef void GpLineGradient;
+typedef void GpMatrix;
+typedef void GpMetafile;
+typedef void GpPath;
+typedef void GpPathData;
+typedef void GpPathGradient;
+typedef void GpPathIterator;
+typedef void GpPen;
+typedef void GpRegion;
+typedef void GpSolidFill;
+typedef void GpStringFormat;
+typedef void GpTexture;
+
+#endif /* !__cplusplus */
+
+#endif /* __GDIPLUS_GPSTUBS_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusgraphics.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusgraphics.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,1540 @@
+/*
+ * gdiplusgraphics.h
+ *
+ * GDI+ Graphics class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_GRAPHICS_H
+#define __GDIPLUS_GRAPHICS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusgraphics.h."
+#endif
+
+class Graphics: public GdiplusBase
+{
+	friend class Bitmap;
+	friend class CachedBitmap;
+	friend class Font;
+	friend class GraphicsPath;
+	friend class Metafile;
+	friend class Region;
+
+public:
+	static Graphics* FromHDC(HDC hdc)
+	{
+		return new Graphics(hdc);
+	}
+	static Graphics* FromHDC(HDC hdc, HANDLE hdevice)
+	{
+		return new Graphics(hdc, hdevice);
+	}
+	static Graphics* FromHWND(HWND hwnd, BOOL icm = FALSE)
+	{
+		return new Graphics(hwnd, icm);
+	}
+	static Graphics* FromImage(Image *image)
+	{
+		return new Graphics(image);
+	}
+	static HPALETTE GetHalftonePalette()
+	{
+		return DllExports::GdipCreateHalftonePalette();
+	}
+
+	Graphics(Image *image): nativeGraphics(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipGetImageGraphicsContext(
+				image ? image->nativeImage : NULL,
+				&nativeGraphics);
+	}
+	Graphics(HDC hdc): nativeGraphics(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateFromHDC(
+				hdc, &nativeGraphics);
+	}
+	Graphics(HDC hdc, HANDLE hdevice): nativeGraphics(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateFromHDC2(
+				hdc, hdevice, &nativeGraphics);
+	}
+	Graphics(HWND hwnd, BOOL icm = FALSE):
+		nativeGraphics(NULL), lastStatus(Ok)
+	{
+		if (icm) {
+			lastStatus = DllExports::GdipCreateFromHWNDICM(
+					hwnd, &nativeGraphics);
+		} else {
+			lastStatus = DllExports::GdipCreateFromHWND(
+					hwnd, &nativeGraphics);
+		}
+	}
+	~Graphics()
+	{
+		DllExports::GdipDeleteGraphics(nativeGraphics);
+	}
+
+	Status AddMetafileComment(const BYTE *data, UINT sizeData)
+	{
+		return updateStatus(DllExports::GdipComment(
+				nativeGraphics, sizeData, data));
+	}
+	GraphicsContainer BeginContainer()
+	{
+		GraphicsContainer result = 0;
+		updateStatus(DllExports::GdipBeginContainer2(
+				nativeGraphics, &result));
+		return result;
+	}
+	GraphicsContainer BeginContainer(const RectF& dstrect,
+			const RectF& srcrect, Unit unit)
+	{
+		GraphicsContainer result = 0;
+		updateStatus(DllExports::GdipBeginContainer(
+				nativeGraphics, &dstrect, &srcrect, unit,
+				&result));
+		return result;
+	}
+	GraphicsContainer BeginContainer(const Rect& dstrect,
+			const Rect& srcrect, Unit unit)
+	{
+		GraphicsContainer result = 0;
+		updateStatus(DllExports::GdipBeginContainerI(
+				nativeGraphics, &dstrect, &srcrect, unit,
+				&result));
+		return result;
+	}
+	Status Clear(const Color& color)
+	{
+		return updateStatus(DllExports::GdipGraphicsClear(
+				nativeGraphics, color.GetValue()));
+	}
+	Status DrawArc(const Pen *pen, REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawArc(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status DrawArc(const Pen *pen, INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawArcI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status DrawArc(const Pen *pen, const RectF& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawArc(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status DrawArc(const Pen *pen, const Rect& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawArcI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status DrawBezier(const Pen *pen,
+			REAL x1, REAL y1, REAL x2, REAL y2,
+			REAL x3, REAL y3, REAL x4, REAL y4)
+	{
+		return updateStatus(DllExports::GdipDrawBezier(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x1, y1, x2, y2, x3, y3, x4, y4));
+	}
+	Status DrawBezier(const Pen *pen,
+			INT x1, INT y1, INT x2, INT y2,
+			INT x3, INT y3, INT x4, INT y4)
+	{
+		return updateStatus(DllExports::GdipDrawBezierI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x1, y1, x2, y2, x3, y3, x4, y4));
+	}
+	Status DrawBezier(const Pen *pen,
+			const PointF& pt1, const PointF& pt2,
+			const PointF& pt3, const PointF& pt4)
+	{
+		return updateStatus(DllExports::GdipDrawBezier(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				pt1.X, pt1.Y, pt2.X, pt2.Y,
+				pt3.X, pt3.Y, pt4.X, pt4.Y));
+	}
+	Status DrawBezier(const Pen *pen,
+			const Point& pt1, const Point& pt2,
+			const Point& pt3, const Point& pt4)
+	{
+		return updateStatus(DllExports::GdipDrawBezierI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				pt1.X, pt1.Y, pt2.X, pt2.Y,
+				pt3.X, pt3.Y, pt4.X, pt4.Y));
+	}
+	Status DrawBeziers(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawBeziers(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawBeziers(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawBeziersI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawCachedBitmap(CachedBitmap *cb, INT x, INT y)
+	{
+		return updateStatus(DllExports::GdipDrawCachedBitmap(
+				nativeGraphics,
+				cb ? cb->nativeCachedBitmap : NULL,
+				x, y));
+	}
+	Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawClosedCurve(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawClosedCurve(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawClosedCurveI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawClosedCurve(const Pen *pen, const PointF *points, INT count,
+			REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawClosedCurve2(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, tension));
+	}
+	Status DrawClosedCurve(const Pen *pen, const Point *points, INT count,
+			REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawClosedCurve2I(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, tension));
+	}
+	Status DrawCurve(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawCurve(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawCurve(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawCurveI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawCurve(const Pen *pen, const PointF *points, INT count,
+			REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawCurve2(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, tension));
+	}
+	Status DrawCurve(const Pen *pen, const Point *points, INT count,
+			REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawCurve2I(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, tension));
+	}
+	Status DrawCurve(const Pen *pen, const PointF *points, INT count,
+			INT offset, INT numberOfSegments, REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawCurve3(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, offset,
+				numberOfSegments, tension));
+	}
+	Status DrawCurve(const Pen *pen, const Point *points, INT count,
+			INT offset, INT numberOfSegments, REAL tension)
+	{
+		return updateStatus(DllExports::GdipDrawCurve3I(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count, offset,
+				numberOfSegments, tension));
+	}
+	Status DrawDriverString(const UINT16 *text, INT length,
+			const Font *font, const Brush *brush,
+			const PointF *positions, INT flags,
+			const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipDrawDriverString(
+				nativeGraphics, text, length,
+				font ? font->nativeFont : NULL,
+				brush ? brush->nativeBrush : NULL,
+				positions, flags,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status DrawEllipse(const Pen *pen,
+			REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipDrawEllipse(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height));
+	}
+	Status DrawEllipse(const Pen *pen, INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipDrawEllipseI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height));
+	}
+	Status DrawEllipse(const Pen *pen, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipDrawEllipse(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawEllipse(const Pen *pen, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipDrawEllipseI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawImage(Image *image, REAL x, REAL y)
+	{
+		return updateStatus(DllExports::GdipDrawImage(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y));
+	}
+	Status DrawImage(Image *image, INT x, INT y)
+	{
+		return updateStatus(DllExports::GdipDrawImageI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y));
+	}
+	Status DrawImage(Image *image, const PointF& point)
+	{
+		return updateStatus(DllExports::GdipDrawImage(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				point.X, point.Y));
+	}
+	Status DrawImage(Image *image, const Point& point)
+	{
+		return updateStatus(DllExports::GdipDrawImageI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				point.X, point.Y));
+	}
+	Status DrawImage(Image *image, REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipDrawImageRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y, width, height));
+	}
+	Status DrawImage(Image *image, INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y, width, height));
+	}
+	Status DrawImage(Image *image, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipDrawImageRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawImage(Image *image, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawImage(Image *image, const PointF *destPoints, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawImagePoints(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destPoints, count));
+	}
+	Status DrawImage(Image *image, const Point *destPoints, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointsI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destPoints, count));
+	}
+	Status DrawImage(Image *image, REAL x, REAL y, REAL srcx, REAL srcy,
+			REAL srcwidth, REAL srcheight, Unit srcUnit)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y, srcx, srcy, srcwidth, srcheight,
+				srcUnit));
+	}
+	Status DrawImage(Image *image, INT x, INT y, INT srcx, INT srcy,
+			INT srcwidth, INT srcheight, Unit srcUnit)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				x, y, srcx, srcy, srcwidth, srcheight,
+				srcUnit));
+	}
+	Status DrawImage(Image *image, const RectF& destRect,
+			REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight,
+			Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL,
+			DrawImageAbort callback = NULL,
+			VOID *callbackData = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destRect.X, destRect.Y,
+				destRect.Width, destRect.Height,
+				srcx, srcy, srcwidth, srcheight, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				callback, callbackData));
+	}
+	Status DrawImage(Image *image, const Rect& destRect,
+			INT srcx, INT srcy, INT srcwidth, INT srcheight,
+			Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL,
+			DrawImageAbort callback = NULL,
+			VOID *callbackData = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destRect.X, destRect.Y,
+				destRect.Width, destRect.Height,
+				srcx, srcy, srcwidth, srcheight, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				callback, callbackData));
+	}
+	Status DrawImage(Image *image, const RectF& destRect,
+			const RectF& sourceRect, Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImageRectRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destRect.X, destRect.Y,
+				destRect.Width, destRect.Height,
+				sourceRect.X, sourceRect.Y,
+				sourceRect.Width, sourceRect.Height, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				NULL, NULL));
+	}
+	Status DrawImage(Image *image, const PointF *destPoints, INT count,
+			REAL srcx, REAL srcy, REAL srcwidth, REAL srcheight,
+			Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL,
+			DrawImageAbort callback = NULL,
+			VOID *callbackData = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointsRect(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destPoints, count,
+				srcx, srcy, srcwidth, srcheight, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				callback, callbackData));
+	}
+	Status DrawImage(Image *image, const Point *destPoints, INT count,
+			INT srcx, INT srcy, INT srcwidth, INT srcheight,
+			Unit srcUnit,
+			const ImageAttributes *imageAttributes = NULL,
+			DrawImageAbort callback = NULL,
+			VOID *callbackData = NULL)
+	{
+		return updateStatus(DllExports::GdipDrawImagePointsRectI(
+				nativeGraphics,
+				image ? image->nativeImage : NULL,
+				destPoints, count,
+				srcx, srcy, srcwidth, srcheight, srcUnit,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+				callback, callbackData));
+	}
+	// TODO: [GDI+ 1.1] Graphics::DrawImage(..Effect..)
+	//Status DrawImage(Image *image, RectF *sourceRect, Matrix *matrix,
+	//		Effect *effect, ImageAttributes *imageAttributes,
+	//		Unit srcUnit)
+	//{
+	//	return updateStatus(DllExports::GdipDrawImageFX(
+	//			nativeGraphics,
+	//			image ? image->nativeImage : NULL,
+	//			sourceRect,
+	//			matrix ? matrix->nativeMatrix : NULL,
+	//			effect ? effect->nativeEffect : NULL,
+	//			imageAttributes ? imageAttributes->nativeImageAttributes : NULL,
+	//			srcUnit));
+	//}
+	Status DrawLine(const Pen *pen, REAL x1, REAL y1, REAL x2, REAL y2)
+	{
+		return updateStatus(DllExports::GdipDrawLine(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x1, y1, x2, y2));
+	}
+	Status DrawLine(const Pen *pen, INT x1, INT y1, INT x2, INT y2)
+	{
+		return updateStatus(DllExports::GdipDrawLineI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x1, y1, x2, y2));
+	}
+	Status DrawLine(const Pen *pen, const PointF& pt1, const PointF& pt2)
+	{
+		return updateStatus(DllExports::GdipDrawLine(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				pt1.X, pt1.Y, pt2.X, pt2.Y));
+	}
+	Status DrawLine(const Pen *pen, const Point& pt1, const Point& pt2)
+	{
+		return updateStatus(DllExports::GdipDrawLineI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				pt1.X, pt1.Y, pt2.X, pt2.Y));
+	}
+	Status DrawLines(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawLines(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawLines(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawLinesI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawPath(const Pen *pen, const GraphicsPath *path)
+	{
+		return updateStatus(DllExports::GdipDrawPath(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				path ? path->nativePath : NULL));
+	}
+	Status DrawPie(const Pen *pen, REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawPie(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status DrawPie(const Pen *pen, INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawPieI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status DrawPie(const Pen *pen, const RectF& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawPie(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status DrawPie(const Pen *pen, const Rect& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipDrawPieI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status DrawPolygon(const Pen *pen, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawPolygon(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawPolygon(const Pen *pen, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawPolygonI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				points, count));
+	}
+	Status DrawRectangle(const Pen *pen,
+			REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipDrawRectangle(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height));
+	}
+	Status DrawRectangle(const Pen *pen,
+			INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipDrawRectangleI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				x, y, width, height));
+	}
+	Status DrawRectangle(const Pen *pen, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipDrawRectangle(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawRectangle(const Pen *pen, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipDrawRectangleI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status DrawRectangles(const Pen *pen, const RectF *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawRectangles(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rects, count));
+	}
+	Status DrawRectangles(const Pen *pen, const Rect *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipDrawRectanglesI(
+				nativeGraphics, pen ? pen->nativePen : NULL,
+				rects, count));
+	}
+	Status DrawString(const WCHAR *string, INT length, const Font *font,
+			const PointF& origin, const Brush *brush)
+	{
+		RectF layoutRect(origin.X, origin.Y, 0.0f, 0.0f);
+		return updateStatus(DllExports::GdipDrawString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect, NULL,
+				brush ? brush->nativeBrush : NULL));
+	}
+	Status DrawString(const WCHAR *string, INT length,
+			const Font *font, const PointF& origin,
+			const StringFormat *stringFormat, const Brush *brush)
+	{
+		RectF layoutRect(origin.X, origin.Y, 0.0f, 0.0f);
+		return updateStatus(DllExports::GdipDrawString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				brush ? brush->nativeBrush : NULL));
+	}
+	Status DrawString(const WCHAR *string, INT length,
+			const Font *font, const RectF& layoutRect,
+			const StringFormat *stringFormat, const Brush *brush)
+	{
+		return updateStatus(DllExports::GdipDrawString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				brush ? brush->nativeBrush : NULL));
+	}
+	Status EndContainer(GraphicsContainer state)
+	{
+		return updateStatus(DllExports::GdipEndContainer(
+				nativeGraphics, state));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const PointF& destPoint,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestPoint(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoint, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Point& destPoint,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestPointI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoint, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const RectF& destRect,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestRect(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destRect, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Rect& destRect,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestRectI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destRect, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const PointF *destPoints, INT count,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestPoints(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoints, count, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Point *destPoints, INT count,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileDestPointsI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoints, count, callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const PointF& destPoint,
+			const RectF& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoint(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoint, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Point& destPoint,
+			const Rect& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoint, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const RectF& destRect,
+			const RectF& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestRect(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destRect, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Rect& destRect,
+			const Rect& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestRectI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destRect, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const PointF* destPoints, INT count,
+			const RectF& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPoints(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoints, count, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status EnumerateMetafile(const Metafile *metafile,
+			const Point* destPoints, INT count,
+			const Rect& srcRect, Unit srcUnit,
+			EnumerateMetafileProc callback,
+			VOID *callbackData = NULL,
+			ImageAttributes *imageAttributes = NULL)
+	{
+		return updateStatus(DllExports::GdipEnumerateMetafileSrcRectDestPointsI(
+				nativeGraphics,
+				metafile ? ((GpMetafile*) metafile->nativeImage) : NULL,
+				destPoints, count, srcRect, srcUnit,
+				callback, callbackData,
+				imageAttributes ? imageAttributes->nativeImageAttributes : NULL));
+	}
+	Status ExcludeClip(const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipSetClipRect(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				CombineModeExclude));
+	}
+	Status ExcludeClip(const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipSetClipRectI(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				CombineModeExclude));
+	}
+	Status ExcludeClip(const Region *region)
+	{
+		return updateStatus(DllExports::GdipSetClipRegion(
+				nativeGraphics,
+				region ? region->nativeRegion : NULL,
+				CombineModeExclude));
+	}
+	Status FillClosedCurve(const Brush *brush,
+			const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipFillClosedCurve(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count));
+	}
+	Status FillClosedCurve(const Brush *brush,
+			const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipFillClosedCurveI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count));
+	}
+	Status FillClosedCurve(const Brush *brush,
+			const PointF *points, INT count,
+			FillMode fillMode, REAL tension = 0.5f)
+	{
+		return updateStatus(DllExports::GdipFillClosedCurve2(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, tension, fillMode));
+	}
+	Status FillClosedCurve(const Brush *brush,
+			const Point *points, INT count,
+			FillMode fillMode, REAL tension = 0.5f)
+	{
+		return updateStatus(DllExports::GdipFillClosedCurve2I(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, tension, fillMode));
+	}
+	Status FillEllipse(const Brush *brush,
+			REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipFillEllipse(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height));
+	}
+	Status FillEllipse(const Brush *brush,
+			INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipFillEllipseI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height));
+	}
+	Status FillEllipse(const Brush *brush, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipFillEllipse(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status FillEllipse(const Brush *brush, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipFillEllipseI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status FillPath(const Brush *brush, const GraphicsPath *path)
+	{
+		return updateStatus(DllExports::GdipFillPath(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				path ? path->nativePath : NULL));
+	}
+	Status FillPie(const Brush *brush,
+			REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipFillPie(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status FillPie(const Brush *brush, INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipFillPieI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status FillPie(const Brush *brush, const RectF& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipFillPie(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status FillPie(const Brush *brush, const Rect& rect,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipFillPieI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status FillPolygon(const Brush *brush, const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipFillPolygon(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, FillModeAlternate));
+	}
+	Status FillPolygon(const Brush *brush, const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipFillPolygonI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, FillModeAlternate));
+	}
+	Status FillPolygon(const Brush *brush, const PointF *points, INT count,
+			FillMode fillMode)
+	{
+		return updateStatus(DllExports::GdipFillPolygon(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, fillMode));
+	}
+	Status FillPolygon(const Brush *brush, const Point *points, INT count,
+			FillMode fillMode)
+	{
+		return updateStatus(DllExports::GdipFillPolygonI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				points, count, fillMode));
+	}
+	Status FillRectangle(const Brush *brush,
+			REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipFillRectangle(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height));
+	}
+	Status FillRectangle(const Brush *brush,
+			INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipFillRectangleI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				x, y, width, height));
+	}
+	Status FillRectangle(const Brush *brush, const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipFillRectangle(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status FillRectangle(const Brush *brush, const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipFillRectangleI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status FillRectangles(const Brush *brush, const RectF *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipFillRectangles(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rects, count));
+	}
+	Status FillRectangles(const Brush *brush, const Rect *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipFillRectanglesI(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				rects, count));
+	}
+	Status FillRegion(const Brush *brush, const Region *region)
+	{
+		return updateStatus(DllExports::GdipFillRegion(
+				nativeGraphics,
+				brush ? brush->nativeBrush : NULL,
+				region ? region->nativeRegion : NULL));
+	}
+	VOID Flush(FlushIntention intention = FlushIntentionFlush)
+	{
+		updateStatus(DllExports::GdipFlush(nativeGraphics, intention));
+	}
+	Status GetClip(Region *region) const
+	{
+		return updateStatus(DllExports::GdipGetClip(
+				nativeGraphics,
+				region ? region->nativeRegion : NULL));
+	}
+	Status GetClipBounds(RectF *rect) const
+	{
+		return updateStatus(DllExports::GdipGetClipBounds(
+				nativeGraphics, rect));
+	}
+	Status GetClipBounds(Rect *rect) const
+	{
+		return updateStatus(DllExports::GdipGetClipBoundsI(
+				nativeGraphics, rect));
+	}
+	CompositingMode GetCompositingMode() const
+	{
+		CompositingMode result = CompositingModeSourceOver;
+		updateStatus(DllExports::GdipGetCompositingMode(
+				nativeGraphics, &result));
+		return result;
+	}
+	CompositingQuality GetCompositingQuality() const
+	{
+		CompositingQuality result = CompositingQualityDefault;
+		updateStatus(DllExports::GdipGetCompositingQuality(
+				nativeGraphics, &result));
+		return result;
+	}
+	REAL GetDpiX() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetDpiX(nativeGraphics, &result));
+		return result;
+	}
+	REAL GetDpiY() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetDpiY(nativeGraphics, &result));
+		return result;
+	}
+	HDC GetHDC()
+	{
+		HDC result = NULL;
+		updateStatus(DllExports::GdipGetDC(nativeGraphics, &result));
+		return result;
+	}
+	InterpolationMode GetInterpolationMode() const
+	{
+		InterpolationMode result = InterpolationModeDefault;
+		updateStatus(DllExports::GdipGetInterpolationMode(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	Status GetNearestColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetNearestColor(
+				nativeGraphics, color ? &color->Value : NULL));
+	}
+	REAL GetPageScale() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetPageScale(
+				nativeGraphics, &result));
+		return result;
+	}
+	Unit GetPageUnit() const
+	{
+		Unit result = UnitWorld;
+		updateStatus(DllExports::GdipGetPageUnit(
+				nativeGraphics, &result));
+		return result;
+	}
+	PixelOffsetMode GetPixelOffsetMode() const
+	{
+		PixelOffsetMode result = PixelOffsetModeDefault;
+		updateStatus(DllExports::GdipGetPixelOffsetMode(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status GetRenderingOrigin(INT *x, INT *y) const
+	{
+		return updateStatus(DllExports::GdipGetRenderingOrigin(
+				nativeGraphics, x, y));
+	}
+	SmoothingMode GetSmoothingMode() const
+	{
+		SmoothingMode result = SmoothingModeDefault;
+		updateStatus(DllExports::GdipGetSmoothingMode(
+				nativeGraphics, &result));
+		return result;
+	}
+	UINT GetTextContrast() const
+	{
+		UINT result = 0;
+		updateStatus(DllExports::GdipGetTextContrast(
+				nativeGraphics, &result));
+		return result;
+	}
+	TextRenderingHint GetTextRenderingHint() const
+	{
+		TextRenderingHint result = TextRenderingHintSystemDefault;
+		updateStatus(DllExports::GdipGetTextRenderingHint(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status GetTransform(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetWorldTransform(
+				nativeGraphics,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status GetVisibleClipBounds(RectF *rect) const
+	{
+		return updateStatus(DllExports::GdipGetVisibleClipBounds(
+				nativeGraphics, rect));
+	}
+	Status GetVisibleClipBounds(Rect *rect) const
+	{
+		return updateStatus(DllExports::GdipGetVisibleClipBoundsI(
+				nativeGraphics, rect));
+	}
+	Status IntersectClip(const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipSetClipRect(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				CombineModeIntersect));
+	}
+	Status IntersectClip(const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipSetClipRectI(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				CombineModeIntersect));
+	}
+	Status IntersectClip(const Region *region)
+	{
+		return updateStatus(DllExports::GdipSetClipRegion(
+				nativeGraphics,
+				region ? region->nativeRegion : NULL,
+				CombineModeIntersect));
+	}
+	BOOL IsClipEmpty() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsClipEmpty(
+				nativeGraphics, &result));
+		return result;
+	}
+	BOOL IsVisible(REAL x, REAL y) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisiblePoint(
+				nativeGraphics, x, y, &result));
+		return result;
+	}
+	BOOL IsVisible(INT x, INT y) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisiblePointI(
+				nativeGraphics, x, y, &result));
+		return result;
+	}
+	BOOL IsVisible(const PointF& point) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisiblePoint(
+				nativeGraphics, point.X, point.Y, &result));
+		return result;
+	}
+	BOOL IsVisible(const Point& point) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisiblePointI(
+				nativeGraphics, point.X, point.Y, &result));
+		return result;
+	}
+	BOOL IsVisible(REAL x, REAL y, REAL width, REAL height) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleRect(
+				nativeGraphics, x, y, width, height, &result));
+		return result;
+	}
+	BOOL IsVisible(INT x, INT y, INT width, INT height) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleRectI(
+				nativeGraphics, x, y, width, height, &result));
+		return result;
+	}
+	BOOL IsVisible(const RectF& rect) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleRect(
+				nativeGraphics, rect.X, rect.Y,
+				rect.Width, rect.Height, &result));
+		return result;
+	}
+	BOOL IsVisible(const Rect& rect) const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleRectI(
+				nativeGraphics, rect.X, rect.Y,
+				rect.Width, rect.Height, &result));
+		return result;
+	}
+	BOOL IsVisibleClipEmpty() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipIsVisibleClipEmpty(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status MeasureCharacterRanges(const WCHAR *string, INT length,
+			const Font *font, const RectF& layoutRect,
+			const StringFormat *stringFormat,
+			INT regionCount, Region *regions) const
+	{
+		if (regionCount <= 0 || !regions)
+			return lastStatus = InvalidParameter;
+
+		GpRegion **nativeRegionArray = (GpRegion**)
+			DllExports::GdipAlloc(regionCount * sizeof(GpRegion*));
+		if (!nativeRegionArray)
+			return lastStatus = OutOfMemory;
+		for (int i = 0; i < regionCount; ++i) {
+			nativeRegionArray[i] = regions[i].nativeRegion;
+		}
+		Status status = updateStatus(DllExports::GdipMeasureCharacterRanges(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				regionCount, nativeRegionArray));
+		DllExports::GdipFree(nativeRegionArray);
+		return status;
+	}
+	Status MeasureDriverString(const UINT16 *text, INT length,
+			const Font *font, const PointF *positions, INT flags,
+			const Matrix *matrix, RectF *boundingBox) const
+	{
+		return updateStatus(DllExports::GdipMeasureDriverString(
+				nativeGraphics, text, length,
+				font ? font->nativeFont : NULL,
+				positions, flags,
+				matrix ? matrix->nativeMatrix : NULL,
+				boundingBox));
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const RectF& layoutRect,
+			RectF *boundingBox) const
+	{
+		return updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect, NULL, boundingBox, NULL, NULL));
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const RectF& layoutRect,
+			const StringFormat *stringFormat, RectF *boundingBox,
+			INT *codepointsFitted = NULL,
+			INT *linesFitted = NULL) const
+	{
+		return updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				boundingBox, codepointsFitted, linesFitted));
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const SizeF& layoutRectSize,
+			const StringFormat *stringFormat, SizeF *size,
+			INT *codepointsFitted = NULL,
+			INT *linesFitted = NULL) const
+	{
+		if (!size) return lastStatus = InvalidParameter;
+		RectF layoutRect(PointF(0.0f, 0.0f), layoutRectSize);
+		RectF boundingBox;
+		Status status = updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				&boundingBox, codepointsFitted, linesFitted));
+		boundingBox.GetSize(size);
+		return status;
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const PointF& origin,
+			RectF *boundingBox) const
+	{
+		RectF layoutRect(origin, SizeF(0.0f, 0.0f));
+		return updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect, NULL, boundingBox, NULL, NULL));
+	}
+	Status MeasureString(const WCHAR *string, INT length,
+			const Font *font, const PointF& origin,
+			const StringFormat *stringFormat,
+			RectF *boundingBox) const
+	{
+		RectF layoutRect(origin, SizeF(0.0f, 0.0f));
+		return updateStatus(DllExports::GdipMeasureString(
+				nativeGraphics, string, length,
+				font ? font->nativeFont : NULL,
+				&layoutRect,
+				stringFormat ? stringFormat->nativeStringFormat : NULL,
+				boundingBox, NULL, NULL));
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyWorldTransform(
+				nativeGraphics,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	VOID ReleaseHDC(HDC hdc)
+	{
+		updateStatus(DllExports::GdipReleaseDC(nativeGraphics, hdc));
+	}
+	Status ResetClip()
+	{
+		return updateStatus(DllExports::GdipResetClip(nativeGraphics));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetWorldTransform(
+				nativeGraphics));
+	}
+	Status Restore(GraphicsState state)
+	{
+		return updateStatus(DllExports::GdipRestoreGraphics(
+				nativeGraphics, state));
+	}
+	Status RotateTransform(REAL angle,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotateWorldTransform(
+				nativeGraphics, angle, order));
+	}
+	GraphicsState Save() const
+	{
+		GraphicsState result = 0;
+		updateStatus(DllExports::GdipSaveGraphics(
+				nativeGraphics, &result));
+		return result;
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScaleWorldTransform(
+				nativeGraphics, sx, sy, order));
+	}
+	VOID SetAbort()
+	{
+		updateStatus(NotImplemented);
+	}
+	Status SetClip(const Graphics *g,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipGraphics(
+				nativeGraphics, g ? g->nativeGraphics : NULL,
+				combineMode));
+	}
+	Status SetClip(const RectF& rect,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipRect(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				combineMode));
+	}
+	Status SetClip(const Rect& rect,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipRectI(
+				nativeGraphics,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				combineMode));
+	}
+	Status SetClip(const GraphicsPath *path,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipPath(
+				nativeGraphics,
+				path ? path->nativePath : NULL,
+				combineMode));
+	}
+	Status SetClip(const Region *region,
+			CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipRegion(
+				nativeGraphics,
+				region ? region->nativeRegion : NULL,
+				combineMode));
+	}
+	Status SetClip(HRGN hRgn, CombineMode combineMode = CombineModeReplace)
+	{
+		return updateStatus(DllExports::GdipSetClipHrgn(
+				nativeGraphics, hRgn, combineMode));
+	}
+	Status SetCompositingMode(CompositingMode compositingMode)
+	{
+		return updateStatus(DllExports::GdipSetCompositingMode(
+				nativeGraphics, compositingMode));
+	}
+	Status SetCompositingQuality(CompositingQuality compositingQuality)
+	{
+		return updateStatus(DllExports::GdipSetCompositingQuality(
+				nativeGraphics, compositingQuality));
+	}
+	Status SetInterpolationMode(InterpolationMode interpolationMode)
+	{
+		return updateStatus(DllExports::GdipSetInterpolationMode(
+				nativeGraphics, interpolationMode));
+	}
+	Status SetPageScale(REAL scale)
+	{
+		return updateStatus(DllExports::GdipSetPageScale(
+				nativeGraphics, scale));
+	}
+	Status SetPageUnit(Unit unit)
+	{
+		return updateStatus(DllExports::GdipSetPageUnit(
+				nativeGraphics, unit));
+	}
+	Status SetPixelOffsetMode(PixelOffsetMode pixelOffsetMode)
+	{
+		return updateStatus(DllExports::GdipSetPixelOffsetMode(
+				nativeGraphics, pixelOffsetMode));
+	}
+	Status SetRenderingOrigin(INT x, INT y)
+	{
+		return updateStatus(DllExports::GdipSetRenderingOrigin(
+				nativeGraphics, x, y));
+	}
+	Status SetSmoothingMode(SmoothingMode smoothingMode)
+	{
+		return updateStatus(DllExports::GdipSetSmoothingMode(
+				nativeGraphics, smoothingMode));
+	}
+	Status SetTextContrast(UINT contrast)
+	{
+		return updateStatus(DllExports::GdipSetTextContrast(
+				nativeGraphics, contrast));
+	}
+	Status SetTextRenderingHint(TextRenderingHint textRenderingHint)
+	{
+		return updateStatus(DllExports::GdipSetTextRenderingHint(
+				nativeGraphics, textRenderingHint));
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetWorldTransform(
+				nativeGraphics,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status TransformPoints(CoordinateSpace destSpace,
+			CoordinateSpace srcSpace,
+			PointF *pts, INT count) const
+	{
+		return updateStatus(DllExports::GdipTransformPoints(
+				nativeGraphics, destSpace, srcSpace,
+				pts, count));
+	}
+	Status TransformPoints(CoordinateSpace destSpace,
+			CoordinateSpace srcSpace,
+			Point *pts, INT count) const
+	{
+		return updateStatus(DllExports::GdipTransformPointsI(
+				nativeGraphics, destSpace, srcSpace,
+				pts, count));
+	}
+	Status TranslateClip(REAL dx, REAL dy)
+	{
+		return updateStatus(DllExports::GdipTranslateClip(
+				nativeGraphics, dx, dy));
+	}
+	Status TranslateClip(INT dx, INT dy)
+	{
+		return updateStatus(DllExports::GdipTranslateClipI(
+				nativeGraphics, dx, dy));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslateWorldTransform(
+				nativeGraphics, dx, dy, order));
+	}
+
+private:
+	Graphics(const Graphics&);
+	Graphics& operator=(const Graphics&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpGraphics *nativeGraphics;
+	mutable Status lastStatus;
+};
+
+#endif /* __GDIPLUS_GRAPHICS_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusheaders.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusheaders.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,581 @@
+/*
+ * gdiplusheaders.h
+ *
+ * GDI+ Bitmap, CachedBitmap, CustomLineCap, Font, FontCollection,
+ *      FontFamily, Image, InstalledFontCollection, PrivateFontCollection,
+ *      Region class definitions.
+ *      Implementation of these classes is in gdiplusimpl.h.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_HEADERS_H
+#define __GDIPLUS_HEADERS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusheaders.h."
+#endif
+
+/*
+ * Note: Virtual inline functions (dtors, Clone()) are implemented here: If
+ * these were defined outside class scope, the compiler would always generate
+ * code for them (and the vtable), even if these classes were never used.
+ */
+
+class Bitmap;
+class Effect;
+class FontCollection;
+class FontFamily;
+class Graphics;
+class GraphicsPath;
+class Matrix;
+class Pen;
+
+class Image: public GdiplusBase
+{
+	friend class Bitmap;
+	friend class Metafile;
+	friend class CachedBitmap;
+	friend class Graphics;
+	friend class TextureBrush;
+
+public:
+	static Image* FromFile(const WCHAR *filename,
+			BOOL useEmbeddedColorManagement = FALSE);
+	static Image* FromStream(IStream *stream,
+			BOOL useEmbeddedColorManagement = FALSE);
+
+	Image(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE);
+	Image(IStream *stream, BOOL useEmbeddedColorManagement = FALSE);
+
+	virtual ~Image()
+	{
+		DllExports::GdipDisposeImage(nativeImage);
+	}
+	virtual Image* Clone() const
+	{
+		GpImage *cloneImage = NULL;
+		Status status = updateStatus(DllExports::GdipCloneImage(
+				nativeImage, &cloneImage));
+		if (status == Ok) {
+			Image *result = new Image(cloneImage, lastStatus);
+			if (!result) {
+				DllExports::GdipDisposeImage(cloneImage);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status FindFirstItem(ImageItemData *item);
+	Status FindNextItem(ImageItemData *item);
+	Status GetAllPropertyItems(UINT totalBufferSize,
+			UINT numProperties, PropertyItem *allItems);
+	Status GetBounds(RectF *srcRect, Unit *srcUnit);
+	Status GetEncoderParameterList(const CLSID *clsidEncoder,
+			UINT size, EncoderParameters *buffer);
+	UINT GetEncoderParameterListSize(const CLSID *clsidEncoder);
+	UINT GetFlags();
+	UINT GetFrameCount(const GUID *dimensionID);
+	UINT GetFrameDimensionsCount();
+	Status GetFrameDimensionsList(GUID *dimensionIDs, UINT count);
+	UINT GetHeight();
+	REAL GetHorizontalResolution();
+	Status GetItemData(ImageItemData *item);
+	Status GetPalette(ColorPalette *palette, INT size);
+	INT GetPaletteSize();
+	Status GetPhysicalDimension(SizeF *size);
+	PixelFormat GetPixelFormat();
+	UINT GetPropertyCount();
+	Status GetPropertyIdList(UINT numOfProperty, PROPID *list);
+	Status GetPropertyItem(PROPID propId, UINT propSize,
+			PropertyItem *buffer);
+	UINT GetPropertyItemSize(PROPID propId);
+	Status GetPropertySize(UINT *totalBufferSize, UINT *numProperties);
+	Status GetRawFormat(GUID *format);
+	Image* GetThumbnailImage(UINT thumbWidth, UINT thumbHeight,
+			GetThumbnailImageAbort callback, VOID *callbackData);
+	ImageType GetType() const;
+	REAL GetVerticalResolution();
+	UINT GetWidth();
+	Status RemovePropertyItem(PROPID propId);
+	Status RotateFlip(RotateFlipType rotateFlipType);
+	Status Save(IStream *stream, const CLSID *clsidEncoder,
+			const EncoderParameters *encoderParams);
+	Status Save(const WCHAR *filename, const CLSID *clsidEncoder,
+			const EncoderParameters *encoderParams);
+	Status SaveAdd(const EncoderParameters *encoderParams);
+	Status SaveAdd(Image *newImage, const EncoderParameters *encoderParams);
+	Status SelectActiveFrame(const GUID *dimensionID, UINT frameIndex);
+	Status SetAbort(GdiplusAbort *pIAbort);
+	Status SetPalette(const ColorPalette *palette);
+	Status SetPropertyItem(const PropertyItem *item);
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+
+private:
+	Image(GpImage *image, Status status):
+		nativeImage(image), lastStatus(status) {}
+	Image(const Image&);
+	Image& operator=(const Image&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpImage *nativeImage;
+	mutable Status lastStatus;
+};
+
+class Bitmap: public Image
+{
+public:
+	static Bitmap* FromBITMAPINFO(const BITMAPINFO *gdiBitmapInfo,
+			VOID *gdiBitmapData);
+	static Bitmap* FromDirectDrawSurface7(IDirectDrawSurface7 *surface);
+	static Bitmap* FromFile(const WCHAR *filename,
+			BOOL useEmbeddedColorManagement = FALSE);
+	static Bitmap* FromHBITMAP(HBITMAP hbm, HPALETTE hpal);
+	static Bitmap* FromHICON(HICON icon);
+	static Bitmap* FromResource(HINSTANCE hInstance,
+			const WCHAR *bitmapName);
+	static Bitmap* FromStream(IStream *stream,
+			BOOL useEmbeddedColorManagement = FALSE);
+	static Status ApplyEffect(Bitmap **inputs, INT numInputs,
+			Effect *effect, RECT *ROI,
+			RECT *outputRect, Bitmap **output);
+	static Status InitializePalette(ColorPalette *palette,
+			PaletteType paletteType, INT optimalColors,
+			BOOL useTransparentColor, Bitmap *bitmap);
+
+	Bitmap(const BITMAPINFO *gdiBitmapInfo, VOID *gdiBitmapData);
+	Bitmap(IDirectDrawSurface7 *surface);
+	Bitmap(const WCHAR *filename, BOOL useEmbeddedColorManagement = FALSE);
+	Bitmap(HBITMAP hbm, HPALETTE hpal);
+	Bitmap(HICON hicon);
+	Bitmap(HINSTANCE hInstance, const WCHAR *bitmapName);
+	Bitmap(IStream *stream, BOOL useEmbeddedColorManagement = FALSE);
+	Bitmap(INT width, INT height, Graphics *target);
+	Bitmap(INT width, INT height, PixelFormat format = PixelFormat32bppARGB);
+	Bitmap(INT width, INT height, INT stride, PixelFormat format, BYTE *scan0);
+
+	virtual ~Bitmap()
+	{
+	}
+	virtual Bitmap* Clone() const
+	{
+		GpImage *cloneImage = NULL;
+		Status status = updateStatus(DllExports::GdipCloneImage(
+				nativeImage, &cloneImage));
+		if (status == Ok) {
+			Bitmap *result = new Bitmap(cloneImage, lastStatus);
+			if (!result) {
+				DllExports::GdipDisposeImage(cloneImage);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Bitmap* Clone(const RectF& rect, PixelFormat format) const;
+	Bitmap* Clone(const Rect& rect, PixelFormat format) const;
+	Bitmap* Clone(REAL x, REAL y, REAL width, REAL height,
+			PixelFormat format) const;
+	Bitmap* Clone(INT x, INT y, INT width, INT height,
+			PixelFormat format) const;
+
+	Status ApplyEffect(Effect *effect, RECT *ROI);
+	Status ConvertFormat(PixelFormat format, DitherType ditherType,
+			PaletteType paletteType, ColorPalette *palette,
+			REAL alphaThresholdPercent);
+	Status GetHBITMAP(const Color& colorBackground, HBITMAP *hbmReturn) const;
+	Status GetHICON(HICON *icon) const;
+	Status GetHistogram(HistogramFormat format, UINT numberOfEntries,
+			UINT *channel0, UINT *channel1,
+			UINT *channel2, UINT *channel3) const;
+	Status GetHistogramSize(HistogramFormat format,
+			UINT *numberOfEntries) const;
+	Status GetPixel(INT x, INT y, Color *color) const;
+	Status LockBits(const Rect *rect, UINT flags, PixelFormat format,
+			BitmapData *lockedBitmapData);
+	Status SetPixel(INT x, INT y, const Color& color);
+	Status SetResolution(REAL xdpi, REAL ydpi);
+	Status UnlockBits(BitmapData *lcokedBitmapData);
+
+private:
+	Bitmap(GpImage *image, Status status): Image(image, status) {}
+	Bitmap(const Bitmap&);
+	Bitmap& operator=(const Bitmap&);
+};
+
+class CachedBitmap: public GdiplusBase
+{
+	friend class Graphics;
+
+public:
+	CachedBitmap(Bitmap *bitmap, Graphics *graphics);
+	~CachedBitmap();
+
+	Status GetLastStatus() const
+	{
+		return lastStatus;
+	}
+
+private:
+	CachedBitmap(const CachedBitmap&);
+	CachedBitmap& operator=(const CachedBitmap&);
+
+	GpCachedBitmap *nativeCachedBitmap;
+	Status lastStatus;
+};
+
+class CustomLineCap: public GdiplusBase
+{
+	friend class AdjustableArrowCap;
+	friend class Pen;
+
+public:
+	CustomLineCap(const GraphicsPath *fillPath,
+			const GraphicsPath *strokePath,
+			LineCap baseCap = LineCapFlat,
+			REAL baseInset = 0.0f);
+
+	virtual ~CustomLineCap()
+	{
+		DllExports::GdipDeleteCustomLineCap(nativeCustomLineCap);
+	}
+	virtual CustomLineCap* Clone() const
+	{
+		GpCustomLineCap *cloneCustomLineCap = NULL;
+		Status status = updateStatus(DllExports::GdipCloneCustomLineCap(
+				nativeCustomLineCap, &cloneCustomLineCap));
+		if (status == Ok) {
+			CustomLineCap *result = new CustomLineCap(
+					cloneCustomLineCap, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteCustomLineCap(cloneCustomLineCap);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	LineCap GetBaseCap() const;
+	REAL GetBaseInset() const;
+	Status GetStrokeCaps(LineCap *startCap, LineCap *endCap) const;
+	LineJoin GetStrokeJoin() const;
+	REAL GetWidthScale() const;
+	Status SetBaseCap(LineCap baseCap);
+	Status SetBaseInset(REAL inset);
+	Status SetStrokeCap(LineCap strokeCap);
+	Status SetStrokeCaps(LineCap startCap, LineCap endCap);
+	Status SetStrokeJoin(LineJoin lineJoin);
+	Status SetWidthScale(REAL widthScale);
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+
+private:
+	CustomLineCap(GpCustomLineCap *customLineCap, Status status):
+		nativeCustomLineCap(customLineCap), lastStatus(status) {}
+	CustomLineCap(const CustomLineCap&);
+	CustomLineCap& operator=(const CustomLineCap&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpCustomLineCap *nativeCustomLineCap;
+	mutable Status lastStatus;
+};
+
+class Font: public GdiplusBase
+{
+	friend class Graphics;
+
+public:
+	Font(const FontFamily *family, REAL emSize,
+			INT style = FontStyleRegular,
+			Unit unit = UnitPoint);
+	Font(HDC hdc, HFONT hfont);
+	Font(HDC hdc, const LOGFONTA *logfont);
+	Font(HDC hdc, const LOGFONTW *logfont);
+	Font(HDC hdc);
+	Font(const WCHAR *familyName, REAL emSize,
+			INT style = FontStyleRegular,
+			Unit unit = UnitPoint,
+			const FontCollection *fontCollection = NULL);
+	~Font();
+	Font* Clone() const;
+
+	Status GetFamily(FontFamily *family) const;
+	REAL GetHeight(const Graphics *graphics) const;
+	REAL GetHeight(REAL dpi) const;
+	Status GetLogFontA(const Graphics *graphics, LOGFONTA *logfontA) const;
+	Status GetLogFontW(const Graphics *graphics, LOGFONTW *logfontW) const;
+	REAL GetSize() const;
+	INT GetStyle() const;
+	Unit GetUnit() const;
+
+	Status GetLastStatus() const
+	{
+		return lastStatus;
+	}
+	BOOL IsAvailable() const
+	{
+		return nativeFont != NULL;
+	}
+
+private:
+	Font(GpFont *font, Status status):
+		nativeFont(font), lastStatus(status) {}
+	Font(const Font&);
+	Font& operator=(const Font&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpFont *nativeFont;
+	mutable Status lastStatus;
+};
+
+class FontCollection: public GdiplusBase
+{
+	friend class InstalledFontCollection;
+	friend class PrivateFontCollection;
+	friend class Font;
+	friend class FontFamily;
+
+public:
+	FontCollection();
+	virtual ~FontCollection() {}
+
+	Status GetFamilies(INT numSought, FontFamily *families,
+			INT *numFound) const;
+	INT GetFamilyCount() const;
+
+	Status GetLastStatus() const
+	{
+		return lastStatus;
+	}
+
+private:
+	FontCollection(const FontCollection&);
+	FontCollection& operator=(const FontCollection&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		return lastStatus = newStatus;
+	}
+
+	GpFontCollection *nativeFontCollection;
+	mutable Status lastStatus;
+};
+
+class FontFamily: public GdiplusBase
+{
+	friend class Font;
+	friend class FontCollection;
+	friend class GraphicsPath;
+
+public:
+	static const FontFamily* GenericMonospace();
+	static const FontFamily* GenericSansSerif();
+	static const FontFamily* GenericSerif();
+
+	FontFamily();
+	FontFamily(const WCHAR *name,
+			const FontCollection *fontCollection = NULL);
+	~FontFamily();
+	FontFamily* Clone() const;
+
+	UINT16 GetCellAscent(INT style) const;
+	UINT16 GetCellDescent(INT style) const;
+	UINT16 GetEmHeight(INT style) const;
+	Status GetFamilyName(WCHAR name[LF_FACESIZE],
+			LANGID language = LANG_NEUTRAL) const;
+	UINT16 GetLineSpacing(INT style) const;
+	BOOL IsStyleAvailable(INT style) const;
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	BOOL IsAvailable() const
+	{
+		return nativeFontFamily != NULL;
+	}
+
+private:
+	FontFamily(GpFontFamily *fontFamily, Status status):
+		nativeFontFamily(fontFamily), lastStatus(status) {}
+	FontFamily(const FontFamily&);
+	FontFamily& operator=(const FontFamily&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpFontFamily *nativeFontFamily;
+	mutable Status lastStatus;
+};
+
+class InstalledFontCollection: public FontCollection
+{
+public:
+	InstalledFontCollection();
+	virtual ~InstalledFontCollection() {}
+};
+
+class PrivateFontCollection: public FontCollection
+{
+public:
+	PrivateFontCollection();
+
+	virtual ~PrivateFontCollection()
+	{
+		DllExports::GdipDeletePrivateFontCollection(&nativeFontCollection);
+	}
+
+	Status AddFontFile(const WCHAR *filename);
+	Status AddMemoryFont(const VOID *memory, INT length);
+};
+
+class Region: public GdiplusBase
+{
+	friend class Graphics;
+
+public:
+	static Region* FromHRGN(HRGN hrgn);
+
+	Region();
+	Region(const RectF& rect);
+	Region(const Rect& rect);
+	Region(const GraphicsPath *path);
+	Region(const BYTE *regionData, INT size);
+	Region(HRGN hrgn);
+	~Region();
+	Region* Clone() const;
+
+	Status Complement(const RectF& rect);
+	Status Complement(const Rect& rect);
+	Status Complement(const Region *region);
+	Status Complement(const GraphicsPath *path);
+	BOOL Equals(const Region *region, const Graphics *graphics) const;
+	Status Exclude(const RectF& rect);
+	Status Exclude(const Rect& rect);
+	Status Exclude(const Region *region);
+	Status Exclude(const GraphicsPath *path);
+	Status GetBounds(RectF *rect, const Graphics *graphics) const;
+	Status GetBounds(Rect *rect, const Graphics *graphics) const;
+	Status GetData(BYTE *buffer, UINT bufferSize, UINT *sizeFilled) const;
+	UINT GetDataSize() const;
+	HRGN GetHRGN(const Graphics *graphics) const;
+	Status GetRegionScans(const Matrix *matrix,
+			RectF *rects, INT *count) const;
+	Status GetRegionScans(const Matrix *matrix,
+			Rect *rects, INT *count) const;
+	UINT GetRegionScansCount(const Matrix *matrix) const;
+	Status Intersect(const RectF& rect);
+	Status Intersect(const Rect& rect);
+	Status Intersect(const Region *region);
+	Status Intersect(const GraphicsPath *path);
+	BOOL IsEmpty(const Graphics *graphics) const;
+	BOOL IsInfinite(const Graphics *graphics) const;
+	BOOL IsVisible(REAL x, REAL y,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(INT x, INT y,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(const PointF& point,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(const Point& point,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(REAL x, REAL y, REAL width, REAL height,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(INT x, INT y, INT width, INT height,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(const RectF& rect,
+			const Graphics *graphics = NULL) const;
+	BOOL IsVisible(const Rect& rect,
+			const Graphics *graphics = NULL) const;
+	Status MakeEmpty();
+	Status MakeInfinite();
+	Status Transform(const Matrix *matrix);
+	Status Translate(REAL dx, REAL dy);
+	Status Translate(INT dx, INT dy);
+	Status Union(const RectF& rect);
+	Status Union(const Rect& rect);
+	Status Union(const Region *region);
+	Status Union(const GraphicsPath *path);
+	Status Xor(const RectF& rect);
+	Status Xor(const Rect& rect);
+	Status Xor(const Region *region);
+	Status Xor(const GraphicsPath *path);
+
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+
+private:
+	Region(GpRegion *region, Status status):
+		nativeRegion(region), lastStatus(status) {}
+	Region(const Region&);
+	Region& operator=(const Region&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpRegion *nativeRegion;
+	mutable Status lastStatus;
+};
+
+#endif /* __GDIPLUS_HEADERS_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusimageattributes.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusimageattributes.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,236 @@
+/*
+ * gdiplusimageattributes.h
+ *
+ * GDI+ ImageAttributes class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_IMAGEATTRIBUTES_H
+#define __GDIPLUS_IMAGEATTRIBUTES_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusimageattributes.h."
+#endif
+
+class ImageAttributes: public GdiplusBase
+{
+	friend class Graphics;
+	friend class TextureBrush;
+
+public:
+	ImageAttributes(): nativeImageAttributes(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateImageAttributes(
+				&nativeImageAttributes);
+	}
+	~ImageAttributes()
+	{
+		DllExports::GdipDisposeImageAttributes(nativeImageAttributes);
+	}
+	ImageAttributes* Clone() const
+	{
+		GpImageAttributes *cloneImageAttributes = NULL;
+		Status status = updateStatus(DllExports::GdipCloneImageAttributes(
+				nativeImageAttributes, &cloneImageAttributes));
+		if (status == Ok) {
+			ImageAttributes *result = new ImageAttributes(
+					cloneImageAttributes, lastStatus);
+			if (!result) {
+				DllExports::GdipDisposeImageAttributes(cloneImageAttributes);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status ClearBrushRemapTable()
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
+				nativeImageAttributes, ColorAdjustTypeBrush,
+				FALSE, 0, NULL));
+	}
+	Status ClearColorKey(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorKeys(
+				nativeImageAttributes, type, FALSE, 0, 0));
+	}
+	Status ClearColorMatrices(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
+				nativeImageAttributes, type, FALSE,
+				NULL, NULL, ColorMatrixFlagsDefault));
+	}
+	Status ClearColorMatrix(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
+				nativeImageAttributes, type, FALSE,
+				NULL, NULL, ColorMatrixFlagsDefault));
+	}
+	Status ClearGamma(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesGamma(
+				nativeImageAttributes, type, FALSE, 1.0f));
+	}
+	Status ClearNoOp(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesNoOp(
+				nativeImageAttributes, type, FALSE));
+	}
+	Status ClearOutputChannel(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesOutputChannel(
+				nativeImageAttributes, type, FALSE,
+				ColorChannelFlagsC));
+	}
+	Status ClearOutputChannelColorProfile(
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
+				nativeImageAttributes, type, FALSE, NULL));
+	}
+	Status ClearRemapTable(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
+				nativeImageAttributes, type, FALSE, 0, NULL));
+	}
+	Status ClearThreshold(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesThreshold(
+				nativeImageAttributes, type, FALSE, 0.0));
+	}
+	Status GetAdjustedPalette(ColorPalette *colorPalette,
+			ColorAdjustType type) const
+	{
+		return updateStatus(DllExports::GdipGetImageAttributesAdjustedPalette(
+				nativeImageAttributes, colorPalette, type));
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	Status Reset(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipResetImageAttributes(
+				nativeImageAttributes, type));
+	}
+	Status SetBrushRemapTable(UINT mapSize, ColorMap *map)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
+				nativeImageAttributes, ColorAdjustTypeBrush,
+				TRUE, mapSize, map));
+	}
+	Status SetColorKey(const Color& colorLow, const Color& colorHigh,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorKeys(
+				nativeImageAttributes, type, TRUE,
+				colorLow.GetValue(), colorHigh.GetValue()));
+	}
+	Status SetColorMatrices(const ColorMatrix *colorMatrix,
+			const ColorMatrix *grayMatrix,
+			ColorMatrixFlags mode = ColorMatrixFlagsDefault,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
+				nativeImageAttributes, type, TRUE,
+				colorMatrix, grayMatrix, mode));
+	}
+	Status SetColorMatrix(const ColorMatrix *colorMatrix,
+			ColorMatrixFlags mode = ColorMatrixFlagsDefault,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesColorMatrix(
+				nativeImageAttributes, type, TRUE,
+				colorMatrix, NULL, mode));
+	}
+	Status SetGamma(REAL gamma,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesGamma(
+				nativeImageAttributes, type, TRUE, gamma));
+	}
+	Status SetNoOp(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesNoOp(
+				nativeImageAttributes, type, TRUE));
+	}
+	Status SetOutputChannel(ColorChannelFlags channelFlags,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesOutputChannel(
+				nativeImageAttributes, type, TRUE,
+				channelFlags));
+	}
+	Status SetOutputChannelColorProfile(const WCHAR *colorProfileFilename,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesOutputChannelColorProfile(
+				nativeImageAttributes, type, TRUE,
+				colorProfileFilename));
+	}
+	Status SetRemapTable(UINT mapSize, const ColorMap *map,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesRemapTable(
+				nativeImageAttributes, type, TRUE,
+				mapSize, map));
+	}
+	Status SetThreshold(REAL threshold,
+			ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesThreshold(
+				nativeImageAttributes, type, TRUE, threshold));
+	}
+	Status SetToIdentity(ColorAdjustType type = ColorAdjustTypeDefault)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesToIdentity(
+				nativeImageAttributes, type));
+	}
+	Status SetWrapMode(WrapMode wrap, const Color& color = Color(),
+			BOOL clamp = FALSE)
+	{
+		return updateStatus(DllExports::GdipSetImageAttributesWrapMode(
+				nativeImageAttributes, wrap,
+				color.GetValue(), clamp));
+	}
+
+private:
+	ImageAttributes(GpImageAttributes *imageAttributes, Status status):
+		nativeImageAttributes(imageAttributes), lastStatus(status) {}
+	ImageAttributes(const ImageAttributes&);
+	ImageAttributes& operator=(const ImageAttributes&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpImageAttributes *nativeImageAttributes;
+	mutable Status lastStatus;
+};
+
+
+#endif /* __GDIPLUS_IMAGEATTRIBUTES_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusimagecodec.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusimagecodec.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,67 @@
+/*
+ * gdiplusimagecodec.h
+ *
+ * GDI+ image decoders and encoders
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_IMAGECODEC_H
+#define __GDIPLUS_IMAGECODEC_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+static __inline__ GpStatus GetImageDecoders(UINT numDecoders, UINT size,
+		ImageCodecInfo *decoders)
+{
+	#ifdef __cplusplus
+	return DllExports::GdipGetImageDecoders(numDecoders, size, decoders);
+	#else
+	return GdipGetImageDecoders(numDecoders, size, decoders);
+	#endif
+}
+
+static __inline__ GpStatus GetImageDecodersSize(UINT *numDecoders, UINT *size)
+{
+	#ifdef __cplusplus
+	return DllExports::GdipGetImageDecodersSize(numDecoders, size);
+	#else
+	return GdipGetImageDecodersSize(numDecoders, size);
+	#endif
+}
+
+static __inline__ GpStatus GetImageEncoders(UINT numEncoders, UINT size,
+		ImageCodecInfo *encoders)
+{
+	#ifdef __cplusplus
+	return DllExports::GdipGetImageEncoders(numEncoders, size, encoders);
+	#else
+	return GdipGetImageEncoders(numEncoders, size, encoders);
+	#endif
+}
+
+static __inline__ GpStatus GetImageEncodersSize(UINT *numEncoders, UINT *size)
+{
+	#ifdef __cplusplus
+	return DllExports::GdipGetImageEncodersSize(numEncoders, size);
+	#else
+	return GdipGetImageEncodersSize(numEncoders, size);
+	#endif
+}
+
+#endif /* __GDIPLUS_IMAGECODEC_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusimaging.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusimaging.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,411 @@
+/*
+ * gdiplusimaging.h
+ *
+ * GDI+ Imaging and image metadata
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_IMAGING_H
+#define __GDIPLUS_IMAGING_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef enum ImageCodecFlags {
+	ImageCodecFlagsEncoder = 0x00000001,
+	ImageCodecFlagsDecoder = 0x00000002,
+	ImageCodecFlagsSupportBitmap = 0x00000004,
+	ImageCodecFlagsSupportVector = 0x00000008,
+	ImageCodecFlagsSeekableEncode = 0x00000010,
+	ImageCodecFlagsBlockingDecode = 0x00000020,
+	ImageCodecFlagsBuiltin = 0x00010000,
+	ImageCodecFlagsSystem = 0x00020000,
+	ImageCodecFlagsUser = 0x00040000
+} ImageCodecFlags;
+
+typedef enum ImageFlags {
+	ImageFlagsNone = 0,
+	ImageFlagsScalable = 0x00000001,
+	ImageFlagsHasAlpha = 0x00000002,
+	ImageFlagsHasTranslucent = 0x00000004,
+	ImageFlagsPartiallyScalable = 0x00000008,
+	ImageFlagsColorSpaceRGB = 0x00000010,
+	ImageFlagsColorSpaceCMYK = 0x00000020,
+	ImageFlagsColorSpaceGRAY = 0x00000040,
+	ImageFlagsColorSpaceYCBCR = 0x00000080,
+	ImageFlagsColorSpaceYCCK = 0x00000100,
+	ImageFlagsHasRealDPI = 0x00001000,
+	ImageFlagsHasRealPixelSize = 0x00002000,
+	ImageFlagsReadOnly = 0x00010000,
+	ImageFlagsCaching = 0x00020000
+} ImageFlags;
+
+typedef enum ImageLockMode {
+	ImageLockModeRead = 1,
+	ImageLockModeWrite = 2,
+	ImageLockModeUserInputBuf = 4
+} ImageLockMode;
+
+typedef enum ItemDataPosition {
+	ItemDataPositionAfterHeader = 0,
+	ItemDataPositionAfterPalette = 1,
+	ItemDataPositionAfterBits = 2
+} ItemDataPosition;
+
+typedef enum RotateFlipType {
+	RotateNoneFlipNone = 0,
+	Rotate90FlipNone = 1,
+	Rotate180FlipNone = 2,
+	Rotate270FlipNone = 3,
+	RotateNoneFlipX = 4,
+	Rotate90FlipX = 5,
+	Rotate180FlipX = 6,
+	Rotate270FlipX = 7,
+	Rotate180FlipXY = 0,
+	Rotate270FlipXY = 1, 
+	RotateNoneFlipXY = 2,
+	Rotate90FlipXY = 3,
+	Rotate180FlipY = 4,
+	Rotate270FlipY = 5,
+	RotateNoneFlipY = 6,
+	Rotate90FlipY = 7
+} RotateFlipType;
+
+typedef struct BitmapData {
+	UINT Width;
+	UINT Height;
+	INT Stride;
+	INT PixelFormat;  /* MSDN: "PixelFormat PixelFormat;" */
+	VOID *Scan0;
+	UINT_PTR Reserved;
+} BitmapData;
+
+typedef struct EncoderParameter {
+	GUID Guid;
+	ULONG NumberOfValues;
+	ULONG Type;
+	VOID *Value;
+} EncoderParameter;
+
+typedef struct EncoderParameters {
+	UINT Count;
+	EncoderParameter Parameter[1];
+} EncoderParameters;
+
+typedef struct ImageCodecInfo {
+	CLSID Clsid;
+	GUID FormatID;
+	WCHAR *CodecName;
+	WCHAR *DllName;
+	WCHAR *FormatDescription;
+	WCHAR *FilenameExtension;
+	WCHAR *MimeType;
+	DWORD Flags;
+	DWORD Version;
+	DWORD SigCount;
+	DWORD SigSize;
+	BYTE *SigPattern;
+	BYTE *SigMask;
+} ImageCodecInfo;
+
+/* FIXME: The order of fields is probably wrong. Please don't use this
+ * structure until this problem is resolved!  Can't test because
+ * ImageItemData is not supported by the redistributable GDI+ 1.0 DLL. */
+typedef struct ImageItemData {
+	UINT Size;
+	UINT Position;
+	VOID *Desc;
+	UINT DescSize;
+	UINT *Data;
+	UINT DataSize;
+	UINT Cookie;
+} ImageItemData;
+
+typedef struct PropertyItem {
+	PROPID id;
+	ULONG length;
+	WORD type;
+	VOID *value;
+} PropertyItem;
+
+#define PropertyTagGpsVer ((PROPID) 0x0000)
+#define PropertyTagGpsLatitudeRef ((PROPID) 0x0001)
+#define PropertyTagGpsLatitude ((PROPID) 0x0002)
+#define PropertyTagGpsLongitudeRef ((PROPID) 0x0003)
+#define PropertyTagGpsLongitude ((PROPID) 0x0004)
+#define PropertyTagGpsAltitudeRef ((PROPID) 0x0005)
+#define PropertyTagGpsAltitude ((PROPID) 0x0006)
+#define PropertyTagGpsGpsTime ((PROPID) 0x0007)
+#define PropertyTagGpsGpsSatellites ((PROPID) 0x0008)
+#define PropertyTagGpsGpsStatus ((PROPID) 0x0009)
+#define PropertyTagGpsGpsMeasureMode ((PROPID) 0x000A)
+#define PropertyTagGpsGpsDop ((PROPID) 0x000B)
+#define PropertyTagGpsSpeedRef ((PROPID) 0x000C)
+#define PropertyTagGpsSpeed ((PROPID) 0x000D)
+#define PropertyTagGpsTrackRef ((PROPID) 0x000E)
+#define PropertyTagGpsTrack ((PROPID) 0x000F)
+#define PropertyTagGpsImgDirRef ((PROPID) 0x0010)
+#define PropertyTagGpsImgDir ((PROPID) 0x0011)
+#define PropertyTagGpsMapDatum ((PROPID) 0x0012)
+#define PropertyTagGpsDestLatRef ((PROPID) 0x0013)
+#define PropertyTagGpsDestLat ((PROPID) 0x0014)
+#define PropertyTagGpsDestLongRef ((PROPID) 0x0015)
+#define PropertyTagGpsDestLong ((PROPID) 0x0016)
+#define PropertyTagGpsDestBearRef ((PROPID) 0x0017)
+#define PropertyTagGpsDestBear ((PROPID) 0x0018)
+#define PropertyTagGpsDestDistRef ((PROPID) 0x0019)
+#define PropertyTagGpsDestDist ((PROPID) 0x001A)
+#define PropertyTagNewSubfileType ((PROPID) 0x00FE)
+#define PropertyTagSubfileType ((PROPID) 0x00FF)
+#define PropertyTagImageWidth ((PROPID) 0x0100)
+#define PropertyTagImageHeight ((PROPID) 0x0101)
+#define PropertyTagBitsPerSample ((PROPID) 0x0102)
+#define PropertyTagCompression ((PROPID) 0x0103)
+#define PropertyTagPhotometricInterp ((PROPID) 0x0106)
+#define PropertyTagThreshHolding ((PROPID) 0x0107)
+#define PropertyTagCellWidth ((PROPID) 0x0108)
+#define PropertyTagCellHeight ((PROPID) 0x0109)
+#define PropertyTagFillOrder ((PROPID) 0x010A)
+#define PropertyTagDocumentName ((PROPID) 0x010D)
+#define PropertyTagImageDescription ((PROPID) 0x010E)
+#define PropertyTagEquipMake ((PROPID) 0x010F)
+#define PropertyTagEquipModel ((PROPID) 0x0110)
+#define PropertyTagStripOffsets ((PROPID) 0x0111)
+#define PropertyTagOrientation ((PROPID) 0x0112)
+#define PropertyTagSamplesPerPixel ((PROPID) 0x0115)
+#define PropertyTagRowsPerStrip ((PROPID) 0x0116)
+#define PropertyTagStripBytesCount ((PROPID) 0x0117)
+#define PropertyTagMinSampleValue ((PROPID) 0x0118)
+#define PropertyTagMaxSampleValue ((PROPID) 0x0119)
+#define PropertyTagXResolution ((PROPID) 0x011A)
+#define PropertyTagYResolution ((PROPID) 0x011B)
+#define PropertyTagPlanarConfig ((PROPID) 0x011C)
+#define PropertyTagPageName ((PROPID) 0x011D)
+#define PropertyTagXPosition ((PROPID) 0x011E)
+#define PropertyTagYPosition ((PROPID) 0x011F)
+#define PropertyTagFreeOffset ((PROPID) 0x0120)
+#define PropertyTagFreeByteCounts ((PROPID) 0x0121)
+#define PropertyTagGrayResponseUnit ((PROPID) 0x0122)
+#define PropertyTagGrayResponseCurve ((PROPID) 0x0123)
+#define PropertyTagT4Option ((PROPID) 0x0124)
+#define PropertyTagT6Option ((PROPID) 0x0125)
+#define PropertyTagResolutionUnit ((PROPID) 0x0128)
+#define PropertyTagPageNumber ((PROPID) 0x0129)
+#define PropertyTagTransferFunction ((PROPID) 0x012D)
+#define PropertyTagSoftwareUsed ((PROPID) 0x0131)
+#define PropertyTagDateTime ((PROPID) 0x0132)
+#define PropertyTagArtist ((PROPID) 0x013B)
+#define PropertyTagHostComputer ((PROPID) 0x013C)
+#define PropertyTagPredictor ((PROPID) 0x013D)
+#define PropertyTagWhitePoint ((PROPID) 0x013E)
+#define PropertyTagPrimaryChromaticities ((PROPID) 0x013F)
+#define PropertyTagColorMap ((PROPID) 0x0140)
+#define PropertyTagHalftoneHints ((PROPID) 0x0141)
+#define PropertyTagTileWidth ((PROPID) 0x0142)
+#define PropertyTagTileLength ((PROPID) 0x0143)
+#define PropertyTagTileOffset ((PROPID) 0x0144)
+#define PropertyTagTileByteCounts ((PROPID) 0x0145)
+#define PropertyTagInkSet ((PROPID) 0x014C)
+#define PropertyTagInkNames ((PROPID) 0x014D)
+#define PropertyTagNumberOfInks ((PROPID) 0x014E)
+#define PropertyTagDotRange ((PROPID) 0x0150)
+#define PropertyTagTargetPrinter ((PROPID) 0x0151)
+#define PropertyTagExtraSamples ((PROPID) 0x0152)
+#define PropertyTagSampleFormat ((PROPID) 0x0153)
+#define PropertyTagSMinSampleValue ((PROPID) 0x0154)
+#define PropertyTagSMaxSampleValue ((PROPID) 0x0155)
+#define PropertyTagTransferRange ((PROPID) 0x0156)
+#define PropertyTagJPEGProc ((PROPID) 0x0200)
+#define PropertyTagJPEGInterFormat ((PROPID) 0x0201)
+#define PropertyTagJPEGInterLength ((PROPID) 0x0202)
+#define PropertyTagJPEGRestartInterval ((PROPID) 0x0203)
+#define PropertyTagJPEGLosslessPredictors ((PROPID) 0x0205)
+#define PropertyTagJPEGPointTransforms ((PROPID) 0x0206)
+#define PropertyTagJPEGQTables ((PROPID) 0x0207)
+#define PropertyTagJPEGDCTables ((PROPID) 0x0208)
+#define PropertyTagJPEGACTables ((PROPID) 0x0209)
+#define PropertyTagYCbCrCoefficients ((PROPID) 0x0211)
+#define PropertyTagYCbCrSubsampling ((PROPID) 0x0212)
+#define PropertyTagYCbCrPositioning ((PROPID) 0x0213)
+#define PropertyTagREFBlackWhite ((PROPID) 0x0214)
+#define PropertyTagGamma ((PROPID) 0x0301)
+#define PropertyTagICCProfileDescriptor ((PROPID) 0x0302)
+#define PropertyTagSRGBRenderingIntent ((PROPID) 0x0303)
+#define PropertyTagImageTitle ((PROPID) 0x0320)
+#define PropertyTagResolutionXUnit ((PROPID) 0x5001)
+#define PropertyTagResolutionYUnit ((PROPID) 0x5002)
+#define PropertyTagResolutionXLengthUnit ((PROPID) 0x5003)
+#define PropertyTagResolutionYLengthUnit ((PROPID) 0x5004)
+#define PropertyTagPrintFlags ((PROPID) 0x5005)
+#define PropertyTagPrintFlagsVersion ((PROPID) 0x5006)
+#define PropertyTagPrintFlagsCrop ((PROPID) 0x5007)
+#define PropertyTagPrintFlagsBleedWidth ((PROPID) 0x5008)
+#define PropertyTagPrintFlagsBleedWidthScale ((PROPID) 0x5009)
+#define PropertyTagHalftoneLPI ((PROPID) 0x500A)
+#define PropertyTagHalftoneLPIUnit ((PROPID) 0x500B)
+#define PropertyTagHalftoneDegree ((PROPID) 0x500C)
+#define PropertyTagHalftoneShape ((PROPID) 0x500D)
+#define PropertyTagHalftoneMisc ((PROPID) 0x500E)
+#define PropertyTagHalftoneScreen ((PROPID) 0x500F)
+#define PropertyTagJPEGQuality ((PROPID) 0x5010)
+#define PropertyTagGridSize ((PROPID) 0x5011)
+#define PropertyTagThumbnailFormat ((PROPID) 0x5012)
+#define PropertyTagThumbnailWidth ((PROPID) 0x5013)
+#define PropertyTagThumbnailHeight ((PROPID) 0x5014)
+#define PropertyTagThumbnailColorDepth ((PROPID) 0x5015)
+#define PropertyTagThumbnailPlanes ((PROPID) 0x5016)
+#define PropertyTagThumbnailRawBytes ((PROPID) 0x5017)
+#define PropertyTagThumbnailSize ((PROPID) 0x5018)
+#define PropertyTagThumbnailCompressedSize ((PROPID) 0x5019)
+#define PropertyTagColorTransferFunction ((PROPID) 0x501A)
+#define PropertyTagThumbnailData ((PROPID) 0x501B)
+#define PropertyTagThumbnailImageWidth ((PROPID) 0x5020)
+#define PropertyTagThumbnailImageHeight ((PROPID) 0x5021)
+#define PropertyTagThumbnailBitsPerSample ((PROPID) 0x5022)
+#define PropertyTagThumbnailCompression ((PROPID) 0x5023)
+#define PropertyTagThumbnailPhotometricInterp ((PROPID) 0x5024)
+#define PropertyTagThumbnailImageDescription ((PROPID) 0x5025)
+#define PropertyTagThumbnailEquipMake ((PROPID) 0x5026)
+#define PropertyTagThumbnailEquipModel ((PROPID) 0x5027)
+#define PropertyTagThumbnailStripOffsets ((PROPID) 0x5028)
+#define PropertyTagThumbnailOrientation ((PROPID) 0x5029)
+#define PropertyTagThumbnailSamplesPerPixel ((PROPID) 0x502A)
+#define PropertyTagThumbnailRowsPerStrip ((PROPID) 0x502B)
+#define PropertyTagThumbnailStripBytesCount ((PROPID) 0x502C)
+#define PropertyTagThumbnailResolutionX ((PROPID) 0x502D)
+#define PropertyTagThumbnailResolutionY ((PROPID) 0x502E)
+#define PropertyTagThumbnailPlanarConfig ((PROPID) 0x502F)
+#define PropertyTagThumbnailResolutionUnit ((PROPID) 0x5030)
+#define PropertyTagThumbnailTransferFunction ((PROPID) 0x5031)
+#define PropertyTagThumbnailSoftwareUsed ((PROPID) 0x5032)
+#define PropertyTagThumbnailDateTime ((PROPID) 0x5033)
+#define PropertyTagThumbnailArtist ((PROPID) 0x5034)
+#define PropertyTagThumbnailWhitePoint ((PROPID) 0x5035)
+#define PropertyTagThumbnailPrimaryChromaticities ((PROPID) 0x5036)
+#define PropertyTagThumbnailYCbCrCoefficients ((PROPID) 0x5037)
+#define PropertyTagThumbnailYCbCrSubsampling ((PROPID) 0x5038)
+#define PropertyTagThumbnailYCbCrPositioning ((PROPID) 0x5039)
+#define PropertyTagThumbnailRefBlackWhite ((PROPID) 0x503A)
+#define PropertyTagThumbnailCopyRight ((PROPID) 0x503B)
+#define PropertyTagLuminanceTable ((PROPID) 0x5090)
+#define PropertyTagChrominanceTable ((PROPID) 0x5091)
+#define PropertyTagFrameDelay ((PROPID) 0x5100)
+#define PropertyTagLoopCount ((PROPID) 0x5101)
+#define PropertyTagGlobalPalette ((PROPID) 0x5102)
+#define PropertyTagIndexBackground ((PROPID) 0x5103)
+#define PropertyTagIndexTransparent ((PROPID) 0x5104)
+#define PropertyTagPixelUnit ((PROPID) 0x5110)
+#define PropertyTagPixelPerUnitX ((PROPID) 0x5111)
+#define PropertyTagPixelPerUnitY ((PROPID) 0x5112)
+#define PropertyTagPaletteHistogram ((PROPID) 0x5113)
+#define PropertyTagCopyright ((PROPID) 0x8298)
+#define PropertyTagExifExposureTime ((PROPID) 0x829A)
+#define PropertyTagExifFNumber ((PROPID) 0x829D)
+#define PropertyTagExifIFD ((PROPID) 0x8769)
+#define PropertyTagICCProfile ((PROPID) 0x8773)
+#define PropertyTagExifExposureProg ((PROPID) 0x8822)
+#define PropertyTagExifSpectralSense ((PROPID) 0x8824)
+#define PropertyTagGpsIFD ((PROPID) 0x8825)
+#define PropertyTagExifISOSpeed ((PROPID) 0x8827)
+#define PropertyTagExifOECF ((PROPID) 0x8828)
+#define PropertyTagExifVer ((PROPID) 0x9000)
+#define PropertyTagExifDTOrig ((PROPID) 0x9003)
+#define PropertyTagExifDTDigitized ((PROPID) 0x9004)
+#define PropertyTagExifCompConfig ((PROPID) 0x9101)
+#define PropertyTagExifCompBPP ((PROPID) 0x9102)
+#define PropertyTagExifShutterSpeed ((PROPID) 0x9201)
+#define PropertyTagExifAperture ((PROPID) 0x9202)
+#define PropertyTagExifBrightness ((PROPID) 0x9203)
+#define PropertyTagExifExposureBias ((PROPID) 0x9204)
+#define PropertyTagExifMaxAperture ((PROPID) 0x9205)
+#define PropertyTagExifSubjectDist ((PROPID) 0x9206)
+#define PropertyTagExifMeteringMode ((PROPID) 0x9207)
+#define PropertyTagExifLightSource ((PROPID) 0x9208)
+#define PropertyTagExifFlash ((PROPID) 0x9209)
+#define PropertyTagExifFocalLength ((PROPID) 0x920A)
+#define PropertyTagExifMakerNote ((PROPID) 0x927C)
+#define PropertyTagExifUserComment ((PROPID) 0x9286)
+#define PropertyTagExifDTSubsec ((PROPID) 0x9290)
+#define PropertyTagExifDTOrigSS ((PROPID) 0x9291)
+#define PropertyTagExifDTDigSS ((PROPID) 0x9292)
+#define PropertyTagExifFPXVer ((PROPID) 0xA000)
+#define PropertyTagExifColorSpace ((PROPID) 0xA001)
+#define PropertyTagExifPixXDim ((PROPID) 0xA002)
+#define PropertyTagExifPixYDim ((PROPID) 0xA003)
+#define PropertyTagExifRelatedWav ((PROPID) 0xA004)
+#define PropertyTagExifInterop ((PROPID) 0xA005)
+#define PropertyTagExifFlashEnergy ((PROPID) 0xA20B)
+#define PropertyTagExifSpatialFR ((PROPID) 0xA20C)
+#define PropertyTagExifFocalXRes ((PROPID) 0xA20E)
+#define PropertyTagExifFocalYRes ((PROPID) 0xA20F)
+#define PropertyTagExifFocalResUnit ((PROPID) 0xA210)
+#define PropertyTagExifSubjectLoc ((PROPID) 0xA214)
+#define PropertyTagExifExposureIndex ((PROPID) 0xA215)
+#define PropertyTagExifSensingMethod ((PROPID) 0xA217)
+#define PropertyTagExifFileSource ((PROPID) 0xA300)
+#define PropertyTagExifSceneType ((PROPID) 0xA301)
+#define PropertyTagExifCfaPattern ((PROPID) 0xA302)
+
+#define PropertyTagTypeByte ((WORD) 1)
+#define PropertyTagTypeASCII ((WORD) 2)
+#define PropertyTagTypeShort ((WORD) 3)
+#define PropertyTagTypeLong ((WORD) 4)
+#define PropertyTagTypeRational ((WORD) 5)
+#define PropertyTagTypeUndefined ((WORD) 7)
+#define PropertyTagTypeSLONG ((WORD) 9)
+#define PropertyTagTypeSRational ((WORD) 10)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern const GUID EncoderChrominanceTable;   /* f2e455dc-09b3-4316-8260-676ada32481c */
+extern const GUID EncoderColorDepth;         /* 66087055-ad66-4c7c-9a18-38a2310b8337 */
+extern const GUID EncoderColorSpace;         /* ? */
+extern const GUID EncoderCompression;        /* e09d739d-ccd4-44ee-8eba-3fbf8be4fc58 */
+extern const GUID EncoderImageItems;         /* ? */
+extern const GUID EncoderLuminanceTable;     /* edb33bce-0266-4a77-b904-27216099e717 */
+extern const GUID EncoderQuality;            /* 1d5be4b5-fa4a-452d-9cdd-5db35105e7eb */
+extern const GUID EncoderRenderMethod;       /* 6d42c53a-229a-4825-8bb7-5c99e2b9a8b8 */
+extern const GUID EncoderSaveAsCMYK;         /* ? */
+extern const GUID EncoderSaveFlag;           /* 292266fc-ac40-47bf-8cfc-a85b89a655de */
+extern const GUID EncoderScanMethod;         /* 3a4e2661-3109-4e56-8536-42c156e7dcfa */
+extern const GUID EncoderTransformation;     /* 8d0eb2d1-a58e-4ea8-aa14-108074b7b6f9 */
+extern const GUID EncoderVersion;            /* 24d18c76-814a-41a4-bf53-1c219cccf797 */
+
+extern const GUID ImageFormatBMP;            /* b96b3cab-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatEMF;            /* b96b3cac-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatEXIF;           /* ? */
+extern const GUID ImageFormatGIF;            /* b96b3cb0-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatIcon;           /* b96b3cb5-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatJPEG;           /* b96b3cae-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatMemoryBMP;      /* b96b3caa-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatPNG;            /* b96b3caf-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatTIFF;           /* b96b3cb1-0728-11d3-9d7b-0000f81ef32e */
+extern const GUID ImageFormatUndefined;      /* ? */
+extern const GUID ImageFormatWMF;            /* b96b3cad-0728-11d3-9d7b-0000f81ef32e */
+
+extern const GUID FrameDimensionPage;        /* 7462dc86-6180-4c7e-8e3f-ee7333a7a483 */
+extern const GUID FrameDimensionResolution;  /* ? */
+extern const GUID FrameDimensionTime;        /* 6aedbd6d-3fb5-418a-83a6-7f45229dc872 */
+
+#ifdef __cplusplus
+}  /* extern "C" */
+#endif
+
+#endif /* __GDIPLUS_IMAGING_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusimpl.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusimpl.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,1613 @@
+/*
+ * gdiplusimpl.h
+ *
+ * GDI+ Bitmap, CachedBitmap, CustomLineCap, Font, FontCollection, FontFamily,
+ *      Image, InstalledFontCollection, PrivateFontCollection, Region
+ *      implementation.  Definitions of these classes are in gdiplusheaders.h.
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_IMPL_H
+#define __GDIPLUS_IMPL_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusimpl.h."
+#endif
+
+/*
+ * FIXME: I called this file gdiplusimpl.h, but what should it really be called?
+ * Or did Microsoft create separate files for each class implemented here?
+ */
+
+
+// Image
+
+__inline__ Image* Image::FromFile(const WCHAR *filename,
+		BOOL useEmbeddedColorManagement)
+{
+	return new Image(filename, useEmbeddedColorManagement);
+}
+
+__inline__ Image* Image::FromStream(IStream *stream,
+		BOOL useEmbeddedColorManagement)
+{
+	return new Image(stream, useEmbeddedColorManagement);
+}
+
+__inline__ Image::Image(const WCHAR *filename, BOOL useEmbeddedColorManagement):
+	nativeImage(NULL), lastStatus(Ok)
+{
+	if (useEmbeddedColorManagement) {
+		lastStatus = DllExports::GdipLoadImageFromFileICM(
+				filename, &nativeImage);
+	} else {
+		lastStatus = DllExports::GdipLoadImageFromFile(
+				filename, &nativeImage);
+	}
+}
+
+__inline__ Image::Image(IStream *stream, BOOL useEmbeddedColorManagement):
+	nativeImage(NULL), lastStatus(Ok)
+{
+	if (useEmbeddedColorManagement) {
+		lastStatus = DllExports::GdipLoadImageFromStreamICM(
+				stream, &nativeImage);
+	} else {
+		lastStatus = DllExports::GdipLoadImageFromStream(
+				stream, &nativeImage);
+	}
+}
+
+__inline__ Status Image::FindFirstItem(ImageItemData *item)
+{
+	// FIXME: can't test GdipFindFirstImageItem b/c it isn't exported in 1.0
+	return updateStatus(DllExports::GdipFindFirstImageItem(
+			nativeImage, item));
+}
+
+__inline__ Status Image::FindNextItem(ImageItemData *item)
+{
+	// FIXME: can't test GdipFindFirstImageItem b/c it isn't exported in 1.0
+	return updateStatus(DllExports::GdipFindNextImageItem(
+			nativeImage, item));
+}
+
+__inline__ Status Image::GetAllPropertyItems(UINT totalBufferSize,
+		UINT numProperties, PropertyItem *allItems)
+{
+	return updateStatus(DllExports::GdipGetAllPropertyItems(
+			nativeImage, totalBufferSize, numProperties, allItems));
+}
+
+__inline__ Status Image::GetBounds(RectF *srcRect, Unit *srcUnit)
+{
+	return updateStatus(DllExports::GdipGetImageBounds(
+			nativeImage, srcRect, srcUnit));
+}
+
+__inline__ Status Image::GetEncoderParameterList(const CLSID *clsidEncoder,
+		UINT size, EncoderParameters *buffer)
+{
+	return updateStatus(DllExports::GdipGetEncoderParameterList(
+			nativeImage, clsidEncoder, size, buffer));
+}
+
+__inline__ UINT Image::GetEncoderParameterListSize(const CLSID *clsidEncoder)
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetEncoderParameterListSize(
+			nativeImage, clsidEncoder, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetFlags()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetImageFlags(nativeImage, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetFrameCount(const GUID *dimensionID)
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipImageGetFrameCount(
+			nativeImage, dimensionID, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetFrameDimensionsCount()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipImageGetFrameDimensionsCount(
+			nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::GetFrameDimensionsList(GUID *dimensionIDs, UINT count)
+{
+	return updateStatus(DllExports::GdipImageGetFrameDimensionsList(
+			nativeImage, dimensionIDs, count));
+}
+
+__inline__ UINT Image::GetHeight()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetImageHeight(nativeImage, &result));
+	return result;
+}
+
+__inline__ REAL Image::GetHorizontalResolution()
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetImageHorizontalResolution(
+			nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::GetItemData(ImageItemData *item)
+{
+	// FIXME: can't test GdipGetImageItemData b/c it isn't exported in 1.0
+	return updateStatus(DllExports::GdipGetImageItemData(
+			nativeImage, item));
+}
+
+__inline__ Status Image::GetPalette(ColorPalette *palette, INT size)
+{
+	return updateStatus(DllExports::GdipGetImagePalette(
+			nativeImage, palette, size));
+}
+
+__inline__ INT Image::GetPaletteSize()
+{
+	INT result = 0;
+	updateStatus(DllExports::GdipGetImagePaletteSize(nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::GetPhysicalDimension(SizeF *size)
+{
+	if (!size) return lastStatus = InvalidParameter;
+	return updateStatus(DllExports::GdipGetImageDimension(
+			nativeImage, &size->Width, &size->Height));
+}
+
+__inline__ PixelFormat Image::GetPixelFormat()
+{
+	PixelFormat result = (PixelFormat) 0;
+	updateStatus(DllExports::GdipGetImagePixelFormat(nativeImage, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetPropertyCount()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetPropertyCount(nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::GetPropertyIdList(UINT numOfProperty, PROPID *list)
+{
+	return updateStatus(DllExports::GdipGetPropertyIdList(
+			nativeImage, numOfProperty, list));
+}
+
+__inline__ Status Image::GetPropertyItem(PROPID propId, UINT propSize,
+		PropertyItem *buffer)
+{
+	return updateStatus(DllExports::GdipGetPropertyItem(
+			nativeImage, propId, propSize, buffer));
+}
+
+__inline__ UINT Image::GetPropertyItemSize(PROPID propId)
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetPropertyItemSize(
+			nativeImage, propId, &result));
+	return result;
+}
+
+__inline__ Status Image::GetPropertySize(
+		UINT *totalBufferSize, UINT *numProperties)
+{
+	return updateStatus(DllExports::GdipGetPropertySize(
+			nativeImage, totalBufferSize, numProperties));
+}
+
+__inline__ Status Image::GetRawFormat(GUID *format)
+{
+	return updateStatus(DllExports::GdipGetImageRawFormat(
+			nativeImage, format));
+}
+
+__inline__ Image* Image::GetThumbnailImage(UINT thumbWidth, UINT thumbHeight,
+		GetThumbnailImageAbort callback, VOID *callbackData)
+{
+	GpImage *thumbImage = NULL;
+	Status status = updateStatus(DllExports::GdipGetImageThumbnail(
+			nativeImage, thumbWidth, thumbHeight, &thumbImage,
+			callback, callbackData));
+
+	if (status == Ok) {
+		Image *result = new Image(thumbImage, Ok);
+		if (!result) {
+			DllExports::GdipDisposeImage(thumbImage);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ ImageType Image::GetType() const
+{
+	ImageType result = ImageTypeUnknown;
+	updateStatus(DllExports::GdipGetImageType(nativeImage, &result));
+	return result;
+}
+
+__inline__ REAL Image::GetVerticalResolution()
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetImageVerticalResolution(
+			nativeImage, &result));
+	return result;
+}
+
+__inline__ UINT Image::GetWidth()
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetImageWidth(nativeImage, &result));
+	return result;
+}
+
+__inline__ Status Image::RemovePropertyItem(PROPID propId)
+{
+	return updateStatus(DllExports::GdipRemovePropertyItem(
+			nativeImage, propId));
+}
+
+__inline__ Status Image::RotateFlip(RotateFlipType rotateFlipType)
+{
+	return updateStatus(DllExports::GdipImageRotateFlip(
+			nativeImage, rotateFlipType));
+}
+
+__inline__ Status Image::Save(const WCHAR *filename, const CLSID *clsidEncoder,
+		const EncoderParameters *encoderParams)
+{
+	return updateStatus(DllExports::GdipSaveImageToFile(
+			nativeImage, filename, clsidEncoder, encoderParams));
+}
+
+__inline__ Status Image::Save(IStream *stream, const CLSID *clsidEncoder,
+		const EncoderParameters *encoderParams)
+{
+	return updateStatus(DllExports::GdipSaveImageToStream(
+			nativeImage, stream, clsidEncoder, encoderParams));
+}
+
+__inline__ Status Image::SaveAdd(const EncoderParameters *encoderParams)
+{
+	return updateStatus(DllExports::GdipSaveAdd(
+			nativeImage, encoderParams));
+}
+
+__inline__ Status Image::SaveAdd(Image *newImage,
+		const EncoderParameters *encoderParams)
+{
+	return updateStatus(DllExports::GdipSaveAddImage(
+			nativeImage,
+			newImage ? newImage->nativeImage : NULL,
+			encoderParams));
+}
+
+__inline__ Status Image::SelectActiveFrame(
+		const GUID *dimensionID, UINT frameIndex)
+{
+	return updateStatus(DllExports::GdipImageSelectActiveFrame(
+			nativeImage, dimensionID, frameIndex));
+}
+
+__inline__ Status Image::SetAbort(GdiplusAbort *pIAbort)
+{
+	// FIXME: can't test GdipImageSetAbort because it isn't exported in 1.0
+	return updateStatus(DllExports::GdipImageSetAbort(
+			nativeImage, pIAbort));
+}
+
+__inline__ Status Image::SetPalette(const ColorPalette *palette)
+{
+	return updateStatus(DllExports::GdipSetImagePalette(
+			nativeImage, palette));
+}
+
+__inline__ Status Image::SetPropertyItem(const PropertyItem *item)
+{
+	return updateStatus(DllExports::GdipSetPropertyItem(nativeImage, item));
+}
+
+
+// Bitmap
+
+__inline__ Bitmap* Bitmap::FromBITMAPINFO(const BITMAPINFO *gdiBitmapInfo,
+		VOID *gdiBitmapData)
+{
+	return new Bitmap(gdiBitmapInfo, gdiBitmapData);
+}
+
+__inline__ Bitmap* Bitmap::FromDirectDrawSurface7(IDirectDrawSurface7 *surface)
+{
+	return new Bitmap(surface);
+}
+
+__inline__ Bitmap* Bitmap::FromFile(const WCHAR *filename,
+		BOOL useEmbeddedColorManagement)
+{
+	return new Bitmap(filename, useEmbeddedColorManagement);
+}
+
+__inline__ Bitmap* Bitmap::FromHBITMAP(HBITMAP hbm, HPALETTE hpal)
+{
+	return new Bitmap(hbm, hpal);
+}
+
+__inline__ Bitmap* Bitmap::FromHICON(HICON icon)
+{
+	return new Bitmap(icon);
+}
+
+__inline__ Bitmap* Bitmap::FromResource(
+		HINSTANCE hInstance, const WCHAR *bitmapName)
+{
+	return new Bitmap(hInstance, bitmapName);
+}
+
+__inline__ Bitmap* Bitmap::FromStream(IStream *stream,
+		BOOL useEmbeddedColorManagement)
+{
+	return new Bitmap(stream, useEmbeddedColorManagement);
+}
+
+//TODO: [GDI+ 1.1] Bitmap::ApplyEffect
+//__inline__ Status Bitmap::ApplyEffect(Bitmap **inputs, INT numInputs,
+//		Effect *effect, RECT *ROI, RECT *outputRect, Bitmap **output)
+//{
+//	return NotImplemented;
+//}
+
+__inline__ Status Bitmap::InitializePalette(ColorPalette *palette,
+		PaletteType paletteType, INT optimalColors,
+		BOOL useTransparentColor, Bitmap *bitmap)
+{
+	// FIXME: can't test GdipInitializePalette b/c it isn't exported in 1.0
+	return DllExports::GdipInitializePalette(palette, paletteType,
+			optimalColors, useTransparentColor,
+			bitmap ? (GpBitmap*) bitmap->nativeImage : NULL);
+}
+
+__inline__ Bitmap::Bitmap(const BITMAPINFO *gdiBitmapInfo, VOID *gdiBitmapData):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromGdiDib(
+			gdiBitmapInfo, gdiBitmapData, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(IDirectDrawSurface7 *surface): Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromDirectDrawSurface(
+			surface, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(const WCHAR *filename,
+		BOOL useEmbeddedColorManagement): Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	if (useEmbeddedColorManagement) {
+		lastStatus = DllExports::GdipCreateBitmapFromFileICM(
+				filename, &nativeBitmap);
+	} else {
+		lastStatus = DllExports::GdipCreateBitmapFromFile(
+				filename, &nativeBitmap);
+	}
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(HBITMAP hbm, HPALETTE hpal):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromHBITMAP(
+			hbm, hpal, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(HICON hicon):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromHICON(hicon, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(HINSTANCE hInstance, const WCHAR *bitmapName):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromResource(
+			hInstance, bitmapName, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(IStream *stream, BOOL useEmbeddedColorManagement):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	if (useEmbeddedColorManagement) {
+		lastStatus = DllExports::GdipCreateBitmapFromStreamICM(
+				stream, &nativeBitmap);
+	} else {
+		lastStatus = DllExports::GdipCreateBitmapFromStream(
+				stream, &nativeBitmap);
+	}
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(INT width, INT height, Graphics *target):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromGraphics(
+			width, height, target ? target->nativeGraphics : NULL,
+			&nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(INT width, INT height, PixelFormat format):
+	Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromScan0(
+			width, height, 0, format, NULL, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap::Bitmap(INT width, INT height, INT stride,
+		PixelFormat format, BYTE *scan0): Image(NULL, Ok)
+{
+	GpBitmap *nativeBitmap = NULL;
+	lastStatus = DllExports::GdipCreateBitmapFromScan0(
+			width, height, stride, format, scan0, &nativeBitmap);
+	nativeImage = nativeBitmap;
+}
+
+__inline__ Bitmap* Bitmap::Clone(const RectF& rect, PixelFormat format) const
+{
+	return Clone(rect.X, rect.Y, rect.Width, rect.Height, format);
+}
+
+__inline__ Bitmap* Bitmap::Clone(const Rect& rect, PixelFormat format) const
+{
+	return Clone(rect.X, rect.Y, rect.Width, rect.Height, format);
+}
+
+__inline__ Bitmap* Bitmap::Clone(REAL x, REAL y, REAL width, REAL height,
+		PixelFormat format) const
+{
+	GpBitmap *cloneBitmap = NULL;
+	Status status = updateStatus(DllExports::GdipCloneBitmapArea(
+			x, y, width, height, format,
+			(GpBitmap*) nativeImage, &cloneBitmap));
+	if (status == Ok) {
+		Bitmap *result = new Bitmap(cloneBitmap, lastStatus);
+		if (!result) {
+			DllExports::GdipDisposeImage(cloneBitmap);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ Bitmap* Bitmap::Clone(INT x, INT y, INT width, INT height,
+		PixelFormat format) const
+{
+	GpBitmap *cloneBitmap = NULL;
+	Status status = updateStatus(DllExports::GdipCloneBitmapAreaI(
+			x, y, width, height, format,
+			(GpBitmap*) nativeImage, &cloneBitmap));
+	if (status == Ok) {
+		Bitmap *result = new Bitmap(cloneBitmap, lastStatus);
+		if (!result) {
+			DllExports::GdipDisposeImage(cloneBitmap);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+//TODO: [GDI+ 1.1] Bitmap::ApplyEffect
+//__inline__ Status Bitmap::ApplyEffect(Effect *effect, RECT *ROI)
+//{
+//	return NotImplemented;
+//}
+
+__inline__ Status Bitmap::ConvertFormat(PixelFormat format,
+		DitherType ditherType, PaletteType paletteType,
+		ColorPalette *palette, REAL alphaThresholdPercent)
+{
+	// FIXME: can't test GdipBitmapConvertFormat b/c it isn't exported in 1.0
+	return updateStatus(DllExports::GdipBitmapConvertFormat(
+			(GpBitmap*) nativeImage, format, ditherType,
+			paletteType, palette, alphaThresholdPercent));
+}
+
+__inline__ Status Bitmap::GetHBITMAP(
+		const Color& colorBackground, HBITMAP *hbmReturn) const
+{
+	return updateStatus(DllExports::GdipCreateHBITMAPFromBitmap(
+			(GpBitmap*) nativeImage, hbmReturn,
+			colorBackground.GetValue()));
+}
+
+__inline__ Status Bitmap::GetHICON(HICON *icon) const
+{
+	return updateStatus(DllExports::GdipCreateHICONFromBitmap(
+			(GpBitmap*) nativeImage, icon));
+}
+
+__inline__ Status Bitmap::GetHistogram(HistogramFormat format,
+		UINT numberOfEntries,
+		UINT *channel0, UINT *channel1,
+		UINT *channel2, UINT *channel3) const
+{
+	return updateStatus(DllExports::GdipBitmapGetHistogram(
+			(GpBitmap*) nativeImage, format, numberOfEntries,
+			channel0, channel1, channel2, channel3));
+}
+
+__inline__ Status Bitmap::GetHistogramSize(HistogramFormat format,
+		UINT *numberOfEntries) const
+{
+	return updateStatus(DllExports::GdipBitmapGetHistogramSize(
+			format, numberOfEntries));
+}
+
+__inline__ Status Bitmap::GetPixel(INT x, INT y, Color *color) const
+{
+	return updateStatus(DllExports::GdipBitmapGetPixel(
+			(GpBitmap*) nativeImage, x, y,
+			color ? &color->Value : NULL));
+}
+
+__inline__ Status Bitmap::LockBits(const Rect *rect, UINT flags,
+		PixelFormat format, BitmapData *lockedBitmapData)
+{
+	return updateStatus(DllExports::GdipBitmapLockBits(
+			(GpBitmap*) nativeImage, rect, flags, format,
+			lockedBitmapData));
+}
+
+__inline__ Status Bitmap::SetPixel(INT x, INT y, const Color& color)
+{
+	return updateStatus(DllExports::GdipBitmapSetPixel(
+			(GpBitmap*) nativeImage, x, y, color.GetValue()));
+}
+
+__inline__ Status Bitmap::SetResolution(REAL xdpi, REAL ydpi)
+{
+	return updateStatus(DllExports::GdipBitmapSetResolution(
+			(GpBitmap*) nativeImage, xdpi, ydpi));
+}
+
+__inline__ Status Bitmap::UnlockBits(BitmapData *lockedBitmapData)
+{
+	return updateStatus(DllExports::GdipBitmapUnlockBits(
+			(GpBitmap*) nativeImage, lockedBitmapData));
+}
+
+
+// CachedBitmap
+
+__inline__ CachedBitmap::CachedBitmap(Bitmap *bitmap, Graphics *graphics):
+	nativeCachedBitmap(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateCachedBitmap(
+			bitmap ? ((GpBitmap*) bitmap->nativeImage) : NULL,
+			graphics ? graphics->nativeGraphics : NULL,
+			&nativeCachedBitmap);
+}
+
+__inline__ CachedBitmap::~CachedBitmap()
+{
+	DllExports::GdipDeleteCachedBitmap(nativeCachedBitmap);
+}
+
+
+// CustomLineCap
+
+__inline__ CustomLineCap::CustomLineCap(
+		const GraphicsPath *fillPath,
+		const GraphicsPath *strokePath,
+		LineCap baseCap, REAL baseInset):
+		nativeCustomLineCap(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateCustomLineCap(
+			fillPath ? fillPath->nativePath : NULL,
+			strokePath ? strokePath->nativePath : NULL,
+			baseCap, baseInset, &nativeCustomLineCap);
+}
+
+__inline__ LineCap CustomLineCap::GetBaseCap() const
+{
+	LineCap result = LineCapFlat;
+	updateStatus(DllExports::GdipGetCustomLineCapBaseCap(
+			nativeCustomLineCap, &result));
+	return result;
+}
+
+__inline__ REAL CustomLineCap::GetBaseInset() const
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetCustomLineCapBaseInset(
+			nativeCustomLineCap, &result));
+	return result;
+}
+
+__inline__ Status CustomLineCap::GetStrokeCaps(LineCap *startCap,
+		LineCap *endCap) const
+{
+	return updateStatus(DllExports::GdipGetCustomLineCapStrokeCaps(
+			nativeCustomLineCap, startCap, endCap));
+}
+
+__inline__ LineJoin CustomLineCap::GetStrokeJoin() const
+{
+	LineJoin result = LineJoinMiter;
+	updateStatus(DllExports::GdipGetCustomLineCapStrokeJoin(
+			nativeCustomLineCap, &result));
+	return result;
+}
+
+__inline__ REAL CustomLineCap::GetWidthScale() const
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetCustomLineCapWidthScale(
+			nativeCustomLineCap, &result));
+	return result;
+}
+
+__inline__ Status CustomLineCap::SetBaseCap(LineCap baseCap)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapBaseCap(
+			nativeCustomLineCap, baseCap));
+}
+
+__inline__ Status CustomLineCap::SetBaseInset(REAL inset)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapBaseInset(
+			nativeCustomLineCap, inset));
+}
+
+__inline__ Status CustomLineCap::SetStrokeCap(LineCap strokeCap)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapStrokeCaps(
+			nativeCustomLineCap, strokeCap, strokeCap));
+}
+
+__inline__ Status CustomLineCap::SetStrokeCaps(LineCap startCap, LineCap endCap)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapStrokeCaps(
+			nativeCustomLineCap, startCap, endCap));
+}
+
+__inline__ Status CustomLineCap::SetStrokeJoin(LineJoin lineJoin)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapStrokeJoin(
+			nativeCustomLineCap, lineJoin));
+}
+
+__inline__ Status CustomLineCap::SetWidthScale(REAL widthScale)
+{
+	return updateStatus(DllExports::GdipSetCustomLineCapWidthScale(
+			nativeCustomLineCap, widthScale));
+}
+
+
+// Font
+
+__inline__ Font::Font(const FontFamily *family,
+		REAL emSize, INT style, Unit unit):
+		nativeFont(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFont(
+			family ? family->nativeFontFamily : NULL,
+			emSize, style, unit, &nativeFont);
+}
+
+__inline__ Font::Font(HDC hdc, HFONT hfont):
+	nativeFont(NULL), lastStatus(Ok)
+{
+	LOGFONTW logfont;
+	if (GetObject(hfont, sizeof logfont, &logfont)) {
+		lastStatus = DllExports::GdipCreateFontFromLogfontW(
+				hdc, &logfont, &nativeFont);
+	} else {
+		lastStatus = DllExports::GdipCreateFontFromDC(
+				hdc, &nativeFont);
+	}
+}
+
+__inline__ Font::Font(HDC hdc, const LOGFONTA *logfont):
+	nativeFont(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFontFromLogfontA(
+			hdc, logfont, &nativeFont);
+}
+
+__inline__ Font::Font(HDC hdc, const LOGFONTW *logfont):
+	nativeFont(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFontFromLogfontW(
+			hdc, logfont, &nativeFont);
+}
+
+__inline__ Font::Font(HDC hdc):
+	nativeFont(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFontFromDC(hdc, &nativeFont);
+}
+
+__inline__ Font::Font(const WCHAR *familyName, REAL emSize, INT style,
+		Unit unit, const FontCollection *fontCollection):
+		nativeFont(NULL), lastStatus(Ok)
+{
+	GpFontFamily *nativeFamily = NULL;
+	lastStatus = DllExports::GdipCreateFontFamilyFromName(
+			familyName,
+			fontCollection ? fontCollection->nativeFontCollection : NULL,
+			&nativeFamily);
+
+	if (nativeFamily) {
+		lastStatus = DllExports::GdipCreateFont(
+				nativeFamily, emSize, style, unit, &nativeFont);
+		DllExports::GdipDeleteFontFamily(nativeFamily);
+	}
+}
+
+__inline__ Font::~Font()
+{
+	DllExports::GdipDeleteFont(nativeFont);
+}
+
+__inline__ Font* Font::Clone() const
+{
+	GpFont *cloneFont = NULL;
+	Status status = updateStatus(DllExports::GdipCloneFont(
+			nativeFont, &cloneFont));
+	if (status == Ok) {
+		Font *result = new Font(cloneFont, lastStatus);
+		if (!result) {
+			DllExports::GdipDeleteFont(cloneFont);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ Status Font::GetFamily(FontFamily *family) const
+{
+	if (!family) return lastStatus = InvalidParameter;
+	// FIXME: do we need to call GdipDeleteFontFamily first?
+	return family->lastStatus = updateStatus(DllExports::GdipGetFamily(
+			nativeFont, &family->nativeFontFamily));
+}
+
+__inline__ REAL Font::GetHeight(const Graphics *graphics) const
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetFontHeight(
+			nativeFont, graphics ? graphics->nativeGraphics : NULL,
+			&result));
+	return result;
+}
+
+__inline__ REAL Font::GetHeight(REAL dpi) const
+{
+	REAL result = 0.0f;
+	updateStatus(DllExports::GdipGetFontHeightGivenDPI(
+			nativeFont, dpi, &result));
+	return result;
+}
+
+__inline__ Status Font::GetLogFontA(const Graphics *graphics, LOGFONTA *logfontA)
+const
+{
+	return updateStatus(DllExports::GdipGetLogFontA(
+			nativeFont, graphics ? graphics->nativeGraphics : NULL,
+			logfontA));
+}
+
+__inline__ Status Font::GetLogFontW(const Graphics *graphics, LOGFONTW *logfontW)
+const
+{
+	return updateStatus(DllExports::GdipGetLogFontW(
+			nativeFont, graphics ? graphics->nativeGraphics : NULL,
+			logfontW));
+}
+
+__inline__ REAL Font::GetSize() const
+{
+	REAL result = 0.0;
+	updateStatus(DllExports::GdipGetFontSize(nativeFont, &result));
+	return result;
+}
+
+__inline__ INT Font::GetStyle() const
+{
+	INT result = FontStyleRegular;
+	updateStatus(DllExports::GdipGetFontStyle(nativeFont, &result));
+	return result;
+}
+
+__inline__ Unit Font::GetUnit() const
+{
+	Unit result = UnitPoint;
+	updateStatus(DllExports::GdipGetFontUnit(nativeFont, &result));
+	return result;
+}
+
+
+// FontCollection
+
+__inline__ FontCollection::FontCollection():
+	nativeFontCollection(NULL), lastStatus(Ok)
+{
+}
+
+__inline__ Status FontCollection::GetFamilies(INT numSought,
+		FontFamily *families, INT *numFound) const
+{
+	if (numSought <= 0 || !families || !numFound)
+		return lastStatus = InvalidParameter;
+
+	for (int i = 0; i < numSought; ++i) {
+		families[i].nativeFontFamily = NULL;
+		families[i].lastStatus = FontFamilyNotFound;
+	}
+	*numFound = 0;
+
+	GpFontFamily **nativeFamilyArray = (GpFontFamily**)
+		DllExports::GdipAlloc(numSought * sizeof (GpFontFamily*));
+	if (!nativeFamilyArray)
+		return lastStatus = OutOfMemory;
+
+	Status status = updateStatus(DllExports::GdipGetFontCollectionFamilyList(
+			nativeFontCollection, numSought, nativeFamilyArray,
+			numFound));
+
+	// FIXME: must the native GpFontFamily objects be cloned? Seems so.
+	// (if this is not done, the "Creating a Private Font Collection"
+	// example crashes on "delete[] pFontFamily")
+
+	if (status == Ok) {
+		for (int i = 0; i < *numFound; ++i) {
+			families[i].lastStatus =
+				updateStatus(DllExports::GdipCloneFontFamily(
+					nativeFamilyArray[i],
+					&families[i].nativeFontFamily));
+		}
+	}
+
+	DllExports::GdipFree(nativeFamilyArray);
+	return status;
+}
+
+__inline__ INT FontCollection::GetFamilyCount() const
+{
+	INT result = 0;
+	updateStatus(DllExports::GdipGetFontCollectionFamilyCount(
+			nativeFontCollection, &result));
+	return result;
+}
+
+
+// FontFamily
+
+// FIXME: do FontFamily::GenericMonospace() et al. need to be thread safe?
+// FIXME: maybe put parts of this in gdiplus.c
+
+extern "C" void *_GdipFontFamilyCachedGenericMonospace;
+extern "C" void *_GdipFontFamilyCachedGenericSansSerif;
+extern "C" void *_GdipFontFamilyCachedGenericSerif;
+
+__inline__ const FontFamily* FontFamily::GenericMonospace()
+{
+	if (!_GdipFontFamilyCachedGenericMonospace) {
+		GpFontFamily *nativeFontFamily = 0;
+		Status status = DllExports::GdipGetGenericFontFamilyMonospace(
+				&nativeFontFamily);
+		if (status == Ok && nativeFontFamily) {
+			_GdipFontFamilyCachedGenericMonospace = (void*)
+				new FontFamily(nativeFontFamily, Ok);
+		}
+	}
+	return (FontFamily*) _GdipFontFamilyCachedGenericMonospace;
+}
+
+__inline__ const FontFamily* FontFamily::GenericSansSerif()
+{
+	if (!_GdipFontFamilyCachedGenericSansSerif) {
+		GpFontFamily *nativeFontFamily = 0;
+		Status status = DllExports::GdipGetGenericFontFamilySansSerif(
+				&nativeFontFamily);
+		if (status == Ok && nativeFontFamily) {
+			_GdipFontFamilyCachedGenericSansSerif = (void*)
+				new FontFamily(nativeFontFamily, Ok);
+		}
+	}
+	return (FontFamily*) _GdipFontFamilyCachedGenericSansSerif;
+}
+
+__inline__ const FontFamily* FontFamily::GenericSerif()
+{
+	if (!_GdipFontFamilyCachedGenericSerif) {
+		GpFontFamily *nativeFontFamily = 0;
+		Status status = DllExports::GdipGetGenericFontFamilySerif(
+				&nativeFontFamily);
+		if (status == Ok && nativeFontFamily) {
+			_GdipFontFamilyCachedGenericSerif = (void*)
+				new FontFamily(nativeFontFamily, Ok);
+		}
+	}
+	return (FontFamily*) _GdipFontFamilyCachedGenericSerif;
+}
+
+__inline__ FontFamily::FontFamily():
+	nativeFontFamily(NULL), lastStatus(Ok)
+{
+}
+
+__inline__ FontFamily::FontFamily(const WCHAR *name,
+		const FontCollection *fontCollection):
+		nativeFontFamily(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateFontFamilyFromName(name,
+			fontCollection ? fontCollection->nativeFontCollection : NULL,
+			&nativeFontFamily);
+}
+
+__inline__ FontFamily::~FontFamily()
+{
+	DllExports::GdipDeleteFontFamily(nativeFontFamily);
+}
+
+__inline__ FontFamily* FontFamily::Clone() const
+{
+	GpFontFamily *cloneFontFamily = NULL;
+	Status status = updateStatus(DllExports::GdipCloneFontFamily(
+			nativeFontFamily, &cloneFontFamily));
+	if (status == Ok) {
+		FontFamily *result = new FontFamily(cloneFontFamily, lastStatus);
+		if (!result) {
+			DllExports::GdipDeleteFontFamily(cloneFontFamily);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ UINT16 FontFamily::GetCellAscent(INT style) const
+{
+	UINT16 result = 0;
+	updateStatus(DllExports::GdipGetCellAscent(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+__inline__ UINT16 FontFamily::GetCellDescent(INT style) const
+{
+	UINT16 result = 0;
+	updateStatus(DllExports::GdipGetCellDescent(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+__inline__ UINT16 FontFamily::GetEmHeight(INT style) const
+{
+	UINT16 result = 0;
+	updateStatus(DllExports::GdipGetEmHeight(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+__inline__ Status FontFamily::GetFamilyName(WCHAR name[LF_FACESIZE],
+		LANGID language) const
+{
+	return updateStatus(DllExports::GdipGetFamilyName(
+			nativeFontFamily, name, language));
+}
+
+__inline__ UINT16 FontFamily::GetLineSpacing(INT style) const
+{
+	UINT16 result = 0;
+	updateStatus(DllExports::GdipGetLineSpacing(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+__inline__ BOOL FontFamily::IsStyleAvailable(INT style) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsStyleAvailable(
+			nativeFontFamily, style, &result));
+	return result;
+}
+
+
+// InstalledFontCollection
+
+__inline__ InstalledFontCollection::InstalledFontCollection()
+{
+	lastStatus = DllExports::GdipNewInstalledFontCollection(
+			&nativeFontCollection);
+}
+
+
+// PrivateFontCollection
+
+__inline__ PrivateFontCollection::PrivateFontCollection()
+{
+	lastStatus = DllExports::GdipNewPrivateFontCollection(
+			&nativeFontCollection);
+}
+
+__inline__ Status PrivateFontCollection::AddFontFile(const WCHAR *filename)
+{
+	return updateStatus(DllExports::GdipPrivateAddFontFile(
+			nativeFontCollection, filename));
+}
+
+__inline__ Status PrivateFontCollection::AddMemoryFont(
+		const VOID *memory, INT length)
+{
+	return updateStatus(DllExports::GdipPrivateAddMemoryFont(
+			nativeFontCollection, memory, length));
+}
+
+
+// Region
+
+__inline__ Region* Region::FromHRGN(HRGN hrgn)
+{
+	return new Region(hrgn);
+}
+
+__inline__ Region::Region(): nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegion(&nativeRegion);
+}
+
+__inline__ Region::Region(const RectF& rect): nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionRect(&rect, &nativeRegion);
+}
+
+__inline__ Region::Region(const Rect& rect): nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionRectI(&rect, &nativeRegion);
+}
+
+__inline__ Region::Region(const GraphicsPath *path):
+	nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionPath(
+			path ? path->nativePath : NULL, &nativeRegion);
+}
+
+__inline__ Region::Region(const BYTE *regionData, INT size):
+	nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionRgnData(
+			regionData, size, &nativeRegion);
+}
+
+__inline__ Region::Region(HRGN hrgn): nativeRegion(NULL), lastStatus(Ok)
+{
+	lastStatus = DllExports::GdipCreateRegionHrgn(hrgn, &nativeRegion);
+}
+
+__inline__ Region::~Region()
+{
+	DllExports::GdipDeleteRegion(nativeRegion);
+}
+
+__inline__ Region* Region::Clone() const
+{
+	GpRegion *cloneRegion = NULL;
+	Status status = updateStatus(DllExports::GdipCloneRegion(
+			nativeRegion, &cloneRegion));
+	if (status == Ok) {
+		Region *result = new Region(cloneRegion, lastStatus);
+		if (!result) {
+			DllExports::GdipDeleteRegion(cloneRegion);
+			lastStatus = OutOfMemory;
+		}
+		return result;
+	} else {
+		return NULL;
+	}
+}
+
+__inline__ Status Region::Complement(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeComplement));
+}
+
+__inline__ Status Region::Complement(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeComplement));
+}
+
+__inline__ Status Region::Complement(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeComplement));
+}
+
+__inline__ Status Region::Complement(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeComplement));
+}
+
+__inline__ BOOL Region::Equals(const Region *region, const Graphics *graphics)
+const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsEqualRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ Status Region::Exclude(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeExclude));
+}
+
+__inline__ Status Region::Exclude(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeExclude));
+}
+
+__inline__ Status Region::Exclude(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeExclude));
+}
+
+__inline__ Status Region::Exclude(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeExclude));
+}
+
+__inline__ Status Region::GetBounds(RectF *rect, const Graphics *graphics) const
+{
+	return updateStatus(DllExports::GdipGetRegionBounds(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, rect));
+}
+
+__inline__ Status Region::GetBounds(Rect *rect, const Graphics *graphics) const
+{
+	return updateStatus(DllExports::GdipGetRegionBoundsI(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, rect));
+}
+
+__inline__ Status Region::GetData(BYTE *buffer, UINT bufferSize,
+		UINT *sizeFilled) const
+{
+	return updateStatus(DllExports::GdipGetRegionData(
+			nativeRegion, buffer, bufferSize, sizeFilled));
+}
+
+__inline__ UINT Region::GetDataSize() const
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetRegionDataSize(nativeRegion, &result));
+	return result;
+}
+
+__inline__ HRGN Region::GetHRGN(const Graphics *graphics) const
+{
+	HRGN result = NULL;
+	updateStatus(DllExports::GdipGetRegionHRgn(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ Status Region::GetRegionScans(const Matrix *matrix,
+		RectF *rects, INT *count) const
+{
+	return updateStatus(DllExports::GdipGetRegionScans(
+			nativeRegion, rects, count,
+			matrix ? matrix->nativeMatrix : NULL));
+}
+
+__inline__ Status Region::GetRegionScans(const Matrix *matrix,
+		Rect *rects, INT *count) const
+{
+	return updateStatus(DllExports::GdipGetRegionScansI(
+			nativeRegion, rects, count,
+			matrix ? matrix->nativeMatrix : NULL));
+}
+
+__inline__ UINT Region::GetRegionScansCount(const Matrix *matrix) const
+{
+	UINT result = 0;
+	updateStatus(DllExports::GdipGetRegionScansCount(
+			nativeRegion, &result,
+			matrix ? matrix->nativeMatrix : NULL));
+	return result;
+}
+
+__inline__ Status Region::Intersect(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeIntersect));
+}
+
+__inline__ Status Region::Intersect(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeIntersect));
+}
+
+__inline__ Status Region::Intersect(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeIntersect));
+}
+
+__inline__ Status Region::Intersect(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeIntersect));
+}
+
+__inline__ BOOL Region::IsEmpty(const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsEmptyRegion(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsInfinite(const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsInfiniteRegion(nativeRegion,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(REAL x, REAL y,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionPoint(
+			nativeRegion, x, y,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(INT x, INT y,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionPointI(
+			nativeRegion, x, y,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(const PointF& point,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionPoint(
+			nativeRegion, point.X, point.Y,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(const Point& point,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionPointI(
+			nativeRegion, point.X, point.Y,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(REAL x, REAL y, REAL width, REAL height,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionRect(
+			nativeRegion, x, y, width, height,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(INT x, INT y, INT width, INT height,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionRectI(
+			nativeRegion, x, y, width, height,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(const RectF& rect,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionRect(
+			nativeRegion, rect.X, rect.Y, rect.Width, rect.Height,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL Region::IsVisible(const Rect& rect,
+		const Graphics *graphics) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisibleRegionRectI(
+			nativeRegion, rect.X, rect.Y, rect.Width, rect.Height,
+			graphics ? graphics->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ Status Region::MakeEmpty()
+{
+	return updateStatus(DllExports::GdipSetEmpty(nativeRegion));
+}
+
+__inline__ Status Region::MakeInfinite()
+{
+	return updateStatus(DllExports::GdipSetInfinite(nativeRegion));
+}
+
+__inline__ Status Region::Transform(const Matrix *matrix)
+{
+	return updateStatus(DllExports::GdipTransformRegion(
+			nativeRegion, matrix ? matrix->nativeMatrix : NULL));
+}
+
+__inline__ Status Region::Translate(REAL dx, REAL dy)
+{
+	return updateStatus(DllExports::GdipTranslateRegion(
+			nativeRegion, dx, dy));
+}
+
+__inline__ Status Region::Translate(INT dx, INT dy)
+{
+	return updateStatus(DllExports::GdipTranslateRegionI(
+			nativeRegion, dx, dy));
+}
+
+__inline__ Status Region::Union(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeUnion));
+}
+
+__inline__ Status Region::Union(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeUnion));
+}
+
+__inline__ Status Region::Union(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeUnion));
+}
+
+__inline__ Status Region::Union(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeUnion));
+}
+
+__inline__ Status Region::Xor(const RectF& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRect(
+			nativeRegion, &rect, CombineModeXor));
+}
+
+__inline__ Status Region::Xor(const Rect& rect)
+{
+	return updateStatus(DllExports::GdipCombineRegionRectI(
+			nativeRegion, &rect, CombineModeXor));
+}
+
+__inline__ Status Region::Xor(const Region *region)
+{
+	return updateStatus(DllExports::GdipCombineRegionRegion(
+			nativeRegion, region ? region->nativeRegion : NULL,
+			CombineModeXor));
+}
+
+__inline__ Status Region::Xor(const GraphicsPath *path)
+{
+	return updateStatus(DllExports::GdipCombineRegionPath(
+			nativeRegion, path ? path->nativePath : NULL,
+			CombineModeXor));
+}
+
+
+// GraphicsPath
+
+__inline__ BOOL GraphicsPath::IsOutlineVisible(REAL x, REAL y, const Pen *pen,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsOutlineVisiblePathPoint(
+			nativePath, x, y, pen ? pen->nativePen : NULL,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsOutlineVisible(INT x, INT y, const Pen *pen,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsOutlineVisiblePathPointI(
+			nativePath, x, y, pen ? pen->nativePen : NULL,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsOutlineVisible(const PointF& point, const Pen *pen,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsOutlineVisiblePathPoint(
+			nativePath, point.X, point.Y,
+			pen ? pen->nativePen : NULL,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsOutlineVisible(const Point& point, const Pen *pen,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsOutlineVisiblePathPointI(
+			nativePath, point.X, point.Y,
+			pen ? pen->nativePen : NULL,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsVisible(REAL x, REAL y, const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisiblePathPoint(
+			nativePath, x, y,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+__inline__ BOOL GraphicsPath::IsVisible(INT x, INT y, const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisiblePathPointI(
+			nativePath, x, y,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsVisible(const PointF& point,
+		const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisiblePathPoint(
+			nativePath, point.X, point.Y,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+__inline__ BOOL GraphicsPath::IsVisible(const Point& point, const Graphics *g) const
+{
+	BOOL result = FALSE;
+	updateStatus(DllExports::GdipIsVisiblePathPointI(
+			nativePath, point.X, point.Y,
+			g ? g->nativeGraphics : NULL, &result));
+	return result;
+}
+
+
+// PathData
+
+__inline__ Status PathData::AllocateArrays(INT capacity)
+{
+	if (capacity < 0) {
+		return InvalidParameter;
+	} else if (Count < capacity) {
+		FreeArrays();
+
+		PointF *pointArray = (PointF*)
+			DllExports::GdipAlloc(capacity * sizeof(PointF));
+		if (!pointArray)
+			return OutOfMemory;
+
+		BYTE *typeArray = (BYTE*)
+			DllExports::GdipAlloc(capacity * sizeof(BYTE));
+		if (!typeArray) {
+			DllExports::GdipFree(pointArray);
+			return OutOfMemory;
+		}
+
+		Count = capacity;
+		Points = pointArray;
+		Types = typeArray;
+	}
+	return Ok;
+}
+
+__inline__ VOID PathData::FreeArrays()
+{
+	if (Points) DllExports::GdipFree(Points);
+	if (Types) DllExports::GdipFree(Types);
+	Count = 0;
+	Points = NULL;
+	Types = NULL;
+}
+
+#endif /* __GDIPLUS_IMPL_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusinit.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusinit.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,74 @@
+/*
+ * gdiplusinit.h
+ *
+ * GDI+ Initialization
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_INIT_H
+#define __GDIPLUS_INIT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef struct GdiplusStartupInput {
+	UINT32 GdiplusVersion;
+	DebugEventProc DebugEventCallback;
+	BOOL SuppressBackgroundThread;
+	BOOL SuppressExternalCodecs;
+
+	#ifdef __cplusplus
+	GdiplusStartupInput(DebugEventProc debugEventCallback = NULL,
+	                    BOOL suppressBackgroundThread = FALSE,
+	                    BOOL suppressExternalCodecs = FALSE):
+		GdiplusVersion(1),
+		DebugEventCallback(debugEventCallback),
+		SuppressBackgroundThread(suppressBackgroundThread),
+		SuppressExternalCodecs(suppressExternalCodecs) {}
+	#endif /* __cplusplus */
+} GdiplusStartupInput;
+
+typedef GpStatus WINGDIPAPI (*NotificationHookProc)(ULONG_PTR *token);
+typedef VOID WINGDIPAPI (*NotificationUnhookProc)(ULONG_PTR token);
+
+typedef struct GdiplusStartupOutput {
+	NotificationHookProc NotificationHook;
+	NotificationUnhookProc NotificationUnhook;
+
+	#ifdef __cplusplus
+	GdiplusStartupOutput():
+		NotificationHook(NULL),
+		NotificationUnhook(NULL) {}
+	#endif /* __cplusplus */
+} GdiplusStartupOutput;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+GpStatus WINGDIPAPI GdiplusStartup(ULONG_PTR*,GDIPCONST GdiplusStartupInput*,GdiplusStartupOutput*);
+VOID WINGDIPAPI GdiplusShutdown(ULONG_PTR);
+GpStatus WINGDIPAPI GdiplusNotificationHook(ULONG_PTR*);
+VOID WINGDIPAPI GdiplusNotificationUnhook(ULONG_PTR);
+
+#ifdef __cplusplus
+}  /* extern "C" */
+#endif
+
+
+#endif /* __GDIPLUS_INIT_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdipluslinecaps.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdipluslinecaps.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,131 @@
+/*
+ * gdipluslinecaps.h
+ *
+ * GDI+ AdjustableArrowCap class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_LINECAPS_H
+#define __GDIPLUS_LINECAPS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdipluslinecaps.h."
+#endif
+
+class AdjustableArrowCap: public CustomLineCap
+{
+public:
+	AdjustableArrowCap(REAL height, REAL width, BOOL isFilled):
+		CustomLineCap(NULL, Ok)
+	{
+		GpAdjustableArrowCap *nativeAdjustableArrowCap = NULL;
+		lastStatus = DllExports::GdipCreateAdjustableArrowCap(
+				height, width, isFilled,
+				&nativeAdjustableArrowCap);
+		nativeCustomLineCap = nativeAdjustableArrowCap;
+	}
+	virtual ~AdjustableArrowCap()
+	{
+	}
+	virtual AdjustableArrowCap* Clone() const
+	{
+		GpCustomLineCap *cloneCustomLineCap = NULL;
+		Status status = updateStatus(DllExports::GdipCloneCustomLineCap(
+				nativeCustomLineCap, &cloneCustomLineCap));
+		if (status == Ok) {
+			AdjustableArrowCap *result = new AdjustableArrowCap(
+					cloneCustomLineCap, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteCustomLineCap(
+						cloneCustomLineCap);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	REAL GetHeight() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetAdjustableArrowCapHeight(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				&result));
+		return result;
+	}
+	REAL GetMiddleInset() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetAdjustableArrowCapMiddleInset(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				&result));
+		return result;
+	}
+	REAL GetWidth() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetAdjustableArrowCapWidth(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				&result));
+		return result;
+	}
+	BOOL IsFilled() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipGetAdjustableArrowCapFillState(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				&result));
+		return result;
+	}
+	Status SetFillState(BOOL isFilled)
+	{
+		return updateStatus(DllExports::GdipSetAdjustableArrowCapFillState(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				isFilled));
+	}
+	Status SetHeight(REAL height)
+	{
+		return updateStatus(DllExports::GdipSetAdjustableArrowCapHeight(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				height));
+	}
+	Status SetMiddleInset(REAL middleInset)
+	{
+		return updateStatus(DllExports::GdipSetAdjustableArrowCapMiddleInset(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				middleInset));
+	}
+	Status SetWidth(REAL width)
+	{
+		return updateStatus(DllExports::GdipSetAdjustableArrowCapWidth(
+				(GpAdjustableArrowCap*) nativeCustomLineCap,
+				width));
+	}
+
+private:
+	AdjustableArrowCap(GpCustomLineCap *customLineCap, Status status):
+		CustomLineCap(customLineCap, status) {}
+	AdjustableArrowCap(const AdjustableArrowCap&);
+	AdjustableArrowCap& operator=(const AdjustableArrowCap&);
+};
+
+#endif /* __GDIPLUS_LINECAPS_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusmatrix.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusmatrix.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,240 @@
+/*
+ * gdiplusmatrix.h
+ *
+ * GDI+ Matrix class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_MATRIX_H
+#define __GDIPLUS_MATRIX_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusmatrix.h."
+#endif
+
+#define GDIP_MATRIX_PI \
+	3.1415926535897932384626433832795028841971693993751058209749445923078164
+
+class Matrix: public GdiplusBase
+{
+	friend class Graphics;
+	friend class GraphicsPath;
+	friend class LinearGradientBrush;
+	friend class PathGradientBrush;
+	friend class Pen;
+	friend class Region;
+	friend class TextureBrush;
+
+public:
+	Matrix(): nativeMatrix(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateMatrix(&nativeMatrix);
+	}
+	Matrix(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy):
+			nativeMatrix(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateMatrix2(
+				m11, m12, m21, m22, dx, dy,
+				&nativeMatrix);
+	}
+	Matrix(const RectF& rect, const PointF *dstplg):
+			nativeMatrix(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateMatrix3(
+				&rect, dstplg, &nativeMatrix);
+	}
+	Matrix(const Rect& rect, const Point *dstplg):
+			nativeMatrix(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateMatrix3I(
+				&rect, dstplg, &nativeMatrix);
+	}
+	~Matrix()
+	{
+		DllExports::GdipDeleteMatrix(nativeMatrix);
+	}
+	Matrix* Clone() const
+	{
+		GpMatrix *cloneMatrix = NULL;
+		Status status = updateStatus(DllExports::GdipCloneMatrix(
+				nativeMatrix, &cloneMatrix));
+		if (status == Ok) {
+			Matrix *result = new Matrix(cloneMatrix, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteMatrix(cloneMatrix);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	BOOL Equals(const Matrix *matrix) const
+	{
+		BOOL result;
+		updateStatus(DllExports::GdipIsMatrixEqual(
+				nativeMatrix,
+				matrix ? matrix->nativeMatrix : NULL, &result));
+		return result;
+	}
+	Status GetElements(REAL *m) const
+	{
+		return updateStatus(DllExports::GdipGetMatrixElements(
+				nativeMatrix, m));
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	Status Invert()
+	{
+		return updateStatus(DllExports::GdipInvertMatrix(nativeMatrix));
+	}
+	BOOL IsIdentity() const
+	{
+		BOOL result;
+		updateStatus(DllExports::GdipIsMatrixIdentity(
+				nativeMatrix, &result));
+		return result;
+	}
+	BOOL IsInvertible() const
+	{
+		BOOL result;
+		updateStatus(DllExports::GdipIsMatrixInvertible(
+				nativeMatrix, &result));
+		return result;
+	}
+	Status Multiply(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyMatrix(
+				nativeMatrix,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	REAL OffsetX() const
+	{
+		REAL m[6];
+		updateStatus(DllExports::GdipGetMatrixElements(nativeMatrix, m));
+		return m[4];
+	}
+	REAL OffsetY() const
+	{
+		REAL m[6];
+		updateStatus(DllExports::GdipGetMatrixElements(nativeMatrix, m));
+		return m[5];
+	}
+	Status Reset()
+	{
+		return updateStatus(DllExports::GdipSetMatrixElements(
+				nativeMatrix,
+				1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f));
+	}
+	Status Rotate(REAL angle, MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotateMatrix(
+				nativeMatrix, angle, order));
+	}
+	Status RotateAt(REAL angle, const PointF& center,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		REAL angleRadian = angle * GDIP_MATRIX_PI / 180.0f;
+		REAL cosAngle = ::cos(angleRadian);
+		REAL sinAngle = ::sin(angleRadian);
+		REAL x = center.X;
+		REAL y = center.Y;
+
+		Matrix matrix2(cosAngle, sinAngle, -sinAngle, cosAngle,
+				x * (1.0f-cosAngle) + y * sinAngle,
+				-x * sinAngle + y * (1.0f-cosAngle));
+		Status status = matrix2.GetLastStatus();
+		if (status == Ok) {
+			return Multiply(&matrix2, order);
+		} else {
+			return lastStatus = status;
+		}
+	}
+	Status Scale(REAL scaleX, REAL scaleY,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScaleMatrix(
+				nativeMatrix, scaleX, scaleY, order));
+	}
+	Status SetElements(REAL m11, REAL m12, REAL m21, REAL m22,
+			REAL dx, REAL dy)
+	{
+		return updateStatus(DllExports::GdipSetMatrixElements(
+				nativeMatrix, m11, m12, m21, m22, dx, dy));
+	}
+	Status Shear(REAL shearX, REAL shearY,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipShearMatrix(
+				nativeMatrix, shearX, shearY, order));
+	}
+	Status TransformPoints(PointF *pts, INT count = 1) const
+	{
+		return updateStatus(DllExports::GdipTransformMatrixPoints(
+				nativeMatrix, pts, count));
+	}
+	Status TransformPoints(Point *pts, INT count = 1) const
+	{
+		return updateStatus(DllExports::GdipTransformMatrixPointsI(
+				nativeMatrix, pts, count));
+	}
+	Status TransformVectors(PointF *pts, INT count = 1) const
+	{
+		return updateStatus(DllExports::GdipVectorTransformMatrixPoints(
+				nativeMatrix, pts, count));
+	}
+	Status TransformVectors(Point *pts, INT count = 1) const
+	{
+		return updateStatus(DllExports::GdipVectorTransformMatrixPointsI(
+				nativeMatrix, pts, count));
+	}
+	Status Translate(REAL offsetX, REAL offsetY,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslateMatrix(
+				nativeMatrix, offsetX, offsetY, order));
+	}
+
+private:
+	Matrix(GpMatrix *matrix, Status status):
+		nativeMatrix(matrix), lastStatus(status) {}
+	Matrix(const Matrix&);
+	Matrix& operator=(const Matrix&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpMatrix *nativeMatrix;
+	mutable Status lastStatus;
+};
+
+#undef GDIP_MATRIX_PI
+
+#endif /* __GDIPLUS_MATRIX_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusmem.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusmem.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,42 @@
+/*
+ * gdiplusmem.h
+ *
+ * GDI+ memory allocation
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_MEM_H
+#define __GDIPLUS_MEM_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __cplusplus
+namespace DllExports {
+extern "C" {
+#endif
+
+VOID* WINGDIPAPI GdipAlloc(size_t);
+VOID WINGDIPAPI GdipFree(VOID*);
+
+#ifdef __cplusplus
+}  /* extern "C" */
+}  /* namespace DllExports */
+#endif
+
+#endif /* __GDIPLUS_MEM_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusmetafile.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusmetafile.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,305 @@
+/*
+ * gdiplusmetafile.h
+ *
+ * GDI+ Metafile class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_METAFILE_H
+#define __GDIPLUS_METAFILE_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusmetafile.h."
+#endif
+
+class Metafile: public Image
+{
+public:
+	static UINT EmfToWmfBits(HENHMETAFILE hEmf,
+			UINT cbData16, LPBYTE pData16,
+			INT iMapMode = MM_ANISOTROPIC,
+			EmfToWmfBitsFlags eFlags = EmfToWmfBitsFlagsDefault)
+	{
+		return DllExports::GdipEmfToWmfBits(hEmf,
+				cbData16, pData16, iMapMode, eFlags);
+	}
+	static Status GetMetafileHeader(const WCHAR *filename,
+			MetafileHeader *header)
+	{
+		return DllExports::GdipGetMetafileHeaderFromFile(
+				filename, header);
+	}
+	static Status GetMetafileHeader(IStream *stream, MetafileHeader *header)
+	{
+		return DllExports::GdipGetMetafileHeaderFromStream(
+				stream, header);
+	}
+	////TODO: Metafile::GetMetafileHeader
+	//static Status GetMetafileHeader(HMETAFILE hWmf,
+	//		const WmfPlaceableFileHeader *wmfPlaceableFileHeader,
+	//		MetafileHeader *header)
+	//{
+	//	// WTF: No flat API to do this.
+	//	return NotImplemented;
+	//}
+	static Status GetMetafileHeader(HENHMETAFILE hEmf,
+			MetafileHeader *header)
+	{
+		return DllExports::GdipGetMetafileHeaderFromEmf(hEmf, header);
+	}
+
+	Metafile(HMETAFILE hWmf,
+			const WmfPlaceableFileHeader *wmfPlaceableFileHeader,
+			BOOL deleteWmf = FALSE): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromWmf(
+				hWmf, deleteWmf, wmfPlaceableFileHeader,
+				&nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(HENHMETAFILE hEmf, BOOL deleteEmf = FALSE): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromEmf(
+				hEmf, deleteEmf, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromFile(
+				filename, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename,
+			const WmfPlaceableFileHeader *wmfPlaceableFileHeader):
+			Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromWmfFile(
+				filename, wmfPlaceableFileHeader,
+				&nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(IStream *stream): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipCreateMetafileFromStream(
+				stream, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(HDC referenceHdc, EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafile(
+				referenceHdc, type, NULL, MetafileFrameUnitGdi,
+				description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(HDC referenceHdc, const RectF& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafile(
+				referenceHdc, type, &frameRect, frameUnit,
+				description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(HDC referenceHdc, const Rect& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileI(
+				referenceHdc, type, &frameRect, frameUnit,
+				description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename, HDC referenceHdc,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileFileName(
+				filename, referenceHdc, type, NULL,
+				MetafileFrameUnitGdi, description,
+				&nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename, HDC referenceHdc,
+			const RectF& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileFileName(
+				filename, referenceHdc, type, &frameRect,
+				frameUnit, description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(const WCHAR *filename, HDC referenceHdc,
+			const Rect& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileFileNameI(
+				filename, referenceHdc, type, &frameRect,
+				frameUnit, description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(IStream *stream, HDC referenceHdc,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileStream(
+				stream, referenceHdc, type, NULL,
+				MetafileFrameUnitGdi, description,
+				&nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(IStream *stream, HDC referenceHdc, const RectF& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileStream(
+				stream, referenceHdc, type, &frameRect,
+				frameUnit, description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	Metafile(IStream *stream, HDC referenceHdc, const Rect& frameRect,
+			MetafileFrameUnit frameUnit = MetafileFrameUnitGdi,
+			EmfType type = EmfTypeEmfPlusDual,
+			const WCHAR *description = NULL): Image(NULL, Ok)
+	{
+		GpMetafile *nativeMetafile = NULL;
+		lastStatus = DllExports::GdipRecordMetafileStreamI(
+				stream, referenceHdc, type, &frameRect,
+				frameUnit, description, &nativeMetafile);
+		nativeImage = nativeMetafile;
+	}
+	virtual ~Metafile()
+	{
+	}
+	virtual Metafile* Clone() const
+	{
+		GpImage *cloneImage = NULL;
+		Status status = updateStatus(DllExports::GdipCloneImage(
+				nativeImage, &cloneImage));
+		if (status == Ok) {
+			Metafile *result = new Metafile(cloneImage, lastStatus);
+			if (!result) {
+				DllExports::GdipDisposeImage(cloneImage);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
+	//Status ConvertToEmfPlus(const Graphics *refGraphics,
+	//		BOOL *conversionSuccess = NULL,
+	//		EmfType emfType = EmfTypeEmfPlusOnly,
+	//		const WCHAR *description = NULL)
+	//{
+	//	// FIXME: can't test GdipConvertToEmfPlus because it isn't exported in 1.0
+	//	return updateStatus(DllExports::GdipConvertToEmfPlus(
+	//			refGraphics ? refGraphics->nativeGraphics : NULL,
+	//			(GpMetafile*) nativeImage,
+	//			conversionSuccess, emfType, description, ???));
+	//}
+	////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
+	//Status ConvertToEmfPlus(const Graphics *refGraphics,
+	//		const WCHAR *filename,
+	//		BOOL *conversionSuccess = NULL,
+	//		EmfType emfType = EmfTypeEmfPlusOnly,
+	//		const WCHAR *description = NULL)
+	//{
+	//	// FIXME: can't test GdipConvertToEmfPlusToFile because it isn't exported in 1.0
+	//	return updateStatus(DllExports::GdipConvertToEmfPlusToFile(
+	//			refGraphics ? refGraphics->nativeGraphics : NULL,
+	//			(GpMetafile*) nativeImage, conversionSuccess,
+	//			filename, emfType, description, ???));
+	//}
+	////TODO: [GDI+ 1.1] Metafile::ConvertToEmfPlus
+	//Status ConvertToEmfPlus(const Graphics *refGraphics,
+	//		IStream *stream,
+	//		BOOL *conversionSuccess = NULL,
+	//		EmfType emfType = EmfTypeEmfPlusOnly,
+	//		const WCHAR *description = NULL)
+	//{
+	//	// FIXME: can't test GdipConvertToEmfPlusToStream because it isn't exported in 1.0
+	//	return updateStatus(DllExports::GdipConvertToEmfPlusToStream(
+	//			refGraphics ? refGraphics->nativeGraphics : NULL,
+	//			(GpMetafile*) nativeImage, conversionSuccess,
+	//			stream, emfType, description, ???));
+	//}
+	UINT GetDownLevelRasterizationLimit() const
+	{
+		UINT result = 0;
+		updateStatus(DllExports::GdipGetMetafileDownLevelRasterizationLimit(
+				(GpMetafile*) nativeImage, &result));
+		return result;
+	}
+	HENHMETAFILE GetHENHMETAFILE()
+	{
+		HENHMETAFILE result = NULL;
+		updateStatus(DllExports::GdipGetHemfFromMetafile(
+				(GpMetafile*) nativeImage, &result));
+		return result;
+	}
+	Status GetMetafileHeader(MetafileHeader *header) const
+	{
+		return updateStatus(DllExports::GdipGetMetafileHeaderFromMetafile(
+				(GpMetafile*) nativeImage, header));
+	}
+	Status PlayRecord(EmfPlusRecordType recordType, UINT flags,
+			UINT dataSize, const BYTE *data) const
+	{
+		return updateStatus(DllExports::GdipPlayMetafileRecord(
+				(GpMetafile*) nativeImage,
+				recordType, flags, dataSize, data));
+	}
+	Status SetDownLevelRasterizationLimit(UINT limitDpi)
+	{
+		return updateStatus(DllExports::GdipSetMetafileDownLevelRasterizationLimit(
+				(GpMetafile*) nativeImage, limitDpi));
+	}
+
+private:
+	Metafile(GpImage *image, Status status): Image(image, status) {}
+	Metafile(const Metafile&);
+	Metafile& operator=(const Metafile&);
+};
+
+#endif /* __GDIPLUS_METAFILE_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusmetaheader.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusmetaheader.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,193 @@
+/*
+ * gdiplusmetaheader.h
+ *
+ * GDI+ metafile header structure
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_METAHEADER_H
+#define __GDIPLUS_METAHEADER_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+
+/*
+ * FIXME: is 1 the correct value for GDIP_EMFPLUSFLAGS_DISPLAY? This number
+ * has been determined by calling Metafile::GetMetafileHeader() on a EMF+
+ * metafile which was recorded on a display device context (SampleMetafile.emf).
+ */
+#ifdef __cplusplus
+const UINT GDIP_EMFPLUSFLAGS_DISPLAY = 1;
+#else
+#define GDIP_EMFPLUSFLAGS_DISPLAY ((UINT) 1)
+#endif
+
+typedef struct tagENHMETAHEADER3 {
+	DWORD iType;
+	DWORD nSize;
+	RECTL rclBounds;
+	RECTL rclFrame;
+	DWORD dSignature;
+	DWORD nVersion;
+	DWORD nBytes;
+	DWORD nRecords;
+	WORD nHandles;
+	WORD sReserved;
+	DWORD nDescription;
+	DWORD offDescription;
+	DWORD nPalEntries;
+	SIZEL szlDevice;
+	SIZEL szlMillimeters;
+} ENHMETAHEADER3,*LPENHMETAHEADER3;
+
+typedef struct PWMFRect16 {
+	INT16 Left;
+	INT16 Top;
+	INT16 Right;
+	INT16 Bottom;
+} PWMFRect16;
+
+typedef struct WmfPlaceableFileHeader {
+	UINT32 Key;
+	INT16 Hmf;
+	PWMFRect16 BoundingBox;
+	INT16 Inch;
+	UINT32 Reserved;
+	INT16 Checksum;
+} WmfPlaceableFileHeader;
+
+typedef struct MetafileHeader {
+	MetafileType Type;
+	UINT Size;
+	UINT Version;
+	UINT EmfPlusFlags;
+	REAL DpiX;
+	REAL DpiY;
+	INT X;
+	INT Y;
+	INT Width;
+	INT Height;
+	__extension__ union {
+		METAHEADER WmfHeader;
+		ENHMETAHEADER3 EmfHeader;
+	};
+	INT EmfPlusHeaderSize;
+	INT LogicalDpiX;
+	INT LogicalDpiY;
+
+	#ifdef __cplusplus
+	public:
+	void GetBounds(Rect *rect) const
+	{
+		if (rect)
+		{
+			rect->X = X;
+			rect->Y = Y;
+			rect->Width = Width;
+			rect->Height = Height;
+		}
+	}
+	REAL GetDpiX() const
+	{
+		return DpiX;
+	}
+	REAL GetDpiY() const
+	{
+		return DpiY;
+	}
+	const ENHMETAHEADER3* GetEmfHeader() const
+	{
+		if (Type == MetafileTypeEmf
+				|| Type == MetafileTypeEmfPlusOnly
+				|| Type == MetafileTypeEmfPlusDual)
+		{
+			return &EmfHeader;
+		}
+		else
+		{
+			return NULL;
+		}
+	}
+	UINT GetEmfPlusFlags() const
+	{
+		return EmfPlusFlags;
+	}
+	UINT GetMetafileSize() const
+	{
+		return Size;
+	}
+	MetafileType GetType() const
+	{
+		return Type;
+	}
+	UINT GetVersion() const
+	{
+		return Version;
+	}
+	const METAHEADER* GetWmfHeader() const
+	{
+		if (Type == MetafileTypeWmf || Type == MetafileTypeWmfPlaceable)
+		{
+			return &WmfHeader;
+		}
+		else
+		{
+			return NULL;
+		}
+	}
+	BOOL IsDisplay() const
+	{
+		return EmfPlusFlags == GDIP_EMFPLUSFLAGS_DISPLAY;
+	}
+	BOOL IsEmf() const
+	{
+		return Type == MetafileTypeEmf;
+	}
+	BOOL IsEmfOrEmfPlus() const
+	{
+		return Type == MetafileTypeEmf
+			|| Type == MetafileTypeEmfPlusOnly
+			|| Type == MetafileTypeEmfPlusDual;
+	}
+	BOOL IsEmfPlus() const
+	{
+		return Type == MetafileTypeEmfPlusOnly
+			|| Type == MetafileTypeEmfPlusDual;
+	}
+	BOOL IsEmfPlusDual() const
+	{
+		return Type == MetafileTypeEmfPlusDual;
+	}
+	BOOL IsEmfPlusOnly() const
+	{
+		return Type == MetafileTypeEmfPlusOnly;
+	}
+	BOOL IsWmf() const
+	{
+		return Type == MetafileTypeWmf
+			|| Type == MetafileTypeWmfPlaceable;
+	}
+	BOOL IsWmfPlaceable() const
+	{
+		return Type == MetafileTypeWmfPlaceable;
+	}
+	#endif
+} MetafileHeader;
+
+#endif /* __GDIPLUS_METAHEADER_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdipluspath.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdipluspath.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,964 @@
+/*
+ * gdipluspath.h
+ *
+ * GDI+ GraphicsPath class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_PATH_H
+#define __GDIPLUS_PATH_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdipluspath.h."
+#endif
+
+// Note that some methods of GraphicsPath are implemented in gdiplusimpl.h.
+// This avoids a cyclic dependency on Graphics and Pen.
+
+class GraphicsPath: public GdiplusBase
+{
+	friend class CustomLineCap;
+	friend class Graphics;
+	friend class GraphicsPathIterator;
+	friend class PathGradientBrush;
+	friend class Region;
+
+public:
+	GraphicsPath(FillMode fillMode = FillModeAlternate):
+			nativePath(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePath(fillMode, &nativePath);
+	}
+	GraphicsPath(const PointF *points, const BYTE *types, INT count,
+			FillMode fillMode = FillModeAlternate):
+			nativePath(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePath2(
+				points, types, count, fillMode, &nativePath);
+	}
+	GraphicsPath(const Point *points, const BYTE *types, INT count,
+			FillMode fillMode = FillModeAlternate):
+			nativePath(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePath2I(
+				points, types, count, fillMode, &nativePath);
+	}
+	~GraphicsPath()
+	{
+		DllExports::GdipDeletePath(nativePath);
+	}
+	GraphicsPath* Clone() const
+	{
+		GpPath *clonePath = NULL;
+		Status status = updateStatus(DllExports::GdipClonePath(
+				nativePath, &clonePath));
+		if (status == Ok) {
+			GraphicsPath *result = new GraphicsPath(clonePath, lastStatus);
+			if (!result) {
+				DllExports::GdipDeletePath(clonePath);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status AddArc(REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathArc(nativePath,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status AddArc(INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathArcI(nativePath,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status AddArc(const RectF& rect, REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathArc(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status AddArc(const Rect& rect, REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathArcI(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status AddBezier(REAL x1, REAL y1, REAL x2, REAL y2,
+			REAL x3, REAL y3, REAL x4, REAL y4)
+	{
+		return updateStatus(DllExports::GdipAddPathBezier(nativePath,
+				x1, y1, x2, y2, x3, y3, x4, y4));
+	}
+	Status AddBezier(INT x1, INT y1, INT x2, INT y2,
+			INT x3, INT y3, INT x4, INT y4)
+	{
+		return updateStatus(DllExports::GdipAddPathBezierI(nativePath,
+				x1, y1, x2, y2, x3, y3, x4, y4));
+	}
+	Status AddBezier(const PointF& pt1, const PointF& pt2,
+			const PointF& pt3, const PointF& pt4)
+	{
+		return updateStatus(DllExports::GdipAddPathBezier(nativePath,
+				pt1.X, pt1.Y, pt2.X, pt2.Y,
+				pt3.X, pt3.Y, pt4.X, pt4.Y));
+	}
+	Status AddBezier(const Point& pt1, const Point& pt2,
+			const Point& pt3, const Point& pt4)
+	{
+		return updateStatus(DllExports::GdipAddPathBezierI(nativePath,
+				pt1.X, pt1.Y, pt2.X, pt2.Y,
+				pt3.X, pt3.Y, pt4.X, pt4.Y));
+	}
+	Status AddBeziers(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathBeziers(
+				nativePath, points, count));
+	}
+	Status AddBeziers(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathBeziersI(
+				nativePath, points, count));
+	}
+	Status AddClosedCurve(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathClosedCurve(
+				nativePath, points, count));
+	}
+	Status AddClosedCurve(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathClosedCurveI(
+				nativePath, points, count));
+	}
+	Status AddClosedCurve(const PointF *points, INT count, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathClosedCurve2(
+				nativePath, points, count, tension));
+	}
+	Status AddClosedCurve(const Point *points, INT count, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathClosedCurve2I(
+				nativePath, points, count, tension));
+	}
+	Status AddCurve(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve(
+				nativePath, points, count));
+	}
+	Status AddCurve(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathCurveI(
+				nativePath, points, count));
+	}
+	Status AddCurve(const PointF *points, INT count, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve2(
+				nativePath, points, count, tension));
+	}
+	Status AddCurve(const Point *points, INT count, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve2I(
+				nativePath, points, count, tension));
+	}
+	Status AddCurve(const PointF *points, INT count, INT offset,
+			INT numberOfSegments, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve3(
+				nativePath, points, count,
+				offset, numberOfSegments, tension));
+	}
+	Status AddCurve(const Point *points, INT count, INT offset,
+			INT numberOfSegments, REAL tension)
+	{
+		return updateStatus(DllExports::GdipAddPathCurve3I(
+				nativePath, points, count,
+				offset, numberOfSegments, tension));
+	}
+	Status AddEllipse(REAL x, REAL y, REAL width, REAL height)
+	{
+		return updateStatus(DllExports::GdipAddPathEllipse(nativePath,
+				x, y, width, height));
+	}
+	Status AddEllipse(INT x, INT y, INT width, INT height)
+	{
+		return updateStatus(DllExports::GdipAddPathEllipseI(nativePath,
+				x, y, width, height));
+	}
+	Status AddEllipse(const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipAddPathEllipse(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status AddEllipse(const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipAddPathEllipseI(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status AddLine(REAL x1, REAL y1, REAL x2, REAL y2)
+	{
+		return updateStatus(DllExports::GdipAddPathLine(nativePath,
+				x1, y1, x2, y2));
+	}
+	Status AddLine(INT x1, INT y1, INT x2, INT y2)
+	{
+		return updateStatus(DllExports::GdipAddPathLineI(nativePath,
+				x1, y1, x2, y2));
+	}
+	Status AddLine(const PointF& pt1, const PointF& pt2)
+	{
+		return updateStatus(DllExports::GdipAddPathLine(nativePath,
+				pt1.X, pt1.Y, pt2.X, pt2.Y));
+	}
+	Status AddLine(const Point& pt1, const Point& pt2)
+	{
+		return updateStatus(DllExports::GdipAddPathLineI(nativePath,
+				pt1.X, pt1.Y, pt2.X, pt2.Y));
+	}
+	Status AddLines(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathLine2(nativePath,
+				points, count));
+	}
+	Status AddLines(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathLine2I(nativePath,
+				points, count));
+	}
+	Status AddPath(const GraphicsPath *addingPath, BOOL connect)
+	{
+		return updateStatus(DllExports::GdipAddPathPath(nativePath,
+				addingPath ? addingPath->nativePath : NULL,
+				connect));
+	}
+	Status AddPie(REAL x, REAL y, REAL width, REAL height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathPie(nativePath,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status AddPie(INT x, INT y, INT width, INT height,
+			REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathPieI(nativePath,
+				x, y, width, height, startAngle, sweepAngle));
+	}
+	Status AddPie(const RectF& rect, REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathPie(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status AddPie(const Rect& rect, REAL startAngle, REAL sweepAngle)
+	{
+		return updateStatus(DllExports::GdipAddPathPieI(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height,
+				startAngle, sweepAngle));
+	}
+	Status AddPolygon(const PointF *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathPolygon(nativePath,
+				points, count));
+	}
+	Status AddPolygon(const Point *points, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathPolygonI(nativePath,
+				points, count));
+	}
+	Status AddRectangle(const RectF& rect)
+	{
+		return updateStatus(DllExports::GdipAddPathRectangle(nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status AddRectangle(const Rect& rect)
+	{
+		return updateStatus(DllExports::GdipAddPathRectangleI(
+				nativePath,
+				rect.X, rect.Y, rect.Width, rect.Height));
+	}
+	Status AddRectangles(const RectF *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathRectangles(
+				nativePath, rects, count));
+	}
+	Status AddRectangles(const Rect *rects, INT count)
+	{
+		return updateStatus(DllExports::GdipAddPathRectanglesI(
+				nativePath, rects, count));
+	}
+	Status AddString(const WCHAR *string, INT length,
+			const FontFamily *family, INT style, REAL emSize,
+			const PointF& origin, const StringFormat *format)
+	{
+		RectF layoutRect(origin, SizeF(0.0f, 0.0f));
+		return updateStatus(DllExports::GdipAddPathString(nativePath,
+				string, length,
+				family ? family->nativeFontFamily : NULL,
+				style, emSize, &layoutRect,
+				format ? format->nativeStringFormat : NULL));
+	}
+	Status AddString(const WCHAR *string, INT length,
+			const FontFamily *family, INT style, REAL emSize,
+			const Point& origin, const StringFormat *format)
+	{
+		Rect layoutRect(origin, Size(0, 0));
+		return updateStatus(DllExports::GdipAddPathStringI(nativePath,
+				string, length,
+				family ? family->nativeFontFamily : NULL,
+				style, emSize, &layoutRect,
+				format ? format->nativeStringFormat : NULL));
+	}
+	Status AddString(const WCHAR *string, INT length,
+			const FontFamily *family, INT style, REAL emSize,
+			const RectF& layoutRect, const StringFormat *format)
+	{
+		return updateStatus(DllExports::GdipAddPathString(nativePath,
+				string, length,
+				family ? family->nativeFontFamily : NULL,
+				style, emSize, &layoutRect,
+				format ? format->nativeStringFormat : NULL));
+	}
+	Status AddString(const WCHAR *string, INT length,
+			const FontFamily *family, INT style, REAL emSize,
+			const Rect& layoutRect, const StringFormat *format)
+	{
+		return updateStatus(DllExports::GdipAddPathStringI(nativePath,
+				string, length,
+				family ? family->nativeFontFamily : NULL,
+				style, emSize, &layoutRect,
+				format ? format->nativeStringFormat : NULL));
+	}
+	Status ClearMarkers()
+	{
+		return updateStatus(DllExports::GdipClearPathMarkers(
+				nativePath));
+	}
+	Status CloseAllFigures()
+	{
+		return updateStatus(DllExports::GdipClosePathFigures(
+				nativePath));
+	}
+	Status CloseFigure()
+	{
+		return updateStatus(DllExports::GdipClosePathFigure(
+				nativePath));
+	}
+	Status Flatten(const Matrix *matrix = NULL,
+			REAL flatness = FlatnessDefault)
+	{
+		return updateStatus(DllExports::GdipFlattenPath(nativePath,
+				matrix ? matrix->nativeMatrix : NULL,
+				flatness));
+	}
+	Status GetBounds(RectF *bounds, const Matrix *matrix = NULL,
+			const Pen *pen = NULL) const
+	{
+		return updateStatus(DllExports::GdipGetPathWorldBounds(
+				nativePath, bounds,
+				matrix ? matrix->nativeMatrix : NULL,
+				pen ? pen->nativePen : NULL));
+	}
+	Status GetBounds(Rect *bounds, const Matrix *matrix = NULL,
+			const Pen *pen = NULL) const
+	{
+		return updateStatus(DllExports::GdipGetPathWorldBoundsI(
+				nativePath, bounds,
+				matrix ? matrix->nativeMatrix : NULL,
+				pen ? pen->nativePen : NULL));
+	}	
+	FillMode GetFillMode() const
+	{
+		FillMode result = FillModeAlternate;
+		updateStatus(DllExports::GdipGetPathFillMode(nativePath,
+				&result));
+		return result;
+	}
+	Status GetLastPoint(PointF *lastPoint) const
+	{
+		return updateStatus(DllExports::GdipGetPathLastPoint(
+				nativePath, lastPoint));
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	Status GetPathData(PathData *pathData) const
+	{
+		if (!pathData) return lastStatus = InvalidParameter;
+
+		Status status;
+		INT count;
+
+		status = updateStatus(DllExports::GdipGetPointCount(
+				nativePath, &count));
+		if (status != Ok) return status;
+
+		status = updateStatus(pathData->AllocateArrays(count));
+		if (status != Ok) return status;
+
+		return updateStatus(DllExports::GdipGetPathData(
+				nativePath, (GpPathData*) pathData));
+	}
+	Status GetPathPoints(PointF *points, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPathPoints(nativePath,
+				points, count));
+	}
+	Status GetPathPoints(Point *points, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPathPointsI(nativePath,
+				points, count));
+	}
+	Status GetPathTypes(BYTE *types, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPathTypes(nativePath,
+				types, count));
+	}
+	INT GetPointCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPointCount(nativePath,
+				&result));
+		return result;
+	}
+	BOOL IsOutlineVisible(REAL x, REAL y, const Pen *pen,
+			const Graphics *g = NULL) const;
+	BOOL IsOutlineVisible(INT x, INT y, const Pen *pen,
+			const Graphics *g = NULL) const;
+	BOOL IsOutlineVisible(const PointF& point, const Pen *pen,
+			const Graphics *g = NULL) const;
+	BOOL IsOutlineVisible(const Point& point, const Pen *pen,
+			const Graphics *g = NULL) const;
+	BOOL IsVisible(REAL x, REAL y, const Graphics *g = NULL) const;
+	BOOL IsVisible(INT x, INT y, const Graphics *g = NULL) const;
+	BOOL IsVisible(const PointF& point, const Graphics *g = NULL) const;
+	BOOL IsVisible(const Point& point, const Graphics *g = NULL) const;
+	Status Outline(const Matrix *matrix = NULL,
+			REAL flatness = FlatnessDefault)
+	{
+		return updateStatus(DllExports::GdipWindingModeOutline(
+				nativePath,
+				matrix ? matrix->nativeMatrix : NULL,
+				flatness));
+	}
+	Status Reset()
+	{
+		return updateStatus(DllExports::GdipResetPath(nativePath));
+	}
+	Status Reverse()
+	{
+		return updateStatus(DllExports::GdipReversePath(nativePath));
+	}
+	Status SetFillMode(FillMode fillMode)
+	{
+		return updateStatus(DllExports::GdipSetPathFillMode(
+				nativePath, fillMode));
+	}
+	Status SetMarker()
+	{
+		return updateStatus(DllExports::GdipSetPathMarker(nativePath));
+	}
+	Status StartFigure()
+	{
+		return updateStatus(DllExports::GdipStartPathFigure(
+				nativePath));
+	}
+	Status Transform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipTransformPath(
+				nativePath,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status Warp(const PointF *destPoints, INT count, const RectF& srcRect,
+			const Matrix *matrix = NULL,
+			WarpMode warpMode = WarpModePerspective,
+			REAL flatness = FlatnessDefault)
+	{
+		return updateStatus(DllExports::GdipWarpPath(nativePath,
+				matrix ? matrix->nativeMatrix : NULL,
+				destPoints, count,
+				srcRect.X, srcRect.Y,
+				srcRect.Width, srcRect.Height,
+				warpMode, flatness));
+	}
+	Status Widen(const Pen *pen, const Matrix *matrix = NULL,
+			REAL flatness = FlatnessDefault)
+	{
+		return updateStatus(DllExports::GdipWidenPath(nativePath,
+				pen ? pen->nativePen : NULL,
+				matrix ? matrix->nativeMatrix : NULL,
+				flatness));
+	}
+
+private:
+	GraphicsPath(GpPath *path, Status status):
+		nativePath(path), lastStatus(status) {}
+	GraphicsPath(const GraphicsPath&);
+	GraphicsPath& operator=(const GraphicsPath&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpPath *nativePath;
+	mutable Status lastStatus;
+};
+
+class GraphicsPathIterator: public GdiplusBase
+{
+public:
+	GraphicsPathIterator(GraphicsPath *path):
+		nativePathIterator(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePathIter(
+				&nativePathIterator,
+				path ? path->nativePath : NULL);
+	}
+	~GraphicsPathIterator()
+	{
+		DllExports::GdipDeletePathIter(nativePathIterator);
+	}
+
+	INT CopyData(PointF *points, BYTE *types, INT startIndex, INT endIndex)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterCopyData(
+				nativePathIterator, &result,
+				points, types, startIndex, endIndex));
+		return result;
+	}
+	INT Enumerate(PointF *points, BYTE *types, INT count)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterEnumerate(
+				nativePathIterator, &result,
+				points, types, count));
+		return result;
+	}
+	INT GetCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterGetCount(
+				nativePathIterator, &result));
+		return result;
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	INT GetSubpathCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterGetSubpathCount(
+				nativePathIterator, &result));
+		return result;
+	}
+	BOOL HasCurve() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipPathIterHasCurve(
+				nativePathIterator, &result));
+		return result;
+	}
+	INT NextMarker(INT *startIndex, INT *endIndex)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextMarker(
+				nativePathIterator, &result,
+				startIndex, endIndex));
+		return result;
+	}
+	INT NextMarker(GraphicsPath *path)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextMarkerPath(
+				nativePathIterator, &result,
+				path ? path->nativePath : NULL));
+		return result;
+	}
+	INT NextPathType(BYTE *pathType, INT *startIndex, INT *endIndex)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextPathType(
+				nativePathIterator, &result,
+				pathType, startIndex, endIndex));
+		return result;
+	}
+	INT NextSubpath(INT *startIndex, INT *endIndex, BOOL *isClosed)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextSubpath(
+				nativePathIterator, &result,
+				startIndex, endIndex, isClosed));
+		return result;
+	}
+	INT NextSubpath(GraphicsPath *path, BOOL *isClosed)
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipPathIterNextSubpathPath(
+				nativePathIterator, &result,
+				path ? path->nativePath : NULL, isClosed));
+		return result;
+	}
+	VOID Rewind()
+	{
+		updateStatus(DllExports::GdipPathIterRewind(
+				nativePathIterator));
+	}
+
+private:
+	GraphicsPathIterator(GpPathIterator *pathIterator, Status status):
+		nativePathIterator(pathIterator), lastStatus(status) {}
+	GraphicsPathIterator(const GraphicsPathIterator&);
+	GraphicsPathIterator& operator=(const GraphicsPathIterator&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpPathIterator *nativePathIterator;
+	mutable Status lastStatus;
+};
+
+class PathGradientBrush: public Brush
+{
+public:
+	PathGradientBrush(const PointF *points, INT count,
+			WrapMode wrapMode = WrapModeClamp)
+	{
+		GpPathGradient *nativePathGradient = NULL;
+		lastStatus = DllExports::GdipCreatePathGradient(
+				points, count, wrapMode, &nativePathGradient);
+		nativeBrush = nativePathGradient;
+	}
+	PathGradientBrush(const Point *points, INT count,
+			WrapMode wrapMode = WrapModeClamp)
+	{
+		GpPathGradient *nativePathGradient = NULL;
+		lastStatus = DllExports::GdipCreatePathGradientI(
+				points, count, wrapMode, &nativePathGradient);
+		nativeBrush = nativePathGradient;
+	}
+	PathGradientBrush(const GraphicsPath *path)
+	{
+		GpPathGradient *nativePathGradient = NULL;
+		lastStatus = DllExports::GdipCreatePathGradientFromPath(
+				path ? path->nativePath : NULL,
+				&nativePathGradient);
+		nativeBrush = nativePathGradient;
+	}
+	virtual PathGradientBrush *Clone() const
+	{
+		GpBrush *cloneBrush = NULL;
+		Status status = updateStatus(DllExports::GdipCloneBrush(
+				nativeBrush, &cloneBrush));
+		if (status == Ok) {
+			PathGradientBrush *result =
+				new PathGradientBrush(cloneBrush, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteBrush(cloneBrush);
+				updateStatus(OutOfMemory);
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	Status GetBlend(REAL *blendFactors, REAL *blendPositions,
+			INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientBlend(
+				(GpPathGradient*) nativeBrush,
+				blendFactors, blendPositions, count));
+	}
+	INT GetBlendCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPathGradientBlendCount(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetCenterColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientCenterColor(
+				(GpPathGradient*) nativeBrush,
+				color ? &color->Value : NULL));
+	}
+	Status GetCenterPoint(PointF *point) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientCenterPoint(
+				(GpPathGradient*) nativeBrush, point));
+	}
+	Status GetCenterPoint(Point *point) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientCenterPointI(
+				(GpPathGradient*) nativeBrush, point));
+	}
+	Status GetFocusScales(REAL *xScale, REAL *yScale) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientFocusScales(
+				(GpPathGradient*) nativeBrush, xScale, yScale));
+	}
+	BOOL GetGammaCorrection() const
+	{
+		BOOL result = FALSE;
+		updateStatus(DllExports::GdipGetPathGradientGammaCorrection(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	//Status GetGraphicsPath(GraphicsPath *path) const
+	//{
+	//	// TODO: implement PathGradientBrush::GetGraphicsPath
+	//	return updateStatus(NotImplemented);
+	//}
+	INT GetInterpolationColorCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPathGradientPresetBlendCount(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetInterpolationColors(Color *presetColors,
+			REAL *blendPositions, INT count) const
+	{
+		if (!presetColors || count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *presetArgb =
+			(ARGB*) DllExports::GdipAlloc(count * sizeof(ARGB));
+		if (!presetArgb)
+			return lastStatus = OutOfMemory;
+
+		Status status = updateStatus(DllExports::GdipGetPathGradientPresetBlend(
+				(GpPathGradient*) nativeBrush,
+				presetArgb, blendPositions, count));
+		for (INT i = 0; i < count; ++i) {
+			presetColors[i].SetValue(presetArgb[i]);
+		}
+		DllExports::GdipFree((void*) presetArgb);
+		return status;
+	}
+	INT GetPointCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPathGradientPointCount(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetRectangle(RectF *rect) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientRect(
+				(GpPathGradient*) nativeBrush, rect));
+	}
+	Status GetRectangle(Rect *rect) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientRectI(
+				(GpPathGradient*) nativeBrush, rect));
+	}
+	INT GetSurroundColorCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPathGradientSurroundColorCount(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status GetSurroundColors(Color *colors, INT *count)
+	{
+		if (!colors || !count || *count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *colorsArgb =
+			(ARGB*) DllExports::GdipAlloc(*count * sizeof(ARGB));
+		if (!colorsArgb)
+			return lastStatus = OutOfMemory;
+
+		Status status = updateStatus(DllExports::GdipGetPathGradientSurroundColorsWithCount(
+				(GpPathGradient*) nativeBrush,
+				colorsArgb, count));
+		for (INT i = 0; i < *count; ++i) {
+			colors[i].SetValue(colorsArgb[i]);
+		}
+		DllExports::GdipFree((void*) colorsArgb);
+		return status;
+	}
+	Status GetTransform(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetPathGradientTransform(
+				(GpPathGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	WrapMode GetWrapMode() const
+	{
+		WrapMode result = WrapModeTile;
+		updateStatus(DllExports::GdipGetPathGradientWrapMode(
+				(GpPathGradient*) nativeBrush, &result));
+		return result;
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyPathGradientTransform(
+				(GpPathGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetPathGradientTransform(
+				(GpPathGradient*) nativeBrush));
+	}
+	Status RotateTransform(REAL angle,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotatePathGradientTransform(
+				(GpPathGradient*) nativeBrush, angle, order));
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScalePathGradientTransform(
+				(GpPathGradient*) nativeBrush, sx, sy, order));
+	}
+	Status SetBlend(REAL *blendFactors, REAL *blendPositions, INT count)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientBlend(
+				(GpPathGradient*) nativeBrush,
+				blendFactors, blendPositions, count));
+	}
+	Status SetBlendBellShape(REAL focus, REAL scale = 1.0f)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientSigmaBlend(
+				(GpPathGradient*) nativeBrush, focus, scale));
+	}
+	Status SetBlendTriangularShape(REAL focus, REAL scale = 1.0f)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientLinearBlend(
+				(GpPathGradient*) nativeBrush, focus, scale));
+	}
+	Status SetCenterColor(const Color& color)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientCenterColor(
+				(GpPathGradient*) nativeBrush,
+				color.GetValue()));
+	}
+	Status SetCenterPoint(const PointF& point)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientCenterPoint(
+				(GpPathGradient*) nativeBrush, &point));
+	}
+	Status SetCenterPoint(const Point& point)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientCenterPointI(
+				(GpPathGradient*) nativeBrush, &point));
+	}
+	Status SetFocusScales(REAL xScale, REAL yScale)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientFocusScales(
+				(GpPathGradient*) nativeBrush, xScale, yScale));
+	}
+	Status SetGammaCorrection(BOOL useGammaCorrection)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientGammaCorrection(
+				(GpPathGradient*) nativeBrush,
+				useGammaCorrection));
+	}
+	//Status SetGraphicsPath(const GraphicsPath *path)
+	//{
+	//	// TODO: implement PathGradientBrush::SetGraphicsPath
+	//	return updateStatus(NotImplemented);
+	//}
+	Status SetInterpolationColors(const Color *presetColors,
+			REAL *blendPositions, INT count)
+	{
+		if (!presetColors || count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *presetArgb =
+			(ARGB*) DllExports::GdipAlloc(count * sizeof(ARGB));
+		if (!presetArgb)
+			return lastStatus = OutOfMemory;
+		for (INT i = 0; i < count; ++i) {
+			presetArgb[i] = presetColors[i].GetValue();
+		}
+
+		Status status = updateStatus(DllExports::GdipSetPathGradientPresetBlend(
+				(GpPathGradient*) nativeBrush,
+				presetArgb, blendPositions, count));
+		DllExports::GdipFree((void*) presetArgb);
+		return status;
+	}
+	Status SetSurroundColors(const Color *colors, INT *count)
+	{
+		if (!colors || !count || *count <= 0)
+			return lastStatus = InvalidParameter;
+
+		ARGB *colorsArgb =
+			(ARGB*) DllExports::GdipAlloc(*count * sizeof(ARGB));
+		if (!colorsArgb)
+			return lastStatus = OutOfMemory;
+		for (INT i = 0; i < *count; ++i) {
+			colorsArgb[i] = colors[i].GetValue();
+		}
+
+		Status status = updateStatus(DllExports::GdipSetPathGradientSurroundColorsWithCount(
+				(GpPathGradient*) nativeBrush,
+				colorsArgb, count));
+		DllExports::GdipFree((void*) colorsArgb);
+		return status;
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientTransform(
+				(GpPathGradient*) nativeBrush,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status SetWrapMode(WrapMode wrapMode)
+	{
+		return updateStatus(DllExports::GdipSetPathGradientWrapMode(
+				(GpPathGradient*) nativeBrush, wrapMode));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslatePathGradientTransform(
+				(GpPathGradient*) nativeBrush, dx, dy, order));
+	}
+
+private:
+	PathGradientBrush(GpBrush *brush, Status status): Brush(brush, status) {}
+	PathGradientBrush(const PathGradientBrush&);
+	PathGradientBrush& operator=(const PathGradientBrush&);
+};
+
+
+
+#endif /* __GDIPLUS_PATH_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdipluspen.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdipluspen.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,338 @@
+/*
+ * gdipluspen.h
+ *
+ * GDI+ Pen class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_PEN_H
+#define __GDIPLUS_PEN_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdipluspen.h."
+#endif
+
+class Pen: public GdiplusBase
+{
+	friend class Graphics;
+	friend class GraphicsPath;
+
+public:
+	Pen(const Color& color, REAL width = 1.0f):
+		nativePen(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePen1(
+				color.GetValue(), width, UnitWorld,
+				&nativePen);
+	}
+	Pen(const Brush *brush, REAL width = 1.0f):
+		nativePen(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreatePen2(
+				brush ? brush->nativeBrush : NULL,
+				width, UnitWorld, &nativePen);
+	}
+	~Pen()
+	{
+		DllExports::GdipDeletePen(nativePen);
+	}
+	Pen* Clone() const
+	{
+		GpPen *clonePen = NULL;
+		Status status = updateStatus(DllExports::GdipClonePen(
+				nativePen, &clonePen));
+		if (status == Ok) {
+			Pen *result = new Pen(clonePen, lastStatus);
+			if (!result) {
+				DllExports::GdipDeletePen(clonePen);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	PenAlignment GetAlignment() const
+	{
+		PenAlignment result = PenAlignmentCenter;
+		updateStatus(DllExports::GdipGetPenMode(nativePen, &result));
+		return result;
+	}
+	// TODO: implement Pen::GetBrush()
+	//Brush *GetBrush() const
+	//{
+	//	// where is the pen brush allocated (static,member,new,other)?
+	//	// GdipGetPenBrushFill just returns a GpBrush*
+	//	updateStatus(NotImplemented);
+	//	return NULL;
+	//}
+	Status GetColor(Color *color) const
+	{
+		return updateStatus(DllExports::GdipGetPenColor(
+				nativePen, color ? &color->Value : NULL));
+	}
+	Status GetCompoundArray(REAL *compoundArray, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPenCompoundArray(
+				nativePen, compoundArray, count));
+	}
+	INT GetCompoundArrayCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPenCompoundCount(
+				nativePen, &result));
+		return result;
+	}
+	Status GetCustomEndCap(CustomLineCap *customCap) const
+	{
+		if (!customCap) return lastStatus = InvalidParameter;
+		// FIXME: do we need to call GdipDeleteCustomLineCap first?
+		return updateStatus(DllExports::GdipGetPenCustomEndCap(
+				nativePen, &customCap->nativeCustomLineCap));
+	}
+	Status GetCustomStartCap(CustomLineCap *customCap) const
+	{
+		if (!customCap) return lastStatus = InvalidParameter;
+		// FIXME: do we need to call GdipDeleteCustomLineCap first?
+		return updateStatus(DllExports::GdipGetPenCustomStartCap(
+				nativePen, &customCap->nativeCustomLineCap));
+	}
+	DashCap GetDashCap() const
+	{
+		DashCap result = DashCapFlat;
+		updateStatus(DllExports::GdipGetPenDashCap197819(
+				nativePen, &result));
+		return result;
+	}
+	REAL GetDashOffset() const
+	{
+		REAL result = 0.0f;
+		updateStatus(DllExports::GdipGetPenDashOffset(
+				nativePen, &result));
+		return result;
+	}
+	Status GetDashPattern(REAL *dashArray, INT count) const
+	{
+		return updateStatus(DllExports::GdipGetPenDashArray(
+				nativePen, dashArray, count));
+	}
+	INT GetDashPatternCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetPenDashCount(
+				nativePen, &result));
+		return result;
+	}
+	DashStyle GetDashStyle() const
+	{
+		DashStyle result = DashStyleSolid;
+		updateStatus(DllExports::GdipGetPenDashStyle(
+				nativePen, &result));
+		return result;
+	}
+	LineCap GetEndCap() const
+	{
+		LineCap result = LineCapFlat;
+		updateStatus(DllExports::GdipGetPenEndCap(nativePen, &result));
+		return result;
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	LineJoin GetLineJoin() const
+	{
+		LineJoin result = LineJoinMiter;
+		updateStatus(DllExports::GdipGetPenLineJoin(
+				nativePen, &result));
+		return result;
+	}
+	REAL GetMiterLimit() const
+	{
+		REAL result = 10.0f;
+		updateStatus(DllExports::GdipGetPenMiterLimit(
+				nativePen, &result));
+		return result;
+	}
+	PenType GetPenType() const
+	{
+		PenType result = PenTypeUnknown;
+		updateStatus(DllExports::GdipGetPenFillType(
+				nativePen, &result));
+		return result;
+	}
+	LineCap GetStartCap() const
+	{
+		LineCap result = LineCapFlat;
+		updateStatus(DllExports::GdipGetPenStartCap(
+				nativePen, &result));
+		return result;
+	}
+	Status GetTransform(Matrix *matrix) const
+	{
+		return updateStatus(DllExports::GdipGetPenTransform(
+				nativePen,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	REAL GetWidth() const
+	{
+		REAL result = 1.0f;
+		updateStatus(DllExports::GdipGetPenWidth(nativePen, &result));
+		return result;
+	}
+	Status MultiplyTransform(const Matrix *matrix,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipMultiplyPenTransform(
+				nativePen,
+				matrix ? matrix->nativeMatrix : NULL, order));
+	}
+	Status ResetTransform()
+	{
+		return updateStatus(DllExports::GdipResetPenTransform(
+				nativePen));
+	}
+	Status RotateTransform(REAL angle,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipRotatePenTransform(
+				nativePen, angle, order));
+	}
+	Status ScaleTransform(REAL sx, REAL sy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipScalePenTransform(
+				nativePen, sx, sy, order));
+	}
+	Status SetAlignment(PenAlignment penAlignment)
+	{
+		return updateStatus(DllExports::GdipSetPenMode(
+				nativePen, penAlignment));
+	}
+	Status SetBrush(const Brush *brush)
+	{
+		return updateStatus(DllExports::GdipSetPenBrushFill(
+				nativePen, brush ? brush->nativeBrush : NULL));
+	}
+	Status SetColor(const Color& color)
+	{
+		return updateStatus(DllExports::GdipSetPenColor(
+				nativePen, color.GetValue()));
+	}
+	Status SetCompoundArray(const REAL *compoundArray, INT count)
+	{
+		return updateStatus(DllExports::GdipSetPenCompoundArray(
+				nativePen, compoundArray, count));
+	}
+	Status SetCustomEndCap(const CustomLineCap *customCap)
+	{
+		return updateStatus(DllExports::GdipSetPenCustomEndCap(
+				nativePen,
+				customCap ? customCap->nativeCustomLineCap : NULL));
+	}
+	Status SetCustomStartCap(const CustomLineCap *customCap)
+	{
+		return updateStatus(DllExports::GdipSetPenCustomStartCap(
+				nativePen,
+				customCap ? customCap->nativeCustomLineCap : NULL));
+	}
+	Status SetDashCap(DashCap dashCap)
+	{
+		return updateStatus(DllExports::GdipSetPenDashCap197819(
+				nativePen, dashCap));
+	}
+	Status SetDashOffset(REAL dashOffset)
+	{
+		return updateStatus(DllExports::GdipSetPenDashOffset(
+				nativePen, dashOffset));
+	}
+	Status SetDashPattern(const REAL *dashArray, INT count)
+	{
+		return updateStatus(DllExports::GdipSetPenDashArray(
+				nativePen, dashArray, count));
+	}
+	Status SetDashStyle(DashStyle dashStyle)
+	{
+		return updateStatus(DllExports::GdipSetPenDashStyle(
+				nativePen, dashStyle));
+	}
+	Status SetEndCap(LineCap endCap)
+	{
+		return updateStatus(DllExports::GdipSetPenEndCap(
+				nativePen, endCap));
+	}
+	Status SetLineCap(LineCap startCap, LineCap endCap, DashCap dashCap)
+	{
+		return updateStatus(DllExports::GdipSetPenLineCap197819(
+				nativePen, startCap, endCap, dashCap));
+	}
+	Status SetLineJoin(LineJoin lineJoin)
+	{
+		return updateStatus(DllExports::GdipSetPenLineJoin(
+				nativePen, lineJoin));
+	}
+	Status SetMiterLimit(REAL miterLimit)
+	{
+		return updateStatus(DllExports::GdipSetPenMiterLimit(
+				nativePen, miterLimit));
+	}
+	Status SetStartCap(LineCap startCap)
+	{
+		return updateStatus(DllExports::GdipSetPenStartCap(
+				nativePen, startCap));
+	}
+	Status SetTransform(const Matrix *matrix)
+	{
+		return updateStatus(DllExports::GdipSetPenTransform(
+				nativePen,
+				matrix ? matrix->nativeMatrix : NULL));
+	}
+	Status SetWidth(REAL width)
+	{
+		return updateStatus(DllExports::GdipSetPenWidth(
+				nativePen, width));
+	}
+	Status TranslateTransform(REAL dx, REAL dy,
+			MatrixOrder order = MatrixOrderPrepend)
+	{
+		return updateStatus(DllExports::GdipTranslatePenTransform(
+				nativePen, dx, dy, order));
+	}
+
+private:
+	Pen(GpPen *pen, Status status): nativePen(pen), lastStatus(status) {}
+	Pen(const Pen& pen);
+	Pen& operator=(const Pen&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpPen *nativePen;
+	mutable Status lastStatus;
+};
+
+#endif /* __GDIPLUS_PEN_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdipluspixelformats.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdipluspixelformats.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,120 @@
+/*
+ * gdipluspixelformats.h
+ *
+ * GDI+ pixel formats
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_PIXELFORMATS_H
+#define __GDIPLUS_PIXELFORMATS_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+typedef DWORD ARGB;
+typedef INT PixelFormat;
+
+#define PixelFormatIndexed ((PixelFormat) 0x00010000)
+#define PixelFormatGDI ((PixelFormat) 0x00020000)
+#define PixelFormatAlpha ((PixelFormat) 0x00040000)
+#define PixelFormatPAlpha ((PixelFormat) 0x00080000)
+#define PixelFormatExtended ((PixelFormat) 0x00100000)
+#define PixelFormatCanonical ((PixelFormat) 0x00200000)
+#define PixelFormatUndefined ((PixelFormat) 0)
+#define PixelFormatDontCare ((PixelFormat) 0)
+#define PixelFormat1bppIndexed ((PixelFormat) \
+	(1 | (1<<8) | PixelFormatIndexed | PixelFormatGDI))
+#define PixelFormat4bppIndexed ((PixelFormat) \
+	(2 | (4<<8) | PixelFormatIndexed | PixelFormatGDI))
+#define PixelFormat8bppIndexed ((PixelFormat) \
+	(3 | (8<<8) | PixelFormatIndexed | PixelFormatGDI))
+#define PixelFormat16bppGrayScale ((PixelFormat) \
+	(4 | (16<<8) | PixelFormatExtended))
+#define PixelFormat16bppRGB555 ((PixelFormat) \
+	(5 | (16<<8) | PixelFormatGDI))
+#define PixelFormat16bppRGB565 ((PixelFormat) \
+	(6 | (16<<8) | PixelFormatGDI))
+#define PixelFormat16bppARGB1555 ((PixelFormat) \
+	(7 | (16<<8) | PixelFormatAlpha | PixelFormatGDI))
+#define PixelFormat24bppRGB ((PixelFormat) \
+	(8 | (24<<8) | PixelFormatGDI))
+#define PixelFormat32bppRGB ((PixelFormat) \
+	(9 | (32<<8) | PixelFormatGDI))
+#define PixelFormat32bppARGB ((PixelFormat) \
+	(10 | (32<<8) | PixelFormatAlpha | PixelFormatGDI | PixelFormatCanonical))
+#define PixelFormat32bppPARGB ((PixelFormat) \
+	(11 | (32<<8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatGDI))
+#define PixelFormat48bppRGB ((PixelFormat) \
+	(12 | (48<<8) | PixelFormatExtended))
+#define PixelFormat64bppARGB ((PixelFormat) \
+	(13 | (64<<8) | PixelFormatAlpha | PixelFormatCanonical | PixelFormatExtended))
+#define PixelFormat64bppPARGB ((PixelFormat) \
+	(14 | (64<<8) | PixelFormatAlpha | PixelFormatPAlpha | PixelFormatExtended))
+#define PixelFormatMax ((PixelFormat) 15)
+
+typedef enum PaletteFlags {
+	PaletteFlagsHasAlpha = 1,
+	PaletteFlagsGrayScale = 2,
+	PaletteFlagsHalftone = 4
+} PaletteFlags;
+
+typedef enum PaletteType {
+	PaletteTypeCustom = 0,
+	PaletteTypeOptimal = 1,
+	PaletteTypeFixedBW = 2,
+	PaletteTypeFixedHalftone8 = 3,
+	PaletteTypeFixedHalftone27 = 4,
+	PaletteTypeFixedHalftone64 = 5,
+	PaletteTypeFixedHalftone125 = 6,
+	PaletteTypeFixedHalftone216 = 7,
+	PaletteTypeFixedHalftone252 = 8,
+	PaletteTypeFixedHalftone256 = 9 
+} PaletteType;
+
+typedef struct ColorPalette {
+	UINT Flags;
+	UINT Count;
+	ARGB Entries[1];
+} ColorPalette;
+
+static __inline__ UINT GetPixelFormatSize(PixelFormat pixfmt)
+{
+	return (((UINT) pixfmt) & 0xff00U) >> 8;
+}
+
+static __inline__ BOOL IsAlphaPixelFormat(PixelFormat pixfmt)
+{
+	return (pixfmt & PixelFormatAlpha) != 0;
+}
+
+static __inline__ BOOL IsCanonicalPixelFormat(PixelFormat pixfmt)
+{
+	return (pixfmt & PixelFormatCanonical) != 0;
+}
+
+static __inline__ BOOL IsExtendedPixelFormat(PixelFormat pixfmt)
+{
+	return (pixfmt & PixelFormatExtended) != 0;
+}
+
+static __inline__ BOOL IsIndexedPixelFormat(PixelFormat pixfmt)
+{
+	return (pixfmt & PixelFormatIndexed) != 0;
+}
+
+#endif /* __GDIPLUS_PIXELFORMATS_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplusstringformat.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplusstringformat.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,251 @@
+/*
+ * gdiplusstringformat.h
+ *
+ * GDI+ StringFormat class
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_STRINGFORMAT_H
+#define __GDIPLUS_STRINGFORMAT_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifndef __cplusplus
+#error "A C++ compiler is required to include gdiplusstringformat.h."
+#endif
+
+class StringFormat: public GdiplusBase
+{
+	friend class Graphics;
+	friend class GraphicsPath;
+
+public:
+	static const StringFormat* GenericDefault();
+	static const StringFormat* GenericTypographic();
+
+	StringFormat(INT formatFlags = 0, LANGID language = LANG_NEUTRAL):
+			nativeStringFormat(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCreateStringFormat(
+				formatFlags, language, &nativeStringFormat);
+	}
+	StringFormat(const StringFormat *format):
+			nativeStringFormat(NULL), lastStatus(Ok)
+	{
+		lastStatus = DllExports::GdipCloneStringFormat(
+				format ? format->nativeStringFormat : NULL,
+				&nativeStringFormat);
+	}
+	~StringFormat()
+	{
+		DllExports::GdipDeleteStringFormat(nativeStringFormat);
+	}
+	StringFormat* Clone() const
+	{
+		GpStringFormat *cloneStringFormat = NULL;
+		Status status = updateStatus(DllExports::GdipCloneStringFormat(
+				nativeStringFormat, &cloneStringFormat));
+		if (status == Ok) {
+			StringFormat *result = new StringFormat(
+					cloneStringFormat, lastStatus);
+			if (!result) {
+				DllExports::GdipDeleteStringFormat(cloneStringFormat);
+				lastStatus = OutOfMemory;
+			}
+			return result;
+		} else {
+			return NULL;
+		}
+	}
+
+	StringAlignment GetAlignment() const
+	{
+		StringAlignment result = StringAlignmentNear;
+		updateStatus(DllExports::GdipGetStringFormatAlign(
+				nativeStringFormat, &result));
+		return result;
+	}
+	LANGID GetDigitSubstitutionLanguage() const
+	{
+		LANGID result = 0;
+		StringDigitSubstitute method;
+		updateStatus(DllExports::GdipGetStringFormatDigitSubstitution(
+				nativeStringFormat, &result, &method));
+		return result;
+	}
+	StringDigitSubstitute GetDigitSubstitutionMethod() const
+	{
+		LANGID language;
+		StringDigitSubstitute result = StringDigitSubstituteUser;
+		updateStatus(DllExports::GdipGetStringFormatDigitSubstitution(
+				nativeStringFormat, &language, &result));
+		return result;
+	}
+	INT GetFormatFlags() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetStringFormatFlags(
+				nativeStringFormat, &result));
+		return result;
+	}
+	HotkeyPrefix GetHotkeyPrefix() const
+	{
+		HotkeyPrefix result = HotkeyPrefixNone;
+		updateStatus(DllExports::GdipGetStringFormatHotkeyPrefix(
+				nativeStringFormat, (INT*) &result));
+		return result;
+	}
+	Status GetLastStatus() const
+	{
+		Status result = lastStatus;
+		lastStatus = Ok;
+		return result;
+	}
+	StringAlignment GetLineAlignment() const
+	{
+		StringAlignment result = StringAlignmentNear;
+		updateStatus(DllExports::GdipGetStringFormatLineAlign(
+				nativeStringFormat, &result));
+		return result;
+	}
+	INT GetMeasurableCharacterRangeCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetStringFormatMeasurableCharacterRangeCount(
+				nativeStringFormat, &result));
+		return result;
+	}
+	INT GetTabStopCount() const
+	{
+		INT result = 0;
+		updateStatus(DllExports::GdipGetStringFormatTabStopCount(
+				nativeStringFormat, &result));
+		return result;
+	}
+	Status GetTabStops(INT count, REAL *firstTabOffset, REAL *tabStops)
+	{
+		return updateStatus(DllExports::GdipGetStringFormatTabStops(
+				nativeStringFormat, count,
+				firstTabOffset, tabStops));
+	}
+	StringTrimming GetTrimming() const
+	{
+		StringTrimming result = StringTrimmingNone;
+		updateStatus(DllExports::GdipGetStringFormatTrimming(
+				nativeStringFormat, &result));
+		return result;
+	}
+	Status SetAlignment(StringAlignment align)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatAlign(
+				nativeStringFormat, align));
+	}
+	Status SetDigitSubstitution(LANGID language,
+			StringDigitSubstitute substitute)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatDigitSubstitution(
+				nativeStringFormat, language, substitute));
+	}
+	Status SetFormatFlags(INT flags)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatFlags(
+				nativeStringFormat, flags));
+	}
+	Status SetHotkeyPrefix(HotkeyPrefix hotkeyPrefix)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatHotkeyPrefix(
+				nativeStringFormat, (INT) hotkeyPrefix));
+	}
+	Status SetLineAlignment(StringAlignment align)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatLineAlign(
+				nativeStringFormat, align));
+	}
+	Status SetMeasurableCharacterRanges(INT rangeCount,
+			const CharacterRange *ranges)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatMeasurableCharacterRanges(
+				nativeStringFormat, rangeCount, ranges));
+	}
+	Status SetTabStops(REAL firstTabOffset, INT count, const REAL *tabStops)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatTabStops(
+				nativeStringFormat, firstTabOffset,
+				count, tabStops));
+	}
+	Status SetTrimming(StringTrimming trimming)
+	{
+		return updateStatus(DllExports::GdipSetStringFormatTrimming(
+				nativeStringFormat, trimming));
+	}
+
+private:
+	StringFormat(GpStringFormat *stringFormat, Status status):
+		nativeStringFormat(stringFormat), lastStatus(status) {}
+	StringFormat(const StringFormat&);
+	StringFormat& operator=(const StringFormat&);
+
+	Status updateStatus(Status newStatus) const
+	{
+		if (newStatus != Ok) lastStatus = newStatus;
+		return newStatus;
+	}
+
+	GpStringFormat *nativeStringFormat;
+	mutable Status lastStatus;
+};
+
+
+// FIXME: do StringFormat::GenericDefault() et al. need to be thread safe?
+// FIXME: maybe put this in gdiplus.c?
+
+extern "C" void *_GdipStringFormatCachedGenericDefault;
+extern "C" void *_GdipStringFormatCachedGenericTypographic;
+
+__inline__ const StringFormat* StringFormat::GenericDefault()
+{
+	if (!_GdipStringFormatCachedGenericDefault) {
+		GpStringFormat *nativeStringFormat = 0;
+		Status status = DllExports::GdipStringFormatGetGenericDefault(
+				&nativeStringFormat);
+		if (status == Ok && nativeStringFormat) {
+			_GdipStringFormatCachedGenericDefault = (void*)
+				new StringFormat(nativeStringFormat, Ok);
+		}
+	}
+	return (StringFormat*) _GdipStringFormatCachedGenericDefault;
+}
+
+__inline__ const StringFormat* StringFormat::GenericTypographic()
+{
+	if (!_GdipStringFormatCachedGenericTypographic) {
+		GpStringFormat *nativeStringFormat = 0;
+		Status status = DllExports::GdipStringFormatGetGenericTypographic(
+				&nativeStringFormat);
+		if (status == Ok && nativeStringFormat) {
+			_GdipStringFormatCachedGenericTypographic = (void*)
+				new StringFormat(nativeStringFormat, Ok);
+		}
+	}
+	return (StringFormat*) _GdipStringFormatCachedGenericTypographic;
+}
+
+
+
+#endif /* __GDIPLUS_STRINGFORMAT_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 gdiplus/gdiplustypes.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gdiplus/gdiplustypes.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,456 @@
+/*
+ * gdiplustypes.h
+ *
+ * GDI+ basic type declarations
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Markus Koenig <markus@stber-koenig.de>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __GDIPLUS_TYPES_H
+#define __GDIPLUS_TYPES_H
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#define WINGDIPAPI __stdcall
+#define GDIPCONST const
+
+typedef enum GpStatus {
+	Ok = 0,
+	GenericError = 1,
+	InvalidParameter = 2,
+	OutOfMemory = 3,
+	ObjectBusy = 4,
+	InsufficientBuffer = 5,
+	NotImplemented = 6,
+	Win32Error = 7,
+	WrongState = 8,
+	Aborted = 9,
+	FileNotFound = 10,
+	ValueOverflow = 11,
+	AccessDenied = 12,
+	UnknownImageFormat = 13,
+	FontFamilyNotFound = 14,
+	FontStyleNotFound = 15,
+	NotTrueTypeFont = 16,
+	UnsupportedGdiplusVersion = 17,
+	GdiplusNotInitialized = 18,
+	PropertyNotFound = 19,
+	PropertyNotSupported = 20,
+	ProfileNotFound = 21
+} GpStatus;
+
+#ifdef __cplusplus
+typedef GpStatus Status;
+#endif
+
+typedef struct Size {
+	INT Width;
+	INT Height;
+
+	#ifdef __cplusplus
+	Size(): Width(0), Height(0) {}
+	Size(INT width, INT height): Width(width), Height(height) {}
+	Size(const Size& size): Width(size.Width), Height(size.Height) {}
+	
+	BOOL Empty() const {
+		return Width == 0 && Height == 0;
+	}
+	BOOL Equals(const Size& size) const {
+		return Width == size.Width && Height == size.Height;
+	}
+	Size operator+(const Size& size) const {
+		return Size(Width + size.Width, Height + size.Height);
+	}
+	Size operator-(const Size& size) const {
+		return Size(Width - size.Width, Height - size.Height);
+	}
+	#endif /* __cplusplus */
+} Size;
+
+typedef struct SizeF {
+	REAL Width;
+	REAL Height;
+
+	#ifdef __cplusplus
+	SizeF(): Width(0.0f), Height(0.0f) {}
+	SizeF(REAL width, REAL height): Width(width), Height(height) {}
+	SizeF(const SizeF& size): Width(size.Width), Height(size.Height) {}
+	
+	BOOL Empty() const {
+		return Width == 0.0f && Height == 0.0f;
+	}
+	BOOL Equals(const SizeF& size) const {
+		return Width == size.Width && Height == size.Height;
+	}
+	SizeF operator+(const SizeF& size) const {
+		return SizeF(Width + size.Width, Height + size.Height);
+	}
+	SizeF operator-(const SizeF& size) const {
+		return SizeF(Width - size.Width, Height - size.Height);
+	}
+	#endif /* __cplusplus */
+} SizeF;
+
+typedef struct Point {
+	INT X;
+	INT Y;
+
+	#ifdef __cplusplus
+	Point(): X(0), Y(0) {}
+	Point(INT x, INT y): X(x), Y(y) {}
+	Point(const Point& point): X(point.X), Y(point.Y) {}
+	Point(const Size& size): X(size.Width), Y(size.Height) {}
+	
+	BOOL Equals(const Point& point) const {
+		return X == point.X && Y == point.Y;
+	}
+	Point operator+(const Point& point) const {
+		return Point(X + point.X, Y + point.Y);
+	}
+	Point operator-(const Point& point) const {
+		return Point(X - point.X, Y - point.Y);
+	}
+	#endif /* __cplusplus */
+} Point;
+
+typedef struct PointF {
+	REAL X;
+	REAL Y;
+
+	#ifdef __cplusplus
+	PointF(): X(0.0f), Y(0.0f) {}
+	PointF(REAL x, REAL y): X(x), Y(y) {}
+	PointF(const PointF& point): X(point.X), Y(point.Y) {}
+	PointF(const SizeF& size): X(size.Width), Y(size.Height) {}
+	
+	BOOL Equals(const PointF& point) const {
+		return X == point.X && Y == point.Y;
+	}
+	PointF operator+(const PointF& point) const {
+		return PointF(X + point.X, Y + point.Y);
+	}
+	PointF operator-(const PointF& point) const {
+		return PointF(X - point.X, Y - point.Y);
+	}
+	#endif /* __cplusplus */
+} PointF;
+
+typedef struct Rect {
+	INT X;
+	INT Y;
+	INT Width;
+	INT Height;
+
+	#ifdef __cplusplus
+	Rect(): X(0), Y(0), Width(0), Height(0) {}
+	Rect(const Point& location, const Size& size):
+		X(location.X), Y(location.Y),
+		Width(size.Width), Height(size.Height) {}
+	Rect(INT x, INT y, INT width, INT height):
+		X(x), Y(y), Width(width), Height(height) {}
+	
+	Rect* Clone() const {
+		return new Rect(X, Y, Width, Height);
+	}
+	BOOL Contains(INT x, INT y) const {
+		return X <= x && Y <= y && x < X+Width && y < Y+Height;
+	}
+	BOOL Contains(const Point& point) const {
+		return Contains(point.X, point.Y);
+	}
+	BOOL Contains(const Rect& rect) const {
+		return X <= rect.X && Y <= rect.Y
+			&& rect.X+rect.Width <= X+Width
+			&& rect.Y+rect.Height <= Y+Height;
+	}
+	BOOL Equals(const Rect& rect) const {
+		return X == rect.X && Y == rect.Y
+			&& Width == rect.Width && Height == rect.Height;
+	}
+	INT GetBottom() const {
+		return Y+Height;
+	}
+	VOID GetBounds(Rect *rect) const {
+		if (rect != NULL) {
+			rect->X = X;
+			rect->Y = Y;
+			rect->Width = Width;
+			rect->Height = Height;
+		}
+	}
+	INT GetLeft() const {
+		return X;
+	}
+	VOID GetLocation(Point *point) const {
+		if (point != NULL) {
+			point->X = X;
+			point->Y = Y;
+		}
+	}
+	INT GetRight() const {
+		return X+Width;
+	}
+	VOID GetSize(Size *size) const {
+		if (size != NULL) {
+			size->Width = Width;
+			size->Height = Height;
+		}
+	}
+	INT GetTop() const {
+		return Y;
+	}
+	BOOL IsEmptyArea() const {
+		return Width <= 0 || Height <= 0;
+	}
+	VOID Inflate(INT dx, INT dy) {
+		X -= dx;
+		Y -= dy;
+		Width += 2*dx;
+		Height += 2*dy;
+	}
+	VOID Inflate(const Point& point) {
+		Inflate(point.X, point.Y);
+	}
+	static BOOL Intersect(Rect& c, const Rect& a, const Rect& b) {
+		INT intersectLeft   = (a.X < b.X) ? b.X : a.X;
+		INT intersectTop    = (a.Y < b.Y) ? b.Y : a.Y; 
+		INT intersectRight  = (a.GetRight() < b.GetRight())
+					? a.GetRight() : b.GetRight();
+		INT intersectBottom = (a.GetBottom() < b.GetBottom())
+					? a.GetBottom() : b.GetBottom();
+		c.X = intersectLeft;
+		c.Y = intersectTop;
+		c.Width = intersectRight - intersectLeft;
+		c.Height = intersectBottom - intersectTop;
+		return !c.IsEmptyArea();  
+	}
+	BOOL Intersect(const Rect& rect) {
+		return Intersect(*this, *this, rect);
+	}
+	BOOL IntersectsWith(const Rect& rc) const {
+		INT intersectLeft   = (X < rc.X) ? rc.X : X;
+		INT intersectTop    = (Y < rc.Y) ? rc.Y : Y; 
+		INT intersectRight  = (GetRight() < rc.GetRight())
+					? GetRight() : rc.GetRight();
+		INT intersectBottom = (GetBottom() < rc.GetBottom())
+					? GetBottom() : rc.GetBottom();
+		return intersectLeft < intersectRight
+			&& intersectTop < intersectBottom;
+	}
+	VOID Offset(INT dx, INT dy) {
+		X += dx;
+		Y += dy;
+	}
+	VOID Offset(const Point& point) {
+		Offset(point.X, point.Y);
+	}
+	static BOOL Union(Rect& c, const Rect& a, const Rect& b) {
+		INT unionLeft   = (a.X < b.X) ? a.X : b.X;
+		INT unionTop    = (a.Y < b.Y) ? a.Y : b.Y; 
+		INT unionRight  = (a.GetRight() < b.GetRight())
+					? b.GetRight() : a.GetRight();
+		INT unionBottom = (a.GetBottom() < b.GetBottom())
+					? b.GetBottom() : a.GetBottom();
+		c.X = unionLeft;
+		c.Y = unionTop;
+		c.Width = unionRight - unionLeft;
+		c.Height = unionBottom - unionTop;
+		return !c.IsEmptyArea();
+	}
+	#endif /* __cplusplus */
+} Rect;
+
+typedef struct RectF {
+	REAL X;
+	REAL Y;
+	REAL Width;
+	REAL Height;
+
+	#ifdef __cplusplus
+	RectF(): X(0.0f), Y(0.0f), Width(0.0f), Height(0.0f) {}
+	RectF(const PointF& location, const SizeF& size):
+		X(location.X), Y(location.Y),
+		Width(size.Width), Height(size.Height) {}
+	RectF(REAL x, REAL y, REAL width, REAL height):
+		X(x), Y(y), Width(width), Height(height) {}
+	
+	RectF* Clone() const {
+		return new RectF(X, Y, Width, Height);
+	}
+	BOOL Contains(REAL x, REAL y) const {
+		return X <= x && Y <= y && x < X+Width && y < Y+Height;
+	}
+	BOOL Contains(const PointF& point) const {
+		return Contains(point.X, point.Y);
+	}
+	BOOL Contains(const RectF& rect) const {
+		return X <= rect.X && Y <= rect.Y
+			&& rect.X+rect.Width <= X+Width
+			&& rect.Y+rect.Height <= Y+Height;
+	}
+	BOOL Equals(const RectF& rect) const {
+		return X == rect.X && Y == rect.Y
+			&& Width == rect.Width && Height == rect.Height;
+	}
+	REAL GetBottom() const {
+		return Y+Height;
+	}
+	VOID GetBounds(RectF *rect) const {
+		if (rect != NULL) {
+			rect->X = X;
+			rect->Y = Y;
+			rect->Width = Width;
+			rect->Height = Height;
+		}
+	}
+	REAL GetLeft() const {
+		return X;
+	}
+	VOID GetLocation(PointF *point) const {
+		if (point != NULL) {
+			point->X = X;
+			point->Y = Y;
+		}
+	}
+	REAL GetRight() const {
+		return X+Width;
+	}
+	VOID GetSize(SizeF *size) const {
+		if (size != NULL) {
+			size->Width = Width;
+			size->Height = Height;
+		}
+	}
+	REAL GetTop() const {
+		return Y;
+	}
+	BOOL IsEmptyArea() const {
+		return Width <= 0.0f || Height <= 0.0f;
+	}
+	VOID Inflate(REAL dx, REAL dy) {
+		X -= dx;
+		Y -= dy;
+		Width += 2*dx;
+		Height += 2*dy;
+	}
+	VOID Inflate(const PointF& point) {
+		Inflate(point.X, point.Y);
+	}
+	static BOOL Intersect(RectF& c, const RectF& a, const RectF& b) {
+		INT intersectLeft   = (a.X < b.X) ? b.X : a.X;
+		INT intersectTop    = (a.Y < b.Y) ? b.Y : a.Y; 
+		INT intersectRight  = (a.GetRight() < b.GetRight())
+					? a.GetRight() : b.GetRight();
+		INT intersectBottom = (a.GetBottom() < b.GetBottom())
+					? a.GetBottom() : b.GetBottom();
+		c.X = intersectLeft;
+		c.Y = intersectTop;
+		c.Width = intersectRight - intersectLeft;
+		c.Height = intersectBottom - intersectTop;
+		return !c.IsEmptyArea();  
+	}
+	BOOL Intersect(const RectF& rect) {
+		return Intersect(*this, *this, rect);
+	}
+	BOOL IntersectsWith(const RectF& rc) const {
+		INT intersectLeft   = (X < rc.X) ? rc.X : X;
+		INT intersectTop    = (Y < rc.Y) ? rc.Y : Y; 
+		INT intersectRight  = (GetRight() < rc.GetRight())
+					? GetRight() : rc.GetRight();
+		INT intersectBottom = (GetBottom() < rc.GetBottom())
+					? GetBottom() : rc.GetBottom();
+		return intersectLeft < intersectRight
+			&& intersectTop < intersectBottom;
+	}
+	VOID Offset(REAL dx, REAL dy) {
+		X += dx;
+		Y += dy;
+	}
+	VOID Offset(const PointF& point) {
+		Offset(point.X, point.Y);
+	}
+	static BOOL Union(RectF& c, const RectF& a, const RectF& b) {
+		INT unionLeft   = (a.X < b.X) ? a.X : b.X;
+		INT unionTop    = (a.Y < b.Y) ? a.Y : b.Y; 
+		INT unionRight  = (a.GetRight() < b.GetRight())
+					? b.GetRight() : a.GetRight();
+		INT unionBottom = (a.GetBottom() < b.GetBottom())
+					? b.GetBottom() : a.GetBottom();
+		c.X = unionLeft;
+		c.Y = unionTop;
+		c.Width = unionRight - unionLeft;
+		c.Height = unionBottom - unionTop;
+		return !c.IsEmptyArea();
+	}
+	#endif /* __cplusplus */
+} RectF;
+
+/* FIXME: Are descendants of this class, when compiled with g++,
+   binary compatible with MSVC++ code (especially GDIPLUS.DLL of course)? */
+#ifdef __cplusplus
+struct GdiplusAbort {
+	virtual HRESULT __stdcall Abort(void) {}
+};
+#else
+typedef struct GdiplusAbort GdiplusAbort;  /* incomplete type */
+#endif
+
+typedef struct CharacterRange {
+	INT First;
+	INT Length;
+
+	#ifdef __cplusplus
+	CharacterRange(): First(0), Length(0) {}
+	CharacterRange(INT first, INT length): First(first), Length(length) {}
+	CharacterRange& operator=(const CharacterRange& rhs) {
+		/* This gracefully handles self-assignment */
+		First = rhs.First;
+		Length = rhs.Length;
+		return *this;
+	}
+	#endif /* __cplusplus */
+} CharacterRange;
+
+typedef struct PathData {
+	INT Count;
+	PointF *Points;
+	BYTE *Types;
+
+	#ifdef __cplusplus
+	friend class GraphicsPath;
+
+	PathData(): Count(0), Points(NULL), Types(NULL) {}
+	~PathData() {
+		FreeArrays();
+	}
+private:
+	/* used by GraphicsPath::GetPathData, defined in gdipluspath.h */
+	Status AllocateArrays(INT capacity);
+	VOID FreeArrays();
+	#endif /* __cplusplus */
+} PathData;
+
+/* Callback function types */
+/* FIXME: need a correct definition for these function pointer types */
+typedef void *DebugEventProc;
+typedef BOOL CALLBACK (*EnumerateMetafileProc)(EmfPlusRecordType,UINT,UINT,const BYTE*,VOID*);
+typedef void *DrawImageAbort;
+typedef void *GetThumbnailImageAbort;
+
+
+#endif /* __GDIPLUS_TYPES_H */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/fcntl.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/fcntl.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,7 @@
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * This fcntl.h maps to the root fcntl.h
+ */
+
+#include <fcntl.h>
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/file.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/file.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,7 @@
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * This file.h maps to the root fcntl.h
+ * TODO?
+ */
+#include <fcntl.h>
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/locking.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/locking.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,31 @@
+/*
+ * locking.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Constants for the mode parameter of the locking function.
+ *
+ */
+
+#ifndef	_LOCKING_H_
+#define	_LOCKING_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define	_LK_UNLCK	0	/* Unlock */
+#define	_LK_LOCK	1	/* Lock */
+#define	_LK_NBLCK	2	/* Non-blocking lock */
+#define	_LK_RLCK	3	/* Lock for read only */
+#define	_LK_NBRLCK	4	/* Non-blocking lock for read only */
+
+#ifndef	NO_OLDNAMES
+#define	LK_UNLCK	_LK_UNLCK
+#define	LK_LOCK		_LK_LOCK
+#define	LK_NBLCK	_LK_NBLCK
+#define	LK_RLCK		_LK_RLCK
+#define	LK_NBRLCK	_LK_NBRLCK
+#endif	/* Not NO_OLDNAMES */
+
+#endif	/* Not _LOCKING_H_ */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/param.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/param.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,22 @@
+/*
+ * param.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ */
+
+#ifndef _SYS_PARAM_H
+#define _SYS_PARAM_H
+
+#include <sys/types.h>
+#include <limits.h>
+
+/* These are useful for cross-compiling */ 
+#define BIG_ENDIAN	4321
+#define LITTLE_ENDIAN	1234
+#define BYTE_ORDER	LITTLE_ENDIAN
+
+#define MAXPATHLEN PATH_MAX
+
+#endif
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/stat.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/stat.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,279 @@
+/*
+ * stat.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Symbolic constants for opening and creating files, also stat, fstat and
+ * chmod functions.
+ *
+ */
+
+#ifndef _STAT_H_
+#define _STAT_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_size_t
+#define __need_wchar_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+#include <sys/types.h>
+
+/*
+ * Constants for the stat st_mode member.
+ */
+#define	_S_IFIFO	0x1000	/* FIFO */
+#define	_S_IFCHR	0x2000	/* Character */
+#define	_S_IFBLK	0x3000	/* Block: Is this ever set under w32? */
+#define	_S_IFDIR	0x4000	/* Directory */
+#define	_S_IFREG	0x8000	/* Regular */
+
+#define	_S_IFMT		0xF000	/* File type mask */
+
+#define	_S_IEXEC	0x0040
+#define	_S_IWRITE	0x0080
+#define	_S_IREAD	0x0100
+
+#define	_S_IRWXU	(_S_IREAD | _S_IWRITE | _S_IEXEC)
+#define	_S_IXUSR	_S_IEXEC
+#define	_S_IWUSR	_S_IWRITE
+#define	_S_IRUSR	_S_IREAD
+
+#define	_S_ISDIR(m)	(((m) & _S_IFMT) == _S_IFDIR)
+#define	_S_ISFIFO(m)	(((m) & _S_IFMT) == _S_IFIFO)
+#define	_S_ISCHR(m)	(((m) & _S_IFMT) == _S_IFCHR)
+#define	_S_ISBLK(m)	(((m) & _S_IFMT) == _S_IFBLK)
+#define	_S_ISREG(m)	(((m) & _S_IFMT) == _S_IFREG)
+
+#ifndef _NO_OLDNAMES
+
+#define	S_IFIFO		_S_IFIFO
+#define	S_IFCHR		_S_IFCHR
+#define	S_IFBLK		_S_IFBLK
+#define	S_IFDIR		_S_IFDIR
+#define	S_IFREG		_S_IFREG
+#define	S_IFMT		_S_IFMT
+#define	S_IEXEC		_S_IEXEC
+#define	S_IWRITE	_S_IWRITE
+#define	S_IREAD		_S_IREAD
+#define	S_IRWXU		_S_IRWXU
+#define	S_IXUSR		_S_IXUSR
+#define	S_IWUSR		_S_IWUSR
+#define	S_IRUSR		_S_IRUSR
+
+#define	S_ISDIR(m)	(((m) & S_IFMT) == S_IFDIR)
+#define	S_ISFIFO(m)	(((m) & S_IFMT) == S_IFIFO)
+#define	S_ISCHR(m)	(((m) & S_IFMT) == S_IFCHR)
+#define	S_ISBLK(m)	(((m) & S_IFMT) == S_IFBLK)
+#define	S_ISREG(m)	(((m) & S_IFMT) == S_IFREG)
+
+#endif	/* Not _NO_OLDNAMES */
+
+#ifndef RC_INVOKED
+
+#ifndef _STAT_DEFINED
+/*
+ * The structure manipulated and returned by stat and fstat.
+ *
+ * NOTE: If called on a directory the values in the time fields are not only
+ * invalid, they will cause localtime et. al. to return NULL. And calling
+ * asctime with a NULL pointer causes an Invalid Page Fault. So watch it!
+ */
+struct _stat
+{
+	_dev_t	st_dev;		/* Equivalent to drive number 0=A 1=B ... */
+	_ino_t	st_ino;		/* Always zero ? */
+	_mode_t	st_mode;	/* See above constants */
+	short	st_nlink;	/* Number of links. */
+	short	st_uid;		/* User: Maybe significant on NT ? */
+	short	st_gid;		/* Group: Ditto */
+	_dev_t	st_rdev;	/* Seems useless (not even filled in) */
+	_off_t	st_size;	/* File size in bytes */
+	time_t	st_atime;	/* Accessed date (always 00:00 hrs local
+				 * on FAT) */
+	time_t	st_mtime;	/* Modified time */
+	time_t	st_ctime;	/* Creation time */
+};
+
+#ifndef	_NO_OLDNAMES
+/* NOTE: Must be the same as _stat above. */
+struct stat
+{
+	dev_t	st_dev;		/* Equivalent to drive number 0=A 1=B ... */
+	ino_t	st_ino;		/* Always zero ? */
+	mode_t	st_mode;	/* See above constants */
+	short	st_nlink;	/* Number of links. */
+	short	st_uid;		/* User: Maybe significant on NT ? */
+	short	st_gid;		/* Group: Ditto */
+	dev_t	st_rdev;	/* Seems useless (not even filled in) */
+	off_t	st_size;	/* File size in bytes */
+	time_t	st_atime;	/* Accessed date (always 00:00 hrs local
+				 * on FAT) */
+	time_t	st_mtime;	/* Modified time */
+	time_t	st_ctime;	/* Creation time */
+};
+#endif /* _NO_OLDNAMES */
+
+#if defined (__MSVCRT__)
+struct _stati64 {
+    _dev_t st_dev;
+    _ino_t st_ino;
+    _mode_t st_mode;
+    short st_nlink;
+    short st_uid;
+    short st_gid;
+    _dev_t st_rdev;
+    __int64 st_size;
+    time_t st_atime;
+    time_t st_mtime;
+    time_t st_ctime;
+};
+#if __MSVCRT_VERSION__ >= 0x0601
+struct __stat64
+{
+    _dev_t st_dev;
+    _ino_t st_ino;
+    _mode_t st_mode;
+    short st_nlink;
+    short st_uid;
+    short st_gid;
+    _dev_t st_rdev;
+    __int64 st_size;
+    __time64_t st_atime;
+    __time64_t st_mtime;
+    __time64_t st_ctime;
+};
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+#if __MSVCRT_VERSION__ >= 0x0800
+struct __stat32
+{
+	_dev_t		st_dev;
+	_ino_t		st_ino;
+	_mode_t		st_mode;
+	short		st_nlink;
+	short		st_uid;
+	short		st_gid;
+	_dev_t		st_rdev;
+	__int32		st_size;
+	__time32_t	st_atime;
+	__time32_t	st_mtime;
+	__time32_t	st_ctime;
+};
+struct _stat32i64 {
+	_dev_t		st_dev;
+	_ino_t		st_ino;
+	_mode_t		st_mode;
+	short		st_nlink;
+	short		st_uid;
+	short		st_gid;
+	_dev_t		st_rdev;
+	__int64		st_size;
+	__time32_t	st_atime;
+	__time32_t	st_mtime;
+	__time32_t	st_ctime;
+};
+struct _stat64i32 {
+	_dev_t		st_dev;
+	_ino_t		st_ino;
+	_mode_t		st_mode;
+	short		st_nlink;
+	short		st_uid;
+	short		st_gid;
+	_dev_t		st_rdev;
+	__int32		st_size;
+	__time64_t	st_atime;
+	__time64_t	st_mtime;
+	__time64_t	st_ctime;
+};
+#endif /* __MSVCRT_VERSION__ >= 0x0800 */
+#endif /* __MSVCRT__ */
+#define _STAT_DEFINED
+#endif /* _STAT_DEFINED */
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#if __MSVCRT_VERSION__ < 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_fstat (int, struct _stat*);
+#endif
+_CRTIMP int __cdecl __MINGW_NOTHROW	_chmod (const char*, int);
+#if __MSVCRT_VERSION__ < 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_stat (const char*, struct _stat*);
+#endif
+
+#ifndef	_NO_OLDNAMES
+/* FIXME for __MSVCRT_VERSION__ >= 0x0800 */
+/* These functions live in liboldnames.a. */
+_CRTIMP int __cdecl __MINGW_NOTHROW	fstat (int, struct stat*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	chmod (const char*, int);
+_CRTIMP int __cdecl __MINGW_NOTHROW	stat (const char*, struct stat*);
+
+#endif	/* Not _NO_OLDNAMES */
+
+#if defined (__MSVCRT__)
+#if __MSVCRT_VERSION__ < 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW  _fstati64(int, struct _stati64 *);
+_CRTIMP int __cdecl __MINGW_NOTHROW  _stati64(const char *, struct _stati64 *);
+#endif
+/* These require newer versions of msvcrt.dll (6.10 or higher).  */ 
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP int __cdecl __MINGW_NOTHROW _fstat64 (int, struct __stat64*);
+_CRTIMP int __cdecl __MINGW_NOTHROW _stat64 (const char*, struct __stat64*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+#if __MSVCRT_VERSION__ >= 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_fstat32 (int, struct __stat32*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_stat32 (const char*, struct __stat32*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_fstat32i64 (int, struct _stat32i64*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_fstat64i32 (int, struct _stat64i32*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_stat32i64 (const char*, struct _stat32i64*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_stat64i32 (const char*, struct _stat64i32*);
+#ifndef _USE_32BIT_TIME_T
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_fstat (int _v1, struct _stat* _v2)		 { return(_fstat64i32 (_v1,(struct _stat64i32*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_stat (const char* _v1, struct _stat* _v2)	 { return(_stat64i32  (_v1,(struct _stat64i32*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_fstati64 (int _v1, struct _stati64* _v2)	 { return(_fstat64 (_v1,(struct __stat64*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_stati64 (const char* _v1, struct _stati64* _v2) { return(_stat64  (_v1,(struct __stat64*)_v2)); }
+#else
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_fstat (int _v1, struct _stat* _v2)		 { return(_fstat32 (_v1,(struct __stat32*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_stat (const char* _v1, struct _stat* _v2)	 { return(_stat32  (_v1,(struct __stat32*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_fstati64 (int _v1, struct _stati64* _v2)	 { return(_fstat32i64 (_v1,(struct _stat32i64*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_stati64 (const char* _v1, struct _stati64* _v2) { return(_stat32i64  (_v1,(struct _stat32i64*)_v2)); }
+#endif /* !_USE_32BIT_TIME_T */
+#endif /* __MSVCRT_VERSION__ >= 0x0800 */
+
+
+#if !defined ( _WSTAT_DEFINED) /* also declared in wchar.h */
+#if __MSVCRT_VERSION__ < 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_wstat(const wchar_t*, struct _stat*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_wstati64 (const wchar_t*, struct _stati64*);
+#endif
+#if __MSVCRT_VERSION__ >= 0x0601
+_CRTIMP int __cdecl __MINGW_NOTHROW _wstat64 (const wchar_t*, struct __stat64*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+#if __MSVCRT_VERSION__ >= 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_wstat32 (const wchar_t*, struct __stat32*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_wstat32i64 (const wchar_t*, struct _stat32i64*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_wstat64i32 (const wchar_t*, struct _stat64i32*);
+#ifndef _USE_32BIT_TIME_T
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_wstat (const wchar_t* _v1, struct _stat* _v2)	     { return(_wstat64i32 (_v1,(struct _stat64i32*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_wstati64 (const wchar_t* _v1, struct _stati64* _v2) { return(_wstat64 (_v1,(struct __stat64*)_v2)); }
+#else
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_wstat (const wchar_t* _v1, struct _stat* _v2)	     { return(_wstat32 (_v1,(struct __stat32*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_wstati64 (const wchar_t* _v1, struct _stati64* _v2) { return(_wstat32i64 (_v1,(struct _stat32i64*)_v2)); }
+#endif /* !_USE_32BIT_TIME_T */
+#endif /* __MSVCRT_VERSION__ >= 0x0800 */
+#define _WSTAT_DEFINED
+#endif /* _WSTAT_DEFIND */
+#endif /* __MSVCRT__ */
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* Not RC_INVOKED */
+
+#endif	/* Not _STAT_H_ */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/time.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/time.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,47 @@
+#ifndef _SYS_TIME_H_
+#define _SYS_TIME_H_
+#include <time.h>
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#ifndef _TIMEVAL_DEFINED /* also in winsock[2].h */
+#define _TIMEVAL_DEFINED
+struct timeval {
+  long tv_sec;
+  long tv_usec;
+};
+#define timerisset(tvp)	 ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timercmp(tvp, uvp, cmp) \
+	(((tvp)->tv_sec != (uvp)->tv_sec) ? \
+	((tvp)->tv_sec cmp (uvp)->tv_sec) : \
+	((tvp)->tv_usec cmp (uvp)->tv_usec))
+#define timerclear(tvp)	 (tvp)->tv_sec = (tvp)->tv_usec = 0
+#endif /* _TIMEVAL_DEFINED */
+
+/* Provided for compatibility with code that assumes that
+   the presence of gettimeofday function implies a definition
+   of struct timezone. */
+struct timezone
+{
+  int tz_minuteswest; /* of Greenwich */
+  int tz_dsttime;     /* type of dst correction to apply */
+};
+
+/*
+   Implementation as per:
+   The Open Group Base Specifications, Issue 6
+   IEEE Std 1003.1, 2004 Edition
+
+   The timezone pointer arg is ignored.  Errors are ignored.
+*/ 
+int __cdecl __MINGW_NOTHROW gettimeofday(struct timeval *__restrict__,
+			 void *__restrict__  /*	tzp (unused) */);
+
+#ifdef	__cplusplus
+}
+#endif
+
+
+#endif /* _SYS_TIME_H_ */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/timeb.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/timeb.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,97 @@
+/*
+ * timeb.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Support for the UNIX System V ftime system call.
+ *
+ */
+
+#ifndef	_TIMEB_H_
+#define	_TIMEB_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+#include <sys/types.h>
+
+#ifndef	RC_INVOKED
+
+/*
+ * TODO: Structure not tested.
+ */
+struct _timeb
+{
+	time_t	time;
+	short	millitm;
+	short	timezone;
+	short	dstflag;
+};
+
+#if __MSVCRT_VERSION__ >= 0x0800
+/*
+ * TODO: Structure not tested.
+ */
+struct __timeb32
+{
+	__time32_t	time;
+	short	millitm;
+	short	timezone;
+	short	dstflag;
+};
+#endif /* __MSVCRT_VERSION__ >= 0x0800 */
+
+#ifndef	_NO_OLDNAMES
+/*
+ * TODO: Structure not tested.
+ */
+struct timeb
+{
+	time_t	time;
+	short	millitm;
+	short	timezone;
+	short	dstflag;
+};
+#endif
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+/* TODO: Not tested. */
+_CRTIMP void __cdecl __MINGW_NOTHROW	_ftime (struct _timeb*);
+
+#ifndef	_NO_OLDNAMES
+/* FIXME for __MSVCRT_VERSION__ >= 0x0800 */
+_CRTIMP void __cdecl __MINGW_NOTHROW	ftime (struct timeb*);
+#endif	/* Not _NO_OLDNAMES */
+
+/* This requires newer versions of msvcrt.dll (6.10 or higher).  */ 
+#if __MSVCRT_VERSION__ >= 0x0601
+struct __timeb64
+{
+  __time64_t time;
+  short millitm;
+  short timezone;
+  short dstflag;
+};
+
+_CRTIMP void __cdecl __MINGW_NOTHROW	_ftime64 (struct __timeb64*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+
+#if __MSVCRT_VERSION__ >= 0x0800
+_CRTIMP void __cdecl __MINGW_NOTHROW	_ftime32 (struct __timeb32*);
+#ifndef _USE_32BIT_TIME_T
+_CRTALIAS void __cdecl __MINGW_NOTHROW	_ftime (struct _timeb* _v) { return(_ftime64 ((struct __timeb64*)_v)); }
+#else
+_CRTALIAS void __cdecl __MINGW_NOTHROW	_ftime (struct _timeb* _v) { return(_ftime32 ((struct __timeb32*)_v)); }
+#endif
+#endif /* __MSVCRT_VERSION__ >= 0x0800 */
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* Not RC_INVOKED */
+
+#endif	/* Not _TIMEB_H_ */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/types.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/types.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,138 @@
+/*
+ * types.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * The definition of constants, data types and global variables.
+ *
+ */
+
+#ifndef	_TYPES_H_
+#define	_TYPES_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_wchar_t
+#define __need_size_t
+#define __need_ptrdiff_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif	/* Not RC_INVOKED */
+
+#ifndef RC_INVOKED
+
+#ifndef _TIME32_T_DEFINED
+typedef __int32 __time32_t;
+#define _TIME32_T_DEFINED
+#endif
+
+#ifndef _TIME64_T_DEFINED
+typedef __int64 __time64_t;
+#define _TIME64_T_DEFINED
+#endif
+
+#ifndef _TIME_T_DEFINED
+/* FIXME __STRICT_ANSI__ ! */
+#if __MSVCRT_VERSION__ >= 0x0800
+#ifndef _USE_32BIT_TIME_T
+typedef	__time64_t time_t;
+#else
+typedef	__time32_t time_t;
+#endif /* !_USE_32BIT_TIME_T */
+#else
+typedef	__time32_t time_t;
+#endif /* __MSVCRT_VERSION__ >= 0x0800 */
+#define _TIME_T_DEFINED
+#endif
+
+#ifndef	_OFF_T_
+#define	_OFF_T_
+typedef long _off_t;
+
+#ifndef	_NO_OLDNAMES
+typedef _off_t	off_t;
+#endif
+#endif	/* Not _OFF_T_ */
+
+
+#ifndef _DEV_T_
+#define	_DEV_T_
+#ifdef __MSVCRT__
+typedef unsigned int _dev_t;
+#else
+typedef short _dev_t;
+#endif
+
+#ifndef	_NO_OLDNAMES
+typedef _dev_t	dev_t;
+#endif
+#endif	/* Not _DEV_T_ */
+
+
+#ifndef _INO_T_
+#define	_INO_T_
+typedef short _ino_t;
+
+#ifndef	_NO_OLDNAMES
+typedef _ino_t	ino_t;
+#endif
+#endif	/* Not _INO_T_ */
+
+
+#ifndef _PID_T_
+#define	_PID_T_
+typedef int	_pid_t;
+
+#ifndef	_NO_OLDNAMES
+typedef _pid_t	pid_t;
+#endif
+#endif	/* Not _PID_T_ */
+
+
+#ifndef _MODE_T_
+#define	_MODE_T_
+typedef unsigned short _mode_t;
+
+#ifndef	_NO_OLDNAMES
+typedef _mode_t	mode_t;
+#endif
+#endif	/* Not _MODE_T_ */
+
+
+#ifndef _SIGSET_T_
+#define	_SIGSET_T_
+typedef int	_sigset_t;
+
+#ifndef	_NO_OLDNAMES
+typedef _sigset_t	sigset_t;
+#endif
+#endif	/* Not _SIGSET_T_ */
+
+#ifndef _SSIZE_T_
+#define _SSIZE_T_
+typedef long _ssize_t;
+
+#ifndef	_NO_OLDNAMES
+typedef _ssize_t ssize_t;
+#endif
+#endif /* Not _SSIZE_T_ */ 
+
+#ifndef _FPOS64_T_
+#define _FPOS64_T_
+typedef long long fpos64_t;
+#endif
+
+#ifndef _OFF64_T_
+#define _OFF64_T_
+typedef long long off64_t;
+#endif
+
+#if !defined __NO_ISOCEXT
+typedef unsigned int useconds_t;
+#endif  /* Not __NO_ISOCEXT */
+
+#endif	/* Not RC_INVOKED */
+
+#endif	/* Not _TYPES_H_ */
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/unistd.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/unistd.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,6 @@
+/*
+ * This file is part of the Mingw32 package.
+ *
+ * unistd.h maps (roughly) to io.h
+ */
+#include <io.h>
diff -r 5853bf44af9f -r 0c3bcea5b4d0 sys/utime.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/utime.h	Mon Mar 05 04:56:58 2012 +0000
@@ -0,0 +1,110 @@
+/*
+ * utime.h
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is a part of the mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within the package.
+ *
+ * Support for the utime function.
+ *
+ */
+#ifndef	_UTIME_H_
+#define	_UTIME_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_wchar_t
+#define __need_size_t
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif	/* Not RC_INVOKED */
+#include <sys/types.h>
+
+#ifndef	RC_INVOKED
+
+/*
+ * Structure used by _utime function.
+ */
+struct _utimbuf
+{
+	time_t	actime;		/* Access time */
+	time_t	modtime;	/* Modification time */
+};
+#if __MSVCRT_VERSION__ >= 0x0800
+struct __utimbuf32
+{
+	__time32_t actime;
+	__time32_t modtime;
+};
+#endif /* __MSVCRT_VERSION__ >= 0x0800 */
+
+
+#ifndef	_NO_OLDNAMES
+/* NOTE: Must be the same as _utimbuf above. */
+struct utimbuf
+{
+	time_t	actime;
+	time_t	modtime;
+};
+#endif	/* Not _NO_OLDNAMES */
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#if __MSVCRT_VERSION__ < 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_utime (const char*, struct _utimbuf*);
+#endif
+
+#ifndef	_NO_OLDNAMES
+/* FIXME for __MSVCRT_VERSION__ >= 0x0800 */
+_CRTIMP int __cdecl __MINGW_NOTHROW	utime (const char*, struct utimbuf*);
+#endif	/* Not _NO_OLDNAMES */
+
+#if __MSVCRT_VERSION__ < 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_futime (int, struct _utimbuf*);
+#endif
+
+/* The wide character version, only available for MSVCRT versions of the
+ * C runtime library. */
+#ifdef __MSVCRT__
+#if __MSVCRT_VERSION__ < 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_wutime (const wchar_t*, struct _utimbuf*);
+#endif
+#endif /* MSVCRT runtime */
+
+/* These require newer versions of msvcrt.dll (6.10 or higher).  */ 
+#if __MSVCRT_VERSION__ >= 0x0601
+struct __utimbuf64
+{
+	__time64_t actime;
+	__time64_t modtime;
+};
+
+_CRTIMP int __cdecl __MINGW_NOTHROW	_utime64 (const char*, struct __utimbuf64*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_wutime64 (const wchar_t*, struct __utimbuf64*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_futime64 (int, struct __utimbuf64*);
+#endif /* __MSVCRT_VERSION__ >= 0x0601 */
+
+#if __MSVCRT_VERSION__ >= 0x0800
+_CRTIMP int __cdecl __MINGW_NOTHROW	_utime32 (const char*, struct __utimbuf32*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_wutime32 (const wchar_t*, struct __utimbuf32*);
+_CRTIMP int __cdecl __MINGW_NOTHROW	_futime32 (int, struct __utimbuf32*);
+#ifndef _USE_32BIT_TIME_T
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_utime (const char* _v1, struct _utimbuf* _v2)	   { return(_utime64  (_v1,(struct __utimbuf64*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_wutime (const wchar_t* _v1, struct _utimbuf* _v2) { return(_wutime64 (_v1,(struct __utimbuf64*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_futime (int _v1, struct _utimbuf* _v2)		   { return(_futime64 (_v1,(struct __utimbuf64*)_v2)); }
+#else
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_utime (const char* _v1, struct _utimbuf* _v2)	   { return(_utime32  (_v1,(struct __utimbuf32*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_wutime (const wchar_t* _v1, struct _utimbuf* _v2) { return(_wutime32 (_v1,(struct __utimbuf32*)_v2)); }
+_CRTALIAS int __cdecl __MINGW_NOTHROW	_futime (int _v1, struct _utimbuf* _v2)		   { return(_futime32 (_v1,(struct __utimbuf32*)_v2)); }
+#endif
+#endif /* __MSVCRT_VERSION__ >= 0x0800 */
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* Not RC_INVOKED */
+
+#endif	/* Not _UTIME_H_ */