bitmask lookup table creation

Kaleb Keithley kaleb at mars.jpl.nasa.gov
Thu Jun 7 02:12:47 AEST 1990


Don't like to follow up my own article, but:

In article I wrote:
>I want to create the following bitmask lookup table:
>    unsigned short masks[] = {
>        0x0000, 0x0001, 0x0003, 0x0007,
>        0x000F, 0x001F, 0x003F, 0x007F,
>        0x00FF, 0x01FF, 0x03FF, 0x07FF,
>        0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF 
>    };
>
>in a machine independent way.
>
>In /usr/include/values.h, the following are #defined:
>#define BITS(type)  (BITSPERBYTE * (int)sizeof(type)
>#define HIBITS  ((short)(1 << BITS(short) - 1))
>#define MAXSHORT    ((short)~HIBITS)
>
>which are 0x8000 and 0x7FFF respectively on my machine, which happens to
>be a Sun Sparc.
>
>It is nearly trivial to do it at run-time, and the above definitely works
>on my Sun.  Does anyone have any neat trick to generate this table at 
>compile time in such a way as to be completely machine independent?

Well, so far I got two answers, one said the above was correct, the other
told me to look at X Window Server code.

I don't want to belittle the person who told me the above was correct, but...
I looked at the MIT server code, and found that it makes two distinctions: 
If you have a VAX or a 386 then BITMAP_BIT_ORDER is defined as LSBFirst, 
otherwise it's MSBFirst.  Then there are two versions of the table, much 
like the one I have above, one for MSBFirst, one for LSBFirst.  I could do 
this, and in fact, probably will, but, the question still remains; Is there 
a way, using the three defined macros, to generate the correct table at 
compile time?


kaleb at thyme.jpl.nasa.gov            Jet Propeller Labs
Kaleb Keithley

"So that's what an invisible barrier looks like"



More information about the Comp.lang.c mailing list