⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xwin.c

📁 rdesktop is a client for Microsoft Windows NT Terminal Server, Windows 2000 Terminal Services, Wind
💻 C
📖 第 1 页 / 共 5 页
字号:
			SPLITCOLOUR15(colour, pc);			break;		case 16:			SPLITCOLOUR16(colour, pc);			break;		case 24:			SPLITCOLOUR24(colour, pc);			break;		default:			/* Avoid warning */			pc.red = 0;			pc.green = 0;			pc.blue = 0;			break;	}	return MAKECOLOUR(pc);}/* indent is confused by UNROLL8 *//* *INDENT-OFF* *//* repeat and unroll, similar to bitmap.c *//* potentialy any of the following translate *//* functions can use repeat but just doing *//* the most common ones */#define UNROLL8(stm) { stm stm stm stm stm stm stm stm }/* 2 byte output repeat */#define REPEAT2(stm) \{ \	while (out <= end - 8 * 2) \		UNROLL8(stm) \	while (out < end) \		{ stm } \}/* 3 byte output repeat */#define REPEAT3(stm) \{ \	while (out <= end - 8 * 3) \		UNROLL8(stm) \	while (out < end) \		{ stm } \}/* 4 byte output repeat */#define REPEAT4(stm) \{ \	while (out <= end - 8 * 4) \		UNROLL8(stm) \	while (out < end) \		{ stm } \}/* *INDENT-ON* */static voidtranslate8to8(const uint8 * data, uint8 * out, uint8 * end){	while (out < end)		*(out++) = (uint8) g_colmap[*(data++)];}static voidtranslate8to16(const uint8 * data, uint8 * out, uint8 * end){	uint16 value;	if (g_compatible_arch)	{		/* *INDENT-OFF* */		REPEAT2		(			*((uint16 *) out) = g_colmap[*(data++)];			out += 2;		)		/* *INDENT-ON* */	}	else if (g_xserver_be)	{		while (out < end)		{			value = (uint16) g_colmap[*(data++)];			BOUT16(out, value);		}	}	else	{		while (out < end)		{			value = (uint16) g_colmap[*(data++)];			LOUT16(out, value);		}	}}/* little endian - conversion happens when colourmap is built */static voidtranslate8to24(const uint8 * data, uint8 * out, uint8 * end){	uint32 value;	if (g_compatible_arch)	{		while (out < end)		{			value = g_colmap[*(data++)];			BOUT24(out, value);		}	}	else	{		while (out < end)		{			value = g_colmap[*(data++)];			LOUT24(out, value);		}	}}static voidtranslate8to32(const uint8 * data, uint8 * out, uint8 * end){	uint32 value;	if (g_compatible_arch)	{		/* *INDENT-OFF* */		REPEAT4		(			*((uint32 *) out) = g_colmap[*(data++)];			out += 4;		)		/* *INDENT-ON* */	}	else if (g_xserver_be)	{		while (out < end)		{			value = g_colmap[*(data++)];			BOUT32(out, value);		}	}	else	{		while (out < end)		{			value = g_colmap[*(data++)];			LOUT32(out, value);		}	}}static voidtranslate15to16(const uint16 * data, uint8 * out, uint8 * end){	uint16 pixel;	uint16 value;	PixelColour pc;	if (g_xserver_be)	{		while (out < end)		{			pixel = *(data++);			if (g_host_be)			{				BSWAP16(pixel);			}			SPLITCOLOUR15(pixel, pc);			value = MAKECOLOUR(pc);			BOUT16(out, value);		}	}	else	{		while (out < end)		{			pixel = *(data++);			if (g_host_be)			{				BSWAP16(pixel);			}			SPLITCOLOUR15(pixel, pc);			value = MAKECOLOUR(pc);			LOUT16(out, value);		}	}}static voidtranslate15to24(const uint16 * data, uint8 * out, uint8 * end){	uint32 value;	uint16 pixel;	PixelColour pc;	if (g_compatible_arch)	{		/* *INDENT-OFF* */		REPEAT3		(			pixel = *(data++);			SPLITCOLOUR15(pixel, pc);			*(out++) = pc.blue;			*(out++) = pc.green;			*(out++) = pc.red;		)		/* *INDENT-ON* */	}	else if (g_xserver_be)	{		while (out < end)		{			pixel = *(data++);			if (g_host_be)			{				BSWAP16(pixel);			}			SPLITCOLOUR15(pixel, pc);			value = MAKECOLOUR(pc);			BOUT24(out, value);		}	}	else	{		while (out < end)		{			pixel = *(data++);			if (g_host_be)			{				BSWAP16(pixel);			}			SPLITCOLOUR15(pixel, pc);			value = MAKECOLOUR(pc);			LOUT24(out, value);		}	}}static voidtranslate15to32(const uint16 * data, uint8 * out, uint8 * end){	uint16 pixel;	uint32 value;	PixelColour pc;	if (g_compatible_arch)	{		/* *INDENT-OFF* */		REPEAT4		(			pixel = *(data++);			SPLITCOLOUR15(pixel, pc);			*(out++) = pc.blue;			*(out++) = pc.green;			*(out++) = pc.red;			*(out++) = 0;		)		/* *INDENT-ON* */	}	else if (g_xserver_be)	{		while (out < end)		{			pixel = *(data++);			if (g_host_be)			{				BSWAP16(pixel);			}			SPLITCOLOUR15(pixel, pc);			value = MAKECOLOUR(pc);			BOUT32(out, value);		}	}	else	{		while (out < end)		{			pixel = *(data++);			if (g_host_be)			{				BSWAP16(pixel);			}			SPLITCOLOUR15(pixel, pc);			value = MAKECOLOUR(pc);			LOUT32(out, value);		}	}}static voidtranslate16to16(const uint16 * data, uint8 * out, uint8 * end){	uint16 pixel;	uint16 value;	PixelColour pc;	if (g_xserver_be)	{		if (g_host_be)		{			while (out < end)			{				pixel = *(data++);				BSWAP16(pixel);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				BOUT16(out, value);			}		}		else		{			while (out < end)			{				pixel = *(data++);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				BOUT16(out, value);			}		}	}	else	{		if (g_host_be)		{			while (out < end)			{				pixel = *(data++);				BSWAP16(pixel);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				LOUT16(out, value);			}		}		else		{			while (out < end)			{				pixel = *(data++);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				LOUT16(out, value);			}		}	}}static voidtranslate16to24(const uint16 * data, uint8 * out, uint8 * end){	uint32 value;	uint16 pixel;	PixelColour pc;	if (g_compatible_arch)	{		/* *INDENT-OFF* */		REPEAT3		(			pixel = *(data++);			SPLITCOLOUR16(pixel, pc);			*(out++) = pc.blue;			*(out++) = pc.green;			*(out++) = pc.red;		)		/* *INDENT-ON* */	}	else if (g_xserver_be)	{		if (g_host_be)		{			while (out < end)			{				pixel = *(data++);				BSWAP16(pixel);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				BOUT24(out, value);			}		}		else		{			while (out < end)			{				pixel = *(data++);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				BOUT24(out, value);			}		}	}	else	{		if (g_host_be)		{			while (out < end)			{				pixel = *(data++);				BSWAP16(pixel);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				LOUT24(out, value);			}		}		else		{			while (out < end)			{				pixel = *(data++);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				LOUT24(out, value);			}		}	}}static voidtranslate16to32(const uint16 * data, uint8 * out, uint8 * end){	uint16 pixel;	uint32 value;	PixelColour pc;	if (g_compatible_arch)	{		/* *INDENT-OFF* */		REPEAT4		(			pixel = *(data++);			SPLITCOLOUR16(pixel, pc);			*(out++) = pc.blue;			*(out++) = pc.green;			*(out++) = pc.red;			*(out++) = 0;		)		/* *INDENT-ON* */	}	else if (g_xserver_be)	{		if (g_host_be)		{			while (out < end)			{				pixel = *(data++);				BSWAP16(pixel);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				BOUT32(out, value);			}		}		else		{			while (out < end)			{				pixel = *(data++);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				BOUT32(out, value);			}		}	}	else	{		if (g_host_be)		{			while (out < end)			{				pixel = *(data++);				BSWAP16(pixel);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				LOUT32(out, value);			}		}		else		{			while (out < end)			{				pixel = *(data++);				SPLITCOLOUR16(pixel, pc);				value = MAKECOLOUR(pc);				LOUT32(out, value);			}		}	}}static voidtranslate24to16(const uint8 * data, uint8 * out, uint8 * end){	uint32 pixel = 0;	uint16 value;	PixelColour pc;	while (out < end)	{		pixel = *(data++) << 16;		pixel |= *(data++) << 8;		pixel |= *(data++);		SPLITCOLOUR24(pixel, pc);		value = MAKECOLOUR(pc);		if (g_xserver_be)		{			BOUT16(out, value);		}		else		{			LOUT16(out, value);		}	}}static voidtranslate24to24(const uint8 * data, uint8 * out, uint8 * end){	uint32 pixel;	uint32 value;	PixelColour pc;	if (g_xserver_be)	{		while (out < end)		{			pixel = *(data++) << 16;			pixel |= *(data++) << 8;			pixel |= *(data++);			SPLITCOLOUR24(pixel, pc);			value = MAKECOLOUR(pc);			BOUT24(out, value);		}	}	else	{		while (out < end)		{			pixel = *(data++) << 16;			pixel |= *(data++) << 8;			pixel |= *(data++);			SPLITCOLOUR24(pixel, pc);			value = MAKECOLOUR(pc);			LOUT24(out, value);		}	}}static voidtranslate24to32(const uint8 * data, uint8 * out, uint8 * end){	uint32 pixel;	uint32 value;	PixelColour pc;	if (g_compatible_arch)	{		/* *INDENT-OFF* */#ifdef NEED_ALIGN		REPEAT4		(			*(out++) = *(data++);			*(out++) = *(data++);			*(out++) = *(data++);			*(out++) = 0;		)#else		REPEAT4		(		 /* Only read 3 bytes. Reading 4 bytes means reading beyond buffer. */		 *((uint32 *) out) = *((uint16 *) data) + (*((uint8 *) data + 2) << 16);		 out += 4;		 data += 3;		)#endif		/* *INDENT-ON* */	}	else if (g_xserver_be)	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -