static inline void color_imageblit(const struct fb_image *image, 
				   struct fb_info *p, u8 *dst1, 
				   u32 start_index,
				   u32 pitch_index)
{
	/* Draw the penguin */
	u32 *dst, *dst2, color = 0, val, shift;
	int i, n, bpp = p->var.bits_per_pixel;
	u32 null_bits = 32 - bpp;
	u32 *palette = (u32 *) p->pseudo_palette;
	const u8 *src = image->data;

	dst2 = (u32 *) dst1;
	for (i = image->height; i--; ) {
		n = image->width;
		dst = (u32 *) dst1;
		shift = 0;
		val = 0;
		
		if (start_index) {
			u32 start_mask = ~(SHIFT_HIGH(~(u32)0, start_index));
			val = FB_READL(dst) & start_mask;
			shift = start_index;
		}
		while (n--) {
			if (p->fix.visual == FB_VISUAL_TRUECOLOR ||
			    p->fix.visual == FB_VISUAL_DIRECTCOLOR )
				color = palette[*src];
			else
				color = *src;
			color <<= LEFT_POS(bpp);
			val |= SHIFT_HIGH(color, shift);
			if (shift >= null_bits) {
				FB_WRITEL(val, dst++);
	
				val = (shift == null_bits) ? 0 : 
					SHIFT_LOW(color, 32 - shift);
			}
			shift += bpp;
			shift &= (32 - 1);
			src++;
		}
		if (shift) {
			u32 end_mask = SHIFT_HIGH(~(u32)0, shift);

			FB_WRITEL((FB_READL(dst) & end_mask) | val, dst);
		}
		dst1 += p->fix.line_length;
		if (pitch_index) {
			dst2 += p->fix.line_length;
			dst1 = (u8 *)((long)dst2 & ~(sizeof(u32) - 1));

			start_index += pitch_index;
			start_index &= 32 - 1;
		}
	}
}
static inline void slow_imageblit(const struct fb_image *image, struct fb_info *p, 
				  u8 *dst1, u32 fgcolor,
				  u32 bgcolor, 
				  u32 start_index,
				  u32 pitch_index)
{
	u32 shift, color = 0, bpp = p->var.bits_per_pixel;
	u32 *dst, *dst2, val, pitch = p->fix.line_length;
	u32 null_bits = 32 - bpp;
	u32 spitch = (image->width+7)/8;
	const u8 *src = image->data, *s;
	u32 i, j, l;
	
	dst2 = (u32 *) dst1;

	for (i = image->height; i--; ) {
		shift = val = 0;
		l = 8;
		j = image->width;
		dst = (u32 *) dst1;
		s = src;

		/* write leading bits */
		if (start_index) {
			u32 start_mask = ~(SHIFT_HIGH(~(u32)0, start_index));
			val = FB_READL(dst) & start_mask;
			shift = start_index;
		}

		while (j--) {
			l--;
			color = (*s & (1 << l)) ? fgcolor : bgcolor;
			color <<= LEFT_POS(bpp);
			val |= SHIFT_HIGH(color, shift);
			
			/* Did the bitshift spill bits to the next long? */
			if (shift >= null_bits) {
				FB_WRITEL(val, dst++);
				val = (shift == null_bits) ? 0 :
					 SHIFT_LOW(color,32 - shift);
			}
			shift += bpp;
			shift &= (32 - 1);
			if (!l) { l = 8; s++; };
		}

		/* write trailing bits */
 		if (shift) {
			u32 end_mask = SHIFT_HIGH(~(u32)0, shift);

			FB_WRITEL((FB_READL(dst) & end_mask) | val, dst);
		}
		
		dst1 += pitch;
		src += spitch;	
		if (pitch_index) {
			dst2 += pitch;
			dst1 = (u8 *)((long)dst2 & ~(sizeof(u32) - 1));
			start_index += pitch_index;
			start_index &= 32 - 1;
		}
		
	}
}
void SemaphoreHeroGameSceneClass::SetSignal(){
	int i=0;
	//0
	FlagSignals[i].name = "A";
	BOTTOMLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOM_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//1
	FlagSignals[i].name = "B";
	LEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOM_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//2
	FlagSignals[i].name = "C";
	TOPLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOM_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//3
	FlagSignals[i].name = "D";
	TOP_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOM_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//4
	FlagSignals[i].name = "E";
	BOTTOM_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	TOPRIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;

	//5
	FlagSignals[i].name = "F";
	BOTTOM_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	RIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//6
	FlagSignals[i].name = "G";
	BOTTOM_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOMRIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//7
	FlagSignals[i].name = "H";
	LEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOMLEFT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//8
	FlagSignals[i].name = "I";
	TOPLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOMLEFT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//9
	FlagSignals[i].name = "J";
	TOP_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	RIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//10
	FlagSignals[i].name = "K";
	BOTTOMLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	TOP_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//11
	FlagSignals[i].name = "L";
	BOTTOMLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	TOPLEFT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//12
	FlagSignals[i].name = "M";
	BOTTOMLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	RIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//13
	FlagSignals[i].name = "N";
	BOTTOMLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOMRIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//14
	FlagSignals[i].name = "O";
	LEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	TOPLEFT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//15
	FlagSignals[i].name = "P";
	LEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	TOP_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//16
	FlagSignals[i].name = "Q";
	LEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	TOPRIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//17
	FlagSignals[i].name = "R";
	LEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	RIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//18
	FlagSignals[i].name = "S";
	LEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOMRIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//19
	FlagSignals[i].name = "T";
	TOPLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	TOP_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//20
	FlagSignals[i].name = "U";
	TOPLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	TOPRIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//21
	FlagSignals[i].name = "V";
	TOP_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOMRIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//22
	FlagSignals[i].name = "W";
	TOPRIGHT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	RIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//23
	FlagSignals[i].name = "X";
	TOPRIGHT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	BOTTOMRIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//24
	FlagSignals[i].name = "Y";
	TOPLEFT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	RIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//25
	FlagSignals[i].name = "Z";
	BOTTOMRIGHT_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	RIGHT_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
	//26
	FlagSignals[i].name = "SPAAACE";
	RESTL_POS(FlagSignals[i].lx,FlagSignals[i].ly);
	RESTR_POS(FlagSignals[i].rx,FlagSignals[i].ry);
	i++;
}