-enum, int, %s, describe_enum:p.name:'"%s"'%p.type
+enum, int, %s, describe_enum
boolean, char, %i
-bitfield, int, %s, describe_bitfield:p.name:'"%s"'%p.type
+bitfield, int, %s, describe_bitfield
byte, char, %i
ubyte, char, %u
short, short, %i
return buffer;
}
+static const char *print_array_described(const char *(*describe)(GLenum, const char *), const char *categ, const void *data, unsigned elem_size, unsigned count)
+{
+ char *buffer;
+ unsigned buf_size;
+ char *ptr;
+ unsigned i;
+
+ if(!data)
+ return NULL;
+
+ count /= elem_size;
+ buf_size = count*50;
+ buffer = tmpalloc(buf_size);
+ ptr = buffer;
+ *ptr++ = '{';
+ for(i=0; i<count; ++i)
+ {
+ int element = 0;
+ unsigned len;
+
+ if(i>0)
+ {
+ *ptr++ = ',';
+ *ptr++ = ' ';
+ }
+ memcpy(&element, (const char *)data+i*elem_size, elem_size);
+ len = snprintf(ptr, buf_size, "%s", describe(element, categ));
+ ptr += len;
+ buf_size -= len;
+ }
+ *ptr++ = '}';
+ *ptr = 0;
+
+ return buffer;
+}
+
static const char *print_data(const void *data, unsigned size)
{
if(!data)
w(', ')
if p.kind=="value":
w('%s', p.io[1])
- elif p.kind=="reference":
- if p.io:
- w('{%s}', p.io[1])
- else:
- w('<ref:%s %%p>', p.type)
- elif p.kind=="array":
+ elif p.kind=="reference" and not p.io:
+ w('<ref:%s %%p>', p.type)
+ else:
w('%%s')
first = False
w(')')
if p.ctype!="void":
if p.kind=="value":
if len(p.io)>=3 and p.io[2]:
- f = p.io[2].split(':')
- w(', %s(%s)', f[0], ", ".join(eval(x) for x in f[1:]))
- else:
- w(', %s', p.name)
- elif p.kind=="reference":
- if p.io:
- w(', *%s', p.name)
+ w(', %s(%s, "%s")', p.io[2], p.name, p.type)
else:
w(', %s', p.name)
- elif p.kind=="array":
- if not p.csize:
- w(', print_data(%s, 0)', p.name)
- elif p.base_ctype=="GLvoid" or p.base_ctype=="void":
- w(', print_data(%s, %s)', p.name, p.csize)
- else:
- f = p.io[1]
- if len(p.io)>=3 and p.io[2]:
- f = "%x"
- w(', print_array("%s", %s, sizeof(%s), %s)', f, p.name, p.base_ctype, p.csize)
+ elif p.kind=="reference" and not p.io:
+ w(', %s', p.name)
+ elif not p.csize:
+ w(', print_data(%s, 0)', p.name)
+ elif p.base_ctype=="GLvoid" or p.base_ctype=="void":
+ w(', print_data(%s, %s)', p.name, p.csize)
+ elif len(p.io)>=3 and p.io[2]:
+ w(', print_array_described(%s, "%s", %s, sizeof(%s), %s)', p.io[2], p.type, p.name, p.base_ctype, p.csize)
+ else:
+ w(', print_array("%s", %s, sizeof(%s), %s)', p.io[1], p.name, p.base_ctype, p.csize)
wl(');')
wl('}')
:static void init_print(GlDecoder *dec)