Subj : Color parsing
To : Kirkman
From : Digital Man
Date : Sun Dec 03 2017 01:12 pm
Re: Color parsing
By: Kirkman to echicken on Sun Dec 03 2017 02:36 pm
> Re: Color parsing
> By: echicken to Kirkman on Sun Dec 03 2017 03:28 pm
>
> ec> The foreground colour is in the lower three bits of the byte.
> ec> var fg = attr&7; // 7 is essentially (1<<0)|(1<<1)|(1<<2)
>
> Wow, that was fast! Thanks, echicken.
>
> I was looking around online and experimenting with a bitwise calculator, and
> I ended up doing something like this:
>
> // Use bitwise AND with a mask to get the four rightmost bits.
> // dec 15 | bin 00001111 | hex 0xf
> var fg = theAttr & 15;
>
> // Use bitwise AND with a mask to get the four leftmost bits.
> // dec 240 | bin 11110000 | hex 0xf0
> var bg = theAttr & 240;
>
> I think it's working, but I have other issues in my code to sort out before
> I can say 100%.
>
> Then I'm doing fg = fg & 7 to change high colors into low equivalents.
It's a little odd to be using decimal numbers in bit-wise operations (e.g. 0xf0
makes more sense than 240, given the context).
But I would usually use macros or constants for these magic numbers anyway.
Like so (in JS):
const BG_COLOR = 0x70;
const FG_COLOR = 0x07;
The BLINK and HIGH bit values are already defined in sbbsdefs.js (along with
all the color bit values).
Anyway, so parsing the foreground color with the high/bright flag:
var fg_color = attr & (FG_COLOR | HIGH);
var bg_color = attr & BG_COLOR; // exclude the blink flag
To convert the background color to a foreground color, just shift-right 4-bits.
var color = bg_color >> 4; // move the upper nibble to the lower
Then you could compare 'color' against the color values defined in sbbsdefs.js
(e.g. RED, BLUE, etc.).
To convert a foreground color to a background color, shift-left:
var bg_color = (color & FG_COLOR) << 4;
If you know that "color" won't include the HIGH flag or any other values than
0-7, then you don't need the "& FG_COLOR" part.
And the reason for all this madness?
https://en.wikipedia.org/wiki/Color_Graphics_Adapter
:-)
digital man
Synchronet "Real Fact" #64:
Synchronet PCMS (introduced w/v2.0) is Programmable Command and Menu Structure.
Norco, CA WX: 67.9�F, 56.0% humidity, 0 mph ESE wind, 0.00 inches rain/24hrs
---
� Synchronet � Vertrauen � Home of Synchronet � [vert/cvs/bbs].synchro.net