]> git.tdb.fi Git - gldbg.git/blob - source/enums.c
Rewrite the Makefile to have proper dependencies and stuff
[gldbg.git] / source / enums.c
1 /* $Id$
2
3 This file is part of gldbg
4 Copyright © 2009  Mikko Rasa, Mikkosoft Productions
5 Distributed under the GPL
6 */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11 #include "enums.h"
12 #include "tmpalloc.h"
13
14 typedef struct sEnumInfo
15 {
16         GLenum value;
17         const char *category;
18         const char *name;
19 } EnumInfo;
20
21 #include "gensrc/enums.table"
22
23 const char *describe_enum(GLenum value, const char *categ)
24 {
25         unsigned low = 0;
26         unsigned high = enum_count;
27         char *ptr;
28
29         while(high>low+1)
30         {
31                 unsigned mid = (low+high)/2;
32                 int cmp;
33
34                 if(enums[mid].value<value)
35                         cmp = -1;
36                 else if(enums[mid].value>value)
37                         cmp = 1;
38                 else
39                         cmp = strcmp(enums[mid].category, categ);
40
41                 if(cmp<0)
42                         low = mid;
43                 else if(cmp>0)
44                         high = mid;
45                 else
46                         return enums[mid].name;
47         }
48
49         if(enums[low].value==value)
50                 return enums[low].name;
51         if(enums[high].value==value)
52                 return enums[high].name;
53
54         ptr = (char *)tmpalloc(20);
55         snprintf(ptr, 20, "GLenum(0x%X)", value);
56         return ptr;
57 }
58
59 const char *describe_bitfield(int mask, const char *categ)
60 {
61         int bit;
62         char *buf = (char *)tmpalloc(200);
63         char *ptr = buf;
64
65         for(bit=1; bit; bit<<=1)
66                 if(mask&bit)
67                 {
68                         const char *bdesc = describe_enum(bit, categ);
69                         if(ptr!=buf)
70                                 *ptr++ = '|';
71                         while(*bdesc)
72                                 *ptr++ = *bdesc++;
73                 }
74         *ptr = 0;
75         return buf;
76 }