1/* C code produced by gperf version 3.0.4 */
2/* Command-line: gperf --output-file atoms.c atoms.gperf  */
3/* Computed positions: -k'3,6,9,$' */
4
5#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
6      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
7      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
8      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
9      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
10      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
11      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
12      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
13      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
14      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
15      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
16      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
17      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
18      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
19      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
20      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
21      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
22      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
23      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
24      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
25      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
26      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
27      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
28/* The character set is not based on ISO-646.  */
29error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
30#endif
31
32#line 1 "atoms.gperf"
33
34
35/* Rely on vasprintf (GNU extension) instead of vsnprintf if
36   possible... */
37#ifdef HAVE_VASPRINTF
38#define _GNU_SOURCE
39#include <stdio.h>
40#endif
41
42#include <xcb/xcb.h>
43#include <stdlib.h>
44#include <stdarg.h>
45#include "xcb_atom.h"
46
47const xcb_atom_t PRIMARY = 1;
48const xcb_atom_t SECONDARY = 2;
49const xcb_atom_t ARC = 3;
50const xcb_atom_t ATOM = 4;
51const xcb_atom_t BITMAP = 5;
52const xcb_atom_t CARDINAL = 6;
53const xcb_atom_t COLORMAP = 7;
54const xcb_atom_t CURSOR = 8;
55const xcb_atom_t CUT_BUFFER0 = 9;
56const xcb_atom_t CUT_BUFFER1 = 10;
57const xcb_atom_t CUT_BUFFER2 = 11;
58const xcb_atom_t CUT_BUFFER3 = 12;
59const xcb_atom_t CUT_BUFFER4 = 13;
60const xcb_atom_t CUT_BUFFER5 = 14;
61const xcb_atom_t CUT_BUFFER6 = 15;
62const xcb_atom_t CUT_BUFFER7 = 16;
63const xcb_atom_t DRAWABLE = 17;
64const xcb_atom_t FONT = 18;
65const xcb_atom_t INTEGER = 19;
66const xcb_atom_t PIXMAP = 20;
67const xcb_atom_t POINT = 21;
68const xcb_atom_t RECTANGLE = 22;
69const xcb_atom_t RESOURCE_MANAGER = 23;
70const xcb_atom_t RGB_COLOR_MAP = 24;
71const xcb_atom_t RGB_BEST_MAP = 25;
72const xcb_atom_t RGB_BLUE_MAP = 26;
73const xcb_atom_t RGB_DEFAULT_MAP = 27;
74const xcb_atom_t RGB_GRAY_MAP = 28;
75const xcb_atom_t RGB_GREEN_MAP = 29;
76const xcb_atom_t RGB_RED_MAP = 30;
77const xcb_atom_t STRING = 31;
78const xcb_atom_t VISUALID = 32;
79const xcb_atom_t WINDOW = 33;
80const xcb_atom_t WM_COMMAND = 34;
81const xcb_atom_t WM_HINTS = 35;
82const xcb_atom_t WM_CLIENT_MACHINE = 36;
83const xcb_atom_t WM_ICON_NAME = 37;
84const xcb_atom_t WM_ICON_SIZE = 38;
85const xcb_atom_t WM_NAME = 39;
86const xcb_atom_t WM_NORMAL_HINTS = 40;
87const xcb_atom_t WM_SIZE_HINTS = 41;
88const xcb_atom_t WM_ZOOM_HINTS = 42;
89const xcb_atom_t MIN_SPACE = 43;
90const xcb_atom_t NORM_SPACE = 44;
91const xcb_atom_t MAX_SPACE = 45;
92const xcb_atom_t END_SPACE = 46;
93const xcb_atom_t SUPERSCRIPT_X = 47;
94const xcb_atom_t SUPERSCRIPT_Y = 48;
95const xcb_atom_t SUBSCRIPT_X = 49;
96const xcb_atom_t SUBSCRIPT_Y = 50;
97const xcb_atom_t UNDERLINE_POSITION = 51;
98const xcb_atom_t UNDERLINE_THICKNESS = 52;
99const xcb_atom_t STRIKEOUT_ASCENT = 53;
100const xcb_atom_t STRIKEOUT_DESCENT = 54;
101const xcb_atom_t ITALIC_ANGLE = 55;
102const xcb_atom_t X_HEIGHT = 56;
103const xcb_atom_t QUAD_WIDTH = 57;
104const xcb_atom_t WEIGHT = 58;
105const xcb_atom_t POINT_SIZE = 59;
106const xcb_atom_t RESOLUTION = 60;
107const xcb_atom_t COPYRIGHT = 61;
108const xcb_atom_t NOTICE = 62;
109const xcb_atom_t FONT_NAME = 63;
110const xcb_atom_t FAMILY_NAME = 64;
111const xcb_atom_t FULL_NAME = 65;
112const xcb_atom_t CAP_HEIGHT = 66;
113const xcb_atom_t WM_CLASS = 67;
114const xcb_atom_t WM_TRANSIENT_FOR = 68;
115#line 93 "atoms.gperf"
116struct atom_map { int name; xcb_atom_t value; };
117#include <string.h>
118/* maximum key range = 146, duplicates = 0 */
119
120#ifdef __GNUC__
121__inline
122#else
123#ifdef __cplusplus
124inline
125#endif
126#endif
127static unsigned int
128hash (str, len)
129     register const char *str;
130     register unsigned int len;
131{
132  static const unsigned char asso_values[] =
133    {
134      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
135      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
136      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
137      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
138      150, 150, 150, 150, 150, 150, 150, 150,  75,  70,
139       65,  60,  40,  35,  20,   5, 150, 150, 150, 150,
140      150, 150, 150, 150, 150,  35,   0,  45,  15,   0,
141      150,  50,   0,   5, 150, 150,  15,  35,   0,  40,
142        5, 150,  10,  15,   0,  25, 150,  20,  70,  40,
143       55, 150, 150, 150, 150,  15, 150, 150, 150, 150,
144      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
145      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
146      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
147      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
148      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
149      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
150      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
151      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
152      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
153      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
154      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
155      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
156      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
157      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
158      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
159      150, 150, 150, 150, 150, 150
160    };
161  register int hval = len;
162
163  switch (hval)
164    {
165      default:
166        hval += asso_values[(unsigned char)str[8]];
167      /*FALLTHROUGH*/
168      case 8:
169      case 7:
170      case 6:
171        hval += asso_values[(unsigned char)str[5]];
172      /*FALLTHROUGH*/
173      case 5:
174      case 4:
175      case 3:
176        hval += asso_values[(unsigned char)str[2]];
177        break;
178    }
179  return hval + asso_values[(unsigned char)str[len - 1]];
180}
181
182struct stringpool_t
183  {
184    char stringpool_str4[sizeof("FONT")];
185    char stringpool_str6[sizeof("NOTICE")];
186    char stringpool_str9[sizeof("FONT_NAME")];
187    char stringpool_str10[sizeof("POINT")];
188    char stringpool_str11[sizeof("WEIGHT")];
189    char stringpool_str14[sizeof("MIN_SPACE")];
190    char stringpool_str15[sizeof("CAP_HEIGHT")];
191    char stringpool_str16[sizeof("BITMAP")];
192    char stringpool_str17[sizeof("INTEGER")];
193    char stringpool_str19[sizeof("COPYRIGHT")];
194    char stringpool_str24[sizeof("FULL_NAME")];
195    char stringpool_str26[sizeof("STRIKEOUT_ASCENT")];
196    char stringpool_str27[sizeof("STRIKEOUT_DESCENT")];
197    char stringpool_str28[sizeof("RGB_GREEN_MAP")];
198    char stringpool_str29[sizeof("END_SPACE")];
199    char stringpool_str32[sizeof("RGB_BEST_MAP")];
200    char stringpool_str33[sizeof("CARDINAL")];
201    char stringpool_str36[sizeof("CURSOR")];
202    char stringpool_str37[sizeof("WM_CLIENT_MACHINE")];
203    char stringpool_str38[sizeof("WM_HINTS")];
204    char stringpool_str41[sizeof("CUT_BUFFER7")];
205    char stringpool_str42[sizeof("RGB_GRAY_MAP")];
206    char stringpool_str43[sizeof("DRAWABLE")];
207    char stringpool_str45[sizeof("RGB_DEFAULT_MAP")];
208    char stringpool_str46[sizeof("WINDOW")];
209    char stringpool_str47[sizeof("RGB_BLUE_MAP")];
210    char stringpool_str48[sizeof("UNDERLINE_POSITION")];
211    char stringpool_str51[sizeof("RGB_RED_MAP")];
212    char stringpool_str53[sizeof("VISUALID")];
213    char stringpool_str54[sizeof("RECTANGLE")];
214    char stringpool_str56[sizeof("CUT_BUFFER6")];
215    char stringpool_str57[sizeof("WM_NAME")];
216    char stringpool_str58[sizeof("X_HEIGHT")];
217    char stringpool_str61[sizeof("SUBSCRIPT_Y")];
218    char stringpool_str62[sizeof("PRIMARY")];
219    char stringpool_str63[sizeof("COLORMAP")];
220    char stringpool_str64[sizeof("UNDERLINE_THICKNESS")];
221    char stringpool_str65[sizeof("QUAD_WIDTH")];
222    char stringpool_str66[sizeof("RESOURCE_MANAGER")];
223    char stringpool_str67[sizeof("WM_ICON_NAME")];
224    char stringpool_str68[sizeof("RGB_COLOR_MAP")];
225    char stringpool_str70[sizeof("WM_NORMAL_HINTS")];
226    char stringpool_str71[sizeof("CUT_BUFFER5")];
227    char stringpool_str73[sizeof("WM_CLASS")];
228    char stringpool_str75[sizeof("WM_COMMAND")];
229    char stringpool_str76[sizeof("CUT_BUFFER4")];
230    char stringpool_str78[sizeof("SUPERSCRIPT_Y")];
231    char stringpool_str79[sizeof("ATOM")];
232    char stringpool_str80[sizeof("NORM_SPACE")];
233    char stringpool_str81[sizeof("WM_TRANSIENT_FOR")];
234    char stringpool_str82[sizeof("WM_ICON_SIZE")];
235    char stringpool_str83[sizeof("WM_ZOOM_HINTS")];
236    char stringpool_str84[sizeof("MAX_SPACE")];
237    char stringpool_str85[sizeof("POINT_SIZE")];
238    char stringpool_str86[sizeof("PIXMAP")];
239    char stringpool_str90[sizeof("RESOLUTION")];
240    char stringpool_str91[sizeof("SUBSCRIPT_X")];
241    char stringpool_str92[sizeof("ITALIC_ANGLE")];
242    char stringpool_str93[sizeof("ARC")];
243    char stringpool_str96[sizeof("CUT_BUFFER3")];
244    char stringpool_str98[sizeof("WM_SIZE_HINTS")];
245    char stringpool_str101[sizeof("CUT_BUFFER2")];
246    char stringpool_str106[sizeof("CUT_BUFFER1")];
247    char stringpool_str108[sizeof("SUPERSCRIPT_X")];
248    char stringpool_str111[sizeof("CUT_BUFFER0")];
249    char stringpool_str116[sizeof("STRING")];
250    char stringpool_str121[sizeof("FAMILY_NAME")];
251    char stringpool_str149[sizeof("SECONDARY")];
252  };
253static const struct stringpool_t stringpool_contents =
254  {
255    "FONT",
256    "NOTICE",
257    "FONT_NAME",
258    "POINT",
259    "WEIGHT",
260    "MIN_SPACE",
261    "CAP_HEIGHT",
262    "BITMAP",
263    "INTEGER",
264    "COPYRIGHT",
265    "FULL_NAME",
266    "STRIKEOUT_ASCENT",
267    "STRIKEOUT_DESCENT",
268    "RGB_GREEN_MAP",
269    "END_SPACE",
270    "RGB_BEST_MAP",
271    "CARDINAL",
272    "CURSOR",
273    "WM_CLIENT_MACHINE",
274    "WM_HINTS",
275    "CUT_BUFFER7",
276    "RGB_GRAY_MAP",
277    "DRAWABLE",
278    "RGB_DEFAULT_MAP",
279    "WINDOW",
280    "RGB_BLUE_MAP",
281    "UNDERLINE_POSITION",
282    "RGB_RED_MAP",
283    "VISUALID",
284    "RECTANGLE",
285    "CUT_BUFFER6",
286    "WM_NAME",
287    "X_HEIGHT",
288    "SUBSCRIPT_Y",
289    "PRIMARY",
290    "COLORMAP",
291    "UNDERLINE_THICKNESS",
292    "QUAD_WIDTH",
293    "RESOURCE_MANAGER",
294    "WM_ICON_NAME",
295    "RGB_COLOR_MAP",
296    "WM_NORMAL_HINTS",
297    "CUT_BUFFER5",
298    "WM_CLASS",
299    "WM_COMMAND",
300    "CUT_BUFFER4",
301    "SUPERSCRIPT_Y",
302    "ATOM",
303    "NORM_SPACE",
304    "WM_TRANSIENT_FOR",
305    "WM_ICON_SIZE",
306    "WM_ZOOM_HINTS",
307    "MAX_SPACE",
308    "POINT_SIZE",
309    "PIXMAP",
310    "RESOLUTION",
311    "SUBSCRIPT_X",
312    "ITALIC_ANGLE",
313    "ARC",
314    "CUT_BUFFER3",
315    "WM_SIZE_HINTS",
316    "CUT_BUFFER2",
317    "CUT_BUFFER1",
318    "SUPERSCRIPT_X",
319    "CUT_BUFFER0",
320    "STRING",
321    "FAMILY_NAME",
322    "SECONDARY"
323  };
324#define stringpool ((const char *) &stringpool_contents)
325static
326#ifdef __GNUC__
327__inline
328#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
329__attribute__ ((__gnu_inline__))
330#endif
331#endif
332const struct atom_map *
333in_word_set (str, len)
334     register const char *str;
335     register unsigned int len;
336{
337  enum
338    {
339      TOTAL_KEYWORDS = 68,
340      MIN_WORD_LENGTH = 3,
341      MAX_WORD_LENGTH = 19,
342      MIN_HASH_VALUE = 4,
343      MAX_HASH_VALUE = 149
344    };
345
346  static const struct atom_map wordlist[] =
347    {
348      {-1}, {-1}, {-1}, {-1},
349#line 112 "atoms.gperf"
350      {(int)(long)&((struct stringpool_t *)0)->stringpool_str4,18},
351      {-1},
352#line 156 "atoms.gperf"
353      {(int)(long)&((struct stringpool_t *)0)->stringpool_str6,62},
354      {-1}, {-1},
355#line 157 "atoms.gperf"
356      {(int)(long)&((struct stringpool_t *)0)->stringpool_str9,63},
357#line 115 "atoms.gperf"
358      {(int)(long)&((struct stringpool_t *)0)->stringpool_str10,21},
359#line 152 "atoms.gperf"
360      {(int)(long)&((struct stringpool_t *)0)->stringpool_str11,58},
361      {-1}, {-1},
362#line 137 "atoms.gperf"
363      {(int)(long)&((struct stringpool_t *)0)->stringpool_str14,43},
364#line 160 "atoms.gperf"
365      {(int)(long)&((struct stringpool_t *)0)->stringpool_str15,66},
366#line 99 "atoms.gperf"
367      {(int)(long)&((struct stringpool_t *)0)->stringpool_str16,5},
368#line 113 "atoms.gperf"
369      {(int)(long)&((struct stringpool_t *)0)->stringpool_str17,19},
370      {-1},
371#line 155 "atoms.gperf"
372      {(int)(long)&((struct stringpool_t *)0)->stringpool_str19,61},
373      {-1}, {-1}, {-1}, {-1},
374#line 159 "atoms.gperf"
375      {(int)(long)&((struct stringpool_t *)0)->stringpool_str24,65},
376      {-1},
377#line 147 "atoms.gperf"
378      {(int)(long)&((struct stringpool_t *)0)->stringpool_str26,53},
379#line 148 "atoms.gperf"
380      {(int)(long)&((struct stringpool_t *)0)->stringpool_str27,54},
381#line 123 "atoms.gperf"
382      {(int)(long)&((struct stringpool_t *)0)->stringpool_str28,29},
383#line 140 "atoms.gperf"
384      {(int)(long)&((struct stringpool_t *)0)->stringpool_str29,46},
385      {-1}, {-1},
386#line 119 "atoms.gperf"
387      {(int)(long)&((struct stringpool_t *)0)->stringpool_str32,25},
388#line 100 "atoms.gperf"
389      {(int)(long)&((struct stringpool_t *)0)->stringpool_str33,6},
390      {-1}, {-1},
391#line 102 "atoms.gperf"
392      {(int)(long)&((struct stringpool_t *)0)->stringpool_str36,8},
393#line 130 "atoms.gperf"
394      {(int)(long)&((struct stringpool_t *)0)->stringpool_str37,36},
395#line 129 "atoms.gperf"
396      {(int)(long)&((struct stringpool_t *)0)->stringpool_str38,35},
397      {-1}, {-1},
398#line 110 "atoms.gperf"
399      {(int)(long)&((struct stringpool_t *)0)->stringpool_str41,16},
400#line 122 "atoms.gperf"
401      {(int)(long)&((struct stringpool_t *)0)->stringpool_str42,28},
402#line 111 "atoms.gperf"
403      {(int)(long)&((struct stringpool_t *)0)->stringpool_str43,17},
404      {-1},
405#line 121 "atoms.gperf"
406      {(int)(long)&((struct stringpool_t *)0)->stringpool_str45,27},
407#line 127 "atoms.gperf"
408      {(int)(long)&((struct stringpool_t *)0)->stringpool_str46,33},
409#line 120 "atoms.gperf"
410      {(int)(long)&((struct stringpool_t *)0)->stringpool_str47,26},
411#line 145 "atoms.gperf"
412      {(int)(long)&((struct stringpool_t *)0)->stringpool_str48,51},
413      {-1}, {-1},
414#line 124 "atoms.gperf"
415      {(int)(long)&((struct stringpool_t *)0)->stringpool_str51,30},
416      {-1},
417#line 126 "atoms.gperf"
418      {(int)(long)&((struct stringpool_t *)0)->stringpool_str53,32},
419#line 116 "atoms.gperf"
420      {(int)(long)&((struct stringpool_t *)0)->stringpool_str54,22},
421      {-1},
422#line 109 "atoms.gperf"
423      {(int)(long)&((struct stringpool_t *)0)->stringpool_str56,15},
424#line 133 "atoms.gperf"
425      {(int)(long)&((struct stringpool_t *)0)->stringpool_str57,39},
426#line 150 "atoms.gperf"
427      {(int)(long)&((struct stringpool_t *)0)->stringpool_str58,56},
428      {-1}, {-1},
429#line 144 "atoms.gperf"
430      {(int)(long)&((struct stringpool_t *)0)->stringpool_str61,50},
431#line 95 "atoms.gperf"
432      {(int)(long)&((struct stringpool_t *)0)->stringpool_str62,1},
433#line 101 "atoms.gperf"
434      {(int)(long)&((struct stringpool_t *)0)->stringpool_str63,7},
435#line 146 "atoms.gperf"
436      {(int)(long)&((struct stringpool_t *)0)->stringpool_str64,52},
437#line 151 "atoms.gperf"
438      {(int)(long)&((struct stringpool_t *)0)->stringpool_str65,57},
439#line 117 "atoms.gperf"
440      {(int)(long)&((struct stringpool_t *)0)->stringpool_str66,23},
441#line 131 "atoms.gperf"
442      {(int)(long)&((struct stringpool_t *)0)->stringpool_str67,37},
443#line 118 "atoms.gperf"
444      {(int)(long)&((struct stringpool_t *)0)->stringpool_str68,24},
445      {-1},
446#line 134 "atoms.gperf"
447      {(int)(long)&((struct stringpool_t *)0)->stringpool_str70,40},
448#line 108 "atoms.gperf"
449      {(int)(long)&((struct stringpool_t *)0)->stringpool_str71,14},
450      {-1},
451#line 161 "atoms.gperf"
452      {(int)(long)&((struct stringpool_t *)0)->stringpool_str73,67},
453      {-1},
454#line 128 "atoms.gperf"
455      {(int)(long)&((struct stringpool_t *)0)->stringpool_str75,34},
456#line 107 "atoms.gperf"
457      {(int)(long)&((struct stringpool_t *)0)->stringpool_str76,13},
458      {-1},
459#line 142 "atoms.gperf"
460      {(int)(long)&((struct stringpool_t *)0)->stringpool_str78,48},
461#line 98 "atoms.gperf"
462      {(int)(long)&((struct stringpool_t *)0)->stringpool_str79,4},
463#line 138 "atoms.gperf"
464      {(int)(long)&((struct stringpool_t *)0)->stringpool_str80,44},
465#line 162 "atoms.gperf"
466      {(int)(long)&((struct stringpool_t *)0)->stringpool_str81,68},
467#line 132 "atoms.gperf"
468      {(int)(long)&((struct stringpool_t *)0)->stringpool_str82,38},
469#line 136 "atoms.gperf"
470      {(int)(long)&((struct stringpool_t *)0)->stringpool_str83,42},
471#line 139 "atoms.gperf"
472      {(int)(long)&((struct stringpool_t *)0)->stringpool_str84,45},
473#line 153 "atoms.gperf"
474      {(int)(long)&((struct stringpool_t *)0)->stringpool_str85,59},
475#line 114 "atoms.gperf"
476      {(int)(long)&((struct stringpool_t *)0)->stringpool_str86,20},
477      {-1}, {-1}, {-1},
478#line 154 "atoms.gperf"
479      {(int)(long)&((struct stringpool_t *)0)->stringpool_str90,60},
480#line 143 "atoms.gperf"
481      {(int)(long)&((struct stringpool_t *)0)->stringpool_str91,49},
482#line 149 "atoms.gperf"
483      {(int)(long)&((struct stringpool_t *)0)->stringpool_str92,55},
484#line 97 "atoms.gperf"
485      {(int)(long)&((struct stringpool_t *)0)->stringpool_str93,3},
486      {-1}, {-1},
487#line 106 "atoms.gperf"
488      {(int)(long)&((struct stringpool_t *)0)->stringpool_str96,12},
489      {-1},
490#line 135 "atoms.gperf"
491      {(int)(long)&((struct stringpool_t *)0)->stringpool_str98,41},
492      {-1}, {-1},
493#line 105 "atoms.gperf"
494      {(int)(long)&((struct stringpool_t *)0)->stringpool_str101,11},
495      {-1}, {-1}, {-1}, {-1},
496#line 104 "atoms.gperf"
497      {(int)(long)&((struct stringpool_t *)0)->stringpool_str106,10},
498      {-1},
499#line 141 "atoms.gperf"
500      {(int)(long)&((struct stringpool_t *)0)->stringpool_str108,47},
501      {-1}, {-1},
502#line 103 "atoms.gperf"
503      {(int)(long)&((struct stringpool_t *)0)->stringpool_str111,9},
504      {-1}, {-1}, {-1}, {-1},
505#line 125 "atoms.gperf"
506      {(int)(long)&((struct stringpool_t *)0)->stringpool_str116,31},
507      {-1}, {-1}, {-1}, {-1},
508#line 158 "atoms.gperf"
509      {(int)(long)&((struct stringpool_t *)0)->stringpool_str121,64},
510      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
511      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
512      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
513#line 96 "atoms.gperf"
514      {(int)(long)&((struct stringpool_t *)0)->stringpool_str149,2}
515    };
516
517  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
518    {
519      register int key = hash (str, len);
520
521      if (key <= MAX_HASH_VALUE && key >= 0)
522        {
523          register int o = wordlist[key].name;
524          if (o >= 0)
525            {
526              register const char *s = o + stringpool;
527
528              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
529                return &wordlist[key];
530            }
531        }
532    }
533  return 0;
534}
535#line 163 "atoms.gperf"
536
537
538static const char atom_names[] =
539	"PRIMARY\0"
540	"SECONDARY\0"
541	"ARC\0"
542	"ATOM\0"
543	"BITMAP\0"
544	"CARDINAL\0"
545	"COLORMAP\0"
546	"CURSOR\0"
547	"CUT_BUFFER0\0"
548	"CUT_BUFFER1\0"
549	"CUT_BUFFER2\0"
550	"CUT_BUFFER3\0"
551	"CUT_BUFFER4\0"
552	"CUT_BUFFER5\0"
553	"CUT_BUFFER6\0"
554	"CUT_BUFFER7\0"
555	"DRAWABLE\0"
556	"FONT\0"
557	"INTEGER\0"
558	"PIXMAP\0"
559	"POINT\0"
560	"RECTANGLE\0"
561	"RESOURCE_MANAGER\0"
562	"RGB_COLOR_MAP\0"
563	"RGB_BEST_MAP\0"
564	"RGB_BLUE_MAP\0"
565	"RGB_DEFAULT_MAP\0"
566	"RGB_GRAY_MAP\0"
567	"RGB_GREEN_MAP\0"
568	"RGB_RED_MAP\0"
569	"STRING\0"
570	"VISUALID\0"
571	"WINDOW\0"
572	"WM_COMMAND\0"
573	"WM_HINTS\0"
574	"WM_CLIENT_MACHINE\0"
575	"WM_ICON_NAME\0"
576	"WM_ICON_SIZE\0"
577	"WM_NAME\0"
578	"WM_NORMAL_HINTS\0"
579	"WM_SIZE_HINTS\0"
580	"WM_ZOOM_HINTS\0"
581	"MIN_SPACE\0"
582	"NORM_SPACE\0"
583	"MAX_SPACE\0"
584	"END_SPACE\0"
585	"SUPERSCRIPT_X\0"
586	"SUPERSCRIPT_Y\0"
587	"SUBSCRIPT_X\0"
588	"SUBSCRIPT_Y\0"
589	"UNDERLINE_POSITION\0"
590	"UNDERLINE_THICKNESS\0"
591	"STRIKEOUT_ASCENT\0"
592	"STRIKEOUT_DESCENT\0"
593	"ITALIC_ANGLE\0"
594	"X_HEIGHT\0"
595	"QUAD_WIDTH\0"
596	"WEIGHT\0"
597	"POINT_SIZE\0"
598	"RESOLUTION\0"
599	"COPYRIGHT\0"
600	"NOTICE\0"
601	"FONT_NAME\0"
602	"FAMILY_NAME\0"
603	"FULL_NAME\0"
604	"CAP_HEIGHT\0"
605	"WM_CLASS\0"
606	"WM_TRANSIENT_FOR\0"
607;
608
609static const uint16_t atom_name_offsets[] = {
610	0,
611	8,
612	18,
613	22,
614	27,
615	34,
616	43,
617	52,
618	59,
619	71,
620	83,
621	95,
622	107,
623	119,
624	131,
625	143,
626	155,
627	164,
628	169,
629	177,
630	184,
631	190,
632	200,
633	217,
634	231,
635	244,
636	257,
637	273,
638	286,
639	300,
640	312,
641	319,
642	328,
643	335,
644	346,
645	355,
646	373,
647	386,
648	399,
649	407,
650	423,
651	437,
652	451,
653	461,
654	472,
655	482,
656	492,
657	506,
658	520,
659	532,
660	544,
661	563,
662	583,
663	600,
664	618,
665	631,
666	640,
667	651,
668	658,
669	669,
670	680,
671	690,
672	697,
673	707,
674	719,
675	729,
676	740,
677	749,
678};
679
680xcb_atom_t xcb_atom_get(xcb_connection_t *connection, const char *atom_name)
681{
682	if(atom_name == NULL)
683		return XCB_NONE;
684	xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(connection,
685		xcb_intern_atom(connection, 0, strlen(atom_name), atom_name), NULL);
686	if(!reply)
687		return XCB_NONE;
688	xcb_atom_t atom = reply->atom;
689	free(reply);
690	return atom;
691}
692
693xcb_atom_t xcb_atom_get_predefined(uint16_t name_len, const char *name)
694{
695	const struct atom_map *value = in_word_set(name, name_len);
696	xcb_atom_t ret = XCB_NONE;
697	if(value)
698		ret = value->value;
699	return ret;
700}
701
702xcb_atom_fast_cookie_t xcb_atom_get_fast(xcb_connection_t *c, uint8_t only_if_exists, uint16_t name_len, const char *name)
703{
704	xcb_atom_fast_cookie_t cookie;
705
706	if((cookie.u.atom = xcb_atom_get_predefined(name_len, name)) != XCB_NONE)
707	{
708		cookie.tag = TAG_VALUE;
709		return cookie;
710	}
711
712	cookie.tag = TAG_COOKIE;
713	cookie.u.cookie = xcb_intern_atom(c, only_if_exists, name_len, name);
714	return cookie;
715}
716
717xcb_atom_t xcb_atom_get_fast_reply(xcb_connection_t *c, xcb_atom_fast_cookie_t cookie, xcb_generic_error_t **e)
718{
719	switch(cookie.tag)
720	{
721		xcb_intern_atom_reply_t *reply;
722	case TAG_VALUE:
723		if(e)
724			*e = 0;
725		break;
726	case TAG_COOKIE:
727		reply = xcb_intern_atom_reply(c, cookie.u.cookie, e);
728		if(reply)
729		{
730			cookie.u.atom = reply->atom;
731			free(reply);
732		}
733		else
734			cookie.u.atom = XCB_NONE;
735		break;
736	}
737	return cookie.u.atom;
738}
739
740const char *xcb_atom_get_name_predefined(xcb_atom_t atom)
741{
742	if(atom <= 0 || atom > (sizeof(atom_name_offsets) / sizeof(*atom_name_offsets)))
743		return 0;
744	return atom_names + atom_name_offsets[atom - 1];
745}
746
747int xcb_atom_get_name(xcb_connection_t *c, xcb_atom_t atom, const char **namep, int *lengthp)
748{
749	static char buf[100];
750	const char *name = xcb_atom_get_name_predefined(atom);
751	int namelen;
752	xcb_get_atom_name_cookie_t atomc;
753	xcb_get_atom_name_reply_t *atomr;
754	if(name)
755	{
756		*namep = name;
757		*lengthp = strlen(name);
758		return 1;
759	}
760	atomc = xcb_get_atom_name(c, atom);
761	atomr = xcb_get_atom_name_reply(c, atomc, 0);
762	if(!atomr)
763		return 0;
764	namelen = xcb_get_atom_name_name_length(atomr);
765	if(namelen > sizeof(buf))
766		namelen = sizeof(buf);
767	*lengthp = namelen;
768	memcpy(buf, xcb_get_atom_name_name(atomr), namelen);
769	*namep = buf;
770	free(atomr);
771	return 1;
772}
773
774static char *makename(const char *fmt, ...)
775{
776	char *ret;
777	int n;
778	va_list ap;
779
780#ifndef HAVE_VASPRINTF
781	char *np;
782	int size = 64;
783
784	/* First allocate 'size' bytes, should be enough usually */
785	if((ret = malloc(size)) == NULL)
786		return NULL;
787
788	while(1)
789	{
790		va_start(ap, fmt);
791		n = vsnprintf(ret, size, fmt, ap);
792		va_end(ap);
793
794		if(n < 0)
795			return NULL;
796
797		if(n < size)
798			return ret;
799
800		size = n + 1;
801		if((np = realloc(ret, size)) == NULL)
802		{
803			free(ret);
804			return NULL;
805		}
806
807		ret = np;
808	}
809#else
810	va_start(ap, fmt);
811	n = vasprintf(&ret, fmt, ap);
812	va_end(ap);
813
814	if(n < 0)
815		return NULL;
816
817	return ret;
818#endif
819}
820
821char *xcb_atom_name_by_screen(const char *base, uint8_t screen)
822{
823	return makename("%s_S%u", base, screen);
824}
825
826char *xcb_atom_name_by_resource(const char *base, uint32_t resource)
827{
828	return makename("%s_R%08X", base, resource);
829}
830
831char *xcb_atom_name_unique(const char *base, uint32_t id)
832{
833	if(base)
834		return makename("%s_U%lu", base, id);
835	else
836		return makename("U%lu", id);
837}
838