1;;;
2;;; extract-abi.scm - Extract ABI of GL extension
3;;;
4;;;  Copyright (c) 2005-2014  Shiro Kawai  <shiro@acm.org>
5;;;
6;;;  Redistribution and use in source and binary forms, with or without
7;;;  modification, are permitted provided that the following conditions
8;;;  are met:
9;;;
10;;;   1. Redistributions of source code must retain the above copyright
11;;;      notice, this list of conditions and the following disclaimer.
12;;;
13;;;   2. Redistributions in binary form must reproduce the above copyright
14;;;      notice, this list of conditions and the following disclaimer in the
15;;;      documentation and/or other materials provided with the distribution.
16;;;
17;;;   3. Neither the name of the authors nor the names of its contributors
18;;;      may be used to endorse or promote products derived from this
19;;;      software without specific prior written permission.
20;;;
21;;;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22;;;  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23;;;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24;;;  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25;;;  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26;;;  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
27;;;  TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28;;;  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29;;;  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30;;;  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31;;;  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32;;;
33;;;  $Id: extract-abi.scm,v 1.4 2008-06-04 11:50:01 shirok Exp $
34;;;
35
36;; We no longer count on glext.h on the target platform, since
37;; it may be out of date and it is too much hassle to support
38;; all variations.  Instead of putting #ifdef's here and there,
39;; we shifted everthing to runtime---so we include all the
40;; declarations of the most recent GL extension ABI, and the
41;; code queries availability of each of them at runtime.
42;;
43;; This program scans glext.h as the authoritative source of GL
44;; extension ABI.  We can use the most recent version from here:
45;;  http://oss.sgi.com/projects/ogl-sample/ABI/
46;;
47;; It generates glext-abi.scm, which contains necessary information
48;; in S-expressions.
49;;
50;; The format of glext-abi.scm is as follows.
51;;
52;;  * Constants
53;;
54;;      (define-constant GL_UNSIGNED_BYTE_3_3_2 #x8032)
55;;
56;;  * Extensions
57;;
58;;      (define-extension-name GL_ARB_fragment_program)
59;;
60;;  * Entry points
61;;
62;;      (define-entry-point glBindProgramNV "... typedef ...")
63;;
64
65(use srfi-1)
66(use srfi-13)
67
68;; Predefined OpenGL 1.0 and 1.1 symbols
69
70(define *gl-syms*
71  '(
72    ;; Boolean values
73    (GL_FALSE                           . #x0)
74    (GL_TRUE                            . #x1)
75
76    ;; Data types
77    (GL_BYTE                            . #x1400)
78    (GL_UNSIGNED_BYTE                   . #x1401)
79    (GL_SHORT                           . #x1402)
80    (GL_UNSIGNED_SHORT                  . #x1403)
81    (GL_INT                             . #x1404)
82    (GL_UNSIGNED_INT                    . #x1405)
83    (GL_FLOAT                           . #x1406)
84    (GL_DOUBLE                          . #x140A)
85    (GL_2_BYTES                         . #x1407)
86    (GL_3_BYTES                         . #x1408)
87    (GL_4_BYTES                         . #x1409)
88
89    ;; Primitives
90    (GL_POINTS                          . #x0000)
91    (GL_LINES                           . #x0001)
92    (GL_LINE_LOOP                       . #x0002)
93    (GL_LINE_STRIP                      . #x0003)
94    (GL_TRIANGLES                       . #x0004)
95    (GL_TRIANGLE_STRIP                  . #x0005)
96    (GL_TRIANGLE_FAN                    . #x0006)
97    (GL_QUADS                           . #x0007)
98    (GL_QUAD_STRIP                      . #x0008)
99    (GL_POLYGON                         . #x0009)
100
101    ;; Vertex Arrays
102    (GL_VERTEX_ARRAY                    . #x8074)
103    (GL_NORMAL_ARRAY                    . #x8075)
104    (GL_COLOR_ARRAY                     . #x8076)
105    (GL_INDEX_ARRAY                     . #x8077)
106    (GL_TEXTURE_COORD_ARRAY             . #x8078)
107    (GL_EDGE_FLAG_ARRAY                 . #x8079)
108    (GL_VERTEX_ARRAY_SIZE               . #x807A)
109    (GL_VERTEX_ARRAY_TYPE               . #x807B)
110    (GL_VERTEX_ARRAY_STRIDE             . #x807C)
111    (GL_NORMAL_ARRAY_TYPE               . #x807E)
112    (GL_NORMAL_ARRAY_STRIDE             . #x807F)
113    (GL_COLOR_ARRAY_SIZE                . #x8081)
114    (GL_COLOR_ARRAY_TYPE                . #x8082)
115    (GL_COLOR_ARRAY_STRIDE              . #x8083)
116    (GL_INDEX_ARRAY_TYPE                . #x8085)
117    (GL_INDEX_ARRAY_STRIDE              . #x8086)
118    (GL_TEXTURE_COORD_ARRAY_SIZE        . #x8088)
119    (GL_TEXTURE_COORD_ARRAY_TYPE        . #x8089)
120    (GL_TEXTURE_COORD_ARRAY_STRIDE      . #x808A)
121    (GL_EDGE_FLAG_ARRAY_STRIDE          . #x808C)
122    (GL_VERTEX_ARRAY_POINTER            . #x808E)
123    (GL_NORMAL_ARRAY_POINTER            . #x808F)
124    (GL_COLOR_ARRAY_POINTER             . #x8090)
125    (GL_INDEX_ARRAY_POINTER             . #x8091)
126    (GL_TEXTURE_COORD_ARRAY_POINTER     . #x8092)
127    (GL_EDGE_FLAG_ARRAY_POINTER         . #x8093)
128    (GL_V2F                             . #x2A20)
129    (GL_V3F                             . #x2A21)
130    (GL_C4UB_V2F                        . #x2A22)
131    (GL_C4UB_V3F                        . #x2A23)
132    (GL_C3F_V3F                         . #x2A24)
133    (GL_N3F_V3F                         . #x2A25)
134    (GL_C4F_N3F_V3F                     . #x2A26)
135    (GL_T2F_V3F                         . #x2A27)
136    (GL_T4F_V4F                         . #x2A28)
137    (GL_T2F_C4UB_V3F                    . #x2A29)
138    (GL_T2F_C3F_V3F                     . #x2A2A)
139    (GL_T2F_N3F_V3F                     . #x2A2B)
140    (GL_T2F_C4F_N3F_V3F                 . #x2A2C)
141    (GL_T4F_C4F_N3F_V4F                 . #x2A2D)
142
143    ;; Matrix Mode
144    (GL_MATRIX_MODE                     . #x0BA0)
145    (GL_MODELVIEW                       . #x1700)
146    (GL_PROJECTION                      . #x1701)
147    (GL_TEXTURE                         . #x1702)
148
149    ;; Points
150    (GL_POINT_SMOOTH                    . #x0B10)
151    (GL_POINT_SIZE                      . #x0B11)
152    (GL_POINT_SIZE_GRANULARITY          . #x0B13)
153    (GL_POINT_SIZE_RANGE                . #x0B12)
154
155    ;; Lines
156    (GL_LINE_SMOOTH                     . #x0B20)
157    (GL_LINE_STIPPLE                    . #x0B24)
158    (GL_LINE_STIPPLE_PATTERN            . #x0B25)
159    (GL_LINE_STIPPLE_REPEAT             . #x0B26)
160    (GL_LINE_WIDTH                      . #x0B21)
161    (GL_LINE_WIDTH_GRANULARITY          . #x0B23)
162    (GL_LINE_WIDTH_RANGE                . #x0B22)
163
164    ;; Polygons
165    (GL_POINT                           . #x1B00)
166    (GL_LINE                            . #x1B01)
167    (GL_FILL                            . #x1B02)
168    (GL_CW                              . #x0900)
169    (GL_CCW                             . #x0901)
170    (GL_FRONT                           . #x0404)
171    (GL_BACK                            . #x0405)
172    (GL_POLYGON_MODE                    . #x0B40)
173    (GL_POLYGON_SMOOTH                  . #x0B41)
174    (GL_POLYGON_STIPPLE                 . #x0B42)
175    (GL_EDGE_FLAG                       . #x0B43)
176    (GL_CULL_FACE                       . #x0B44)
177    (GL_CULL_FACE_MODE                  . #x0B45)
178    (GL_FRONT_FACE                      . #x0B46)
179    (GL_POLYGON_OFFSET_FACTOR           . #x8038)
180    (GL_POLYGON_OFFSET_UNITS            . #x2A00)
181    (GL_POLYGON_OFFSET_POINT            . #x2A01)
182    (GL_POLYGON_OFFSET_LINE             . #x2A02)
183    (GL_POLYGON_OFFSET_FILL             . #x8037)
184
185    ;; Display Lists
186    (GL_COMPILE                         . #x1300)
187    (GL_COMPILE_AND_EXECUTE             . #x1301)
188    (GL_LIST_BASE                       . #x0B32)
189    (GL_LIST_INDEX                      . #x0B33)
190    (GL_LIST_MODE                       . #x0B30)
191
192    ;; Depth buffer
193    (GL_NEVER                           . #x0200)
194    (GL_LESS                            . #x0201)
195    (GL_EQUAL                           . #x0202)
196    (GL_LEQUAL                          . #x0203)
197    (GL_GREATER                         . #x0204)
198    (GL_NOTEQUAL                        . #x0205)
199    (GL_GEQUAL                          . #x0206)
200    (GL_ALWAYS                          . #x0207)
201    (GL_DEPTH_TEST                      . #x0B71)
202    (GL_DEPTH_BITS                      . #x0D56)
203    (GL_DEPTH_CLEAR_VALUE               . #x0B73)
204    (GL_DEPTH_FUNC                      . #x0B74)
205    (GL_DEPTH_RANGE                     . #x0B70)
206    (GL_DEPTH_WRITEMASK                 . #x0B72)
207    (GL_DEPTH_COMPONENT                 . #x1902)
208
209    ;; Lighting
210    (GL_LIGHTING                        . #x0B50)
211    (GL_LIGHT0                          . #x4000)
212    (GL_LIGHT1                          . #x4001)
213    (GL_LIGHT2                          . #x4002)
214    (GL_LIGHT3                          . #x4003)
215    (GL_LIGHT4                          . #x4004)
216    (GL_LIGHT5                          . #x4005)
217    (GL_LIGHT6                          . #x4006)
218    (GL_LIGHT7                          . #x4007)
219    (GL_SPOT_EXPONENT                   . #x1205)
220    (GL_SPOT_CUTOFF                     . #x1206)
221    (GL_CONSTANT_ATTENUATION            . #x1207)
222    (GL_LINEAR_ATTENUATION              . #x1208)
223    (GL_QUADRATIC_ATTENUATION           . #x1209)
224    (GL_AMBIENT                         . #x1200)
225    (GL_DIFFUSE                         . #x1201)
226    (GL_SPECULAR                        . #x1202)
227    (GL_SHININESS                       . #x1601)
228    (GL_EMISSION                        . #x1600)
229    (GL_POSITION                        . #x1203)
230    (GL_SPOT_DIRECTION                  . #x1204)
231    (GL_AMBIENT_AND_DIFFUSE             . #x1602)
232    (GL_COLOR_INDEXES                   . #x1603)
233    (GL_LIGHT_MODEL_TWO_SIDE            . #x0B52)
234    (GL_LIGHT_MODEL_LOCAL_VIEWER        . #x0B51)
235    (GL_LIGHT_MODEL_AMBIENT             . #x0B53)
236    (GL_FRONT_AND_BACK                  . #x0408)
237    (GL_SHADE_MODEL                     . #x0B54)
238    (GL_FLAT                            . #x1D00)
239    (GL_SMOOTH                          . #x1D01)
240    (GL_COLOR_MATERIAL                  . #x0B57)
241    (GL_COLOR_MATERIAL_FACE             . #x0B55)
242    (GL_COLOR_MATERIAL_PARAMETER        . #x0B56)
243    (GL_NORMALIZE                       . #x0BA1)
244
245    ;; User clipping planes
246    (GL_CLIP_PLANE0                     . #x3000)
247    (GL_CLIP_PLANE1                     . #x3001)
248    (GL_CLIP_PLANE2                     . #x3002)
249    (GL_CLIP_PLANE3                     . #x3003)
250    (GL_CLIP_PLANE4                     . #x3004)
251    (GL_CLIP_PLANE5                     . #x3005)
252
253    ;; Accumulation buffer
254    (GL_ACCUM_RED_BITS                  . #x0D58)
255    (GL_ACCUM_GREEN_BITS                . #x0D59)
256    (GL_ACCUM_BLUE_BITS                 . #x0D5A)
257    (GL_ACCUM_ALPHA_BITS                . #x0D5B)
258    (GL_ACCUM_CLEAR_VALUE               . #x0B80)
259    (GL_ACCUM                           . #x0100)
260    (GL_ADD                             . #x0104)
261    (GL_LOAD                            . #x0101)
262    (GL_MULT                            . #x0103)
263    (GL_RETURN                          . #x0102)
264
265    ;; Alpha testing
266    (GL_ALPHA_TEST                      . #x0BC0)
267    (GL_ALPHA_TEST_REF                  . #x0BC2)
268    (GL_ALPHA_TEST_FUNC                 . #x0BC1)
269
270    ;; Blending
271    (GL_BLEND                           . #x0BE2)
272    (GL_BLEND_SRC                       . #x0BE1)
273    (GL_BLEND_DST                       . #x0BE0)
274    (GL_ZERO                            . #x0)
275    (GL_ONE                             . #x1)
276    (GL_SRC_COLOR                       . #x0300)
277    (GL_ONE_MINUS_SRC_COLOR             . #x0301)
278    (GL_SRC_ALPHA                       . #x0302)
279    (GL_ONE_MINUS_SRC_ALPHA             . #x0303)
280    (GL_DST_ALPHA                       . #x0304)
281    (GL_ONE_MINUS_DST_ALPHA             . #x0305)
282    (GL_DST_COLOR                       . #x0306)
283    (GL_ONE_MINUS_DST_COLOR             . #x0307)
284    (GL_SRC_ALPHA_SATURATE              . #x0308)
285    (GL_CONSTANT_COLOR                  . #x8001)
286    (GL_ONE_MINUS_CONSTANT_COLOR        . #x8002)
287    (GL_CONSTANT_ALPHA                  . #x8003)
288    (GL_ONE_MINUS_CONSTANT_ALPHA        . #x8004)
289
290    ;; Render Mode
291    (GL_FEEDBACK                        . #x1C01)
292    (GL_RENDER                          . #x1C00)
293    (GL_SELECT                          . #x1C02)
294
295    ;; Feedback
296    (GL_2D                              . #x0600)
297    (GL_3D                              . #x0601)
298    (GL_3D_COLOR                        . #x0602)
299    (GL_3D_COLOR_TEXTURE                . #x0603)
300    (GL_4D_COLOR_TEXTURE                . #x0604)
301    (GL_POINT_TOKEN                     . #x0701)
302    (GL_LINE_TOKEN                      . #x0702)
303    (GL_LINE_RESET_TOKEN                . #x0707)
304    (GL_POLYGON_TOKEN                   . #x0703)
305    (GL_BITMAP_TOKEN                    . #x0704)
306    (GL_DRAW_PIXEL_TOKEN                . #x0705)
307    (GL_COPY_PIXEL_TOKEN                . #x0706)
308    (GL_PASS_THROUGH_TOKEN              . #x0700)
309    (GL_FEEDBACK_BUFFER_POINTER         . #x0DF0)
310    (GL_FEEDBACK_BUFFER_SIZE            . #x0DF1)
311    (GL_FEEDBACK_BUFFER_TYPE            . #x0DF2)
312
313    ;; Selection
314    (GL_SELECTION_BUFFER_POINTER        . #x0DF3)
315    (GL_SELECTION_BUFFER_SIZE           . #x0DF4)
316
317    ;; Fog
318    (GL_FOG                             . #x0B60)
319    (GL_FOG_MODE                        . #x0B65)
320    (GL_FOG_DENSITY                     . #x0B62)
321    (GL_FOG_COLOR                       . #x0B66)
322    (GL_FOG_INDEX                       . #x0B61)
323    (GL_FOG_START                       . #x0B63)
324    (GL_FOG_END                         . #x0B64)
325    (GL_LINEAR                          . #x2601)
326    (GL_EXP                             . #x0800)
327    (GL_EXP2                            . #x0801)
328
329    ;; Logic Ops
330    (GL_LOGIC_OP                        . #x0BF1)
331    (GL_INDEX_LOGIC_OP                  . #x0BF1)
332    (GL_COLOR_LOGIC_OP                  . #x0BF2)
333    (GL_LOGIC_OP_MODE                   . #x0BF0)
334    (GL_CLEAR                           . #x1500)
335    (GL_SET                             . #x150F)
336    (GL_COPY                            . #x1503)
337    (GL_COPY_INVERTED                   . #x150C)
338    (GL_NOOP                            . #x1505)
339    (GL_INVERT                          . #x150A)
340    (GL_AND                             . #x1501)
341    (GL_NAND                            . #x150E)
342    (GL_OR                              . #x1507)
343    (GL_NOR                             . #x1508)
344    (GL_XOR                             . #x1506)
345    (GL_EQUIV                           . #x1509)
346    (GL_AND_REVERSE                     . #x1502)
347    (GL_AND_INVERTED                    . #x1504)
348    (GL_OR_REVERSE                      . #x150B)
349    (GL_OR_INVERTED                     . #x150D)
350
351    ;; Stencil
352    (GL_STENCIL_TEST                    . #x0B90)
353    (GL_STENCIL_WRITEMASK               . #x0B98)
354    (GL_STENCIL_BITS                    . #x0D57)
355    (GL_STENCIL_FUNC                    . #x0B92)
356    (GL_STENCIL_VALUE_MASK              . #x0B93)
357    (GL_STENCIL_REF                     . #x0B97)
358    (GL_STENCIL_FAIL                    . #x0B94)
359    (GL_STENCIL_PASS_DEPTH_PASS         . #x0B96)
360    (GL_STENCIL_PASS_DEPTH_FAIL         . #x0B95)
361    (GL_STENCIL_CLEAR_VALUE             . #x0B91)
362    (GL_STENCIL_INDEX                   . #x1901)
363    (GL_KEEP                            . #x1E00)
364    (GL_REPLACE                         . #x1E01)
365    (GL_INCR                            . #x1E02)
366    (GL_DECR                            . #x1E03)
367
368    ;; Buffers, Pixel Drawing/Reading
369    (GL_NONE                            . #x0)
370    (GL_LEFT                            . #x0406)
371    (GL_RIGHT                           . #x0407)
372    ;;GL_FRONT                          . #x0404
373    ;;GL_BACK                           . #x0405
374    ;;GL_FRONT_AND_BACK                 . #x0408
375    (GL_FRONT_LEFT                      . #x0400)
376    (GL_FRONT_RIGHT                     . #x0401)
377    (GL_BACK_LEFT                       . #x0402)
378    (GL_BACK_RIGHT                      . #x0403)
379    (GL_AUX0                            . #x0409)
380    (GL_AUX1                            . #x040A)
381    (GL_AUX2                            . #x040B)
382    (GL_AUX3                            . #x040C)
383    (GL_COLOR_INDEX                     . #x1900)
384    (GL_RED                             . #x1903)
385    (GL_GREEN                           . #x1904)
386    (GL_BLUE                            . #x1905)
387    (GL_ALPHA                           . #x1906)
388    (GL_LUMINANCE                       . #x1909)
389    (GL_LUMINANCE_ALPHA                 . #x190A)
390    (GL_ALPHA_BITS                      . #x0D55)
391    (GL_RED_BITS                        . #x0D52)
392    (GL_GREEN_BITS                      . #x0D53)
393    (GL_BLUE_BITS                       . #x0D54)
394    (GL_INDEX_BITS                      . #x0D51)
395    (GL_SUBPIXEL_BITS                   . #x0D50)
396    (GL_AUX_BUFFERS                     . #x0C00)
397    (GL_READ_BUFFER                     . #x0C02)
398    (GL_DRAW_BUFFER                     . #x0C01)
399    (GL_DOUBLEBUFFER                    . #x0C32)
400    (GL_STEREO                          . #x0C33)
401    (GL_BITMAP                          . #x1A00)
402    (GL_COLOR                           . #x1800)
403    (GL_DEPTH                           . #x1801)
404    (GL_STENCIL                         . #x1802)
405    (GL_DITHER                          . #x0BD0)
406    (GL_RGB                             . #x1907)
407    (GL_RGBA                            . #x1908)
408
409    ;; Implementation limits
410    (GL_MAX_LIST_NESTING                . #x0B31)
411    (GL_MAX_ATTRIB_STACK_DEPTH          . #x0D35)
412    (GL_MAX_MODELVIEW_STACK_DEPTH       . #x0D36)
413    (GL_MAX_NAME_STACK_DEPTH            . #x0D37)
414    (GL_MAX_PROJECTION_STACK_DEPTH      . #x0D38)
415    (GL_MAX_TEXTURE_STACK_DEPTH         . #x0D39)
416    (GL_MAX_EVAL_ORDER                  . #x0D30)
417    (GL_MAX_LIGHTS                      . #x0D31)
418    (GL_MAX_CLIP_PLANES                 . #x0D32)
419    (GL_MAX_TEXTURE_SIZE                . #x0D33)
420    (GL_MAX_PIXEL_MAP_TABLE             . #x0D34)
421    (GL_MAX_VIEWPORT_DIMS               . #x0D3A)
422    (GL_MAX_CLIENT_ATTRIB_STACK_DEPTH   . #x0D3B)
423
424    ;; Gets
425    (GL_ATTRIB_STACK_DEPTH              . #x0BB0)
426    (GL_CLIENT_ATTRIB_STACK_DEPTH       . #x0BB1)
427    (GL_COLOR_CLEAR_VALUE               . #x0C22)
428    (GL_COLOR_WRITEMASK                 . #x0C23)
429    (GL_CURRENT_INDEX                   . #x0B01)
430    (GL_CURRENT_COLOR                   . #x0B00)
431    (GL_CURRENT_NORMAL                  . #x0B02)
432    (GL_CURRENT_RASTER_COLOR            . #x0B04)
433    (GL_CURRENT_RASTER_DISTANCE         . #x0B09)
434    (GL_CURRENT_RASTER_INDEX            . #x0B05)
435    (GL_CURRENT_RASTER_POSITION         . #x0B07)
436    (GL_CURRENT_RASTER_TEXTURE_COORDS   . #x0B06)
437    (GL_CURRENT_RASTER_POSITION_VALID   . #x0B08)
438    (GL_CURRENT_TEXTURE_COORDS          . #x0B03)
439    (GL_INDEX_CLEAR_VALUE               . #x0C20)
440    (GL_INDEX_MODE                      . #x0C30)
441    (GL_INDEX_WRITEMASK                 . #x0C21)
442    (GL_MODELVIEW_MATRIX                . #x0BA6)
443    (GL_MODELVIEW_STACK_DEPTH           . #x0BA3)
444    (GL_NAME_STACK_DEPTH                . #x0D70)
445    (GL_PROJECTION_MATRIX               . #x0BA7)
446    (GL_PROJECTION_STACK_DEPTH          . #x0BA4)
447    (GL_RENDER_MODE                     . #x0C40)
448    (GL_RGBA_MODE                       . #x0C31)
449    (GL_TEXTURE_MATRIX                  . #x0BA8)
450    (GL_TEXTURE_STACK_DEPTH             . #x0BA5)
451    (GL_VIEWPORT                        . #x0BA2)
452
453    ;; Evaluators
454    (GL_AUTO_NORMAL                     . #x0D80)
455    (GL_MAP1_COLOR_4                    . #x0D90)
456    (GL_MAP1_GRID_DOMAIN                . #x0DD0)
457    (GL_MAP1_GRID_SEGMENTS              . #x0DD1)
458    (GL_MAP1_INDEX                      . #x0D91)
459    (GL_MAP1_NORMAL                     . #x0D92)
460    (GL_MAP1_TEXTURE_COORD_1            . #x0D93)
461    (GL_MAP1_TEXTURE_COORD_2            . #x0D94)
462    (GL_MAP1_TEXTURE_COORD_3            . #x0D95)
463    (GL_MAP1_TEXTURE_COORD_4            . #x0D96)
464    (GL_MAP1_VERTEX_3                   . #x0D97)
465    (GL_MAP1_VERTEX_4                   . #x0D98)
466    (GL_MAP2_COLOR_4                    . #x0DB0)
467    (GL_MAP2_GRID_DOMAIN                . #x0DD2)
468    (GL_MAP2_GRID_SEGMENTS              . #x0DD3)
469    (GL_MAP2_INDEX                      . #x0DB1)
470    (GL_MAP2_NORMAL                     . #x0DB2)
471    (GL_MAP2_TEXTURE_COORD_1            . #x0DB3)
472    (GL_MAP2_TEXTURE_COORD_2            . #x0DB4)
473    (GL_MAP2_TEXTURE_COORD_3            . #x0DB5)
474    (GL_MAP2_TEXTURE_COORD_4            . #x0DB6)
475    (GL_MAP2_VERTEX_3                   . #x0DB7)
476    (GL_MAP2_VERTEX_4                   . #x0DB8)
477    (GL_COEFF                           . #x0A00)
478    (GL_DOMAIN                          . #x0A02)
479    (GL_ORDER                           . #x0A01)
480
481    ;; Hints
482    (GL_FOG_HINT                        . #x0C54)
483    (GL_LINE_SMOOTH_HINT                . #x0C52)
484    (GL_PERSPECTIVE_CORRECTION_HINT     . #x0C50)
485    (GL_POINT_SMOOTH_HINT               . #x0C51)
486    (GL_POLYGON_SMOOTH_HINT             . #x0C53)
487    (GL_DONT_CARE                       . #x1100)
488    (GL_FASTEST                         . #x1101)
489    (GL_NICEST                          . #x1102)
490
491    ;; Scissor box
492    (GL_SCISSOR_TEST                    . #x0C11)
493    (GL_SCISSOR_BOX                     . #x0C10)
494
495    ;; Pixel Mode / Transfer
496    (GL_MAP_COLOR                       . #x0D10)
497    (GL_MAP_STENCIL                     . #x0D11)
498    (GL_INDEX_SHIFT                     . #x0D12)
499    (GL_INDEX_OFFSET                    . #x0D13)
500    (GL_RED_SCALE                       . #x0D14)
501    (GL_RED_BIAS                        . #x0D15)
502    (GL_GREEN_SCALE                     . #x0D18)
503    (GL_GREEN_BIAS                      . #x0D19)
504    (GL_BLUE_SCALE                      . #x0D1A)
505    (GL_BLUE_BIAS                       . #x0D1B)
506    (GL_ALPHA_SCALE                     . #x0D1C)
507    (GL_ALPHA_BIAS                      . #x0D1D)
508    (GL_DEPTH_SCALE                     . #x0D1E)
509    (GL_DEPTH_BIAS                      . #x0D1F)
510    (GL_PIXEL_MAP_S_TO_S_SIZE           . #x0CB1)
511    (GL_PIXEL_MAP_I_TO_I_SIZE           . #x0CB0)
512    (GL_PIXEL_MAP_I_TO_R_SIZE           . #x0CB2)
513    (GL_PIXEL_MAP_I_TO_G_SIZE           . #x0CB3)
514    (GL_PIXEL_MAP_I_TO_B_SIZE           . #x0CB4)
515    (GL_PIXEL_MAP_I_TO_A_SIZE           . #x0CB5)
516    (GL_PIXEL_MAP_R_TO_R_SIZE           . #x0CB6)
517    (GL_PIXEL_MAP_G_TO_G_SIZE           . #x0CB7)
518    (GL_PIXEL_MAP_B_TO_B_SIZE           . #x0CB8)
519    (GL_PIXEL_MAP_A_TO_A_SIZE           . #x0CB9)
520    (GL_PIXEL_MAP_S_TO_S                . #x0C71)
521    (GL_PIXEL_MAP_I_TO_I                . #x0C70)
522    (GL_PIXEL_MAP_I_TO_R                . #x0C72)
523    (GL_PIXEL_MAP_I_TO_G                . #x0C73)
524    (GL_PIXEL_MAP_I_TO_B                . #x0C74)
525    (GL_PIXEL_MAP_I_TO_A                . #x0C75)
526    (GL_PIXEL_MAP_R_TO_R                . #x0C76)
527    (GL_PIXEL_MAP_G_TO_G                . #x0C77)
528    (GL_PIXEL_MAP_B_TO_B                . #x0C78)
529    (GL_PIXEL_MAP_A_TO_A                . #x0C79)
530    (GL_PACK_ALIGNMENT                  . #x0D05)
531    (GL_PACK_LSB_FIRST                  . #x0D01)
532    (GL_PACK_ROW_LENGTH                 . #x0D02)
533    (GL_PACK_SKIP_PIXELS                . #x0D04)
534    (GL_PACK_SKIP_ROWS                  . #x0D03)
535    (GL_PACK_SWAP_BYTES                 . #x0D00)
536    (GL_UNPACK_ALIGNMENT                . #x0CF5)
537    (GL_UNPACK_LSB_FIRST                . #x0CF1)
538    (GL_UNPACK_ROW_LENGTH               . #x0CF2)
539    (GL_UNPACK_SKIP_PIXELS              . #x0CF4)
540    (GL_UNPACK_SKIP_ROWS                . #x0CF3)
541    (GL_UNPACK_SWAP_BYTES               . #x0CF0)
542    (GL_ZOOM_X                          . #x0D16)
543    (GL_ZOOM_Y                          . #x0D17)
544
545    ;; Texture mapping
546    (GL_TEXTURE_ENV                     . #x2300)
547    (GL_TEXTURE_ENV_MODE                . #x2200)
548    (GL_TEXTURE_1D                      . #x0DE0)
549    (GL_TEXTURE_2D                      . #x0DE1)
550    (GL_TEXTURE_WRAP_S                  . #x2802)
551    (GL_TEXTURE_WRAP_T                  . #x2803)
552    (GL_TEXTURE_MAG_FILTER              . #x2800)
553    (GL_TEXTURE_MIN_FILTER              . #x2801)
554    (GL_TEXTURE_ENV_COLOR               . #x2201)
555    (GL_TEXTURE_GEN_S                   . #x0C60)
556    (GL_TEXTURE_GEN_T                   . #x0C61)
557    (GL_TEXTURE_GEN_MODE                . #x2500)
558    (GL_TEXTURE_BORDER_COLOR            . #x1004)
559    (GL_TEXTURE_WIDTH                   . #x1000)
560    (GL_TEXTURE_HEIGHT                  . #x1001)
561    (GL_TEXTURE_BORDER                  . #x1005)
562    (GL_TEXTURE_COMPONENTS              . #x1003)
563    (GL_TEXTURE_RED_SIZE                . #x805C)
564    (GL_TEXTURE_GREEN_SIZE              . #x805D)
565    (GL_TEXTURE_BLUE_SIZE               . #x805E)
566    (GL_TEXTURE_ALPHA_SIZE              . #x805F)
567    (GL_TEXTURE_LUMINANCE_SIZE          . #x8060)
568    (GL_TEXTURE_INTENSITY_SIZE          . #x8061)
569    (GL_NEAREST_MIPMAP_NEAREST          . #x2700)
570    (GL_NEAREST_MIPMAP_LINEAR           . #x2702)
571    (GL_LINEAR_MIPMAP_NEAREST           . #x2701)
572    (GL_LINEAR_MIPMAP_LINEAR            . #x2703)
573    (GL_OBJECT_LINEAR                   . #x2401)
574    (GL_OBJECT_PLANE                    . #x2501)
575    (GL_EYE_LINEAR                      . #x2400)
576    (GL_EYE_PLANE                       . #x2502)
577    (GL_SPHERE_MAP                      . #x2402)
578    (GL_DECAL                           . #x2101)
579    (GL_MODULATE                        . #x2100)
580    (GL_NEAREST                         . #x2600)
581    (GL_REPEAT                          . #x2901)
582    (GL_CLAMP                           . #x2900)
583    (GL_S                               . #x2000)
584    (GL_T                               . #x2001)
585    (GL_R                               . #x2002)
586    (GL_Q                               . #x2003)
587    (GL_TEXTURE_GEN_R                   . #x0C62)
588    (GL_TEXTURE_GEN_Q                   . #x0C63)
589
590    ;; Utility
591    (GL_VENDOR                          . #x1F00)
592    (GL_RENDERER                        . #x1F01)
593    (GL_VERSION                         . #x1F02)
594    (GL_EXTENSIONS                      . #x1F03)
595
596    ;; Errors
597    (GL_NO_ERROR                        . #x0)
598    (GL_INVALID_VALUE                   . #x0501)
599    (GL_INVALID_ENUM                    . #x0500)
600    (GL_INVALID_OPERATION               . #x0502)
601    (GL_STACK_OVERFLOW                  . #x0503)
602    (GL_STACK_UNDERFLOW                 . #x0504)
603    (GL_OUT_OF_MEMORY                   . #x0505)
604
605    ;; glPush/PopAttrib bits
606    (GL_CURRENT_BIT                     . #x00000001)
607    (GL_POINT_BIT                       . #x00000002)
608    (GL_LINE_BIT                        . #x00000004)
609    (GL_POLYGON_BIT                     . #x00000008)
610    (GL_POLYGON_STIPPLE_BIT             . #x00000010)
611    (GL_PIXEL_MODE_BIT                  . #x00000020)
612    (GL_LIGHTING_BIT                    . #x00000040)
613    (GL_FOG_BIT                         . #x00000080)
614    (GL_DEPTH_BUFFER_BIT                . #x00000100)
615    (GL_ACCUM_BUFFER_BIT                . #x00000200)
616    (GL_STENCIL_BUFFER_BIT              . #x00000400)
617    (GL_VIEWPORT_BIT                    . #x00000800)
618    (GL_TRANSFORM_BIT                   . #x00001000)
619    (GL_ENABLE_BIT                      . #x00002000)
620    (GL_COLOR_BUFFER_BIT                . #x00004000)
621    (GL_HINT_BIT                        . #x00008000)
622    (GL_EVAL_BIT                        . #x00010000)
623    (GL_LIST_BIT                        . #x00020000)
624    (GL_TEXTURE_BIT                     . #x00040000)
625    (GL_SCISSOR_BIT                     . #x00080000)
626    (GL_ALL_ATTRIB_BITS                 . #x000FFFFF)
627
628
629    ;; OpenGL 1.1
630    (GL_PROXY_TEXTURE_1D                . #x8063)
631    (GL_PROXY_TEXTURE_2D                . #x8064)
632    (GL_TEXTURE_PRIORITY                . #x8066)
633    (GL_TEXTURE_RESIDENT                . #x8067)
634    (GL_TEXTURE_BINDING_1D              . #x8068)
635    (GL_TEXTURE_BINDING_2D              . #x8069)
636    (GL_TEXTURE_INTERNAL_FORMAT         . #x1003)
637    (GL_ALPHA4                          . #x803B)
638    (GL_ALPHA8                          . #x803C)
639    (GL_ALPHA12                         . #x803D)
640    (GL_ALPHA16                         . #x803E)
641    (GL_LUMINANCE4                      . #x803F)
642    (GL_LUMINANCE8                      . #x8040)
643    (GL_LUMINANCE12                     . #x8041)
644    (GL_LUMINANCE16                     . #x8042)
645    (GL_LUMINANCE4_ALPHA4               . #x8043)
646    (GL_LUMINANCE6_ALPHA2               . #x8044)
647    (GL_LUMINANCE8_ALPHA8               . #x8045)
648    (GL_LUMINANCE12_ALPHA4              . #x8046)
649    (GL_LUMINANCE12_ALPHA12             . #x8047)
650    (GL_LUMINANCE16_ALPHA16             . #x8048)
651    (GL_INTENSITY                       . #x8049)
652    (GL_INTENSITY4                      . #x804A)
653    (GL_INTENSITY8                      . #x804B)
654    (GL_INTENSITY12                     . #x804C)
655    (GL_INTENSITY16                     . #x804D)
656    (GL_R3_G3_B2                        . #x2A10)
657    (GL_RGB4                            . #x804F)
658    (GL_RGB5                            . #x8050)
659    (GL_RGB8                            . #x8051)
660    (GL_RGB10                           . #x8052)
661    (GL_RGB12                           . #x8053)
662    (GL_RGB16                           . #x8054)
663    (GL_RGBA2                           . #x8055)
664    (GL_RGBA4                           . #x8056)
665    (GL_RGB5_A1                         . #x8057)
666    (GL_RGBA8                           . #x8058)
667    (GL_RGB10_A2                        . #x8059)
668    (GL_RGBA12                          . #x805A)
669    (GL_RGBA16                          . #x805B)
670    (GL_CLIENT_PIXEL_STORE_BIT          . #x00000001)
671    (GL_CLIENT_VERTEX_ARRAY_BIT         . #x00000002)
672    (GL_ALL_CLIENT_ATTRIB_BITS          . #xFFFFFFFF)
673    (GL_CLIENT_ALL_ATTRIB_BITS          . #xFFFFFFFF)
674    ))
675
676(define (scan)
677  (let loop ([x '()] ;; extensions name
678             [c (reverse *gl-syms*)] ;; constants [(name . value)]
679             [p '()]) ;; entry points [(name PFNNAMEPROC . typedef)]
680    (rxmatch-case (read-line)
681      [test eof-object?
682            (values (reverse x) (reverse c) (reverse p))]
683      [#/^#ifndef\s+(GL_\w+)/ (#f extname)
684       (let1 en (string->symbol extname)
685         (if (memq en x)
686           (loop x c p)
687           (loop (cons (string->symbol extname) x) c p)))]
688      [#/^#define\s+(GL_\w+)\s+(?:0x([\da-fA-F]+)|(\d+)|(\w+))/
689       (#f cname xval dval ref)
690       (let1 cn (string->symbol cname)
691         (if (or (assq cn c) (memq cn x))
692           (loop x c p)
693           (let1 const (cons cn
694                             (cond [xval (string->number xval 16)]
695                                   [dval (string->number dval)]
696                                   [else (string->symbol ref)]))
697             (loop x (cons const c) p))))]
698      [#/^(?:extern|GLAPI)\b.*?\b(?:APIENTRY\s+)?(gl\w+)/ (#f fname)
699       (loop x c
700             (cons (list fname (format "PFN~aPROC" (string-upcase fname)))
701                   p))]
702      [#/^typedef.*(PFN.*?PROC\b).*/ (typedef name)
703       (if-let1 apientry (find (^e (string=? name (cadr e))) p)
704         (set-cdr! (cdr apientry) typedef))
705       (loop x c p)]
706      [else (loop x c p)])))
707
708(define (emit extensions constants entry-points)
709  (print ";; This file should reflect the newest OpenGL extension ABI")
710  (print ";; You can regenarate this by feeding glext.h to extract-abi.scm")
711  (print ";; To obtain the newest glext.h, see")
712  (print ";;   http://oss.sgi.com/projects/ogl-sample/ABI/")
713  (print)
714  (print ";; Extensions")
715  (dolist (e extensions)
716    (format #t "(define-extension-name ~a)\n" e))
717  (print)
718  (print ";; Constants")
719  (dolist (c constants)
720    (let loop ((val (cdr c)))
721      (if (number? val)
722        (format #t "(define-constant ~a #x~4,'0x)\n" (car c) val)
723        (let1 p (assq val constants)
724          (if p
725            (loop (cdr p))
726            (error "huh? " val))))))
727  (print)
728  (print ";; API entry points")
729  (dolist (e entry-points)
730    (format #t "(define-entry-point ~a ~a ~s)\n" (car e) (cadr e) (cddr e)))
731  (print)
732  )
733
734(define (main args)
735  (call-with-values scan emit)
736  0)
737
738
739
740
741