|
|
@@ -74,7 +74,62 @@ static int ncurses_attr[16*16]; |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(USE_SLANG) |
|
|
|
static int slang_assoc[16*16]; |
|
|
|
/* Tables generated by test/optipal.c */ |
|
|
|
const static int slang_palette[2*16*16] = |
|
|
|
{ |
|
|
|
1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, |
|
|
|
9, 0, 10, 0, 11, 0, 12, 0, 13, 0, 14, 0, 15, 0, 0, 8, |
|
|
|
8, 7, 7, 8, 15, 7, 7, 15, 15, 9, 9, 15, 1, 9, 9, 1, |
|
|
|
7, 9, 9, 7, 8, 1, 1, 8, 0, 1, 15, 10, 10, 15, 2, 10, |
|
|
|
10, 2, 7, 10, 10, 7, 8, 2, 2, 8, 0, 2, 15, 11, 11, 15, |
|
|
|
3, 11, 11, 3, 7, 11, 11, 7, 8, 3, 3, 8, 0, 3, 15, 12, |
|
|
|
12, 15, 4, 12, 12, 4, 7, 12, 12, 7, 8, 4, 4, 8, 0, 4, |
|
|
|
15, 13, 13, 15, 5, 13, 13, 5, 7, 13, 13, 7, 8, 5, 5, 8, |
|
|
|
0, 5, 15, 14, 14, 15, 6, 14, 14, 6, 7, 14, 14, 7, 8, 6, |
|
|
|
6, 8, 0, 6, 4, 6, 6, 4, 12, 14, 14, 12, 6, 2, 2, 6, |
|
|
|
14, 10, 10, 14, 2, 3, 3, 2, 10, 11, 11, 10, 3, 1, 1, 3, |
|
|
|
11, 9, 9, 11, 1, 5, 5, 1, 9, 13, 13, 9, 5, 4, 4, 5, |
|
|
|
13, 12, 12, 13, 4, 14, 6, 12, 12, 6, 14, 4, 6, 10, 2, 14, |
|
|
|
14, 2, 10, 6, 2, 11, 3, 10, 10, 3, 11, 2, 3, 9, 1, 11, |
|
|
|
11, 1, 9, 3, 1, 13, 5, 9, 9, 5, 13, 1, 5, 12, 4, 13, |
|
|
|
13, 4, 12, 5, 0, 7, 0, 15, 15, 8, 8, 15, 15, 1, 7, 1, |
|
|
|
1, 6, 2, 5, 3, 4, 4, 3, 5, 2, 6, 1, 0, 0, 1, 1, |
|
|
|
9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 2, 2, 3, 3, |
|
|
|
4, 4, 5, 5, 6, 6, 7, 7, 14, 9, 1, 15, 8, 9, 8, 8, |
|
|
|
9, 9, 1, 7, 0, 9, 9, 8, 6, 9, 13, 10, 2, 15, 8, 10, |
|
|
|
7, 2, 15, 2, 2, 7, 0, 10, 10, 8, 5, 10, 12, 11, 3, 15, |
|
|
|
8, 11, 7, 3, 15, 3, 3, 7, 0, 11, 11, 8, 4, 11, 11, 12, |
|
|
|
4, 15, 8, 12, 7, 4, 15, 4, 4, 7, 0, 12, 12, 8, 3, 12, |
|
|
|
10, 13, 5, 15, 8, 13, 7, 5, 15, 5, 5, 7, 0, 13, 13, 8, |
|
|
|
2, 13, 9, 14, 6, 15, 8, 14, 7, 6, 15, 6, 6, 7, 0, 14, |
|
|
|
14, 8, 1, 14, 5, 6, 2, 4, 13, 14, 10, 12, 4, 2, 3, 6, |
|
|
|
12, 10, 11, 14, 6, 3, 1, 2, 14, 11, 9, 10, 2, 1, 5, 3, |
|
|
|
10, 9, 13, 11, 3, 5, 4, 1, 11, 13, 12, 9, 1, 4, 6, 5, |
|
|
|
9, 12, 14, 13, 5, 14, 2, 12, 13, 6, 10, 4, 4, 10, 3, 14, |
|
|
|
12, 2, 11, 6, 6, 11, 1, 10, 14, 3, 9, 2, 2, 9, 5, 11, |
|
|
|
10, 1, 13, 3, 3, 13, 4, 9, 11, 5, 12, 1, 1, 12, 6, 13, |
|
|
|
9, 4, 14, 5, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, |
|
|
|
}; |
|
|
|
|
|
|
|
const static int slang_assoc[16*16] = |
|
|
|
{ |
|
|
|
134, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, |
|
|
|
28, 135, 214, 86, 219, 91, 133, 127, 26, 23, 240, 112, 245, 117, 141, 126, |
|
|
|
37, 211, 142, 83, 206, 132, 78, 160, 35, 237, 32, 109, 232, 140, 104, 161, |
|
|
|
46, 87, 82, 143, 131, 215, 210, 169, 44, 113, 108, 41, 139, 241, 236, 170, |
|
|
|
55, 222, 203, 130, 144, 94, 75, 178, 53, 248, 229, 138, 50, 120, 101, 179, |
|
|
|
64, 90, 129, 218, 95, 145, 223, 187, 62, 116, 137, 244, 121, 59, 249, 188, |
|
|
|
73, 128, 79, 207, 74, 202, 146, 196, 71, 136, 105, 233, 100, 228, 68, 197, |
|
|
|
122, 153, 162, 171, 180, 189, 198, 147, 16, 25, 34, 43, 52, 61, 70, 18, |
|
|
|
15, 27, 36, 45, 54, 63, 72, 17, 151, 155, 164, 173, 182, 191, 200, 124, |
|
|
|
154, 22, 238, 110, 243, 115, 156, 24, 150, 152, 216, 88, 221, 93, 148, 20, |
|
|
|
163, 235, 31, 107, 230, 165, 102, 33, 159, 213, 250, 85, 208, 157, 80, 29, |
|
|
|
172, 111, 106, 40, 174, 239, 234, 42, 168, 89, 84, 251, 166, 217, 212, 38, |
|
|
|
181, 246, 227, 183, 49, 118, 99, 51, 177, 224, 205, 175, 252, 96, 77, 47, |
|
|
|
190, 114, 192, 242, 119, 58, 247, 60, 186, 92, 184, 220, 97, 253, 225, 56, |
|
|
|
199, 201, 103, 231, 98, 226, 67, 69, 195, 193, 81, 209, 76, 204, 254, 65, |
|
|
|
123, 149, 158, 167, 176, 185, 194, 19, 125, 21, 30, 39, 48, 57, 66, 255, |
|
|
|
}; |
|
|
|
#endif |
|
|
|
|
|
|
|
#if defined(USE_CONIO) |
|
|
@@ -873,160 +928,11 @@ static void slang_init_palette(void) |
|
|
|
SLtt_set_color(i, NULL, slang_colors[fg], slang_colors[bg]); |
|
|
|
} |
|
|
|
#else |
|
|
|
int i, cur = 0; |
|
|
|
|
|
|
|
/* 6 colours in hue order */ |
|
|
|
static const enum caca_color hue_list[] = |
|
|
|
{ |
|
|
|
CACA_COLOR_RED, |
|
|
|
CACA_COLOR_BROWN, |
|
|
|
CACA_COLOR_GREEN, |
|
|
|
CACA_COLOR_CYAN, |
|
|
|
CACA_COLOR_BLUE, |
|
|
|
CACA_COLOR_MAGENTA |
|
|
|
}; |
|
|
|
|
|
|
|
#define SETPAIR(_fg, _bg, _n) \ |
|
|
|
do \ |
|
|
|
{ \ |
|
|
|
int fg = _fg, bg = _bg, n = _n; \ |
|
|
|
SLtt_set_color(n, NULL, slang_colors[fg], slang_colors[bg]); \ |
|
|
|
slang_assoc[fg + 16 * bg] = n; \ |
|
|
|
} \ |
|
|
|
while(0); |
|
|
|
|
|
|
|
/* |
|
|
|
* XXX: See the NOTES file for what follows |
|
|
|
*/ |
|
|
|
|
|
|
|
/* black background colour pairs that are needed for the old renderer */ |
|
|
|
for(i = 1; i < 16; i++) |
|
|
|
SETPAIR(i, CACA_COLOR_BLACK, cur++); |
|
|
|
|
|
|
|
/* gray combinations used for grayscale dithering */ |
|
|
|
SETPAIR(CACA_COLOR_BLACK, CACA_COLOR_DARKGRAY, cur++); |
|
|
|
SETPAIR(CACA_COLOR_DARKGRAY, CACA_COLOR_LIGHTGRAY, cur++); |
|
|
|
SETPAIR(CACA_COLOR_LIGHTGRAY, CACA_COLOR_DARKGRAY, cur++); |
|
|
|
SETPAIR(CACA_COLOR_WHITE, CACA_COLOR_LIGHTGRAY, cur++); |
|
|
|
SETPAIR(CACA_COLOR_LIGHTGRAY, CACA_COLOR_WHITE, cur++); |
|
|
|
|
|
|
|
/* white/light, light/dark, lightgray/light, darkgray/dark, dark/black |
|
|
|
* combinations often used for saturation/value dithering (the two |
|
|
|
* other possible combinations, lightgray/dark and darkgray/light, are |
|
|
|
* not considered here) */ |
|
|
|
for(i = 1; i < 7; i++) |
|
|
|
{ |
|
|
|
SETPAIR(CACA_COLOR_WHITE, i + 8, cur++); |
|
|
|
SETPAIR(i + 8, CACA_COLOR_WHITE, cur++); |
|
|
|
SETPAIR(i, i + 8, cur++); |
|
|
|
SETPAIR(i + 8, i, cur++); |
|
|
|
SETPAIR(CACA_COLOR_LIGHTGRAY, i + 8, cur++); |
|
|
|
SETPAIR(i + 8, CACA_COLOR_LIGHTGRAY, cur++); |
|
|
|
SETPAIR(CACA_COLOR_DARKGRAY, i, cur++); |
|
|
|
SETPAIR(i, CACA_COLOR_DARKGRAY, cur++); |
|
|
|
SETPAIR(CACA_COLOR_BLACK, i, cur++); |
|
|
|
} |
|
|
|
|
|
|
|
/* next colour combinations for hue dithering (magenta/blue, blue/green |
|
|
|
* and so on) */ |
|
|
|
for(i = 0; i < 6; i++) |
|
|
|
{ |
|
|
|
SETPAIR(hue_list[i], hue_list[(i + 1) % 6], cur++); |
|
|
|
SETPAIR(hue_list[(i + 1) % 6], hue_list[i], cur++); |
|
|
|
SETPAIR(hue_list[i] + 8, hue_list[(i + 1) % 6] + 8, cur++); |
|
|
|
SETPAIR(hue_list[(i + 1) % 6] + 8, hue_list[i] + 8, cur++); |
|
|
|
} |
|
|
|
|
|
|
|
/* next colour combinations for hue/value dithering (blue/lightgreen, |
|
|
|
* green/lightblue and so on) */ |
|
|
|
for(i = 0; i < 6; i++) |
|
|
|
{ |
|
|
|
SETPAIR(hue_list[i], hue_list[(i + 1) % 6] + 8, cur++); |
|
|
|
SETPAIR(hue_list[(i + 1) % 6], hue_list[i] + 8, cur++); |
|
|
|
SETPAIR(hue_list[i] + 8, hue_list[(i + 1) % 6], cur++); |
|
|
|
SETPAIR(hue_list[(i + 1) % 6] + 8, hue_list[i], cur++); |
|
|
|
} |
|
|
|
|
|
|
|
/* black on light gray, black on white, white on dark gray, dark gray |
|
|
|
* on white, white on blue, light gray on blue (chosen arbitrarily) */ |
|
|
|
SETPAIR(CACA_COLOR_BLACK, CACA_COLOR_LIGHTGRAY, cur++); |
|
|
|
SETPAIR(CACA_COLOR_BLACK, CACA_COLOR_WHITE, cur++); |
|
|
|
SETPAIR(CACA_COLOR_WHITE, CACA_COLOR_DARKGRAY, cur++); |
|
|
|
SETPAIR(CACA_COLOR_DARKGRAY, CACA_COLOR_WHITE, cur++); |
|
|
|
SETPAIR(CACA_COLOR_WHITE, CACA_COLOR_BLUE, cur++); |
|
|
|
SETPAIR(CACA_COLOR_LIGHTGRAY, CACA_COLOR_BLUE, cur++); |
|
|
|
|
|
|
|
/* |
|
|
|
* Now the possibly emulated pairs |
|
|
|
*/ |
|
|
|
|
|
|
|
/* light gray on dark colour: emulate with light colour on dark colour |
|
|
|
* white on dark colour: emulate with light gray on light colour |
|
|
|
* black on light colour: emulate with dark gray on dark colour |
|
|
|
* dark gray on light colour: emulate with dark colour on light colour |
|
|
|
* light colour on dark gray: emulate with dark colour on dark gray |
|
|
|
* dark colour on light gray: emulate with light colour on light gray |
|
|
|
* dark colour on white: emulate with light colour on white */ |
|
|
|
for(i = 1; i < 7; i++) |
|
|
|
{ |
|
|
|
if(i != CACA_COLOR_BLUE) |
|
|
|
{ |
|
|
|
SETPAIR(CACA_COLOR_LIGHTGRAY, i, 128 + |
|
|
|
slang_assoc[i + 8 + 16 * i]); |
|
|
|
SETPAIR(CACA_COLOR_WHITE, i, 128 + |
|
|
|
slang_assoc[CACA_COLOR_LIGHTGRAY + 16 * (i + 8)]); |
|
|
|
} |
|
|
|
SETPAIR(CACA_COLOR_BLACK, i + 8, |
|
|
|
128 + slang_assoc[CACA_COLOR_DARKGRAY + 16 * i]); |
|
|
|
SETPAIR(CACA_COLOR_DARKGRAY, i + 8, |
|
|
|
128 + slang_assoc[i + 16 * (i + 8)]); |
|
|
|
SETPAIR(i + 8, CACA_COLOR_DARKGRAY, |
|
|
|
128 + slang_assoc[i + 16 * CACA_COLOR_DARKGRAY]); |
|
|
|
SETPAIR(i, CACA_COLOR_LIGHTGRAY, |
|
|
|
128 + slang_assoc[i + 8 + 16 * CACA_COLOR_LIGHTGRAY]); |
|
|
|
SETPAIR(i, CACA_COLOR_WHITE, |
|
|
|
128 + slang_assoc[i + 8 + 16 * CACA_COLOR_WHITE]); |
|
|
|
} |
|
|
|
|
|
|
|
/* 120 degree hue pairs can be emulated as well; for instance blue on |
|
|
|
* red can be emulated using magenta on red, and blue on green using |
|
|
|
* cyan on green */ |
|
|
|
for(i = 0; i < 6; i++) |
|
|
|
{ |
|
|
|
SETPAIR(hue_list[(i + 2) % 6], hue_list[i], |
|
|
|
128 + slang_assoc[hue_list[(i + 1) % 6] + 16 * hue_list[i]]); |
|
|
|
SETPAIR(hue_list[(i + 2) % 6] + 8, hue_list[i] + 8, |
|
|
|
128 + slang_assoc[hue_list[(i + 1) % 6] + 16 * hue_list[i] + 136]); |
|
|
|
SETPAIR(hue_list[(i + 2) % 6] + 8, hue_list[i], |
|
|
|
128 + slang_assoc[hue_list[(i + 1) % 6] + 16 * hue_list[i] + 8]); |
|
|
|
SETPAIR(hue_list[(i + 2) % 6], hue_list[i] + 8, |
|
|
|
128 + slang_assoc[hue_list[(i + 1) % 6] + 16 * hue_list[i] + 128]); |
|
|
|
|
|
|
|
SETPAIR(hue_list[(i + 4) % 6], hue_list[i], |
|
|
|
128 + slang_assoc[hue_list[(i + 5) % 6] + 16 * hue_list[i]]); |
|
|
|
SETPAIR(hue_list[(i + 4) % 6] + 8, hue_list[i] + 8, |
|
|
|
128 + slang_assoc[hue_list[(i + 5) % 6] + 16 * hue_list[i] + 136]); |
|
|
|
SETPAIR(hue_list[(i + 4) % 6] + 8, hue_list[i], |
|
|
|
128 + slang_assoc[hue_list[(i + 5) % 6] + 16 * hue_list[i] + 8]); |
|
|
|
SETPAIR(hue_list[(i + 4) % 6], hue_list[i] + 8, |
|
|
|
128 + slang_assoc[hue_list[(i + 5) % 6] + 16 * hue_list[i] + 128]); |
|
|
|
} |
|
|
|
int i; |
|
|
|
|
|
|
|
/* dark opposite on dark: emulate with dark opposite on black |
|
|
|
* light opposite on dark: emulate with light opposite on black |
|
|
|
* dark opposite on light: emulate with black on dark |
|
|
|
* light opposite on light: emulate with white on light */ |
|
|
|
for(i = 0; i < 6; i++) |
|
|
|
{ |
|
|
|
SETPAIR(hue_list[i], hue_list[(i + 3) % 6], |
|
|
|
128 + slang_assoc[hue_list[i] + 16 * CACA_COLOR_BLACK]); |
|
|
|
SETPAIR(hue_list[i] + 8, hue_list[(i + 3) % 6], |
|
|
|
128 + slang_assoc[hue_list[i] + 8 + 16 * CACA_COLOR_BLACK]); |
|
|
|
SETPAIR(hue_list[(i + 3) % 6], hue_list[i] + 8, |
|
|
|
128 + slang_assoc[CACA_COLOR_BLACK + 16 * hue_list[i]]); |
|
|
|
SETPAIR(hue_list[(i + 3) % 6] + 8, hue_list[i] + 8, |
|
|
|
128 + slang_assoc[CACA_COLOR_WHITE + 16 * (hue_list[i] + 8)]); |
|
|
|
} |
|
|
|
for(i = 0; i < 16 * 16; i++) |
|
|
|
SLtt_set_color(i, NULL, slang_colors[slang_palette[i * 2]], |
|
|
|
slang_colors[slang_palette[i * 2 + 1]]); |
|
|
|
#endif |
|
|
|
} |
|
|
|
#endif /* USE_SLANG */ |
|
|
|