178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul#!/usr/bin/python2 278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# -*- Mode: Python; py-indent-offset: 8 -*- 378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# (C) Copyright Zack Rusin 2005 578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# All Rights Reserved. 678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# 778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# Permission is hereby granted, free of charge, to any person obtaining a 878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# copy of this software and associated documentation files (the "Software"), 978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# to deal in the Software without restriction, including without limitation 1078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# on the rights to use, copy, modify, merge, publish, distribute, sub 1178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# license, and/or sell copies of the Software, and to permit persons to whom 1278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# the Software is furnished to do so, subject to the following conditions: 1378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# 1478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# The above copyright notice and this permission notice (including the next 1578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# paragraph) shall be included in all copies or substantial portions of the 1678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# Software. 1778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# 1878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 2078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 2178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# IBM AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 2478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# IN THE SOFTWARE. 2578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# 2678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# Authors: 2778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul# Zack Rusin <zack@kde.org> 2878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 2978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulimport license 3078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulimport gl_XML 3178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulimport sys, getopt 3278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 3366a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanickclass PrintGlEnums(gl_XML.gl_print_base): 3478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 3578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul def __init__(self): 3666a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick gl_XML.gl_print_base.__init__(self) 3770dbbbf89af4c1d6d9b52cbbb79ee7f9ad654592Ian Romanick 3870dbbbf89af4c1d6d9b52cbbb79ee7f9ad654592Ian Romanick self.name = "gl_enums.py (from Mesa)" 3978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul self.license = license.bsd_license_template % ( \ 4078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul"""Copyright (C) 1999-2005 Brian Paul All Rights Reserved.""", "BRIAN PAUL") 41f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick self.enum_table = {} 4278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 4378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 4478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul def printRealHeader(self): 455b426288c2dbc42ef44ea13fe37afa77223107bbChia-I Wu print '#include "main/glheader.h"' 465b426288c2dbc42ef44ea13fe37afa77223107bbChia-I Wu print '#include "main/mfeatures.h"' 475b426288c2dbc42ef44ea13fe37afa77223107bbChia-I Wu print '#include "main/enums.h"' 485b426288c2dbc42ef44ea13fe37afa77223107bbChia-I Wu print '#include "main/imports.h"' 49887d2b647bae7f6536bab08649bad9f799995d08Brian Paul print '#include "main/mtypes.h"' 5078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print '' 5178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print 'typedef struct {' 52f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' size_t offset;' 5378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print ' int n;' 5478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print '} enum_elt;' 5578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print '' 5678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul return 5778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 5866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick def print_code(self): 5978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print """ 6078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paultypedef int (*cfunc)(const void *, const void *); 6178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 62f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick/** 63f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * Compare a key name to an element in the \c all_enums array. 64f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * 65f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \c bsearch always passes the key as the first parameter and the pointer 66f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * to the array element as the second parameter. We can elimiate some 67f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * extra work by taking advantage of that fact. 68f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * 69f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \param a Pointer to the desired enum name. 70f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \param b Pointer to an element of the \c all_enums array. 7178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul */ 72f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanickstatic int compar_name( const char *a, const enum_elt *b ) 7378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul{ 748d73aa6d1ae6e89bb2cd8f52f5586d569a4b6eebKenneth Graunke return strcmp( a, & enum_string_table[ b->offset ] ); 7578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul} 7678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 77f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick/** 78f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * Compare a key enum value to an element in the \c all_enums array. 79f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * 80f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \c bsearch always passes the key as the first parameter and the pointer 81f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * to the array element as the second parameter. We can elimiate some 82f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * extra work by taking advantage of that fact. 83f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * 84f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \param a Pointer to the desired enum name. 85f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick * \param b Pointer to an index into the \c all_enums array. 86f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick */ 87f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanickstatic int compar_nr( const int *a, const unsigned *b ) 8878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul{ 89f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick return a[0] - all_enums[*b].n; 9078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul} 9178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 9278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 938f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paulstatic char token_tmp[20]; 9478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 958f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paulconst char *_mesa_lookup_enum_by_nr( int nr ) 9678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul{ 97f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick unsigned * i; 9878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 9959cc9739400c3a1654c069586070ff218993cd37Brian Paul i = (unsigned *) _mesa_bsearch(& nr, reduced_enums, 10059cc9739400c3a1654c069586070ff218993cd37Brian Paul Elements(reduced_enums), 10159cc9739400c3a1654c069586070ff218993cd37Brian Paul sizeof(reduced_enums[0]), 10259cc9739400c3a1654c069586070ff218993cd37Brian Paul (cfunc) compar_nr); 10378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 104f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if ( i != NULL ) { 105f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick return & enum_string_table[ all_enums[ *i ].offset ]; 1068f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul } 1078f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul else { 108f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick /* this is not re-entrant safe, no big deal here */ 109672f6cdc19c5f89d85e20dc04bacb5a7905ff334Brian Paul _mesa_snprintf(token_tmp, sizeof(token_tmp) - 1, "0x%x", nr); 110672f6cdc19c5f89d85e20dc04bacb5a7905ff334Brian Paul token_tmp[sizeof(token_tmp) - 1] = '\\0'; 1118f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul return token_tmp; 1128f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul } 11378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul} 11478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 115887d2b647bae7f6536bab08649bad9f799995d08Brian Paul/** 116887d2b647bae7f6536bab08649bad9f799995d08Brian Paul * Primitive names 117887d2b647bae7f6536bab08649bad9f799995d08Brian Paul */ 118887d2b647bae7f6536bab08649bad9f799995d08Brian Paulstatic const char *prim_names[PRIM_UNKNOWN + 1] = { 119887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_POINTS", 120887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_LINES", 121887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_LINE_LOOP", 122887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_LINE_STRIP", 123887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_TRIANGLES", 124887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_TRIANGLE_STRIP", 125887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_TRIANGLE_FAN", 126887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_QUADS", 127887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_QUAD_STRIP", 128887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "GL_POLYGON", 129887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "outside begin/end", 130887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "inside unknown primitive", 131887d2b647bae7f6536bab08649bad9f799995d08Brian Paul "unknown state" 132887d2b647bae7f6536bab08649bad9f799995d08Brian Paul}; 133887d2b647bae7f6536bab08649bad9f799995d08Brian Paul 134887d2b647bae7f6536bab08649bad9f799995d08Brian Paul 135798cd2a98d66a1b841930e121676ae1a8f9fb244Keith Whitwell/* Get the name of an enum given that it is a primitive type. Avoids 136798cd2a98d66a1b841930e121676ae1a8f9fb244Keith Whitwell * GL_FALSE/GL_POINTS ambiguity and others. 137798cd2a98d66a1b841930e121676ae1a8f9fb244Keith Whitwell */ 138887d2b647bae7f6536bab08649bad9f799995d08Brian Paulconst char * 139887d2b647bae7f6536bab08649bad9f799995d08Brian Paul_mesa_lookup_prim_by_nr(GLuint nr) 140798cd2a98d66a1b841930e121676ae1a8f9fb244Keith Whitwell{ 141887d2b647bae7f6536bab08649bad9f799995d08Brian Paul if (nr < Elements(prim_names)) 142887d2b647bae7f6536bab08649bad9f799995d08Brian Paul return prim_names[nr]; 143887d2b647bae7f6536bab08649bad9f799995d08Brian Paul else 144887d2b647bae7f6536bab08649bad9f799995d08Brian Paul return "invalid mode"; 145798cd2a98d66a1b841930e121676ae1a8f9fb244Keith Whitwell} 146798cd2a98d66a1b841930e121676ae1a8f9fb244Keith Whitwell 147798cd2a98d66a1b841930e121676ae1a8f9fb244Keith Whitwell 1488f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paulint _mesa_lookup_enum_by_name( const char *symbol ) 14978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul{ 150f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick enum_elt * f = NULL; 15178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 152f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if ( symbol != NULL ) { 15359cc9739400c3a1654c069586070ff218993cd37Brian Paul f = (enum_elt *) _mesa_bsearch(symbol, all_enums, 15459cc9739400c3a1654c069586070ff218993cd37Brian Paul Elements(all_enums), 15559cc9739400c3a1654c069586070ff218993cd37Brian Paul sizeof( enum_elt ), 15659cc9739400c3a1654c069586070ff218993cd37Brian Paul (cfunc) compar_name); 157f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick } 15878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 159f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick return (f != NULL) ? f->n : -1; 16078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul} 1618f5f6b3d59fa2ee25654283a235991f332bc8960Brian Paul 16278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul""" 16378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul return 16478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 16566a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 1669664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg def printBody(self, api_list): 1679664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg self.enum_table = {} 1689664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg for api in api_list: 1699664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg self.process_enums( api ) 17066a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 171f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick keys = self.enum_table.keys() 172f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick keys.sort() 173f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 174f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick name_table = [] 175f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick enum_table = {} 176f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 177f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for enum in keys: 178f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick low_pri = 9 179f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for [name, pri] in self.enum_table[ enum ]: 180f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick name_table.append( [name, enum] ) 181f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 182f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if pri < low_pri: 183f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick low_pri = pri 184f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick enum_table[enum] = name 185f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 186f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 187f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick name_table.sort() 188f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 189f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick string_offsets = {} 190f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick i = 0; 1917438a78cf4c220be18134a1d8dde7c776edbbbd3Brian Paul print 'LONGSTRING static const char enum_string_table[] = ' 192f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for [name, enum] in name_table: 193f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' "%s\\0"' % (name) 194f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick string_offsets[ name ] = i 195f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick i += len(name) + 1 196f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 197f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' ;' 198f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '' 199f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 200f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 201f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print 'static const enum_elt all_enums[%u] =' % (len(name_table)) 202f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '{' 203f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for [name, enum] in name_table: 2043bca4f679a411246306e7e141c562253cb5f4c2dIan Romanick print ' { %5u, 0x%08X }, /* %s */' % (string_offsets[name], enum, name) 205f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '};' 206f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '' 207f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 208f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print 'static const unsigned reduced_enums[%u] =' % (len(keys)) 209f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '{' 210f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick for enum in keys: 211f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick name = enum_table[ enum ] 212f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if [name, enum] not in name_table: 213f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print ' /* Error! %s, 0x%04x */ 0,' % (name, enum) 214f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick else: 215f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick i = name_table.index( [name, enum] ) 216f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 2173bca4f679a411246306e7e141c562253cb5f4c2dIan Romanick print ' %4u, /* %s */' % (i, name) 218f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick print '};' 219f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 220f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 22166a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick self.print_code() 22278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul return 22378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 22478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 22566a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick def process_enums(self, api): 22666a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick for obj in api.enumIterateByName(): 227f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick if obj.value not in self.enum_table: 228f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick self.enum_table[ obj.value ] = [] 229f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 230f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 2319664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg enum = self.enum_table[ obj.value ] 23266a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick name = "GL_" + obj.name 23366a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick priority = obj.priority() 2349664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg already_in = False; 2359664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg for n, p in enum: 2369664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg if n == name: 2379664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg already_in = True 2389664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg if not already_in: 2399664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg enum.append( [name, priority] ) 240f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 241f3a6e4fa5b40f2ae09e43b4fe0d46244e96f6505Ian Romanick 24278123bb38b1e4638747f55ddaef39e561cd81d6eBrian Pauldef show_usage(): 24378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul print "Usage: %s [-f input_file_name]" % sys.argv[0] 24478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul sys.exit(1) 24578123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 24678123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paulif __name__ == '__main__': 24778123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul try: 24878123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul (args, trail) = getopt.getopt(sys.argv[1:], "f:") 24978123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul except Exception,e: 25078123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul show_usage() 25178123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul 2529664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg api_list = [] 25378123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul for (arg,val) in args: 25478123bb38b1e4638747f55ddaef39e561cd81d6eBrian Paul if arg == "-f": 2559664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg api = gl_XML.parse_GL_API( val ) 2569664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg api_list.append(api); 25766a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick 25866a5548fbbf4c04a74b0bbc451718a8fc95502d9Ian Romanick printer = PrintGlEnums() 2599664f10023b0d57202134ca53795bf40daf580efKristian Høgsberg printer.Print( api_list ) 260