Advertisement
xerpi

pixel font draw functions [C]

Aug 24th, 2013
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.74 KB | None | 0 0
  1. /* by xerpi (c) 2013 */
  2.  
  3. void font_draw_char(int x, int y, char c, u16 color)
  4. {
  5.     if(c == ' ') return;
  6.     int offset_pos = c * 8;
  7.     int i, j, b;
  8.     for(i = 0; i < 8; i++) {
  9.         b = vincent_font_data[offset_pos + i];
  10.         for(j = 0; j < 8; j++) {
  11.             if(b & (1<<j)) {
  12.                 draw_plot(x+(7-j), y+i, color);
  13.             }
  14.         }
  15.     }
  16. }
  17.  
  18. void font_draw_string(int x, int y, char *string, u32 color)
  19. {
  20.     if(!string) return;
  21.     int startx = x;
  22.     const char *s = string;
  23.     while(*s) {
  24.         if(*s == '\n') {
  25.             x = startx;
  26.             y+=8;
  27.         } else if(*s == '\t') {
  28.             x+=8*4;
  29.         } else {
  30.             font_draw_char(x, y, *s, color);
  31.             x+=8;
  32.         }
  33.         s++;
  34.     }
  35. }
  36.  
  37. void font_draw_stringf(int x, int y, u16 color, char *s, ...)
  38. {
  39.     char buffer[256];
  40.     va_list args;
  41.     va_start(args, s);
  42.     vsnprintf(buffer, 256, s, args);
  43.     font_draw_string(x, y, buffer, color);
  44.     va_end(args);
  45. }
  46.  
  47.  
  48. /*  vincent_font.c */
  49.  
  50. //http://forum.osdev.org/viewtopic.php?f=2&t=22033
  51.  
  52. const char vincent_font_data[] = {
  53.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  54.     0x00, 0x3E, 0x41, 0x55, 0x41, 0x55, 0x49, 0x3E,
  55.     0x00, 0x3E, 0x7F, 0x6B, 0x7F, 0x6B, 0x77, 0x3E,
  56.     0x00, 0x22, 0x77, 0x7F, 0x7F, 0x3E, 0x1C, 0x08,
  57.     0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x1C, 0x08,
  58.     0x00, 0x08, 0x1C, 0x2A, 0x7F, 0x2A, 0x08, 0x1C,
  59.     0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x3E, 0x08, 0x1C,
  60.     0x00, 0x00, 0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00,
  61.     0xFF, 0xFF, 0xE3, 0xC1, 0xC1, 0xC1, 0xE3, 0xFF,
  62.     0x00, 0x00, 0x1C, 0x22, 0x22, 0x22, 0x1C, 0x00,
  63.     0xFF, 0xFF, 0xE3, 0xDD, 0xDD, 0xDD, 0xE3, 0xFF,
  64.     0x00, 0x0F, 0x03, 0x05, 0x39, 0x48, 0x48, 0x30,
  65.     0x00, 0x08, 0x3E, 0x08, 0x1C, 0x22, 0x22, 0x1C,
  66.     0x00, 0x18, 0x14, 0x10, 0x10, 0x30, 0x70, 0x60,
  67.     0x00, 0x0F, 0x19, 0x11, 0x13, 0x37, 0x76, 0x60,
  68.     0x00, 0x08, 0x2A, 0x1C, 0x77, 0x1C, 0x2A, 0x08,
  69.     0x00, 0x60, 0x78, 0x7E, 0x7F, 0x7E, 0x78, 0x60,
  70.     0x00, 0x03, 0x0F, 0x3F, 0x7F, 0x3F, 0x0F, 0x03,
  71.     0x00, 0x08, 0x1C, 0x2A, 0x08, 0x2A, 0x1C, 0x08,
  72.     0x00, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66,
  73.     0x00, 0x3F, 0x65, 0x65, 0x3D, 0x05, 0x05, 0x05,
  74.     0x00, 0x0C, 0x32, 0x48, 0x24, 0x12, 0x4C, 0x30,
  75.     0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F,
  76.     0x00, 0x08, 0x1C, 0x2A, 0x08, 0x2A, 0x1C, 0x3E,
  77.     0x00, 0x08, 0x1C, 0x3E, 0x7F, 0x1C, 0x1C, 0x1C,
  78.     0x00, 0x1C, 0x1C, 0x1C, 0x7F, 0x3E, 0x1C, 0x08,
  79.     0x00, 0x08, 0x0C, 0x7E, 0x7F, 0x7E, 0x0C, 0x08,
  80.     0x00, 0x08, 0x18, 0x3F, 0x7F, 0x3F, 0x18, 0x08,
  81.     0x00, 0x00, 0x00, 0x70, 0x70, 0x70, 0x7F, 0x7F,
  82.     0x00, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
  83.     0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x3E, 0x7F, 0x7F,
  84.     0x00, 0x7F, 0x7F, 0x3E, 0x3E, 0x1C, 0x1C, 0x08,
  85.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  86.     0x00, 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18,
  87.     0x00, 0x36, 0x36, 0x14, 0x00, 0x00, 0x00, 0x00,
  88.     0x00, 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36,
  89.     0x00, 0x08, 0x1E, 0x20, 0x1C, 0x02, 0x3C, 0x08,
  90.     0x00, 0x60, 0x66, 0x0C, 0x18, 0x30, 0x66, 0x06,
  91.     0x00, 0x3C, 0x66, 0x3C, 0x28, 0x65, 0x66, 0x3F,
  92.     0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
  93.     0x00, 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60,
  94.     0x00, 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06,
  95.     0x00, 0x00, 0x36, 0x1C, 0x7F, 0x1C, 0x36, 0x00,
  96.     0x00, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
  97.     0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x60,
  98.     0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00,
  99.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60,
  100.     0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00,
  101.     0x00, 0x3C, 0x66, 0x6E, 0x76, 0x66, 0x66, 0x3C,
  102.     0x00, 0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E,
  103.     0x00, 0x3C, 0x66, 0x06, 0x0C, 0x30, 0x60, 0x7E,
  104.     0x00, 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C,
  105.     0x00, 0x0C, 0x1C, 0x2C, 0x4C, 0x7E, 0x0C, 0x0C,
  106.     0x00, 0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C,
  107.     0x00, 0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C,
  108.     0x00, 0x7E, 0x66, 0x0C, 0x0C, 0x18, 0x18, 0x18,
  109.     0x00, 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C,
  110.     0x00, 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x66, 0x3C,
  111.     0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00,
  112.     0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30,
  113.     0x00, 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06,
  114.     0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00,
  115.     0x00, 0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60,
  116.     0x00, 0x3C, 0x66, 0x06, 0x1C, 0x18, 0x00, 0x18,
  117.     0x00, 0x38, 0x44, 0x5C, 0x58, 0x42, 0x3C, 0x00,
  118.     0x00, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66,
  119.     0x00, 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C,
  120.     0x00, 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C,
  121.     0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C,
  122.     0x00, 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E,
  123.     0x00, 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60,
  124.     0x00, 0x3C, 0x66, 0x60, 0x60, 0x6E, 0x66, 0x3C,
  125.     0x00, 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66,
  126.     0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C,
  127.     0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x6C, 0x6C, 0x38,
  128.     0x00, 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66,
  129.     0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E,
  130.     0x00, 0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63,
  131.     0x00, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x63, 0x63,
  132.     0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C,
  133.     0x00, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60,
  134.     0x00, 0x3C, 0x66, 0x66, 0x66, 0x6E, 0x3C, 0x06,
  135.     0x00, 0x7C, 0x66, 0x66, 0x7C, 0x78, 0x6C, 0x66,
  136.     0x00, 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C,
  137.     0x00, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18,
  138.     0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3E,
  139.     0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18,
  140.     0x00, 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63,
  141.     0x00, 0x63, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x63,
  142.     0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18,
  143.     0x00, 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E,
  144.     0x00, 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E,
  145.     0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00,
  146.     0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78,
  147.     0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x00, 0x00,
  148.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F,
  149.     0x00, 0x0C, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00,
  150.     0x00, 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E,
  151.     0x00, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x7C,
  152.     0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x66, 0x3C,
  153.     0x00, 0x06, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E,
  154.     0x00, 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C,
  155.     0x00, 0x1C, 0x36, 0x30, 0x30, 0x7C, 0x30, 0x30,
  156.     0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x3C,
  157.     0x00, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66,
  158.     0x00, 0x00, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C,
  159.     0x00, 0x0C, 0x00, 0x0C, 0x0C, 0x6C, 0x6C, 0x38,
  160.     0x00, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0x66,
  161.     0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
  162.     0x00, 0x00, 0x00, 0x63, 0x77, 0x7F, 0x6B, 0x6B,
  163.     0x00, 0x00, 0x00, 0x7C, 0x7E, 0x66, 0x66, 0x66,
  164.     0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C,
  165.     0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60,
  166.     0x00, 0x00, 0x3C, 0x6C, 0x6C, 0x3C, 0x0D, 0x0F,
  167.     0x00, 0x00, 0x00, 0x7C, 0x66, 0x66, 0x60, 0x60,
  168.     0x00, 0x00, 0x00, 0x3E, 0x40, 0x3C, 0x02, 0x7C,
  169.     0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18,
  170.     0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E,
  171.     0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18,
  172.     0x00, 0x00, 0x00, 0x63, 0x6B, 0x6B, 0x6B, 0x3E,
  173.     0x00, 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66,
  174.     0x00, 0x00, 0x00, 0x66, 0x66, 0x3E, 0x06, 0x3C,
  175.     0x00, 0x00, 0x00, 0x3C, 0x0C, 0x18, 0x30, 0x3C,
  176.     0x00, 0x0E, 0x18, 0x18, 0x30, 0x18, 0x18, 0x0E,
  177.     0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18,
  178.     0x00, 0x70, 0x18, 0x18, 0x0C, 0x18, 0x18, 0x70,
  179.     0x00, 0x00, 0x00, 0x3A, 0x6C, 0x00, 0x00, 0x00,
  180.     0x00, 0x08, 0x1C, 0x36, 0x63, 0x41, 0x41, 0x7F
  181. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement