Handout
This commit is contained in:
1
kernel/graphics/fonts/CPPLINT.cfg
Normal file
1
kernel/graphics/fonts/CPPLINT.cfg
Normal file
@@ -0,0 +1 @@
|
||||
exclude_files=font_.*\.h
|
||||
44
kernel/graphics/fonts/font.cc
Normal file
44
kernel/graphics/fonts/font.cc
Normal file
@@ -0,0 +1,44 @@
|
||||
#include "font.h"
|
||||
|
||||
#include "../../types.h"
|
||||
#include "../../utils/size.h"
|
||||
#include "../../utils/string.h"
|
||||
#include "font_10x18.h"
|
||||
#include "font_6x10.h"
|
||||
#include "font_6x11.h"
|
||||
#include "font_7x14.h"
|
||||
#include "font_8x16.h"
|
||||
#include "font_8x8.h"
|
||||
#include "font_acorn_8x8.h"
|
||||
#include "font_mini_4x6.h"
|
||||
#include "font_pearl_8x8.h"
|
||||
#include "font_sun_12x22.h"
|
||||
#include "font_sun_8x16.h"
|
||||
#include "font_ter_16x32.h"
|
||||
|
||||
static Font fonts[] = {
|
||||
Font("Standard", 6, 10, fontdata_6x10),
|
||||
Font("Standard", 7, 14, fontdata_7x14),
|
||||
Font("Standard", 8, 8, fontdata_8x8),
|
||||
Font("Standard", 8, 16, fontdata_8x16),
|
||||
Font("Standard", 10, 18, fontdata_10x18),
|
||||
Font("Acorn", 8, 8, acorndata_8x8),
|
||||
Font("Mini", 4, 6, fontdata_mini_4x6),
|
||||
Font("Pearl", 8, 8, fontdata_pearl_8x8),
|
||||
Font("Sun", 12, 22, fontdata_sun_12x22),
|
||||
Font("Sun", 8, 16, fontdata_sun_8x16),
|
||||
Font("Terminus", 16, 32, fontdata_ter16x32),
|
||||
};
|
||||
|
||||
unsigned Font::number() { return ::size(fonts); }
|
||||
|
||||
Font* Font::get(const char* name, const unsigned width, const unsigned height) {
|
||||
for (unsigned i = 0; i < number(); i++) {
|
||||
if ((name == nullptr || strcmp(name, fonts[i].name) == 0) &&
|
||||
(width == 0 || width == fonts[i].width) &&
|
||||
(height == 0 || height == fonts[i].height)) {
|
||||
return &fonts[i];
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
73
kernel/graphics/fonts/font.h
Normal file
73
kernel/graphics/fonts/font.h
Normal file
@@ -0,0 +1,73 @@
|
||||
/*! \file
|
||||
* \brief \ref Font "Monospaced fonts"
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../../types.h"
|
||||
|
||||
/*! \brief Monospaced fonts
|
||||
* \ingroup gfx
|
||||
*
|
||||
* Console fonts are extracted from the Linux kernel
|
||||
* ([/lib/fonts/](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/lib/fonts)).
|
||||
*/
|
||||
class Font {
|
||||
/*! \brief Pointer to bitmap font
|
||||
*/
|
||||
const unsigned char* data;
|
||||
|
||||
/*! \brief Size in memory of bitmap font
|
||||
*/
|
||||
const size_t size;
|
||||
|
||||
public:
|
||||
/*! \brief Name of font
|
||||
*/
|
||||
const char* name;
|
||||
|
||||
/*! \brief Width of a character
|
||||
*/
|
||||
const unsigned width;
|
||||
|
||||
/*! \brief Height of a character
|
||||
*/
|
||||
const unsigned height;
|
||||
|
||||
/*! \brief Constructor for a font
|
||||
*
|
||||
* \param name Name of font
|
||||
* \param width character width
|
||||
* \param height character height
|
||||
* \param data Pointer to bitmap font
|
||||
*/
|
||||
Font(const char* name, unsigned width, unsigned height,
|
||||
const unsigned char* data)
|
||||
: data(data),
|
||||
size((((width + (8 >> 1)) / 8) * height)),
|
||||
name(name),
|
||||
width(width),
|
||||
height(height) {}
|
||||
|
||||
/*! \brief Get bitmap address for a given character
|
||||
*
|
||||
* \param c character (ASCII)
|
||||
* \return Pointer to bitmap of character
|
||||
*/
|
||||
const void* symbol(unsigned char c) const { return &data[size * c]; }
|
||||
|
||||
/*! \brief Find font
|
||||
*
|
||||
* \param name Name of font (or `nullptr` for any)
|
||||
* \param width Width of a character (or `0` for any)
|
||||
* \param height Height of a character (or `0` for any)
|
||||
* \return Pointer to font or `nullptr` if no matching font was found
|
||||
*/
|
||||
static Font* get(const char* name = nullptr, unsigned width = 0,
|
||||
unsigned height = 0);
|
||||
|
||||
/*! \brief Get the number of available fonts
|
||||
* \return number of fonts
|
||||
*/
|
||||
static unsigned number();
|
||||
};
|
||||
5130
kernel/graphics/fonts/font_10x18.h
Normal file
5130
kernel/graphics/fonts/font_10x18.h
Normal file
File diff suppressed because it is too large
Load Diff
3077
kernel/graphics/fonts/font_6x10.h
Normal file
3077
kernel/graphics/fonts/font_6x10.h
Normal file
File diff suppressed because it is too large
Load Diff
3339
kernel/graphics/fonts/font_6x11.h
Normal file
3339
kernel/graphics/fonts/font_6x11.h
Normal file
File diff suppressed because it is too large
Load Diff
4106
kernel/graphics/fonts/font_7x14.h
Normal file
4106
kernel/graphics/fonts/font_7x14.h
Normal file
File diff suppressed because it is too large
Load Diff
4618
kernel/graphics/fonts/font_8x16.h
Normal file
4618
kernel/graphics/fonts/font_8x16.h
Normal file
File diff suppressed because it is too large
Load Diff
2570
kernel/graphics/fonts/font_8x8.h
Normal file
2570
kernel/graphics/fonts/font_8x8.h
Normal file
File diff suppressed because it is too large
Load Diff
260
kernel/graphics/fonts/font_acorn_8x8.h
Normal file
260
kernel/graphics/fonts/font_acorn_8x8.h
Normal file
@@ -0,0 +1,260 @@
|
||||
|
||||
/* Acorn-like font definition, with PC graphics characters */
|
||||
|
||||
static const unsigned char acorndata_8x8[] = {
|
||||
/* 00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ^@ */
|
||||
/* 01 */ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e, /* ^A */
|
||||
/* 02 */ 0x7e, 0xff, 0xbd, 0xff, 0xc3, 0xe7, 0xff, 0x7e, /* ^B */
|
||||
/* 03 */ 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, /* ^C */
|
||||
/* 04 */ 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, /* ^D */
|
||||
/* 05 */ 0x00, 0x18, 0x3c, 0xe7, 0xe7, 0x3c, 0x18, 0x00, /* ^E */
|
||||
/* 06 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 07 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 08 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 09 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0A */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0B */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0D */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0E */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 0F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 10 */ 0x00, 0x60, 0x78, 0x7e, 0x7e, 0x78, 0x60, 0x00, /* |> */
|
||||
/* 11 */ 0x00, 0x06, 0x1e, 0x7e, 0x7e, 0x1e, 0x06, 0x00, /* <| */
|
||||
/* 12 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 13 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 14 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 15 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 16 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 18 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 19 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 1A */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 1B */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 1C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 1D */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 1E */ 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x7e, 0x7e, 0x00, /* /\ */
|
||||
/* 1F */ 0x00, 0x7e, 0x7e, 0x3c, 0x3c, 0x18, 0x18, 0x00, /* \/ */
|
||||
/* 20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* */
|
||||
/* 21 */ 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00, /* ! */
|
||||
/* 22 */ 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, /* " */
|
||||
/* 23 */ 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00, /* # */
|
||||
/* 24 */ 0x0C, 0x3F, 0x68, 0x3E, 0x0B, 0x7E, 0x18, 0x00, /* $ */
|
||||
/* 25 */ 0x60, 0x66, 0x0C, 0x18, 0x30, 0x66, 0x06, 0x00, /* % */
|
||||
/* 26 */ 0x38, 0x6C, 0x6C, 0x38, 0x6D, 0x66, 0x3B, 0x00, /* & */
|
||||
/* 27 */ 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, /* ' */
|
||||
/* 28 */ 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, /* ( */
|
||||
/* 29 */ 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, /* ) */
|
||||
/* 2A */ 0x00, 0x18, 0x7E, 0x3C, 0x7E, 0x18, 0x00, 0x00, /* * */
|
||||
/* 2B */ 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, /* + */
|
||||
/* 2C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, /* , */
|
||||
/* 2D */ 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, /* - */
|
||||
/* 2E */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, /* . */
|
||||
/* 2F */ 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, /* / */
|
||||
/* 30 */ 0x3C, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x3C, 0x00, /* 0 */
|
||||
/* 31 */ 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, /* 1 */
|
||||
/* 32 */ 0x3C, 0x66, 0x06, 0x0C, 0x18, 0x30, 0x7E, 0x00, /* 2 */
|
||||
/* 33 */ 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00, /* 3 */
|
||||
/* 34 */ 0x0C, 0x1C, 0x3C, 0x6C, 0x7E, 0x0C, 0x0C, 0x00, /* 4 */
|
||||
/* 35 */ 0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C, 0x00, /* 5 */
|
||||
/* 36 */ 0x1C, 0x30, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00, /* 6 */
|
||||
/* 37 */ 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, /* 7 */
|
||||
/* 38 */ 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, /* 8 */
|
||||
/* 39 */ 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x0C, 0x38, 0x00, /* 9 */
|
||||
/* 3A */ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, /* : */
|
||||
/* 3B */ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30, /* ; */
|
||||
/* 3C */ 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, /* < */
|
||||
/* 3D */ 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00, /* = */
|
||||
/* 3E */ 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, /* > */
|
||||
/* 3F */ 0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00, /* ? */
|
||||
/* 40 */ 0x3C, 0x66, 0x6E, 0x6A, 0x6E, 0x60, 0x3C, 0x00, /* @ */
|
||||
/* 41 */ 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, /* A */
|
||||
/* 42 */ 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00, /* B */
|
||||
/* 43 */ 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00, /* C */
|
||||
/* 44 */ 0x78, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x00, /* D */
|
||||
/* 45 */ 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00, /* E */
|
||||
/* 46 */ 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x00, /* F */
|
||||
/* 47 */ 0x3C, 0x66, 0x60, 0x6E, 0x66, 0x66, 0x3C, 0x00, /* G */
|
||||
/* 48 */ 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, /* H */
|
||||
/* 49 */ 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, /* I */
|
||||
/* 4A */ 0x3E, 0x0C, 0x0C, 0x0C, 0x0C, 0x6C, 0x38, 0x00, /* J */
|
||||
/* 4B */ 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00, /* K */
|
||||
/* 4C */ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00, /* L */
|
||||
/* 4D */ 0x63, 0x77, 0x7F, 0x6B, 0x6B, 0x63, 0x63, 0x00, /* M */
|
||||
/* 4E */ 0x66, 0x66, 0x76, 0x7E, 0x6E, 0x66, 0x66, 0x00, /* N */
|
||||
/* 4F */ 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, /* O */
|
||||
/* 50 */ 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00, /* P */
|
||||
/* 51 */ 0x3C, 0x66, 0x66, 0x66, 0x6A, 0x6C, 0x36, 0x00, /* Q */
|
||||
/* 52 */ 0x7C, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x00, /* R */
|
||||
/* 53 */ 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 0x00, /* S */
|
||||
/* 54 */ 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, /* T */
|
||||
/* 55 */ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, /* U */
|
||||
/* 56 */ 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, /* V */
|
||||
/* 57 */ 0x63, 0x63, 0x6B, 0x6B, 0x7F, 0x77, 0x63, 0x00, /* W */
|
||||
/* 58 */ 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, /* X */
|
||||
/* 59 */ 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, /* Y */
|
||||
/* 5A */ 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00, /* Z */
|
||||
/* 5B */ 0x7C, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x00, /* [ */
|
||||
/* 5C */ 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, /* \ */
|
||||
/* 5D */ 0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3E, 0x00, /* ] */
|
||||
/* 5E */ 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ^ */
|
||||
/* 5F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, /* _ */
|
||||
/* 60 */ 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* */
|
||||
/* 61 */ 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, /* a */
|
||||
/* 62 */ 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00, /* b */
|
||||
/* 63 */ 0x00, 0x00, 0x3C, 0x66, 0x60, 0x66, 0x3C, 0x00, /* c */
|
||||
/* 64 */ 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x3E, 0x00, /* d */
|
||||
/* 65 */ 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, /* e */
|
||||
/* 66 */ 0x1C, 0x30, 0x30, 0x7C, 0x30, 0x30, 0x30, 0x00, /* f */
|
||||
/* 67 */ 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x3C, /* g */
|
||||
/* 68 */ 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00, /* h */
|
||||
/* 69 */ 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, /* i */
|
||||
/* 6A */ 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x70, /* j */
|
||||
/* 6B */ 0x60, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0x00, /* k */
|
||||
/* 6C */ 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, /* l */
|
||||
/* 6D */ 0x00, 0x00, 0x36, 0x7F, 0x6B, 0x6B, 0x63, 0x00, /* m */
|
||||
/* 6E */ 0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00, /* n */
|
||||
/* 6F */ 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, /* o */
|
||||
/* 70 */ 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, /* p */
|
||||
/* 71 */ 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x07, /* q */
|
||||
/* 72 */ 0x00, 0x00, 0x6C, 0x76, 0x60, 0x60, 0x60, 0x00, /* r */
|
||||
/* 73 */ 0x00, 0x00, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x00, /* s */
|
||||
/* 74 */ 0x30, 0x30, 0x7C, 0x30, 0x30, 0x30, 0x1C, 0x00, /* t */
|
||||
/* 75 */ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, /* u */
|
||||
/* 76 */ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, /* v */
|
||||
/* 77 */ 0x00, 0x00, 0x63, 0x6B, 0x6B, 0x7F, 0x36, 0x00, /* w */
|
||||
/* 78 */ 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, /* x */
|
||||
/* 79 */ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x3C, /* y */
|
||||
/* 7A */ 0x00, 0x00, 0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00, /* z */
|
||||
/* 7B */ 0x0C, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0C, 0x00, /* { */
|
||||
/* 7C */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, /* | */
|
||||
/* 7D */ 0x30, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x30, 0x00, /* } */
|
||||
/* 7E */ 0x31, 0x6B, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, /* ~ */
|
||||
/* 7F */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /* */
|
||||
/* 80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 81 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 82 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 83 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 84 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 85 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 86 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 88 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 89 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 8A */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 8B */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 8C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 8D */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 8E */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 8F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 91 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 92 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 93 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 94 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 95 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 96 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 98 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 99 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 9A */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 9B */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 9C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 9D */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 9E */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* 9F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A2 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A3 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A4 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A5 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A6 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A8 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* A9 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* AA */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* AB */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* AC */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* AD */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* AE */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* AF */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* B0 */ 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88,
|
||||
/* B1 */ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
|
||||
/* B2 */ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
|
||||
/* B3 */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* B4 */ 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18,
|
||||
/* B5 */ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18,
|
||||
/* B6 */ 0x66, 0x66, 0x66, 0xe6, 0x66, 0x66, 0x66, 0x66,
|
||||
/* B7 */ 0x00, 0x00, 0x00, 0xfe, 0x66, 0x66, 0x66, 0x66,
|
||||
/* B8 */ 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18,
|
||||
/* B9 */ 0x66, 0x66, 0xe6, 0x06, 0xe6, 0x66, 0x66, 0x66,
|
||||
/* BA */ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
|
||||
/* BB */ 0x00, 0x00, 0xfe, 0x06, 0xe6, 0x66, 0x66, 0x66,
|
||||
/* BC */ 0x66, 0x66, 0xe6, 0x06, 0xfe, 0x00, 0x00, 0x00,
|
||||
/* BD */ 0x66, 0x66, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
|
||||
/* BE */ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00,
|
||||
/* BF */ 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18,
|
||||
/* C0 */ 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00,
|
||||
/* C1 */ 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
/* C2 */ 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18,
|
||||
/* C3 */ 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18,
|
||||
/* C4 */ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
/* C5 */ 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18,
|
||||
/* C6 */ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18,
|
||||
/* C7 */ 0x66, 0x66, 0x66, 0x67, 0x66, 0x66, 0x66, 0x66,
|
||||
/* C8 */ 0x66, 0x66, 0x67, 0x60, 0x7f, 0x00, 0x00, 0x00,
|
||||
/* C9 */ 0x00, 0x00, 0x7f, 0x60, 0x67, 0x66, 0x66, 0x66,
|
||||
/* CA */ 0x66, 0x66, 0xe7, 0x00, 0xff, 0x00, 0x00, 0x00,
|
||||
/* CB */ 0x00, 0x00, 0xff, 0x00, 0xe7, 0x66, 0x66, 0x66,
|
||||
/* CC */ 0x66, 0x66, 0x67, 0x60, 0x67, 0x66, 0x66, 0x66,
|
||||
/* CD */ 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
|
||||
/* CE */ 0x66, 0x66, 0xe7, 0x00, 0xe7, 0x66, 0x66, 0x66,
|
||||
/* CF */ 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00,
|
||||
/* D0 */ 0x66, 0x66, 0x66, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
/* D1 */ 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18,
|
||||
/* D2 */ 0x00, 0x00, 0x00, 0xff, 0x66, 0x66, 0x66, 0x66,
|
||||
/* D3 */ 0x66, 0x66, 0x66, 0x7f, 0x00, 0x00, 0x00, 0x00,
|
||||
/* D4 */ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00,
|
||||
/* D5 */ 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18,
|
||||
/* D6 */ 0x00, 0x00, 0x00, 0x7f, 0x66, 0x66, 0x66, 0x66,
|
||||
/* D7 */ 0x66, 0x66, 0x66, 0xff, 0x66, 0x66, 0x66, 0x66,
|
||||
/* D8 */ 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18,
|
||||
/* D9 */ 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00,
|
||||
/* DA */ 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18,
|
||||
/* DB */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
/* DC */ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
|
||||
/* DD */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
|
||||
/* DE */ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
|
||||
/* DF */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E2 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E3 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E4 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E5 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E6 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E8 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* E9 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* EA */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* EB */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* EC */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* ED */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* EE */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* EF */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F2 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F3 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F4 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F5 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F6 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F8 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* F9 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* FA */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* FB */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* FC */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* FD */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* FE */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* FF */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
2094
kernel/graphics/fonts/font_mini_4x6.h
Normal file
2094
kernel/graphics/fonts/font_mini_4x6.h
Normal file
File diff suppressed because it is too large
Load Diff
2575
kernel/graphics/fonts/font_pearl_8x8.h
Normal file
2575
kernel/graphics/fonts/font_pearl_8x8.h
Normal file
File diff suppressed because it is too large
Load Diff
6204
kernel/graphics/fonts/font_sun_12x22.h
Normal file
6204
kernel/graphics/fonts/font_sun_12x22.h
Normal file
File diff suppressed because it is too large
Load Diff
517
kernel/graphics/fonts/font_sun_8x16.h
Normal file
517
kernel/graphics/fonts/font_sun_8x16.h
Normal file
@@ -0,0 +1,517 @@
|
||||
|
||||
#define FONTDATAMAX_SUN8x16 4096
|
||||
|
||||
unsigned char fontdata_sun_8x16[FONTDATAMAX_SUN8x16] = {
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x7e, 0x81, 0xa5, 0x81, 0x81, 0xbd,
|
||||
0x99, 0x81, 0x81, 0x7e, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x7e, 0xff, 0xdb, 0xff, 0xff, 0xc3,
|
||||
0xe7, 0xff, 0xff, 0x7e, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x6c, 0xfe, 0xfe, 0xfe,
|
||||
0xfe, 0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7c, 0xfe,
|
||||
0x7c, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0xe7, 0xe7,
|
||||
0xe7, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff,
|
||||
0x7e, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3c,
|
||||
0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xc3,
|
||||
0xc3, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x42,
|
||||
0x42, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0x99, 0xbd,
|
||||
0xbd, 0x99, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
/* */ 0x00, 0x00, 0x1e, 0x0e, 0x1a, 0x32, 0x78, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x3c, 0x66, 0x66, 0x66, 0x66, 0x3c,
|
||||
0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x3f, 0x33, 0x3f, 0x30, 0x30, 0x30,
|
||||
0x30, 0x70, 0xf0, 0xe0, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x7f, 0x63, 0x7f, 0x63, 0x63, 0x63,
|
||||
0x63, 0x67, 0xe7, 0xe6, 0xc0, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x18, 0x18, 0xdb, 0x3c, 0xe7,
|
||||
0x3c, 0xdb, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfe, 0xf8,
|
||||
0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x02, 0x06, 0x0e, 0x1e, 0x3e, 0xfe, 0x3e,
|
||||
0x1e, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18,
|
||||
0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
|
||||
0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x7f, 0xdb, 0xdb, 0xdb, 0x7b, 0x1b,
|
||||
0x1b, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x7c, 0xc6, 0x60, 0x38, 0x6c, 0xc6, 0xc6,
|
||||
0x6c, 0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xfe, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18,
|
||||
0x7e, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x18, 0x3c, 0x7e, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x7e, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0xfe,
|
||||
0x0c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xfe,
|
||||
0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0,
|
||||
0xc0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x66, 0xff,
|
||||
0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7c,
|
||||
0x7c, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x7c, 0x7c,
|
||||
0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*!*/ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18,
|
||||
0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/*"*/ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*#*/ 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c,
|
||||
0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*$*/ 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06,
|
||||
0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18, 0x00, 0x00,
|
||||
/*%*/ 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18,
|
||||
0x30, 0x60, 0xc6, 0x86, 0x00, 0x00, 0x00, 0x00,
|
||||
/*&*/ 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/*'*/ 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*(*/ 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*)*/ 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c,
|
||||
0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
/***/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff,
|
||||
0x3c, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*+*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e,
|
||||
0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*,*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00,
|
||||
/*-*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*.*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18,
|
||||
0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||
/*0*/ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xce, 0xde, 0xf6,
|
||||
0xe6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*1*/ 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
|
||||
/*2*/ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30,
|
||||
0x60, 0xc0, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
|
||||
/*3*/ 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06,
|
||||
0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*4*/ 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe,
|
||||
0x0c, 0x0c, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0x00,
|
||||
/*5*/ 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06,
|
||||
0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*6*/ 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*7*/ 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x06, 0x0c, 0x18,
|
||||
0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
/*8*/ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*9*/ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06,
|
||||
0x06, 0x06, 0x0c, 0x78, 0x00, 0x00, 0x00, 0x00,
|
||||
/*:*/ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
|
||||
0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*;*/ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
|
||||
0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00,
|
||||
/*<*/ 0x00, 0x00, 0x00, 0x06, 0x0c, 0x18, 0x30, 0x60,
|
||||
0x30, 0x18, 0x0c, 0x06, 0x00, 0x00, 0x00, 0x00,
|
||||
/*=*/0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00,
|
||||
0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*>*/ 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06,
|
||||
0x0c, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00,
|
||||
/*?*/ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18,
|
||||
0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/*@*/ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xde, 0xde,
|
||||
0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*A*/ 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe,
|
||||
0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
|
||||
/*B*/ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66,
|
||||
0x66, 0x66, 0x66, 0xfc, 0x00, 0x00, 0x00, 0x00,
|
||||
/*C*/ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0,
|
||||
0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*D*/ 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66,
|
||||
0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x00,
|
||||
/*E*/ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68,
|
||||
0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
|
||||
/*F*/ 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68,
|
||||
0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
|
||||
/*G*/ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde,
|
||||
0xc6, 0xc6, 0x66, 0x3a, 0x00, 0x00, 0x00, 0x00,
|
||||
/*H*/ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
|
||||
/*I*/ 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*J*/ 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
|
||||
0xcc, 0xcc, 0xcc, 0x78, 0x00, 0x00, 0x00, 0x00,
|
||||
/*K*/ 0x00, 0x00, 0xe6, 0x66, 0x66, 0x6c, 0x78, 0x78,
|
||||
0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
|
||||
/*L*/ 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60,
|
||||
0x60, 0x62, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
|
||||
/*M*/ 0x00, 0x00, 0xc3, 0xe7, 0xff, 0xff, 0xdb, 0xc3,
|
||||
0xc3, 0xc3, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
|
||||
/*N*/ 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce,
|
||||
0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
|
||||
/*O*/ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*P*/ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60,
|
||||
0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
|
||||
/*Q*/ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
|
||||
0xc6, 0xd6, 0xde, 0x7c, 0x0c, 0x0e, 0x00, 0x00,
|
||||
/*R*/ 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c,
|
||||
0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
|
||||
/*S*/ 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c,
|
||||
0x06, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*T*/ 0x00, 0x00, 0xff, 0xdb, 0x99, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*U*/ 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*V*/ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
|
||||
0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/*W*/ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xdb,
|
||||
0xdb, 0xff, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
|
||||
/*X*/ 0x00, 0x00, 0xc3, 0xc3, 0x66, 0x3c, 0x18, 0x18,
|
||||
0x3c, 0x66, 0xc3, 0xc3, 0x00, 0x00, 0x00, 0x00,
|
||||
/*Y*/ 0x00, 0x00, 0xc3, 0xc3, 0xc3, 0x66, 0x3c, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*Z*/ 0x00, 0x00, 0xff, 0xc3, 0x86, 0x0c, 0x18, 0x30,
|
||||
0x60, 0xc1, 0xc3, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
/*[*/ 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*\*/ 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38,
|
||||
0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
/*]*/ 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
|
||||
0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*^*/ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*_*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
|
||||
/* */ 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/*a*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/*b*/ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66,
|
||||
0x66, 0x66, 0x66, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*c*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0,
|
||||
0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*d*/ 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/*e*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe,
|
||||
0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*f*/ 0x00, 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60,
|
||||
0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
|
||||
/*g*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78, 0x00,
|
||||
/*h*/ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66,
|
||||
0x66, 0x66, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
|
||||
/*i*/ 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*j*/ 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06,
|
||||
0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c, 0x00,
|
||||
/*k*/ 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78,
|
||||
0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00, 0x00, 0x00,
|
||||
/*l*/ 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*m*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0xff, 0xdb,
|
||||
0xdb, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00,
|
||||
/*n*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66,
|
||||
0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
|
||||
/*o*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*p*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66,
|
||||
0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0, 0x00,
|
||||
/*q*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e, 0x00,
|
||||
/*r*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66,
|
||||
0x60, 0x60, 0x60, 0xf0, 0x00, 0x00, 0x00, 0x00,
|
||||
/*s*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x60,
|
||||
0x38, 0x0c, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*t*/ 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30,
|
||||
0x30, 0x30, 0x36, 0x1c, 0x00, 0x00, 0x00, 0x00,
|
||||
/*u*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/*v*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3,
|
||||
0xc3, 0x66, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/*w*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0xc3, 0xc3,
|
||||
0xdb, 0xdb, 0xff, 0x66, 0x00, 0x00, 0x00, 0x00,
|
||||
/*x*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x66, 0x3c,
|
||||
0x18, 0x3c, 0x66, 0xc3, 0x00, 0x00, 0x00, 0x00,
|
||||
/*y*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0xf8, 0x00,
|
||||
/*z*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18,
|
||||
0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
|
||||
/*{*/ 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18,
|
||||
0x18, 0x18, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00,
|
||||
/*|*/ 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18,
|
||||
0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/*}*/ 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18,
|
||||
0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00,
|
||||
/*~*/ 0x00, 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6,
|
||||
0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0,
|
||||
0xc2, 0x66, 0x3c, 0x0c, 0x06, 0x7c, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0xcc, 0x00, 0x00, 0xcc, 0xcc, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x7c, 0xc6, 0xfe,
|
||||
0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x78, 0x0c, 0x7c,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0xcc, 0x00, 0x00, 0x78, 0x0c, 0x7c,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0c, 0x7c,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x38, 0x6c, 0x38, 0x00, 0x78, 0x0c, 0x7c,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x66, 0x60, 0x60,
|
||||
0x66, 0x3c, 0x0c, 0x06, 0x3c, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xfe,
|
||||
0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xfe,
|
||||
0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xfe,
|
||||
0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x18, 0x3c, 0x66, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0xc6, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6,
|
||||
0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x38, 0x6c, 0x38, 0x00, 0x38, 0x6c, 0xc6, 0xc6,
|
||||
0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x18, 0x30, 0x60, 0x00, 0xfe, 0x66, 0x60, 0x7c,
|
||||
0x60, 0x60, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x3b, 0x1b,
|
||||
0x7e, 0xd8, 0xdc, 0x77, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x3e, 0x6c, 0xcc, 0xcc, 0xfe, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0xce, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x10, 0x38, 0x6c, 0x00, 0x7c, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0xc6, 0x00, 0x00, 0x7c, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x60, 0x30, 0x18, 0x00, 0x7c, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x30, 0x78, 0xcc, 0x00, 0xcc, 0xcc, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x60, 0x30, 0x18, 0x00, 0xcc, 0xcc, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0xc6, 0x00, 0x00, 0xc6, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78, 0x00,
|
||||
/* */ 0x00, 0xc6, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0xc6, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x18, 0x18, 0x7e, 0xc3, 0xc0, 0xc0, 0xc0,
|
||||
0xc3, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x38, 0x6c, 0x64, 0x60, 0xf0, 0x60, 0x60,
|
||||
0x60, 0x60, 0xe6, 0xfc, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0xc3, 0x66, 0x3c, 0x18, 0xff, 0x18,
|
||||
0xff, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0xfc, 0x66, 0x66, 0x7c, 0x62, 0x66, 0x6f,
|
||||
0x66, 0x66, 0x66, 0xf3, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x0e, 0x1b, 0x18, 0x18, 0x18, 0x7e, 0x18,
|
||||
0x18, 0x18, 0x18, 0x18, 0xd8, 0x70, 0x00, 0x00,
|
||||
/* */ 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0c, 0x7c,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x0c, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x18, 0x30, 0x60, 0x00, 0x7c, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x18, 0x30, 0x60, 0x00, 0xcc, 0xcc, 0xcc,
|
||||
0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x76, 0xdc, 0x00, 0xdc, 0x66, 0x66,
|
||||
0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x76, 0xdc, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde,
|
||||
0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x3c, 0x6c, 0x6c, 0x3e, 0x00, 0x7e, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x7c, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60,
|
||||
0xc0, 0xc6, 0xc6, 0x7c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xc0,
|
||||
0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06,
|
||||
0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30,
|
||||
0x60, 0xce, 0x9b, 0x06, 0x0c, 0x1f, 0x00, 0x00,
|
||||
/* */ 0x00, 0xc0, 0xc0, 0xc2, 0xc6, 0xcc, 0x18, 0x30,
|
||||
0x66, 0xce, 0x96, 0x3e, 0x06, 0x06, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18,
|
||||
0x3c, 0x3c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6c, 0xd8,
|
||||
0x6c, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x6c, 0x36,
|
||||
0x6c, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
|
||||
0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44,
|
||||
/* */ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
|
||||
0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa,
|
||||
/* */ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
|
||||
0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0xf8,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xf6,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x06, 0xf6,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf6, 0x06, 0xfe,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xfe,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0xf8,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xff,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3f,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x30, 0x37,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xff,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xf7,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0xf7, 0x00, 0xf7,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0xff,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3f,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x1f,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x1f,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xff,
|
||||
0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0xff,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xf8,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
/* */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
|
||||
0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
|
||||
/* */ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
|
||||
0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
|
||||
/* */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0xd8,
|
||||
0xd8, 0xd8, 0xdc, 0x76, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x78, 0xcc, 0xcc, 0xcc, 0xd8, 0xcc,
|
||||
0xc6, 0xc6, 0xc6, 0xcc, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0xfe, 0xc6, 0xc6, 0xc0, 0xc0, 0xc0,
|
||||
0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x6c, 0x6c, 0x6c,
|
||||
0x6c, 0x6c, 0x6c, 0x6c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x60, 0x30, 0x18,
|
||||
0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xd8, 0xd8,
|
||||
0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66,
|
||||
0x66, 0x7c, 0x60, 0x60, 0xc0, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x7e, 0x18, 0x3c, 0x66, 0x66,
|
||||
0x66, 0x3c, 0x18, 0x7e, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xfe,
|
||||
0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xc6, 0x6c,
|
||||
0x6c, 0x6c, 0x6c, 0xee, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x1e, 0x30, 0x18, 0x0c, 0x3e, 0x66,
|
||||
0x66, 0x66, 0x66, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xdb, 0xdb,
|
||||
0xdb, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x03, 0x06, 0x7e, 0xdb, 0xdb,
|
||||
0xf3, 0x7e, 0x60, 0xc0, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x1c, 0x30, 0x60, 0x60, 0x7c, 0x60,
|
||||
0x60, 0x60, 0x30, 0x1c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6,
|
||||
0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe,
|
||||
0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18,
|
||||
0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x06, 0x0c,
|
||||
0x18, 0x30, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0x30,
|
||||
0x18, 0x0c, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x0e, 0x1b, 0x1b, 0x1b, 0x18, 0x18,
|
||||
0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
/* */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
|
||||
0xd8, 0xd8, 0xd8, 0x70, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7e,
|
||||
0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xdc, 0x00,
|
||||
0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
|
||||
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x0f, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xec,
|
||||
0x6c, 0x6c, 0x3c, 0x1c, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0xd8, 0x6c, 0x6c, 0x6c, 0x6c, 0x6c, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x70, 0xd8, 0x30, 0x60, 0xc8, 0xf8, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x7c,
|
||||
0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
/* */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
1542
kernel/graphics/fonts/font_ter_16x32.h
Normal file
1542
kernel/graphics/fonts/font_ter_16x32.h
Normal file
File diff suppressed because it is too large
Load Diff
317
kernel/graphics/framebuffer.h
Normal file
317
kernel/graphics/framebuffer.h
Normal file
@@ -0,0 +1,317 @@
|
||||
/*! \file
|
||||
* \brief \ref Framebuffer implementing primitive graphic operations
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../types.h"
|
||||
#include "../utils/string.h"
|
||||
#include "primitives.h"
|
||||
|
||||
/*! \brief Implementation of primitive operations on a memory area used as
|
||||
* framebuffer.
|
||||
* \ingroup gfx
|
||||
*
|
||||
* The implementation as template class allows the compiler to heavily optimize
|
||||
* the bit operations depending on the video mode.
|
||||
*
|
||||
* \tparam COLORDEPTH color depth of video mode
|
||||
* \tparam OFFSET_RED Bit position of red color mask in video mode
|
||||
* \tparam OFFSET_GREEN Bit position of green color mask in video mode
|
||||
* \tparam OFFSET_BLUE Bit position of blue color mask in video mode
|
||||
* \tparam BITS_RED Size of red color mask in video mode
|
||||
* \tparam BITS_GREEN Size of green color mask in video mode
|
||||
* \tparam BITS_BLUE Size of blue color mask in video mode
|
||||
*/
|
||||
template <unsigned char COLORDEPTH, unsigned char OFFSET_RED,
|
||||
unsigned char OFFSET_GREEN, unsigned char OFFSET_BLUE,
|
||||
unsigned char BITS_RED, unsigned char BITS_GREEN,
|
||||
unsigned char BITS_BLUE>
|
||||
class Framebuffer {
|
||||
/*! \brief Start address of the linear framebuffer
|
||||
*/
|
||||
uintptr_t framebuffer;
|
||||
|
||||
/*! \brief Internal width of the screen
|
||||
*
|
||||
* At least the visible width of the screen, depends on the hardware but
|
||||
* required for calculating the rows
|
||||
*/
|
||||
unsigned pitch;
|
||||
|
||||
protected:
|
||||
/*! \brief Visible width of the screen
|
||||
*/
|
||||
unsigned screen_width;
|
||||
|
||||
/*! \brief Visible height of the screen
|
||||
*/
|
||||
unsigned screen_height;
|
||||
|
||||
/*! \brief Initialize screen dimensions
|
||||
*
|
||||
* \param width visible width of graphics screen
|
||||
* \param height visible height of graphics screen
|
||||
* \param pitch width of graphics screen (including invisible part, has to
|
||||
* be at least `width`)
|
||||
*/
|
||||
void init(const unsigned width, const unsigned height,
|
||||
const unsigned pitch) {
|
||||
this->screen_width = width;
|
||||
this->screen_height = height;
|
||||
this->pitch = pitch;
|
||||
}
|
||||
|
||||
/*! \brief Set the video memory address
|
||||
*
|
||||
* \param lfb pointer to the linear framebuffer (lfb)
|
||||
*/
|
||||
void buffer(void *lfb) { framebuffer = reinterpret_cast<uintptr_t>(lfb); }
|
||||
|
||||
/*! \brief Clear all pixel of the current back buffer
|
||||
* (set full screen to black)
|
||||
*/
|
||||
void clear() {
|
||||
memset(reinterpret_cast<void *>(framebuffer), 0, screen_height * pitch);
|
||||
}
|
||||
|
||||
/*! \brief Pixel component
|
||||
*
|
||||
* \tparam OFFSET Bit position of mask
|
||||
* \tparam BITS Size of mask
|
||||
*/
|
||||
template <unsigned OFFSET, unsigned SIZE>
|
||||
class PixelComponent {
|
||||
unsigned : OFFSET; ///< Reserved space for offset
|
||||
unsigned value : SIZE; ///< Value
|
||||
|
||||
public:
|
||||
/*! \brief Constructor
|
||||
*
|
||||
* \param value Initial component value
|
||||
*/
|
||||
explicit PixelComponent(unsigned value) : value(value) {}
|
||||
|
||||
/*! \brief Assign component value
|
||||
* (from a \ref SpritePixelComponent with different bit mask size)
|
||||
*
|
||||
* \tparam BITS Size of bit mask
|
||||
* \param other new component value
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
void set(const struct SpritePixelComponent<BITS> &other) {
|
||||
value = BITS > SIZE ? (other.value >> (BITS - SIZE))
|
||||
: (other.value << (SIZE - BITS));
|
||||
}
|
||||
|
||||
/*! \brief Assign component value
|
||||
* (from a \ref SpritePixelComponent with same bit mask size)
|
||||
*
|
||||
* \param other new component value
|
||||
*/
|
||||
void set(const struct SpritePixelComponent<SIZE> &other) {
|
||||
value = other.value;
|
||||
}
|
||||
|
||||
/*! \brief Assign component value
|
||||
* (from an integer)
|
||||
*
|
||||
* \param value new component value
|
||||
*/
|
||||
void set(unsigned value) {
|
||||
value = 8 > SIZE ? (value >> (8 - SIZE)) : (value << (SIZE - 8));
|
||||
}
|
||||
|
||||
/*! \brief Alpha blend component value
|
||||
* (from a \ref SpritePixelComponent with different bit mask size)
|
||||
*
|
||||
* \tparam BITS Size of bit mask
|
||||
* \param other component value to blend
|
||||
* \param alpha transparency used for blending
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
void blend(const struct SpritePixelComponent<BITS> &other,
|
||||
const struct SpritePixelComponent<BITS> &alpha) {
|
||||
int other_value = BITS > SIZE ? (other.value >> (BITS - SIZE))
|
||||
: (other.value << (SIZE - BITS));
|
||||
int other_alpha = BITS > SIZE ? (alpha.value >> (BITS - SIZE))
|
||||
: (alpha.value << (SIZE - BITS));
|
||||
value +=
|
||||
((other_value - static_cast<int>(value)) * other_alpha) >> SIZE;
|
||||
}
|
||||
|
||||
/*! \brief Alpha blend component value
|
||||
* (from a \ref SpritePixelComponent with same bit mask size)
|
||||
*
|
||||
* \param other component value to blend
|
||||
* \param alpha transparency used for blending
|
||||
*/
|
||||
void blend(const struct SpritePixelComponent<SIZE> &other,
|
||||
const struct SpritePixelComponent<SIZE> &alpha) {
|
||||
value +=
|
||||
((static_cast<int>(other.value) - static_cast<int>(value)) *
|
||||
alpha.value) >>
|
||||
SIZE;
|
||||
}
|
||||
} __attribute__((packed));
|
||||
|
||||
/*! \brief Pixel (colored)
|
||||
*/
|
||||
union Pixel {
|
||||
/*! \brief Bits per pixel
|
||||
*/
|
||||
struct {
|
||||
unsigned data : COLORDEPTH; ///< RGB value
|
||||
} __attribute__((packed));
|
||||
|
||||
PixelComponent<OFFSET_RED, BITS_RED> red; ///< Red color component
|
||||
PixelComponent<OFFSET_GREEN, BITS_GREEN>
|
||||
green; ///< Green color component
|
||||
PixelComponent<OFFSET_BLUE, BITS_BLUE> blue; ///< Blue color component
|
||||
|
||||
/*! \brief Constructor (using RGB value)
|
||||
*
|
||||
* \param data RGB value
|
||||
*/
|
||||
explicit Pixel(const unsigned data) : data(data) {}
|
||||
|
||||
/*! \brief Constructor (using explicit RGB components)
|
||||
*
|
||||
* Unused bits are zeroed.
|
||||
*
|
||||
* \param r Red color component
|
||||
* \param g Green color component
|
||||
* \param b Blue color component
|
||||
*/
|
||||
Pixel(const unsigned r, const unsigned g, const unsigned b) : data(0) {
|
||||
red.set(r);
|
||||
green.set(g);
|
||||
blue.set(b);
|
||||
}
|
||||
|
||||
/*! \brief Constructor (using \ref SpritePixel)
|
||||
*
|
||||
* \tparam ALPHA `true` if alpha channel
|
||||
* \tparam BITS Size of mask
|
||||
* \param other other
|
||||
*/
|
||||
template <bool ALPHA, unsigned BITS>
|
||||
explicit Pixel(const struct SpritePixel<RGB, ALPHA, BITS> &other) {
|
||||
red.set(other.red);
|
||||
green.set(other.green);
|
||||
blue.set(other.blue);
|
||||
}
|
||||
|
||||
/*! \brief Get color of pixel
|
||||
*
|
||||
* \return color of pixel
|
||||
*/
|
||||
Color getColor() const { return Color(red, green, blue); }
|
||||
|
||||
/*! \brief Assign pixel (with colored \ref SpritePixel)
|
||||
*
|
||||
* \tparam BITS Size of other pixels mask
|
||||
* \param other other pixel
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
Pixel &operator=(const struct SpritePixel<RGB, false, BITS> &other) {
|
||||
red.set(other.red);
|
||||
green.set(other.green);
|
||||
blue.set(other.blue);
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*! \brief Assign pixel (with greyscale \ref SpritePixel)
|
||||
*
|
||||
* \tparam BITS Size of other pixels mask
|
||||
* \param other other pixel
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
Pixel &operator=(
|
||||
const struct SpritePixel<GREYSCALE, false, BITS> &other) {
|
||||
red.set(other.luminance);
|
||||
green.set(other.luminance);
|
||||
blue.set(other.luminance);
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*! \brief Assign pixel (with greyscale \ref SpritePixel supporting
|
||||
* transparency)
|
||||
*
|
||||
* \tparam BITS Size of other pixels mask
|
||||
* \param other other pixel
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
Pixel &operator=(const struct SpritePixel<RGB, true, BITS> &other) {
|
||||
red.blend(other.red, other.alpha);
|
||||
green.blend(other.green, other.alpha);
|
||||
blue.blend(other.blue, other.alpha);
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*! \brief Assign pixel (with greyscale \ref SpritePixel supporting
|
||||
* transparency)
|
||||
*
|
||||
* \tparam BITS Size of other pixels mask
|
||||
* \param other other pixel
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
Pixel &operator=(
|
||||
const struct SpritePixel<GREYSCALE, true, BITS> &other) {
|
||||
red.blend(other.luminance, other.alpha);
|
||||
green.blend(other.luminance, other.alpha);
|
||||
blue.blend(other.luminance, other.alpha);
|
||||
return *this;
|
||||
}
|
||||
} __attribute__((packed));
|
||||
static_assert(OFFSET_RED + BITS_RED <= COLORDEPTH &&
|
||||
OFFSET_GREEN + BITS_GREEN <= COLORDEPTH &&
|
||||
OFFSET_BLUE + BITS_BLUE <= COLORDEPTH,
|
||||
"color settings invalid!");
|
||||
|
||||
/*! \brief Get pixel at position
|
||||
*
|
||||
* \param x X position
|
||||
* \param y Y position
|
||||
* \return Pointer to pixel
|
||||
*/
|
||||
Pixel *get(const unsigned x, const unsigned y) const {
|
||||
return reinterpret_cast<Pixel *>(framebuffer + y * pitch) + x;
|
||||
}
|
||||
|
||||
/*! \brief Get pixel at position
|
||||
*
|
||||
* \param p Coordinate of position
|
||||
* \return Pointer to pixel
|
||||
*/
|
||||
Pixel *get(const Point &p) const { return get(p.x, p.y); }
|
||||
|
||||
/*! \brief Assign color to a pixel at a given position
|
||||
*
|
||||
* \tparam COLOR color or greyscale?
|
||||
* \tparam ALPHA with transparency?
|
||||
* \tparam BITS Size of mask
|
||||
* \param x X position
|
||||
* \param y Y position
|
||||
* \param color color to assign
|
||||
*/
|
||||
template <enum SpriteColorMode COLOR, bool ALPHA, unsigned BITS>
|
||||
void set(const unsigned x, const unsigned y,
|
||||
const SpritePixel<COLOR, ALPHA, BITS> &color) {
|
||||
Pixel *pos = get(x, y);
|
||||
*pos = color;
|
||||
}
|
||||
|
||||
/*! \brief Assign color to a pixel at a given position
|
||||
*
|
||||
* \tparam COLOR color or greyscale?
|
||||
* \tparam ALPHA with transparency?
|
||||
* \tparam BITS Size of mask
|
||||
* \param p Coordinate of position
|
||||
* \param color color to assign
|
||||
*/
|
||||
template <enum SpriteColorMode COLOR, bool ALPHA, unsigned BITS>
|
||||
void set(const Point &p, const SpritePixel<COLOR, ALPHA, BITS> &color) {
|
||||
set(p.x, p.y, color);
|
||||
}
|
||||
};
|
||||
168
kernel/graphics/primitives.h
Normal file
168
kernel/graphics/primitives.h
Normal file
@@ -0,0 +1,168 @@
|
||||
/*! \file
|
||||
* \brief Graphics primitives like \ref Point
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/*! \brief Coordinate on the graphic screen
|
||||
* \ingroup gfx
|
||||
*/
|
||||
struct Point {
|
||||
/*! \brief X Position
|
||||
*/
|
||||
int x;
|
||||
|
||||
/*! \brief X Position
|
||||
*/
|
||||
int y;
|
||||
|
||||
/*! \brief Default Constructor
|
||||
*
|
||||
* Initializing the point to the initial position (0, 0)
|
||||
*/
|
||||
Point() : x(0), y(0) {}
|
||||
|
||||
/*! \brief Constructor
|
||||
*
|
||||
* \brief x X Position
|
||||
* \brief y Y Position
|
||||
*/
|
||||
Point(int x, int y) : x(x), y(y) {}
|
||||
|
||||
/*! \brief Summation of two points
|
||||
*/
|
||||
Point operator+(const Point& that) const {
|
||||
return Point(x + that.x, y + that.y);
|
||||
}
|
||||
|
||||
/*! \brief Assignment summation of two points
|
||||
*/
|
||||
Point& operator+=(const Point& that) {
|
||||
x += that.x;
|
||||
y += that.y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
/*! \brief Difference of two points
|
||||
*/
|
||||
Point operator-(const Point& that) const {
|
||||
return Point(x - that.x, y - that.y);
|
||||
}
|
||||
|
||||
/*! \brief Assignment difference of two points
|
||||
*/
|
||||
Point& operator-=(const Point& that) {
|
||||
x -= that.x;
|
||||
y -= that.y;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
/*! \brief Color modes
|
||||
* \ingroup gfx
|
||||
*/
|
||||
enum SpriteColorMode {
|
||||
RGB, ///< Additive color mode (red, green & blue)
|
||||
GREYSCALE, ///< Greyscale
|
||||
};
|
||||
|
||||
/*! \brief Sprite pixel component
|
||||
* \ingroup gfx
|
||||
*
|
||||
* \tparam BITS mask size
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
struct __attribute__((packed)) SpritePixelComponent {
|
||||
/*! \brief Sprite pixel component value
|
||||
*/
|
||||
unsigned int value : BITS;
|
||||
|
||||
/*! \brief Default constructor
|
||||
* (sets initial value to zero)
|
||||
*/
|
||||
SpritePixelComponent() : value(0) {}
|
||||
|
||||
/*! \brief Constructor
|
||||
*
|
||||
* \param value Value for component
|
||||
*/
|
||||
explicit SpritePixelComponent(unsigned int value) : value(value) {}
|
||||
};
|
||||
|
||||
template <enum SpriteColorMode COLOR, bool ALPHA, unsigned BITS>
|
||||
struct __attribute__((packed)) SpritePixel;
|
||||
|
||||
/*! \brief Colored pixel with transparency
|
||||
* \ingroup gfx
|
||||
*
|
||||
* \tparam BITS Size of mask
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
struct __attribute__((packed)) SpritePixel<RGB, true, BITS> {
|
||||
SpritePixelComponent<BITS> red;
|
||||
SpritePixelComponent<BITS> green;
|
||||
SpritePixelComponent<BITS> blue;
|
||||
SpritePixelComponent<BITS> alpha;
|
||||
SpritePixel(unsigned red, unsigned green, unsigned blue, unsigned alpha)
|
||||
: red(red), green(green), blue(blue), alpha(alpha) {}
|
||||
SpritePixel() {}
|
||||
};
|
||||
|
||||
/*! \brief Colored pixel without transparency
|
||||
* \ingroup gfx
|
||||
*
|
||||
* \tparam BITS Size of mask
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
struct __attribute__((packed)) SpritePixel<RGB, false, BITS> {
|
||||
SpritePixelComponent<BITS> red;
|
||||
SpritePixelComponent<BITS> green;
|
||||
SpritePixelComponent<BITS> blue;
|
||||
|
||||
SpritePixel(unsigned red, unsigned green, unsigned blue)
|
||||
: red(red), green(green), blue(blue) {}
|
||||
SpritePixel() {}
|
||||
};
|
||||
|
||||
/*! \brief Greyscale pixel with transparency
|
||||
* \ingroup gfx
|
||||
*
|
||||
* \tparam BITS Size of mask
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
struct __attribute__((packed)) SpritePixel<GREYSCALE, true, BITS> {
|
||||
SpritePixelComponent<BITS> luminance;
|
||||
SpritePixelComponent<BITS> alpha;
|
||||
SpritePixel(unsigned luminance, unsigned alpha)
|
||||
: luminance(luminance), alpha(alpha) {}
|
||||
SpritePixel() {}
|
||||
};
|
||||
|
||||
/*! \brief Greyscale pixel without transparency
|
||||
* \ingroup gfx
|
||||
*
|
||||
* \tparam BITS Size of mask
|
||||
*/
|
||||
template <unsigned BITS>
|
||||
struct __attribute__((packed)) SpritePixel<GREYSCALE, false, BITS> {
|
||||
SpritePixelComponent<BITS> luminance;
|
||||
|
||||
explicit SpritePixel(unsigned luminance) : luminance(luminance) {}
|
||||
SpritePixel() {}
|
||||
};
|
||||
|
||||
typedef struct SpritePixel<RGB, false, 8> Color;
|
||||
typedef struct SpritePixel<RGB, true, 8> ColorAlpha;
|
||||
|
||||
/*! \brief GIMP image
|
||||
* \ingroup gfx
|
||||
*
|
||||
* Image exported as C-source (without `Glib` types!) in
|
||||
* [GIMP](https://www.gimp.org/), supports alpha blending (transparency).
|
||||
*/
|
||||
struct GIMP {
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int bytes_per_pixel;
|
||||
unsigned char pixel_data[];
|
||||
};
|
||||
40
kernel/graphics/printer.cc
Normal file
40
kernel/graphics/printer.cc
Normal file
@@ -0,0 +1,40 @@
|
||||
#include "printer.h"
|
||||
|
||||
#include "../debug/output.h"
|
||||
#include "../utils/size.h"
|
||||
|
||||
// Predefined video modes (should suit the most common ones)
|
||||
static GraphicsPrinter<32, 16, 8, 0, 8, 8, 8> default_32bit;
|
||||
static GraphicsPrinter<24, 16, 8, 0, 8, 8, 8> default_24bit;
|
||||
static GraphicsPrinter<16, 11, 5, 0, 5, 6, 5> default_16bit;
|
||||
static GraphicsPrinter<15, 10, 5, 0, 5, 5, 5> default_15bit;
|
||||
static GraphicsPrinter<8, 5, 2, 0, 3, 3, 2> default_8bit;
|
||||
|
||||
AbstractGraphicsPrinter* supportedGraphicModes[] = {
|
||||
&default_32bit, &default_24bit, &default_16bit,
|
||||
&default_15bit, &default_8bit,
|
||||
};
|
||||
|
||||
AbstractGraphicsPrinter* AbstractGraphicsPrinter::getMode(
|
||||
uint8_t colordepth, uint8_t offset_red, uint8_t offset_green,
|
||||
uint8_t offset_blue, uint8_t bits_red, uint8_t bits_green,
|
||||
uint8_t bits_blue) {
|
||||
for (unsigned m = 0; m < ::size(supportedGraphicModes); m++) {
|
||||
if (supportedGraphicModes[m]->checkMode(
|
||||
colordepth, offset_red, offset_green, offset_blue, bits_red,
|
||||
bits_green, bits_blue)) {
|
||||
return supportedGraphicModes[m];
|
||||
}
|
||||
}
|
||||
// Show error message (DBG should be copied to serial as well for
|
||||
// debugging!)
|
||||
DBG_VERBOSE << "No GraphicsPrinter<" << static_cast<int>(colordepth) << ", "
|
||||
<< static_cast<int>(offset_red) << ", "
|
||||
<< static_cast<int>(offset_green) << ", "
|
||||
<< static_cast<int>(offset_blue) << ", "
|
||||
<< static_cast<int>(bits_red) << ", "
|
||||
<< static_cast<int>(bits_green) << ", "
|
||||
<< static_cast<int>(bits_blue)
|
||||
<< "> instance available - please add!" << endl;
|
||||
return nullptr;
|
||||
}
|
||||
688
kernel/graphics/printer.h
Normal file
688
kernel/graphics/printer.h
Normal file
@@ -0,0 +1,688 @@
|
||||
/*! \file
|
||||
* \brief \ref GraphicsPrinter and its \ref AbstractGraphicsPrinter
|
||||
* "abstraction"
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../utils/math.h"
|
||||
#include "../utils/png.h"
|
||||
#include "fonts/font.h"
|
||||
#include "framebuffer.h"
|
||||
#include "primitives.h"
|
||||
|
||||
/*! \brief Abstraction of basic graphics printing functions
|
||||
* \ingroup gfx
|
||||
*
|
||||
* The actual implementation is placed in the inherited template class
|
||||
* \ref GraphicsPrinter for performance reasons.
|
||||
*/
|
||||
class AbstractGraphicsPrinter {
|
||||
protected:
|
||||
/*! \brief Check if a printer is available for a video mode
|
||||
*
|
||||
* This is required since printers are defined during compile time for
|
||||
* performance reasons.
|
||||
*
|
||||
* \tparam colordepth color depth of video mode
|
||||
* \tparam offset_red Bit position of red color mask in video mode
|
||||
* \tparam offset_green Bit position of green color mask in video mode
|
||||
* \tparam offset_blue Bit position of blue color mask in video mode
|
||||
* \tparam bits_red Size of red color mask in video mode
|
||||
* \tparam bits_green Size of green color mask in video mode
|
||||
* \tparam bits_blue Size of blue color mask in video mode
|
||||
* \return `true` if a printer for the video mode is available
|
||||
*/
|
||||
virtual bool checkMode(uint8_t colordepth, uint8_t offset_red,
|
||||
uint8_t offset_green, uint8_t offset_blue,
|
||||
uint8_t bits_red, uint8_t bits_green,
|
||||
uint8_t bits_blue) = 0;
|
||||
|
||||
public:
|
||||
/*! \brief Initialize printer with actual screen dimensions
|
||||
*
|
||||
* \param width visible width of graphics screen
|
||||
* \param height visible height of graphics screen
|
||||
* \param pitch width of graphics screen (including invisible part, has to
|
||||
* be at least `width`)
|
||||
*/
|
||||
virtual void init(unsigned width, unsigned height, unsigned pitch) = 0;
|
||||
|
||||
/*! \brief Set the video memory address
|
||||
*
|
||||
* \param lfb pointer to the linear framebuffer (lfb)
|
||||
*/
|
||||
virtual void buffer(void* lfb) = 0;
|
||||
|
||||
/*! \brief Clear all pixel of the current back buffer
|
||||
* (set full screen to black)
|
||||
*/
|
||||
virtual void clear() = 0;
|
||||
|
||||
/*! \brief Check if a \ref Point can be displayed at the current resolution
|
||||
*
|
||||
* \param p Coordinates to check
|
||||
* \return 'true' if can be displayed
|
||||
*/
|
||||
virtual bool valid(const Point& p) const = 0;
|
||||
|
||||
/*! \brief Number of vertical pixels in current resolution
|
||||
*
|
||||
* \return Height of the screen in current video mode
|
||||
*/
|
||||
virtual unsigned height() const = 0;
|
||||
|
||||
/*! \brief Number of horizontal pixels in current resolution
|
||||
*
|
||||
* \return Width of the screen in current video mode
|
||||
*/
|
||||
virtual unsigned width() const = 0;
|
||||
|
||||
/*! \brief Draw a pixel
|
||||
*
|
||||
* \param p Coordinates of the pixel
|
||||
* \param color Color of the pixel
|
||||
*/
|
||||
virtual void pixel(const Point& p, const Color& color) = 0;
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::pixel()
|
||||
virtual void pixel(const Point& p, const ColorAlpha& color) = 0;
|
||||
|
||||
/*! \brief Draw a line
|
||||
*
|
||||
* \param start Coordinates of the begin of the line
|
||||
* \param end Coordinates of the end of the line
|
||||
* \param color Color of the line
|
||||
*/
|
||||
virtual void line(const Point& start, const Point& end,
|
||||
const Color& color) = 0;
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::line()
|
||||
virtual void line(const Point& start, const Point& end,
|
||||
const ColorAlpha& color) = 0;
|
||||
|
||||
/*! \brief Draw a rectangle on the current back buffer
|
||||
*
|
||||
* \param start Coordinate of the rectangles upper left corner
|
||||
* \param end Coordinate of the rectangles lower right corner
|
||||
* \param color Color of the rectangle
|
||||
* \param filled If set, the rectangle will be filled with the same color.
|
||||
* (otherwise only borders will be drawn)
|
||||
*/
|
||||
virtual void rectangle(const Point& start, const Point& end,
|
||||
const Color& color, bool filled = true) = 0;
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::rectangle()
|
||||
virtual void rectangle(const Point& start, const Point& end,
|
||||
const ColorAlpha& color, bool filled = true) = 0;
|
||||
|
||||
/*! \brief Change the current font for text output in video mode
|
||||
*
|
||||
* \param new_font Font to be used on subsequent calls to
|
||||
* \ref AbstractGraphicsPrinter::text() (without explicit font parameter)
|
||||
*/
|
||||
virtual void font(const Font& new_font) = 0;
|
||||
|
||||
/*! \brief Print text (without automatic word wrap).
|
||||
*
|
||||
* \param p Upper left start position of the text
|
||||
* \param string Pointer to char array containing the text to be displayed
|
||||
* \param len Number of characters to be displayed
|
||||
* \param color Color for the text characters
|
||||
* \param font Explicit font -- or `nullptr` to use default font (set by
|
||||
* \ref font method)
|
||||
*/
|
||||
virtual void text(const Point& p, const char* string, unsigned len,
|
||||
const Color& color, const Font* font = nullptr) = 0;
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::text()
|
||||
virtual void text(const Point& p, const char* string, unsigned len,
|
||||
const ColorAlpha& color, const Font* font = nullptr) = 0;
|
||||
|
||||
/*! \brief Draw a \ref PNG image (or detail)
|
||||
*
|
||||
* The image can has to be in a supported \ref PNG format.
|
||||
* Alpha blending (transparency) is supported.
|
||||
*
|
||||
* \param p Coordinate of the images upper left corner
|
||||
* \param image Source image to display
|
||||
* \param width Width of the image detail (full image width of the source
|
||||
* image if zero/default value)
|
||||
* \param height Height of the image detail (full image height of the source
|
||||
* if zero/default value)
|
||||
* \param offset_x Right offset of the source image
|
||||
* \param offset_y Top offset of the source image
|
||||
*/
|
||||
virtual void image(const Point& p, PNG& image, unsigned width = 0,
|
||||
unsigned height = 0, unsigned offset_x = 0,
|
||||
unsigned offset_y = 0) = 0;
|
||||
|
||||
/*! \brief Draw a GIMP image (or detail)
|
||||
*
|
||||
* The image has to be exported as C-source (without `Glib` types!) in
|
||||
* [GIMP](https://www.gimp.org/), alpha blending (transparency) is
|
||||
* supported.
|
||||
*
|
||||
* \param p Coordinate of the images upper left corner
|
||||
* \param image Source image to display
|
||||
* \param width Width of the image detail (full image width of the source
|
||||
* image if zero/default value)
|
||||
* \param height Height of the image detail (full image height of the source
|
||||
* if zero/default value)
|
||||
* \param offset_x Right offset of the source image
|
||||
* \param offset_y Top offset of the source image
|
||||
*/
|
||||
virtual void image(const Point& p, const GIMP& image, unsigned width = 0,
|
||||
unsigned height = 0, unsigned offset_x = 0,
|
||||
unsigned offset_y = 0) = 0;
|
||||
|
||||
/*! \brief Draw a sprite.
|
||||
*
|
||||
* Each element in the source array will be displayed as a single pixel.
|
||||
*
|
||||
* \param p Coordinate of the sprites upper left corner
|
||||
* \param image Source sprite to display
|
||||
* \param width Width of the sprite detail
|
||||
* \param height Height of the sprite detail
|
||||
* \param offset_x Right offset of the source sprite
|
||||
* \param offset_y Top offset of the source sprite
|
||||
*/
|
||||
virtual void image(const Point& p, const Color* image, unsigned width,
|
||||
unsigned height, unsigned offset_x = 0,
|
||||
unsigned offset_y = 0) = 0;
|
||||
|
||||
/*! \brief Draw a sprite with alpha blending (transparency).
|
||||
*
|
||||
* Each element in the source array will be displayed as a single pixel.
|
||||
*
|
||||
* \param p Coordinate of the sprites upper left corner
|
||||
* \param image Source sprite to display
|
||||
* \param width Width of the sprite detail
|
||||
* \param height Height of the sprite detail
|
||||
* \param offset_x Right offset of the source sprite
|
||||
* \param offset_y Top offset of the source sprite
|
||||
*/
|
||||
virtual void image(const Point& p, const ColorAlpha* image, unsigned width,
|
||||
unsigned height, unsigned offset_x = 0,
|
||||
unsigned offset_y = 0) = 0;
|
||||
|
||||
static AbstractGraphicsPrinter* getMode(
|
||||
uint8_t colordepth, uint8_t offset_red, uint8_t offset_green,
|
||||
uint8_t offset_blue, uint8_t bits_red, uint8_t bits_green,
|
||||
uint8_t bits_blue);
|
||||
};
|
||||
|
||||
/*! \brief Actual implementation of basic graphics printing functions
|
||||
* \ingroup gfx
|
||||
*
|
||||
* The implementation as template class requires the definition of the
|
||||
* desired video mode during compile time (which is required anyways
|
||||
* since the video mode is set in the \ref Multiboot headers).
|
||||
* Hence, the compiler is able to optimize the (intensively used) code for the
|
||||
* actual color bit masks, which results in high performance gain.
|
||||
*
|
||||
* \tparam COLORDEPTH color depth of video mode
|
||||
* \tparam OFFSET_RED Bit position of red color mask in video mode
|
||||
* \tparam OFFSET_GREEN Bit position of green color mask in video mode
|
||||
* \tparam OFFSET_BLUE Bit position of blue color mask in video mode
|
||||
* \tparam BITS_RED Size of red color mask in video mode
|
||||
* \tparam BITS_GREEN Size of green color mask in video mode
|
||||
* \tparam BITS_BLUE Size of blue color mask in video mode
|
||||
*/
|
||||
template <unsigned COLORDEPTH, uint8_t OFFSET_RED, uint8_t OFFSET_GREEN,
|
||||
uint8_t OFFSET_BLUE, uint8_t BITS_RED, uint8_t BITS_GREEN,
|
||||
uint8_t BITS_BLUE>
|
||||
class GraphicsPrinter
|
||||
: public Framebuffer<COLORDEPTH, OFFSET_RED, OFFSET_GREEN, OFFSET_BLUE,
|
||||
BITS_RED, BITS_GREEN, BITS_BLUE>,
|
||||
public AbstractGraphicsPrinter {
|
||||
typedef Framebuffer<COLORDEPTH, OFFSET_RED, OFFSET_GREEN, OFFSET_BLUE,
|
||||
BITS_RED, BITS_GREEN, BITS_BLUE>
|
||||
FramebufferBase;
|
||||
typedef typename FramebufferBase::Pixel Pixel;
|
||||
|
||||
/*! \brief currently active font
|
||||
*/
|
||||
Font const* active_font;
|
||||
|
||||
/*! \brief Generic helper function to draw a sprite image (or detail)
|
||||
*
|
||||
* \param p Coordinate of the images upper left corner
|
||||
* \param image Source image to display
|
||||
* \param width Width of the image detail
|
||||
* \param height Height of the image detail
|
||||
* image_width
|
||||
* \param offset_x Right offset of the source image
|
||||
* \param offset_y Top offset of the source image
|
||||
*/
|
||||
template <enum SpriteColorMode COLOR, bool ALPHA, unsigned BITDEPTH>
|
||||
void sprite(Point p,
|
||||
const struct SpritePixel<COLOR, ALPHA, BITDEPTH>* image,
|
||||
unsigned width, unsigned height, unsigned image_width,
|
||||
unsigned offset_x = 0, unsigned offset_y = 0) {
|
||||
if (p.x < 0) {
|
||||
offset_x -= p.x;
|
||||
if (offset_x > width || static_cast<int>(width) + p.x < 0) {
|
||||
return;
|
||||
}
|
||||
width += p.x;
|
||||
p.x = 0;
|
||||
}
|
||||
|
||||
if (p.y < 0) {
|
||||
offset_y -= p.y;
|
||||
if (offset_y > height || static_cast<int>(height) + p.y < 0) {
|
||||
return;
|
||||
}
|
||||
height += p.y;
|
||||
p.y = 0;
|
||||
}
|
||||
|
||||
if (p.x >= static_cast<int>(this->screen_width) ||
|
||||
p.y >= static_cast<int>(this->screen_height)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (p.x + width >= this->screen_width) {
|
||||
width = this->screen_width - p.x;
|
||||
}
|
||||
if (p.y + height >= this->screen_height) {
|
||||
height = this->screen_height - p.y;
|
||||
}
|
||||
|
||||
for (unsigned y = offset_y; y < offset_y + height; ++y) {
|
||||
Pixel* pos = this->get(p);
|
||||
for (unsigned x = offset_x; x < offset_x + width; ++x) {
|
||||
*pos = image[y * image_width + x];
|
||||
pos++;
|
||||
}
|
||||
p.y += 1;
|
||||
}
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::pixel()
|
||||
template <enum SpriteColorMode COLOR, bool ALPHA, unsigned BITS>
|
||||
void pixel(const Point& p, const SpritePixel<COLOR, ALPHA, BITS>& color) {
|
||||
if (valid(p)) {
|
||||
this->set(p, color);
|
||||
}
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::line()
|
||||
template <enum SpriteColorMode COLOR, bool ALPHA, unsigned BITS>
|
||||
void line(const Point& start, const Point& end,
|
||||
const SpritePixel<COLOR, ALPHA, BITS>& color) {
|
||||
const int d_x = Math::abs(end.x - start.x);
|
||||
const int d_y = Math::abs(end.y - start.y);
|
||||
const int steps = d_x < d_y ? (d_y + 1) : (d_x + 1);
|
||||
int D = 2 * (d_x < d_y ? (d_x - d_y) : (d_y - d_x));
|
||||
const int DE = d_x < d_y ? (d_x << 1) : (d_y << 1);
|
||||
const int DNE = (d_x < d_y ? (d_x - d_y) : (d_y - d_x)) << 1;
|
||||
int x_i1 = d_x < d_y ? 0 : 1;
|
||||
int x_i2 = 1;
|
||||
int y_i1 = d_x < d_y ? 1 : 0;
|
||||
int y_i2 = 1;
|
||||
if (start.x > end.x) {
|
||||
x_i1 = -x_i1;
|
||||
x_i2 = -x_i2;
|
||||
}
|
||||
if (start.y > end.y) {
|
||||
y_i1 = -y_i1;
|
||||
y_i2 = -y_i2;
|
||||
}
|
||||
int x = start.x;
|
||||
int y = start.y;
|
||||
for (int i = 0; i < steps; i++) {
|
||||
if (x >= 0 && y >= 0 && x < static_cast<int>(this->screen_width) &&
|
||||
y < static_cast<int>(this->screen_height)) {
|
||||
this->set(x, y, color);
|
||||
}
|
||||
if (D < 0) {
|
||||
D += DE;
|
||||
x += x_i1;
|
||||
y += y_i1;
|
||||
} else {
|
||||
D += DNE;
|
||||
x += x_i2;
|
||||
y += y_i2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::rectangle()
|
||||
template <enum SpriteColorMode COLOR, bool ALPHA, unsigned BITS>
|
||||
void rectangle(const Point& start, const Point& end,
|
||||
const SpritePixel<COLOR, ALPHA, BITS>& color, bool filled) {
|
||||
const int w = width();
|
||||
const int h = height();
|
||||
const int fromX = Math::max(0, Math::min(start.x, end.x));
|
||||
const int fromY = Math::max(0, Math::min(start.y, end.y));
|
||||
const int toX = Math::min(w - 1, Math::max(start.x, end.x));
|
||||
const int toY = Math::min(h - 1, Math::max(start.y, end.y));
|
||||
if (toX < 0 || toY < 0 || fromX >= w || fromY >= h) {
|
||||
return;
|
||||
}
|
||||
if (filled) {
|
||||
Point line_start(fromX, fromY);
|
||||
for (int y = fromY; y < toY; ++y) {
|
||||
Pixel* pos = this->get(line_start);
|
||||
for (int x = fromX; x < toX; ++x) {
|
||||
*pos = color;
|
||||
pos++;
|
||||
}
|
||||
line_start.y++;
|
||||
}
|
||||
} else {
|
||||
line(Point(fromX, fromY), Point(fromX, toY - 1), color);
|
||||
line(Point(fromX + 1, fromY), Point(toX - 1, fromY), color);
|
||||
line(Point(fromX, toY), Point(toX - 1, toY), color);
|
||||
line(Point(toX, fromY), Point(toX, toY), color);
|
||||
}
|
||||
}
|
||||
|
||||
/*! \brief Helper function to draw a font pixel image detail
|
||||
*
|
||||
* \see \ref text
|
||||
*
|
||||
* \param p Coordinate of the images upper left corner
|
||||
* \param bitmap Font character bitmap source to display
|
||||
* \param width Width of the font
|
||||
* \param height Height of the font
|
||||
* \param color Color for the character
|
||||
*/
|
||||
template <enum SpriteColorMode COLOR, bool ALPHA, unsigned BITS>
|
||||
void bitmap(const Point& p, const void* bitmap, const unsigned width,
|
||||
const unsigned height,
|
||||
const SpritePixel<COLOR, ALPHA, BITS>& color) {
|
||||
unsigned short width_byte = width / 8 + ((width % 8 != 0) ? 1 : 0);
|
||||
const char* sprite = reinterpret_cast<const char*>(bitmap);
|
||||
for (unsigned y = 0; y < height; ++y) {
|
||||
Pixel* pixel = this->get(p) + y * this->screen_width;
|
||||
for (unsigned x = 0; x < width_byte; ++x) {
|
||||
for (int src = 7; src >= 0; --src) {
|
||||
if ((1 << src) & *sprite) {
|
||||
*pixel = color;
|
||||
}
|
||||
pixel++;
|
||||
}
|
||||
sprite++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*! \brief Helper function to print text
|
||||
*
|
||||
* \param p Upper left start position of the text
|
||||
* \param string Pointer to char array containing the text to be displayed
|
||||
* \param len Number of characters to be displayed
|
||||
* \param color Color for the text characters
|
||||
* \param font Explicit font -- or `nullptr` to use default font (set by
|
||||
* \ref font method)
|
||||
*/
|
||||
template <enum SpriteColorMode COLOR, bool ALPHA, unsigned BITS>
|
||||
void text(const Point& p, const char* string, unsigned len,
|
||||
const SpritePixel<COLOR, ALPHA, BITS>& color, const Font* font) {
|
||||
if (font == nullptr) {
|
||||
font = active_font;
|
||||
}
|
||||
if (font != nullptr) {
|
||||
Point pos = p;
|
||||
for (unsigned i = 0; i < len; ++i) {
|
||||
this->bitmap(pos, font->symbol(string[i]), font->width,
|
||||
font->height, color);
|
||||
pos.x += font->width;
|
||||
if (pos.x + font->width > this->screen_width) {
|
||||
pos.x = 0;
|
||||
pos.y += font->height;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*! \brief Check if a \ref Point can be displayed at the current resolution
|
||||
*
|
||||
* \param x X position to check
|
||||
* \param y Y position to check
|
||||
* \return 'true' if can be displayed
|
||||
*/
|
||||
bool valid(const int x, const int y) const {
|
||||
return x >= 0 && y >= 0 &&
|
||||
static_cast<unsigned>(x) < this->screen_width &&
|
||||
static_cast<unsigned>(y) < this->screen_height;
|
||||
}
|
||||
|
||||
protected:
|
||||
/// \copydoc AbstractGraphicsPrinter::checkMode()
|
||||
bool checkMode(uint8_t required_COLORDEPTH, uint8_t required_red_offset,
|
||||
uint8_t required_green_offset, uint8_t required_blue_offset,
|
||||
uint8_t required_red_size, uint8_t required_green_size,
|
||||
uint8_t required_blue_size) {
|
||||
return COLORDEPTH == required_COLORDEPTH &&
|
||||
OFFSET_RED == required_red_offset &&
|
||||
OFFSET_GREEN == required_green_offset &&
|
||||
OFFSET_BLUE == required_blue_offset &&
|
||||
BITS_RED == required_red_size &&
|
||||
BITS_GREEN == required_green_size &&
|
||||
BITS_BLUE == required_blue_size;
|
||||
}
|
||||
|
||||
public:
|
||||
/*! \brief Constructor
|
||||
*/
|
||||
GraphicsPrinter() {}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::init()
|
||||
void init(unsigned width, unsigned height, unsigned pitch) {
|
||||
FramebufferBase::init(width, height, pitch);
|
||||
active_font = Font::get("Sun", 12, 22);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::buffer()
|
||||
void buffer(void* lfb) { FramebufferBase::buffer(lfb); }
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::clear()
|
||||
void clear() { FramebufferBase::clear(); }
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::valid()
|
||||
bool valid(const Point& p) const { return valid(p.x, p.y); }
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::height()
|
||||
unsigned height() const { return this->screen_height; }
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::width()
|
||||
unsigned width() const { return this->screen_width; }
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::pixel()
|
||||
void pixel(const Point& p, const Color& color) {
|
||||
return pixel<RGB, false, 8>(p, color);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::pixel()
|
||||
void pixel(const Point& p, const ColorAlpha& color) {
|
||||
return pixel<RGB, true, 8>(p, color);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::line()
|
||||
void line(const Point& start, const Point& end, const Color& color) {
|
||||
return line<RGB, false, 8>(start, end, color);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::line()
|
||||
void line(const Point& start, const Point& end, const ColorAlpha& color) {
|
||||
return line<RGB, true, 8>(start, end, color);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::rectangle()
|
||||
void rectangle(const Point& start, const Point& end, const Color& color,
|
||||
bool filled) {
|
||||
return rectangle<RGB, false, 8>(start, end, color, filled);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::rectangle()
|
||||
void rectangle(const Point& start, const Point& end,
|
||||
const ColorAlpha& color, bool filled) {
|
||||
return rectangle<RGB, true, 8>(start, end, color, filled);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::font()
|
||||
void font(const Font& new_font) { active_font = &new_font; }
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::text()
|
||||
void text(const Point& p, const char* string, unsigned len,
|
||||
const Color& color, const Font* font) {
|
||||
return text<RGB, false, 8>(p, string, len, color, font);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::text()
|
||||
void text(const Point& p, const char* string, unsigned len,
|
||||
const ColorAlpha& color, const Font* font) {
|
||||
return text<RGB, true, 8>(p, string, len, color, font);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::image(const
|
||||
/// Point&,PNG&,unsigned,unsigned,unsigned,unsigned)
|
||||
void image(const Point& p, PNG& image, unsigned width = 0,
|
||||
unsigned height = 0, unsigned offset_x = 0,
|
||||
unsigned offset_y = 0) {
|
||||
unsigned w = image.get_width();
|
||||
unsigned h = image.get_height();
|
||||
if (width == 0 || offset_x + width > w) {
|
||||
if (offset_x > w) {
|
||||
return;
|
||||
} else {
|
||||
width = w - offset_x;
|
||||
}
|
||||
}
|
||||
if (height == 0 || offset_y + height > h) {
|
||||
if (offset_y > h) {
|
||||
return;
|
||||
} else {
|
||||
height = h - offset_y;
|
||||
}
|
||||
}
|
||||
|
||||
switch (image.get_format()) {
|
||||
case PNG::RGB8:
|
||||
sprite<RGB, false, 8>(
|
||||
p,
|
||||
reinterpret_cast<const struct SpritePixel<RGB, false, 8>*>(
|
||||
image.get_buffer()),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
case PNG::RGB16:
|
||||
sprite<RGB, false, 16>(
|
||||
p,
|
||||
reinterpret_cast<const struct SpritePixel<RGB, false, 16>*>(
|
||||
image.get_buffer()),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
case PNG::RGBA8:
|
||||
sprite<RGB, true, 8>(
|
||||
p,
|
||||
reinterpret_cast<const struct SpritePixel<RGB, true, 8>*>(
|
||||
image.get_buffer()),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
case PNG::RGBA16:
|
||||
sprite<RGB, true, 16>(
|
||||
p,
|
||||
reinterpret_cast<const struct SpritePixel<RGB, true, 16>*>(
|
||||
image.get_buffer()),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
case PNG::LUMINANCE8:
|
||||
sprite<GREYSCALE, false, 8>(
|
||||
p,
|
||||
reinterpret_cast<
|
||||
const struct SpritePixel<GREYSCALE, false, 8>*>(
|
||||
image.get_buffer()),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
case PNG::LUMINANCE_ALPHA4:
|
||||
sprite<GREYSCALE, true, 4>(
|
||||
p,
|
||||
reinterpret_cast<
|
||||
const struct SpritePixel<GREYSCALE, true, 4>*>(
|
||||
image.get_buffer()),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
case PNG::LUMINANCE_ALPHA8:
|
||||
sprite<GREYSCALE, true, 8>(
|
||||
p,
|
||||
reinterpret_cast<
|
||||
const struct SpritePixel<GREYSCALE, true, 8>*>(
|
||||
image.get_buffer()),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
default:
|
||||
// "Unsupported PNG format";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::image(const Point&,const
|
||||
/// GIMP&,unsigned,unsigned,unsigned,unsigned)
|
||||
void image(const Point& p, const GIMP& image, unsigned width = 0,
|
||||
unsigned height = 0, unsigned offset_x = 0,
|
||||
unsigned offset_y = 0) {
|
||||
unsigned w = image.width;
|
||||
unsigned h = image.height;
|
||||
if (width == 0 || offset_x + width > w) {
|
||||
if (offset_x > w) {
|
||||
return;
|
||||
} else {
|
||||
width = w - offset_x;
|
||||
}
|
||||
}
|
||||
if (height == 0 || offset_y + height > h) {
|
||||
if (offset_y > h) {
|
||||
return;
|
||||
} else {
|
||||
height = h - offset_y;
|
||||
}
|
||||
}
|
||||
|
||||
switch (image.bytes_per_pixel) {
|
||||
case 2: // RGB16
|
||||
sprite<RGB, false, 16>(
|
||||
p,
|
||||
reinterpret_cast<const struct SpritePixel<RGB, false, 16>*>(
|
||||
image.pixel_data),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
case 3: // RGB
|
||||
sprite<RGB, false, 8>(
|
||||
p,
|
||||
reinterpret_cast<const struct SpritePixel<RGB, false, 8>*>(
|
||||
image.pixel_data),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
case 4: // RGBA
|
||||
sprite<RGB, true, 8>(
|
||||
p,
|
||||
reinterpret_cast<const struct SpritePixel<RGB, true, 8>*>(
|
||||
image.pixel_data),
|
||||
width, height, w, offset_x, offset_y);
|
||||
break;
|
||||
default:
|
||||
// "Unsupported PNG format";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::image(const Point&,const
|
||||
/// Color*,unsigned,unsigned,unsigned,unsigned)
|
||||
void image(const Point& p, const Color* image, unsigned width,
|
||||
unsigned height, unsigned offset_x = 0, unsigned offset_y = 0) {
|
||||
sprite<RGB, false, 8>(p, image, width, height, width, offset_x,
|
||||
offset_y);
|
||||
}
|
||||
|
||||
/// \copydoc AbstractGraphicsPrinter::image(const Point&,const
|
||||
/// ColorAlpha*,unsigned,unsigned,unsigned,unsigned)
|
||||
void image(const Point& p, const ColorAlpha* image, unsigned width,
|
||||
unsigned height, unsigned offset_x = 0, unsigned offset_y = 0) {
|
||||
sprite<RGB, true, 8>(p, image, width, height, width, offset_x,
|
||||
offset_y);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user