added "Blood!" level set
[mmd.git] / x11gfx.d
blob889bcce9a45e9250ec1f5dd6e174d969df37f4a6
1 module x11gfx is aliced;
3 import arsd.simpledisplay;
4 //import arsd.color;
7 // ////////////////////////////////////////////////////////////////////////// //
8 final class X11Image {
9 int width, height;
10 VColor[] data;
12 this (int w, int h) {
13 assert(w > 0 && w <= 4096);
14 assert(h > 0 && h <= 4096);
15 width = w;
16 height = h;
17 data.length = w*h;
18 data[] = Transparent;
21 VColor getPixel (int x, int y) const {
22 return (x >= 0 && y >= 0 && x < width && y < height ? data[y*width+x] : Transparent);
25 void setPixel (int x, int y, VColor c) {
26 if (x >= 0 && y >= 0 && x < width && y < height) data[y*width+x] = c;
29 void blit (int x, int y) const {
30 if (width < 1 || height < 1) return;
31 if (x <= -width || y <= -height) return;
32 if (x >= vbufW || y >= vbufH) return;
33 auto src = cast(const(VColor)*)data.ptr;
34 foreach (int dy; 0..height) {
35 foreach (int dx; 0..width) {
36 putPixel(x+dx, y+dy, *src++);
41 void blit2x (int x, int y) const {
42 if (width < 1 || height < 1) return;
43 if (x <= -width || y <= -height) return;
44 if (x >= vbufW || y >= vbufH) return;
45 auto src = cast(const(VColor)*)data.ptr;
46 foreach (immutable int dy; 0..height) {
47 foreach (immutable int dx; 0..width) {
48 putPixel(x+dx*2+0, y+dy*2+0, *src);
49 putPixel(x+dx*2+1, y+dy*2+0, *src);
50 putPixel(x+dx*2+0, y+dy*2+1, *src);
51 putPixel(x+dx*2+1, y+dy*2+1, *src);
52 ++src;
57 private void blit2xImpl(string op) (int x, int y) nothrow @trusted @nogc {
58 if (width < 1 || height < 1) return;
59 if (x <= -width || y <= -height) return;
60 if (x >= vbufW || y >= vbufH) return;
61 auto s = cast(const(ubyte)*)data.ptr;
62 //auto d = cast(uint*)vscr2x;
63 foreach (immutable int dy; 0..height) {
64 foreach (immutable int dx; 0..width) {
65 static if (op.length) mixin(op);
66 immutable uint c1 = ((((c0&0x00ff00ff)*6)>>3)&0x00ff00ff)|(((c0&0x0000ff00)*6)>>3)&0x0000ff00;
67 putPixel(x+dx*2+0, y+dy*2+0, c0);
68 putPixel(x+dx*2+1, y+dy*2+0, c0);
69 putPixel(x+dx*2+0, y+dy*2+1, c1);
70 putPixel(x+dx*2+1, y+dy*2+1, c1);
71 s += 4;
76 alias blit2xTV = blit2xImpl!"immutable uint c0 = (cast(immutable(uint)*)s)[0];";
77 alias blit2xTVBW = blit2xImpl!"immutable ubyte i = cast(ubyte)((s[0]*28+s[1]*151+s[2]*77)/256); immutable uint c0 = (i<<16)|(i<<8)|i;";
78 alias blit2xTVGreen = blit2xImpl!"immutable ubyte i = cast(ubyte)((s[0]*28+s[1]*151+s[2]*77)/256); immutable uint c0 = i<<8;";
82 // ////////////////////////////////////////////////////////////////////////// //
83 // 0:b; 1:g; 2:r; 3: nothing
84 __gshared int vbufW = 256*2, vbufH = 192*2;
85 __gshared uint[] vbuf;
87 void initVBuf () {
88 vbuf.length = vbufW*vbufH;
89 vbuf[] = 0;
93 void realizeVBuf (Image img) {
95 auto sp = vbuf.ptr;
96 auto dp = cast(uint*)img.getDataPointer;
97 import core.stdc.string : memcpy;
98 memcpy(dp, sp, vbufW*vbufH*4);
100 auto dp = cast(uint*)img.getDataPointer;
101 dp[0..vbufW*vbufH] = vbuf.ptr[0..vbufW*vbufH];
105 // ////////////////////////////////////////////////////////////////////////// //
106 ubyte clampToByte(T) (T n) @safe pure nothrow @nogc
107 if (__traits(isIntegral, T) && (T.sizeof == 2 || T.sizeof == 4))
109 static if (__VERSION__ > 2067) pragma(inline, true);
110 n &= -cast(int)(n >= 0);
111 return cast(ubyte)(n|((255-cast(int)n)>>31));
114 ubyte clampToByte(T) (T n) @safe pure nothrow @nogc
115 if (__traits(isIntegral, T) && T.sizeof == 1)
117 static if (__VERSION__ > 2067) pragma(inline, true);
118 return cast(ubyte)n;
122 // ////////////////////////////////////////////////////////////////////////// //
123 alias VColor = uint;
125 /// vlRGBA struct to ease color components extraction/replacing
126 align(1) struct vlRGBA {
127 align(1):
128 ubyte b, g, r, a;
130 static assert(vlRGBA.sizeof == VColor.sizeof);
133 enum : VColor {
134 vlAMask = 0xff000000u,
135 vlRMask = 0x00ff0000u,
136 vlGMask = 0x0000ff00u,
137 vlBMask = 0x000000ffu
140 enum : VColor {
141 vlAShift = 24,
142 vlRShift = 16,
143 vlGShift = 8,
144 vlBShift = 0
148 enum VColor Transparent = vlAMask; /// completely transparent pixel color
151 bool isTransparent(T : VColor) (T col) @safe pure nothrow @nogc {
152 static if (__VERSION__ > 2067) pragma(inline, true);
153 return ((col&vlAMask) == vlAMask);
156 bool isOpaque(T : VColor) (T col) @safe pure nothrow @nogc {
157 static if (__VERSION__ > 2067) pragma(inline, true);
158 return ((col&vlAMask) == 0);
161 // a=0: opaque
162 VColor rgbcol(TR, TG, TB, TA=ubyte) (TR r, TG g, TB b, TA a=0) @safe pure nothrow @nogc
163 if (__traits(isIntegral, TR) && __traits(isIntegral, TG) && __traits(isIntegral, TB) && __traits(isIntegral, TA)) {
164 static if (__VERSION__ > 2067) pragma(inline, true);
165 return
166 (clampToByte(a)<<vlAShift)|
167 (clampToByte(r)<<vlRShift)|
168 (clampToByte(g)<<vlGShift)|
169 (clampToByte(b)<<vlBShift);
172 alias rgbacol = rgbcol;
175 // generate some templates
176 private enum genRGBGetSet(string cname) =
177 "ubyte rgb"~cname~"() (VColor clr) @safe pure nothrow @nogc {\n"~
178 " static if (__VERSION__ > 2067) pragma(inline, true);\n"~
179 " return ((clr>>vl"~cname[0]~"Shift)&0xff);\n"~
180 "}\n"~
181 "VColor rgbSet"~cname~"(T) (VColor clr, T v) @safe pure nothrow @nogc if (__traits(isIntegral, T)) {\n"~
182 " static if (__VERSION__ > 2067) pragma(inline, true);\n"~
183 " return (clr&~vl"~cname[0]~"Mask)|(clampToByte(v)<<vl"~cname[0]~"Shift);\n"~
184 "}\n";
186 mixin(genRGBGetSet!"Alpha");
187 mixin(genRGBGetSet!"Red");
188 mixin(genRGBGetSet!"Green");
189 mixin(genRGBGetSet!"Blue");
192 void putPixel(TX, TY) (TX x, TY y, VColor col) @trusted
193 if (__traits(isIntegral, TX) && __traits(isIntegral, TY))
195 static if (__VERSION__ > 2067) pragma(inline, true);
196 immutable long xx = cast(long)x;
197 immutable long yy = cast(long)y;
198 if ((col&vlAMask) != vlAMask && xx >= 0 && yy >= 0 && xx < vbufW && yy < vbufH) {
199 uint* da = vbuf.ptr+yy*vbufW+xx;
200 if (col&vlAMask) {
201 immutable uint a = 256-(col>>24); // to not loose bits
202 immutable uint dc = (*da)&0xffffff;
203 immutable uint srb = (col&0xff00ff);
204 immutable uint sg = (col&0x00ff00);
205 immutable uint drb = (dc&0xff00ff);
206 immutable uint dg = (dc&0x00ff00);
207 immutable uint orb = (drb+(((srb-drb)*a+0x800080)>>8))&0xff00ff;
208 immutable uint og = (dg+(((sg-dg)*a+0x008000)>>8))&0x00ff00;
209 *da = orb|og;
210 } else {
211 *da = col;
216 void setPixel(TX, TY) (TX x, TY y, VColor col) @trusted
217 if (__traits(isIntegral, TX) && __traits(isIntegral, TY))
219 static if (__VERSION__ > 2067) pragma(inline, true);
220 immutable long xx = cast(long)x+mXOfs;
221 immutable long yy = cast(long)y+mYOfs;
222 if (xx >= mClipX0 && yy >= mClipY0 && xx <= mClipX1 && yy <= mClipY1) {
223 uint* da = vbuf.ptr+yy*vbufW+xx;
224 *da = col;
229 void drawLine(bool lastPoint=true) (int x0, int y0, int x1, int y1, immutable VColor col) {
230 enum swap(string a, string b) = "{int tmp_="~a~";"~a~"="~b~";"~b~"=tmp_;}";
232 if ((col&vlAMask) == vlAMask) return;
234 if (x0 == x1 && y0 == y1) {
235 static if (lastPoint) putPixel(x0, y0, col);
236 return;
239 // clip rectange
240 int wx0 = 0, wy0 = 0, wx1 = vbufW-1, wy1 = vbufH-1;
241 // other vars
242 int stx, sty; // "steps" for x and y axes
243 int dsx, dsy; // "lengthes" for x and y axes
244 int dx2, dy2; // "double lengthes" for x and y axes
245 int xd, yd; // current coord
246 int e; // "error" (as in bresenham algo)
247 int rem;
248 int term;
249 int *d0, d1;
250 // horizontal setup
251 if (x0 < x1) {
252 // from left to right
253 if (x0 > wx1 || x1 < wx0) return; // out of screen
254 stx = 1; // going right
255 } else {
256 // from right to left
257 if (x1 > wx1 || x0 < wx0) return; // out of screen
258 stx = -1; // going left
259 x0 = -x0;
260 x1 = -x1;
261 wx0 = -wx0;
262 wx1 = -wx1;
263 mixin(swap!("wx0", "wx1"));
265 // vertical setup
266 if (y0 < y1) {
267 // from top to bottom
268 if (y0 > wy1 || y1 < wy0) return; // out of screen
269 sty = 1; // going down
270 } else {
271 // from bottom to top
272 if (y1 > wy1 || y0 < wy0) return; // out of screen
273 sty = -1; // going up
274 y0 = -y0;
275 y1 = -y1;
276 wy0 = -wy0;
277 wy1 = -wy1;
278 mixin(swap!("wy0", "wy1"));
280 dsx = x1-x0;
281 dsy = y1-y0;
282 if (dsx < dsy) {
283 d0 = &yd;
284 d1 = &xd;
285 mixin(swap!("x0", "y0"));
286 mixin(swap!("x1", "y1"));
287 mixin(swap!("dsx", "dsy"));
288 mixin(swap!("wx0", "wy0"));
289 mixin(swap!("wx1", "wy1"));
290 mixin(swap!("stx", "sty"));
291 } else {
292 d0 = &xd;
293 d1 = &yd;
295 dx2 = 2*dsx;
296 dy2 = 2*dsy;
297 xd = x0;
298 yd = y0;
299 e = 2*dsy-dsx;
300 term = x1;
301 bool xfixed = false;
302 if (y0 < wy0) {
303 // clip at top
304 int temp = dx2*(wy0-y0)-dsx;
305 xd += temp/dy2;
306 rem = temp%dy2;
307 if (xd > wx1) return; // x is moved out of clipping rect, nothing to do
308 if (xd+1 >= wx0) {
309 yd = wy0;
310 e -= rem+dsx;
311 if (rem > 0) { ++xd; e += dy2; }
312 xfixed = true;
315 if (!xfixed && x0 < wx0) {
316 // clip at left
317 int temp = dy2*(wx0-x0);
318 yd += temp/dx2;
319 rem = temp%dx2;
320 if (yd > wy1 || yd == wy1 && rem >= dsx) return;
321 xd = wx0;
322 e += rem;
323 if (rem >= dsx) { ++yd; e -= dx2; }
325 if (y1 > wy1) {
326 // clip at bottom
327 int temp = dx2*(wy1-y0)+dsx;
328 term = x0+temp/dy2;
329 rem = temp%dy2;
330 if (rem == 0) --term;
332 if (term > wx1) term = wx1; // clip at right
333 static if (lastPoint) {
334 // draw last point
335 ++term;
336 } else {
337 if (term == xd) return; // this is the only point, get out of here
339 if (sty == -1) yd = -yd;
340 if (stx == -1) { xd = -xd; term = -term; }
341 dx2 -= dy2;
342 // draw it; `putPixel()` can omit checks
343 while (xd != term) {
344 // inlined `putPixel(*d0, *d1, col)`
345 // this can be made even faster by precalculating `da` and making
346 // separate code branches for mixing and non-mixing drawing, but...
347 // ah, screw it!
348 uint* da = vbuf.ptr+(*d1)*vbufW+(*d0);
349 if (col&vlAMask) {
350 immutable uint a = 256-(col>>24); // to not loose bits
351 immutable uint dc = (*da)&0xffffff;
352 immutable uint srb = (col&0xff00ff);
353 immutable uint sg = (col&0x00ff00);
354 immutable uint drb = (dc&0xff00ff);
355 immutable uint dg = (dc&0x00ff00);
356 immutable uint orb = (drb+(((srb-drb)*a+0x800080)>>8))&0xff00ff;
357 immutable uint og = (dg+(((sg-dg)*a+0x008000)>>8))&0x00ff00;
358 *da = orb|og;
359 } else {
360 *da = col;
362 // done drawing, move coords
363 if (e >= 0) {
364 yd += sty;
365 e -= dx2;
366 } else {
367 e += dy2;
369 xd += stx;
374 // //////////////////////////////////////////////////////////////////////// //
376 * Draw character onto virtual screen in KOI8 encoding.
378 * Params:
379 * x = x coordinate
380 * y = y coordinate
381 * wdt = char width
382 * shift = shl count
383 * ch = character
384 * col = foreground color
385 * bkcol = background color
387 * Returns:
388 * nothing
390 void drawCharWdt (int x, int y, int wdt, int shift, char ch, VColor col, VColor bkcol=Transparent) @trusted {
391 size_t pos = ch*8;
392 if (wdt < 1 || shift >= 8) return;
393 if (col == Transparent && bkcol == Transparent) return;
394 if (wdt > 8) wdt = 8;
395 if (shift < 0) shift = 0;
396 foreach (immutable int dy; 0..8) {
397 ubyte b = cast(ubyte)(vlFont6[pos++]<<shift);
398 foreach (immutable int dx; 0..wdt) {
399 VColor c = (b&0x80 ? col : bkcol);
400 if (!isTransparent(c)) putPixel(x+dx, y+dy, c);
401 b = (b<<1)&0xff;
406 // outline types
407 enum : ubyte {
408 OutLeft = 0x01,
409 OutRight = 0x02,
410 OutUp = 0x04,
411 OutDown = 0x08,
412 OutLU = 0x10, // left-up
413 OutRU = 0x20, // right-up
414 OutLD = 0x40, // left-down
415 OutRD = 0x80, // right-down
416 OutAll = 0xff,
420 * Draw outlined character onto virtual screen in KOI8 encoding.
422 * Params:
423 * x = x coordinate
424 * y = y coordinate
425 * wdt = char width
426 * shift = shl count
427 * ch = character
428 * col = foreground color
429 * outcol = outline color
430 * ot = outline type, OutXXX, ored
432 * Returns:
433 * nothing
435 void drawCharWdtOut (int x, int y, int wdt, int shift, char ch, VColor col, VColor outcol=Transparent, ubyte ot=0) @trusted {
436 if (col == Transparent && outcol == Transparent) return;
437 if (ot == 0 || outcol == Transparent) {
438 // no outline? simple draw
439 drawCharWdt(x, y, wdt, shift, ch, col, Transparent);
440 return;
442 size_t pos = ch*8;
443 if (wdt < 1 || shift >= 8) return;
444 if (wdt > 8) wdt = 8;
445 if (shift < 0) shift = 0;
446 ubyte[8+2][8+2] bmp = 0; // char bitmap; 0: empty; 1: char; 2: outline
447 foreach (immutable dy; 1..9) {
448 ubyte b = cast(ubyte)(vlFont6[pos++]<<shift);
449 foreach (immutable dx; 1..wdt+1) {
450 if (b&0x80) {
451 // put pixel
452 bmp[dy][dx] = 1;
453 // put outlines
454 if ((ot&OutUp) && bmp[dy-1][dx] == 0) bmp[dy-1][dx] = 2;
455 if ((ot&OutDown) && bmp[dy+1][dx] == 0) bmp[dy+1][dx] = 2;
456 if ((ot&OutLeft) && bmp[dy][dx-1] == 0) bmp[dy][dx-1] = 2;
457 if ((ot&OutRight) && bmp[dy][dx+1] == 0) bmp[dy][dx+1] = 2;
458 if ((ot&OutLU) && bmp[dy-1][dx-1] == 0) bmp[dy-1][dx-1] = 2;
459 if ((ot&OutRU) && bmp[dy-1][dx+1] == 0) bmp[dy-1][dx+1] = 2;
460 if ((ot&OutLD) && bmp[dy+1][dx-1] == 0) bmp[dy+1][dx-1] = 2;
461 if ((ot&OutRD) && bmp[dy+1][dx+1] == 0) bmp[dy+1][dx+1] = 2;
463 b = (b<<1)&0xff;
466 // now draw it
467 --x;
468 --y;
469 foreach (immutable int dy; 0..10) {
470 foreach (immutable int dx; 0..10) {
471 if (auto t = bmp[dy][dx]) putPixel(x+dx, y+dy, (t == 1 ? col : outcol));
477 * Draw 6x8 character onto virtual screen in KOI8 encoding.
479 * Params:
480 * x = x coordinate
481 * y = y coordinate
482 * ch = character
483 * col = foreground color
484 * bkcol = background color
486 * Returns:
487 * nothing
489 void drawChar (int x, int y, char ch, VColor col, VColor bkcol=Transparent) @trusted {
490 drawCharWdt(x, y, 6, 0, ch, col, bkcol);
493 void drawCharOut (int x, int y, char ch, VColor col, VColor outcol=Transparent, ubyte ot=OutAll) @trusted {
494 drawCharWdtOut(x, y, 6, 0, ch, col, outcol, ot);
497 void drawStr (int x, int y, string str, VColor col, VColor bkcol=Transparent) @trusted {
498 foreach (immutable char ch; str) {
499 drawChar(x, y, ch, col, bkcol);
500 x += 6;
504 void drawStrOut (int x, int y, string str, VColor col, VColor outcol=Transparent, ubyte ot=OutAll) @trusted {
505 foreach (immutable char ch; str) {
506 drawCharOut(x, y, ch, col, outcol, ot);
507 x += 6;
511 static int charWidthProp (char ch) @trusted pure { return (vlFontPropWidth[ch]&0x0f); }
513 int strWidthProp (string str) @trusted pure {
514 int wdt = 0;
515 foreach (immutable char ch; str) wdt += (vlFontPropWidth[ch]&0x0f)+1;
516 if (wdt > 0) --wdt; // don't count last empty pixel
517 return wdt;
520 int drawCharProp (int x, int y, char ch, VColor col, VColor bkcol=Transparent) @trusted {
521 immutable int wdt = (vlFontPropWidth[ch]&0x0f);
522 drawCharWdt(x, y, wdt, vlFontPropWidth[ch]>>4, ch, col, bkcol);
523 return wdt;
526 int drawCharPropOut (int x, int y, char ch, VColor col, VColor outcol=Transparent, ubyte ot=OutAll) @trusted {
527 immutable int wdt = (vlFontPropWidth[ch]&0x0f);
528 drawCharWdtOut(x, y, wdt, vlFontPropWidth[ch]>>4, ch, col, outcol, ot);
529 return wdt;
532 int drawStrProp (int x, int y, string str, VColor col, VColor bkcol=Transparent) @trusted {
533 bool vline = false;
534 int sx = x;
535 foreach (immutable char ch; str) {
536 if (vline) {
537 if (!isTransparent(bkcol)) foreach (int dy; 0..8) putPixel(x, y+dy, bkcol);
538 ++x;
540 vline = true;
541 x += drawCharProp(x, y, ch, col, bkcol);
543 return x-sx;
546 int drawStrPropOut (int x, int y, string str, VColor col, VColor outcol=Transparent, ubyte ot=OutAll) @trusted {
547 int sx = x;
548 foreach (immutable char ch; str) {
549 x += drawCharPropOut(x, y, ch, col, outcol, ot)+1;
551 if (x > sx) --x; // don't count last empty pixel
552 return x-sx;
555 // ////////////////////////////////////////////////////////////////////////// //
556 void clear (VColor col) @trusted {
557 vbuf.ptr[0..vbufW*vbufH] = col;
561 // ////////////////////////////////////////////////////////////////////////// //
562 public immutable ubyte[256*8] vlFont6 = [
563 /* 0 */
564 0b_00000000,
565 0b_00000000,
566 0b_00000000,
567 0b_00000000,
568 0b_00000000,
569 0b_00000000,
570 0b_00000000,
571 0b_00000000,
572 /* 1 */
573 0b_00111100,
574 0b_01000010,
575 0b_10100101,
576 0b_10000001,
577 0b_10100101,
578 0b_10011001,
579 0b_01000010,
580 0b_00111100,
581 /* 2 */
582 0b_00111100,
583 0b_01111110,
584 0b_11011011,
585 0b_11111111,
586 0b_11111111,
587 0b_11011011,
588 0b_01100110,
589 0b_00111100,
590 /* 3 */
591 0b_01101100,
592 0b_11111110,
593 0b_11111110,
594 0b_11111110,
595 0b_01111100,
596 0b_00111000,
597 0b_00010000,
598 0b_00000000,
599 /* 4 */
600 0b_00010000,
601 0b_00111000,
602 0b_01111100,
603 0b_11111110,
604 0b_01111100,
605 0b_00111000,
606 0b_00010000,
607 0b_00000000,
608 /* 5 */
609 0b_00010000,
610 0b_00111000,
611 0b_01010100,
612 0b_11111110,
613 0b_01010100,
614 0b_00010000,
615 0b_00111000,
616 0b_00000000,
617 /* 6 */
618 0b_00010000,
619 0b_00111000,
620 0b_01111100,
621 0b_11111110,
622 0b_11111110,
623 0b_00010000,
624 0b_00111000,
625 0b_00000000,
626 /* 7 */
627 0b_00000000,
628 0b_00000000,
629 0b_00000000,
630 0b_00110000,
631 0b_00110000,
632 0b_00000000,
633 0b_00000000,
634 0b_00000000,
635 /* 8 */
636 0b_11111111,
637 0b_11111111,
638 0b_11111111,
639 0b_11100111,
640 0b_11100111,
641 0b_11111111,
642 0b_11111111,
643 0b_11111111,
644 /* 9 */
645 0b_00111000,
646 0b_01000100,
647 0b_10000010,
648 0b_10000010,
649 0b_10000010,
650 0b_01000100,
651 0b_00111000,
652 0b_00000000,
653 /* 10 */
654 0b_11000111,
655 0b_10111011,
656 0b_01111101,
657 0b_01111101,
658 0b_01111101,
659 0b_10111011,
660 0b_11000111,
661 0b_11111111,
662 /* 11 */
663 0b_00001111,
664 0b_00000011,
665 0b_00000101,
666 0b_01111001,
667 0b_10001000,
668 0b_10001000,
669 0b_10001000,
670 0b_01110000,
671 /* 12 */
672 0b_00111000,
673 0b_01000100,
674 0b_01000100,
675 0b_01000100,
676 0b_00111000,
677 0b_00010000,
678 0b_01111100,
679 0b_00010000,
680 /* 13 */
681 0b_00110000,
682 0b_00101000,
683 0b_00100100,
684 0b_00100100,
685 0b_00101000,
686 0b_00100000,
687 0b_11100000,
688 0b_11000000,
689 /* 14 */
690 0b_00111100,
691 0b_00100100,
692 0b_00111100,
693 0b_00100100,
694 0b_00100100,
695 0b_11100100,
696 0b_11011100,
697 0b_00011000,
698 /* 15 */
699 0b_00010000,
700 0b_01010100,
701 0b_00111000,
702 0b_11101110,
703 0b_00111000,
704 0b_01010100,
705 0b_00010000,
706 0b_00000000,
707 /* 16 */
708 0b_00010000,
709 0b_00010000,
710 0b_00010000,
711 0b_01111100,
712 0b_00010000,
713 0b_00010000,
714 0b_00010000,
715 0b_00010000,
716 /* 17 */
717 0b_00010000,
718 0b_00010000,
719 0b_00010000,
720 0b_11111111,
721 0b_00000000,
722 0b_00000000,
723 0b_00000000,
724 0b_00000000,
725 /* 18 */
726 0b_00000000,
727 0b_00000000,
728 0b_00000000,
729 0b_11111111,
730 0b_00010000,
731 0b_00010000,
732 0b_00010000,
733 0b_00010000,
734 /* 19 */
735 0b_00010000,
736 0b_00010000,
737 0b_00010000,
738 0b_11110000,
739 0b_00010000,
740 0b_00010000,
741 0b_00010000,
742 0b_00010000,
743 /* 20 */
744 0b_00010000,
745 0b_00010000,
746 0b_00010000,
747 0b_00011111,
748 0b_00010000,
749 0b_00010000,
750 0b_00010000,
751 0b_00010000,
752 /* 21 */
753 0b_00010000,
754 0b_00010000,
755 0b_00010000,
756 0b_11111111,
757 0b_00010000,
758 0b_00010000,
759 0b_00010000,
760 0b_00010000,
761 /* 22 */
762 0b_00010000,
763 0b_00010000,
764 0b_00010000,
765 0b_00010000,
766 0b_00010000,
767 0b_00010000,
768 0b_00010000,
769 0b_00010000,
770 /* 23 */
771 0b_00000000,
772 0b_00000000,
773 0b_00000000,
774 0b_11111111,
775 0b_00000000,
776 0b_00000000,
777 0b_00000000,
778 0b_00000000,
779 /* 24 */
780 0b_00000000,
781 0b_00000000,
782 0b_00000000,
783 0b_00011111,
784 0b_00010000,
785 0b_00010000,
786 0b_00010000,
787 0b_00010000,
788 /* 25 */
789 0b_00000000,
790 0b_00000000,
791 0b_00000000,
792 0b_11110000,
793 0b_00010000,
794 0b_00010000,
795 0b_00010000,
796 0b_00010000,
797 /* 26 */
798 0b_00010000,
799 0b_00010000,
800 0b_00010000,
801 0b_00011111,
802 0b_00000000,
803 0b_00000000,
804 0b_00000000,
805 0b_00000000,
806 /* 27 */
807 0b_00010000,
808 0b_00010000,
809 0b_00010000,
810 0b_11110000,
811 0b_00000000,
812 0b_00000000,
813 0b_00000000,
814 0b_00000000,
815 /* 28 */
816 0b_10000001,
817 0b_01000010,
818 0b_00100100,
819 0b_00011000,
820 0b_00011000,
821 0b_00100100,
822 0b_01000010,
823 0b_10000001,
824 /* 29 */
825 0b_00000001,
826 0b_00000010,
827 0b_00000100,
828 0b_00001000,
829 0b_00010000,
830 0b_00100000,
831 0b_01000000,
832 0b_10000000,
833 /* 30 */
834 0b_10000000,
835 0b_01000000,
836 0b_00100000,
837 0b_00010000,
838 0b_00001000,
839 0b_00000100,
840 0b_00000010,
841 0b_00000001,
842 /* 31 */
843 0b_00000000,
844 0b_00010000,
845 0b_00010000,
846 0b_11111111,
847 0b_00010000,
848 0b_00010000,
849 0b_00000000,
850 0b_00000000,
851 /* 32 ' ' */
852 0b_00000000,
853 0b_00000000,
854 0b_00000000,
855 0b_00000000,
856 0b_00000000,
857 0b_00000000,
858 0b_00000000,
859 0b_00000000,
860 /* 33 '!' */
861 0b_00100000,
862 0b_00100000,
863 0b_00100000,
864 0b_00100000,
865 0b_00000000,
866 0b_00000000,
867 0b_00100000,
868 0b_00000000,
869 /* 34 '"' */
870 0b_01010000,
871 0b_01010000,
872 0b_01010000,
873 0b_00000000,
874 0b_00000000,
875 0b_00000000,
876 0b_00000000,
877 0b_00000000,
878 /* 35 '#' */
879 0b_01010000,
880 0b_01010000,
881 0b_11111000,
882 0b_01010000,
883 0b_11111000,
884 0b_01010000,
885 0b_01010000,
886 0b_00000000,
887 /* 36 '$' */
888 0b_00100000,
889 0b_01111000,
890 0b_10100000,
891 0b_01110000,
892 0b_00101000,
893 0b_11110000,
894 0b_00100000,
895 0b_00000000,
896 /* 37 '%' */
897 0b_11000000,
898 0b_11001000,
899 0b_00010000,
900 0b_00100000,
901 0b_01000000,
902 0b_10011000,
903 0b_00011000,
904 0b_00000000,
905 /* 38 '&' */
906 0b_01000000,
907 0b_10100000,
908 0b_01000000,
909 0b_10101000,
910 0b_10010000,
911 0b_10011000,
912 0b_01100000,
913 0b_00000000,
914 /* 39 ''' */
915 0b_00010000,
916 0b_00100000,
917 0b_01000000,
918 0b_00000000,
919 0b_00000000,
920 0b_00000000,
921 0b_00000000,
922 0b_00000000,
923 /* 40 '(' */
924 0b_00010000,
925 0b_00100000,
926 0b_01000000,
927 0b_01000000,
928 0b_01000000,
929 0b_00100000,
930 0b_00010000,
931 0b_00000000,
932 /* 41 ')' */
933 0b_01000000,
934 0b_00100000,
935 0b_00010000,
936 0b_00010000,
937 0b_00010000,
938 0b_00100000,
939 0b_01000000,
940 0b_00000000,
941 /* 42 '*' */
942 0b_10001000,
943 0b_01010000,
944 0b_00100000,
945 0b_11111000,
946 0b_00100000,
947 0b_01010000,
948 0b_10001000,
949 0b_00000000,
950 /* 43 '+' */
951 0b_00000000,
952 0b_00100000,
953 0b_00100000,
954 0b_11111000,
955 0b_00100000,
956 0b_00100000,
957 0b_00000000,
958 0b_00000000,
959 /* 44 ',' */
960 0b_00000000,
961 0b_00000000,
962 0b_00000000,
963 0b_00000000,
964 0b_00000000,
965 0b_00100000,
966 0b_00100000,
967 0b_01000000,
968 /* 45 '-' */
969 0b_00000000,
970 0b_00000000,
971 0b_00000000,
972 0b_01111000,
973 0b_00000000,
974 0b_00000000,
975 0b_00000000,
976 0b_00000000,
977 /* 46 '.' */
978 0b_00000000,
979 0b_00000000,
980 0b_00000000,
981 0b_00000000,
982 0b_00000000,
983 0b_01100000,
984 0b_01100000,
985 0b_00000000,
986 /* 47 '/' */
987 0b_00000000,
988 0b_00000000,
989 0b_00001000,
990 0b_00010000,
991 0b_00100000,
992 0b_01000000,
993 0b_10000000,
994 0b_00000000,
995 /* 48 '0' */
996 0b_01110000,
997 0b_10001000,
998 0b_10011000,
999 0b_10101000,
1000 0b_11001000,
1001 0b_10001000,
1002 0b_01110000,
1003 0b_00000000,
1004 /* 49 '1' */
1005 0b_00100000,
1006 0b_01100000,
1007 0b_10100000,
1008 0b_00100000,
1009 0b_00100000,
1010 0b_00100000,
1011 0b_11111000,
1012 0b_00000000,
1013 /* 50 '2' */
1014 0b_01110000,
1015 0b_10001000,
1016 0b_00001000,
1017 0b_00010000,
1018 0b_01100000,
1019 0b_10000000,
1020 0b_11111000,
1021 0b_00000000,
1022 /* 51 '3' */
1023 0b_01110000,
1024 0b_10001000,
1025 0b_00001000,
1026 0b_00110000,
1027 0b_00001000,
1028 0b_10001000,
1029 0b_01110000,
1030 0b_00000000,
1031 /* 52 '4' */
1032 0b_00010000,
1033 0b_00110000,
1034 0b_01010000,
1035 0b_10010000,
1036 0b_11111000,
1037 0b_00010000,
1038 0b_00010000,
1039 0b_00000000,
1040 /* 53 '5' */
1041 0b_11111000,
1042 0b_10000000,
1043 0b_11100000,
1044 0b_00010000,
1045 0b_00001000,
1046 0b_00010000,
1047 0b_11100000,
1048 0b_00000000,
1049 /* 54 '6' */
1050 0b_00110000,
1051 0b_01000000,
1052 0b_10000000,
1053 0b_11110000,
1054 0b_10001000,
1055 0b_10001000,
1056 0b_01110000,
1057 0b_00000000,
1058 /* 55 '7' */
1059 0b_11111000,
1060 0b_10001000,
1061 0b_00010000,
1062 0b_00100000,
1063 0b_00100000,
1064 0b_00100000,
1065 0b_00100000,
1066 0b_00000000,
1067 /* 56 '8' */
1068 0b_01110000,
1069 0b_10001000,
1070 0b_10001000,
1071 0b_01110000,
1072 0b_10001000,
1073 0b_10001000,
1074 0b_01110000,
1075 0b_00000000,
1076 /* 57 '9' */
1077 0b_01110000,
1078 0b_10001000,
1079 0b_10001000,
1080 0b_01111000,
1081 0b_00001000,
1082 0b_00010000,
1083 0b_01100000,
1084 0b_00000000,
1085 /* 58 ':' */
1086 0b_00000000,
1087 0b_00000000,
1088 0b_00100000,
1089 0b_00000000,
1090 0b_00000000,
1091 0b_00100000,
1092 0b_00000000,
1093 0b_00000000,
1094 /* 59 ';' */
1095 0b_00000000,
1096 0b_00000000,
1097 0b_00100000,
1098 0b_00000000,
1099 0b_00000000,
1100 0b_00100000,
1101 0b_00100000,
1102 0b_01000000,
1103 /* 60 '<' */
1104 0b_00011000,
1105 0b_00110000,
1106 0b_01100000,
1107 0b_11000000,
1108 0b_01100000,
1109 0b_00110000,
1110 0b_00011000,
1111 0b_00000000,
1112 /* 61 '=' */
1113 0b_00000000,
1114 0b_00000000,
1115 0b_11111000,
1116 0b_00000000,
1117 0b_11111000,
1118 0b_00000000,
1119 0b_00000000,
1120 0b_00000000,
1121 /* 62 '>' */
1122 0b_11000000,
1123 0b_01100000,
1124 0b_00110000,
1125 0b_00011000,
1126 0b_00110000,
1127 0b_01100000,
1128 0b_11000000,
1129 0b_00000000,
1130 /* 63 '?' */
1131 0b_01110000,
1132 0b_10001000,
1133 0b_00001000,
1134 0b_00010000,
1135 0b_00100000,
1136 0b_00000000,
1137 0b_00100000,
1138 0b_00000000,
1139 /* 64 '@' */
1140 0b_01110000,
1141 0b_10001000,
1142 0b_00001000,
1143 0b_01101000,
1144 0b_10101000,
1145 0b_10101000,
1146 0b_01110000,
1147 0b_00000000,
1148 /* 65 'A' */
1149 0b_00100000,
1150 0b_01010000,
1151 0b_10001000,
1152 0b_10001000,
1153 0b_11111000,
1154 0b_10001000,
1155 0b_10001000,
1156 0b_00000000,
1157 /* 66 'B' */
1158 0b_11110000,
1159 0b_01001000,
1160 0b_01001000,
1161 0b_01110000,
1162 0b_01001000,
1163 0b_01001000,
1164 0b_11110000,
1165 0b_00000000,
1166 /* 67 'C' */
1167 0b_00110000,
1168 0b_01001000,
1169 0b_10000000,
1170 0b_10000000,
1171 0b_10000000,
1172 0b_01001000,
1173 0b_00110000,
1174 0b_00000000,
1175 /* 68 'D' */
1176 0b_11100000,
1177 0b_01010000,
1178 0b_01001000,
1179 0b_01001000,
1180 0b_01001000,
1181 0b_01010000,
1182 0b_11100000,
1183 0b_00000000,
1184 /* 69 'E' */
1185 0b_11111000,
1186 0b_10000000,
1187 0b_10000000,
1188 0b_11110000,
1189 0b_10000000,
1190 0b_10000000,
1191 0b_11111000,
1192 0b_00000000,
1193 /* 70 'F' */
1194 0b_11111000,
1195 0b_10000000,
1196 0b_10000000,
1197 0b_11110000,
1198 0b_10000000,
1199 0b_10000000,
1200 0b_10000000,
1201 0b_00000000,
1202 /* 71 'G' */
1203 0b_01110000,
1204 0b_10001000,
1205 0b_10000000,
1206 0b_10111000,
1207 0b_10001000,
1208 0b_10001000,
1209 0b_01110000,
1210 0b_00000000,
1211 /* 72 'H' */
1212 0b_10001000,
1213 0b_10001000,
1214 0b_10001000,
1215 0b_11111000,
1216 0b_10001000,
1217 0b_10001000,
1218 0b_10001000,
1219 0b_00000000,
1220 /* 73 'I' */
1221 0b_01110000,
1222 0b_00100000,
1223 0b_00100000,
1224 0b_00100000,
1225 0b_00100000,
1226 0b_00100000,
1227 0b_01110000,
1228 0b_00000000,
1229 /* 74 'J' */
1230 0b_00111000,
1231 0b_00010000,
1232 0b_00010000,
1233 0b_00010000,
1234 0b_10010000,
1235 0b_10010000,
1236 0b_01100000,
1237 0b_00000000,
1238 /* 75 'K' */
1239 0b_10001000,
1240 0b_10010000,
1241 0b_10100000,
1242 0b_11000000,
1243 0b_10100000,
1244 0b_10010000,
1245 0b_10001000,
1246 0b_00000000,
1247 /* 76 'L' */
1248 0b_10000000,
1249 0b_10000000,
1250 0b_10000000,
1251 0b_10000000,
1252 0b_10000000,
1253 0b_10000000,
1254 0b_11111000,
1255 0b_00000000,
1256 /* 77 'M' */
1257 0b_10001000,
1258 0b_11011000,
1259 0b_10101000,
1260 0b_10101000,
1261 0b_10001000,
1262 0b_10001000,
1263 0b_10001000,
1264 0b_00000000,
1265 /* 78 'N' */
1266 0b_10001000,
1267 0b_11001000,
1268 0b_11001000,
1269 0b_10101000,
1270 0b_10011000,
1271 0b_10011000,
1272 0b_10001000,
1273 0b_00000000,
1274 /* 79 'O' */
1275 0b_01110000,
1276 0b_10001000,
1277 0b_10001000,
1278 0b_10001000,
1279 0b_10001000,
1280 0b_10001000,
1281 0b_01110000,
1282 0b_00000000,
1283 /* 80 'P' */
1284 0b_11110000,
1285 0b_10001000,
1286 0b_10001000,
1287 0b_11110000,
1288 0b_10000000,
1289 0b_10000000,
1290 0b_10000000,
1291 0b_00000000,
1292 /* 81 'Q' */
1293 0b_01110000,
1294 0b_10001000,
1295 0b_10001000,
1296 0b_10001000,
1297 0b_10101000,
1298 0b_10010000,
1299 0b_01101000,
1300 0b_00000000,
1301 /* 82 'R' */
1302 0b_11110000,
1303 0b_10001000,
1304 0b_10001000,
1305 0b_11110000,
1306 0b_10100000,
1307 0b_10010000,
1308 0b_10001000,
1309 0b_00000000,
1310 /* 83 'S' */
1311 0b_01110000,
1312 0b_10001000,
1313 0b_10000000,
1314 0b_01110000,
1315 0b_00001000,
1316 0b_10001000,
1317 0b_01110000,
1318 0b_00000000,
1319 /* 84 'T' */
1320 0b_11111000,
1321 0b_00100000,
1322 0b_00100000,
1323 0b_00100000,
1324 0b_00100000,
1325 0b_00100000,
1326 0b_00100000,
1327 0b_00000000,
1328 /* 85 'U' */
1329 0b_10001000,
1330 0b_10001000,
1331 0b_10001000,
1332 0b_10001000,
1333 0b_10001000,
1334 0b_10001000,
1335 0b_01110000,
1336 0b_00000000,
1337 /* 86 'V' */
1338 0b_10001000,
1339 0b_10001000,
1340 0b_10001000,
1341 0b_10001000,
1342 0b_01010000,
1343 0b_01010000,
1344 0b_00100000,
1345 0b_00000000,
1346 /* 87 'W' */
1347 0b_10001000,
1348 0b_10001000,
1349 0b_10001000,
1350 0b_10101000,
1351 0b_10101000,
1352 0b_11011000,
1353 0b_10001000,
1354 0b_00000000,
1355 /* 88 'X' */
1356 0b_10001000,
1357 0b_10001000,
1358 0b_01010000,
1359 0b_00100000,
1360 0b_01010000,
1361 0b_10001000,
1362 0b_10001000,
1363 0b_00000000,
1364 /* 89 'Y' */
1365 0b_10001000,
1366 0b_10001000,
1367 0b_10001000,
1368 0b_01110000,
1369 0b_00100000,
1370 0b_00100000,
1371 0b_00100000,
1372 0b_00000000,
1373 /* 90 'Z' */
1374 0b_11111000,
1375 0b_00001000,
1376 0b_00010000,
1377 0b_00100000,
1378 0b_01000000,
1379 0b_10000000,
1380 0b_11111000,
1381 0b_00000000,
1382 /* 91 '[' */
1383 0b_01110000,
1384 0b_01000000,
1385 0b_01000000,
1386 0b_01000000,
1387 0b_01000000,
1388 0b_01000000,
1389 0b_01110000,
1390 0b_00000000,
1391 /* 92 '\' */
1392 0b_00000000,
1393 0b_00000000,
1394 0b_10000000,
1395 0b_01000000,
1396 0b_00100000,
1397 0b_00010000,
1398 0b_00001000,
1399 0b_00000000,
1400 /* 93 ']' */
1401 0b_01110000,
1402 0b_00010000,
1403 0b_00010000,
1404 0b_00010000,
1405 0b_00010000,
1406 0b_00010000,
1407 0b_01110000,
1408 0b_00000000,
1409 /* 94 '^' */
1410 0b_00100000,
1411 0b_01010000,
1412 0b_10001000,
1413 0b_00000000,
1414 0b_00000000,
1415 0b_00000000,
1416 0b_00000000,
1417 0b_00000000,
1418 /* 95 '_' */
1419 0b_00000000,
1420 0b_00000000,
1421 0b_00000000,
1422 0b_00000000,
1423 0b_00000000,
1424 0b_00000000,
1425 0b_11111000,
1426 0b_00000000,
1427 /* 96 '`' */
1428 0b_01000000,
1429 0b_00100000,
1430 0b_00010000,
1431 0b_00000000,
1432 0b_00000000,
1433 0b_00000000,
1434 0b_00000000,
1435 0b_00000000,
1436 /* 97 'a' */
1437 0b_00000000,
1438 0b_00000000,
1439 0b_01110000,
1440 0b_00001000,
1441 0b_01111000,
1442 0b_10001000,
1443 0b_01111000,
1444 0b_00000000,
1445 /* 98 'b' */
1446 0b_10000000,
1447 0b_10000000,
1448 0b_10110000,
1449 0b_11001000,
1450 0b_10001000,
1451 0b_11001000,
1452 0b_10110000,
1453 0b_00000000,
1454 /* 99 'c' */
1455 0b_00000000,
1456 0b_00000000,
1457 0b_01110000,
1458 0b_10001000,
1459 0b_10000000,
1460 0b_10001000,
1461 0b_01110000,
1462 0b_00000000,
1463 /* 100 'd' */
1464 0b_00001000,
1465 0b_00001000,
1466 0b_01101000,
1467 0b_10011000,
1468 0b_10001000,
1469 0b_10011000,
1470 0b_01101000,
1471 0b_00000000,
1472 /* 101 'e' */
1473 0b_00000000,
1474 0b_00000000,
1475 0b_01110000,
1476 0b_10001000,
1477 0b_11111000,
1478 0b_10000000,
1479 0b_01110000,
1480 0b_00000000,
1481 /* 102 'f' */
1482 0b_00010000,
1483 0b_00101000,
1484 0b_00100000,
1485 0b_11111000,
1486 0b_00100000,
1487 0b_00100000,
1488 0b_00100000,
1489 0b_00000000,
1490 /* 103 'g' */
1491 0b_00000000,
1492 0b_00000000,
1493 0b_01101000,
1494 0b_10011000,
1495 0b_10011000,
1496 0b_01101000,
1497 0b_00001000,
1498 0b_01110000,
1499 /* 104 'h' */
1500 0b_10000000,
1501 0b_10000000,
1502 0b_11110000,
1503 0b_10001000,
1504 0b_10001000,
1505 0b_10001000,
1506 0b_10001000,
1507 0b_00000000,
1508 /* 105 'i' */
1509 0b_00100000,
1510 0b_00000000,
1511 0b_01100000,
1512 0b_00100000,
1513 0b_00100000,
1514 0b_00100000,
1515 0b_01110000,
1516 0b_00000000,
1517 /* 106 'j' */
1518 0b_00010000,
1519 0b_00000000,
1520 0b_00110000,
1521 0b_00010000,
1522 0b_00010000,
1523 0b_00010000,
1524 0b_10010000,
1525 0b_01100000,
1526 /* 107 'k' */
1527 0b_01000000,
1528 0b_01000000,
1529 0b_01001000,
1530 0b_01010000,
1531 0b_01100000,
1532 0b_01010000,
1533 0b_01001000,
1534 0b_00000000,
1535 /* 108 'l' */
1536 0b_01100000,
1537 0b_00100000,
1538 0b_00100000,
1539 0b_00100000,
1540 0b_00100000,
1541 0b_00100000,
1542 0b_01110000,
1543 0b_00000000,
1544 /* 109 'm' */
1545 0b_00000000,
1546 0b_00000000,
1547 0b_11010000,
1548 0b_10101000,
1549 0b_10101000,
1550 0b_10101000,
1551 0b_10101000,
1552 0b_00000000,
1553 /* 110 'n' */
1554 0b_00000000,
1555 0b_00000000,
1556 0b_10110000,
1557 0b_11001000,
1558 0b_10001000,
1559 0b_10001000,
1560 0b_10001000,
1561 0b_00000000,
1562 /* 111 'o' */
1563 0b_00000000,
1564 0b_00000000,
1565 0b_01110000,
1566 0b_10001000,
1567 0b_10001000,
1568 0b_10001000,
1569 0b_01110000,
1570 0b_00000000,
1571 /* 112 'p' */
1572 0b_00000000,
1573 0b_00000000,
1574 0b_10110000,
1575 0b_11001000,
1576 0b_11001000,
1577 0b_10110000,
1578 0b_10000000,
1579 0b_10000000,
1580 /* 113 'q' */
1581 0b_00000000,
1582 0b_00000000,
1583 0b_01101000,
1584 0b_10011000,
1585 0b_10011000,
1586 0b_01101000,
1587 0b_00001000,
1588 0b_00001000,
1589 /* 114 'r' */
1590 0b_00000000,
1591 0b_00000000,
1592 0b_10110000,
1593 0b_11001000,
1594 0b_10000000,
1595 0b_10000000,
1596 0b_10000000,
1597 0b_00000000,
1598 /* 115 's' */
1599 0b_00000000,
1600 0b_00000000,
1601 0b_01111000,
1602 0b_10000000,
1603 0b_11110000,
1604 0b_00001000,
1605 0b_11110000,
1606 0b_00000000,
1607 /* 116 't' */
1608 0b_01000000,
1609 0b_01000000,
1610 0b_11110000,
1611 0b_01000000,
1612 0b_01000000,
1613 0b_01001000,
1614 0b_00110000,
1615 0b_00000000,
1616 /* 117 'u' */
1617 0b_00000000,
1618 0b_00000000,
1619 0b_10010000,
1620 0b_10010000,
1621 0b_10010000,
1622 0b_10010000,
1623 0b_01101000,
1624 0b_00000000,
1625 /* 118 'v' */
1626 0b_00000000,
1627 0b_00000000,
1628 0b_10001000,
1629 0b_10001000,
1630 0b_10001000,
1631 0b_01010000,
1632 0b_00100000,
1633 0b_00000000,
1634 /* 119 'w' */
1635 0b_00000000,
1636 0b_00000000,
1637 0b_10001000,
1638 0b_10101000,
1639 0b_10101000,
1640 0b_10101000,
1641 0b_01010000,
1642 0b_00000000,
1643 /* 120 'x' */
1644 0b_00000000,
1645 0b_00000000,
1646 0b_10001000,
1647 0b_01010000,
1648 0b_00100000,
1649 0b_01010000,
1650 0b_10001000,
1651 0b_00000000,
1652 /* 121 'y' */
1653 0b_00000000,
1654 0b_00000000,
1655 0b_10001000,
1656 0b_10001000,
1657 0b_10011000,
1658 0b_01101000,
1659 0b_00001000,
1660 0b_01110000,
1661 /* 122 'z' */
1662 0b_00000000,
1663 0b_00000000,
1664 0b_11111000,
1665 0b_00010000,
1666 0b_00100000,
1667 0b_01000000,
1668 0b_11111000,
1669 0b_00000000,
1670 /* 123 '{' */
1671 0b_00011000,
1672 0b_00100000,
1673 0b_00100000,
1674 0b_01000000,
1675 0b_00100000,
1676 0b_00100000,
1677 0b_00011000,
1678 0b_00000000,
1679 /* 124 '|' */
1680 0b_00100000,
1681 0b_00100000,
1682 0b_00100000,
1683 0b_00000000,
1684 0b_00100000,
1685 0b_00100000,
1686 0b_00100000,
1687 0b_00000000,
1688 /* 125 '}' */
1689 0b_11000000,
1690 0b_00100000,
1691 0b_00100000,
1692 0b_00010000,
1693 0b_00100000,
1694 0b_00100000,
1695 0b_11000000,
1696 0b_00000000,
1697 /* 126 '~' */
1698 0b_01000000,
1699 0b_10101000,
1700 0b_00010000,
1701 0b_00000000,
1702 0b_00000000,
1703 0b_00000000,
1704 0b_00000000,
1705 0b_00000000,
1706 /* 127 */
1707 0b_00000000,
1708 0b_00000000,
1709 0b_00100000,
1710 0b_01010000,
1711 0b_11111000,
1712 0b_00000000,
1713 0b_00000000,
1714 0b_00000000,
1715 /* 128 */
1716 0b_00000000,
1717 0b_00000000,
1718 0b_00000000,
1719 0b_00000000,
1720 0b_00000000,
1721 0b_00000000,
1722 0b_11111111,
1723 0b_11111111,
1724 /* 129 */
1725 0b_11110000,
1726 0b_11110000,
1727 0b_11110000,
1728 0b_11110000,
1729 0b_00001111,
1730 0b_00001111,
1731 0b_00001111,
1732 0b_00001111,
1733 /* 130 */
1734 0b_00000000,
1735 0b_00000000,
1736 0b_11111111,
1737 0b_11111111,
1738 0b_11111111,
1739 0b_11111111,
1740 0b_11111111,
1741 0b_11111111,
1742 /* 131 */
1743 0b_11111111,
1744 0b_11111111,
1745 0b_00000000,
1746 0b_00000000,
1747 0b_00000000,
1748 0b_00000000,
1749 0b_00000000,
1750 0b_00000000,
1751 /* 132 */
1752 0b_00000000,
1753 0b_00000000,
1754 0b_00000000,
1755 0b_00111100,
1756 0b_00111100,
1757 0b_00000000,
1758 0b_00000000,
1759 0b_00000000,
1760 /* 133 */
1761 0b_11111111,
1762 0b_11111111,
1763 0b_11111111,
1764 0b_11111111,
1765 0b_11111111,
1766 0b_11111111,
1767 0b_00000000,
1768 0b_00000000,
1769 /* 134 */
1770 0b_11000000,
1771 0b_11000000,
1772 0b_11000000,
1773 0b_11000000,
1774 0b_11000000,
1775 0b_11000000,
1776 0b_11000000,
1777 0b_11000000,
1778 /* 135 */
1779 0b_00001111,
1780 0b_00001111,
1781 0b_00001111,
1782 0b_00001111,
1783 0b_11110000,
1784 0b_11110000,
1785 0b_11110000,
1786 0b_11110000,
1787 /* 136 */
1788 0b_11111100,
1789 0b_11111100,
1790 0b_11111100,
1791 0b_11111100,
1792 0b_11111100,
1793 0b_11111100,
1794 0b_11111100,
1795 0b_11111100,
1796 /* 137 */
1797 0b_00000011,
1798 0b_00000011,
1799 0b_00000011,
1800 0b_00000011,
1801 0b_00000011,
1802 0b_00000011,
1803 0b_00000011,
1804 0b_00000011,
1805 /* 138 */
1806 0b_00111111,
1807 0b_00111111,
1808 0b_00111111,
1809 0b_00111111,
1810 0b_00111111,
1811 0b_00111111,
1812 0b_00111111,
1813 0b_00111111,
1814 /* 139 */
1815 0b_00010001,
1816 0b_00100010,
1817 0b_01000100,
1818 0b_10001000,
1819 0b_00010001,
1820 0b_00100010,
1821 0b_01000100,
1822 0b_10001000,
1823 /* 140 */
1824 0b_10001000,
1825 0b_01000100,
1826 0b_00100010,
1827 0b_00010001,
1828 0b_10001000,
1829 0b_01000100,
1830 0b_00100010,
1831 0b_00010001,
1832 /* 141 */
1833 0b_11111110,
1834 0b_01111100,
1835 0b_00111000,
1836 0b_00010000,
1837 0b_00000000,
1838 0b_00000000,
1839 0b_00000000,
1840 0b_00000000,
1841 /* 142 */
1842 0b_00000000,
1843 0b_00000000,
1844 0b_00000000,
1845 0b_00000000,
1846 0b_00010000,
1847 0b_00111000,
1848 0b_01111100,
1849 0b_11111110,
1850 /* 143 */
1851 0b_10000000,
1852 0b_11000000,
1853 0b_11100000,
1854 0b_11110000,
1855 0b_11100000,
1856 0b_11000000,
1857 0b_10000000,
1858 0b_00000000,
1859 /* 144 */
1860 0b_00000001,
1861 0b_00000011,
1862 0b_00000111,
1863 0b_00001111,
1864 0b_00000111,
1865 0b_00000011,
1866 0b_00000001,
1867 0b_00000000,
1868 /* 145 */
1869 0b_11111111,
1870 0b_01111110,
1871 0b_00111100,
1872 0b_00011000,
1873 0b_00011000,
1874 0b_00111100,
1875 0b_01111110,
1876 0b_11111111,
1877 /* 146 */
1878 0b_10000001,
1879 0b_11000011,
1880 0b_11100111,
1881 0b_11111111,
1882 0b_11111111,
1883 0b_11100111,
1884 0b_11000011,
1885 0b_10000001,
1886 /* 147 */
1887 0b_11110000,
1888 0b_11110000,
1889 0b_11110000,
1890 0b_11110000,
1891 0b_00000000,
1892 0b_00000000,
1893 0b_00000000,
1894 0b_00000000,
1895 /* 148 */
1896 0b_00000000,
1897 0b_00000000,
1898 0b_00000000,
1899 0b_00000000,
1900 0b_00001111,
1901 0b_00001111,
1902 0b_00001111,
1903 0b_00001111,
1904 /* 149 */
1905 0b_00001111,
1906 0b_00001111,
1907 0b_00001111,
1908 0b_00001111,
1909 0b_00000000,
1910 0b_00000000,
1911 0b_00000000,
1912 0b_00000000,
1913 /* 150 */
1914 0b_00000000,
1915 0b_00000000,
1916 0b_00000000,
1917 0b_00000000,
1918 0b_11110000,
1919 0b_11110000,
1920 0b_11110000,
1921 0b_11110000,
1922 /* 151 */
1923 0b_00110011,
1924 0b_00110011,
1925 0b_11001100,
1926 0b_11001100,
1927 0b_00110011,
1928 0b_00110011,
1929 0b_11001100,
1930 0b_11001100,
1931 /* 152 */
1932 0b_00000000,
1933 0b_00100000,
1934 0b_00100000,
1935 0b_01010000,
1936 0b_01010000,
1937 0b_10001000,
1938 0b_11111000,
1939 0b_00000000,
1940 /* 153 */
1941 0b_00100000,
1942 0b_00100000,
1943 0b_01110000,
1944 0b_00100000,
1945 0b_01110000,
1946 0b_00100000,
1947 0b_00100000,
1948 0b_00000000,
1949 /* 154 */
1950 0b_00000000,
1951 0b_00000000,
1952 0b_00000000,
1953 0b_01010000,
1954 0b_10001000,
1955 0b_10101000,
1956 0b_01010000,
1957 0b_00000000,
1958 /* 155 */
1959 0b_11111111,
1960 0b_11111111,
1961 0b_11111111,
1962 0b_11111111,
1963 0b_11111111,
1964 0b_11111111,
1965 0b_11111111,
1966 0b_11111111,
1967 /* 156 */
1968 0b_00000000,
1969 0b_00000000,
1970 0b_00000000,
1971 0b_00000000,
1972 0b_11111111,
1973 0b_11111111,
1974 0b_11111111,
1975 0b_11111111,
1976 /* 157 */
1977 0b_11110000,
1978 0b_11110000,
1979 0b_11110000,
1980 0b_11110000,
1981 0b_11110000,
1982 0b_11110000,
1983 0b_11110000,
1984 0b_11110000,
1985 /* 158 */
1986 0b_00001111,
1987 0b_00001111,
1988 0b_00001111,
1989 0b_00001111,
1990 0b_00001111,
1991 0b_00001111,
1992 0b_00001111,
1993 0b_00001111,
1994 /* 159 */
1995 0b_11111111,
1996 0b_11111111,
1997 0b_11111111,
1998 0b_11111111,
1999 0b_00000000,
2000 0b_00000000,
2001 0b_00000000,
2002 0b_00000000,
2003 /* 160 */
2004 0b_00000000,
2005 0b_00000000,
2006 0b_01101000,
2007 0b_10010000,
2008 0b_10010000,
2009 0b_10010000,
2010 0b_01101000,
2011 0b_00000000,
2012 /* 161 */
2013 0b_00110000,
2014 0b_01001000,
2015 0b_01001000,
2016 0b_01110000,
2017 0b_01001000,
2018 0b_01001000,
2019 0b_01110000,
2020 0b_11000000,
2021 /* 162 */
2022 0b_11111000,
2023 0b_10001000,
2024 0b_10000000,
2025 0b_10000000,
2026 0b_10000000,
2027 0b_10000000,
2028 0b_10000000,
2029 0b_00000000,
2030 /* 163 */
2031 0b_00000000,
2032 0b_01010000,
2033 0b_01110000,
2034 0b_10001000,
2035 0b_11111000,
2036 0b_10000000,
2037 0b_01110000,
2038 0b_00000000,
2039 /* 164 */
2040 0b_00000000,
2041 0b_00000000,
2042 0b_01111000,
2043 0b_10000000,
2044 0b_11110000,
2045 0b_10000000,
2046 0b_01111000,
2047 0b_00000000,
2048 /* 165 */
2049 0b_00000000,
2050 0b_00000000,
2051 0b_01111000,
2052 0b_10010000,
2053 0b_10010000,
2054 0b_10010000,
2055 0b_01100000,
2056 0b_00000000,
2057 /* 166 */
2058 0b_00100000,
2059 0b_00000000,
2060 0b_01100000,
2061 0b_00100000,
2062 0b_00100000,
2063 0b_00100000,
2064 0b_01110000,
2065 0b_00000000,
2066 /* 167 */
2067 0b_01010000,
2068 0b_00000000,
2069 0b_01110000,
2070 0b_00100000,
2071 0b_00100000,
2072 0b_00100000,
2073 0b_01110000,
2074 0b_00000000,
2075 /* 168 */
2076 0b_11111000,
2077 0b_00100000,
2078 0b_01110000,
2079 0b_10101000,
2080 0b_10101000,
2081 0b_01110000,
2082 0b_00100000,
2083 0b_11111000,
2084 /* 169 */
2085 0b_00100000,
2086 0b_01010000,
2087 0b_10001000,
2088 0b_11111000,
2089 0b_10001000,
2090 0b_01010000,
2091 0b_00100000,
2092 0b_00000000,
2093 /* 170 */
2094 0b_01110000,
2095 0b_10001000,
2096 0b_10001000,
2097 0b_10001000,
2098 0b_01010000,
2099 0b_01010000,
2100 0b_11011000,
2101 0b_00000000,
2102 /* 171 */
2103 0b_00110000,
2104 0b_01000000,
2105 0b_01000000,
2106 0b_00100000,
2107 0b_01010000,
2108 0b_01010000,
2109 0b_01010000,
2110 0b_00100000,
2111 /* 172 */
2112 0b_00000000,
2113 0b_00000000,
2114 0b_00000000,
2115 0b_01010000,
2116 0b_10101000,
2117 0b_10101000,
2118 0b_01010000,
2119 0b_00000000,
2120 /* 173 */
2121 0b_00001000,
2122 0b_01110000,
2123 0b_10101000,
2124 0b_10101000,
2125 0b_10101000,
2126 0b_01110000,
2127 0b_10000000,
2128 0b_00000000,
2129 /* 174 */
2130 0b_00111000,
2131 0b_01000000,
2132 0b_10000000,
2133 0b_11111000,
2134 0b_10000000,
2135 0b_01000000,
2136 0b_00111000,
2137 0b_00000000,
2138 /* 175 */
2139 0b_01110000,
2140 0b_10001000,
2141 0b_10001000,
2142 0b_10001000,
2143 0b_10001000,
2144 0b_10001000,
2145 0b_10001000,
2146 0b_00000000,
2147 /* 176 */
2148 0b_00000000,
2149 0b_11111000,
2150 0b_00000000,
2151 0b_11111000,
2152 0b_00000000,
2153 0b_11111000,
2154 0b_00000000,
2155 0b_00000000,
2156 /* 177 */
2157 0b_00100000,
2158 0b_00100000,
2159 0b_11111000,
2160 0b_00100000,
2161 0b_00100000,
2162 0b_00000000,
2163 0b_11111000,
2164 0b_00000000,
2165 /* 178 */
2166 0b_11000000,
2167 0b_00110000,
2168 0b_00001000,
2169 0b_00110000,
2170 0b_11000000,
2171 0b_00000000,
2172 0b_11111000,
2173 0b_00000000,
2174 /* 179 */
2175 0b_01010000,
2176 0b_11111000,
2177 0b_10000000,
2178 0b_11110000,
2179 0b_10000000,
2180 0b_10000000,
2181 0b_11111000,
2182 0b_00000000,
2183 /* 180 */
2184 0b_01111000,
2185 0b_10000000,
2186 0b_10000000,
2187 0b_11110000,
2188 0b_10000000,
2189 0b_10000000,
2190 0b_01111000,
2191 0b_00000000,
2192 /* 181 */
2193 0b_00100000,
2194 0b_00100000,
2195 0b_00100000,
2196 0b_00100000,
2197 0b_00100000,
2198 0b_00100000,
2199 0b_10100000,
2200 0b_01000000,
2201 /* 182 */
2202 0b_01110000,
2203 0b_00100000,
2204 0b_00100000,
2205 0b_00100000,
2206 0b_00100000,
2207 0b_00100000,
2208 0b_01110000,
2209 0b_00000000,
2210 /* 183 */
2211 0b_01010000,
2212 0b_01110000,
2213 0b_00100000,
2214 0b_00100000,
2215 0b_00100000,
2216 0b_00100000,
2217 0b_01110000,
2218 0b_00000000,
2219 /* 184 */
2220 0b_00000000,
2221 0b_00011000,
2222 0b_00100100,
2223 0b_00100100,
2224 0b_00011000,
2225 0b_00000000,
2226 0b_00000000,
2227 0b_00000000,
2228 /* 185 */
2229 0b_00000000,
2230 0b_00110000,
2231 0b_01111000,
2232 0b_01111000,
2233 0b_00110000,
2234 0b_00000000,
2235 0b_00000000,
2236 0b_00000000,
2237 /* 186 */
2238 0b_00000000,
2239 0b_00000000,
2240 0b_00000000,
2241 0b_00000000,
2242 0b_00110000,
2243 0b_00000000,
2244 0b_00000000,
2245 0b_00000000,
2246 /* 187 */
2247 0b_00111110,
2248 0b_00100000,
2249 0b_00100000,
2250 0b_00100000,
2251 0b_10100000,
2252 0b_01100000,
2253 0b_00100000,
2254 0b_00000000,
2255 /* 188 */
2256 0b_10100000,
2257 0b_01010000,
2258 0b_01010000,
2259 0b_01010000,
2260 0b_00000000,
2261 0b_00000000,
2262 0b_00000000,
2263 0b_00000000,
2264 /* 189 */
2265 0b_01000000,
2266 0b_10100000,
2267 0b_00100000,
2268 0b_01000000,
2269 0b_11100000,
2270 0b_00000000,
2271 0b_00000000,
2272 0b_00000000,
2273 /* 190 */
2274 0b_00000000,
2275 0b_00111000,
2276 0b_00111000,
2277 0b_00111000,
2278 0b_00111000,
2279 0b_00111000,
2280 0b_00111000,
2281 0b_00000000,
2282 /* 191 */
2283 0b_00111100,
2284 0b_01000010,
2285 0b_10011001,
2286 0b_10100001,
2287 0b_10100001,
2288 0b_10011001,
2289 0b_01000010,
2290 0b_00111100,
2291 /* 192 */
2292 0b_00000000,
2293 0b_00000000,
2294 0b_10010000,
2295 0b_10101000,
2296 0b_11101000,
2297 0b_10101000,
2298 0b_10010000,
2299 0b_00000000,
2300 /* 193 */
2301 0b_00000000,
2302 0b_00000000,
2303 0b_01100000,
2304 0b_00010000,
2305 0b_01110000,
2306 0b_10010000,
2307 0b_01101000,
2308 0b_00000000,
2309 /* 194 */
2310 0b_00000000,
2311 0b_00000000,
2312 0b_11110000,
2313 0b_10000000,
2314 0b_11110000,
2315 0b_10001000,
2316 0b_11110000,
2317 0b_00000000,
2318 /* 195 */
2319 0b_00000000,
2320 0b_00000000,
2321 0b_10010000,
2322 0b_10010000,
2323 0b_10010000,
2324 0b_11111000,
2325 0b_00001000,
2326 0b_00000000,
2327 /* 196 */
2328 0b_00000000,
2329 0b_00000000,
2330 0b_00110000,
2331 0b_01010000,
2332 0b_01010000,
2333 0b_01110000,
2334 0b_10001000,
2335 0b_00000000,
2336 /* 197 */
2337 0b_00000000,
2338 0b_00000000,
2339 0b_01110000,
2340 0b_10001000,
2341 0b_11111000,
2342 0b_10000000,
2343 0b_01110000,
2344 0b_00000000,
2345 /* 198 */
2346 0b_00000000,
2347 0b_00100000,
2348 0b_01110000,
2349 0b_10101000,
2350 0b_10101000,
2351 0b_01110000,
2352 0b_00100000,
2353 0b_00000000,
2354 /* 199 */
2355 0b_00000000,
2356 0b_00000000,
2357 0b_01111000,
2358 0b_01001000,
2359 0b_01000000,
2360 0b_01000000,
2361 0b_01000000,
2362 0b_00000000,
2363 /* 200 */
2364 0b_00000000,
2365 0b_00000000,
2366 0b_10001000,
2367 0b_01010000,
2368 0b_00100000,
2369 0b_01010000,
2370 0b_10001000,
2371 0b_00000000,
2372 /* 201 */
2373 0b_00000000,
2374 0b_00000000,
2375 0b_10001000,
2376 0b_10011000,
2377 0b_10101000,
2378 0b_11001000,
2379 0b_10001000,
2380 0b_00000000,
2381 /* 202 */
2382 0b_00000000,
2383 0b_01010000,
2384 0b_00100000,
2385 0b_00000000,
2386 0b_10011000,
2387 0b_10101000,
2388 0b_11001000,
2389 0b_00000000,
2390 /* 203 */
2391 0b_00000000,
2392 0b_00000000,
2393 0b_10010000,
2394 0b_10100000,
2395 0b_11000000,
2396 0b_10100000,
2397 0b_10010000,
2398 0b_00000000,
2399 /* 204 */
2400 0b_00000000,
2401 0b_00000000,
2402 0b_00111000,
2403 0b_00101000,
2404 0b_00101000,
2405 0b_01001000,
2406 0b_10001000,
2407 0b_00000000,
2408 /* 205 */
2409 0b_00000000,
2410 0b_00000000,
2411 0b_10001000,
2412 0b_11011000,
2413 0b_10101000,
2414 0b_10001000,
2415 0b_10001000,
2416 0b_00000000,
2417 /* 206 */
2418 0b_00000000,
2419 0b_00000000,
2420 0b_10001000,
2421 0b_10001000,
2422 0b_11111000,
2423 0b_10001000,
2424 0b_10001000,
2425 0b_00000000,
2426 /* 207 */
2427 0b_00000000,
2428 0b_00000000,
2429 0b_01110000,
2430 0b_10001000,
2431 0b_10001000,
2432 0b_10001000,
2433 0b_01110000,
2434 0b_00000000,
2435 /* 208 */
2436 0b_00000000,
2437 0b_00000000,
2438 0b_01111000,
2439 0b_01001000,
2440 0b_01001000,
2441 0b_01001000,
2442 0b_01001000,
2443 0b_00000000,
2444 /* 209 */
2445 0b_00000000,
2446 0b_00000000,
2447 0b_01111000,
2448 0b_10001000,
2449 0b_01111000,
2450 0b_00101000,
2451 0b_01001000,
2452 0b_00000000,
2453 /* 210 */
2454 0b_00000000,
2455 0b_00000000,
2456 0b_11110000,
2457 0b_10001000,
2458 0b_11110000,
2459 0b_10000000,
2460 0b_10000000,
2461 0b_00000000,
2462 /* 211 */
2463 0b_00000000,
2464 0b_00000000,
2465 0b_01111000,
2466 0b_10000000,
2467 0b_10000000,
2468 0b_10000000,
2469 0b_01111000,
2470 0b_00000000,
2471 /* 212 */
2472 0b_00000000,
2473 0b_00000000,
2474 0b_11111000,
2475 0b_00100000,
2476 0b_00100000,
2477 0b_00100000,
2478 0b_00100000,
2479 0b_00000000,
2480 /* 213 */
2481 0b_00000000,
2482 0b_00000000,
2483 0b_10001000,
2484 0b_01010000,
2485 0b_00100000,
2486 0b_01000000,
2487 0b_10000000,
2488 0b_00000000,
2489 /* 214 */
2490 0b_00000000,
2491 0b_00000000,
2492 0b_10101000,
2493 0b_01110000,
2494 0b_00100000,
2495 0b_01110000,
2496 0b_10101000,
2497 0b_00000000,
2498 /* 215 */
2499 0b_00000000,
2500 0b_00000000,
2501 0b_11110000,
2502 0b_01001000,
2503 0b_01110000,
2504 0b_01001000,
2505 0b_11110000,
2506 0b_00000000,
2507 /* 216 */
2508 0b_00000000,
2509 0b_00000000,
2510 0b_01000000,
2511 0b_01000000,
2512 0b_01110000,
2513 0b_01001000,
2514 0b_01110000,
2515 0b_00000000,
2516 /* 217 */
2517 0b_00000000,
2518 0b_00000000,
2519 0b_10001000,
2520 0b_10001000,
2521 0b_11001000,
2522 0b_10101000,
2523 0b_11001000,
2524 0b_00000000,
2525 /* 218 */
2526 0b_00000000,
2527 0b_00000000,
2528 0b_11110000,
2529 0b_00001000,
2530 0b_01110000,
2531 0b_00001000,
2532 0b_11110000,
2533 0b_00000000,
2534 /* 219 */
2535 0b_00000000,
2536 0b_00000000,
2537 0b_10101000,
2538 0b_10101000,
2539 0b_10101000,
2540 0b_10101000,
2541 0b_11111000,
2542 0b_00000000,
2543 /* 220 */
2544 0b_00000000,
2545 0b_00000000,
2546 0b_01110000,
2547 0b_10001000,
2548 0b_00111000,
2549 0b_10001000,
2550 0b_01110000,
2551 0b_00000000,
2552 /* 221 */
2553 0b_00000000,
2554 0b_00000000,
2555 0b_10101000,
2556 0b_10101000,
2557 0b_10101000,
2558 0b_11111000,
2559 0b_00001000,
2560 0b_00000000,
2561 /* 222 */
2562 0b_00000000,
2563 0b_00000000,
2564 0b_01001000,
2565 0b_01001000,
2566 0b_01111000,
2567 0b_00001000,
2568 0b_00001000,
2569 0b_00000000,
2570 /* 223 */
2571 0b_00000000,
2572 0b_00000000,
2573 0b_11000000,
2574 0b_01000000,
2575 0b_01110000,
2576 0b_01001000,
2577 0b_01110000,
2578 0b_00000000,
2579 /* 224 */
2580 0b_10010000,
2581 0b_10101000,
2582 0b_10101000,
2583 0b_11101000,
2584 0b_10101000,
2585 0b_10101000,
2586 0b_10010000,
2587 0b_00000000,
2588 /* 225 */
2589 0b_00100000,
2590 0b_01010000,
2591 0b_10001000,
2592 0b_10001000,
2593 0b_11111000,
2594 0b_10001000,
2595 0b_10001000,
2596 0b_00000000,
2597 /* 226 */
2598 0b_11111000,
2599 0b_10001000,
2600 0b_10000000,
2601 0b_11110000,
2602 0b_10001000,
2603 0b_10001000,
2604 0b_11110000,
2605 0b_00000000,
2606 /* 227 */
2607 0b_10010000,
2608 0b_10010000,
2609 0b_10010000,
2610 0b_10010000,
2611 0b_10010000,
2612 0b_11111000,
2613 0b_00001000,
2614 0b_00000000,
2615 /* 228 */
2616 0b_00111000,
2617 0b_00101000,
2618 0b_00101000,
2619 0b_01001000,
2620 0b_01001000,
2621 0b_11111000,
2622 0b_10001000,
2623 0b_00000000,
2624 /* 229 */
2625 0b_11111000,
2626 0b_10000000,
2627 0b_10000000,
2628 0b_11110000,
2629 0b_10000000,
2630 0b_10000000,
2631 0b_11111000,
2632 0b_00000000,
2633 /* 230 */
2634 0b_00100000,
2635 0b_01110000,
2636 0b_10101000,
2637 0b_10101000,
2638 0b_10101000,
2639 0b_01110000,
2640 0b_00100000,
2641 0b_00000000,
2642 /* 231 */
2643 0b_11111000,
2644 0b_10001000,
2645 0b_10001000,
2646 0b_10000000,
2647 0b_10000000,
2648 0b_10000000,
2649 0b_10000000,
2650 0b_00000000,
2651 /* 232 */
2652 0b_10001000,
2653 0b_10001000,
2654 0b_01010000,
2655 0b_00100000,
2656 0b_01010000,
2657 0b_10001000,
2658 0b_10001000,
2659 0b_00000000,
2660 /* 233 */
2661 0b_10001000,
2662 0b_10001000,
2663 0b_10011000,
2664 0b_10101000,
2665 0b_11001000,
2666 0b_10001000,
2667 0b_10001000,
2668 0b_00000000,
2669 /* 234 */
2670 0b_01010000,
2671 0b_00100000,
2672 0b_10001000,
2673 0b_10011000,
2674 0b_10101000,
2675 0b_11001000,
2676 0b_10001000,
2677 0b_00000000,
2678 /* 235 */
2679 0b_10001000,
2680 0b_10010000,
2681 0b_10100000,
2682 0b_11000000,
2683 0b_10100000,
2684 0b_10010000,
2685 0b_10001000,
2686 0b_00000000,
2687 /* 236 */
2688 0b_00011000,
2689 0b_00101000,
2690 0b_01001000,
2691 0b_01001000,
2692 0b_01001000,
2693 0b_01001000,
2694 0b_10001000,
2695 0b_00000000,
2696 /* 237 */
2697 0b_10001000,
2698 0b_11011000,
2699 0b_10101000,
2700 0b_10101000,
2701 0b_10001000,
2702 0b_10001000,
2703 0b_10001000,
2704 0b_00000000,
2705 /* 238 */
2706 0b_10001000,
2707 0b_10001000,
2708 0b_10001000,
2709 0b_11111000,
2710 0b_10001000,
2711 0b_10001000,
2712 0b_10001000,
2713 0b_00000000,
2714 /* 239 */
2715 0b_01110000,
2716 0b_10001000,
2717 0b_10001000,
2718 0b_10001000,
2719 0b_10001000,
2720 0b_10001000,
2721 0b_01110000,
2722 0b_00000000,
2723 /* 240 */
2724 0b_11111000,
2725 0b_10001000,
2726 0b_10001000,
2727 0b_10001000,
2728 0b_10001000,
2729 0b_10001000,
2730 0b_10001000,
2731 0b_00000000,
2732 /* 241 */
2733 0b_01111000,
2734 0b_10001000,
2735 0b_10001000,
2736 0b_01111000,
2737 0b_00101000,
2738 0b_01001000,
2739 0b_10001000,
2740 0b_00000000,
2741 /* 242 */
2742 0b_11110000,
2743 0b_10001000,
2744 0b_10001000,
2745 0b_11110000,
2746 0b_10000000,
2747 0b_10000000,
2748 0b_10000000,
2749 0b_00000000,
2750 /* 243 */
2751 0b_01110000,
2752 0b_10001000,
2753 0b_10000000,
2754 0b_10000000,
2755 0b_10000000,
2756 0b_10001000,
2757 0b_01110000,
2758 0b_00000000,
2759 /* 244 */
2760 0b_11111000,
2761 0b_00100000,
2762 0b_00100000,
2763 0b_00100000,
2764 0b_00100000,
2765 0b_00100000,
2766 0b_00100000,
2767 0b_00000000,
2768 /* 245 */
2769 0b_10001000,
2770 0b_10001000,
2771 0b_10001000,
2772 0b_01010000,
2773 0b_00100000,
2774 0b_01000000,
2775 0b_10000000,
2776 0b_00000000,
2777 /* 246 */
2778 0b_10101000,
2779 0b_10101000,
2780 0b_01110000,
2781 0b_00100000,
2782 0b_01110000,
2783 0b_10101000,
2784 0b_10101000,
2785 0b_00000000,
2786 /* 247 */
2787 0b_11110000,
2788 0b_01001000,
2789 0b_01001000,
2790 0b_01110000,
2791 0b_01001000,
2792 0b_01001000,
2793 0b_11110000,
2794 0b_00000000,
2795 /* 248 */
2796 0b_10000000,
2797 0b_10000000,
2798 0b_10000000,
2799 0b_11110000,
2800 0b_10001000,
2801 0b_10001000,
2802 0b_11110000,
2803 0b_00000000,
2804 /* 249 */
2805 0b_10001000,
2806 0b_10001000,
2807 0b_10001000,
2808 0b_11001000,
2809 0b_10101000,
2810 0b_10101000,
2811 0b_11001000,
2812 0b_00000000,
2813 /* 250 */
2814 0b_11110000,
2815 0b_00001000,
2816 0b_00001000,
2817 0b_00110000,
2818 0b_00001000,
2819 0b_00001000,
2820 0b_11110000,
2821 0b_00000000,
2822 /* 251 */
2823 0b_10101000,
2824 0b_10101000,
2825 0b_10101000,
2826 0b_10101000,
2827 0b_10101000,
2828 0b_10101000,
2829 0b_11111000,
2830 0b_00000000,
2831 /* 252 */
2832 0b_01110000,
2833 0b_10001000,
2834 0b_00001000,
2835 0b_01111000,
2836 0b_00001000,
2837 0b_10001000,
2838 0b_01110000,
2839 0b_00000000,
2840 /* 253 */
2841 0b_10101000,
2842 0b_10101000,
2843 0b_10101000,
2844 0b_10101000,
2845 0b_10101000,
2846 0b_11111000,
2847 0b_00001000,
2848 0b_00000000,
2849 /* 254 */
2850 0b_10001000,
2851 0b_10001000,
2852 0b_10001000,
2853 0b_10001000,
2854 0b_01111000,
2855 0b_00001000,
2856 0b_00001000,
2857 0b_00000000,
2858 /* 255 */
2859 0b_11000000,
2860 0b_01000000,
2861 0b_01000000,
2862 0b_01110000,
2863 0b_01001000,
2864 0b_01001000,
2865 0b_01110000,
2866 0b_00000000,
2870 // bits 0..3: width
2871 // bits 4..7: lshift
2872 public immutable ubyte[256] vlFontPropWidth = () {
2873 ubyte[256] res;
2874 foreach (immutable cnum; 0..256) {
2875 import core.bitop : bsf, bsr;
2876 immutable doshift =
2877 (cnum >= 32 && cnum <= 127) ||
2878 (cnum >= 143 && cnum <= 144) ||
2879 (cnum >= 166 && cnum <= 167) ||
2880 (cnum >= 192 && cnum <= 255);
2881 int shift = 0;
2882 if (doshift) {
2883 shift = 8;
2884 foreach (immutable dy; 0..8) {
2885 immutable b = vlFont6[cnum*8+dy];
2886 if (b) {
2887 immutable mn = 7-bsr(b);
2888 if (mn < shift) shift = mn;
2892 ubyte wdt = 0;
2893 foreach (immutable dy; 0..8) {
2894 immutable b = (vlFont6[cnum*8+dy]<<shift);
2895 immutable cwdt = (b ? 8-bsf(b) : 0);
2896 if (cwdt > wdt) wdt = cast(ubyte)cwdt;
2898 switch (cnum) {
2899 case 0: wdt = 8; break; // 8px space
2900 case 32: wdt = 5; break; // 5px space
2901 case 17: .. case 27: wdt = 8; break; // single frames
2902 case 48: .. case 57: wdt = 5; break; // digits are monospaced
2903 case 127: .. case 142: wdt = 8; break; // filled frames
2904 case 145: .. case 151: wdt = 8; break; // filled frames
2905 case 155: .. case 159: wdt = 8; break; // filled frames
2906 default:
2908 res[cnum] = (wdt&0x0f)|((shift<<4)&0xf0);
2910 return res;
2911 }();