This commit was manufactured by cvs2svn to create tag 'TMUX_1_2'.
[tmux.git] / colour.c
blobd4894c5061262c1b24b5fc3a8b8d218d6bd37cd7
1 /* $Id: colour.c,v 1.7 2009-09-11 14:13:52 tcunha Exp $ */
3 /*
4 * Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
15 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
16 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 #include <sys/types.h>
21 #include <stdlib.h>
22 #include <string.h>
24 #include "tmux.h"
27 * Colour to string conversion functions. Bit 8 of the colour means it is one
28 * of the 256 colour palette.
31 void
32 colour_set_fg(struct grid_cell *gc, int c)
34 if (c & 0x100)
35 gc->flags |= GRID_FLAG_FG256;
36 gc->fg = c;
39 void
40 colour_set_bg(struct grid_cell *gc, int c)
42 if (c & 0x100)
43 gc->flags |= GRID_FLAG_BG256;
44 gc->bg = c;
47 const char *
48 colour_tostring(int c)
50 static char s[32];
52 if (c & 0x100) {
53 xsnprintf(s, sizeof s, "colour%u", c & ~0x100);
54 return (s);
57 switch (c) {
58 case 0:
59 return ("black");
60 case 1:
61 return ("red");
62 case 2:
63 return ("green");
64 case 3:
65 return ("yellow");
66 case 4:
67 return ("blue");
68 case 5:
69 return ("magenta");
70 case 6:
71 return ("cyan");
72 case 7:
73 return ("white");
74 case 8:
75 return ("default");
77 return (NULL);
80 int
81 colour_fromstring(const char *s)
83 const char *errstr;
84 int n;
86 if (strncasecmp(s, "colour", (sizeof "colour") - 1) == 0) {
87 n = strtonum(s + (sizeof "colour") - 1, 0, 255, &errstr);
88 if (errstr != NULL)
89 return (-1);
90 return (n | 0x100);
93 if (strcasecmp(s, "black") == 0 || (s[0] == '0' && s[1] == '\0'))
94 return (0);
95 if (strcasecmp(s, "red") == 0 || (s[0] == '1' && s[1] == '\0'))
96 return (1);
97 if (strcasecmp(s, "green") == 0 || (s[0] == '2' && s[1] == '\0'))
98 return (2);
99 if (strcasecmp(s, "yellow") == 0 || (s[0] == '3' && s[1] == '\0'))
100 return (3);
101 if (strcasecmp(s, "blue") == 0 || (s[0] == '4' && s[1] == '\0'))
102 return (4);
103 if (strcasecmp(s, "magenta") == 0 || (s[0] == '5' && s[1] == '\0'))
104 return (5);
105 if (strcasecmp(s, "cyan") == 0 || (s[0] == '6' && s[1] == '\0'))
106 return (6);
107 if (strcasecmp(s, "white") == 0 || (s[0] == '7' && s[1] == '\0'))
108 return (7);
109 if (strcasecmp(s, "default") == 0 || (s[0] == '8' && s[1] == '\0'))
110 return (8);
111 return (-1);
114 u_char
115 colour_256to16(u_char c)
117 static const u_char table[256] = {
118 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
119 0, 4, 4, 4, 12, 12, 2, 6, 4, 4, 12, 12, 2, 2, 6, 4,
120 12, 12, 2, 2, 2, 6, 12, 12, 10, 10, 10, 10, 14, 12, 10, 10,
121 10, 10, 10, 14, 1, 5, 4, 4, 12, 12, 3, 8, 4, 4, 12, 12,
122 2, 2, 6, 4, 12, 12, 2, 2, 2, 6, 12, 12, 10, 10, 10, 10,
123 14, 12, 10, 10, 10, 10, 10, 14, 1, 1, 5, 4, 12, 12, 1, 1,
124 5, 4, 12, 12, 3, 3, 8, 4, 12, 12, 2, 2, 2, 6, 12, 12,
125 10, 10, 10, 10, 14, 12, 10, 10, 10, 10, 10, 14, 1, 1, 1, 5,
126 12, 12, 1, 1, 1, 5, 12, 12, 1, 1, 1, 5, 12, 12, 3, 3,
127 3, 7, 12, 12, 10, 10, 10, 10, 14, 12, 10, 10, 10, 10, 10, 14,
128 9, 9, 9, 9, 13, 12, 9, 9, 9, 9, 13, 12, 9, 9, 9, 9,
129 13, 12, 9, 9, 9, 9, 13, 12, 11, 11, 11, 11, 7, 12, 10, 10,
130 10, 10, 10, 14, 9, 9, 9, 9, 9, 13, 9, 9, 9, 9, 9, 13,
131 9, 9, 9, 9, 9, 13, 9, 9, 9, 9, 9, 13, 9, 9, 9, 9,
132 9, 13, 11, 11, 11, 11, 11, 15, 0, 0, 0, 0, 0, 0, 8, 8,
133 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 15, 15, 15, 15, 15, 15
136 return (table[c]);
139 u_char
140 colour_256to88(u_char c)
142 static const u_char table[256] = {
143 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
144 16, 17, 17, 18, 18, 19, 20, 21, 21, 22, 22, 23, 20, 21, 21, 22,
145 22, 23, 24, 25, 25, 26, 26, 27, 24, 25, 25, 26, 26, 27, 28, 29,
146 29, 30, 30, 31, 32, 33, 33, 34, 34, 35, 36, 37, 37, 38, 38, 39,
147 36, 37, 37, 38, 38, 39, 40, 41, 41, 42, 42, 43, 40, 41, 41, 42,
148 42, 43, 44, 45, 45, 46, 46, 47, 32, 33, 33, 34, 34, 35, 36, 37,
149 37, 38, 38, 39, 36, 37, 37, 38, 38, 39, 40, 41, 41, 42, 42, 43,
150 40, 41, 41, 42, 42, 43, 44, 45, 45, 46, 46, 47, 48, 49, 49, 50,
151 50, 51, 52, 53, 53, 54, 54, 55, 52, 53, 53, 54, 54, 55, 56, 57,
152 57, 58, 58, 59, 56, 57, 57, 58, 58, 59, 60, 61, 61, 62, 62, 63,
153 48, 49, 49, 50, 50, 51, 52, 53, 53, 54, 54, 55, 52, 53, 53, 54,
154 54, 55, 56, 57, 57, 58, 58, 59, 56, 57, 57, 58, 58, 59, 60, 61,
155 61, 62, 62, 63, 64, 65, 65, 66, 66, 67, 68, 69, 69, 70, 70, 71,
156 68, 69, 69, 70, 70, 71, 72, 73, 73, 74, 74, 75, 72, 73, 73, 74,
157 74, 75, 76, 77, 77, 78, 78, 79, 0, 0, 80, 80, 80, 81, 81, 81,
158 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87
161 return (table[c]);