--- sourceforge.net/trunk/rdesktop/xwin.c 2004/05/11 07:34:03 695 +++ sourceforge.net/trunk/rdesktop/xwin.c 2004/06/01 08:06:02 706 @@ -172,9 +172,9 @@ split_colour15(uint32 colour) { PixelColour rv; - rv.red = (colour & 0x7c00) >> 7; - rv.green = (colour & 0x03e0) >> 2; - rv.blue = (colour & 0x001f) << 3; + rv.red = ((colour >> 7) & 0xf8) | ((colour >> 12) & 0x7); + rv.green = ((colour >> 2) & 0xf8) | ((colour >> 8) & 0x7); + rv.blue = ((colour << 3) & 0xf8) | ((colour >> 2) & 0x7); return rv; } @@ -182,9 +182,9 @@ split_colour16(uint32 colour) { PixelColour rv; - rv.red = (colour & 0xf800) >> 8; - rv.green = (colour & 0x07e0) >> 3; - rv.blue = (colour & 0x001f) << 3; + rv.red = ((colour >> 8) & 0xf8) | ((colour >> 13) & 0x7); + rv.green = ((colour >> 3) & 0xfc) | ((colour >> 9) & 0x3); + rv.blue = ((colour << 3) & 0xf8) | ((colour >> 2) & 0x7); return rv; } @@ -252,27 +252,28 @@ uint16 value; if (g_arch_match) - REPEAT(*((uint16*)out) = g_colmap[*(data++)]; out += 2; - ) - else if (g_xserver_be) + REPEAT(*((uint16 *) out) = g_colmap[*(data++)]; + out += 2;) + else +if (g_xserver_be) +{ + while (out < end) { - while (out < end) - { - value = (uint16) g_colmap[*(data++)]; - *(out++) = value >> 8; - *(out++) = value; - } + value = (uint16) g_colmap[*(data++)]; + *(out++) = value >> 8; + *(out++) = value; } - else +} +else +{ + while (out < end) { - while (out < end) - { - value = (uint16) g_colmap[*(data++)]; - *(out++) = value; - *(out++) = value >> 8; - } + value = (uint16) g_colmap[*(data++)]; + *(out++) = value; + *(out++) = value >> 8; } } +} /* little endian - conversion happens when colourmap is built */ static void @@ -308,31 +309,32 @@ uint32 value; if (g_arch_match) - REPEAT(*((uint32 *)out) = g_colmap[*(data++)]; out += 4; - ) - else if (g_xserver_be) + REPEAT(*((uint32 *) out) = g_colmap[*(data++)]; + out += 4;) + else +if (g_xserver_be) +{ + while (out < end) { - while (out < end) - { - value = g_colmap[*(data++)]; - *(out++) = value >> 24; - *(out++) = value >> 16; - *(out++) = value >> 8; - *(out++) = value; - } + value = g_colmap[*(data++)]; + *(out++) = value >> 24; + *(out++) = value >> 16; + *(out++) = value >> 8; + *(out++) = value; } - else +} +else +{ + while (out < end) { - while (out < end) - { - value = g_colmap[*(data++)]; - *(out++) = value; - *(out++) = value >> 8; - *(out++) = value >> 16; - *(out++) = value >> 24; - } + value = g_colmap[*(data++)]; + *(out++) = value; + *(out++) = value >> 8; + *(out++) = value >> 16; + *(out++) = value >> 24; } } +} static void translate15to16(uint16 * data, uint8 * out, uint8 * end)