atoms.c   [plain text]


/* C code produced by gperf version 3.0.3 */
/* Command-line: gperf --output-file atoms.c atoms.gperf  */
/* Computed positions: -k'3,6,9,$' */

#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
/* The character set is not based on ISO-646.  */
error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
#endif

#line 1 "atoms.gperf"


/* Rely on vasprintf (GNU extension) instead of vsnprintf if
   possible... */
#ifdef HAVE_VASPRINTF
#define _GNU_SOURCE
#include <stdio.h>
#endif

#include <xcb/xcb.h>
#include <stdlib.h>
#include <stdarg.h>
#include "xcb_atom.h"

const xcb_atom_t PRIMARY = 1;
const xcb_atom_t SECONDARY = 2;
const xcb_atom_t ARC = 3;
const xcb_atom_t ATOM = 4;
const xcb_atom_t BITMAP = 5;
const xcb_atom_t CARDINAL = 6;
const xcb_atom_t COLORMAP = 7;
const xcb_atom_t CURSOR = 8;
const xcb_atom_t CUT_BUFFER0 = 9;
const xcb_atom_t CUT_BUFFER1 = 10;
const xcb_atom_t CUT_BUFFER2 = 11;
const xcb_atom_t CUT_BUFFER3 = 12;
const xcb_atom_t CUT_BUFFER4 = 13;
const xcb_atom_t CUT_BUFFER5 = 14;
const xcb_atom_t CUT_BUFFER6 = 15;
const xcb_atom_t CUT_BUFFER7 = 16;
const xcb_atom_t DRAWABLE = 17;
const xcb_atom_t FONT = 18;
const xcb_atom_t INTEGER = 19;
const xcb_atom_t PIXMAP = 20;
const xcb_atom_t POINT = 21;
const xcb_atom_t RECTANGLE = 22;
const xcb_atom_t RESOURCE_MANAGER = 23;
const xcb_atom_t RGB_COLOR_MAP = 24;
const xcb_atom_t RGB_BEST_MAP = 25;
const xcb_atom_t RGB_BLUE_MAP = 26;
const xcb_atom_t RGB_DEFAULT_MAP = 27;
const xcb_atom_t RGB_GRAY_MAP = 28;
const xcb_atom_t RGB_GREEN_MAP = 29;
const xcb_atom_t RGB_RED_MAP = 30;
const xcb_atom_t STRING = 31;
const xcb_atom_t VISUALID = 32;
const xcb_atom_t WINDOW = 33;
const xcb_atom_t WM_COMMAND = 34;
const xcb_atom_t WM_HINTS = 35;
const xcb_atom_t WM_CLIENT_MACHINE = 36;
const xcb_atom_t WM_ICON_NAME = 37;
const xcb_atom_t WM_ICON_SIZE = 38;
const xcb_atom_t WM_NAME = 39;
const xcb_atom_t WM_NORMAL_HINTS = 40;
const xcb_atom_t WM_SIZE_HINTS = 41;
const xcb_atom_t WM_ZOOM_HINTS = 42;
const xcb_atom_t MIN_SPACE = 43;
const xcb_atom_t NORM_SPACE = 44;
const xcb_atom_t MAX_SPACE = 45;
const xcb_atom_t END_SPACE = 46;
const xcb_atom_t SUPERSCRIPT_X = 47;
const xcb_atom_t SUPERSCRIPT_Y = 48;
const xcb_atom_t SUBSCRIPT_X = 49;
const xcb_atom_t SUBSCRIPT_Y = 50;
const xcb_atom_t UNDERLINE_POSITION = 51;
const xcb_atom_t UNDERLINE_THICKNESS = 52;
const xcb_atom_t STRIKEOUT_ASCENT = 53;
const xcb_atom_t STRIKEOUT_DESCENT = 54;
const xcb_atom_t ITALIC_ANGLE = 55;
const xcb_atom_t X_HEIGHT = 56;
const xcb_atom_t QUAD_WIDTH = 57;
const xcb_atom_t WEIGHT = 58;
const xcb_atom_t POINT_SIZE = 59;
const xcb_atom_t RESOLUTION = 60;
const xcb_atom_t COPYRIGHT = 61;
const xcb_atom_t NOTICE = 62;
const xcb_atom_t FONT_NAME = 63;
const xcb_atom_t FAMILY_NAME = 64;
const xcb_atom_t FULL_NAME = 65;
const xcb_atom_t CAP_HEIGHT = 66;
const xcb_atom_t WM_CLASS = 67;
const xcb_atom_t WM_TRANSIENT_FOR = 68;
#line 93 "atoms.gperf"
struct atom_map { int name; xcb_atom_t value; };
#include <string.h>
/* maximum key range = 146, duplicates = 0 */

#ifdef __GNUC__
__inline
#else
#ifdef __cplusplus
inline
#endif
#endif
static unsigned int
hash (str, len)
     register const char *str;
     register unsigned int len;
{
  static const unsigned char asso_values[] =
    {
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150,  75,  70,
       65,  60,  40,  35,  20,   5, 150, 150, 150, 150,
      150, 150, 150, 150, 150,  35,   0,  45,  15,   0,
      150,  50,   0,   5, 150, 150,  15,  35,   0,  40,
        5, 150,  10,  15,   0,  25, 150,  20,  70,  40,
       55, 150, 150, 150, 150,  15, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150, 150, 150, 150, 150,
      150, 150, 150, 150, 150, 150
    };
  register int hval = len;

  switch (hval)
    {
      default:
        hval += asso_values[(unsigned char)str[8]];
      /*FALLTHROUGH*/
      case 8:
      case 7:
      case 6:
        hval += asso_values[(unsigned char)str[5]];
      /*FALLTHROUGH*/
      case 5:
      case 4:
      case 3:
        hval += asso_values[(unsigned char)str[2]];
        break;
    }
  return hval + asso_values[(unsigned char)str[len - 1]];
}

struct stringpool_t
  {
    char stringpool_str4[sizeof("FONT")];
    char stringpool_str6[sizeof("NOTICE")];
    char stringpool_str9[sizeof("FONT_NAME")];
    char stringpool_str10[sizeof("POINT")];
    char stringpool_str11[sizeof("WEIGHT")];
    char stringpool_str14[sizeof("MIN_SPACE")];
    char stringpool_str15[sizeof("CAP_HEIGHT")];
    char stringpool_str16[sizeof("BITMAP")];
    char stringpool_str17[sizeof("INTEGER")];
    char stringpool_str19[sizeof("COPYRIGHT")];
    char stringpool_str24[sizeof("FULL_NAME")];
    char stringpool_str26[sizeof("STRIKEOUT_ASCENT")];
    char stringpool_str27[sizeof("STRIKEOUT_DESCENT")];
    char stringpool_str28[sizeof("RGB_GREEN_MAP")];
    char stringpool_str29[sizeof("END_SPACE")];
    char stringpool_str32[sizeof("RGB_BEST_MAP")];
    char stringpool_str33[sizeof("CARDINAL")];
    char stringpool_str36[sizeof("CURSOR")];
    char stringpool_str37[sizeof("WM_CLIENT_MACHINE")];
    char stringpool_str38[sizeof("WM_HINTS")];
    char stringpool_str41[sizeof("CUT_BUFFER7")];
    char stringpool_str42[sizeof("RGB_GRAY_MAP")];
    char stringpool_str43[sizeof("DRAWABLE")];
    char stringpool_str45[sizeof("RGB_DEFAULT_MAP")];
    char stringpool_str46[sizeof("WINDOW")];
    char stringpool_str47[sizeof("RGB_BLUE_MAP")];
    char stringpool_str48[sizeof("UNDERLINE_POSITION")];
    char stringpool_str51[sizeof("RGB_RED_MAP")];
    char stringpool_str53[sizeof("VISUALID")];
    char stringpool_str54[sizeof("RECTANGLE")];
    char stringpool_str56[sizeof("CUT_BUFFER6")];
    char stringpool_str57[sizeof("WM_NAME")];
    char stringpool_str58[sizeof("X_HEIGHT")];
    char stringpool_str61[sizeof("SUBSCRIPT_Y")];
    char stringpool_str62[sizeof("PRIMARY")];
    char stringpool_str63[sizeof("COLORMAP")];
    char stringpool_str64[sizeof("UNDERLINE_THICKNESS")];
    char stringpool_str65[sizeof("QUAD_WIDTH")];
    char stringpool_str66[sizeof("RESOURCE_MANAGER")];
    char stringpool_str67[sizeof("WM_ICON_NAME")];
    char stringpool_str68[sizeof("RGB_COLOR_MAP")];
    char stringpool_str70[sizeof("WM_NORMAL_HINTS")];
    char stringpool_str71[sizeof("CUT_BUFFER5")];
    char stringpool_str73[sizeof("WM_CLASS")];
    char stringpool_str75[sizeof("WM_COMMAND")];
    char stringpool_str76[sizeof("CUT_BUFFER4")];
    char stringpool_str78[sizeof("SUPERSCRIPT_Y")];
    char stringpool_str79[sizeof("ATOM")];
    char stringpool_str80[sizeof("NORM_SPACE")];
    char stringpool_str81[sizeof("WM_TRANSIENT_FOR")];
    char stringpool_str82[sizeof("WM_ICON_SIZE")];
    char stringpool_str83[sizeof("WM_ZOOM_HINTS")];
    char stringpool_str84[sizeof("MAX_SPACE")];
    char stringpool_str85[sizeof("POINT_SIZE")];
    char stringpool_str86[sizeof("PIXMAP")];
    char stringpool_str90[sizeof("RESOLUTION")];
    char stringpool_str91[sizeof("SUBSCRIPT_X")];
    char stringpool_str92[sizeof("ITALIC_ANGLE")];
    char stringpool_str93[sizeof("ARC")];
    char stringpool_str96[sizeof("CUT_BUFFER3")];
    char stringpool_str98[sizeof("WM_SIZE_HINTS")];
    char stringpool_str101[sizeof("CUT_BUFFER2")];
    char stringpool_str106[sizeof("CUT_BUFFER1")];
    char stringpool_str108[sizeof("SUPERSCRIPT_X")];
    char stringpool_str111[sizeof("CUT_BUFFER0")];
    char stringpool_str116[sizeof("STRING")];
    char stringpool_str121[sizeof("FAMILY_NAME")];
    char stringpool_str149[sizeof("SECONDARY")];
  };
static const struct stringpool_t stringpool_contents =
  {
    "FONT",
    "NOTICE",
    "FONT_NAME",
    "POINT",
    "WEIGHT",
    "MIN_SPACE",
    "CAP_HEIGHT",
    "BITMAP",
    "INTEGER",
    "COPYRIGHT",
    "FULL_NAME",
    "STRIKEOUT_ASCENT",
    "STRIKEOUT_DESCENT",
    "RGB_GREEN_MAP",
    "END_SPACE",
    "RGB_BEST_MAP",
    "CARDINAL",
    "CURSOR",
    "WM_CLIENT_MACHINE",
    "WM_HINTS",
    "CUT_BUFFER7",
    "RGB_GRAY_MAP",
    "DRAWABLE",
    "RGB_DEFAULT_MAP",
    "WINDOW",
    "RGB_BLUE_MAP",
    "UNDERLINE_POSITION",
    "RGB_RED_MAP",
    "VISUALID",
    "RECTANGLE",
    "CUT_BUFFER6",
    "WM_NAME",
    "X_HEIGHT",
    "SUBSCRIPT_Y",
    "PRIMARY",
    "COLORMAP",
    "UNDERLINE_THICKNESS",
    "QUAD_WIDTH",
    "RESOURCE_MANAGER",
    "WM_ICON_NAME",
    "RGB_COLOR_MAP",
    "WM_NORMAL_HINTS",
    "CUT_BUFFER5",
    "WM_CLASS",
    "WM_COMMAND",
    "CUT_BUFFER4",
    "SUPERSCRIPT_Y",
    "ATOM",
    "NORM_SPACE",
    "WM_TRANSIENT_FOR",
    "WM_ICON_SIZE",
    "WM_ZOOM_HINTS",
    "MAX_SPACE",
    "POINT_SIZE",
    "PIXMAP",
    "RESOLUTION",
    "SUBSCRIPT_X",
    "ITALIC_ANGLE",
    "ARC",
    "CUT_BUFFER3",
    "WM_SIZE_HINTS",
    "CUT_BUFFER2",
    "CUT_BUFFER1",
    "SUPERSCRIPT_X",
    "CUT_BUFFER0",
    "STRING",
    "FAMILY_NAME",
    "SECONDARY"
  };
#define stringpool ((const char *) &stringpool_contents)
#ifdef __GNUC__
__inline
#ifdef __GNUC_STDC_INLINE__
__attribute__ ((__gnu_inline__))
#endif
#endif
const struct atom_map *
in_word_set (str, len)
     register const char *str;
     register unsigned int len;
{
  enum
    {
      TOTAL_KEYWORDS = 68,
      MIN_WORD_LENGTH = 3,
      MAX_WORD_LENGTH = 19,
      MIN_HASH_VALUE = 4,
      MAX_HASH_VALUE = 149
    };

  static const struct atom_map wordlist[] =
    {
      {-1}, {-1}, {-1}, {-1},
#line 112 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str4,18},
      {-1},
#line 156 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str6,62},
      {-1}, {-1},
#line 157 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str9,63},
#line 115 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str10,21},
#line 152 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str11,58},
      {-1}, {-1},
#line 137 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str14,43},
#line 160 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str15,66},
#line 99 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str16,5},
#line 113 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str17,19},
      {-1},
#line 155 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str19,61},
      {-1}, {-1}, {-1}, {-1},
#line 159 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str24,65},
      {-1},
#line 147 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str26,53},
#line 148 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str27,54},
#line 123 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str28,29},
#line 140 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str29,46},
      {-1}, {-1},
#line 119 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str32,25},
#line 100 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str33,6},
      {-1}, {-1},
#line 102 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str36,8},
#line 130 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str37,36},
#line 129 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str38,35},
      {-1}, {-1},
#line 110 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str41,16},
#line 122 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str42,28},
#line 111 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str43,17},
      {-1},
#line 121 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str45,27},
#line 127 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str46,33},
#line 120 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str47,26},
#line 145 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str48,51},
      {-1}, {-1},
#line 124 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str51,30},
      {-1},
#line 126 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str53,32},
#line 116 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str54,22},
      {-1},
#line 109 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str56,15},
#line 133 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str57,39},
#line 150 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str58,56},
      {-1}, {-1},
#line 144 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str61,50},
#line 95 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str62,1},
#line 101 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str63,7},
#line 146 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str64,52},
#line 151 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str65,57},
#line 117 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str66,23},
#line 131 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str67,37},
#line 118 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str68,24},
      {-1},
#line 134 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str70,40},
#line 108 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str71,14},
      {-1},
#line 161 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str73,67},
      {-1},
#line 128 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str75,34},
#line 107 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str76,13},
      {-1},
#line 142 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str78,48},
#line 98 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str79,4},
#line 138 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str80,44},
#line 162 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str81,68},
#line 132 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str82,38},
#line 136 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str83,42},
#line 139 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str84,45},
#line 153 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str85,59},
#line 114 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str86,20},
      {-1}, {-1}, {-1},
#line 154 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str90,60},
#line 143 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str91,49},
#line 149 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str92,55},
#line 97 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str93,3},
      {-1}, {-1},
#line 106 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str96,12},
      {-1},
#line 135 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str98,41},
      {-1}, {-1},
#line 105 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str101,11},
      {-1}, {-1}, {-1}, {-1},
#line 104 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str106,10},
      {-1},
#line 141 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str108,47},
      {-1}, {-1},
#line 103 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str111,9},
      {-1}, {-1}, {-1}, {-1},
#line 125 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str116,31},
      {-1}, {-1}, {-1}, {-1},
#line 158 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str121,64},
      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
#line 96 "atoms.gperf"
      {(int)(long)&((struct stringpool_t *)0)->stringpool_str149,2}
    };

  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
    {
      register int key = hash (str, len);

      if (key <= MAX_HASH_VALUE && key >= 0)
        {
          register int o = wordlist[key].name;
          if (o >= 0)
            {
              register const char *s = o + stringpool;

              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
                return &wordlist[key];
            }
        }
    }
  return 0;
}
#line 163 "atoms.gperf"


static const char atom_names[] =
	"PRIMARY\0"
	"SECONDARY\0"
	"ARC\0"
	"ATOM\0"
	"BITMAP\0"
	"CARDINAL\0"
	"COLORMAP\0"
	"CURSOR\0"
	"CUT_BUFFER0\0"
	"CUT_BUFFER1\0"
	"CUT_BUFFER2\0"
	"CUT_BUFFER3\0"
	"CUT_BUFFER4\0"
	"CUT_BUFFER5\0"
	"CUT_BUFFER6\0"
	"CUT_BUFFER7\0"
	"DRAWABLE\0"
	"FONT\0"
	"INTEGER\0"
	"PIXMAP\0"
	"POINT\0"
	"RECTANGLE\0"
	"RESOURCE_MANAGER\0"
	"RGB_COLOR_MAP\0"
	"RGB_BEST_MAP\0"
	"RGB_BLUE_MAP\0"
	"RGB_DEFAULT_MAP\0"
	"RGB_GRAY_MAP\0"
	"RGB_GREEN_MAP\0"
	"RGB_RED_MAP\0"
	"STRING\0"
	"VISUALID\0"
	"WINDOW\0"
	"WM_COMMAND\0"
	"WM_HINTS\0"
	"WM_CLIENT_MACHINE\0"
	"WM_ICON_NAME\0"
	"WM_ICON_SIZE\0"
	"WM_NAME\0"
	"WM_NORMAL_HINTS\0"
	"WM_SIZE_HINTS\0"
	"WM_ZOOM_HINTS\0"
	"MIN_SPACE\0"
	"NORM_SPACE\0"
	"MAX_SPACE\0"
	"END_SPACE\0"
	"SUPERSCRIPT_X\0"
	"SUPERSCRIPT_Y\0"
	"SUBSCRIPT_X\0"
	"SUBSCRIPT_Y\0"
	"UNDERLINE_POSITION\0"
	"UNDERLINE_THICKNESS\0"
	"STRIKEOUT_ASCENT\0"
	"STRIKEOUT_DESCENT\0"
	"ITALIC_ANGLE\0"
	"X_HEIGHT\0"
	"QUAD_WIDTH\0"
	"WEIGHT\0"
	"POINT_SIZE\0"
	"RESOLUTION\0"
	"COPYRIGHT\0"
	"NOTICE\0"
	"FONT_NAME\0"
	"FAMILY_NAME\0"
	"FULL_NAME\0"
	"CAP_HEIGHT\0"
	"WM_CLASS\0"
	"WM_TRANSIENT_FOR\0"
;

static const uint16_t atom_name_offsets[] = {
	0,
	8,
	18,
	22,
	27,
	34,
	43,
	52,
	59,
	71,
	83,
	95,
	107,
	119,
	131,
	143,
	155,
	164,
	169,
	177,
	184,
	190,
	200,
	217,
	231,
	244,
	257,
	273,
	286,
	300,
	312,
	319,
	328,
	335,
	346,
	355,
	373,
	386,
	399,
	407,
	423,
	437,
	451,
	461,
	472,
	482,
	492,
	506,
	520,
	532,
	544,
	563,
	583,
	600,
	618,
	631,
	640,
	651,
	658,
	669,
	680,
	690,
	697,
	707,
	719,
	729,
	740,
	749,
};

xcb_atom_t xcb_atom_get(xcb_connection_t *connection, const char *atom_name)
{
	if(atom_name == NULL)
		return XCB_NONE;
	xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(connection,
		xcb_intern_atom(connection, 0, strlen(atom_name), atom_name), NULL);
	if(!reply)
		return XCB_NONE;
	xcb_atom_t atom = reply->atom;
	free(reply);
	return atom;
}

xcb_atom_t xcb_atom_get_predefined(uint16_t name_len, const char *name)
{
	const struct atom_map *value = in_word_set(name, name_len);
	xcb_atom_t ret = XCB_NONE;
	if(value)
		ret = value->value;
	return ret;
}

xcb_atom_fast_cookie_t xcb_atom_get_fast(xcb_connection_t *c, uint8_t only_if_exists, uint16_t name_len, const char *name)
{
	xcb_atom_fast_cookie_t cookie;

	if((cookie.u.atom = xcb_atom_get_predefined(name_len, name)) != XCB_NONE)
	{
		cookie.tag = TAG_VALUE;
		return cookie;
	}

	cookie.tag = TAG_COOKIE;
	cookie.u.cookie = xcb_intern_atom(c, only_if_exists, name_len, name);
	return cookie;
}

xcb_atom_t xcb_atom_get_fast_reply(xcb_connection_t *c, xcb_atom_fast_cookie_t cookie, xcb_generic_error_t **e)
{
	switch(cookie.tag)
	{
		xcb_intern_atom_reply_t *reply;
	case TAG_VALUE:
		if(e)
			*e = 0;
		break;
	case TAG_COOKIE:
		reply = xcb_intern_atom_reply(c, cookie.u.cookie, e);
		if(reply)
		{
			cookie.u.atom = reply->atom;
			free(reply);
		}
		else
			cookie.u.atom = XCB_NONE;
		break;
	}
	return cookie.u.atom;
}

const char *xcb_atom_get_name_predefined(xcb_atom_t atom)
{
	if(atom <= 0 || atom > (sizeof(atom_name_offsets) / sizeof(*atom_name_offsets)))
		return 0;
	return atom_names + atom_name_offsets[atom - 1];
}

int xcb_atom_get_name(xcb_connection_t *c, xcb_atom_t atom, const char **namep, int *lengthp)
{
	static char buf[100];
	const char *name = xcb_atom_get_name_predefined(atom);
	int namelen;
	xcb_get_atom_name_cookie_t atomc;
	xcb_get_atom_name_reply_t *atomr;
	if(name)
	{
		*namep = name;
		*lengthp = strlen(name);
		return 1;
	}
	atomc = xcb_get_atom_name(c, atom);
	atomr = xcb_get_atom_name_reply(c, atomc, 0);
	if(!atomr)
		return 0;
	namelen = xcb_get_atom_name_name_length(atomr);
	if(namelen > sizeof(buf))
		namelen = sizeof(buf);
	*lengthp = namelen;
	memcpy(buf, xcb_get_atom_name_name(atomr), namelen);
	*namep = buf;
	free(atomr);
	return 1;
}

static char *makename(const char *fmt, ...)
{
	char *ret;
	int n;
	va_list ap;

#ifndef HAVE_VASPRINTF
	char *np;
	int size = 64;

	/* First allocate 'size' bytes, should be enough usually */
	if((ret = malloc(size)) == NULL)
		return NULL;

	while(1)
	{
		va_start(ap, fmt);
		n = vsnprintf(ret, size, fmt, ap);
		va_end(ap);

		if(n < 0)
			return NULL;

		if(n < size)
			return ret;

		size = n + 1;
		if((np = realloc(ret, size)) == NULL)
		{
			free(ret);
			return NULL;
		}

		ret = np;
	}
#else
	va_start(ap, fmt);
	n = vasprintf(&ret, fmt, ap);
	va_end(ap);

	if(n < 0)
		return NULL;

	return ret;
#endif
}

char *xcb_atom_name_by_screen(const char *base, uint8_t screen)
{
	return makename("%s_S%u", base, screen);
}

char *xcb_atom_name_by_resource(const char *base, uint32_t resource)
{
	return makename("%s_R%08X", base, resource);
}

char *xcb_atom_name_unique(const char *base, uint32_t id)
{
	if(base)
		return makename("%s_U%lu", base, id);
	else
		return makename("U%lu", id);
}