From e5897221234fbd68af70ceb9dd0416eadb90bacb Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 19 Apr 2006 11:50:24 +0000 Subject: [PATCH] * Moved the technical discussion on S-Lang's palette optimisation from NOTES to tools/optipal.c. --- NOTES | 75 ------------------------------------------------- tools/optipal.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 72 insertions(+), 76 deletions(-) diff --git a/NOTES b/NOTES index e02448e..289dd0d 100644 --- a/NOTES +++ b/NOTES @@ -115,81 +115,6 @@ $Id$ works on gnome-terminal, xterm, pterm, aterm/wterm/rxvt, console doesn't work on konsole - o S-Lang: - - 256 character pairs are definable, but only 128 can be used. This is - because slsmg.c's This_Color variable uses its 8th bit to indicate an - alternate character set. Replacing a few 0x7F with 0xFF in sldisply.c - works around the problem but gets rid of the alternate charset. - - We can work around this problem. See this usage grid: - - bg 1 1 1 1 1 1 - fg 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 - - 0 (black) C C C C C C F B c c c c c c F - 1 (blue) A h D h D i f C C h E h E k g - 2 (green) A h D h i D f C h C E h k E g - 3 (cyan) A D D i h h f C E E C k h h g - 4 (red) A h h i D D f C h h k C E E g - 5 (magenta) A D i h D h f C E k h E C h g - 6 (brown) A i D h D h f C k E h E h C g - 7 (light gray) A F a a a a a B C C C C C C B - - 8 (dark gray) A C C C C C C B d d d d d d F - 9 (light blue) A C h E h E j C e h D h D l C - 10 (light green) A h C E h j E C e h D h l D C - 11 (light cyan) A E E C j h h C e D D l h h C - 12 (light red) A h h j C E E C e h h l D D C - 13 (light magenta) A E j h E C h C e D l h D h C - 14 (yellow) A j E h E h C C e l D h D h C - 15 (white) A F b b b b b B F C C C C C C - - ' ': useless colour pairs that can be emulated by printing a space in - any other colour pair that has the same background - 'A': black background colour pairs that are needed for the old renderer - 'B': gray combinations used for grayscale dithering - 'C': 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) - 'D': next colour combinations for hue dithering (magenta/blue, blue/green - and so on) - 'E': next colour combinations for hue/value dithering (blue/lightgreen, - green/lightblue and so on) - 'F': black on light gray, black on white, white on dark gray, dark gray - on white, white on blue, light gray on blue (chosen arbitrarily) - - 'A': 15 colour pairs - 'A'+'B': 20 colour pairs - 'A'+'B'+'C': 74 colour pairs - 'A'+'B'+'C'+'D': 98 colour pairs - 'A'+'B'+'C'+'D'+'E': 122 colour pairs - 'A'+'B'+'C'+'D'+'E'+'F': 128 colour pairs - - The remaining slightly important colour pairs are: - - 'a': light gray on dark colour: emulate with light colour on dark colour - 'b': white on dark colour: emulate with light gray on light colour - 'c': black on light colour: emulate with dark gray on dark colour - 'd': dark gray on light colour: emulate with dark colour on light colour - 'e': light colour on dark gray: emulate with dark colour on dark gray - 'f': dark colour on light gray: emulate with light colour on light gray - 'g': dark colour on white: emulate with light colour on white - - And now the seldom used pairs: - - 'h': 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 - - And the almost never used pairs: - - 'i': dark opposite on dark: emulate with dark opposite on black - 'j': light opposite on dark: emulate with light opposite on black - 'k': dark opposite on light: emulate with black on dark - 'l': light opposite on light: emulate with white on light - o MS-DOS: all bright colours, bright backgrounds, and bright combinations work using . No need to kludge anything. diff --git a/tools/optipal.c b/tools/optipal.c index f7ec56d..047689e 100644 --- a/tools/optipal.c +++ b/tools/optipal.c @@ -88,7 +88,78 @@ int main(void) } /* - * XXX: See the NOTES file for what follows + * 256 character pairs are definable, but only 128 can be used. This is + * because slsmg.c's This_Color variable uses its 8th bit to indicate an + * alternate character set. Replacing a few 0x7F with 0xFF in sldisply.c + * works around the problem but gets rid of the alternate charset. + * + * We can work around this problem. See this usage grid: + * + * bg 1 1 1 1 1 1 + * fg 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 + * + * 0 (black) C C C C C C F B c c c c c c F + * 1 (blue) A h D h D i f C C h E h E k g + * 2 (green) A h D h i D f C h C E h k E g + * 3 (cyan) A D D i h h f C E E C k h h g + * 4 (red) A h h i D D f C h h k C E E g + * 5 (magenta) A D i h D h f C E k h E C h g + * 6 (brown) A i D h D h f C k E h E h C g + * 7 (light gray) A F a a a a a B C C C C C C B + * + * 8 (dark gray) A C C C C C C B d d d d d d F + * 9 (light blue) A C h E h E j C e h D h D l C + * 10 (light green) A h C E h j E C e h D h l D C + * 11 (light cyan) A E E C j h h C e D D l h h C + * 12 (light red) A h h j C E E C e h h l D D C + * 13 (light magenta) A E j h E C h C e D l h D h C + * 14 (yellow) A j E h E h C C e l D h D h C + * 15 (white) A F b b b b b B F C C C C C C + * + * ' ': useless colour pairs that can be emulated by printing a space in + * any other colour pair that has the same background + * 'A': black background colour pairs that are needed for the old renderer + * 'B': gray combinations used for grayscale dithering + * 'C': 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) + * 'D': next colour combinations for hue dithering (magenta/blue, blue/green + * and so on) + * 'E': next colour combinations for hue/value dithering (blue/lightgreen, + * green/lightblue and so on) + * 'F': black on light gray, black on white, white on dark gray, dark gray + * on white, white on blue, light gray on blue (chosen arbitrarily) + * + * 'A': 15 colour pairs + * 'A'+'B': 20 colour pairs + * 'A'+'B'+'C': 74 colour pairs + * 'A'+'B'+'C'+'D': 98 colour pairs + * 'A'+'B'+'C'+'D'+'E': 122 colour pairs + * 'A'+'B'+'C'+'D'+'E'+'F': 128 colour pairs + * + * The remaining slightly important colour pairs are: + * + * 'a': light gray on dark colour: emulate with light colour on dark colour + * 'b': white on dark colour: emulate with light gray on light colour + * 'c': black on light colour: emulate with dark gray on dark colour + * 'd': dark gray on light colour: emulate with dark colour on light colour + * 'e': light colour on dark gray: emulate with dark colour on dark gray + * 'f': dark colour on light gray: emulate with light colour on light gray + * 'g': dark colour on white: emulate with light colour on white + * + * And now the seldom used pairs: + * + * 'h': 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 + * + * And the almost never used pairs: + * + * 'i': dark opposite on dark: emulate with dark opposite on black + * 'j': light opposite on dark: emulate with light opposite on black + * 'k': dark opposite on light: emulate with black on dark + * 'l': light opposite on light: emulate with white on light */ static void base_colors(void)