bitmap = icons[c % MAX_ICONS]->bitmap + ymove * 8*3;  colorscheme = (u8_t *)colortheme[VNC_OUT_ICONCOLOR + (c >> 6)]; switch(xmove) { case 0: for(i = 0; i < CTK_VNCFONT_HEIGHT; ++i) { b = bitmap[i]; *ptr++ = colorscheme[((b >> 7) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 6) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 5) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 4) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 3) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 2) & 0x01) << 2];
bitmap = icons[c % MAX_ICONS]->bitmap;  if(bitmap != NULL) { bitmap = bitmap + ymove * 8*3; colorscheme = (u8_t *)colortheme[VNC_OUT_ICONCOLOR + (c >> 6)]; switch(xmove) { case 0: for(i = 0; i < CTK_VNCFONT_HEIGHT; ++i) { b = bitmap[i]; *ptr++ = colorscheme[((b >> 7) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 6) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 5) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 4) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 3) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 2) & 0x01) << 2]; } break; case 1: for(i = 0; i < CTK_VNCFONT_HEIGHT; ++i) { b = bitmap[i]; b2 = bitmap[i + 8]; *ptr++ = colorscheme[((b >> 1) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 0) & 0x01) << 2]; *ptr++ = colorscheme[((b2 >> 7) & 0x01) << 2]; *ptr++ = colorscheme[((b2 >> 6) & 0x01) << 2]; *ptr++ = colorscheme[((b2 >> 5) & 0x01) << 2]; *ptr++ = colorscheme[((b2 >> 4) & 0x01) << 2]; } break; case 2: for(i = 0; i < CTK_VNCFONT_HEIGHT; ++i) { b = bitmap[i + 8]; b2 = bitmap[i + 16]; *ptr++ = colorscheme[((b >> 3) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 2) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 1) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 0) & 0x01) << 2]; *ptr++ = colorscheme[((b2 >> 7) & 0x01) << 2]; *ptr++ = colorscheme[((b2 >> 6) & 0x01) << 2]; } break; case 3: for(i = 0; i < CTK_VNCFONT_HEIGHT; ++i) { b = bitmap[i + 16]; *ptr++ = colorscheme[((b >> 5) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 4) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 3) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 2) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 1) & 0x01) << 2]; *ptr++ = colorscheme[((b >> 0) & 0x01) << 2]; } break;
makechar(CC_REGISTER_ARG char *ptr, u8_t x, u8_t y){  u8_t i, *tmpptr;  register u8_t *colorscheme;  unsigned char *bitmap;  u8_t b, b2;  u8_t xmove, ymove;  unsigned char c, color;  color = colorscreen[x + y * CHARS_WIDTH];  c = screen[x + y * CHARS_WIDTH];  colorscheme = (u8_t *)colortheme[color];        /* First check if the character is a special icon character. These     are to be interpreted in a special manner: the first character of     the icon (the top left corner) has the highest bit set, but not     bit 6. All other characters have bit 6 set, and also count the     number of positions away from the top left corner. Only the top     left corner contains enough information to identify the icon, all     other chars only contain the number of steps to reach the     identifying icon. */  if((c & 0x80) != 0) {    xmove = c & 0x0f;    ymove = (c & 0x30) >> 4;        c = colorscreen[x + y * CHARS_WIDTH];    if(icons[c % MAX_ICONS] == NULL) {      c = 0;    }    bitmap = icons[c % MAX_ICONS]->bitmap + ymove * 8*3;     colorscheme = (u8_t *)colortheme[VNC_OUT_ICONCOLOR + (c >> 6)];    switch(xmove) {    case 0:      for(i = 0; i < CTK_VNCFONT_HEIGHT; ++i) {	b = bitmap[i];	*ptr++ = colorscheme[((b >> 7) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 6) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 5) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 4) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 3) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 2) & 0x01) << 2];		      }      break;    case 1:      for(i = 0; i < CTK_VNCFONT_HEIGHT; ++i) {	b = bitmap[i];	b2 = bitmap[i + 8];	*ptr++ = colorscheme[((b >> 1) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 0) & 0x01) << 2];	*ptr++ = colorscheme[((b2 >> 7) & 0x01) << 2];	*ptr++ = colorscheme[((b2 >> 6) & 0x01) << 2];	*ptr++ = colorscheme[((b2 >> 5) & 0x01) << 2];	*ptr++ = colorscheme[((b2 >> 4) & 0x01) << 2];		      }      break;    case 2:      for(i = 0; i < CTK_VNCFONT_HEIGHT; ++i) {	b = bitmap[i + 8];	b2 = bitmap[i + 16];	*ptr++ = colorscheme[((b >> 3) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 2) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 1) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 0) & 0x01) << 2];	*ptr++ = colorscheme[((b2 >> 7) & 0x01) << 2];	*ptr++ = colorscheme[((b2 >> 6) & 0x01) << 2];		      }      break;    case 3:      for(i = 0; i < CTK_VNCFONT_HEIGHT; ++i) {	b = bitmap[i + 16];	*ptr++ = colorscheme[((b >> 5) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 4) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 3) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 2) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 1) & 0x01) << 2];	*ptr++ = colorscheme[((b >> 0) & 0x01) << 2];		      }      break;    }  } else {    memcpy_P(tmp, &ctk_vncfont[c * (CTK_VNCFONT_WIDTH * CTK_VNCFONT_HEIGHT)],	     CTK_VNCFONT_WIDTH * CTK_VNCFONT_HEIGHT);        tmpptr = tmp;        for(i = 0; i < CTK_VNCFONT_HEIGHT * CTK_VNCFONT_WIDTH; ++i) {      *ptr++ = colorscheme[*tmpptr++];    }  }}