execute all tests just once
[Arduino] / c2_ulx3s_test / font.h
1 #include <stdlib.h>
2 #include "shape.h"
3
4 // ascii-art of the shapes
5 const struct charcolors std_colors[] =
6 { //      RRGGBB
7   {'O', RGB2PIXEL(0xFF7F00)}, // orange
8   {'R', RGB2PIXEL(0xFF0000)}, // red
9   {'Y', RGB2PIXEL(0xFFFF00)}, // yellow
10   {'C', RGB2PIXEL(0x00FFFF)}, // cyan
11   {'G', RGB2PIXEL(0x00FF00)}, // green
12   {'B', RGB2PIXEL(0x0000FF)}, // blue
13   {'W', RGB2PIXEL(0xFFFFFF)}, // white
14   {' ', RGB2PIXEL(0)}, // transparent
15   {0, 0}
16 };
17
18 const char *shape_space[] =
19 {/*
20  01234567890123456789012345678901 */
21 "                ",
22 "                ",
23 "                ",
24 "                ",
25 "                ",
26 "                ",
27 "                ",
28 "                ",
29 "                ",
30 "                ",
31 "                ",
32 "                ",
33 "                ",
34 "                ",
35 "                ",
36 "                ",
37 NULL
38 };
39
40 const char *shape_exclamation[] =
41 {/*
42  01234567890123456789012345678901 */
43 "                ",
44 "       WW       ",
45 "       WW       ",
46 "       WW       ",
47 "       WW       ",
48 "       WW       ",
49 "       WW       ",
50 "       WW       ",
51 "       WW       ",
52 "       WW       ",
53 "       WW       ",
54 "                ",
55 "                ",
56 "       WW       ",
57 "       WW       ",
58 "                ",
59 NULL
60 };
61
62 const char *shape_double_quote[] =
63 {/*
64  01234567890123456789012345678901 */
65 "                ",
66 "     WW  WW     ",
67 "     WW  WW     ",
68 "     WW  WW     ",
69 "                ",
70 "                ",
71 "                ",
72 "                ",
73 "                ",
74 "                ",
75 "                ",
76 "                ",
77 "                ",
78 "                ",
79 "                ",
80 "                ",
81 NULL
82 };
83
84 const char *shape_number[] =
85 {/*
86  01234567890123456789012345678901 */
87 "                ",
88 "    WW    WW    ",
89 "    WW    WW    ",
90 "    WW    WW    ",
91 " WWWWWWWWWWWWWW ",
92 " WWWWWWWWWWWWWW ",
93 "    WW    WW    ",
94 "    WW    WW    ",
95 "    WW    WW    ",
96 "    WW    WW    ",
97 " WWWWWWWWWWWWWW ",
98 " WWWWWWWWWWWWWW ",
99 "    WW    WW    ",
100 "    WW    WW    ",
101 "    WW    WW    ",
102 "                ",
103 NULL
104 };
105
106 const char *shape_dollar[] =
107 {/*
108  01234567890123456789012345678901 */
109 "                ",
110 "       WW       ",
111 "       WW       ",
112 "    WWWWWWWWW   ",
113 "  WWWWWWWWWWWW  ",
114 "  WW   WW       ",
115 "  WW   WW       ",
116 "  WWWWWWWWWWW   ",
117 "    WWWWWWWWWW  ",
118 "       WW   WW  ",
119 "       WW   WW  ",
120 "  WWWWWWWWWWWW  ",
121 "   WWWWWWWWWW   ",
122 "       WW       ",
123 "       WW       ",
124 "                ",
125 NULL
126 };
127
128 const char *shape_percent[] =
129 {/*
130  01234567890123456789012345678901 */
131 "                ",
132 "                ",
133 "   WWW       WW ",
134 "  WW WW     WW  ",
135 "  WW WW    WW   ",
136 "   WWW    WW    ",
137 "         WW     ",
138 "        WW      ",
139 "       WW       ",
140 "      WW        ",
141 "     WW    WWW  ",
142 "    WW    WW WW ",
143 "   WW     WW WW ",
144 "  WW       WWW  ",
145 "                ",
146 "                ",
147 NULL
148 };
149
150 const char *shape_single_quote[] =
151 {/*
152  01234567890123456789012345678901 */
153 "                ",
154 "       WW       ",
155 "       WW       ",
156 "       WW       ",
157 "                ",
158 "                ",
159 "                ",
160 "                ",
161 "                ",
162 "                ",
163 "                ",
164 "                ",
165 "                ",
166 "                ",
167 "                ",
168 "                ",
169 NULL
170 };
171
172 const char *shape_left_parenthesis[] =
173 {/*
174  01234567890123456789012345678901 */
175 "                ",
176 "          WW    ",
177 "         WW     ",
178 "        WW      ",
179 "       WW       ",
180 "       WW       ",
181 "       WW       ",
182 "       WW       ",
183 "       WW       ",
184 "       WW       ",
185 "       WW       ",
186 "       WW       ",
187 "        WW      ",
188 "         WW     ",
189 "          WW    ",
190 "                ",
191 NULL
192 };
193
194 const char *shape_right_parenthesis[] =
195 {/*
196  01234567890123456789012345678901 */
197 "                ",
198 "    WW          ",
199 "     WW         ",
200 "      WW        ",
201 "       WW       ",
202 "       WW       ",
203 "       WW       ",
204 "       WW       ",
205 "       WW       ",
206 "       WW       ",
207 "       WW       ",
208 "       WW       ",
209 "      WW        ",
210 "     WW         ",
211 "    WW          ",
212 "                ",
213 NULL
214 };
215
216 const char *shape_asterisk[] =
217 {/*
218  01234567890123456789012345678901 */
219 "                ",
220 "                ",
221 "                ",
222 "       WW       ",
223 "       WW       ",
224 " WWW   WW   WWW ",
225 "   WWW WW WWW   ",
226 "     WWWWWW     ",
227 "     WWWWWW     ",
228 "   WWW WW WWW   ",
229 " WWW   WW   WWW ",
230 "       WW       ",
231 "       WW       ",
232 "                ",
233 "                ",
234 "                ",
235 NULL
236 };
237
238 const char *shape_plus[] =
239 {/*
240  01234567890123456789012345678901 */
241 "                ",
242 "                ",
243 "                ",
244 "       WW       ",
245 "       WW       ",
246 "       WW       ",
247 "       WW       ",
248 "  WWWWWWWWWWWW  ",
249 "  WWWWWWWWWWWW  ",
250 "       WW       ",
251 "       WW       ",
252 "       WW       ",
253 "       WW       ",
254 "                ",
255 "                ",
256 "                ",
257 NULL
258 };
259
260 const char *shape_comma[] =
261 {/*
262  01234567890123456789012345678901 */
263 "                ",
264 "                ",
265 "                ",
266 "                ",
267 "                ",
268 "                ",
269 "                ",
270 "                ",
271 "                ",
272 "                ",
273 "                ",
274 "      WWW       ",
275 "      WWW       ",
276 "      WWW       ",
277 "       WW       ",
278 "      WW        ",
279 NULL
280 };
281
282 const char *shape_minus[] =
283 {/*
284  01234567890123456789012345678901 */
285 "                ",
286 "                ",
287 "                ",
288 "                ",
289 "                ",
290 "                ",
291 "                ",
292 "  WWWWWWWWWWWW  ",
293 "  WWWWWWWWWWWW  ",
294 "                ",
295 "                ",
296 "                ",
297 "                ",
298 "                ",
299 "                ",
300 "                ",
301 NULL
302 };
303
304 const char *shape_dot[] =
305 {/*
306  01234567890123456789012345678901 */
307 "                ",
308 "                ",
309 "                ",
310 "                ",
311 "                ",
312 "                ",
313 "                ",
314 "                ",
315 "                ",
316 "                ",
317 "                ",
318 "                ",
319 "      WWW       ",
320 "      WWW       ",
321 "      WWW       ",
322 "                ",
323 NULL
324 };
325
326 const char *shape_slash[] =
327 {/*
328  01234567890123456789012345678901 */
329 "                ",
330 "                ",
331 "             WW ",
332 "            WW  ",
333 "           WW   ",
334 "          WW    ",
335 "         WW     ",
336 "        WW      ",
337 "       WW       ",
338 "      WW        ",
339 "     WW         ",
340 "    WW          ",
341 "   WW           ",
342 "  WW            ",
343 "                ",
344 "                ",
345 NULL
346 };
347
348 const char *shape_0[] =
349 {/*
350  01234567890123456789012345678901 */
351 "                ",
352 "   WWWWWWWWWW   ",
353 "  WWWWWWWWWWWW  ",
354 " WW        WWWW ",
355 " WW       WWWWW ",
356 " WW      WWW WW ",
357 " WW     WWW  WW ",
358 " WW    WWW   WW ",
359 " WW   WWW    WW ",
360 " WW  WWW     WW ",
361 " WW WWW      WW ",
362 " WWWWW       WW ",
363 " WWWW        WW ",
364 "  WWWWWWWWWWWW  ",
365 "   WWWWWWWWWW   ",
366 "                ",
367 NULL
368 };
369
370 const char *shape_1[] =
371 {/*
372  01234567890123456789012345678901 */
373 "                ",
374 "       WW       ",
375 "      WWW       ",
376 "     WWWW       ",
377 "    WWWWW       ",
378 "   WWW WW       ",
379 "       WW       ",
380 "       WW       ",
381 "       WW       ",
382 "       WW       ",
383 "       WW       ",
384 "       WW       ",
385 "       WW       ",
386 "    WWWWWWWW    ",
387 "    WWWWWWWW    ",
388 "                ",
389 NULL
390 };
391
392 const char *shape_2[] =
393 {/*
394  01234567890123456789012345678901 */
395 "                ",
396 "    WWWWWWWW    ",
397 "   WWWWWWWWWW   ",
398 "  WW        WW  ",
399 " WW          WW ",
400 " WW          WW ",
401 "            WWW ",
402 "           WWW  ",
403 "         WWWW   ",
404 "       WWWW     ",
405 "     WWWW       ",
406 "   WWWW         ",
407 "  WWW           ",
408 " WWWWWWWWWWWWWW ",
409 " WWWWWWWWWWWWWW ",
410 "                ",
411 NULL
412 };
413
414 const char *shape_3[] =
415 {/*
416  01234567890123456789012345678901 */
417 "                ",
418 "   WWWWWWWWWW   ",
419 "  WWWWWWWWWWWW  ",
420 "             WW ",
421 "             WW ",
422 "             WW ",
423 "            WW  ",
424 "     WWWWWWWW   ",
425 "     WWWWWWWW   ",
426 "            WW  ",
427 "             WW ",
428 "             WW ",
429 "             WW ",
430 " WWWWWWWWWWWWW  ",
431 "  WWWWWWWWWWW   ",
432 "                ",
433 NULL
434 };
435
436 const char *shape_4[] =
437 {/*
438  01234567890123456789012345678901 */
439 "                ",
440 "         WWW    ",
441 "        WWWW    ",
442 "       WWWWW    ",
443 "      WWW WW    ",
444 "     WWW  WW    ",
445 "    WWW   WW    ",
446 "   WWW    WW    ",
447 "  WWW     WW    ",
448 " WWWWWWWWWWWWWW ",
449 " WWWWWWWWWWWWWW ",
450 "          WW    ",
451 "          WW    ",
452 "          WW    ",
453 "          WW    ",
454 "                ",
455 NULL
456 };
457
458 const char *shape_5[] =
459 {/*
460  01234567890123456789012345678901 */
461 "                ",
462 " WWWWWWWWWWWWWW ",
463 " WWWWWWWWWWWWWW ",
464 " WW             ",
465 " WW             ",
466 " WW             ",
467 " WW             ",
468 " WWWWWWWWWWWW   ",
469 " WWWWWWWWWWWWW  ",
470 "             WW ",
471 "             WW ",
472 "             WW ",
473 "             WW ",
474 " WWWWWWWWWWWWW  ",
475 "  WWWWWWWWWWW   ",
476 "                ",
477 NULL
478 };
479
480 const char *shape_6[] =
481 {/*
482  01234567890123456789012345678901 */
483 "                ",
484 "   WWWWWWWWWWW  ",
485 "  WWWWWWWWWWWWW ",
486 " WW             ",
487 " WW             ",
488 " WW             ",
489 " WW             ",
490 " WWWWWWWWWWWW   ",
491 " WWWWWWWWWWWWW  ",
492 " WW          WW ",
493 " WW          WW ",
494 " WW          WW ",
495 " WW          WW ",
496 "  WWWWWWWWWWWW  ",
497 "   WWWWWWWWWW   ",
498 "                ",
499 NULL
500 };
501
502 const char *shape_7[] =
503 {/*
504  01234567890123456789012345678901 */
505 "                ",
506 " WWWWWWWWWWWWWW ",
507 " WWWWWWWWWWWWWW ",
508 " WW         WWW ",
509 " WW        WWW  ",
510 "          WWW   ",
511 "         WWW    ",
512 "        WWW     ",
513 "       WWW      ",
514 "      WWW       ",
515 "     WWW        ",
516 "    WWW         ",
517 "   WWW          ",
518 "  WWW           ",
519 "  WWW           ",
520 "                ",
521 NULL
522 };
523
524 const char *shape_8[] =
525 {/*
526  01234567890123456789012345678901 */
527 "                ",
528 "   WWWWWWWWWW   ",
529 "  WWWWWWWWWWWW  ",
530 " WW          WW ",
531 " WW          WW ",
532 " WW          WW ",
533 " WW          WW ",
534 "  WWWWWWWWWWWW  ",
535 "  WWWWWWWWWWWW  ",
536 " WW          WW ",
537 " WW          WW ",
538 " WW          WW ",
539 " WW          WW ",
540 "  WWWWWWWWWWWW  ",
541 "   WWWWWWWWWW   ",
542 "                ",
543 NULL
544 };
545
546 const char *shape_9[] =
547 {/*
548  01234567890123456789012345678901 */
549 "                ",
550 "   WWWWWWWWWW   ",
551 "  WWWWWWWWWWWW  ",
552 " WW          WW ",
553 " WW          WW ",
554 " WW          WW ",
555 " WW          WW ",
556 "  WWWWWWWWWWWWW ",
557 "  WWWWWWWWWWWWW ",
558 "             WW ",
559 "             WW ",
560 "             WW ",
561 "             WW ",
562 "  WWWWWWWWWWWW  ",
563 "   WWWWWWWWWW   ",
564 "                ",
565 NULL
566 };
567
568 const char *shape_colon[] =
569 {/*
570  01234567890123456789012345678901 */
571 "                ",
572 "                ",
573 "                ",
574 "      WWW       ",
575 "      WWW       ",
576 "      WWW       ",
577 "                ",
578 "                ",
579 "                ",
580 "                ",
581 "      WWW       ",
582 "      WWW       ",
583 "      WWW       ",
584 "                ",
585 "                ",
586 "                ",
587 NULL
588 };
589
590 const char *shape_semicolon[] =
591 {/*
592  01234567890123456789012345678901 */
593 "                ",
594 "                ",
595 "                ",
596 "      WWW       ",
597 "      WWW       ",
598 "      WWW       ",
599 "                ",
600 "                ",
601 "                ",
602 "                ",
603 "      WWW       ",
604 "      WWW       ",
605 "      WWW       ",
606 "       WW       ",
607 "      WW        ",
608 "                ",
609 NULL
610 };
611
612 const char *shape_less_than[] =
613 {/*
614  01234567890123456789012345678901 */
615 "                ",
616 "                ",
617 "          WW    ",
618 "         WW     ",
619 "        WW      ",
620 "       WW       ",
621 "      WW        ",
622 "     WW         ",
623 "    WW          ",
624 "     WW         ",
625 "      WW        ",
626 "       WW       ",
627 "        WW      ",
628 "         WW     ",
629 "          WW    ",
630 "                ",
631 NULL
632 };
633
634 const char *shape_equal[] =
635 {/*
636  01234567890123456789012345678901 */
637 "                ",
638 "                ",
639 "                ",
640 "                ",
641 "                ",
642 "  WWWWWWWWWWWW  ",
643 "  WWWWWWWWWWWW  ",
644 "                ",
645 "                ",
646 "  WWWWWWWWWWWW  ",
647 "  WWWWWWWWWWWW  ",
648 "                ",
649 "                ",
650 "                ",
651 "                ",
652 "                ",
653 NULL
654 };
655
656 const char *shape_greater_than[] =
657 {/*
658  01234567890123456789012345678901 */
659 "                ",
660 "                ",
661 "    WW          ",
662 "     WW         ",
663 "      WW        ",
664 "       WW       ",
665 "        WW      ",
666 "         WW     ",
667 "          WW    ",
668 "         WW     ",
669 "        WW      ",
670 "       WW       ",
671 "      WW        ",
672 "     WW         ",
673 "    WW          ",
674 "                ",
675 NULL
676 };
677
678 const char *shape_question[] =
679 {/*
680  01234567890123456789012345678901 */
681 "                ",
682 "  WWWWWWWWWWWW  ",
683 " WWWWWWWWWWWWWW ",
684 " WW          WW ",
685 " WW          WW ",
686 "            WW  ",
687 "           WW   ",
688 "          WW    ",
689 "         WW     ",
690 "        WW      ",
691 "       WW       ",
692 "       WW       ",
693 "                ",
694 "       WW       ",
695 "       WW       ",
696 "                ",
697 NULL
698 };
699
700 const char *shape_a[] =
701 {/*
702  01234567890123456789012345678901 */
703 "                ",
704 "      WWWW      ",
705 "     WWWWWW     ",
706 "    WWW  WWW    ",
707 "   WWW    WWW   ",
708 "  WWW      WWW  ",
709 " WWW        WWW ",
710 " WW          WW ",
711 " WW          WW ",
712 " WWWWWWWWWWWWWW ",
713 " WWWWWWWWWWWWWW ",
714 " WW          WW ",
715 " WW          WW ",
716 " WW          WW ",
717 " WW          WW ",
718 "                ",
719 NULL
720 };
721
722 const char *shape_b[] =
723 {/*
724  01234567890123456789012345678901 */
725 "                ",
726 " WWWWWWWWWWWW   ",
727 " WWWWWWWWWWWWW  ",
728 " WW          WW ",
729 " WW          WW ",
730 " WW          WW ",
731 " WW         WW  ",
732 " WWWWWWWWWWWW   ",
733 " WWWWWWWWWWWW   ",
734 " WW         WW  ",
735 " WW          WW ",
736 " WW          WW ",
737 " WW          WW ",
738 " WWWWWWWWWWWWW  ",
739 " WWWWWWWWWWWW   ",
740 "                ",
741 NULL
742 };
743
744 const char *shape_c[] =
745 {/*
746  01234567890123456789012345678901 */
747 "                ",
748 "   WWWWWWWWWW   ",
749 "  WWWWWWWWWWWW  ",
750 " WW          WW ",
751 " WW          WW ",
752 " WW             ",
753 " WW             ",
754 " WW             ",
755 " WW             ",
756 " WW             ",
757 " WW             ",
758 " WW          WW ",
759 " WW          WW ",
760 "  WWWWWWWWWWWW  ",
761 "   WWWWWWWWWW   ",
762 "                ",
763 NULL
764 };
765
766 const char *shape_d[] =
767 {/*
768  01234567890123456789012345678901 */
769 "                ",
770 " WWWWWWWWWWWW   ",
771 " WWWWWWWWWWWWW  ",
772 " WW          WW ",
773 " WW          WW ",
774 " WW          WW ",
775 " WW          WW ",
776 " WW          WW ",
777 " WW          WW ",
778 " WW          WW ",
779 " WW          WW ",
780 " WW          WW ",
781 " WW          WW ",
782 " WWWWWWWWWWWWW  ",
783 " WWWWWWWWWWWW   ",
784 "                ",
785 NULL
786 };
787
788 const char *shape_e[] =
789 {/*
790  01234567890123456789012345678901 */
791 "                ",
792 " WWWWWWWWWWWWWW ",
793 " WWWWWWWWWWWWWW ",
794 " WW             ",
795 " WW             ",
796 " WW             ",
797 " WW             ",
798 " WWWWWWWWWWW    ",
799 " WWWWWWWWWWW    ",
800 " WW             ",
801 " WW             ",
802 " WW             ",
803 " WW             ",
804 " WWWWWWWWWWWWWW ",
805 " WWWWWWWWWWWWWW ",
806 "                ",
807 NULL
808 };
809
810 const char *shape_f[] =
811 {/*
812  01234567890123456789012345678901 */
813 "                ",
814 " WWWWWWWWWWWWWW ",
815 " WWWWWWWWWWWWWW ",
816 " WW             ",
817 " WW             ",
818 " WW             ",
819 " WW             ",
820 " WWWWWWWWWWW    ",
821 " WWWWWWWWWWW    ",
822 " WW             ",
823 " WW             ",
824 " WW             ",
825 " WW             ",
826 " WW             ",
827 " WW             ",
828 "                ",
829 NULL
830 };
831
832 const char *shape_g[] =
833 {/*
834  01234567890123456789012345678901 */
835 "                ",
836 "   WWWWWWWWWW   ",
837 "  WWWWWWWWWWWW  ",
838 " WW          WW ",
839 " WW          WW ",
840 " WW             ",
841 " WW             ",
842 " WW             ",
843 " WW      WWWWWW ",
844 " WW      WWWWWW ",
845 " WW          WW ",
846 " WW          WW ",
847 " WW          WW ",
848 "  WWWWWWWWWWWW  ",
849 "   WWWWWWWWWW   ",
850 "                ",
851 NULL
852 };
853
854 const char *shape_h[] =
855 {/*
856  01234567890123456789012345678901 */
857 "                ",
858 " WW          WW ",
859 " WW          WW ",
860 " WW          WW ",
861 " WW          WW ",
862 " WW          WW ",
863 " WW          WW ",
864 " WWWWWWWWWWWWWW ",
865 " WWWWWWWWWWWWWW ",
866 " WW          WW ",
867 " WW          WW ",
868 " WW          WW ",
869 " WW          WW ",
870 " WW          WW ",
871 " WW          WW ",
872 "                ",
873 NULL
874 };
875
876 const char *shape_i[] =
877 {/*
878  01234567890123456789012345678901 */
879 "                ",
880 "    WWWWWWWW    ",
881 "    WWWWWWWW    ",
882 "       WW       ",
883 "       WW       ",
884 "       WW       ",
885 "       WW       ",
886 "       WW       ",
887 "       WW       ",
888 "       WW       ",
889 "       WW       ",
890 "       WW       ",
891 "       WW       ",
892 "    WWWWWWWW    ",
893 "    WWWWWWWW    ",
894 "                ",
895 NULL
896 };
897
898 const char *shape_j[] =
899 {/*
900  01234567890123456789012345678901 */
901 "                ",
902 "    WWWWWWWWWWW ",
903 "    WWWWWWWWWWW ",
904 "             WW ",
905 "             WW ",
906 "             WW ",
907 "             WW ",
908 "             WW ",
909 "             WW ",
910 "             WW ",
911 " WW          WW ",
912 " WW          WW ",
913 " WW          WW ",
914 "  WWWWWWWWWWWW  ",
915 "   WWWWWWWWWW   ",
916 "                ",
917 NULL
918 };
919
920 const char *shape_k[] =
921 {/*
922  01234567890123456789012345678901 */
923 "                ",
924 " WW          WW ",
925 " WW         WWW ",
926 " WW        WWW  ",
927 " WW       WWW   ",
928 " WW      WWW    ",
929 " WW     WWW     ",
930 " WWWWWWWWW      ",
931 " WWWWWWWWW      ",
932 " WW     WWW     ",
933 " WW      WWW    ",
934 " WW       WWW   ",
935 " WW        WWW  ",
936 " WW         WWW ",
937 " WW          WW ",
938 "                ",
939 NULL
940 };
941
942 const char *shape_l[] =
943 {/*
944  01234567890123456789012345678901 */
945 "                ",
946 " WW             ",
947 " WW             ",
948 " WW             ",
949 " WW             ",
950 " WW             ",
951 " WW             ",
952 " WW             ",
953 " WW             ",
954 " WW             ",
955 " WW             ",
956 " WW             ",
957 " WW             ",
958 " WWWWWWWWWWWWW  ",
959 " WWWWWWWWWWWWW  ",
960 "                ",
961 NULL
962 };
963
964 const char *shape_m[] =
965 {/*
966  01234567890123456789012345678901 */
967 "                ",
968 " WW          WW ",
969 " WWW        WWW ",
970 " WWWW      WWWW ",
971 " WWWWW    WWwWW ",
972 " WW WWW  WWW WW ",
973 " WW  WWWWWW  WW ",
974 " WW   WWWW   WW ",
975 " WW    WW    WW ",
976 " WW          WW ",
977 " WW          WW ",
978 " WW          WW ",
979 " WW          WW ",
980 " WW          WW ",
981 " WW          WW ",
982 "                ",
983 NULL
984 };
985
986 const char *shape_n[] =
987 {/*
988  01234567890123456789012345678901 */
989 "                ",
990 " WW          WW ",
991 " WWW         WW ",
992 " WWWW        WW ",
993 " WWWWW       WW ",
994 " WW WWW      WW ",
995 " WW  WWW     WW ",
996 " WW   WWW    WW ",
997 " WW    WWW   WW ",
998 " WW     WWW  WW ",
999 " WW      WWW WW ",
1000 " WW       WWWWW ",
1001 " WW        WWWW ",
1002 " WW         WWW ",
1003 " WW          WW ",
1004 "                ",
1005 NULL
1006 };
1007
1008 const char *shape_o[] =
1009 {/*
1010  01234567890123456789012345678901 */
1011 "                ",
1012 "   WWWWWWWWWW   ",
1013 "  WWWWWWWWWWWW  ",
1014 " WW          WW ",
1015 " WW          WW ",
1016 " WW          WW ",
1017 " WW          WW ",
1018 " WW          WW ",
1019 " WW          WW ",
1020 " WW          WW ",
1021 " WW          WW ",
1022 " WW          WW ",
1023 " WW          WW ",
1024 "  WWWWWWWWWWWW  ",
1025 "   WWWWWWWWWW   ",
1026 "                ",
1027 NULL
1028 };
1029
1030 const char *shape_p[] =
1031 {/*
1032  01234567890123456789012345678901 */
1033 "                ",
1034 " WWWWWWWWWWWW   ",
1035 " WWWWWWWWWWWWW  ",
1036 " WW          WW ",
1037 " WW          WW ",
1038 " WW          WW ",
1039 " WW          WW ",
1040 " WWWWWWWWWWWWW  ",
1041 " WWWWWWWWWWWW   ",
1042 " WW             ",
1043 " WW             ",
1044 " WW             ",
1045 " WW             ",
1046 " WW             ",
1047 " WW             ",
1048 "                ",
1049 NULL
1050 };
1051
1052 const char *shape_q[] =
1053 {/*
1054  01234567890123456789012345678901 */
1055 "                ",
1056 "   WWWWWWWWWW   ",
1057 "  WWWWWWWWWWWW  ",
1058 " WW          WW ",
1059 " WW          WW ",
1060 " WW          WW ",
1061 " WW          WW ",
1062 " WW          WW ",
1063 " WW     WW   WW ",
1064 " WW     WWW  WW ",
1065 " WW      WWW WW ",
1066 " WW       WWWW  ",
1067 " WW        WWW  ",
1068 "  WWWWWWWWWWWWW ",
1069 "   WWWWWWWW  WW ",
1070 "                ",
1071 NULL
1072 };
1073
1074 const char *shape_r[] =
1075 {/*
1076  01234567890123456789012345678901 */
1077 "                ",
1078 " WWWWWWWWWWWW   ",
1079 " WWWWWWWWWWWWW  ",
1080 " WW          WW ",
1081 " WW          WW ",
1082 " WW          WW ",
1083 " WW          WW ",
1084 " WWWWWWWWWWWWW  ",
1085 " WWWWWWWWWWWW   ",
1086 " WW     WWW     ",
1087 " WW      WWW    ",
1088 " WW       WWW   ",
1089 " WW        WWW  ",
1090 " WW         WWW ",
1091 " WW          WW ",
1092 "                ",
1093 NULL
1094 };
1095
1096 const char *shape_s[] =
1097 {/*
1098  01234567890123456789012345678901 */
1099 "                ",
1100 "   WWWWWWWWWWWW ",
1101 "  WWWWWWWWWWWWW ",
1102 " WW             ",
1103 " WW             ",
1104 " WW             ",
1105 " WW             ",
1106 "  WWWWWWWWWWW   ",
1107 "   WWWWWWWWWWW  ",
1108 "             WW ",
1109 "             WW ",
1110 "             WW ",
1111 "             WW ",
1112 " WWWWWWWWWWWWW  ",
1113 " WWWWWWWWWWWW   ",
1114 "                ",
1115 NULL
1116 };
1117
1118 const char *shape_t[] =
1119 {/*
1120  01234567890123456789012345678901 */
1121 "                ",
1122 " WWWWWWWWWWWWWW ",
1123 " WWWWWWWWWWWWWW ",
1124 "       WW       ",
1125 "       WW       ",
1126 "       WW       ",
1127 "       WW       ",
1128 "       WW       ",
1129 "       WW       ",
1130 "       WW       ",
1131 "       WW       ",
1132 "       WW       ",
1133 "       WW       ",
1134 "       WW       ",
1135 "       WW       ",
1136 "                ",
1137 NULL
1138 };
1139
1140 const char *shape_u[] =
1141 {/*
1142  01234567890123456789012345678901 */
1143 "                ",
1144 " WW          WW ",
1145 " WW          WW ",
1146 " WW          WW ",
1147 " WW          WW ",
1148 " WW          WW ",
1149 " WW          WW ",
1150 " WW          WW ",
1151 " WW          WW ",
1152 " WW          WW ",
1153 " WW          WW ",
1154 " WW          WW ",
1155 " WW          WW ",
1156 "  WWWWWWWWWWWW  ",
1157 "   WWWWWWWWWW   ",
1158 "                ",
1159 NULL
1160 };
1161
1162 const char *shape_v[] =
1163 {/*
1164  01234567890123456789012345678901 */
1165 "                ",
1166 " WW          WW ",
1167 " WW          WW ",
1168 " WW          WW ",
1169 " WW          WW ",
1170 " WW          WW ",
1171 " WW          WW ",
1172 " WW          WW ",
1173 " WWW        WWW ",
1174 "  WWW      WWW  ",
1175 "   WWW    WWW   ",
1176 "    WWW  WWW    ",
1177 "     WWWWWW     ",
1178 "      WWWW      ",
1179 "       WW       ",
1180 "                ",
1181 NULL
1182 };
1183
1184 const char *shape_w[] =
1185 {/*
1186  01234567890123456789012345678901 */
1187 "                ",
1188 " WW          WW ",
1189 " WW          WW ",
1190 " WW          WW ",
1191 " WW          WW ",
1192 " WW          WW ",
1193 " WW          WW ",
1194 " WW    WW    WW ",
1195 " WW   WWWW   WW ",
1196 " WW  WWWWWW  WW ",
1197 " WW WWW  WWW WW ",
1198 " WWWWW    WWWWW ",
1199 " WWWW      WWWW ",
1200 " WWW        WWW ",
1201 " WW          WW ",
1202 "                ",
1203 NULL
1204 };
1205
1206 const char *shape_x[] =
1207 {/*
1208  01234567890123456789012345678901 */
1209 "                ",
1210 " WW          WW ",
1211 " WWW        WWW ",
1212 "  WWW      WWW  ",
1213 "   WWW    WWW   ",
1214 "    WWW  WWW    ",
1215 "     WWWWWW     ",
1216 "      WWWW      ",
1217 "      WWWW      ",
1218 "     WWWWWW     ",
1219 "    WWW  WWW    ",
1220 "   WWW    WWW   ",
1221 "  WWW      WWW  ",
1222 " WWW        WWW ",
1223 " WW          WW ",
1224 "                ",
1225 NULL
1226 };
1227
1228 const char *shape_y[] =
1229 {/*
1230  01234567890123456789012345678901 */
1231 "                ",
1232 " WW          WW ",
1233 " WWW        WWW ",
1234 "  WWW      WWW  ",
1235 "   WWW    WWW   ",
1236 "    WWW  WWW    ",
1237 "     WWWWWW     ",
1238 "      WWWW      ",
1239 "       WW       ",
1240 "       WW       ",
1241 "       WW       ",
1242 "       WW       ",
1243 "       WW       ",
1244 "       WW       ",
1245 "       WW       ",
1246 "                ",
1247 NULL
1248 };
1249
1250 const char *shape_z[] =
1251 {/*
1252  01234567890123456789012345678901 */
1253 "                ",
1254 " WWWWWWWWWWWWWW ",
1255 " WWWWWWWWWWWWWW ",
1256 "           WWW  ",
1257 "          WWW   ",
1258 "         WWW    ",
1259 "        WWW     ",
1260 "       WWW      ",
1261 "      WWW       ",
1262 "     WWW        ",
1263 "    WWW         ",
1264 "   WWW          ",
1265 "  WWW           ",
1266 " WWWWWWWWWWWWWW ",
1267 " WWWWWWWWWWWWWW ",
1268 "                ",
1269 NULL
1270 };
1271
1272 const char *shape_left_bracket[] =
1273 {/*
1274  01234567890123456789012345678901 */
1275 "                ",
1276 "    WWWWWWWW    ",
1277 "    WWWWWWWW    ",
1278 "    WW          ",
1279 "    WW          ",
1280 "    WW          ",
1281 "    WW          ",
1282 "    WW          ",
1283 "    WW          ",
1284 "    WW          ",
1285 "    WW          ",
1286 "    WW          ",
1287 "    WW          ",
1288 "    WWWWWWWW    ",
1289 "    WWWWWWWW    ",
1290 "               ",
1291 NULL
1292 };
1293
1294 const char *shape_backslash[] =
1295 {/*
1296  01234567890123456789012345678901 */
1297 "WW              ",
1298 "WWW             ",
1299 " WWW            ",
1300 "  WWW           ",
1301 "   WWW          ",
1302 "    WWW         ",
1303 "     WWW        ",
1304 "      WWW       ",
1305 "       WWW      ",
1306 "        WWW     ",
1307 "         WWW    ",
1308 "          WWW   ",
1309 "           WWW  ",
1310 "            WWW ",
1311 "             WWW",
1312 "              WW",
1313 NULL
1314 };
1315
1316 const char *shape_right_bracket[] =
1317 {/*
1318  01234567890123456789012345678901 */
1319 "                ",
1320 "    WWWWWWWW    ",
1321 "    WWWWWWWW    ",
1322 "          WW    ",
1323 "          WW    ",
1324 "          WW    ",
1325 "          WW    ",
1326 "          WW    ",
1327 "          WW    ",
1328 "          WW    ",
1329 "          WW    ",
1330 "          WW    ",
1331 "          WW    ",
1332 "    WWWWWWWW    ",
1333 "    WWWWWWWW    ",
1334 "                ",
1335 NULL
1336 };
1337
1338 const char *shape_caret[] =
1339 {/*
1340  01234567890123456789012345678901 */
1341 "                ",
1342 "       W        ",
1343 "      WWW       ",
1344 "     WW WW      ",
1345 "    WW   WW     ",
1346 "                ",
1347 "                ",
1348 "                ",
1349 "                ",
1350 "                ",
1351 "                ",
1352 "                ",
1353 "                ",
1354 "                ",
1355 "                ",
1356 "                ",
1357 NULL
1358 };
1359
1360 const char *shape_underscore[] =
1361 {/*
1362  01234567890123456789012345678901 */
1363 "                ",
1364 "                ",
1365 "                ",
1366 "                ",
1367 "                ",
1368 "                ",
1369 "                ",
1370 "                ",
1371 "                ",
1372 "                ",
1373 "                ",
1374 "                ",
1375 "                ",
1376 "  WWWWWWWWWWWW  ",
1377 "  WWWWWWWWWWWW  ",
1378 "                ",
1379 NULL
1380 };
1381
1382 const struct shape Font[] =
1383 {
1384    [0] = { std_colors, shape_space },
1385    [1] = { std_colors, shape_exclamation },
1386    [2] = { std_colors, shape_double_quote },
1387    [3] = { std_colors, shape_number },
1388    [4] = { std_colors, shape_dollar },
1389    [5] = { std_colors, shape_percent },
1390    [6] = { std_colors, shape_space }, // todo "&"
1391    [7] = { std_colors, shape_single_quote },
1392    [8] = { std_colors, shape_left_parenthesis },
1393    [9] = { std_colors, shape_right_parenthesis },
1394   [10] = { std_colors, shape_asterisk },
1395   [11] = { std_colors, shape_plus },
1396   [12] = { std_colors, shape_comma },
1397   [13] = { std_colors, shape_minus },
1398   [14] = { std_colors, shape_dot },
1399   [15] = { std_colors, shape_slash },
1400   [16] = { std_colors, shape_0 },
1401   [17] = { std_colors, shape_1 },
1402   [18] = { std_colors, shape_2 },
1403   [19] = { std_colors, shape_3 },
1404   [20] = { std_colors, shape_4 },
1405   [21] = { std_colors, shape_5 },
1406   [22] = { std_colors, shape_6 },
1407   [23] = { std_colors, shape_7 },
1408   [24] = { std_colors, shape_8 },
1409   [25] = { std_colors, shape_9 },
1410   [26] = { std_colors, shape_colon },
1411   [27] = { std_colors, shape_semicolon },
1412   [28] = { std_colors, shape_less_than },
1413   [29] = { std_colors, shape_equal },
1414   [30] = { std_colors, shape_greater_than },
1415   [31] = { std_colors, shape_question },
1416   [32] = { std_colors, shape_space }, // todo "@"
1417   [33] = { std_colors, shape_a },
1418   [34] = { std_colors, shape_b },
1419   [35] = { std_colors, shape_c },
1420   [36] = { std_colors, shape_d },
1421   [37] = { std_colors, shape_e },
1422   [38] = { std_colors, shape_f },
1423   [39] = { std_colors, shape_g },
1424   [40] = { std_colors, shape_h },
1425   [41] = { std_colors, shape_i },
1426   [42] = { std_colors, shape_j },
1427   [43] = { std_colors, shape_k },
1428   [44] = { std_colors, shape_l },
1429   [45] = { std_colors, shape_m },
1430   [46] = { std_colors, shape_n },
1431   [47] = { std_colors, shape_o },
1432   [48] = { std_colors, shape_p },
1433   [49] = { std_colors, shape_q },
1434   [50] = { std_colors, shape_r },
1435   [51] = { std_colors, shape_s },
1436   [52] = { std_colors, shape_t },
1437   [53] = { std_colors, shape_u },
1438   [54] = { std_colors, shape_v },
1439   [55] = { std_colors, shape_w },
1440   [56] = { std_colors, shape_x },
1441   [57] = { std_colors, shape_y },
1442   [58] = { std_colors, shape_z },
1443   [59] = { std_colors, shape_left_bracket },
1444   [60] = { std_colors, shape_backslash },
1445   [61] = { std_colors, shape_right_bracket },
1446   [62] = { std_colors, shape_caret },
1447   [63] = { std_colors, shape_underscore },
1448 };