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