├── demo.gif ├── gb2312.hzk ├── .gitignore ├── .travis.yml ├── encoding_convert.h ├── plane.h ├── plane.c ├── README.md ├── Makefile ├── nyancat.c ├── dotfont.c ├── encoding_convert.c ├── led_fan.c ├── nyancat.h ├── LICENSE └── dotfont.h /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmgle/led_fan/HEAD/demo.gif -------------------------------------------------------------------------------- /gb2312.hzk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hmgle/led_fan/HEAD/gb2312.hzk -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | led_fan 3 | 4 | tags 5 | cscope.in.out 6 | cscope.out 7 | cscope.po.out 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: c 2 | 3 | compiler: 4 | - gcc 5 | 6 | before_install: 7 | - sudo apt-get update -qq 8 | - sudo apt-get install -qq libsdl2-dev libsdl2-gfx-dev 9 | 10 | script: make 11 | -------------------------------------------------------------------------------- /encoding_convert.h: -------------------------------------------------------------------------------- 1 | #ifndef _ENCODING_CONVERT_H 2 | #define _ENCODING_CONVERT_H 3 | 4 | #include 5 | #include 6 | 7 | int get_utf8_length(const uint8_t *src); 8 | uint16_t get_gb2312_by_utf8(const uint8_t *utf8); 9 | 10 | #endif 11 | -------------------------------------------------------------------------------- /plane.h: -------------------------------------------------------------------------------- 1 | #ifndef _PLANE_H 2 | #define _PLANE_H 3 | 4 | #include 5 | 6 | typedef uint32_t Uint32; 7 | 8 | struct plane { 9 | int w; 10 | int h; 11 | Uint32 *pixel; 12 | }; 13 | 14 | struct plane *create_plane(int w, int h, Uint32 bg_color); 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /plane.c: -------------------------------------------------------------------------------- 1 | #include "plane.h" 2 | #include 3 | 4 | struct plane *create_plane(int w, int h, Uint32 gb_color) 5 | { 6 | struct plane *p = malloc(sizeof(*p)); 7 | p->w = w; 8 | p->h = h; 9 | p->pixel = calloc(1, w * h * sizeof(*p->pixel)); 10 | int i; 11 | for (i = 0; i < w * h; i++) 12 | p->pixel[i] = gb_color; 13 | return p; 14 | } 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # led_fan 2 | 3 | [![Build Status](https://travis-ci.org/hmgle/led_fan.png?branch=master)](https://travis-ci.org/hmgle/led_fan) 4 | 5 | 无需花钱买硬件, led_fan 让你在软件上拥有一个闪烁的 [LED 风扇(摇摇棒)](https://www.google.com/search?q=led+风扇&tbm=isch) 6 | 7 | ![demo.gif](demo.gif) 8 | 9 | 依赖的库: 10 | - SDL2 11 | - SDL2_gfx 12 | 13 | Debian/Ubuntu 可执行下面命令安装依赖库: 14 | 15 | ``` 16 | sudo apt-get install libsdl2-dev libsdl2-gfx-dev 17 | ``` 18 | 19 | macOS 可执行下面命令安装依赖库: 20 | 21 | ``` 22 | brew install sdl sdl2_gfx 23 | ``` 24 | 25 | ## 编译及运行 26 | 27 | ``` 28 | make 29 | ./led_fan "需要显示的字符" 30 | # 按任意键终止 31 | ./led_fan # 不带参数时跑一个彩虹猫~ 32 | ``` 33 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | UNAME := $(shell uname -s) 2 | 3 | HAS_SDL2_gfx = $(shell pkg-config SDL2_gfx 2> /dev/null; echo $$?) 4 | ifneq ($(HAS_SDL2_gfx),0) 5 | SDL2_gfx_INC = 6 | SDL2_gfx_LIB = -lSDL2_gfx 7 | else 8 | SDL2_gfx_INC = $(shell pkg-config --cflags SDL2_gfx) 9 | SDL2_gfx_LIB = $(shell pkg-config --libs SDL2_gfx) 10 | endif 11 | CFLAGS += -O2 -Wall $(shell pkg-config --cflags sdl2) $(SDL2_gfx_INC) 12 | LIBS = $(shell pkg-config --libs sdl2) -lm $(SDL2_gfx_LIB) 13 | 14 | CC ?= gcc 15 | 16 | TARGET = led_fan 17 | 18 | all:: $(TARGET) 19 | 20 | ifneq ($(UNAME),Darwin) 21 | dotfont.o: gb2312.hzk 22 | 23 | encoding_convert.o: GB2312 24 | endif 25 | 26 | led_fan: led_fan.o dotfont.o encoding_convert.o plane.o nyancat.o 27 | ifneq ($(UNAME),Darwin) 28 | $(CC) $^ -Wl,--format=binary -Wl,GB2312 -Wl,gb2312.hzk -Wl,--format=default \ 29 | -o $@ $(LIBS) 30 | else 31 | $(CC) $^ -o $@ $(LIBS) 32 | endif 33 | 34 | led_fan.o: led_fan.c 35 | $(CC) -c $(CFLAGS) $^ -o $@ 36 | 37 | encoding_convert.o: encoding_convert.c 38 | $(CC) -c $(CFLAGS) $^ -o $@ 39 | 40 | clean:: 41 | -rm -f $(TARGET) *.o 42 | -------------------------------------------------------------------------------- /nyancat.c: -------------------------------------------------------------------------------- 1 | #include "plane.h" 2 | 3 | #include 4 | 5 | #ifndef FRAME_WIDTH 6 | #define FRAME_WIDTH 64 7 | #endif 8 | 9 | #ifndef FRAME_HEIGHT 10 | #define FRAME_HEIGHT 16 11 | #endif 12 | 13 | typedef uint32_t Uint32; 14 | 15 | static Uint32 nyancat_colors[256] = { 16 | [','] = 0xFFFF0000, /* Blue background */ 17 | ['.'] = 0xFFFFFFFF, /* White stars */ 18 | ['\''] = 0xFF000000, /* Black border */ 19 | ['@'] = 0xFFFFFFFF, /* Tan poptart */ 20 | ['$'] = 0xFF9999DD, /* Pink poptart */ 21 | ['-'] = 0xFF0000FF, /* Red poptart */ 22 | ['>'] = 0xFF0000FF, /* Red rainbow */ 23 | ['&'] = 0xFF0099FF, /* Orange rainbow */ 24 | ['+'] = 0xFF00FFFF, /* Yellow Rainbow */ 25 | ['#'] = 0xFF00FF00, /* Green rainbow */ 26 | ['='] = 0xFFCC8000, /* Light blue rainbow */ 27 | [';'] = 0xFFFF9900, /* Dark blue rainbow */ 28 | ['*'] = 0x80808080, /* Gray cat face */ 29 | ['%'] = 0xFF0033AA, /* Pink cheeks */ 30 | }; 31 | 32 | struct plane *set_nyancat_plane(struct plane *p, int x, const char **frame) 33 | { 34 | assert(p); 35 | assert(p->w >= FRAME_WIDTH && p->h == FRAME_HEIGHT); 36 | int i, j; 37 | char color; 38 | for (i = 0; i < FRAME_HEIGHT; i++) { 39 | for (j = 0; j < FRAME_WIDTH; j++) { 40 | color = frame[i][j]; 41 | (p->pixel)[(j+x)*(p->h) + i] = nyancat_colors[(int)color]; 42 | } 43 | } 44 | return p; 45 | } 46 | -------------------------------------------------------------------------------- /dotfont.c: -------------------------------------------------------------------------------- 1 | #include "dotfont.h" 2 | #include "encoding_convert.h" 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | /* 14 | * const int ASCII_W = 8; 15 | * const int ASCII_H = 16; 16 | * static const unsigned char __font_bitmap_8x16__[] 17 | */ 18 | 19 | static uint32_t 20 | gb2312code_to_fontoffset(uint32_t gb2312code, size_t font_h, size_t font_w) 21 | { 22 | uint32_t fontoffset; 23 | 24 | fontoffset = (gb2312code % 0x100 - 0xA1) * 94 25 | + (gb2312code / 0x100 - 0xA1); 26 | fontoffset *= font_h * font_w / 8; 27 | return fontoffset; 28 | } 29 | 30 | #ifdef __APPLE__ 31 | static uint8_t *MEM_GB2312_FONT; 32 | #else 33 | extern uint8_t MEM_GB2312_FONT[] asm("_binary_gb2312_hzk_start"); 34 | #endif 35 | 36 | uint8_t * 37 | get_gb2312font(const uint8_t *fontdata, size_t font_h, size_t font_w, 38 | uint32_t gb2312code, uint8_t *buf) 39 | { 40 | uint32_t offset = gb2312code_to_fontoffset(gb2312code, font_h, font_w); 41 | memcpy(buf, fontdata + offset, font_h * font_w / 8); 42 | return buf; 43 | } 44 | 45 | #ifdef __APPLE__ 46 | uint8_t * 47 | init_fontdata(const char *fontpath) 48 | { 49 | int fd = open(fontpath, O_RDONLY); 50 | if (fd < 0) { 51 | perror("open"); 52 | return NULL; 53 | } 54 | struct stat fd_stat; 55 | int ret = fstat(fd, &fd_stat); 56 | if (ret == -1) { 57 | perror("fstat"); 58 | return NULL; 59 | } 60 | uint8_t *fontdata_start; 61 | fontdata_start = mmap(NULL, (size_t)fd_stat.st_size, 62 | PROT_READ, MAP_PRIVATE, fd, (off_t)0); 63 | close(fd); 64 | return fontdata_start; 65 | } 66 | #endif 67 | 68 | static uint8_t * 69 | get_ascii_8x16font(uint8_t c, uint8_t *buf) 70 | { 71 | memcpy(buf, &__font_bitmap_8x16__[c * ASCII_H], ASCII_H); 72 | return buf; 73 | } 74 | 75 | struct font_data_s * 76 | create_ascii_8x16font(uint8_t c) 77 | { 78 | struct font_data_s *font = malloc(sizeof(*font)); 79 | assert(font); 80 | font->h = ASCII_H; 81 | font->w = ASCII_W; 82 | font->type = ASCII; 83 | font->ascii = c; 84 | font->data = malloc(ASCII_H); 85 | assert(font->data); 86 | (void)get_ascii_8x16font(c, font->data); 87 | return font; 88 | } 89 | 90 | struct font_data_s * 91 | create_utf8_16x16font(const uint8_t *utf8) 92 | { 93 | struct font_data_s *font = malloc(sizeof(*font)); 94 | uint16_t gb2312; 95 | assert(font); 96 | font->h = 16; 97 | font->w = 16; 98 | font->type = UTF8; 99 | memcpy(font->utf8, utf8, 4); 100 | font->data = malloc(16 * 2); 101 | assert(font->data); 102 | gb2312 = get_gb2312_by_utf8(utf8); 103 | #ifdef __APPLE__ 104 | if (MEM_GB2312_FONT == NULL) { 105 | MEM_GB2312_FONT = init_fontdata("./gb2312.hzk"); 106 | assert(MEM_GB2312_FONT); 107 | } 108 | #else 109 | assert(MEM_GB2312_FONT); 110 | #endif 111 | get_gb2312font(MEM_GB2312_FONT, font->h, font->w, gb2312, font->data); 112 | return font; 113 | } 114 | 115 | struct font_data_s * 116 | set_font_data(struct font_data_s *font, int h, int w, encode_type_t t, 117 | const uint8_t *v) 118 | { 119 | /* TODO */ 120 | return NULL; 121 | } 122 | -------------------------------------------------------------------------------- /encoding_convert.c: -------------------------------------------------------------------------------- 1 | #include "encoding_convert.h" 2 | #include 3 | #include 4 | #include 5 | 6 | #ifndef MAX_LINE 7 | #define MAX_LINE 1024 8 | #endif 9 | 10 | #ifndef GB2312_MEM_SIZE 11 | #define GB2312_MEM_SIZE (7580 * 4) 12 | #endif 13 | 14 | #ifndef __APPLE__ 15 | extern uint8_t MEM_GB2312_UNICODE[] asm("_binary_GB2312_start"); 16 | #endif 17 | 18 | int 19 | get_utf8_length(const uint8_t *src) 20 | { 21 | switch (*src) { 22 | case 0x0 ... 0x7f: 23 | return 1; 24 | case 0xC0 ... 0xDF: 25 | return 2; 26 | case 0xE0 ... 0xEF: 27 | return 3; 28 | case 0xF0 ... 0xF7: 29 | return 4; 30 | default: 31 | return -1; 32 | } 33 | } 34 | 35 | static int 36 | utf8tounicode(const uint8_t *src, uint8_t *dst) 37 | { 38 | int length; 39 | uint8_t unicode[2] = {0}; /* 小端序 */ 40 | 41 | length = get_utf8_length(src); 42 | if (length < 0) 43 | return -1; 44 | switch (length) { 45 | case 1: 46 | *dst = *src; 47 | *(dst + 1) = 0; 48 | return 1; 49 | break; 50 | case 2: 51 | unicode[0] = *(src + 1) & 0x3f; 52 | unicode[0] += (*src & 0x3) << 6; 53 | unicode[1] = (*src & 0x7 << 2) >> 2; 54 | break; 55 | case 3: 56 | unicode[0] = *(src + 2) & 0x3f; 57 | unicode[0] += (*(src + 1) & 0x3) << 6; 58 | unicode[1] = (*(src + 1) & 0xF << 2) >> 2; 59 | unicode[1] += (*src & 0xf) << 4; 60 | break; 61 | case 4: 62 | /* not support now */ 63 | return -1; 64 | } 65 | *dst = unicode[0]; 66 | *(dst + 1) = unicode[1]; 67 | return length; 68 | } 69 | 70 | static uint16_t 71 | unicode_to_gb2312(uint16_t unicode, const uint16_t *mem_gb2312, int gb2312_num) 72 | { 73 | int i; 74 | 75 | for (i = 0; i < gb2312_num; i++) 76 | if (mem_gb2312[2 * i] == unicode) 77 | return mem_gb2312[2 * i + 1]; 78 | assert(0); 79 | exit(1); 80 | } 81 | 82 | static uint16_t *MEM_GB2312; 83 | static int GB2312_NUM; 84 | 85 | static inline uint8_t 86 | hex_ch_to_val(char hex_ch) 87 | { 88 | if (hex_ch >= '0' && hex_ch <= '9') 89 | return hex_ch - '0'; 90 | else if (hex_ch >= 'A' && hex_ch <= 'F') 91 | return hex_ch - 'A' + 10; 92 | else if (hex_ch >= 'a' && hex_ch <= 'f') 93 | return hex_ch - 'a' + 10; 94 | return -1; 95 | } 96 | 97 | #ifndef __APPLE__ 98 | /* 非线程安全 */ 99 | static char * 100 | buf_getline(const char *from, char *to) 101 | { 102 | int ret; 103 | static int start_flag = 1; 104 | static const char *start; 105 | if (start_flag) { 106 | start_flag = 0; 107 | start = from; 108 | } 109 | if (start == NULL) 110 | return NULL; 111 | ret = sscanf(start, "%[^\n]", to); 112 | if (ret <= 0) 113 | return NULL; 114 | start = strchr(start, '\n'); 115 | if (start != NULL) 116 | start++; 117 | return to; 118 | } 119 | 120 | static uint16_t * 121 | mem_gb2312(int *gb2312_num) 122 | { 123 | uint16_t *ptrmem; 124 | char *ptrch; 125 | char buf[MAX_LINE]; 126 | int i = 0; 127 | 128 | ptrmem = malloc(GB2312_MEM_SIZE); 129 | if (!ptrmem) { 130 | perror("malloc"); 131 | exit(1); 132 | } 133 | memset(ptrmem, 0, GB2312_MEM_SIZE); 134 | while (buf_getline((const char *)MEM_GB2312_UNICODE, buf) != NULL) { 135 | if (strstr(buf, "/x") == NULL) 136 | continue; 137 | 138 | /* unicode */ 139 | ptrch = strchr(buf, 'U'); 140 | ptrch++; 141 | *(ptrmem + i * 2) = hex_ch_to_val(ptrch[0]) * 0x1000 142 | + hex_ch_to_val(ptrch[1]) * 0x100 143 | + hex_ch_to_val(ptrch[2]) * 0x10 144 | + hex_ch_to_val(ptrch[3]); 145 | 146 | /* gb2312 */ 147 | ptrch = strstr(ptrch, "/x"); 148 | ptrch += 2; 149 | if (ptrch[2] != '/') { /* 单字节 */ 150 | *(ptrmem + i * 2 + 1) = hex_ch_to_val(ptrch[1]) 151 | + hex_ch_to_val(ptrch[0])*0x10; 152 | } else { /* 两个字节 */ 153 | *(ptrmem + i * 2 + 1) = hex_ch_to_val(ptrch[5]) * 0x100 154 | + hex_ch_to_val(ptrch[4])*0x1000 155 | + hex_ch_to_val(ptrch[1]) 156 | + hex_ch_to_val(ptrch[0])*0x10; 157 | } 158 | i++; 159 | } /* i should be 7573 */ 160 | *gb2312_num = i; 161 | return ptrmem; 162 | } 163 | #else 164 | static uint16_t * 165 | mem_gb2312(const char *gb2312filename, int *gb2312_num) 166 | { 167 | FILE *gb2312_fp; 168 | uint16_t *ptrmem; 169 | char *ptrch; 170 | char buf[MAX_LINE]; 171 | int i; 172 | 173 | gb2312_fp = fopen(gb2312filename, "r"); 174 | if (gb2312_fp == NULL) 175 | return NULL; 176 | ptrmem = malloc(GB2312_MEM_SIZE); 177 | if (!ptrmem) { 178 | perror("malloc"); 179 | exit(1); 180 | } 181 | memset(ptrmem, 0, GB2312_MEM_SIZE); 182 | i = 0; 183 | while (fgets(buf, MAX_LINE, gb2312_fp) != NULL) { 184 | if (strstr(buf, "/x") == NULL) 185 | continue; 186 | 187 | /* unicode */ 188 | ptrch = strchr(buf, 'U'); 189 | ptrch++; 190 | *(ptrmem + i * 2) = hex_ch_to_val(ptrch[0]) * 0x1000 191 | + hex_ch_to_val(ptrch[1]) * 0x100 192 | + hex_ch_to_val(ptrch[2]) * 0x10 193 | + hex_ch_to_val(ptrch[3]); 194 | 195 | /* gb2312 */ 196 | ptrch = strstr(ptrch, "/x"); 197 | ptrch += 2; 198 | if (ptrch[2] != '/') { /* 单字节 */ 199 | *(ptrmem + i * 2 + 1) = hex_ch_to_val(ptrch[1]) 200 | + hex_ch_to_val(ptrch[0])*0x10; 201 | } else { /* 两个字节 */ 202 | *(ptrmem + i * 2 + 1) = hex_ch_to_val(ptrch[5]) * 0x100 203 | + hex_ch_to_val(ptrch[4])*0x1000 204 | + hex_ch_to_val(ptrch[1]) 205 | + hex_ch_to_val(ptrch[0])*0x10; 206 | } 207 | i++; 208 | } /* i should be 7573 */ 209 | *gb2312_num = i; 210 | 211 | fclose(gb2312_fp); 212 | return ptrmem; 213 | } 214 | #endif 215 | 216 | uint16_t 217 | get_gb2312_by_utf8(const uint8_t *utf8) 218 | { 219 | uint8_t unicode[2] = {0}; 220 | int ret; 221 | if (MEM_GB2312 == NULL) { 222 | #ifdef __APPLE__ 223 | MEM_GB2312 = mem_gb2312("./GB2312", &GB2312_NUM); 224 | #else 225 | MEM_GB2312 = mem_gb2312(&GB2312_NUM); 226 | #endif 227 | if (MEM_GB2312 == NULL) { 228 | fprintf(stderr, "mem_gb2312() failed!\n"); 229 | exit(1); 230 | } 231 | } 232 | ret = utf8tounicode(utf8, unicode); 233 | assert(ret > 0); 234 | return unicode_to_gb2312(unicode[0] + unicode[1] * 0x100, 235 | MEM_GB2312, GB2312_NUM); 236 | } 237 | -------------------------------------------------------------------------------- /led_fan.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #include "dotfont.h" 11 | #include "plane.h" 12 | #include "nyancat.h" 13 | #include "encoding_convert.h" 14 | 15 | #ifndef ARRAY_SIZE 16 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) 17 | #endif 18 | 19 | #ifndef PI 20 | #define PI M_PI 21 | #endif 22 | 23 | #define TAU 6.28318530717958647693 24 | 25 | #define PI_3_2 4.71238898038468985769 /* 1.5 x PI */ 26 | 27 | #define N 227.0 /* 扇页数 */ 28 | #define DN 256.0 /* 圆周像素数 */ 29 | 30 | #define BIT(nr) (1 << (nr)) 31 | 32 | /* Return the UNIX time in microseconds */ 33 | static long long ustime(void) 34 | { 35 | struct timeval tv; 36 | long long ust; 37 | 38 | gettimeofday(&tv, NULL); 39 | ust = ((long long)tv.tv_sec)*1000000; 40 | ust += tv.tv_usec; 41 | return ust; 42 | } 43 | 44 | /* Return the UNIX time in milliseconds */ 45 | static long long mstime(void) 46 | { 47 | return ustime()/1000; 48 | } 49 | 50 | int plane_add_font(struct plane *p, int x, int y, struct font_data_s *f) 51 | { 52 | int i, j; 53 | uint8_t *data = f->data; 54 | assert(f->h == p->h); 55 | for (i = 0; i < f->h; i++) 56 | for (j = 0; j < f->w; j++) 57 | if ((data[i*f->w/8 + j/8] & (0x1 << (7 - j%8))) > 0) 58 | (p->pixel)[(j+x)*(p->h) + i] = 0xFFFFFFFF; 59 | return 0; 60 | } 61 | 62 | struct point_s { 63 | int x; 64 | int y; 65 | }; 66 | 67 | struct led_s { 68 | struct point_s center; 69 | struct point_s currpo; /* current position */ 70 | int r; 71 | int w; 72 | Uint32 color; /* 发光颜色 */ 73 | double start_angle; /* 起始角度 */ 74 | int period; /* 旋转周期: ms */ 75 | long long start_ms; 76 | void (*cb)(struct led_s *led, void *p); /* callback */ 77 | }; 78 | 79 | struct led_s *create_led(int cx, int cy, int r, int w, Uint32 color, 80 | double st_angle, int period, 81 | void (*cb)(struct led_s *, void *)) 82 | { 83 | struct led_s *led = malloc(sizeof(*led)); 84 | 85 | led->center.x = cx; 86 | led->center.y = cy; 87 | led->r = r; 88 | led->w = w; 89 | led->color = color; 90 | led->start_angle = st_angle; 91 | led->period = period; 92 | led->start_ms = mstime(); 93 | led->cb = cb; 94 | return led; 95 | } 96 | 97 | struct rend_pl_s { 98 | SDL_Renderer *renderer; 99 | struct plane *pl; 100 | double angle; 101 | }; 102 | 103 | void disp_font(struct led_s *led, void *p) 104 | { 105 | struct rend_pl_s *r_p = p; 106 | SDL_Renderer *renderer = r_p->renderer; 107 | struct plane *pl = r_p->pl; 108 | double angle = r_p->angle + PI_3_2 - led->start_angle; 109 | 110 | int x = fmod((pl->w * (angle / TAU)), pl->w); 111 | int y = (70+16*4-0.001 - led->r) / 4; 112 | 113 | filledCircleColor(renderer, led->currpo.x, led->currpo.y, 114 | led->w, pl->pixel[x*pl->h + y]); 115 | } 116 | 117 | void dump_plane(SDL_Renderer *renderer, const struct plane *pl); 118 | static struct plane *nyancat_pl[12]; 119 | 120 | void cat_run_led(SDL_Renderer *renderer, struct led_s *led) 121 | { 122 | int elapsed_ms = mstime() - led->start_ms; 123 | double angle = TAU * elapsed_ms / led->period + led->start_angle; 124 | 125 | int i; 126 | double tmp_angle; 127 | i = elapsed_ms / led->period; 128 | struct plane *pl = nyancat_pl[i % 12]; 129 | struct rend_pl_s r_p = {renderer, pl, 0}; 130 | for (i = 0; i < N; i++) { 131 | tmp_angle = angle + i * TAU / N; 132 | led->currpo.x = led->center.x + led->r * cos(tmp_angle); 133 | led->currpo.y = led->center.y + led->r * sin(tmp_angle); 134 | r_p.angle = tmp_angle; 135 | if (led->cb) 136 | led->cb(led, &r_p); 137 | } 138 | dump_plane(renderer, pl); 139 | } 140 | 141 | void run_led(SDL_Renderer *renderer, struct led_s *led, struct plane *pl) 142 | { 143 | int elapsed_ms = mstime() - led->start_ms; 144 | double angle = TAU * elapsed_ms / led->period + led->start_angle; 145 | 146 | int i; 147 | double tmp_angle; 148 | struct rend_pl_s r_p = {renderer, pl, 0}; 149 | for (i = 0; i < N; i++) { 150 | tmp_angle = angle + i * TAU / N; 151 | led->currpo.x = led->center.x + led->r * cos(tmp_angle); 152 | led->currpo.y = led->center.y + led->r * sin(tmp_angle); 153 | r_p.angle = tmp_angle; 154 | if (led->cb) 155 | led->cb(led, &r_p); 156 | } 157 | } 158 | 159 | static Uint32 get_plane_bit(const struct plane *pl, int x, int y) 160 | { 161 | int w = pl->w; 162 | int h = pl->h; 163 | assert(w > 0 && h > 0 && x >= 0 && x < w && y >= 0 && y < h); 164 | assert(h % 8 == 0); 165 | return pl->pixel[x*h + y]; 166 | } 167 | 168 | void dump_plane(SDL_Renderer *renderer, const struct plane *pl) 169 | { 170 | int i, j; 171 | for (i = 0; i < pl->h; i++) 172 | for (j = 0; j < pl->w; j++) 173 | pixelColor(renderer, j, i, get_plane_bit(pl, j, i)); 174 | } 175 | 176 | static int get_string_len(const uint8_t *string) 177 | { 178 | const uint8_t *p = string; 179 | int count = 0; 180 | 181 | while (*p) { 182 | count++; 183 | p += get_utf8_length(p); 184 | } 185 | return count; 186 | } 187 | 188 | static void usage(char **argv) 189 | { 190 | fprintf(stderr, "Usage: %s [Options] [string]\n" 191 | "\n" 192 | "Options:\n" 193 | " -f --fps Frame per Second\n" 194 | " -T --period Set Period\n" 195 | " -W --width Set Width\n" 196 | " -H --height Set Height\n" 197 | " -c --bgcolor Set background color\n" 198 | "\n", argv[0]); 199 | } 200 | 201 | int main(int argc, char **argv) 202 | { 203 | SDL_Window *screen; 204 | SDL_Renderer *renderer; 205 | SDL_Event event; 206 | FPSmanager fps_mgr; 207 | Uint32 fps_rate = 200; 208 | struct led_s *led[16]; 209 | int i; 210 | int w = 640, h = 480; 211 | struct plane *pl; 212 | int font_num = 0; 213 | struct font_data_s *font[32]; 214 | int is_cat = 0; 215 | double start_angle = M_PI_2; 216 | Uint32 bg_color = 0x3F00FF00; 217 | int period = 551; /* 旋转周期: ms */ 218 | int opt, index; 219 | 220 | static struct option long_opts[] = { 221 | {"help", no_argument, 0, 'h'}, 222 | {"fps", required_argument, 0, 'f'}, 223 | {"period", required_argument, 0, 'T'}, 224 | {"width", required_argument, 0, 'W'}, 225 | {"height", required_argument, 0, 'H'}, 226 | {"bgcolor", required_argument, 0, 'c'}, 227 | {0, 0, 0, 0} 228 | }; 229 | 230 | while ((opt = getopt_long(argc, argv, "hf:T:W:H:c:", 231 | long_opts, &index)) != -1) { 232 | switch (opt) { 233 | case 'f': 234 | fps_rate = atoi(optarg); 235 | break; 236 | case 'T': 237 | period = atoi(optarg); 238 | break; 239 | case 'W': 240 | w = atoi(optarg); 241 | break; 242 | case 'H': 243 | h = atoi(optarg); 244 | break; 245 | case 0: 246 | case 'h': 247 | default: 248 | usage(argv); 249 | exit(0); 250 | } 251 | } 252 | pl = create_plane(w/2, 16, bg_color); 253 | if (argc > optind) { 254 | const uint8_t *font_p = (const uint8_t *)argv[optind]; 255 | start_angle = 256 | (1-(get_string_len((const uint8_t *)argv[optind])-0.5)/20.0) * PI; 257 | while (*font_p) { 258 | if (*font_p < 0x80) { 259 | /* ascii */ 260 | font[font_num] = create_ascii_8x16font(*font_p); 261 | (void)plane_add_font(pl, font_num * 16, 0, 262 | font[font_num]); 263 | font_num++; 264 | font_p++; 265 | } else if (*font_p > 0xA0 && *font_p < 0xFF) { 266 | /* utf-8 */ 267 | font[font_num] = 268 | create_utf8_16x16font((const uint8_t *)font_p); 269 | (void)plane_add_font(pl, font_num * 16, 0, 270 | font[font_num]); 271 | font_num++; 272 | font_p += get_utf8_length(font_p); 273 | } 274 | } 275 | } else { 276 | is_cat = 1; 277 | for (i = 0; i < 12; i++) { 278 | nyancat_pl[i] = create_plane(w/2, 16, 0xFFFF0000); 279 | (void)set_nyancat_plane(nyancat_pl[i], 48, cat_frames[i]); 280 | } 281 | } 282 | 283 | if (SDL_Init(SDL_INIT_VIDEO) < 0) { 284 | fprintf(stderr, "SDL_Init() failed: %s\n", SDL_GetError()); 285 | exit(1); 286 | } 287 | atexit(SDL_Quit); 288 | screen = SDL_CreateWindow("led fan", 289 | SDL_WINDOWPOS_UNDEFINED, 290 | SDL_WINDOWPOS_UNDEFINED, 291 | w, h, SDL_WINDOW_SHOWN); 292 | if (screen == NULL) { 293 | fprintf(stderr, "SDL_CreateWindow() failed: %s\n", 294 | SDL_GetError()); 295 | exit(1); 296 | } 297 | SDL_initFramerate(&fps_mgr); 298 | renderer = SDL_CreateRenderer(screen, -1, SDL_RENDERER_ACCELERATED); 299 | 300 | /* Clear the screen */ 301 | SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); 302 | SDL_RenderClear(renderer); 303 | 304 | if (is_cat) 305 | period = 97; 306 | for (i = 0; i < ARRAY_SIZE(led); i++) { 307 | led[i] = create_led(w/2, h/2, 70 + i*4, 1, 0xFFFFFFFF, 308 | start_angle, period, disp_font); 309 | } 310 | SDL_setFramerate(&fps_mgr, fps_rate); 311 | while (1) { 312 | while (SDL_PollEvent(&event) != 0) { 313 | switch (event.type) { 314 | case SDL_KEYDOWN: 315 | case SDL_QUIT: 316 | return 0; 317 | break; 318 | } 319 | } 320 | if (is_cat) { 321 | for (i = 0; i < ARRAY_SIZE(led); i++) { 322 | cat_run_led(renderer, led[i]); 323 | } 324 | } else { 325 | for (i = 0; i < ARRAY_SIZE(led); i++) { 326 | run_led(renderer, led[i], pl); 327 | } 328 | } 329 | // dump_plane(renderer, pl); 330 | SDL_RenderPresent(renderer); 331 | /* Adjust framerate */ 332 | SDL_framerateDelay(&fps_mgr); 333 | boxRGBA(renderer, 0, 0, w - 1, h - 1, 0, 0, 0, 255); 334 | } 335 | return 0; 336 | } 337 | -------------------------------------------------------------------------------- /nyancat.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Pop Tart Cat animation frames 3 | */ 4 | 5 | /* 6 | * Copyright (c) 2015 Mingang He. All rights reserved. 7 | * Copyright (c) 2011-2013 Kevin Lange. All rights reserved. 8 | * 9 | * Based on nyancat by Kevin Lange. 10 | * 11 | * Developed by: Kevin Lange 12 | * http://github.com/klange/nyancat 13 | * http://nyancat.dakko.us 14 | * 15 | * 40-column support by: Peter Hazenberg 16 | * http://github.com/Peetz0r/nyancat 17 | * http://peter.haas-en-berg.nl 18 | * 19 | * Build tools unified by: Aaron Peschel 20 | * https://github.com/apeschel 21 | * 22 | * For a complete listing of contributers, please see the git commit history. 23 | * 24 | * This is a simple telnet server / standalone application which renders the 25 | * classic Nyan Cat (or "poptart cat") to your terminal. 26 | * 27 | * It makes use of various ANSI escape sequences to render color, or in the case 28 | * of a VT220, simply dumps text to the screen. 29 | * 30 | * For more information, please see: 31 | * 32 | * http://nyancat.dakko.us 33 | * 34 | * Permission is hereby granted, free of charge, to any person obtaining a copy 35 | * of this software and associated documentation files (the "Software"), to 36 | * deal with the Software without restriction, including without limitation the 37 | * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 38 | * sell copies of the Software, and to permit persons to whom the Software is 39 | * furnished to do so, subject to the following conditions: 40 | * 1. Redistributions of source code must retain the above copyright notice, 41 | * this list of conditions and the following disclaimers. 42 | * 2. Redistributions in binary form must reproduce the above copyright 43 | * notice, this list of conditions and the following disclaimers in the 44 | * documentation and/or other materials provided with the distribution. 45 | * 3. Neither the names of the Association for Computing Machinery, Kevin 46 | * Lange, nor the names of its contributors may be used to endorse 47 | * or promote products derived from this Software without specific prior 48 | * written permission. 49 | * 50 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 51 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 52 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 53 | * CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 54 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 55 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 56 | * WITH THE SOFTWARE. 57 | */ 58 | 59 | #ifndef NYANCAT_H 60 | #define NYANCAT_H 61 | 62 | #include 63 | 64 | const char * frame0[] = { 65 | ">>>>>>>>>>>>>>>>>>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 66 | ">>&&&&&&&&>>>>>>>>&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 67 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$''$-$$@','',,,,,,,,,,,,,,,,,,,", 68 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$$$$$$$'**'$$$@''**',,,,,,,,,,,,,,,,,,", 69 | "&&++++++++&&&&&&&&'''++'@$$$$$-$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 70 | "++++++++++++++++++**''+'@$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,,", 71 | "++++++++++++++++++'**'''@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 72 | "++########++++++++''**''@$$$$$$-'*************',,,,,,,,,,,,,,,,,", 73 | "###################''**'@$-$$$$$'***.'****.'**',,,,,,,,,,,,,,,,,", 74 | "####################''''@$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 75 | "##========########====''@@$$$-$$'*%%********%%',,,,,,,,,,,,,,,,,", 76 | "======================='@@@$$$$$$'***''''''**',,,,,,,,,,,,,,,,,,", 77 | "==;;;;;;;;.=======;;;;'''@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,,", 78 | ";;;;;;;;;;;;;;;;;;;;;'***''''''''''''''''''',,,,,,,,,,,,,,,,,,,,", 79 | ";;;;;;;;;;;;;;;;;;;;;'**'','*',,,,,'*','**',,,,,,,,,,,,,,,,,,,,,", 80 | ";;,,,,,.,,;;;.;;;;,,,'''',,'',,,,,,,'',,'',,,,,,,,,,,,,,,,,,,,,,"}; 81 | 82 | const char * frame1[] = { 83 | ">>>>>>>>>>>>>>>>>>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 84 | ">>&&&&&&&&>>>>>>>>&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 85 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 86 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 87 | "&&++++++++&&&&&&&&+++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 88 | "+++++++++++++++++++'+++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 89 | "++++++++++++++++++'*'++'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 90 | "++########++++++++'*''''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 91 | "###################****'@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 92 | "###################''**'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 93 | "##========########==='''@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 94 | "======================='@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 95 | "==;;;;;;;;========;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 96 | ";;;;;;;;;;;;;;;;;;;;;;'**'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 97 | ";;;;;;;;;;;;;;;;;;;;;;'**','*',,,,,,**','**',,,,,,,,,,,,,,,,,,,,", 98 | ";;,,,.,,,,;;;;;;;;,,,,''',,,'',,,,,,''',,''',,,,,,,,,,,,,,,,,,,,"}; 99 | 100 | const char * frame2[] = { 101 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 102 | "&&>>>>>>>&&&&&&&&>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 103 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 104 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 105 | "++&&&&&&&++++++++&&&&&&'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 106 | "+++++++++++++++++++++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 107 | "+++++++++++++++++++++++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 108 | "##+++++++########++++++'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 109 | "######################''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 110 | "###################'''''@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 111 | "==#######========#'****'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 112 | "==================='''='@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 113 | ";;=======;;;;;;;;======'@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 114 | ";;;;;;;;;;;;;;;;;;;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 115 | ";.;;;;;;;;;;;;;;;;;;;;;'*'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 116 | ".,.;;;;;;,,,,,,,,;;;;;;'**',**',,,,,,**','**',,,,,,,,,,,,,,,,,,,"}; 117 | 118 | const char * frame3[] = { 119 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 120 | "&&>>>>>>>&&&&&&&&>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 121 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 122 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 123 | "++&&&&&&&++++++++&&&&&&'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 124 | "+++++++++++++++++++++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 125 | "+++++++++++++++++++++++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 126 | "##+++++++########++++++'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 127 | "#####################'''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 128 | "###################''**'@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 129 | "==#######========##****'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 130 | "=================='*'=='@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 131 | ";;=======;;;;;;;;=='==='@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 132 | ";;;;;;;;;;;;;;;;;;;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 133 | ";;;;;;;;;;;;;;;;;;;;;;'**'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 134 | ",,;;;;;;;,,,,,,,,;;;;;'**','*',,,,,,'*','**',,,,,,,,,,,,,,,,,,,,"}; 135 | 136 | const char * frame4[] = { 137 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 138 | ">>&&&&&&&&>>>>>>>>&&&&&'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 139 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 140 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$''$-$$@','',,,,,,,,,,,,,,,,,,,", 141 | "&&++++++++&&&&&&&&+++++'@$$$$$$$$'**'$$$@''**',,,,,,,,,,,,,,,,,,", 142 | "+++++++++++++++++++++++'@$$$$$-$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 143 | "++++++++++++++++++'''++'@$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,,", 144 | "++########+++++++'**''''@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 145 | "#################'****''@$$$$$$-'*************',,,,,,,,,,,,,,,,,", 146 | "##################''''*'@$-$$$$$'***.'****.'**',,,,,,,,,,,,,,,,,", 147 | "##========########==='''@$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 148 | "======================='@@$$$-$$'*%%********%%',,,,,,,,,,,,,,,,,", 149 | "==;;;;;;;;========;;;;''@@@$$$$$$'***''''''**',,,,,,,,,,,,,,,,,,", 150 | ";;;;;;;;;;;;;;;;;;;;;''''@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,,", 151 | ";;;;;;;;;;;;;;;;;;;;'***'''''''''''''''''''',,,,,,,,,,,,,,,,,,,,", 152 | ";;,,,,,,,,;;;;;;;;,,'**','**,,,,,,'**,'**',,,,,,,,,,,,,,,,,,,,,,"}; 153 | 154 | const char * frame5[] = { 155 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 156 | ">>&&&&&&&&>>>>>>>>&&&&&'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 157 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$''$$$@@','',,,,,,,,,,,,,,,,,,,", 158 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$'**'-$$@''**',,,,,,,,,,,,,,,,,,", 159 | "&&++++++++&&&&&&&&+++++'@$$$$$$$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 160 | "+++++++++++++++++++'+++'@$$$$$-$$'***''''****',,,,,,,,,,,,,,,,,,", 161 | "++++++++++++++++++'*'++'@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 162 | "++########++++++++'*''''@$$$$$$$'*************',,,,,,,,,,,,,,,,,", 163 | "###################****'@$$$$$$-'***.'****.'**',,,,,,,,,,,,,,,,,", 164 | "###################''**'@$-$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 165 | "##========########==='''@$$$$$$$'*%%********%%',,,,,,,,,,,,,,,,,", 166 | "======================='@@$$$-$$$'***''''''**',,,,,,,,,,,,,,,,,,", 167 | "==;;;;;;;;========;;;;''@@@$$$$$$$'*********',,,,,,,,,,,,,,,,,,.", 168 | ";;;;;;;;;;;;;;;;;;;;;'*''@@@@@@@@@@''''''''',,,,,,,,,,,,,,,,,,,.", 169 | ";;;;;;;;;;;;;;;;;;;;'***''''''''''''''''*',,,,,,,,,,,,,,,,,,,,,,", 170 | ";;,,,,,,,,;;;;;;;;,,'**','**,,,,,,'**,'**',,,,,,,,,,,,,,,,,,..,."}; 171 | 172 | const char * frame6[] = { 173 | ">>>>>>>>>>>>>>>>>>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 174 | "&&>>>>>>>&&&&&&&&>>>>>>'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 175 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$''$-$$@','',,,,,,,,,,,,,,,,,,,", 176 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$$$$$$$'**'$$$@''**',,,,,,,,,,,,,,,,,,", 177 | "++&&&&&&&++++++++&'''&&'@$$$$$-$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 178 | "++++++++++++++++++'*''+'@$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,,", 179 | "++++++++++++++++++'**'''@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 180 | "##+++++++########++'**''@$$$$$$-'*************',,,,,,,,,,,,,,,,,", 181 | "###################''**'@$-$$$$$'***.'****.'**',,,,,,,,,,,,,,,,,", 182 | "####################''''@$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 183 | "==#######========#####''@@$$$-$$'*%%********%%',,,,,,,,,,,,,,,,,", 184 | "======================='@@@$$$$$$'***''''''**',,,,,,,,,,,,,,,,,,", 185 | ";;=======;;;;;;;;====='''@@@@@@@@@'*********',,,,,,,,,,,.,,,,,,,", 186 | ";;;;;;;;;;;;;;;;;;;;;'***''''''''''''''''''',,,,,,,,,,.,,,.,,,,,", 187 | ";;;;;;;;;;;;;;;;;;;;;'**'','*',,,,,'**,'**',,,,,,,,,,,,,,,,,,,,,", 188 | ",,;;;;;;;,,,,,,,,;;;;'''',,'',,,,,,,'',,'',,,,,,,,,,,.,,,,,.,,,,"}; 189 | 190 | const char * frame7[] = { 191 | ">>>>>>>>>>>>>>>>>>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 192 | "&&>>>>>>>&&&&&&&&>>>>>>'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 193 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 194 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 195 | "++&&&&&&&++++++++&&&&&&'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 196 | "+++++++++++++++++++'+++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 197 | "++++++++++++++++++'*'++'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 198 | "##+++++++########+'*''''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 199 | "###################****'@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 200 | "###################''**'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 201 | "==#######========####'''@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 202 | "======================='@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 203 | ";;=======;;;;;;;;======''@@@@@@@@@@'*********',,,.,,,,,,,,,,,,,,", 204 | ";;;;;;;;;;;;;;;;;;;;;;'**'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 205 | ";;;;;;;;;;;;;;;;;;;;;;'**','*',,,,,,**','**',,,,,,,,,,,,,,,,,,,,", 206 | ",,;;;;;;;,,,,,,,,;;;;;''',,,'',,,,,,''',,''',,.,,,,.,,,,,,,,,,,,"}; 207 | 208 | const char * frame8[] = { 209 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 210 | ">>&&&&&&&&>>>>>>>>&&&&&'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 211 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 212 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 213 | "&&++++++++&&&&&&&&+++++'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 214 | "+++++++++++++++++++++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 215 | "+++++++++++++++++++++++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 216 | "++########++++++++#####'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 217 | "######################''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 218 | "###################'''''@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 219 | "##========########'****'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 220 | "==================='''='@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 221 | "==;;;;;;;;========;;;;;'@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 222 | ";;;;;;;;;;;;;;;;;;;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 223 | ";;;;;;;;;;;;;;;;;;;;;;;'*'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 224 | ";;,,,,,,,,;;;;;;;;,,,,,'**',**',,,,,,**'.'**',,,,,,,,,,,,,,,,,,,"}; 225 | 226 | const char * frame9[] = { 227 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 228 | ">>&&&&&&&&>>>>>>>>&&&&&'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 229 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 230 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$$''-$$@',,'',,,,,,,,,,,,,,,,,,", 231 | "&&++++++++&&&&&&&&+++++'@$$$$$$$$$'**'$$@','**',,,,,,,,,,,,,,,,,", 232 | "+++++++++++++++++++++++'@$$$$$-$$$'***$$@''***',,,,,,,,,,,,,,,,,", 233 | "+++++++++++++++++++++++'@$$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,", 234 | "++########++++++++#####'@$$$$$$$$$'***********',,,,,,,,,,,,,,,,,", 235 | "#####################'''@$$$$$$-$'*************',,,,,,,,,,,,,,,,", 236 | "###################''**'@$-$$$$$$'***.'****.'**',,,,,,,,,,,,,,,,", 237 | "##========########=****'@$$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,", 238 | "=================='*'=='@@$$$-$$$'*%%********%%',,,,,,,,,,,,,,,,", 239 | "==;;;;;;;;========;';;;'@@@$$$$$$$'***''''''**',,,,,,,,,,,,,,,,,", 240 | ";;;;;;;;;;;;;;;;;;;;;;;''@@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,", 241 | ";;;;;;;;;;;;;;;;;;;;;;'**'''''''''''''''''''',,,,,,,,,,,,,,,,,,,", 242 | ";;,,,,,,,,;;;;;;;;,,,,'**','*',,..,.**','**',,,,,,,,,,,,,,,,,,,,"}; 243 | 244 | const char * frame10[] = { 245 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 246 | "&&>>>>>>>&&&&&&&&>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 247 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$-$$$$@@',,,,,,,,,,,,,,,,,,,,,,", 248 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$$''$-$$@','',,,,,,,,,,,,,,,,,,,", 249 | "++&&&&&&&++++++++&&&&&&'@$$$$$$$$'**'$$$@''**',,,,,,,,,,,,,,,,,,", 250 | "+++++++++++++++++++++++'@$$$$$-$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 251 | "++++++++++++++++++'''++'@$$$$$$$$'***''''****',,,,,,,,,,,,,,,,,,", 252 | "##+++++++########'**''''@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 253 | "#################'****''@$$$$$$-'*************',,,,,,,,,,,,,,,,,", 254 | "##################''''*'@$-$$$$$'***.'****.'**',,,,,,,,,,,,,,,,,", 255 | "==#######========####'''@$$$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 256 | "======================='@@$$$-$$'*%%********%%',,,,,,,,,,,,,,,,,", 257 | ";;=======;;;;;;;;=====''@@@$$$$$$'***''''''**',,,,,,,,,,,,,,,,,,", 258 | ";;;;;;;;;;;;;;;;;;;;;''''@@@@@@@@@'*********',,,,,,,,,,,,,,,,,,,", 259 | ";;;;;;;;;;;;;;;;;;;;'***'''''''''''''''''''',,,,,,,,,,,,,,,,,,,,", 260 | ",,;;;;;;;,,,,,,,,;;;'**'.'**..,,,,'**''**',,,,,,,,,,,,,,,,,,,,,,"}; 261 | 262 | const char * frame11[] = { 263 | ">>>>>>>>>>>>>>>>>>>>>>>>'@@@@@@@@@@@@@@@',,,,,,,,,,,,,,,,,,,,,,,", 264 | "&&>>>>>>>&&&&&&&&>>>>>>'@@@$$$$$$$$$$$@@@',,,,,,,,,,,,,,,,,,,,,,", 265 | "&&&&&&&&&&&&&&&&&&&&&&&'@@$$$$$-$$''$$$@@','',,,,,,,,,,,,,,,,,,,", 266 | "&&&&&&&&&&&&&&&&&&&&&&&'@$$-$$$$$'**'-$$@''**',,,,,,,,,,,,,,,,,,", 267 | "++&&&&&&&++++++++&&&&&&'@$$$$$$$$'***$$$@'***',,,,,,,,,,,,,,,,,,", 268 | "+++++++++++++++++++'+++'@$$$$$-$$'***''''****',,,,,,,,,,,,,,,,,,", 269 | "++++++++++++++++++'*'++'@$$$$$$$$'***********',,,,,,,,,,,,,,,,,,", 270 | "##+++++++########+'*''''@$$$$$$$'*************',,,,,,,,,,,,,,,,,", 271 | "###################****'@$$$$$$-'***.'****.'**',,,,,,,,,,,,,,,,,", 272 | "###################''**'@$-$$$$$'***''**'*''**',,,,,,,,,,,,,,,,,", 273 | "==#######========####'''@$$$$$$$'*%%********%%',,,,,,,,,,,,,,,,,", 274 | "======================='@@$$$-$$$'***''''''**',,,,,,,,,,,,,,,,,,", 275 | ";;=======;;;;;;;;=.===''@@@$$$$$$$'*********',,,,,,,,,,,,,,,,,,,", 276 | ";;;;;;;;;;;;;;;;;;;;.'*''@@@@@@@@@@''''''''',,,,,,,,,,,,,,,,,,,,", 277 | ";;;;;;;;;;;;;;;;;;;;'***''''''''''''''''*',,,,,,,,,,,,,,,,,,,,,,", 278 | ",,;;;;;;;,,,,,,,.;;;'**','**,,,,,,'**''**',,,,,,,,,,,,,,,,,,,,,,"}; 279 | 280 | const char ** cat_frames[] = { 281 | frame0, 282 | frame1, 283 | frame2, 284 | frame3, 285 | frame4, 286 | frame5, 287 | frame6, 288 | frame7, 289 | frame8, 290 | frame9, 291 | frame10, 292 | frame11, 293 | NULL 294 | }; 295 | 296 | struct plane *set_nyancat_plane(struct plane *p, int x, const char **frame); 297 | 298 | #define FRAME_WIDTH 64 299 | #define FRAME_HEIGHT 16 300 | 301 | #endif 302 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | 341 | -------------------------------------------------------------------------------- /dotfont.h: -------------------------------------------------------------------------------- 1 | #ifndef _DOTFONT_H 2 | #define _DOTFONT_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #define ASCII_H 16 9 | #define ASCII_W 8 10 | 11 | /* 12 | * Created from bdf2c 13 | */ 14 | 15 | #define ________ 0x00 16 | #define _______X 0x01 17 | #define ______X_ 0x02 18 | #define ______XX 0x03 19 | #define _____X__ 0x04 20 | #define _____X_X 0x05 21 | #define _____XX_ 0x06 22 | #define _____XXX 0x07 23 | #define ____X___ 0x08 24 | #define ____X__X 0x09 25 | #define ____X_X_ 0x0A 26 | #define ____X_XX 0x0B 27 | #define ____XX__ 0x0C 28 | #define ____XX_X 0x0D 29 | #define ____XXX_ 0x0E 30 | #define ____XXXX 0x0F 31 | #define ___X____ 0x10 32 | #define ___X___X 0x11 33 | #define ___X__X_ 0x12 34 | #define ___X__XX 0x13 35 | #define ___X_X__ 0x14 36 | #define ___X_X_X 0x15 37 | #define ___X_XX_ 0x16 38 | #define ___X_XXX 0x17 39 | #define ___XX___ 0x18 40 | #define ___XX__X 0x19 41 | #define ___XX_X_ 0x1A 42 | #define ___XX_XX 0x1B 43 | #define ___XXX__ 0x1C 44 | #define ___XXX_X 0x1D 45 | #define ___XXXX_ 0x1E 46 | #define ___XXXXX 0x1F 47 | #define __X_____ 0x20 48 | #define __X____X 0x21 49 | #define __X___X_ 0x22 50 | #define __X___XX 0x23 51 | #define __X__X__ 0x24 52 | #define __X__X_X 0x25 53 | #define __X__XX_ 0x26 54 | #define __X__XXX 0x27 55 | #define __X_X___ 0x28 56 | #define __X_X__X 0x29 57 | #define __X_X_X_ 0x2A 58 | #define __X_X_XX 0x2B 59 | #define __X_XX__ 0x2C 60 | #define __X_XX_X 0x2D 61 | #define __X_XXX_ 0x2E 62 | #define __X_XXXX 0x2F 63 | #define __XX____ 0x30 64 | #define __XX___X 0x31 65 | #define __XX__X_ 0x32 66 | #define __XX__XX 0x33 67 | #define __XX_X__ 0x34 68 | #define __XX_X_X 0x35 69 | #define __XX_XX_ 0x36 70 | #define __XX_XXX 0x37 71 | #define __XXX___ 0x38 72 | #define __XXX__X 0x39 73 | #define __XXX_X_ 0x3A 74 | #define __XXX_XX 0x3B 75 | #define __XXXX__ 0x3C 76 | #define __XXXX_X 0x3D 77 | #define __XXXXX_ 0x3E 78 | #define __XXXXXX 0x3F 79 | #define _X______ 0x40 80 | #define _X_____X 0x41 81 | #define _X____X_ 0x42 82 | #define _X____XX 0x43 83 | #define _X___X__ 0x44 84 | #define _X___X_X 0x45 85 | #define _X___XX_ 0x46 86 | #define _X___XXX 0x47 87 | #define _X__X___ 0x48 88 | #define _X__X__X 0x49 89 | #define _X__X_X_ 0x4A 90 | #define _X__X_XX 0x4B 91 | #define _X__XX__ 0x4C 92 | #define _X__XX_X 0x4D 93 | #define _X__XXX_ 0x4E 94 | #define _X__XXXX 0x4F 95 | #define _X_X____ 0x50 96 | #define _X_X___X 0x51 97 | #define _X_X__X_ 0x52 98 | #define _X_X__XX 0x53 99 | #define _X_X_X__ 0x54 100 | #define _X_X_X_X 0x55 101 | #define _X_X_XX_ 0x56 102 | #define _X_X_XXX 0x57 103 | #define _X_XX___ 0x58 104 | #define _X_XX__X 0x59 105 | #define _X_XX_X_ 0x5A 106 | #define _X_XX_XX 0x5B 107 | #define _X_XXX__ 0x5C 108 | #define _X_XXX_X 0x5D 109 | #define _X_XXXX_ 0x5E 110 | #define _X_XXXXX 0x5F 111 | #define _XX_____ 0x60 112 | #define _XX____X 0x61 113 | #define _XX___X_ 0x62 114 | #define _XX___XX 0x63 115 | #define _XX__X__ 0x64 116 | #define _XX__X_X 0x65 117 | #define _XX__XX_ 0x66 118 | #define _XX__XXX 0x67 119 | #define _XX_X___ 0x68 120 | #define _XX_X__X 0x69 121 | #define _XX_X_X_ 0x6A 122 | #define _XX_X_XX 0x6B 123 | #define _XX_XX__ 0x6C 124 | #define _XX_XX_X 0x6D 125 | #define _XX_XXX_ 0x6E 126 | #define _XX_XXXX 0x6F 127 | #define _XXX____ 0x70 128 | #define _XXX___X 0x71 129 | #define _XXX__X_ 0x72 130 | #define _XXX__XX 0x73 131 | #define _XXX_X__ 0x74 132 | #define _XXX_X_X 0x75 133 | #define _XXX_XX_ 0x76 134 | #define _XXX_XXX 0x77 135 | #define _XXXX___ 0x78 136 | #define _XXXX__X 0x79 137 | #define _XXXX_X_ 0x7A 138 | #define _XXXX_XX 0x7B 139 | #define _XXXXX__ 0x7C 140 | #define _XXXXX_X 0x7D 141 | #define _XXXXXX_ 0x7E 142 | #define _XXXXXXX 0x7F 143 | #define X_______ 0x80 144 | #define X______X 0x81 145 | #define X_____X_ 0x82 146 | #define X_____XX 0x83 147 | #define X____X__ 0x84 148 | #define X____X_X 0x85 149 | #define X____XX_ 0x86 150 | #define X____XXX 0x87 151 | #define X___X___ 0x88 152 | #define X___X__X 0x89 153 | #define X___X_X_ 0x8A 154 | #define X___X_XX 0x8B 155 | #define X___XX__ 0x8C 156 | #define X___XX_X 0x8D 157 | #define X___XXX_ 0x8E 158 | #define X___XXXX 0x8F 159 | #define X__X____ 0x90 160 | #define X__X___X 0x91 161 | #define X__X__X_ 0x92 162 | #define X__X__XX 0x93 163 | #define X__X_X__ 0x94 164 | #define X__X_X_X 0x95 165 | #define X__X_XX_ 0x96 166 | #define X__X_XXX 0x97 167 | #define X__XX___ 0x98 168 | #define X__XX__X 0x99 169 | #define X__XX_X_ 0x9A 170 | #define X__XX_XX 0x9B 171 | #define X__XXX__ 0x9C 172 | #define X__XXX_X 0x9D 173 | #define X__XXXX_ 0x9E 174 | #define X__XXXXX 0x9F 175 | #define X_X_____ 0xA0 176 | #define X_X____X 0xA1 177 | #define X_X___X_ 0xA2 178 | #define X_X___XX 0xA3 179 | #define X_X__X__ 0xA4 180 | #define X_X__X_X 0xA5 181 | #define X_X__XX_ 0xA6 182 | #define X_X__XXX 0xA7 183 | #define X_X_X___ 0xA8 184 | #define X_X_X__X 0xA9 185 | #define X_X_X_X_ 0xAA 186 | #define X_X_X_XX 0xAB 187 | #define X_X_XX__ 0xAC 188 | #define X_X_XX_X 0xAD 189 | #define X_X_XXX_ 0xAE 190 | #define X_X_XXXX 0xAF 191 | #define X_XX____ 0xB0 192 | #define X_XX___X 0xB1 193 | #define X_XX__X_ 0xB2 194 | #define X_XX__XX 0xB3 195 | #define X_XX_X__ 0xB4 196 | #define X_XX_X_X 0xB5 197 | #define X_XX_XX_ 0xB6 198 | #define X_XX_XXX 0xB7 199 | #define X_XXX___ 0xB8 200 | #define X_XXX__X 0xB9 201 | #define X_XXX_X_ 0xBA 202 | #define X_XXX_XX 0xBB 203 | #define X_XXXX__ 0xBC 204 | #define X_XXXX_X 0xBD 205 | #define X_XXXXX_ 0xBE 206 | #define X_XXXXXX 0xBF 207 | #define XX______ 0xC0 208 | #define XX_____X 0xC1 209 | #define XX____X_ 0xC2 210 | #define XX____XX 0xC3 211 | #define XX___X__ 0xC4 212 | #define XX___X_X 0xC5 213 | #define XX___XX_ 0xC6 214 | #define XX___XXX 0xC7 215 | #define XX__X___ 0xC8 216 | #define XX__X__X 0xC9 217 | #define XX__X_X_ 0xCA 218 | #define XX__X_XX 0xCB 219 | #define XX__XX__ 0xCC 220 | #define XX__XX_X 0xCD 221 | #define XX__XXX_ 0xCE 222 | #define XX__XXXX 0xCF 223 | #define XX_X____ 0xD0 224 | #define XX_X___X 0xD1 225 | #define XX_X__X_ 0xD2 226 | #define XX_X__XX 0xD3 227 | #define XX_X_X__ 0xD4 228 | #define XX_X_X_X 0xD5 229 | #define XX_X_XX_ 0xD6 230 | #define XX_X_XXX 0xD7 231 | #define XX_XX___ 0xD8 232 | #define XX_XX__X 0xD9 233 | #define XX_XX_X_ 0xDA 234 | #define XX_XX_XX 0xDB 235 | #define XX_XXX__ 0xDC 236 | #define XX_XXX_X 0xDD 237 | #define XX_XXXX_ 0xDE 238 | #define XX_XXXXX 0xDF 239 | #define XXX_____ 0xE0 240 | #define XXX____X 0xE1 241 | #define XXX___X_ 0xE2 242 | #define XXX___XX 0xE3 243 | #define XXX__X__ 0xE4 244 | #define XXX__X_X 0xE5 245 | #define XXX__XX_ 0xE6 246 | #define XXX__XXX 0xE7 247 | #define XXX_X___ 0xE8 248 | #define XXX_X__X 0xE9 249 | #define XXX_X_X_ 0xEA 250 | #define XXX_X_XX 0xEB 251 | #define XXX_XX__ 0xEC 252 | #define XXX_XX_X 0xED 253 | #define XXX_XXX_ 0xEE 254 | #define XXX_XXXX 0xEF 255 | #define XXXX____ 0xF0 256 | #define XXXX___X 0xF1 257 | #define XXXX__X_ 0xF2 258 | #define XXXX__XX 0xF3 259 | #define XXXX_X__ 0xF4 260 | #define XXXX_X_X 0xF5 261 | #define XXXX_XX_ 0xF6 262 | #define XXXX_XXX 0xF7 263 | #define XXXXX___ 0xF8 264 | #define XXXXX__X 0xF9 265 | #define XXXXX_X_ 0xFA 266 | #define XXXXX_XX 0xFB 267 | #define XXXXXX__ 0xFC 268 | #define XXXXXX_X 0xFD 269 | #define XXXXXXX_ 0xFE 270 | #define XXXXXXXX 0xFF 271 | 272 | static const unsigned char __font_bitmap_8x16__[] = { 273 | // 0 $00 'uni25AE' 274 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 275 | ________, 276 | ________, 277 | _XXXXXX_, 278 | _XXXXXX_, 279 | _XXXXXX_, 280 | _XXXXXX_, 281 | _XXXXXX_, 282 | _XXXXXX_, 283 | _XXXXXX_, 284 | _XXXXXX_, 285 | _XXXXXX_, 286 | _XXXXXX_, 287 | ________, 288 | ________, 289 | ________, 290 | ________, 291 | // 1 $01 'blackdiamond' 292 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 293 | ________, 294 | ________, 295 | ________, 296 | ________, 297 | ___X____, 298 | __XXX___, 299 | _XXXXX__, 300 | XXXXXXX_, 301 | _XXXXX__, 302 | __XXX___, 303 | ___X____, 304 | ________, 305 | ________, 306 | ________, 307 | ________, 308 | ________, 309 | // 2 $02 'shade' 310 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 311 | X_X_X_X_, 312 | _X_X_X_X, 313 | X_X_X_X_, 314 | _X_X_X_X, 315 | X_X_X_X_, 316 | _X_X_X_X, 317 | X_X_X_X_, 318 | _X_X_X_X, 319 | X_X_X_X_, 320 | _X_X_X_X, 321 | X_X_X_X_, 322 | _X_X_X_X, 323 | X_X_X_X_, 324 | _X_X_X_X, 325 | X_X_X_X_, 326 | _X_X_X_X, 327 | // 3 $03 'uni2409' 328 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 329 | ________, 330 | X___X___, 331 | X___X___, 332 | XXXXX___, 333 | X___X___, 334 | X___X___, 335 | X___X___, 336 | ________, 337 | ___XXXXX, 338 | _____X__, 339 | _____X__, 340 | _____X__, 341 | _____X__, 342 | _____X__, 343 | ________, 344 | ________, 345 | // 4 $04 'uni240C' 346 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 347 | ________, 348 | XXXXX___, 349 | X_______, 350 | XXX_____, 351 | X_______, 352 | X_______, 353 | X_______, 354 | ________, 355 | ___XXXXX, 356 | ___X____, 357 | ___XXX__, 358 | ___X____, 359 | ___X____, 360 | ___X____, 361 | ________, 362 | ________, 363 | // 5 $05 'uni240D' 364 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 365 | ________, 366 | _XXX____, 367 | X___X___, 368 | X_______, 369 | X_______, 370 | X___X___, 371 | _XXX____, 372 | ________, 373 | ___XXXX_, 374 | ___X___X, 375 | ___X___X, 376 | ___XXXX_, 377 | ___X__X_, 378 | ___X___X, 379 | ________, 380 | ________, 381 | // 6 $06 'uni240A' 382 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 383 | ________, 384 | X_______, 385 | X_______, 386 | X_______, 387 | X_______, 388 | X_______, 389 | XXXXX___, 390 | ________, 391 | ___XXXXX, 392 | ___X____, 393 | ___XXX__, 394 | ___X____, 395 | ___X____, 396 | ___X____, 397 | ________, 398 | ________, 399 | // 7 $07 'degree' 400 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 401 | ________, 402 | ___XX___, 403 | __X__X__, 404 | __X__X__, 405 | ___XX___, 406 | ________, 407 | ________, 408 | ________, 409 | ________, 410 | ________, 411 | ________, 412 | ________, 413 | ________, 414 | ________, 415 | ________, 416 | ________, 417 | // 8 $08 'plusminus' 418 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 419 | ________, 420 | ________, 421 | ________, 422 | ________, 423 | ________, 424 | ___X____, 425 | ___X____, 426 | _XXXXX__, 427 | ___X____, 428 | ___X____, 429 | ________, 430 | _XXXXX__, 431 | ________, 432 | ________, 433 | ________, 434 | ________, 435 | // 9 $09 'uni2424' 436 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 437 | ________, 438 | X___X___, 439 | XX__X___, 440 | X_X_X___, 441 | X__XX___, 442 | X___X___, 443 | X___X___, 444 | ________, 445 | ___X____, 446 | ___X____, 447 | ___X____, 448 | ___X____, 449 | ___X____, 450 | ___XXXXX, 451 | ________, 452 | ________, 453 | // 10 $0a 'uni240B' 454 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 455 | ________, 456 | X___X___, 457 | X___X___, 458 | _X_X____, 459 | _X_X____, 460 | __X_____, 461 | __X_____, 462 | ________, 463 | ___XXXXX, 464 | _____X__, 465 | _____X__, 466 | _____X__, 467 | _____X__, 468 | _____X__, 469 | ________, 470 | ________, 471 | // 11 $0b 'SF040000' 472 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 473 | ___X____, 474 | ___X____, 475 | ___X____, 476 | ___X____, 477 | ___X____, 478 | ___X____, 479 | ___X____, 480 | XXXX____, 481 | ________, 482 | ________, 483 | ________, 484 | ________, 485 | ________, 486 | ________, 487 | ________, 488 | ________, 489 | // 12 $0c 'SF030000' 490 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 491 | ________, 492 | ________, 493 | ________, 494 | ________, 495 | ________, 496 | ________, 497 | ________, 498 | XXXX____, 499 | ___X____, 500 | ___X____, 501 | ___X____, 502 | ___X____, 503 | ___X____, 504 | ___X____, 505 | ___X____, 506 | ___X____, 507 | // 13 $0d 'SF010000' 508 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 509 | ________, 510 | ________, 511 | ________, 512 | ________, 513 | ________, 514 | ________, 515 | ________, 516 | ___XXXXX, 517 | ___X____, 518 | ___X____, 519 | ___X____, 520 | ___X____, 521 | ___X____, 522 | ___X____, 523 | ___X____, 524 | ___X____, 525 | // 14 $0e 'SF020000' 526 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 527 | ___X____, 528 | ___X____, 529 | ___X____, 530 | ___X____, 531 | ___X____, 532 | ___X____, 533 | ___X____, 534 | ___XXXXX, 535 | ________, 536 | ________, 537 | ________, 538 | ________, 539 | ________, 540 | ________, 541 | ________, 542 | ________, 543 | // 15 $0f 'SF050000' 544 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 545 | ___X____, 546 | ___X____, 547 | ___X____, 548 | ___X____, 549 | ___X____, 550 | ___X____, 551 | ___X____, 552 | XXXXXXXX, 553 | ___X____, 554 | ___X____, 555 | ___X____, 556 | ___X____, 557 | ___X____, 558 | ___X____, 559 | ___X____, 560 | ___X____, 561 | // 16 $10 'uni23BA' 562 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 563 | XXXXXXXX, 564 | ________, 565 | ________, 566 | ________, 567 | ________, 568 | ________, 569 | ________, 570 | ________, 571 | ________, 572 | ________, 573 | ________, 574 | ________, 575 | ________, 576 | ________, 577 | ________, 578 | ________, 579 | // 17 $11 'uni23BB' 580 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 581 | ________, 582 | ________, 583 | ________, 584 | ________, 585 | XXXXXXXX, 586 | ________, 587 | ________, 588 | ________, 589 | ________, 590 | ________, 591 | ________, 592 | ________, 593 | ________, 594 | ________, 595 | ________, 596 | ________, 597 | // 18 $12 'SF100000' 598 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 599 | ________, 600 | ________, 601 | ________, 602 | ________, 603 | ________, 604 | ________, 605 | ________, 606 | XXXXXXXX, 607 | ________, 608 | ________, 609 | ________, 610 | ________, 611 | ________, 612 | ________, 613 | ________, 614 | ________, 615 | // 19 $13 'uni23BC' 616 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 617 | ________, 618 | ________, 619 | ________, 620 | ________, 621 | ________, 622 | ________, 623 | ________, 624 | ________, 625 | ________, 626 | ________, 627 | ________, 628 | XXXXXXXX, 629 | ________, 630 | ________, 631 | ________, 632 | ________, 633 | // 20 $14 'uni23BD' 634 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 635 | ________, 636 | ________, 637 | ________, 638 | ________, 639 | ________, 640 | ________, 641 | ________, 642 | ________, 643 | ________, 644 | ________, 645 | ________, 646 | ________, 647 | ________, 648 | ________, 649 | ________, 650 | XXXXXXXX, 651 | // 21 $15 'SF080000' 652 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 653 | ___X____, 654 | ___X____, 655 | ___X____, 656 | ___X____, 657 | ___X____, 658 | ___X____, 659 | ___X____, 660 | ___XXXXX, 661 | ___X____, 662 | ___X____, 663 | ___X____, 664 | ___X____, 665 | ___X____, 666 | ___X____, 667 | ___X____, 668 | ___X____, 669 | // 22 $16 'SF090000' 670 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 671 | ___X____, 672 | ___X____, 673 | ___X____, 674 | ___X____, 675 | ___X____, 676 | ___X____, 677 | ___X____, 678 | XXXX____, 679 | ___X____, 680 | ___X____, 681 | ___X____, 682 | ___X____, 683 | ___X____, 684 | ___X____, 685 | ___X____, 686 | ___X____, 687 | // 23 $17 'SF070000' 688 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 689 | ___X____, 690 | ___X____, 691 | ___X____, 692 | ___X____, 693 | ___X____, 694 | ___X____, 695 | ___X____, 696 | XXXXXXXX, 697 | ________, 698 | ________, 699 | ________, 700 | ________, 701 | ________, 702 | ________, 703 | ________, 704 | ________, 705 | // 24 $18 'SF060000' 706 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 707 | ________, 708 | ________, 709 | ________, 710 | ________, 711 | ________, 712 | ________, 713 | ________, 714 | XXXXXXXX, 715 | ___X____, 716 | ___X____, 717 | ___X____, 718 | ___X____, 719 | ___X____, 720 | ___X____, 721 | ___X____, 722 | ___X____, 723 | // 25 $19 'SF110000' 724 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 725 | ___X____, 726 | ___X____, 727 | ___X____, 728 | ___X____, 729 | ___X____, 730 | ___X____, 731 | ___X____, 732 | ___X____, 733 | ___X____, 734 | ___X____, 735 | ___X____, 736 | ___X____, 737 | ___X____, 738 | ___X____, 739 | ___X____, 740 | ___X____, 741 | // 26 $1a 'lessequal' 742 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 743 | ________, 744 | ________, 745 | ________, 746 | _____X__, 747 | ____X___, 748 | ___X____, 749 | __X_____, 750 | ___X____, 751 | ____X___, 752 | _____X__, 753 | ________, 754 | __XXXXX_, 755 | ________, 756 | ________, 757 | ________, 758 | ________, 759 | // 27 $1b 'greaterequal' 760 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 761 | ________, 762 | ________, 763 | ________, 764 | __X_____, 765 | ___X____, 766 | ____X___, 767 | _____X__, 768 | ____X___, 769 | ___X____, 770 | __X_____, 771 | ________, 772 | _XXXXX__, 773 | ________, 774 | ________, 775 | ________, 776 | ________, 777 | // 28 $1c 'pi' 778 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 779 | ________, 780 | ________, 781 | ________, 782 | ________, 783 | ________, 784 | _XXXXXX_, 785 | _X____X_, 786 | _X____X_, 787 | _X____X_, 788 | _X____X_, 789 | _X____X_, 790 | _X____X_, 791 | ________, 792 | ________, 793 | ________, 794 | ________, 795 | // 29 $1d 'notequal' 796 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 797 | ________, 798 | ________, 799 | ________, 800 | ________, 801 | ______X_, 802 | _XXXXXX_, 803 | ____X___, 804 | ___X____, 805 | _XXXXXX_, 806 | _X______, 807 | ________, 808 | ________, 809 | ________, 810 | ________, 811 | ________, 812 | ________, 813 | // 30 $1e 'sterling' 814 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 815 | ________, 816 | ________, 817 | ___XX___, 818 | __X__X__, 819 | __X_____, 820 | __X_____, 821 | _XXXX___, 822 | __X_____, 823 | __X_____, 824 | __X_____, 825 | __X___X_, 826 | _XXXXXX_, 827 | ________, 828 | ________, 829 | ________, 830 | ________, 831 | // 31 $1f 'periodcentered' 832 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 833 | ________, 834 | ________, 835 | ________, 836 | ________, 837 | ________, 838 | ________, 839 | ________, 840 | ___X____, 841 | ___X____, 842 | ________, 843 | ________, 844 | ________, 845 | ________, 846 | ________, 847 | ________, 848 | ________, 849 | // 32 $20 'space' 850 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 851 | ________, 852 | ________, 853 | ________, 854 | ________, 855 | ________, 856 | ________, 857 | ________, 858 | ________, 859 | ________, 860 | ________, 861 | ________, 862 | ________, 863 | ________, 864 | ________, 865 | ________, 866 | ________, 867 | // 33 $21 'exclam' 868 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 869 | ________, 870 | ________, 871 | ___XX___, 872 | __XXXX__, 873 | __XXXX__, 874 | __XXXX__, 875 | ___XX___, 876 | ___XX___, 877 | ___XX___, 878 | ________, 879 | ___XX___, 880 | ___XX___, 881 | ________, 882 | ________, 883 | ________, 884 | ________, 885 | // 34 $22 'quotedbl' 886 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 887 | ________, 888 | _XX__XX_, 889 | _XX__XX_, 890 | _XX__XX_, 891 | __X__X__, 892 | ________, 893 | ________, 894 | ________, 895 | ________, 896 | ________, 897 | ________, 898 | ________, 899 | ________, 900 | ________, 901 | ________, 902 | ________, 903 | // 35 $23 'numbersign' 904 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 905 | ________, 906 | ________, 907 | ________, 908 | _XX_XX__, 909 | _XX_XX__, 910 | XXXXXXX_, 911 | _XX_XX__, 912 | _XX_XX__, 913 | _XX_XX__, 914 | XXXXXXX_, 915 | _XX_XX__, 916 | _XX_XX__, 917 | ________, 918 | ________, 919 | ________, 920 | ________, 921 | // 36 $24 'dollar' 922 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 923 | ___XX___, 924 | ___XX___, 925 | _XXXXX__, 926 | XX___XX_, 927 | XX____X_, 928 | XX______, 929 | _XXXXX__, 930 | _____XX_, 931 | _____XX_, 932 | X____XX_, 933 | XX___XX_, 934 | _XXXXX__, 935 | ___XX___, 936 | ___XX___, 937 | ________, 938 | ________, 939 | // 37 $25 'percent' 940 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 941 | ________, 942 | ________, 943 | ________, 944 | ________, 945 | XX____X_, 946 | XX___XX_, 947 | ____XX__, 948 | ___XX___, 949 | __XX____, 950 | _XX_____, 951 | XX___XX_, 952 | X____XX_, 953 | ________, 954 | ________, 955 | ________, 956 | ________, 957 | // 38 $26 'ampersand' 958 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 959 | ________, 960 | ________, 961 | __XXX___, 962 | _XX_XX__, 963 | _XX_XX__, 964 | __XXX___, 965 | _XXX_XX_, 966 | XX_XXX__, 967 | XX__XX__, 968 | XX__XX__, 969 | XX__XX__, 970 | _XXX_XX_, 971 | ________, 972 | ________, 973 | ________, 974 | ________, 975 | // 39 $27 'quotesingle' 976 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 977 | ________, 978 | __XX____, 979 | __XX____, 980 | __XX____, 981 | __X_____, 982 | ________, 983 | ________, 984 | ________, 985 | ________, 986 | ________, 987 | ________, 988 | ________, 989 | ________, 990 | ________, 991 | ________, 992 | ________, 993 | // 40 $28 'parenleft' 994 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 995 | ________, 996 | ________, 997 | ____XX__, 998 | ___XX___, 999 | __XX____, 1000 | __XX____, 1001 | __XX____, 1002 | __XX____, 1003 | __XX____, 1004 | __XX____, 1005 | ___XX___, 1006 | ____XX__, 1007 | ________, 1008 | ________, 1009 | ________, 1010 | ________, 1011 | // 41 $29 'parenright' 1012 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1013 | ________, 1014 | ________, 1015 | __XX____, 1016 | ___XX___, 1017 | ____XX__, 1018 | ____XX__, 1019 | ____XX__, 1020 | ____XX__, 1021 | ____XX__, 1022 | ____XX__, 1023 | ___XX___, 1024 | __XX____, 1025 | ________, 1026 | ________, 1027 | ________, 1028 | ________, 1029 | // 42 $2a 'asterisk' 1030 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1031 | ________, 1032 | ________, 1033 | ________, 1034 | ________, 1035 | ________, 1036 | _XX__XX_, 1037 | __XXXX__, 1038 | XXXXXXXX, 1039 | __XXXX__, 1040 | _XX__XX_, 1041 | ________, 1042 | ________, 1043 | ________, 1044 | ________, 1045 | ________, 1046 | ________, 1047 | // 43 $2b 'plus' 1048 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1049 | ________, 1050 | ________, 1051 | ________, 1052 | ________, 1053 | ________, 1054 | ___XX___, 1055 | ___XX___, 1056 | _XXXXXX_, 1057 | ___XX___, 1058 | ___XX___, 1059 | ________, 1060 | ________, 1061 | ________, 1062 | ________, 1063 | ________, 1064 | ________, 1065 | // 44 $2c 'comma' 1066 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1067 | ________, 1068 | ________, 1069 | ________, 1070 | ________, 1071 | ________, 1072 | ________, 1073 | ________, 1074 | ________, 1075 | ________, 1076 | ___XX___, 1077 | ___XX___, 1078 | ___XX___, 1079 | __XX____, 1080 | ________, 1081 | ________, 1082 | ________, 1083 | // 45 $2d 'hyphen' 1084 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1085 | ________, 1086 | ________, 1087 | ________, 1088 | ________, 1089 | ________, 1090 | ________, 1091 | ________, 1092 | XXXXXXX_, 1093 | ________, 1094 | ________, 1095 | ________, 1096 | ________, 1097 | ________, 1098 | ________, 1099 | ________, 1100 | ________, 1101 | // 46 $2e 'period' 1102 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1103 | ________, 1104 | ________, 1105 | ________, 1106 | ________, 1107 | ________, 1108 | ________, 1109 | ________, 1110 | ________, 1111 | ________, 1112 | ________, 1113 | ___XX___, 1114 | ___XX___, 1115 | ________, 1116 | ________, 1117 | ________, 1118 | ________, 1119 | // 47 $2f 'slash' 1120 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1121 | ________, 1122 | ________, 1123 | ________, 1124 | ________, 1125 | ______X_, 1126 | _____XX_, 1127 | ____XX__, 1128 | ___XX___, 1129 | __XX____, 1130 | _XX_____, 1131 | XX______, 1132 | X_______, 1133 | ________, 1134 | ________, 1135 | ________, 1136 | ________, 1137 | // 48 $30 'zero' 1138 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1139 | ________, 1140 | ________, 1141 | __XXX___, 1142 | _XX_XX__, 1143 | XX___XX_, 1144 | XX___XX_, 1145 | XX_X_XX_, 1146 | XX_X_XX_, 1147 | XX___XX_, 1148 | XX___XX_, 1149 | _XX_XX__, 1150 | __XXX___, 1151 | ________, 1152 | ________, 1153 | ________, 1154 | ________, 1155 | // 49 $31 'one' 1156 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1157 | ________, 1158 | ________, 1159 | ___XX___, 1160 | __XXX___, 1161 | _XXXX___, 1162 | ___XX___, 1163 | ___XX___, 1164 | ___XX___, 1165 | ___XX___, 1166 | ___XX___, 1167 | ___XX___, 1168 | _XXXXXX_, 1169 | ________, 1170 | ________, 1171 | ________, 1172 | ________, 1173 | // 50 $32 'two' 1174 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1175 | ________, 1176 | ________, 1177 | _XXXXX__, 1178 | XX___XX_, 1179 | _____XX_, 1180 | ____XX__, 1181 | ___XX___, 1182 | __XX____, 1183 | _XX_____, 1184 | XX______, 1185 | XX___XX_, 1186 | XXXXXXX_, 1187 | ________, 1188 | ________, 1189 | ________, 1190 | ________, 1191 | // 51 $33 'three' 1192 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1193 | ________, 1194 | ________, 1195 | _XXXXX__, 1196 | XX___XX_, 1197 | _____XX_, 1198 | _____XX_, 1199 | __XXXX__, 1200 | _____XX_, 1201 | _____XX_, 1202 | _____XX_, 1203 | XX___XX_, 1204 | _XXXXX__, 1205 | ________, 1206 | ________, 1207 | ________, 1208 | ________, 1209 | // 52 $34 'four' 1210 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1211 | ________, 1212 | ________, 1213 | ____XX__, 1214 | ___XXX__, 1215 | __XXXX__, 1216 | _XX_XX__, 1217 | XX__XX__, 1218 | XXXXXXX_, 1219 | ____XX__, 1220 | ____XX__, 1221 | ____XX__, 1222 | ___XXXX_, 1223 | ________, 1224 | ________, 1225 | ________, 1226 | ________, 1227 | // 53 $35 'five' 1228 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1229 | ________, 1230 | ________, 1231 | XXXXXXX_, 1232 | XX______, 1233 | XX______, 1234 | XX______, 1235 | XXXXXX__, 1236 | _____XX_, 1237 | _____XX_, 1238 | _____XX_, 1239 | XX___XX_, 1240 | _XXXXX__, 1241 | ________, 1242 | ________, 1243 | ________, 1244 | ________, 1245 | // 54 $36 'six' 1246 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1247 | ________, 1248 | ________, 1249 | __XXX___, 1250 | _XX_____, 1251 | XX______, 1252 | XX______, 1253 | XXXXXX__, 1254 | XX___XX_, 1255 | XX___XX_, 1256 | XX___XX_, 1257 | XX___XX_, 1258 | _XXXXX__, 1259 | ________, 1260 | ________, 1261 | ________, 1262 | ________, 1263 | // 55 $37 'seven' 1264 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1265 | ________, 1266 | ________, 1267 | XXXXXXX_, 1268 | XX___XX_, 1269 | _____XX_, 1270 | _____XX_, 1271 | ____XX__, 1272 | ___XX___, 1273 | __XX____, 1274 | __XX____, 1275 | __XX____, 1276 | __XX____, 1277 | ________, 1278 | ________, 1279 | ________, 1280 | ________, 1281 | // 56 $38 'eight' 1282 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1283 | ________, 1284 | ________, 1285 | _XXXXX__, 1286 | XX___XX_, 1287 | XX___XX_, 1288 | XX___XX_, 1289 | _XXXXX__, 1290 | XX___XX_, 1291 | XX___XX_, 1292 | XX___XX_, 1293 | XX___XX_, 1294 | _XXXXX__, 1295 | ________, 1296 | ________, 1297 | ________, 1298 | ________, 1299 | // 57 $39 'nine' 1300 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1301 | ________, 1302 | ________, 1303 | _XXXXX__, 1304 | XX___XX_, 1305 | XX___XX_, 1306 | XX___XX_, 1307 | _XXXXXX_, 1308 | _____XX_, 1309 | _____XX_, 1310 | _____XX_, 1311 | ____XX__, 1312 | _XXXX___, 1313 | ________, 1314 | ________, 1315 | ________, 1316 | ________, 1317 | // 58 $3a 'colon' 1318 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1319 | ________, 1320 | ________, 1321 | ________, 1322 | ________, 1323 | ___XX___, 1324 | ___XX___, 1325 | ________, 1326 | ________, 1327 | ________, 1328 | ___XX___, 1329 | ___XX___, 1330 | ________, 1331 | ________, 1332 | ________, 1333 | ________, 1334 | ________, 1335 | // 59 $3b 'semicolon' 1336 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1337 | ________, 1338 | ________, 1339 | ________, 1340 | ________, 1341 | ___XX___, 1342 | ___XX___, 1343 | ________, 1344 | ________, 1345 | ________, 1346 | ___XX___, 1347 | ___XX___, 1348 | __XX____, 1349 | ________, 1350 | ________, 1351 | ________, 1352 | ________, 1353 | // 60 $3c 'less' 1354 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1355 | ________, 1356 | ________, 1357 | ________, 1358 | _____XX_, 1359 | ____XX__, 1360 | ___XX___, 1361 | __XX____, 1362 | _XX_____, 1363 | __XX____, 1364 | ___XX___, 1365 | ____XX__, 1366 | _____XX_, 1367 | ________, 1368 | ________, 1369 | ________, 1370 | ________, 1371 | // 61 $3d 'equal' 1372 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1373 | ________, 1374 | ________, 1375 | ________, 1376 | ________, 1377 | ________, 1378 | _XXXXXX_, 1379 | ________, 1380 | ________, 1381 | _XXXXXX_, 1382 | ________, 1383 | ________, 1384 | ________, 1385 | ________, 1386 | ________, 1387 | ________, 1388 | ________, 1389 | // 62 $3e 'greater' 1390 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1391 | ________, 1392 | ________, 1393 | ________, 1394 | _XX_____, 1395 | __XX____, 1396 | ___XX___, 1397 | ____XX__, 1398 | _____XX_, 1399 | ____XX__, 1400 | ___XX___, 1401 | __XX____, 1402 | _XX_____, 1403 | ________, 1404 | ________, 1405 | ________, 1406 | ________, 1407 | // 63 $3f 'question' 1408 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1409 | ________, 1410 | ________, 1411 | _XXXXX__, 1412 | XX___XX_, 1413 | XX___XX_, 1414 | ____XX__, 1415 | ___XX___, 1416 | ___XX___, 1417 | ___XX___, 1418 | ________, 1419 | ___XX___, 1420 | ___XX___, 1421 | ________, 1422 | ________, 1423 | ________, 1424 | ________, 1425 | // 64 $40 'at' 1426 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1427 | ________, 1428 | ________, 1429 | ________, 1430 | _XXXXX__, 1431 | XX___XX_, 1432 | XX___XX_, 1433 | XX_XXXX_, 1434 | XX_XXXX_, 1435 | XX_XXXX_, 1436 | XX_XXX__, 1437 | XX______, 1438 | _XXXXX__, 1439 | ________, 1440 | ________, 1441 | ________, 1442 | ________, 1443 | // 65 $41 'A' 1444 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1445 | ________, 1446 | ________, 1447 | ___X____, 1448 | __XXX___, 1449 | _XX_XX__, 1450 | XX___XX_, 1451 | XX___XX_, 1452 | XXXXXXX_, 1453 | XX___XX_, 1454 | XX___XX_, 1455 | XX___XX_, 1456 | XX___XX_, 1457 | ________, 1458 | ________, 1459 | ________, 1460 | ________, 1461 | // 66 $42 'B' 1462 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1463 | ________, 1464 | ________, 1465 | XXXXXX__, 1466 | _XX__XX_, 1467 | _XX__XX_, 1468 | _XX__XX_, 1469 | _XXXXX__, 1470 | _XX__XX_, 1471 | _XX__XX_, 1472 | _XX__XX_, 1473 | _XX__XX_, 1474 | XXXXXX__, 1475 | ________, 1476 | ________, 1477 | ________, 1478 | ________, 1479 | // 67 $43 'C' 1480 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1481 | ________, 1482 | ________, 1483 | __XXXX__, 1484 | _XX__XX_, 1485 | XX____X_, 1486 | XX______, 1487 | XX______, 1488 | XX______, 1489 | XX______, 1490 | XX____X_, 1491 | _XX__XX_, 1492 | __XXXX__, 1493 | ________, 1494 | ________, 1495 | ________, 1496 | ________, 1497 | // 68 $44 'D' 1498 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1499 | ________, 1500 | ________, 1501 | XXXXX___, 1502 | _XX_XX__, 1503 | _XX__XX_, 1504 | _XX__XX_, 1505 | _XX__XX_, 1506 | _XX__XX_, 1507 | _XX__XX_, 1508 | _XX__XX_, 1509 | _XX_XX__, 1510 | XXXXX___, 1511 | ________, 1512 | ________, 1513 | ________, 1514 | ________, 1515 | // 69 $45 'E' 1516 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1517 | ________, 1518 | ________, 1519 | XXXXXXX_, 1520 | _XX__XX_, 1521 | _XX___X_, 1522 | _XX_X___, 1523 | _XXXX___, 1524 | _XX_X___, 1525 | _XX_____, 1526 | _XX___X_, 1527 | _XX__XX_, 1528 | XXXXXXX_, 1529 | ________, 1530 | ________, 1531 | ________, 1532 | ________, 1533 | // 70 $46 'F' 1534 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1535 | ________, 1536 | ________, 1537 | XXXXXXX_, 1538 | _XX__XX_, 1539 | _XX___X_, 1540 | _XX_X___, 1541 | _XXXX___, 1542 | _XX_X___, 1543 | _XX_____, 1544 | _XX_____, 1545 | _XX_____, 1546 | XXXX____, 1547 | ________, 1548 | ________, 1549 | ________, 1550 | ________, 1551 | // 71 $47 'G' 1552 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1553 | ________, 1554 | ________, 1555 | __XXXX__, 1556 | _XX__XX_, 1557 | XX____X_, 1558 | XX______, 1559 | XX______, 1560 | XX_XXXX_, 1561 | XX___XX_, 1562 | XX___XX_, 1563 | _XX__XX_, 1564 | __XXX_X_, 1565 | ________, 1566 | ________, 1567 | ________, 1568 | ________, 1569 | // 72 $48 'H' 1570 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1571 | ________, 1572 | ________, 1573 | XX___XX_, 1574 | XX___XX_, 1575 | XX___XX_, 1576 | XX___XX_, 1577 | XXXXXXX_, 1578 | XX___XX_, 1579 | XX___XX_, 1580 | XX___XX_, 1581 | XX___XX_, 1582 | XX___XX_, 1583 | ________, 1584 | ________, 1585 | ________, 1586 | ________, 1587 | // 73 $49 'I' 1588 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1589 | ________, 1590 | ________, 1591 | __XXXX__, 1592 | ___XX___, 1593 | ___XX___, 1594 | ___XX___, 1595 | ___XX___, 1596 | ___XX___, 1597 | ___XX___, 1598 | ___XX___, 1599 | ___XX___, 1600 | __XXXX__, 1601 | ________, 1602 | ________, 1603 | ________, 1604 | ________, 1605 | // 74 $4a 'J' 1606 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1607 | ________, 1608 | ________, 1609 | ___XXXX_, 1610 | ____XX__, 1611 | ____XX__, 1612 | ____XX__, 1613 | ____XX__, 1614 | ____XX__, 1615 | XX__XX__, 1616 | XX__XX__, 1617 | XX__XX__, 1618 | _XXXX___, 1619 | ________, 1620 | ________, 1621 | ________, 1622 | ________, 1623 | // 75 $4b 'K' 1624 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1625 | ________, 1626 | ________, 1627 | XXX__XX_, 1628 | _XX__XX_, 1629 | _XX__XX_, 1630 | _XX_XX__, 1631 | _XXXX___, 1632 | _XXXX___, 1633 | _XX_XX__, 1634 | _XX__XX_, 1635 | _XX__XX_, 1636 | XXX__XX_, 1637 | ________, 1638 | ________, 1639 | ________, 1640 | ________, 1641 | // 76 $4c 'L' 1642 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1643 | ________, 1644 | ________, 1645 | XXXX____, 1646 | _XX_____, 1647 | _XX_____, 1648 | _XX_____, 1649 | _XX_____, 1650 | _XX_____, 1651 | _XX_____, 1652 | _XX___X_, 1653 | _XX__XX_, 1654 | XXXXXXX_, 1655 | ________, 1656 | ________, 1657 | ________, 1658 | ________, 1659 | // 77 $4d 'M' 1660 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1661 | ________, 1662 | ________, 1663 | XX___XX_, 1664 | XXX_XXX_, 1665 | XXXXXXX_, 1666 | XXXXXXX_, 1667 | XX_X_XX_, 1668 | XX___XX_, 1669 | XX___XX_, 1670 | XX___XX_, 1671 | XX___XX_, 1672 | XX___XX_, 1673 | ________, 1674 | ________, 1675 | ________, 1676 | ________, 1677 | // 78 $4e 'N' 1678 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1679 | ________, 1680 | ________, 1681 | XX___XX_, 1682 | XXX__XX_, 1683 | XXXX_XX_, 1684 | XXXXXXX_, 1685 | XX_XXXX_, 1686 | XX__XXX_, 1687 | XX___XX_, 1688 | XX___XX_, 1689 | XX___XX_, 1690 | XX___XX_, 1691 | ________, 1692 | ________, 1693 | ________, 1694 | ________, 1695 | // 79 $4f 'O' 1696 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1697 | ________, 1698 | ________, 1699 | _XXXXX__, 1700 | XX___XX_, 1701 | XX___XX_, 1702 | XX___XX_, 1703 | XX___XX_, 1704 | XX___XX_, 1705 | XX___XX_, 1706 | XX___XX_, 1707 | XX___XX_, 1708 | _XXXXX__, 1709 | ________, 1710 | ________, 1711 | ________, 1712 | ________, 1713 | // 80 $50 'P' 1714 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1715 | ________, 1716 | ________, 1717 | XXXXXX__, 1718 | _XX__XX_, 1719 | _XX__XX_, 1720 | _XX__XX_, 1721 | _XXXXX__, 1722 | _XX_____, 1723 | _XX_____, 1724 | _XX_____, 1725 | _XX_____, 1726 | XXXX____, 1727 | ________, 1728 | ________, 1729 | ________, 1730 | ________, 1731 | // 81 $51 'Q' 1732 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1733 | ________, 1734 | ________, 1735 | _XXXXX__, 1736 | XX___XX_, 1737 | XX___XX_, 1738 | XX___XX_, 1739 | XX___XX_, 1740 | XX___XX_, 1741 | XX___XX_, 1742 | XX_X_XX_, 1743 | XX_XXXX_, 1744 | _XXXXX__, 1745 | ____XX__, 1746 | ____XXX_, 1747 | ________, 1748 | ________, 1749 | // 82 $52 'R' 1750 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1751 | ________, 1752 | ________, 1753 | XXXXXX__, 1754 | _XX__XX_, 1755 | _XX__XX_, 1756 | _XX__XX_, 1757 | _XXXXX__, 1758 | _XX_XX__, 1759 | _XX__XX_, 1760 | _XX__XX_, 1761 | _XX__XX_, 1762 | XXX__XX_, 1763 | ________, 1764 | ________, 1765 | ________, 1766 | ________, 1767 | // 83 $53 'S' 1768 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1769 | ________, 1770 | ________, 1771 | _XXXXX__, 1772 | XX___XX_, 1773 | XX___XX_, 1774 | _XX_____, 1775 | __XXX___, 1776 | ____XX__, 1777 | _____XX_, 1778 | XX___XX_, 1779 | XX___XX_, 1780 | _XXXXX__, 1781 | ________, 1782 | ________, 1783 | ________, 1784 | ________, 1785 | // 84 $54 'T' 1786 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1787 | ________, 1788 | ________, 1789 | _XXXXXX_, 1790 | _XXXXXX_, 1791 | _X_XX_X_, 1792 | ___XX___, 1793 | ___XX___, 1794 | ___XX___, 1795 | ___XX___, 1796 | ___XX___, 1797 | ___XX___, 1798 | __XXXX__, 1799 | ________, 1800 | ________, 1801 | ________, 1802 | ________, 1803 | // 85 $55 'U' 1804 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1805 | ________, 1806 | ________, 1807 | XX___XX_, 1808 | XX___XX_, 1809 | XX___XX_, 1810 | XX___XX_, 1811 | XX___XX_, 1812 | XX___XX_, 1813 | XX___XX_, 1814 | XX___XX_, 1815 | XX___XX_, 1816 | _XXXXX__, 1817 | ________, 1818 | ________, 1819 | ________, 1820 | ________, 1821 | // 86 $56 'V' 1822 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1823 | ________, 1824 | ________, 1825 | XX___XX_, 1826 | XX___XX_, 1827 | XX___XX_, 1828 | XX___XX_, 1829 | XX___XX_, 1830 | XX___XX_, 1831 | XX___XX_, 1832 | _XX_XX__, 1833 | __XXX___, 1834 | ___X____, 1835 | ________, 1836 | ________, 1837 | ________, 1838 | ________, 1839 | // 87 $57 'W' 1840 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1841 | ________, 1842 | ________, 1843 | XX___XX_, 1844 | XX___XX_, 1845 | XX___XX_, 1846 | XX___XX_, 1847 | XX_X_XX_, 1848 | XX_X_XX_, 1849 | XX_X_XX_, 1850 | XXXXXXX_, 1851 | XXX_XXX_, 1852 | _XX_XX__, 1853 | ________, 1854 | ________, 1855 | ________, 1856 | ________, 1857 | // 88 $58 'X' 1858 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1859 | ________, 1860 | ________, 1861 | XX___XX_, 1862 | XX___XX_, 1863 | _XX_XX__, 1864 | _XXXXX__, 1865 | __XXX___, 1866 | __XXX___, 1867 | _XXXXX__, 1868 | _XX_XX__, 1869 | XX___XX_, 1870 | XX___XX_, 1871 | ________, 1872 | ________, 1873 | ________, 1874 | ________, 1875 | // 89 $59 'Y' 1876 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1877 | ________, 1878 | ________, 1879 | _XX__XX_, 1880 | _XX__XX_, 1881 | _XX__XX_, 1882 | _XX__XX_, 1883 | __XXXX__, 1884 | ___XX___, 1885 | ___XX___, 1886 | ___XX___, 1887 | ___XX___, 1888 | __XXXX__, 1889 | ________, 1890 | ________, 1891 | ________, 1892 | ________, 1893 | // 90 $5a 'Z' 1894 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1895 | ________, 1896 | ________, 1897 | XXXXXXX_, 1898 | XX___XX_, 1899 | X____XX_, 1900 | ____XX__, 1901 | ___XX___, 1902 | __XX____, 1903 | _XX_____, 1904 | XX____X_, 1905 | XX___XX_, 1906 | XXXXXXX_, 1907 | ________, 1908 | ________, 1909 | ________, 1910 | ________, 1911 | // 91 $5b 'bracketleft' 1912 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1913 | ________, 1914 | ________, 1915 | __XXXX__, 1916 | __XX____, 1917 | __XX____, 1918 | __XX____, 1919 | __XX____, 1920 | __XX____, 1921 | __XX____, 1922 | __XX____, 1923 | __XX____, 1924 | __XXXX__, 1925 | ________, 1926 | ________, 1927 | ________, 1928 | ________, 1929 | // 92 $5c 'backslash' 1930 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1931 | ________, 1932 | ________, 1933 | ________, 1934 | X_______, 1935 | XX______, 1936 | XXX_____, 1937 | _XXX____, 1938 | __XXX___, 1939 | ___XXX__, 1940 | ____XXX_, 1941 | _____XX_, 1942 | ______X_, 1943 | ________, 1944 | ________, 1945 | ________, 1946 | ________, 1947 | // 93 $5d 'bracketright' 1948 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1949 | ________, 1950 | ________, 1951 | __XXXX__, 1952 | ____XX__, 1953 | ____XX__, 1954 | ____XX__, 1955 | ____XX__, 1956 | ____XX__, 1957 | ____XX__, 1958 | ____XX__, 1959 | ____XX__, 1960 | __XXXX__, 1961 | ________, 1962 | ________, 1963 | ________, 1964 | ________, 1965 | // 94 $5e 'asciicircum' 1966 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1967 | ___X____, 1968 | __XXX___, 1969 | _XX_XX__, 1970 | XX___XX_, 1971 | ________, 1972 | ________, 1973 | ________, 1974 | ________, 1975 | ________, 1976 | ________, 1977 | ________, 1978 | ________, 1979 | ________, 1980 | ________, 1981 | ________, 1982 | ________, 1983 | // 95 $5f 'underscore' 1984 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 1985 | ________, 1986 | ________, 1987 | ________, 1988 | ________, 1989 | ________, 1990 | ________, 1991 | ________, 1992 | ________, 1993 | ________, 1994 | ________, 1995 | ________, 1996 | ________, 1997 | ________, 1998 | XXXXXXXX, 1999 | ________, 2000 | ________, 2001 | // 96 $60 'grave' 2002 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2003 | __XX____, 2004 | __XX____, 2005 | ___XX___, 2006 | ________, 2007 | ________, 2008 | ________, 2009 | ________, 2010 | ________, 2011 | ________, 2012 | ________, 2013 | ________, 2014 | ________, 2015 | ________, 2016 | ________, 2017 | ________, 2018 | ________, 2019 | // 97 $61 'a' 2020 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2021 | ________, 2022 | ________, 2023 | ________, 2024 | ________, 2025 | ________, 2026 | _XXXX___, 2027 | ____XX__, 2028 | _XXXXX__, 2029 | XX__XX__, 2030 | XX__XX__, 2031 | XX__XX__, 2032 | _XXX_XX_, 2033 | ________, 2034 | ________, 2035 | ________, 2036 | ________, 2037 | // 98 $62 'b' 2038 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2039 | ________, 2040 | ________, 2041 | XXX_____, 2042 | _XX_____, 2043 | _XX_____, 2044 | _XXXX___, 2045 | _XX_XX__, 2046 | _XX__XX_, 2047 | _XX__XX_, 2048 | _XX__XX_, 2049 | _XX__XX_, 2050 | _XXXXX__, 2051 | ________, 2052 | ________, 2053 | ________, 2054 | ________, 2055 | // 99 $63 'c' 2056 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2057 | ________, 2058 | ________, 2059 | ________, 2060 | ________, 2061 | ________, 2062 | _XXXXX__, 2063 | XX___XX_, 2064 | XX______, 2065 | XX______, 2066 | XX______, 2067 | XX___XX_, 2068 | _XXXXX__, 2069 | ________, 2070 | ________, 2071 | ________, 2072 | ________, 2073 | // 100 $64 'd' 2074 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2075 | ________, 2076 | ________, 2077 | ___XXX__, 2078 | ____XX__, 2079 | ____XX__, 2080 | __XXXX__, 2081 | _XX_XX__, 2082 | XX__XX__, 2083 | XX__XX__, 2084 | XX__XX__, 2085 | XX__XX__, 2086 | _XXX_XX_, 2087 | ________, 2088 | ________, 2089 | ________, 2090 | ________, 2091 | // 101 $65 'e' 2092 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2093 | ________, 2094 | ________, 2095 | ________, 2096 | ________, 2097 | ________, 2098 | _XXXXX__, 2099 | XX___XX_, 2100 | XXXXXXX_, 2101 | XX______, 2102 | XX______, 2103 | XX___XX_, 2104 | _XXXXX__, 2105 | ________, 2106 | ________, 2107 | ________, 2108 | ________, 2109 | // 102 $66 'f' 2110 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2111 | ________, 2112 | ________, 2113 | __XXX___, 2114 | _XX_XX__, 2115 | _XX__X__, 2116 | _XX_____, 2117 | XXXX____, 2118 | _XX_____, 2119 | _XX_____, 2120 | _XX_____, 2121 | _XX_____, 2122 | XXXX____, 2123 | ________, 2124 | ________, 2125 | ________, 2126 | ________, 2127 | // 103 $67 'g' 2128 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2129 | ________, 2130 | ________, 2131 | ________, 2132 | ________, 2133 | ________, 2134 | _XXX_XX_, 2135 | XX__XX__, 2136 | XX__XX__, 2137 | XX__XX__, 2138 | XX__XX__, 2139 | XX__XX__, 2140 | _XXXXX__, 2141 | ____XX__, 2142 | XX__XX__, 2143 | _XXXX___, 2144 | ________, 2145 | // 104 $68 'h' 2146 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2147 | ________, 2148 | ________, 2149 | XXX_____, 2150 | _XX_____, 2151 | _XX_____, 2152 | _XX_XX__, 2153 | _XXX_XX_, 2154 | _XX__XX_, 2155 | _XX__XX_, 2156 | _XX__XX_, 2157 | _XX__XX_, 2158 | XXX__XX_, 2159 | ________, 2160 | ________, 2161 | ________, 2162 | ________, 2163 | // 105 $69 'i' 2164 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2165 | ________, 2166 | ________, 2167 | ___XX___, 2168 | ___XX___, 2169 | ________, 2170 | __XXX___, 2171 | ___XX___, 2172 | ___XX___, 2173 | ___XX___, 2174 | ___XX___, 2175 | ___XX___, 2176 | __XXXX__, 2177 | ________, 2178 | ________, 2179 | ________, 2180 | ________, 2181 | // 106 $6a 'j' 2182 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2183 | ________, 2184 | ________, 2185 | _____XX_, 2186 | _____XX_, 2187 | ________, 2188 | ____XXX_, 2189 | _____XX_, 2190 | _____XX_, 2191 | _____XX_, 2192 | _____XX_, 2193 | _____XX_, 2194 | _____XX_, 2195 | _XX__XX_, 2196 | _XX__XX_, 2197 | __XXXX__, 2198 | ________, 2199 | // 107 $6b 'k' 2200 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2201 | ________, 2202 | ________, 2203 | XXX_____, 2204 | _XX_____, 2205 | _XX_____, 2206 | _XX__XX_, 2207 | _XX_XX__, 2208 | _XXXX___, 2209 | _XXXX___, 2210 | _XX_XX__, 2211 | _XX__XX_, 2212 | XXX__XX_, 2213 | ________, 2214 | ________, 2215 | ________, 2216 | ________, 2217 | // 108 $6c 'l' 2218 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2219 | ________, 2220 | ________, 2221 | __XXX___, 2222 | ___XX___, 2223 | ___XX___, 2224 | ___XX___, 2225 | ___XX___, 2226 | ___XX___, 2227 | ___XX___, 2228 | ___XX___, 2229 | ___XX___, 2230 | __XXXX__, 2231 | ________, 2232 | ________, 2233 | ________, 2234 | ________, 2235 | // 109 $6d 'm' 2236 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2237 | ________, 2238 | ________, 2239 | ________, 2240 | ________, 2241 | ________, 2242 | XXX_XX__, 2243 | XXXXXXX_, 2244 | XX_X_XX_, 2245 | XX_X_XX_, 2246 | XX_X_XX_, 2247 | XX_X_XX_, 2248 | XX___XX_, 2249 | ________, 2250 | ________, 2251 | ________, 2252 | ________, 2253 | // 110 $6e 'n' 2254 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2255 | ________, 2256 | ________, 2257 | ________, 2258 | ________, 2259 | ________, 2260 | XX_XXX__, 2261 | _XX__XX_, 2262 | _XX__XX_, 2263 | _XX__XX_, 2264 | _XX__XX_, 2265 | _XX__XX_, 2266 | _XX__XX_, 2267 | ________, 2268 | ________, 2269 | ________, 2270 | ________, 2271 | // 111 $6f 'o' 2272 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2273 | ________, 2274 | ________, 2275 | ________, 2276 | ________, 2277 | ________, 2278 | _XXXXX__, 2279 | XX___XX_, 2280 | XX___XX_, 2281 | XX___XX_, 2282 | XX___XX_, 2283 | XX___XX_, 2284 | _XXXXX__, 2285 | ________, 2286 | ________, 2287 | ________, 2288 | ________, 2289 | // 112 $70 'p' 2290 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2291 | ________, 2292 | ________, 2293 | ________, 2294 | ________, 2295 | ________, 2296 | XX_XXX__, 2297 | _XX__XX_, 2298 | _XX__XX_, 2299 | _XX__XX_, 2300 | _XX__XX_, 2301 | _XX__XX_, 2302 | _XXXXX__, 2303 | _XX_____, 2304 | _XX_____, 2305 | XXXX____, 2306 | ________, 2307 | // 113 $71 'q' 2308 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2309 | ________, 2310 | ________, 2311 | ________, 2312 | ________, 2313 | ________, 2314 | _XXX_XX_, 2315 | XX__XX__, 2316 | XX__XX__, 2317 | XX__XX__, 2318 | XX__XX__, 2319 | XX__XX__, 2320 | _XXXXX__, 2321 | ____XX__, 2322 | ____XX__, 2323 | ___XXXX_, 2324 | ________, 2325 | // 114 $72 'r' 2326 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2327 | ________, 2328 | ________, 2329 | ________, 2330 | ________, 2331 | ________, 2332 | XX_XXX__, 2333 | _XXX_XX_, 2334 | _XX__XX_, 2335 | _XX_____, 2336 | _XX_____, 2337 | _XX_____, 2338 | XXXX____, 2339 | ________, 2340 | ________, 2341 | ________, 2342 | ________, 2343 | // 115 $73 's' 2344 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2345 | ________, 2346 | ________, 2347 | ________, 2348 | ________, 2349 | ________, 2350 | _XXXXX__, 2351 | XX___XX_, 2352 | _XX_____, 2353 | __XXX___, 2354 | ____XX__, 2355 | XX___XX_, 2356 | _XXXXX__, 2357 | ________, 2358 | ________, 2359 | ________, 2360 | ________, 2361 | // 116 $74 't' 2362 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2363 | ________, 2364 | ________, 2365 | ___X____, 2366 | __XX____, 2367 | __XX____, 2368 | XXXXXX__, 2369 | __XX____, 2370 | __XX____, 2371 | __XX____, 2372 | __XX____, 2373 | __XX_XX_, 2374 | ___XXX__, 2375 | ________, 2376 | ________, 2377 | ________, 2378 | ________, 2379 | // 117 $75 'u' 2380 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2381 | ________, 2382 | ________, 2383 | ________, 2384 | ________, 2385 | ________, 2386 | XX__XX__, 2387 | XX__XX__, 2388 | XX__XX__, 2389 | XX__XX__, 2390 | XX__XX__, 2391 | XX__XX__, 2392 | _XXX_XX_, 2393 | ________, 2394 | ________, 2395 | ________, 2396 | ________, 2397 | // 118 $76 'v' 2398 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2399 | ________, 2400 | ________, 2401 | ________, 2402 | ________, 2403 | ________, 2404 | _XX__XX_, 2405 | _XX__XX_, 2406 | _XX__XX_, 2407 | _XX__XX_, 2408 | _XX__XX_, 2409 | __XXXX__, 2410 | ___XX___, 2411 | ________, 2412 | ________, 2413 | ________, 2414 | ________, 2415 | // 119 $77 'w' 2416 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2417 | ________, 2418 | ________, 2419 | ________, 2420 | ________, 2421 | ________, 2422 | XX___XX_, 2423 | XX___XX_, 2424 | XX_X_XX_, 2425 | XX_X_XX_, 2426 | XX_X_XX_, 2427 | XXXXXXX_, 2428 | _XX_XX__, 2429 | ________, 2430 | ________, 2431 | ________, 2432 | ________, 2433 | // 120 $78 'x' 2434 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2435 | ________, 2436 | ________, 2437 | ________, 2438 | ________, 2439 | ________, 2440 | XX___XX_, 2441 | _XX_XX__, 2442 | __XXX___, 2443 | __XXX___, 2444 | __XXX___, 2445 | _XX_XX__, 2446 | XX___XX_, 2447 | ________, 2448 | ________, 2449 | ________, 2450 | ________, 2451 | // 121 $79 'y' 2452 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2453 | ________, 2454 | ________, 2455 | ________, 2456 | ________, 2457 | ________, 2458 | XX___XX_, 2459 | XX___XX_, 2460 | XX___XX_, 2461 | XX___XX_, 2462 | XX___XX_, 2463 | XX___XX_, 2464 | _XXXXXX_, 2465 | _____XX_, 2466 | ____XX__, 2467 | XXXXX___, 2468 | ________, 2469 | // 122 $7a 'z' 2470 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2471 | ________, 2472 | ________, 2473 | ________, 2474 | ________, 2475 | ________, 2476 | XXXXXXX_, 2477 | XX__XX__, 2478 | ___XX___, 2479 | __XX____, 2480 | _XX_____, 2481 | XX___XX_, 2482 | XXXXXXX_, 2483 | ________, 2484 | ________, 2485 | ________, 2486 | ________, 2487 | // 123 $7b 'braceleft' 2488 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2489 | ________, 2490 | ________, 2491 | ____XXX_, 2492 | ___XX___, 2493 | ___XX___, 2494 | ___XX___, 2495 | _XXX____, 2496 | ___XX___, 2497 | ___XX___, 2498 | ___XX___, 2499 | ___XX___, 2500 | ____XXX_, 2501 | ________, 2502 | ________, 2503 | ________, 2504 | ________, 2505 | // 124 $7c 'bar' 2506 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2507 | ________, 2508 | ________, 2509 | ___XX___, 2510 | ___XX___, 2511 | ___XX___, 2512 | ___XX___, 2513 | ________, 2514 | ___XX___, 2515 | ___XX___, 2516 | ___XX___, 2517 | ___XX___, 2518 | ___XX___, 2519 | ________, 2520 | ________, 2521 | ________, 2522 | ________, 2523 | // 125 $7d 'braceright' 2524 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2525 | ________, 2526 | ________, 2527 | _XXX____, 2528 | ___XX___, 2529 | ___XX___, 2530 | ___XX___, 2531 | ____XXX_, 2532 | ___XX___, 2533 | ___XX___, 2534 | ___XX___, 2535 | ___XX___, 2536 | _XXX____, 2537 | ________, 2538 | ________, 2539 | ________, 2540 | ________, 2541 | // 126 $7e 'asciitilde' 2542 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2543 | ________, 2544 | ________, 2545 | _XXX_XX_, 2546 | XX_XXX__, 2547 | ________, 2548 | ________, 2549 | ________, 2550 | ________, 2551 | ________, 2552 | ________, 2553 | ________, 2554 | ________, 2555 | ________, 2556 | ________, 2557 | ________, 2558 | ________, 2559 | // 127 $7f 'char127' 2560 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2561 | ________, 2562 | ________, 2563 | ________, 2564 | ________, 2565 | ___X____, 2566 | __XXX___, 2567 | _XX_XX__, 2568 | XX___XX_, 2569 | XX___XX_, 2570 | XX___XX_, 2571 | XXXXXXX_, 2572 | ________, 2573 | ________, 2574 | ________, 2575 | ________, 2576 | ________, 2577 | // 160 $a0 'space' 2578 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2579 | ________, 2580 | ________, 2581 | ________, 2582 | ________, 2583 | ________, 2584 | ________, 2585 | ________, 2586 | ________, 2587 | ________, 2588 | ________, 2589 | ________, 2590 | ________, 2591 | ________, 2592 | ________, 2593 | ________, 2594 | ________, 2595 | // 161 $a1 'exclamdown' 2596 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2597 | ________, 2598 | ________, 2599 | ___XX___, 2600 | ___XX___, 2601 | ________, 2602 | ___XX___, 2603 | ___XX___, 2604 | ___XX___, 2605 | __XXXX__, 2606 | __XXXX__, 2607 | __XXXX__, 2608 | ___XX___, 2609 | ________, 2610 | ________, 2611 | ________, 2612 | ________, 2613 | // 162 $a2 'cent' 2614 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2615 | ________, 2616 | ___XX___, 2617 | ___XX___, 2618 | __XXXX__, 2619 | _XX__XX_, 2620 | _XX_____, 2621 | _XX_____, 2622 | _XX_____, 2623 | _XX__XX_, 2624 | __XXXX__, 2625 | ___XX___, 2626 | ___XX___, 2627 | ________, 2628 | ________, 2629 | ________, 2630 | ________, 2631 | // 163 $a3 'sterling' 2632 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2633 | ________, 2634 | __XXX___, 2635 | _XX_XX__, 2636 | _XX__X__, 2637 | _XX_____, 2638 | XXXX____, 2639 | _XX_____, 2640 | _XX_____, 2641 | _XX_____, 2642 | _XX_____, 2643 | XXX__XX_, 2644 | XXXXXX__, 2645 | ________, 2646 | ________, 2647 | ________, 2648 | ________, 2649 | // 164 $a4 'currency' 2650 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2651 | ________, 2652 | ________, 2653 | ________, 2654 | ________, 2655 | _XX__XX_, 2656 | __XXXX__, 2657 | _XX__XX_, 2658 | _XX__XX_, 2659 | _XX__XX_, 2660 | __XXXX__, 2661 | _XX__XX_, 2662 | ________, 2663 | ________, 2664 | ________, 2665 | ________, 2666 | ________, 2667 | // 165 $a5 'yen' 2668 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2669 | ________, 2670 | ________, 2671 | _XX__XX_, 2672 | _XX__XX_, 2673 | __XXXX__, 2674 | ___XX___, 2675 | _XXXXXX_, 2676 | ___XX___, 2677 | _XXXXXX_, 2678 | ___XX___, 2679 | ___XX___, 2680 | ___XX___, 2681 | ________, 2682 | ________, 2683 | ________, 2684 | ________, 2685 | // 166 $a6 'brokenbar' 2686 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2687 | ________, 2688 | ________, 2689 | ___XX___, 2690 | ___XX___, 2691 | ___XX___, 2692 | ___XX___, 2693 | ________, 2694 | ___XX___, 2695 | ___XX___, 2696 | ___XX___, 2697 | ___XX___, 2698 | ___XX___, 2699 | ________, 2700 | ________, 2701 | ________, 2702 | ________, 2703 | // 167 $a7 'section' 2704 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2705 | ________, 2706 | _XXXXX__, 2707 | XX___XX_, 2708 | _XX_____, 2709 | __XXX___, 2710 | _XX_XX__, 2711 | XX___XX_, 2712 | XX___XX_, 2713 | _XX_XX__, 2714 | __XXX___, 2715 | ____XX__, 2716 | XX___XX_, 2717 | _XXXXX__, 2718 | ________, 2719 | ________, 2720 | ________, 2721 | // 168 $a8 'dieresis' 2722 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2723 | ________, 2724 | ________, 2725 | _XX_XX__, 2726 | _XX_XX__, 2727 | ________, 2728 | ________, 2729 | ________, 2730 | ________, 2731 | ________, 2732 | ________, 2733 | ________, 2734 | ________, 2735 | ________, 2736 | ________, 2737 | ________, 2738 | ________, 2739 | // 169 $a9 'copyright' 2740 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2741 | ________, 2742 | ________, 2743 | __XXXX__, 2744 | _X____X_, 2745 | X__XX__X, 2746 | X_X__X_X, 2747 | X_X____X, 2748 | X_X____X, 2749 | X_X__X_X, 2750 | X__XX__X, 2751 | _X____X_, 2752 | __XXXX__, 2753 | ________, 2754 | ________, 2755 | ________, 2756 | ________, 2757 | // 170 $aa 'ordfeminine' 2758 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2759 | ________, 2760 | __XXXX__, 2761 | _XX_XX__, 2762 | _XX_XX__, 2763 | __XXXXX_, 2764 | ________, 2765 | _XXXXXX_, 2766 | ________, 2767 | ________, 2768 | ________, 2769 | ________, 2770 | ________, 2771 | ________, 2772 | ________, 2773 | ________, 2774 | ________, 2775 | // 171 $ab 'guillemotleft' 2776 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2777 | ________, 2778 | ________, 2779 | ________, 2780 | ________, 2781 | ________, 2782 | __XX_XX_, 2783 | _XX_XX__, 2784 | XX_XX___, 2785 | _XX_XX__, 2786 | __XX_XX_, 2787 | ________, 2788 | ________, 2789 | ________, 2790 | ________, 2791 | ________, 2792 | ________, 2793 | // 172 $ac 'logicalnot' 2794 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2795 | ________, 2796 | ________, 2797 | ________, 2798 | ________, 2799 | ________, 2800 | ________, 2801 | XXXXXXX_, 2802 | _____XX_, 2803 | _____XX_, 2804 | _____XX_, 2805 | _____XX_, 2806 | ________, 2807 | ________, 2808 | ________, 2809 | ________, 2810 | ________, 2811 | // 173 $ad 'hyphen' 2812 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2813 | ________, 2814 | ________, 2815 | ________, 2816 | ________, 2817 | ________, 2818 | ________, 2819 | ________, 2820 | __XXXX__, 2821 | ________, 2822 | ________, 2823 | ________, 2824 | ________, 2825 | ________, 2826 | ________, 2827 | ________, 2828 | ________, 2829 | // 174 $ae 'registered' 2830 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2831 | ________, 2832 | ________, 2833 | __XXX___, 2834 | _X___X__, 2835 | X_XXX_X_, 2836 | X_XX__X_, 2837 | X_X_X_X_, 2838 | _X___X__, 2839 | __XXX___, 2840 | ________, 2841 | ________, 2842 | ________, 2843 | ________, 2844 | ________, 2845 | ________, 2846 | ________, 2847 | // 175 $af 'macron' 2848 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2849 | ________, 2850 | ________, 2851 | ________, 2852 | _XXXXX__, 2853 | ________, 2854 | ________, 2855 | ________, 2856 | ________, 2857 | ________, 2858 | ________, 2859 | ________, 2860 | ________, 2861 | ________, 2862 | ________, 2863 | ________, 2864 | ________, 2865 | // 176 $b0 'degree' 2866 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2867 | ________, 2868 | __XXX___, 2869 | _XX_XX__, 2870 | _XX_XX__, 2871 | __XXX___, 2872 | ________, 2873 | ________, 2874 | ________, 2875 | ________, 2876 | ________, 2877 | ________, 2878 | ________, 2879 | ________, 2880 | ________, 2881 | ________, 2882 | ________, 2883 | // 177 $b1 'plusminus' 2884 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2885 | ________, 2886 | ________, 2887 | ________, 2888 | ________, 2889 | ___XX___, 2890 | ___XX___, 2891 | _XXXXXX_, 2892 | ___XX___, 2893 | ___XX___, 2894 | ________, 2895 | _XXXXXX_, 2896 | ________, 2897 | ________, 2898 | ________, 2899 | ________, 2900 | ________, 2901 | // 178 $b2 'twosuperior' 2902 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2903 | ________, 2904 | _XXX____, 2905 | XX_XX___, 2906 | __XX____, 2907 | _XX_____, 2908 | XX__X___, 2909 | XXXXX___, 2910 | ________, 2911 | ________, 2912 | ________, 2913 | ________, 2914 | ________, 2915 | ________, 2916 | ________, 2917 | ________, 2918 | ________, 2919 | // 179 $b3 'threesuperior' 2920 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2921 | ________, 2922 | _XXX____, 2923 | XX_XX___, 2924 | __XX____, 2925 | ___XX___, 2926 | XX_XX___, 2927 | _XXX____, 2928 | ________, 2929 | ________, 2930 | ________, 2931 | ________, 2932 | ________, 2933 | ________, 2934 | ________, 2935 | ________, 2936 | ________, 2937 | // 180 $b4 'acute' 2938 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2939 | ________, 2940 | ________, 2941 | ____XX__, 2942 | ___XX___, 2943 | ________, 2944 | ________, 2945 | ________, 2946 | ________, 2947 | ________, 2948 | ________, 2949 | ________, 2950 | ________, 2951 | ________, 2952 | ________, 2953 | ________, 2954 | ________, 2955 | // 181 $b5 'mu' 2956 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2957 | ________, 2958 | ________, 2959 | ________, 2960 | ________, 2961 | ________, 2962 | XX__XX__, 2963 | XX__XX__, 2964 | XX__XX__, 2965 | XX__XX__, 2966 | XX__XX__, 2967 | XX__XX__, 2968 | XXXX_XX_, 2969 | XX______, 2970 | XX______, 2971 | XX______, 2972 | ________, 2973 | // 182 $b6 'paragraph' 2974 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2975 | ________, 2976 | ________, 2977 | _XXXXXXX, 2978 | XX_XX_XX, 2979 | XX_XX_XX, 2980 | XX_XX_XX, 2981 | _XXXX_XX, 2982 | ___XX_XX, 2983 | ___XX_XX, 2984 | ___XX_XX, 2985 | ___XX_XX, 2986 | ___XX_XX, 2987 | ________, 2988 | ________, 2989 | ________, 2990 | ________, 2991 | // 183 $b7 'periodcentered' 2992 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 2993 | ________, 2994 | ________, 2995 | ________, 2996 | ________, 2997 | ________, 2998 | ________, 2999 | ________, 3000 | ________, 3001 | ___XX___, 3002 | ________, 3003 | ________, 3004 | ________, 3005 | ________, 3006 | ________, 3007 | ________, 3008 | ________, 3009 | // 184 $b8 'cedilla' 3010 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3011 | ________, 3012 | ________, 3013 | ________, 3014 | ________, 3015 | ________, 3016 | ________, 3017 | ________, 3018 | ________, 3019 | ________, 3020 | ________, 3021 | ________, 3022 | ________, 3023 | ___XX___, 3024 | ____XX__, 3025 | __XXX___, 3026 | ________, 3027 | // 185 $b9 'onesuperior' 3028 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3029 | ________, 3030 | __XX____, 3031 | _XXX____, 3032 | __XX____, 3033 | __XX____, 3034 | __XX____, 3035 | _XXXX___, 3036 | ________, 3037 | ________, 3038 | ________, 3039 | ________, 3040 | ________, 3041 | ________, 3042 | ________, 3043 | ________, 3044 | ________, 3045 | // 186 $ba 'ordmasculine' 3046 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3047 | ________, 3048 | __XXX___, 3049 | _XX_XX__, 3050 | _XX_XX__, 3051 | __XXX___, 3052 | ________, 3053 | _XXXXX__, 3054 | ________, 3055 | ________, 3056 | ________, 3057 | ________, 3058 | ________, 3059 | ________, 3060 | ________, 3061 | ________, 3062 | ________, 3063 | // 187 $bb 'guillemotright' 3064 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3065 | ________, 3066 | ________, 3067 | ________, 3068 | ________, 3069 | ________, 3070 | XX_XX___, 3071 | _XX_XX__, 3072 | __XX_XX_, 3073 | _XX_XX__, 3074 | XX_XX___, 3075 | ________, 3076 | ________, 3077 | ________, 3078 | ________, 3079 | ________, 3080 | ________, 3081 | // 188 $bc 'onequarter' 3082 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3083 | ________, 3084 | XX______, 3085 | XX______, 3086 | XX____X_, 3087 | XX___XX_, 3088 | XX__XX__, 3089 | ___XX___, 3090 | __XX____, 3091 | _XX__XX_, 3092 | XX__XXX_, 3093 | X__XXXX_, 3094 | __XXXXX_, 3095 | _____XX_, 3096 | _____XX_, 3097 | ________, 3098 | ________, 3099 | // 189 $bd 'onehalf' 3100 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3101 | ________, 3102 | XX______, 3103 | XX______, 3104 | XX____X_, 3105 | XX___XX_, 3106 | XX__XX__, 3107 | ___XX___, 3108 | __XX____, 3109 | _XX_____, 3110 | XX_XXX__, 3111 | X____XX_, 3112 | ____XX__, 3113 | ___XX___, 3114 | __XXXXX_, 3115 | ________, 3116 | ________, 3117 | // 190 $be 'threequarters' 3118 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3119 | ________, 3120 | XXX_____, 3121 | __XX____, 3122 | _XX___X_, 3123 | __XX_XX_, 3124 | XXX_XX__, 3125 | ___XX___, 3126 | __XX____, 3127 | _XX__XX_, 3128 | XX__XXX_, 3129 | X__XXXX_, 3130 | __XXXXX_, 3131 | _____XX_, 3132 | _____XX_, 3133 | ________, 3134 | ________, 3135 | // 191 $bf 'questiondown' 3136 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3137 | ________, 3138 | ________, 3139 | __XX____, 3140 | __XX____, 3141 | ________, 3142 | __XX____, 3143 | __XX____, 3144 | _XX_____, 3145 | XX______, 3146 | XX___XX_, 3147 | XX___XX_, 3148 | _XXXXX__, 3149 | ________, 3150 | ________, 3151 | ________, 3152 | ________, 3153 | // 192 $c0 'Agrave' 3154 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3155 | _XX_____, 3156 | __XX____, 3157 | ________, 3158 | ___X____, 3159 | __XXX___, 3160 | _XX_XX__, 3161 | XX___XX_, 3162 | XX___XX_, 3163 | XXXXXXX_, 3164 | XX___XX_, 3165 | XX___XX_, 3166 | XX___XX_, 3167 | ________, 3168 | ________, 3169 | ________, 3170 | ________, 3171 | // 193 $c1 'Aacute' 3172 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3173 | ____XX__, 3174 | ___XX___, 3175 | ________, 3176 | ___X____, 3177 | __XXX___, 3178 | _XX_XX__, 3179 | XX___XX_, 3180 | XX___XX_, 3181 | XXXXXXX_, 3182 | XX___XX_, 3183 | XX___XX_, 3184 | XX___XX_, 3185 | ________, 3186 | ________, 3187 | ________, 3188 | ________, 3189 | // 194 $c2 'Acircumflex' 3190 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3191 | ___X____, 3192 | __XXX___, 3193 | _XX_XX__, 3194 | ___X____, 3195 | __XXX___, 3196 | _XX_XX__, 3197 | XX___XX_, 3198 | XX___XX_, 3199 | XXXXXXX_, 3200 | XX___XX_, 3201 | XX___XX_, 3202 | XX___XX_, 3203 | ________, 3204 | ________, 3205 | ________, 3206 | ________, 3207 | // 195 $c3 'Atilde' 3208 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3209 | _XXX_XX_, 3210 | XX_XXX__, 3211 | ________, 3212 | ___X____, 3213 | __XXX___, 3214 | _XX_XX__, 3215 | XX___XX_, 3216 | XX___XX_, 3217 | XXXXXXX_, 3218 | XX___XX_, 3219 | XX___XX_, 3220 | XX___XX_, 3221 | ________, 3222 | ________, 3223 | ________, 3224 | ________, 3225 | // 196 $c4 'Adieresis' 3226 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3227 | _XX_XX__, 3228 | _XX_XX__, 3229 | ________, 3230 | ___X____, 3231 | __XXX___, 3232 | _XX_XX__, 3233 | XX___XX_, 3234 | XX___XX_, 3235 | XXXXXXX_, 3236 | XX___XX_, 3237 | XX___XX_, 3238 | XX___XX_, 3239 | ________, 3240 | ________, 3241 | ________, 3242 | ________, 3243 | // 197 $c5 'Aring' 3244 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3245 | __XXX___, 3246 | _XX_XX__, 3247 | __XXX___, 3248 | ___X____, 3249 | __XXX___, 3250 | _XX_XX__, 3251 | XX___XX_, 3252 | XX___XX_, 3253 | XXXXXXX_, 3254 | XX___XX_, 3255 | XX___XX_, 3256 | XX___XX_, 3257 | ________, 3258 | ________, 3259 | ________, 3260 | ________, 3261 | // 198 $c6 'AE' 3262 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3263 | ________, 3264 | ________, 3265 | __XXXXX_, 3266 | _XX_XX__, 3267 | XX__XX__, 3268 | XX__XX__, 3269 | XXXXXXX_, 3270 | XX__XX__, 3271 | XX__XX__, 3272 | XX__XX__, 3273 | XX__XX__, 3274 | XX__XXX_, 3275 | ________, 3276 | ________, 3277 | ________, 3278 | ________, 3279 | // 199 $c7 'Ccedilla' 3280 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3281 | ________, 3282 | ________, 3283 | __XXXX__, 3284 | _XX__XX_, 3285 | XX____X_, 3286 | XX______, 3287 | XX______, 3288 | XX______, 3289 | XX______, 3290 | XX____X_, 3291 | _XX__XX_, 3292 | __XXXX__, 3293 | ___XX___, 3294 | ____XX__, 3295 | __XXX___, 3296 | ________, 3297 | // 200 $c8 'Egrave' 3298 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3299 | __XX____, 3300 | ___XX___, 3301 | ________, 3302 | XXXXXXX_, 3303 | _XX__XX_, 3304 | _XX___X_, 3305 | _XX_X___, 3306 | _XXXX___, 3307 | _XX_X___, 3308 | _XX___X_, 3309 | _XX__XX_, 3310 | XXXXXXX_, 3311 | ________, 3312 | ________, 3313 | ________, 3314 | ________, 3315 | // 201 $c9 'Eacute' 3316 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3317 | ____XX__, 3318 | ___XX___, 3319 | ________, 3320 | XXXXXXX_, 3321 | _XX__XX_, 3322 | _XX___X_, 3323 | _XX_X___, 3324 | _XXXX___, 3325 | _XX_X___, 3326 | _XX___X_, 3327 | _XX__XX_, 3328 | XXXXXXX_, 3329 | ________, 3330 | ________, 3331 | ________, 3332 | ________, 3333 | // 202 $ca 'Ecircumflex' 3334 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3335 | ___X____, 3336 | __XXX___, 3337 | _X___X__, 3338 | XXXXXXX_, 3339 | _XX__XX_, 3340 | _XX___X_, 3341 | _XX_X___, 3342 | _XXXX___, 3343 | _XX_X___, 3344 | _XX___X_, 3345 | _XX__XX_, 3346 | XXXXXXX_, 3347 | ________, 3348 | ________, 3349 | ________, 3350 | ________, 3351 | // 203 $cb 'Edieresis' 3352 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3353 | _XX_XX__, 3354 | _XX_XX__, 3355 | ________, 3356 | XXXXXXX_, 3357 | _XX__XX_, 3358 | _XX___X_, 3359 | _XX_X___, 3360 | _XXXX___, 3361 | _XX_X___, 3362 | _XX___X_, 3363 | _XX__XX_, 3364 | XXXXXXX_, 3365 | ________, 3366 | ________, 3367 | ________, 3368 | ________, 3369 | // 204 $cc 'Igrave' 3370 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3371 | __XX____, 3372 | ___XX___, 3373 | ________, 3374 | __XXXX__, 3375 | ___XX___, 3376 | ___XX___, 3377 | ___XX___, 3378 | ___XX___, 3379 | ___XX___, 3380 | ___XX___, 3381 | ___XX___, 3382 | __XXXX__, 3383 | ________, 3384 | ________, 3385 | ________, 3386 | ________, 3387 | // 205 $cd 'Iacute' 3388 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3389 | ____XX__, 3390 | ___XX___, 3391 | ________, 3392 | __XXXX__, 3393 | ___XX___, 3394 | ___XX___, 3395 | ___XX___, 3396 | ___XX___, 3397 | ___XX___, 3398 | ___XX___, 3399 | ___XX___, 3400 | __XXXX__, 3401 | ________, 3402 | ________, 3403 | ________, 3404 | ________, 3405 | // 206 $ce 'Icircumflex' 3406 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3407 | ___XX___, 3408 | __XXXX__, 3409 | _X____X_, 3410 | __XXXX__, 3411 | ___XX___, 3412 | ___XX___, 3413 | ___XX___, 3414 | ___XX___, 3415 | ___XX___, 3416 | ___XX___, 3417 | ___XX___, 3418 | __XXXX__, 3419 | ________, 3420 | ________, 3421 | ________, 3422 | ________, 3423 | // 207 $cf 'Idieresis' 3424 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3425 | _XX__XX_, 3426 | _XX__XX_, 3427 | ________, 3428 | __XXXX__, 3429 | ___XX___, 3430 | ___XX___, 3431 | ___XX___, 3432 | ___XX___, 3433 | ___XX___, 3434 | ___XX___, 3435 | ___XX___, 3436 | __XXXX__, 3437 | ________, 3438 | ________, 3439 | ________, 3440 | ________, 3441 | // 208 $d0 'Eth' 3442 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3443 | ________, 3444 | ________, 3445 | XXXXX___, 3446 | _XX_XX__, 3447 | _XX__XX_, 3448 | _XX__XX_, 3449 | XXXX_XX_, 3450 | _XX__XX_, 3451 | _XX__XX_, 3452 | _XX__XX_, 3453 | _XX_XX__, 3454 | XXXXX___, 3455 | ________, 3456 | ________, 3457 | ________, 3458 | ________, 3459 | // 209 $d1 'Ntilde' 3460 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3461 | _XXX_XX_, 3462 | XX_XXX__, 3463 | ________, 3464 | XX___XX_, 3465 | XXX__XX_, 3466 | XXXX_XX_, 3467 | XXXXXXX_, 3468 | XX_XXXX_, 3469 | XX__XXX_, 3470 | XX___XX_, 3471 | XX___XX_, 3472 | XX___XX_, 3473 | ________, 3474 | ________, 3475 | ________, 3476 | ________, 3477 | // 210 $d2 'Ograve' 3478 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3479 | _XX_____, 3480 | __XX____, 3481 | ________, 3482 | _XXXXX__, 3483 | XX___XX_, 3484 | XX___XX_, 3485 | XX___XX_, 3486 | XX___XX_, 3487 | XX___XX_, 3488 | XX___XX_, 3489 | XX___XX_, 3490 | _XXXXX__, 3491 | ________, 3492 | ________, 3493 | ________, 3494 | ________, 3495 | // 211 $d3 'Oacute' 3496 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3497 | ____XX__, 3498 | ___XX___, 3499 | ________, 3500 | _XXXXX__, 3501 | XX___XX_, 3502 | XX___XX_, 3503 | XX___XX_, 3504 | XX___XX_, 3505 | XX___XX_, 3506 | XX___XX_, 3507 | XX___XX_, 3508 | _XXXXX__, 3509 | ________, 3510 | ________, 3511 | ________, 3512 | ________, 3513 | // 212 $d4 'Ocircumflex' 3514 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3515 | ___X____, 3516 | __XXX___, 3517 | _X___X__, 3518 | _XXXXX__, 3519 | XX___XX_, 3520 | XX___XX_, 3521 | XX___XX_, 3522 | XX___XX_, 3523 | XX___XX_, 3524 | XX___XX_, 3525 | XX___XX_, 3526 | _XXXXX__, 3527 | ________, 3528 | ________, 3529 | ________, 3530 | ________, 3531 | // 213 $d5 'Otilde' 3532 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3533 | _XXX_XX_, 3534 | XX_XXX__, 3535 | ________, 3536 | _XXXXX__, 3537 | XX___XX_, 3538 | XX___XX_, 3539 | XX___XX_, 3540 | XX___XX_, 3541 | XX___XX_, 3542 | XX___XX_, 3543 | XX___XX_, 3544 | _XXXXX__, 3545 | ________, 3546 | ________, 3547 | ________, 3548 | ________, 3549 | // 214 $d6 'Odieresis' 3550 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3551 | _XX_XX__, 3552 | _XX_XX__, 3553 | ________, 3554 | _XXXXX__, 3555 | XX___XX_, 3556 | XX___XX_, 3557 | XX___XX_, 3558 | XX___XX_, 3559 | XX___XX_, 3560 | XX___XX_, 3561 | XX___XX_, 3562 | _XXXXX__, 3563 | ________, 3564 | ________, 3565 | ________, 3566 | ________, 3567 | // 215 $d7 'multiply' 3568 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3569 | ________, 3570 | ________, 3571 | ________, 3572 | ________, 3573 | ________, 3574 | _XX__XX_, 3575 | __XXXX__, 3576 | ___XX___, 3577 | __XXXX__, 3578 | _XX__XX_, 3579 | ________, 3580 | ________, 3581 | ________, 3582 | ________, 3583 | ________, 3584 | ________, 3585 | // 216 $d8 'Oslash' 3586 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3587 | ________, 3588 | ________, 3589 | _XXXX_X_, 3590 | XX___X__, 3591 | XX__XXX_, 3592 | XX__XXX_, 3593 | XX_X_XX_, 3594 | XX_X_XX_, 3595 | XXX__XX_, 3596 | XXX__XX_, 3597 | _X___XX_, 3598 | X_XXXX__, 3599 | ________, 3600 | ________, 3601 | ________, 3602 | ________, 3603 | // 217 $d9 'Ugrave' 3604 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3605 | _XX_____, 3606 | __XX____, 3607 | ________, 3608 | XX___XX_, 3609 | XX___XX_, 3610 | XX___XX_, 3611 | XX___XX_, 3612 | XX___XX_, 3613 | XX___XX_, 3614 | XX___XX_, 3615 | XX___XX_, 3616 | _XXXXX__, 3617 | ________, 3618 | ________, 3619 | ________, 3620 | ________, 3621 | // 218 $da 'Uacute' 3622 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3623 | ____XX__, 3624 | ___XX___, 3625 | ________, 3626 | XX___XX_, 3627 | XX___XX_, 3628 | XX___XX_, 3629 | XX___XX_, 3630 | XX___XX_, 3631 | XX___XX_, 3632 | XX___XX_, 3633 | XX___XX_, 3634 | _XXXXX__, 3635 | ________, 3636 | ________, 3637 | ________, 3638 | ________, 3639 | // 219 $db 'Ucircumflex' 3640 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3641 | ___X____, 3642 | __XXX___, 3643 | _X___X__, 3644 | XX___XX_, 3645 | XX___XX_, 3646 | XX___XX_, 3647 | XX___XX_, 3648 | XX___XX_, 3649 | XX___XX_, 3650 | XX___XX_, 3651 | XX___XX_, 3652 | _XXXXX__, 3653 | ________, 3654 | ________, 3655 | ________, 3656 | ________, 3657 | // 220 $dc 'Udieresis' 3658 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3659 | _XX_XX__, 3660 | _XX_XX__, 3661 | ________, 3662 | XX___XX_, 3663 | XX___XX_, 3664 | XX___XX_, 3665 | XX___XX_, 3666 | XX___XX_, 3667 | XX___XX_, 3668 | XX___XX_, 3669 | XX___XX_, 3670 | _XXXXX__, 3671 | ________, 3672 | ________, 3673 | ________, 3674 | ________, 3675 | // 221 $dd 'Yacute' 3676 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3677 | ____XX__, 3678 | ___XX___, 3679 | ________, 3680 | _XX__XX_, 3681 | _XX__XX_, 3682 | _XX__XX_, 3683 | __XXXX__, 3684 | ___XX___, 3685 | ___XX___, 3686 | ___XX___, 3687 | ___XX___, 3688 | __XXXX__, 3689 | ________, 3690 | ________, 3691 | ________, 3692 | ________, 3693 | // 222 $de 'Thorn' 3694 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3695 | ________, 3696 | ________, 3697 | XXXX____, 3698 | _XX_____, 3699 | _XXXXX__, 3700 | _XX__XX_, 3701 | _XX__XX_, 3702 | _XX__XX_, 3703 | _XX__XX_, 3704 | _XXXXX__, 3705 | _XX_____, 3706 | XXXX____, 3707 | ________, 3708 | ________, 3709 | ________, 3710 | ________, 3711 | // 223 $df 'germandbls' 3712 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3713 | ________, 3714 | ________, 3715 | __XXXX__, 3716 | _XX__XX_, 3717 | _XX__XX_, 3718 | _XX__XX_, 3719 | _XX_XX__, 3720 | _XX__XX_, 3721 | _XX__XX_, 3722 | _XX__XX_, 3723 | _XX__XX_, 3724 | XXX_XX__, 3725 | ________, 3726 | ________, 3727 | ________, 3728 | ________, 3729 | // 224 $e0 'agrave' 3730 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3731 | ________, 3732 | ________, 3733 | _XX_____, 3734 | __XX____, 3735 | ________, 3736 | _XXXX___, 3737 | ____XX__, 3738 | _XXXXX__, 3739 | XX__XX__, 3740 | XX__XX__, 3741 | XX__XX__, 3742 | _XXX_XX_, 3743 | ________, 3744 | ________, 3745 | ________, 3746 | ________, 3747 | // 225 $e1 'aacute' 3748 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3749 | ________, 3750 | ________, 3751 | ___XX___, 3752 | __XX____, 3753 | ________, 3754 | _XXXX___, 3755 | ____XX__, 3756 | _XXXXX__, 3757 | XX__XX__, 3758 | XX__XX__, 3759 | XX__XX__, 3760 | _XXX_XX_, 3761 | ________, 3762 | ________, 3763 | ________, 3764 | ________, 3765 | // 226 $e2 'acircumflex' 3766 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3767 | ________, 3768 | ___X____, 3769 | __XXX___, 3770 | _XX_XX__, 3771 | ________, 3772 | _XXXX___, 3773 | ____XX__, 3774 | _XXXXX__, 3775 | XX__XX__, 3776 | XX__XX__, 3777 | XX__XX__, 3778 | _XXX_XX_, 3779 | ________, 3780 | ________, 3781 | ________, 3782 | ________, 3783 | // 227 $e3 'atilde' 3784 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3785 | ________, 3786 | ________, 3787 | _XXX_XX_, 3788 | XX_XXX__, 3789 | ________, 3790 | _XXXX___, 3791 | ____XX__, 3792 | _XXXXX__, 3793 | XX__XX__, 3794 | XX__XX__, 3795 | XX__XX__, 3796 | _XXX_XX_, 3797 | ________, 3798 | ________, 3799 | ________, 3800 | ________, 3801 | // 228 $e4 'adieresis' 3802 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3803 | ________, 3804 | ________, 3805 | _XX_XX__, 3806 | _XX_XX__, 3807 | ________, 3808 | _XXXX___, 3809 | ____XX__, 3810 | _XXXXX__, 3811 | XX__XX__, 3812 | XX__XX__, 3813 | XX__XX__, 3814 | _XXX_XX_, 3815 | ________, 3816 | ________, 3817 | ________, 3818 | ________, 3819 | // 229 $e5 'aring' 3820 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3821 | ________, 3822 | __XXX___, 3823 | _XX_XX__, 3824 | __XXX___, 3825 | ________, 3826 | _XXXX___, 3827 | ____XX__, 3828 | _XXXXX__, 3829 | XX__XX__, 3830 | XX__XX__, 3831 | XX__XX__, 3832 | _XXX_XX_, 3833 | ________, 3834 | ________, 3835 | ________, 3836 | ________, 3837 | // 230 $e6 'ae' 3838 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3839 | ________, 3840 | ________, 3841 | ________, 3842 | ________, 3843 | ________, 3844 | XX__XX__, 3845 | _XXX_XX_, 3846 | __XX_XX_, 3847 | _XXXXXX_, 3848 | XX_XX___, 3849 | XX_XX___, 3850 | _XX_XXX_, 3851 | ________, 3852 | ________, 3853 | ________, 3854 | ________, 3855 | // 231 $e7 'ccedilla' 3856 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3857 | ________, 3858 | ________, 3859 | ________, 3860 | ________, 3861 | ________, 3862 | _XXXXX__, 3863 | XX___XX_, 3864 | XX______, 3865 | XX______, 3866 | XX______, 3867 | XX___XX_, 3868 | _XXXXX__, 3869 | ___XX___, 3870 | ____XX__, 3871 | __XXX___, 3872 | ________, 3873 | // 232 $e8 'egrave' 3874 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3875 | ________, 3876 | ________, 3877 | _XX_____, 3878 | __XX____, 3879 | ________, 3880 | _XXXXX__, 3881 | XX___XX_, 3882 | XXXXXXX_, 3883 | XX______, 3884 | XX______, 3885 | XX___XX_, 3886 | _XXXXX__, 3887 | ________, 3888 | ________, 3889 | ________, 3890 | ________, 3891 | // 233 $e9 'eacute' 3892 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3893 | ________, 3894 | ________, 3895 | ____XX__, 3896 | ___XX___, 3897 | ________, 3898 | _XXXXX__, 3899 | XX___XX_, 3900 | XXXXXXX_, 3901 | XX______, 3902 | XX______, 3903 | XX___XX_, 3904 | _XXXXX__, 3905 | ________, 3906 | ________, 3907 | ________, 3908 | ________, 3909 | // 234 $ea 'ecircumflex' 3910 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3911 | ________, 3912 | ___X____, 3913 | __XXX___, 3914 | _XX_XX__, 3915 | ________, 3916 | _XXXXX__, 3917 | XX___XX_, 3918 | XXXXXXX_, 3919 | XX______, 3920 | XX______, 3921 | XX___XX_, 3922 | _XXXXX__, 3923 | ________, 3924 | ________, 3925 | ________, 3926 | ________, 3927 | // 235 $eb 'edieresis' 3928 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3929 | ________, 3930 | ________, 3931 | _XX_XX__, 3932 | _XX_XX__, 3933 | ________, 3934 | _XXXXX__, 3935 | XX___XX_, 3936 | XXXXXXX_, 3937 | XX______, 3938 | XX______, 3939 | XX___XX_, 3940 | _XXXXX__, 3941 | ________, 3942 | ________, 3943 | ________, 3944 | ________, 3945 | // 236 $ec 'igrave' 3946 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3947 | ________, 3948 | ________, 3949 | __XX____, 3950 | ___XX___, 3951 | ________, 3952 | __XXX___, 3953 | ___XX___, 3954 | ___XX___, 3955 | ___XX___, 3956 | ___XX___, 3957 | ___XX___, 3958 | __XXXX__, 3959 | ________, 3960 | ________, 3961 | ________, 3962 | ________, 3963 | // 237 $ed 'iacute' 3964 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3965 | ________, 3966 | ________, 3967 | ____XX__, 3968 | ___XX___, 3969 | ________, 3970 | __XXX___, 3971 | ___XX___, 3972 | ___XX___, 3973 | ___XX___, 3974 | ___XX___, 3975 | ___XX___, 3976 | __XXXX__, 3977 | ________, 3978 | ________, 3979 | ________, 3980 | ________, 3981 | // 238 $ee 'icircumflex' 3982 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 3983 | ________, 3984 | ___X____, 3985 | __XXX___, 3986 | _XX_XX__, 3987 | ________, 3988 | __XXX___, 3989 | ___XX___, 3990 | ___XX___, 3991 | ___XX___, 3992 | ___XX___, 3993 | ___XX___, 3994 | __XXXX__, 3995 | ________, 3996 | ________, 3997 | ________, 3998 | ________, 3999 | // 239 $ef 'idieresis' 4000 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4001 | ________, 4002 | ________, 4003 | _XX__XX_, 4004 | _XX__XX_, 4005 | ________, 4006 | __XXX___, 4007 | ___XX___, 4008 | ___XX___, 4009 | ___XX___, 4010 | ___XX___, 4011 | ___XX___, 4012 | __XXXX__, 4013 | ________, 4014 | ________, 4015 | ________, 4016 | ________, 4017 | // 240 $f0 'eth' 4018 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4019 | ________, 4020 | ________, 4021 | _XXX_XX_, 4022 | ___XXX__, 4023 | __XXXX__, 4024 | _____XX_, 4025 | _XXXXXX_, 4026 | XX___XX_, 4027 | XX___XX_, 4028 | XX___XX_, 4029 | XX___XX_, 4030 | _XXXXX__, 4031 | ________, 4032 | ________, 4033 | ________, 4034 | ________, 4035 | // 241 $f1 'ntilde' 4036 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4037 | ________, 4038 | ________, 4039 | _XXX_XX_, 4040 | XX_XXX__, 4041 | ________, 4042 | XX_XXX__, 4043 | _XX__XX_, 4044 | _XX__XX_, 4045 | _XX__XX_, 4046 | _XX__XX_, 4047 | _XX__XX_, 4048 | _XX__XX_, 4049 | ________, 4050 | ________, 4051 | ________, 4052 | ________, 4053 | // 242 $f2 'ograve' 4054 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4055 | ________, 4056 | ________, 4057 | _XX_____, 4058 | __XX____, 4059 | ________, 4060 | _XXXXX__, 4061 | XX___XX_, 4062 | XX___XX_, 4063 | XX___XX_, 4064 | XX___XX_, 4065 | XX___XX_, 4066 | _XXXXX__, 4067 | ________, 4068 | ________, 4069 | ________, 4070 | ________, 4071 | // 243 $f3 'oacute' 4072 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4073 | ________, 4074 | ________, 4075 | ____XX__, 4076 | ___XX___, 4077 | ________, 4078 | _XXXXX__, 4079 | XX___XX_, 4080 | XX___XX_, 4081 | XX___XX_, 4082 | XX___XX_, 4083 | XX___XX_, 4084 | _XXXXX__, 4085 | ________, 4086 | ________, 4087 | ________, 4088 | ________, 4089 | // 244 $f4 'ocircumflex' 4090 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4091 | ________, 4092 | ___X____, 4093 | __XXX___, 4094 | _XX_XX__, 4095 | ________, 4096 | _XXXXX__, 4097 | XX___XX_, 4098 | XX___XX_, 4099 | XX___XX_, 4100 | XX___XX_, 4101 | XX___XX_, 4102 | _XXXXX__, 4103 | ________, 4104 | ________, 4105 | ________, 4106 | ________, 4107 | // 245 $f5 'otilde' 4108 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4109 | ________, 4110 | ________, 4111 | _XXX_XX_, 4112 | XX_XXX__, 4113 | ________, 4114 | _XXXXX__, 4115 | XX___XX_, 4116 | XX___XX_, 4117 | XX___XX_, 4118 | XX___XX_, 4119 | XX___XX_, 4120 | _XXXXX__, 4121 | ________, 4122 | ________, 4123 | ________, 4124 | ________, 4125 | // 246 $f6 'odieresis' 4126 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4127 | ________, 4128 | ________, 4129 | _XX_XX__, 4130 | _XX_XX__, 4131 | ________, 4132 | _XXXXX__, 4133 | XX___XX_, 4134 | XX___XX_, 4135 | XX___XX_, 4136 | XX___XX_, 4137 | XX___XX_, 4138 | _XXXXX__, 4139 | ________, 4140 | ________, 4141 | ________, 4142 | ________, 4143 | // 247 $f7 'divide' 4144 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4145 | ________, 4146 | ________, 4147 | ________, 4148 | ________, 4149 | ___XX___, 4150 | ___XX___, 4151 | ________, 4152 | _XXXXXX_, 4153 | ________, 4154 | ___XX___, 4155 | ___XX___, 4156 | ________, 4157 | ________, 4158 | ________, 4159 | ________, 4160 | ________, 4161 | // 248 $f8 'oslash' 4162 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4163 | ________, 4164 | ________, 4165 | ________, 4166 | ________, 4167 | ________, 4168 | _XXXX_X_, 4169 | XX___X__, 4170 | XX__XXX_, 4171 | XX_X_XX_, 4172 | XXX__XX_, 4173 | _X___XX_, 4174 | X_XXXX__, 4175 | ________, 4176 | ________, 4177 | ________, 4178 | ________, 4179 | // 249 $f9 'ugrave' 4180 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4181 | ________, 4182 | ________, 4183 | _XX_____, 4184 | __XX____, 4185 | ________, 4186 | XX__XX__, 4187 | XX__XX__, 4188 | XX__XX__, 4189 | XX__XX__, 4190 | XX__XX__, 4191 | XX__XX__, 4192 | _XXX_XX_, 4193 | ________, 4194 | ________, 4195 | ________, 4196 | ________, 4197 | // 250 $fa 'uacute' 4198 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4199 | ________, 4200 | ________, 4201 | ___XX___, 4202 | __XX____, 4203 | ________, 4204 | XX__XX__, 4205 | XX__XX__, 4206 | XX__XX__, 4207 | XX__XX__, 4208 | XX__XX__, 4209 | XX__XX__, 4210 | _XXX_XX_, 4211 | ________, 4212 | ________, 4213 | ________, 4214 | ________, 4215 | // 251 $fb 'ucircumflex' 4216 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4217 | ________, 4218 | ___X____, 4219 | __XXX___, 4220 | _XX_XX__, 4221 | ________, 4222 | XX__XX__, 4223 | XX__XX__, 4224 | XX__XX__, 4225 | XX__XX__, 4226 | XX__XX__, 4227 | XX__XX__, 4228 | _XXX_XX_, 4229 | ________, 4230 | ________, 4231 | ________, 4232 | ________, 4233 | // 252 $fc 'udieresis' 4234 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4235 | ________, 4236 | ________, 4237 | XX__XX__, 4238 | XX__XX__, 4239 | ________, 4240 | XX__XX__, 4241 | XX__XX__, 4242 | XX__XX__, 4243 | XX__XX__, 4244 | XX__XX__, 4245 | XX__XX__, 4246 | _XXX_XX_, 4247 | ________, 4248 | ________, 4249 | ________, 4250 | ________, 4251 | // 253 $fd 'yacute' 4252 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4253 | ________, 4254 | ________, 4255 | ____XX__, 4256 | ___XX___, 4257 | ________, 4258 | XX___XX_, 4259 | XX___XX_, 4260 | XX___XX_, 4261 | XX___XX_, 4262 | XX___XX_, 4263 | XX___XX_, 4264 | _XXXXXX_, 4265 | _____XX_, 4266 | ____XX__, 4267 | XXXXX___, 4268 | ________, 4269 | // 254 $fe 'thorn' 4270 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4271 | ________, 4272 | ________, 4273 | XXX_____, 4274 | _XX_____, 4275 | _XX_____, 4276 | _XXXXX__, 4277 | _XX__XX_, 4278 | _XX__XX_, 4279 | _XX__XX_, 4280 | _XX__XX_, 4281 | _XX__XX_, 4282 | _XXXXX__, 4283 | _XX_____, 4284 | _XX_____, 4285 | XXXX____, 4286 | ________, 4287 | // 255 $ff 'ydieresis' 4288 | // width 8, bbx 0, bby -4, bbw 8, bbh 16 4289 | ________, 4290 | ________, 4291 | _XX_XX__, 4292 | _XX_XX__, 4293 | ________, 4294 | XX___XX_, 4295 | XX___XX_, 4296 | XX___XX_, 4297 | XX___XX_, 4298 | XX___XX_, 4299 | XX___XX_, 4300 | _XXXXXX_, 4301 | _____XX_, 4302 | ____XX__, 4303 | XXXXX___, 4304 | ________, 4305 | }; 4306 | 4307 | typedef enum { 4308 | ASCII = 0, 4309 | UTF8, 4310 | GBK, 4311 | } encode_type_t; 4312 | 4313 | struct font_data_s { 4314 | int h; 4315 | int w; 4316 | encode_type_t type; 4317 | union { 4318 | uint8_t ascii; 4319 | uint8_t utf8[4]; 4320 | uint8_t gbk[2]; 4321 | }; 4322 | uint8_t *data; 4323 | }; 4324 | 4325 | struct font_data_s *create_ascii_8x16font(uint8_t c); 4326 | 4327 | struct font_data_s *create_utf8_16x16font(const uint8_t *utf8); 4328 | 4329 | struct font_data_s *set_font_data(struct font_data_s *font, 4330 | int h, int w, encode_type_t t, 4331 | const uint8_t *v); 4332 | 4333 | #endif 4334 | --------------------------------------------------------------------------------