Beispiel #1
0
int main ()
{
  if (div1 (-(1 << 7)) != 1 << 7)
    abort ();
  if (div2 (-(1 << 15)) != 1 << 15)
    abort ();
  if (div3 (-(1 << 7), -1) != 1 << 7)
    abort ();
  if (div4 (-(1 << 15), -1) != 1 << 15)
    abort ();
  if (mod1 (-(1 << 7)) != 0)
    abort ();
  if (mod2 (-(1 << 15)) != 0)
    abort ();
  if (mod3 (-(1 << 7), -1) != 0)
    abort ();
  if (mod4 (-(1 << 15), -1) != 0)
    abort ();
  if (mod5 (0x50000000, 2) != 0)
    abort ();
  if (mod6 (0x50000000, 2) != 0)
    abort ();
  
  exit (0);
}
Beispiel #2
0
/*...sgbm_ht_VGA_2x2    \45\ halftone by 2x2 to default VGA palette:0:*/
void gbm_ht_VGA_2x2(const GBM *gbm, const byte *src24, byte *dest4)
	{
	int stride24 = ((gbm->w * 3 + 3) & ~3);
	int stride4  = ((gbm->w * 4 + 31) / 32) * 4;
	int x, y;

	init();

	src24 -= stride24;
	dest4 -= stride4;

	for ( y = 0; y < gbm->h - 1; y += 2 )
		{
		const byte *src24a = (src24 += stride24);
		const byte *src24b = (src24 += stride24);
		      byte *dest4a = (dest4 += stride4);
		      byte *dest4b = (dest4 += stride4);

		for ( x = 0; x < gbm->w - 1; x += 2 )
/*...s2x2 case:24:*/
{
word r,g,b;
byte inx;
byte *tmp;

b  = *src24a++;	g  = *src24a++;	r  = *src24a++;
b += *src24a++;	g += *src24a++;	r += *src24a++;
b += *src24b++;	g += *src24b++;	r += *src24b++;
b += *src24b++;	g += *src24b++;	r += *src24b++;

inx = takefrom(div4(r), div4(g), div4(b)); *dest4a    = (inx << 4);
b -= gbmrgb_vga[inx].b; g -= gbmrgb_vga[inx].g; r -= gbmrgb_vga[inx].r;

inx = takefrom(div3(r), div3(g), div3(b)); *dest4a++ |= inx;
b -= gbmrgb_vga[inx].b; g -= gbmrgb_vga[inx].g; r -= gbmrgb_vga[inx].r;

inx = takefrom(div2(r), div2(g), div2(b)); *dest4b    = (inx << 4);
b -= gbmrgb_vga[inx].b; g -= gbmrgb_vga[inx].g; r -= gbmrgb_vga[inx].r;

inx = takefrom(r      , g      , b      ); *dest4b++ |= inx;

tmp = dest4a; dest4a = dest4b; dest4b = tmp;
}
/*...e*/
		if ( x < gbm->w )
/*...s1x2 case:24:*/
{
word r,g,b;
byte inx;

b  = *src24a++;	g  = *src24a++;	r  = *src24a;
b += *src24b++;	g += *src24b++;	r += *src24b;

inx = takefrom(div2(r), div2(g), div2(b)); *dest4a = (inx << 4);
b -= gbmrgb_vga[inx].b; g -= gbmrgb_vga[inx].g; r -= gbmrgb_vga[inx].r;

inx = takefrom(r      , g      , b      ); *dest4b = (inx << 4);
}
/*...e*/
		}
	if ( y < gbm->h )
		{
		const byte *src24a = src24 + stride24;
		      byte *dest4a = dest4 + stride4;

		for ( x = 0; x < gbm->w - 1; x += 2 )
/*...s2x1 case:24:*/
{
word r,g,b;
byte inx;

b  = *src24a++;	g  = *src24a++;	r  = *src24a++;
b += *src24a++;	g += *src24a++;	r += *src24a++;

inx = takefrom(div2(r), div2(g), div2(b)); *dest4a = (inx << 4);
b -= gbmrgb_vga[inx].b; g -= gbmrgb_vga[inx].g; r -= gbmrgb_vga[inx].r;

inx = takefrom(r      , g      , b      ); *dest4a++ |= inx;
}
/*...e*/
		if ( x < gbm->w )
/*...s1x1 case:24:*/
{
word r, g, b;
byte inx;

b = *src24a++; g = *src24a++; r = *src24a;
inx = takefrom(r, g, b); *dest4a = (inx << 4);
}
/*...e*/
		}
	}
Beispiel #3
0
void gbm_ht_4R4G4B_2x2(const GBM *gbm, const byte *src24, byte *dest8)
	{
	int stride24 = ((gbm->w * 3 + 3) & ~3);
	int stride8  = ((gbm->w     + 3) & ~3);
	int x, y;

	init();

	src24 -= stride24;
	dest8 -= stride8;

	for ( y = 0; y < gbm->h - 1; y += 2 )
		{
		const byte *src24a = (src24 += stride24);
		const byte *src24b = (src24 += stride24);
		      byte *dest8a = (dest8 += stride8);
		      byte *dest8b = (dest8 += stride8);

		for ( x = 0; x < gbm->w - 1; x += 2 )
/*...s2x2 case:24:*/
{
word r,g,b;
byte ri,gi,bi;
byte *tmp;

b  = *src24a++;	g  = *src24a++;	r  = *src24a++;
b += *src24a++;	g += *src24a++;	r += *src24a++;
b += *src24b++;	g += *src24b++;	r += *src24b++;
b += *src24b++;	g += *src24b++;	r += *src24b++;

bi = index4[div4(b)]; gi = index4[div4(g)]; ri = index4[div4(r)];
*dest8a++ = PIX444(ri,gi,bi);
b -= scale4[bi]; g -= scale8[gi]; r -= scale7[ri];

bi = index4[div3(b)]; gi = index4[div3(g)]; ri = index4[div3(r)];
*dest8a++ = PIX444(ri,gi,bi);
b -= scale4[bi]; g -= scale8[gi]; r -= scale7[ri];

bi = index4[div2(b)]; gi = index4[div2(g)]; ri = index4[div2(r)];
*dest8b++ = PIX444(ri,gi,bi);
b -= scale4[bi]; g -= scale8[gi]; r -= scale7[ri];

bi = index4[b      ]; gi = index4[g      ]; ri = index4[r      ];
*dest8b++ = PIX444(ri,gi,bi);

tmp = dest8a; dest8a = dest8b; dest8b = tmp;
}
/*...e*/
		if ( x < gbm->w )
/*...s1x2 case:24:*/
{
word r,g,b;
byte ri, gi, bi;

b  = *src24a++;	g  = *src24a++;	r  = *src24a;
b += *src24b++;	g += *src24b++;	r += *src24b;

bi = index4[div2(b)]; gi = index4[div2(g)]; ri = index4[div2(r)];
*dest8a = PIX444(ri,gi,bi);
b -= scale4[bi]; g -= scale8[gi]; r -= scale7[ri];

bi = index4[b      ]; gi = index4[g      ]; ri = index4[r      ];
*dest8b = PIX444(ri,gi,bi);
}
/*...e*/
		}
	if ( y < gbm->h )
		{
		const byte *src24a = src24 + stride24;
		      byte *dest8a = dest8 + stride8;

		for ( x = 0; x < gbm->w - 1; x += 2 )
/*...s2x1 case:24:*/
{
word r,g,b;
byte ri, gi, bi;

b  = *src24a++;	g  = *src24a++;	r  = *src24a++;
b += *src24a++;	g += *src24a++;	r += *src24a++;

bi = index4[div2(b)]; gi = index4[div2(g)]; ri = index4[div2(r)];
*dest8a++ = PIX444(ri,gi,bi);
b -= scale4[bi]; g -= scale8[gi]; r -= scale7[ri];

bi = index4[b      ]; gi = index4[g      ]; ri = index4[r      ];
*dest8a++ = PIX444(ri,gi,bi);
}
/*...e*/
		if ( x < gbm->w )
/*...s1x1 case:24:*/
{
byte ri, gi, bi;

bi = index4[*src24a++]; gi = index4[*src24a++]; ri = index4[*src24a];
*dest8a = PIX444(ri,gi,bi);
}
/*...e*/
		}
	}
Beispiel #4
0
/*...sgbm_ht_24_2x2     \45\ halftone by 2x2 to r\58\g\58\b bits:0:*/
void gbm_ht_24_2x2(const GBM *gbm, const byte *src24, byte *dest24, byte rm, byte gm, byte bm)
	{
	int stride = ((gbm->w * 3 + 3) & ~3);
	int x, y;

	init();

	src24 -= stride;
	dest24 -= stride;

	for ( y = 0; y < gbm->h - 1; y += 2 )
		{
		const byte *src24a  = (src24 += stride);
		const byte *src24b  = (src24 += stride);
		      byte *dest24a = (dest24 += stride);
		      byte *dest24b = (dest24 += stride);

		for ( x = 0; x < gbm->w - 1; x += 2 )
/*...s2x2 case:24:*/
{
word r,g,b;
byte ri,gi,bi;
byte *tmp;

b  = *src24a++;	g  = *src24a++;	r  = *src24a++;
b += *src24a++;	g += *src24a++;	r += *src24a++;
b += *src24b++;	g += *src24b++;	r += *src24b++;
b += *src24b++;	g += *src24b++;	r += *src24b++;

bi = (div4(b) & bm); gi = (div4(g) & gm); ri = (div4(r) & rm);
*dest24a++ = bi; *dest24a++ = gi; *dest24a++ = ri;
b -= bi; g -= gi; r -= ri;

if ( b > 255 * 3 ) b = 255 * 3;
if ( g > 255 * 3 ) g = 255 * 3;
if ( r > 255 * 3 ) r = 255 * 3;

bi = (div3(b) & bm); gi = (div3(g) & gm); ri = (div3(r) & rm);
*dest24a++ = bi; *dest24a++ = gi; *dest24a++ = ri;
b -= bi; g -= gi; r -= ri;

if ( b > 255 * 2 ) b = 255 * 2;
if ( g > 255 * 2 ) g = 255 * 2;
if ( r > 255 * 2 ) r = 255 * 2;

bi = (div2(b) & bm); gi = (div2(g) & gm); ri = (div2(r) & rm);
*dest24b++ = bi; *dest24b++ = gi; *dest24b++ = ri;
b -= bi; g -= gi; r -= ri;

if ( b > 255 ) b = 255;
if ( g > 255 ) g = 255;
if ( r > 255 ) r = 255;

bi = (b & bm); gi = (g & gm); ri = (r & rm);
*dest24b++ = bi; *dest24b++ = gi; *dest24b++ = ri;

tmp = dest24a; dest24a = dest24b; dest24b = tmp;
}
/*...e*/
		if ( x < gbm->w )
/*...s1x2 case:24:*/
{
word r,g,b;
byte ri, gi, bi;

b  = *src24a++;	g  = *src24a++;	r  = *src24a;
b += *src24b++;	g += *src24b++;	r += *src24b;

bi = (div2(b) & bm); gi = (div2(g) & gm); ri = (div2(r) & rm);
*dest24a++ = bi; *dest24a++ = gi; *dest24a++ = ri;
b -= bi; g -= gi; r -= ri;

if ( b > 255 ) b = 255;
if ( g > 255 ) g = 255;
if ( r > 255 ) r = 255;

bi = (b & bm); gi = (g & gm); ri = (r & rm);
*dest24b++ = bi; *dest24b++ = gi; *dest24b   = ri;
}
/*...e*/
		}
	if ( y < gbm->h )
		{
		const byte *src24a  = src24 + stride;
		      byte *dest24a = dest24 + stride;

		for ( x = 0; x < gbm->w - 1; x += 2 )
/*...s2x1 case:24:*/
{
word r,g,b;
byte ri, gi, bi;

b  = *src24a++;	g  = *src24a++;	r  = *src24a++;
b += *src24a++;	g += *src24a++;	r += *src24a++;

bi = (div2(b) & bm); gi = (div2(g) & gm); ri = (div2(r) & rm);
*dest24a++ = bi; *dest24a++ = gi; *dest24a++ = ri;
b -= bi; g -= gi; r -= ri;

if ( b > 255 ) b = 255;
if ( g > 255 ) g = 255;
if ( r > 255 ) r = 255;

bi = (b & bm); gi = (g & gm); ri = (r & rm);
*dest24a++ = bi; *dest24a++ = gi; *dest24a++ = ri;
}
/*...e*/
		if ( x < gbm->w )
/*...s1x1 case:24:*/
{
byte ri, gi, bi;

bi = ((*src24a++) & bm); gi = ((*src24a++) & gm); ri = ((*src24a) & rm);
*dest24a++ = bi; *dest24a++ = gi; *dest24a = ri;
}
/*...e*/
		}
	}
Beispiel #5
0
static void split_into8(
	word r, word g, word b,
	int n, byte *inxs
	)
	{
	byte inx;

	if ( n >= 9 )
		{
		inx = takefrom8(div9(r), div9(g), div9(b));
		b -= gbmrgb_8[inx].b;
		g -= gbmrgb_8[inx].g;
		r -= gbmrgb_8[inx].r;
		*inxs++ = inx;

		inx = takefrom8(div8(r), div8(g), div8(b));
		b -= gbmrgb_8[inx].b;
		g -= gbmrgb_8[inx].g;
		r -= gbmrgb_8[inx].r;
		*inxs++ = inx;

		inx = takefrom8(div7(r), div7(g), div7(b));
		b -= gbmrgb_8[inx].b;
		g -= gbmrgb_8[inx].g;
		r -= gbmrgb_8[inx].r;
		*inxs++ = inx;
		}

	if ( n >= 6 )
		{
		inx = takefrom8(div6(r), div6(g), div6(b));
		b -= gbmrgb_8[inx].b;
		g -= gbmrgb_8[inx].g;
		r -= gbmrgb_8[inx].r;
		*inxs++ = inx;

		inx = takefrom8(div5(r), div5(g), div5(b));
		b -= gbmrgb_8[inx].b;
		g -= gbmrgb_8[inx].g;
		r -= gbmrgb_8[inx].r;
		*inxs++ = inx;
		}

	if ( n >= 4 )
		{
		inx = takefrom8(div4(r), div4(g), div4(b));
		b -= gbmrgb_8[inx].b;
		g -= gbmrgb_8[inx].g;
		r -= gbmrgb_8[inx].r;
		*inxs++ = inx;
		}

	if ( n >= 3 )
		{
		inx = takefrom8(div3(r), div3(g), div3(b));
		b -= gbmrgb_8[inx].b;
		g -= gbmrgb_8[inx].g;
		r -= gbmrgb_8[inx].r;
		*inxs++ = inx;
		}

	inx = takefrom8(div2(r), div2(g), div2(b));
	b -= gbmrgb_8[inx].b;
	g -= gbmrgb_8[inx].g;
	r -= gbmrgb_8[inx].r;
	*inxs++ = inx;

	*inxs = takefrom8(r, g, b);
	}