Instead of COLOUR0_PRIMARY et al. expanding directly to X11 colour
names, allow the process to be hooked to generate other forms of
colour definitions.
The ewmhicon test program is adapted to use this to generate its
colourmap. This also avoids some apparently nonportable C macro
usage, as preprocessing the following code:
#define A(x) x
#define B(x) x
#define C (x)
A(B C)
expands to x (the desired result) with GCC but B(x) on HP-UX cc.
enum { COLOUR_PRIMARY, COLOUR_DARK, COLOUR_LIGHT, COLOUR_MAX };
enum { COLOUR_PRIMARY, COLOUR_DARK, COLOUR_LIGHT, COLOUR_MAX };
-#define COLOUR_X11_(r, g, b) "#"#r#g#b
-#define COLOUR_X11(c) COLOUR_X11_ c
+#ifndef COLOUR_SYSTEM
+# define COLOUR_SYSTEM X11
+#endif
+
+#define COLOUR_SYS_X11(r, g, b) "#"#r#g#b
+
+#define COLOUR_SYS__(mode, c) COLOUR_SYS_##mode c
+#define COLOUR_SYS_(mode, c) COLOUR_SYS__(mode, c)
+#define COLOUR_SYS(c) COLOUR_SYS_(COLOUR_SYSTEM, c)
/* red */
#define COLOUR0_PRIMARY_RGB_ (8d, 2e, 28)
#define COLOUR0_LIGHT_RGB_ (a1, 48, 42)
#define COLOUR0_DARK_RGB_ (6a, 1b, 17)
/* red */
#define COLOUR0_PRIMARY_RGB_ (8d, 2e, 28)
#define COLOUR0_LIGHT_RGB_ (a1, 48, 42)
#define COLOUR0_DARK_RGB_ (6a, 1b, 17)
-#define COLOUR0_PRIMARY COLOUR_X11(COLOUR0_PRIMARY_RGB_)
-#define COLOUR0_LIGHT COLOUR_X11(COLOUR0_LIGHT_RGB_)
-#define COLOUR0_DARK COLOUR_X11(COLOUR0_DARK_RGB_)
+#define COLOUR0_PRIMARY COLOUR_SYS(COLOUR0_PRIMARY_RGB_)
+#define COLOUR0_LIGHT COLOUR_SYS(COLOUR0_LIGHT_RGB_)
+#define COLOUR0_DARK COLOUR_SYS(COLOUR0_DARK_RGB_)
/* orange */
#define COLOUR1_PRIMARY_RGB_ (b4, 6e, 28)
#define COLOUR1_LIGHT_RGB_ (c7, 90, 4f)
#define COLOUR1_DARK_RGB_ (92, 4a, 16)
/* orange */
#define COLOUR1_PRIMARY_RGB_ (b4, 6e, 28)
#define COLOUR1_LIGHT_RGB_ (c7, 90, 4f)
#define COLOUR1_DARK_RGB_ (92, 4a, 16)
-#define COLOUR1_PRIMARY COLOUR_X11(COLOUR1_PRIMARY_RGB_)
-#define COLOUR1_LIGHT COLOUR_X11(COLOUR1_LIGHT_RGB_)
-#define COLOUR1_DARK COLOUR_X11(COLOUR1_DARK_RGB_)
+#define COLOUR1_PRIMARY COLOUR_SYS(COLOUR1_PRIMARY_RGB_)
+#define COLOUR1_LIGHT COLOUR_SYS(COLOUR1_LIGHT_RGB_)
+#define COLOUR1_DARK COLOUR_SYS(COLOUR1_DARK_RGB_)
/* yellow */
#define COLOUR2_PRIMARY_RGB_ (d8, b7, 40)
#define COLOUR2_LIGHT_RGB_ (e2, c6, 5d)
#define COLOUR2_DARK_RGB_ (c5, 9f, 39)
/* yellow */
#define COLOUR2_PRIMARY_RGB_ (d8, b7, 40)
#define COLOUR2_LIGHT_RGB_ (e2, c6, 5d)
#define COLOUR2_DARK_RGB_ (c5, 9f, 39)
-#define COLOUR2_PRIMARY COLOUR_X11(COLOUR2_PRIMARY_RGB_)
-#define COLOUR2_LIGHT COLOUR_X11(COLOUR2_LIGHT_RGB_)
-#define COLOUR2_DARK COLOUR_X11(COLOUR2_DARK_RGB_)
+#define COLOUR2_PRIMARY COLOUR_SYS(COLOUR2_PRIMARY_RGB_)
+#define COLOUR2_LIGHT COLOUR_SYS(COLOUR2_LIGHT_RGB_)
+#define COLOUR2_DARK COLOUR_SYS(COLOUR2_DARK_RGB_)
/* green */
#define COLOUR3_PRIMARY_RGB_ (28, 64, 28)
#define COLOUR3_DARK_RGB_ (19, 47, 19)
#define COLOUR3_LIGHT_RGB_ (4e, 87, 4e)
/* green */
#define COLOUR3_PRIMARY_RGB_ (28, 64, 28)
#define COLOUR3_DARK_RGB_ (19, 47, 19)
#define COLOUR3_LIGHT_RGB_ (4e, 87, 4e)
-#define COLOUR3_PRIMARY COLOUR_X11(COLOUR3_PRIMARY_RGB_)
-#define COLOUR3_LIGHT COLOUR_X11(COLOUR3_LIGHT_RGB_)
-#define COLOUR3_DARK COLOUR_X11(COLOUR3_DARK_RGB_)
+#define COLOUR3_PRIMARY COLOUR_SYS(COLOUR3_PRIMARY_RGB_)
+#define COLOUR3_LIGHT COLOUR_SYS(COLOUR3_LIGHT_RGB_)
+#define COLOUR3_DARK COLOUR_SYS(COLOUR3_DARK_RGB_)
/* blue */
#define COLOUR4_PRIMARY_RGB_ (00, 34, 71)
#define COLOUR4_DARK_RGB_ (00, 1f, 4f)
#define COLOUR4_LIGHT_RGB_ (00, 52, 8b)
/* blue */
#define COLOUR4_PRIMARY_RGB_ (00, 34, 71)
#define COLOUR4_DARK_RGB_ (00, 1f, 4f)
#define COLOUR4_LIGHT_RGB_ (00, 52, 8b)
-#define COLOUR4_PRIMARY COLOUR_X11(COLOUR4_PRIMARY_RGB_)
-#define COLOUR4_LIGHT COLOUR_X11(COLOUR4_LIGHT_RGB_)
-#define COLOUR4_DARK COLOUR_X11(COLOUR4_DARK_RGB_)
+#define COLOUR4_PRIMARY COLOUR_SYS(COLOUR4_PRIMARY_RGB_)
+#define COLOUR4_LIGHT COLOUR_SYS(COLOUR4_LIGHT_RGB_)
+#define COLOUR4_DARK COLOUR_SYS(COLOUR4_DARK_RGB_)
/* white */
#define COLOUR5_PRIMARY_RGB_ (dc, dc, dc)
#define COLOUR5_LIGHT_RGB_ (ea, ea, ea)
#define COLOUR5_DARK_RGB_ (c0, c0, c0)
/* white */
#define COLOUR5_PRIMARY_RGB_ (dc, dc, dc)
#define COLOUR5_LIGHT_RGB_ (ea, ea, ea)
#define COLOUR5_DARK_RGB_ (c0, c0, c0)
-#define COLOUR5_PRIMARY COLOUR_X11(COLOUR5_PRIMARY_RGB_)
-#define COLOUR5_LIGHT COLOUR_X11(COLOUR5_LIGHT_RGB_)
-#define COLOUR5_DARK COLOUR_X11(COLOUR5_DARK_RGB_)
+#define COLOUR5_PRIMARY COLOUR_SYS(COLOUR5_PRIMARY_RGB_)
+#define COLOUR5_LIGHT COLOUR_SYS(COLOUR5_LIGHT_RGB_)
+#define COLOUR5_DARK COLOUR_SYS(COLOUR5_DARK_RGB_)
-#define PASTE(a, b) a ## b
-#define INDIR(a) a
-
#define S8TO16(x) ((x) * 0xfffful / 0xff)
#define S8TO16(x) ((x) * 0xfffful / 0xff)
-#define RGB8_(r, g, b) { \
- 0xff000000 | (r << 16) | (g << 8) | b, \
- S8TO16(r), S8TO16(g), S8TO16(b) }
+#define RGB8(r, g, b) { \
+ 0xff000000 | (r << 16) | (g << 8) | b, \
+ S8TO16(r), S8TO16(g), S8TO16(b) }
+
+#define COLOUR_SYS_EWMHICON(r, g, b) \
+ RGB8(0x ## r ## ul, 0x ## g ## ul, 0x ## b ## ul)
-#define RGB8(r, g, b) RGB8_(0x ## r ## ul, 0x ## g ## ul, 0x ## b ## ul)
+#undef COLOUR_SYSTEM
+#define COLOUR_SYSTEM EWMHICON
-#define COLOURTAB(n) { \
- INDIR(RGB8 PASTE(COLOUR ## n, _PRIMARY_RGB_)), \
- INDIR(RGB8 PASTE(COLOUR ## n, _DARK_RGB_)), \
- INDIR(RGB8 PASTE(COLOUR ## n, _LIGHT_RGB_)) }
+#define COLOURTAB_(n) { n ## _PRIMARY, n ## _DARK, n ## _LIGHT }
+#define COLOURTAB(n) COLOURTAB_(COLOUR ## n)
static const XColor colours[7][3] = {
{
static const XColor colours[7][3] = {
{