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