Root/Software/sie_cg/templates/basic/fbutils.c

1/*
2 * fbutils.c
3 *
4 * Utility routines for framebuffer interaction
5 *
6 * Copyright 2002 Russell King and Doug Lowder
7 *
8 * This file is placed under the GPL. Please see the
9 * file COPYING for details.
10 *
11 */
12
13#include <stdio.h>
14#include <stdlib.h>
15#include <string.h>
16#include <unistd.h>
17#include <sys/fcntl.h>
18#include <sys/ioctl.h>
19#include <sys/mman.h>
20#include <sys/time.h>
21
22#include <linux/vt.h>
23#include <linux/kd.h>
24#include <linux/fb.h>
25
26#include "fbutils.h"
27
28
29static unsigned char fontdata_8x8[FONTDATAMAX] = {
30
31    /* 0 0x00 '^@' */
32    0x00, /* 00000000 */
33    0x00, /* 00000000 */
34    0x00, /* 00000000 */
35    0x00, /* 00000000 */
36    0x00, /* 00000000 */
37    0x00, /* 00000000 */
38    0x00, /* 00000000 */
39    0x00, /* 00000000 */
40
41    /* 1 0x01 '^A' */
42    0x7e, /* 01111110 */
43    0x81, /* 10000001 */
44    0xa5, /* 10100101 */
45    0x81, /* 10000001 */
46    0xbd, /* 10111101 */
47    0x99, /* 10011001 */
48    0x81, /* 10000001 */
49    0x7e, /* 01111110 */
50
51    /* 2 0x02 '^B' */
52    0x7e, /* 01111110 */
53    0xff, /* 11111111 */
54    0xdb, /* 11011011 */
55    0xff, /* 11111111 */
56    0xc3, /* 11000011 */
57    0xe7, /* 11100111 */
58    0xff, /* 11111111 */
59    0x7e, /* 01111110 */
60
61    /* 3 0x03 '^C' */
62    0x6c, /* 01101100 */
63    0xfe, /* 11111110 */
64    0xfe, /* 11111110 */
65    0xfe, /* 11111110 */
66    0x7c, /* 01111100 */
67    0x38, /* 00111000 */
68    0x10, /* 00010000 */
69    0x00, /* 00000000 */
70
71    /* 4 0x04 '^D' */
72    0x10, /* 00010000 */
73    0x38, /* 00111000 */
74    0x7c, /* 01111100 */
75    0xfe, /* 11111110 */
76    0x7c, /* 01111100 */
77    0x38, /* 00111000 */
78    0x10, /* 00010000 */
79    0x00, /* 00000000 */
80
81    /* 5 0x05 '^E' */
82    0x38, /* 00111000 */
83    0x7c, /* 01111100 */
84    0x38, /* 00111000 */
85    0xfe, /* 11111110 */
86    0xfe, /* 11111110 */
87    0xd6, /* 11010110 */
88    0x10, /* 00010000 */
89    0x38, /* 00111000 */
90
91    /* 6 0x06 '^F' */
92    0x10, /* 00010000 */
93    0x38, /* 00111000 */
94    0x7c, /* 01111100 */
95    0xfe, /* 11111110 */
96    0xfe, /* 11111110 */
97    0x7c, /* 01111100 */
98    0x10, /* 00010000 */
99    0x38, /* 00111000 */
100
101    /* 7 0x07 '^G' */
102    0x00, /* 00000000 */
103    0x00, /* 00000000 */
104    0x18, /* 00011000 */
105    0x3c, /* 00111100 */
106    0x3c, /* 00111100 */
107    0x18, /* 00011000 */
108    0x00, /* 00000000 */
109    0x00, /* 00000000 */
110
111    /* 8 0x08 '^H' */
112    0xff, /* 11111111 */
113    0xff, /* 11111111 */
114    0xe7, /* 11100111 */
115    0xc3, /* 11000011 */
116    0xc3, /* 11000011 */
117    0xe7, /* 11100111 */
118    0xff, /* 11111111 */
119    0xff, /* 11111111 */
120
121    /* 9 0x09 '^I' */
122    0x00, /* 00000000 */
123    0x3c, /* 00111100 */
124    0x66, /* 01100110 */
125    0x42, /* 01000010 */
126    0x42, /* 01000010 */
127    0x66, /* 01100110 */
128    0x3c, /* 00111100 */
129    0x00, /* 00000000 */
130
131    /* 10 0x0a '^J' */
132    0xff, /* 11111111 */
133    0xc3, /* 11000011 */
134    0x99, /* 10011001 */
135    0xbd, /* 10111101 */
136    0xbd, /* 10111101 */
137    0x99, /* 10011001 */
138    0xc3, /* 11000011 */
139    0xff, /* 11111111 */
140
141    /* 11 0x0b '^K' */
142    0x0f, /* 00001111 */
143    0x07, /* 00000111 */
144    0x0f, /* 00001111 */
145    0x7d, /* 01111101 */
146    0xcc, /* 11001100 */
147    0xcc, /* 11001100 */
148    0xcc, /* 11001100 */
149    0x78, /* 01111000 */
150
151    /* 12 0x0c '^L' */
152    0x3c, /* 00111100 */
153    0x66, /* 01100110 */
154    0x66, /* 01100110 */
155    0x66, /* 01100110 */
156    0x3c, /* 00111100 */
157    0x18, /* 00011000 */
158    0x7e, /* 01111110 */
159    0x18, /* 00011000 */
160
161    /* 13 0x0d '^M' */
162    0x3f, /* 00111111 */
163    0x33, /* 00110011 */
164    0x3f, /* 00111111 */
165    0x30, /* 00110000 */
166    0x30, /* 00110000 */
167    0x70, /* 01110000 */
168    0xf0, /* 11110000 */
169    0xe0, /* 11100000 */
170
171    /* 14 0x0e '^N' */
172    0x7f, /* 01111111 */
173    0x63, /* 01100011 */
174    0x7f, /* 01111111 */
175    0x63, /* 01100011 */
176    0x63, /* 01100011 */
177    0x67, /* 01100111 */
178    0xe6, /* 11100110 */
179    0xc0, /* 11000000 */
180
181    /* 15 0x0f '^O' */
182    0x18, /* 00011000 */
183    0xdb, /* 11011011 */
184    0x3c, /* 00111100 */
185    0xe7, /* 11100111 */
186    0xe7, /* 11100111 */
187    0x3c, /* 00111100 */
188    0xdb, /* 11011011 */
189    0x18, /* 00011000 */
190
191    /* 16 0x10 '^P' */
192    0x80, /* 10000000 */
193    0xe0, /* 11100000 */
194    0xf8, /* 11111000 */
195    0xfe, /* 11111110 */
196    0xf8, /* 11111000 */
197    0xe0, /* 11100000 */
198    0x80, /* 10000000 */
199    0x00, /* 00000000 */
200
201    /* 17 0x11 '^Q' */
202    0x02, /* 00000010 */
203    0x0e, /* 00001110 */
204    0x3e, /* 00111110 */
205    0xfe, /* 11111110 */
206    0x3e, /* 00111110 */
207    0x0e, /* 00001110 */
208    0x02, /* 00000010 */
209    0x00, /* 00000000 */
210
211    /* 18 0x12 '^R' */
212    0x18, /* 00011000 */
213    0x3c, /* 00111100 */
214    0x7e, /* 01111110 */
215    0x18, /* 00011000 */
216    0x18, /* 00011000 */
217    0x7e, /* 01111110 */
218    0x3c, /* 00111100 */
219    0x18, /* 00011000 */
220
221    /* 19 0x13 '^S' */
222    0x66, /* 01100110 */
223    0x66, /* 01100110 */
224    0x66, /* 01100110 */
225    0x66, /* 01100110 */
226    0x66, /* 01100110 */
227    0x00, /* 00000000 */
228    0x66, /* 01100110 */
229    0x00, /* 00000000 */
230
231    /* 20 0x14 '^T' */
232    0x7f, /* 01111111 */
233    0xdb, /* 11011011 */
234    0xdb, /* 11011011 */
235    0x7b, /* 01111011 */
236    0x1b, /* 00011011 */
237    0x1b, /* 00011011 */
238    0x1b, /* 00011011 */
239    0x00, /* 00000000 */
240
241    /* 21 0x15 '^U' */
242    0x3e, /* 00111110 */
243    0x61, /* 01100001 */
244    0x3c, /* 00111100 */
245    0x66, /* 01100110 */
246    0x66, /* 01100110 */
247    0x3c, /* 00111100 */
248    0x86, /* 10000110 */
249    0x7c, /* 01111100 */
250
251    /* 22 0x16 '^V' */
252    0x00, /* 00000000 */
253    0x00, /* 00000000 */
254    0x00, /* 00000000 */
255    0x00, /* 00000000 */
256    0x7e, /* 01111110 */
257    0x7e, /* 01111110 */
258    0x7e, /* 01111110 */
259    0x00, /* 00000000 */
260
261    /* 23 0x17 '^W' */
262    0x18, /* 00011000 */
263    0x3c, /* 00111100 */
264    0x7e, /* 01111110 */
265    0x18, /* 00011000 */
266    0x7e, /* 01111110 */
267    0x3c, /* 00111100 */
268    0x18, /* 00011000 */
269    0xff, /* 11111111 */
270
271    /* 24 0x18 '^X' */
272    0x18, /* 00011000 */
273    0x3c, /* 00111100 */
274    0x7e, /* 01111110 */
275    0x18, /* 00011000 */
276    0x18, /* 00011000 */
277    0x18, /* 00011000 */
278    0x18, /* 00011000 */
279    0x00, /* 00000000 */
280
281    /* 25 0x19 '^Y' */
282    0x18, /* 00011000 */
283    0x18, /* 00011000 */
284    0x18, /* 00011000 */
285    0x18, /* 00011000 */
286    0x7e, /* 01111110 */
287    0x3c, /* 00111100 */
288    0x18, /* 00011000 */
289    0x00, /* 00000000 */
290
291    /* 26 0x1a '^Z' */
292    0x00, /* 00000000 */
293    0x18, /* 00011000 */
294    0x0c, /* 00001100 */
295    0xfe, /* 11111110 */
296    0x0c, /* 00001100 */
297    0x18, /* 00011000 */
298    0x00, /* 00000000 */
299    0x00, /* 00000000 */
300
301    /* 27 0x1b '^[' */
302    0x00, /* 00000000 */
303    0x30, /* 00110000 */
304    0x60, /* 01100000 */
305    0xfe, /* 11111110 */
306    0x60, /* 01100000 */
307    0x30, /* 00110000 */
308    0x00, /* 00000000 */
309    0x00, /* 00000000 */
310
311    /* 28 0x1c '^\' */
312    0x00, /* 00000000 */
313    0x00, /* 00000000 */
314    0xc0, /* 11000000 */
315    0xc0, /* 11000000 */
316    0xc0, /* 11000000 */
317    0xfe, /* 11111110 */
318    0x00, /* 00000000 */
319    0x00, /* 00000000 */
320
321    /* 29 0x1d '^]' */
322    0x00, /* 00000000 */
323    0x24, /* 00100100 */
324    0x66, /* 01100110 */
325    0xff, /* 11111111 */
326    0x66, /* 01100110 */
327    0x24, /* 00100100 */
328    0x00, /* 00000000 */
329    0x00, /* 00000000 */
330
331    /* 30 0x1e '^^' */
332    0x00, /* 00000000 */
333    0x18, /* 00011000 */
334    0x3c, /* 00111100 */
335    0x7e, /* 01111110 */
336    0xff, /* 11111111 */
337    0xff, /* 11111111 */
338    0x00, /* 00000000 */
339    0x00, /* 00000000 */
340
341    /* 31 0x1f '^_' */
342    0x00, /* 00000000 */
343    0xff, /* 11111111 */
344    0xff, /* 11111111 */
345    0x7e, /* 01111110 */
346    0x3c, /* 00111100 */
347    0x18, /* 00011000 */
348    0x00, /* 00000000 */
349    0x00, /* 00000000 */
350
351    /* 32 0x20 ' ' */
352    0x00, /* 00000000 */
353    0x00, /* 00000000 */
354    0x00, /* 00000000 */
355    0x00, /* 00000000 */
356    0x00, /* 00000000 */
357    0x00, /* 00000000 */
358    0x00, /* 00000000 */
359    0x00, /* 00000000 */
360
361    /* 33 0x21 '!' */
362    0x18, /* 00011000 */
363    0x3c, /* 00111100 */
364    0x3c, /* 00111100 */
365    0x18, /* 00011000 */
366    0x18, /* 00011000 */
367    0x00, /* 00000000 */
368    0x18, /* 00011000 */
369    0x00, /* 00000000 */
370
371    /* 34 0x22 '"' */
372    0x66, /* 01100110 */
373    0x66, /* 01100110 */
374    0x24, /* 00100100 */
375    0x00, /* 00000000 */
376    0x00, /* 00000000 */
377    0x00, /* 00000000 */
378    0x00, /* 00000000 */
379    0x00, /* 00000000 */
380
381    /* 35 0x23 '#' */
382    0x6c, /* 01101100 */
383    0x6c, /* 01101100 */
384    0xfe, /* 11111110 */
385    0x6c, /* 01101100 */
386    0xfe, /* 11111110 */
387    0x6c, /* 01101100 */
388    0x6c, /* 01101100 */
389    0x00, /* 00000000 */
390
391    /* 36 0x24 '$' */
392    0x18, /* 00011000 */
393    0x3e, /* 00111110 */
394    0x60, /* 01100000 */
395    0x3c, /* 00111100 */
396    0x06, /* 00000110 */
397    0x7c, /* 01111100 */
398    0x18, /* 00011000 */
399    0x00, /* 00000000 */
400
401    /* 37 0x25 '%' */
402    0x00, /* 00000000 */
403    0xc6, /* 11000110 */
404    0xcc, /* 11001100 */
405    0x18, /* 00011000 */
406    0x30, /* 00110000 */
407    0x66, /* 01100110 */
408    0xc6, /* 11000110 */
409    0x00, /* 00000000 */
410
411    /* 38 0x26 '&' */
412    0x38, /* 00111000 */
413    0x6c, /* 01101100 */
414    0x38, /* 00111000 */
415    0x76, /* 01110110 */
416    0xdc, /* 11011100 */
417    0xcc, /* 11001100 */
418    0x76, /* 01110110 */
419    0x00, /* 00000000 */
420
421    /* 39 0x27 ''' */
422    0x18, /* 00011000 */
423    0x18, /* 00011000 */
424    0x30, /* 00110000 */
425    0x00, /* 00000000 */
426    0x00, /* 00000000 */
427    0x00, /* 00000000 */
428    0x00, /* 00000000 */
429    0x00, /* 00000000 */
430
431    /* 40 0x28 '(' */
432    0x0c, /* 00001100 */
433    0x18, /* 00011000 */
434    0x30, /* 00110000 */
435    0x30, /* 00110000 */
436    0x30, /* 00110000 */
437    0x18, /* 00011000 */
438    0x0c, /* 00001100 */
439    0x00, /* 00000000 */
440
441    /* 41 0x29 ')' */
442    0x30, /* 00110000 */
443    0x18, /* 00011000 */
444    0x0c, /* 00001100 */
445    0x0c, /* 00001100 */
446    0x0c, /* 00001100 */
447    0x18, /* 00011000 */
448    0x30, /* 00110000 */
449    0x00, /* 00000000 */
450
451    /* 42 0x2a '*' */
452    0x00, /* 00000000 */
453    0x66, /* 01100110 */
454    0x3c, /* 00111100 */
455    0xff, /* 11111111 */
456    0x3c, /* 00111100 */
457    0x66, /* 01100110 */
458    0x00, /* 00000000 */
459    0x00, /* 00000000 */
460
461    /* 43 0x2b '+' */
462    0x00, /* 00000000 */
463    0x18, /* 00011000 */
464    0x18, /* 00011000 */
465    0x7e, /* 01111110 */
466    0x18, /* 00011000 */
467    0x18, /* 00011000 */
468    0x00, /* 00000000 */
469    0x00, /* 00000000 */
470
471    /* 44 0x2c ',' */
472    0x00, /* 00000000 */
473    0x00, /* 00000000 */
474    0x00, /* 00000000 */
475    0x00, /* 00000000 */
476    0x00, /* 00000000 */
477    0x18, /* 00011000 */
478    0x18, /* 00011000 */
479    0x30, /* 00110000 */
480
481    /* 45 0x2d '-' */
482    0x00, /* 00000000 */
483    0x00, /* 00000000 */
484    0x00, /* 00000000 */
485    0x7e, /* 01111110 */
486    0x00, /* 00000000 */
487    0x00, /* 00000000 */
488    0x00, /* 00000000 */
489    0x00, /* 00000000 */
490
491    /* 46 0x2e '.' */
492    0x00, /* 00000000 */
493    0x00, /* 00000000 */
494    0x00, /* 00000000 */
495    0x00, /* 00000000 */
496    0x00, /* 00000000 */
497    0x18, /* 00011000 */
498    0x18, /* 00011000 */
499    0x00, /* 00000000 */
500
501    /* 47 0x2f '/' */
502    0x06, /* 00000110 */
503    0x0c, /* 00001100 */
504    0x18, /* 00011000 */
505    0x30, /* 00110000 */
506    0x60, /* 01100000 */
507    0xc0, /* 11000000 */
508    0x80, /* 10000000 */
509    0x00, /* 00000000 */
510
511    /* 48 0x30 '0' */
512    0x38, /* 00111000 */
513    0x6c, /* 01101100 */
514    0xc6, /* 11000110 */
515    0xd6, /* 11010110 */
516    0xc6, /* 11000110 */
517    0x6c, /* 01101100 */
518    0x38, /* 00111000 */
519    0x00, /* 00000000 */
520
521    /* 49 0x31 '1' */
522    0x18, /* 00011000 */
523    0x38, /* 00111000 */
524    0x18, /* 00011000 */
525    0x18, /* 00011000 */
526    0x18, /* 00011000 */
527    0x18, /* 00011000 */
528    0x7e, /* 01111110 */
529    0x00, /* 00000000 */
530
531    /* 50 0x32 '2' */
532    0x7c, /* 01111100 */
533    0xc6, /* 11000110 */
534    0x06, /* 00000110 */
535    0x1c, /* 00011100 */
536    0x30, /* 00110000 */
537    0x66, /* 01100110 */
538    0xfe, /* 11111110 */
539    0x00, /* 00000000 */
540
541    /* 51 0x33 '3' */
542    0x7c, /* 01111100 */
543    0xc6, /* 11000110 */
544    0x06, /* 00000110 */
545    0x3c, /* 00111100 */
546    0x06, /* 00000110 */
547    0xc6, /* 11000110 */
548    0x7c, /* 01111100 */
549    0x00, /* 00000000 */
550
551    /* 52 0x34 '4' */
552    0x1c, /* 00011100 */
553    0x3c, /* 00111100 */
554    0x6c, /* 01101100 */
555    0xcc, /* 11001100 */
556    0xfe, /* 11111110 */
557    0x0c, /* 00001100 */
558    0x1e, /* 00011110 */
559    0x00, /* 00000000 */
560
561    /* 53 0x35 '5' */
562    0xfe, /* 11111110 */
563    0xc0, /* 11000000 */
564    0xc0, /* 11000000 */
565    0xfc, /* 11111100 */
566    0x06, /* 00000110 */
567    0xc6, /* 11000110 */
568    0x7c, /* 01111100 */
569    0x00, /* 00000000 */
570
571    /* 54 0x36 '6' */
572    0x38, /* 00111000 */
573    0x60, /* 01100000 */
574    0xc0, /* 11000000 */
575    0xfc, /* 11111100 */
576    0xc6, /* 11000110 */
577    0xc6, /* 11000110 */
578    0x7c, /* 01111100 */
579    0x00, /* 00000000 */
580
581    /* 55 0x37 '7' */
582    0xfe, /* 11111110 */
583    0xc6, /* 11000110 */
584    0x0c, /* 00001100 */
585    0x18, /* 00011000 */
586    0x30, /* 00110000 */
587    0x30, /* 00110000 */
588    0x30, /* 00110000 */
589    0x00, /* 00000000 */
590
591    /* 56 0x38 '8' */
592    0x7c, /* 01111100 */
593    0xc6, /* 11000110 */
594    0xc6, /* 11000110 */
595    0x7c, /* 01111100 */
596    0xc6, /* 11000110 */
597    0xc6, /* 11000110 */
598    0x7c, /* 01111100 */
599    0x00, /* 00000000 */
600
601    /* 57 0x39 '9' */
602    0x7c, /* 01111100 */
603    0xc6, /* 11000110 */
604    0xc6, /* 11000110 */
605    0x7e, /* 01111110 */
606    0x06, /* 00000110 */
607    0x0c, /* 00001100 */
608    0x78, /* 01111000 */
609    0x00, /* 00000000 */
610
611    /* 58 0x3a ':' */
612    0x00, /* 00000000 */
613    0x18, /* 00011000 */
614    0x18, /* 00011000 */
615    0x00, /* 00000000 */
616    0x00, /* 00000000 */
617    0x18, /* 00011000 */
618    0x18, /* 00011000 */
619    0x00, /* 00000000 */
620
621    /* 59 0x3b ';' */
622    0x00, /* 00000000 */
623    0x18, /* 00011000 */
624    0x18, /* 00011000 */
625    0x00, /* 00000000 */
626    0x00, /* 00000000 */
627    0x18, /* 00011000 */
628    0x18, /* 00011000 */
629    0x30, /* 00110000 */
630
631    /* 60 0x3c '<' */
632    0x06, /* 00000110 */
633    0x0c, /* 00001100 */
634    0x18, /* 00011000 */
635    0x30, /* 00110000 */
636    0x18, /* 00011000 */
637    0x0c, /* 00001100 */
638    0x06, /* 00000110 */
639    0x00, /* 00000000 */
640
641    /* 61 0x3d '=' */
642    0x00, /* 00000000 */
643    0x00, /* 00000000 */
644    0x7e, /* 01111110 */
645    0x00, /* 00000000 */
646    0x00, /* 00000000 */
647    0x7e, /* 01111110 */
648    0x00, /* 00000000 */
649    0x00, /* 00000000 */
650
651    /* 62 0x3e '>' */
652    0x60, /* 01100000 */
653    0x30, /* 00110000 */
654    0x18, /* 00011000 */
655    0x0c, /* 00001100 */
656    0x18, /* 00011000 */
657    0x30, /* 00110000 */
658    0x60, /* 01100000 */
659    0x00, /* 00000000 */
660
661    /* 63 0x3f '?' */
662    0x7c, /* 01111100 */
663    0xc6, /* 11000110 */
664    0x0c, /* 00001100 */
665    0x18, /* 00011000 */
666    0x18, /* 00011000 */
667    0x00, /* 00000000 */
668    0x18, /* 00011000 */
669    0x00, /* 00000000 */
670
671    /* 64 0x40 '@' */
672    0x7c, /* 01111100 */
673    0xc6, /* 11000110 */
674    0xde, /* 11011110 */
675    0xde, /* 11011110 */
676    0xde, /* 11011110 */
677    0xc0, /* 11000000 */
678    0x78, /* 01111000 */
679    0x00, /* 00000000 */
680
681    /* 65 0x41 'A' */
682    0x38, /* 00111000 */
683    0x6c, /* 01101100 */
684    0xc6, /* 11000110 */
685    0xfe, /* 11111110 */
686    0xc6, /* 11000110 */
687    0xc6, /* 11000110 */
688    0xc6, /* 11000110 */
689    0x00, /* 00000000 */
690
691    /* 66 0x42 'B' */
692    0xfc, /* 11111100 */
693    0x66, /* 01100110 */
694    0x66, /* 01100110 */
695    0x7c, /* 01111100 */
696    0x66, /* 01100110 */
697    0x66, /* 01100110 */
698    0xfc, /* 11111100 */
699    0x00, /* 00000000 */
700
701    /* 67 0x43 'C' */
702    0x3c, /* 00111100 */
703    0x66, /* 01100110 */
704    0xc0, /* 11000000 */
705    0xc0, /* 11000000 */
706    0xc0, /* 11000000 */
707    0x66, /* 01100110 */
708    0x3c, /* 00111100 */
709    0x00, /* 00000000 */
710
711    /* 68 0x44 'D' */
712    0xf8, /* 11111000 */
713    0x6c, /* 01101100 */
714    0x66, /* 01100110 */
715    0x66, /* 01100110 */
716    0x66, /* 01100110 */
717    0x6c, /* 01101100 */
718    0xf8, /* 11111000 */
719    0x00, /* 00000000 */
720
721    /* 69 0x45 'E' */
722    0xfe, /* 11111110 */
723    0x62, /* 01100010 */
724    0x68, /* 01101000 */
725    0x78, /* 01111000 */
726    0x68, /* 01101000 */
727    0x62, /* 01100010 */
728    0xfe, /* 11111110 */
729    0x00, /* 00000000 */
730
731    /* 70 0x46 'F' */
732    0xfe, /* 11111110 */
733    0x62, /* 01100010 */
734    0x68, /* 01101000 */
735    0x78, /* 01111000 */
736    0x68, /* 01101000 */
737    0x60, /* 01100000 */
738    0xf0, /* 11110000 */
739    0x00, /* 00000000 */
740
741    /* 71 0x47 'G' */
742    0x3c, /* 00111100 */
743    0x66, /* 01100110 */
744    0xc0, /* 11000000 */
745    0xc0, /* 11000000 */
746    0xce, /* 11001110 */
747    0x66, /* 01100110 */
748    0x3a, /* 00111010 */
749    0x00, /* 00000000 */
750
751    /* 72 0x48 'H' */
752    0xc6, /* 11000110 */
753    0xc6, /* 11000110 */
754    0xc6, /* 11000110 */
755    0xfe, /* 11111110 */
756    0xc6, /* 11000110 */
757    0xc6, /* 11000110 */
758    0xc6, /* 11000110 */
759    0x00, /* 00000000 */
760
761    /* 73 0x49 'I' */
762    0x3c, /* 00111100 */
763    0x18, /* 00011000 */
764    0x18, /* 00011000 */
765    0x18, /* 00011000 */
766    0x18, /* 00011000 */
767    0x18, /* 00011000 */
768    0x3c, /* 00111100 */
769    0x00, /* 00000000 */
770
771    /* 74 0x4a 'J' */
772    0x1e, /* 00011110 */
773    0x0c, /* 00001100 */
774    0x0c, /* 00001100 */
775    0x0c, /* 00001100 */
776    0xcc, /* 11001100 */
777    0xcc, /* 11001100 */
778    0x78, /* 01111000 */
779    0x00, /* 00000000 */
780
781    /* 75 0x4b 'K' */
782    0xe6, /* 11100110 */
783    0x66, /* 01100110 */
784    0x6c, /* 01101100 */
785    0x78, /* 01111000 */
786    0x6c, /* 01101100 */
787    0x66, /* 01100110 */
788    0xe6, /* 11100110 */
789    0x00, /* 00000000 */
790
791    /* 76 0x4c 'L' */
792    0xf0, /* 11110000 */
793    0x60, /* 01100000 */
794    0x60, /* 01100000 */
795    0x60, /* 01100000 */
796    0x62, /* 01100010 */
797    0x66, /* 01100110 */
798    0xfe, /* 11111110 */
799    0x00, /* 00000000 */
800
801    /* 77 0x4d 'M' */
802    0xc6, /* 11000110 */
803    0xee, /* 11101110 */
804    0xfe, /* 11111110 */
805    0xfe, /* 11111110 */
806    0xd6, /* 11010110 */
807    0xc6, /* 11000110 */
808    0xc6, /* 11000110 */
809    0x00, /* 00000000 */
810
811    /* 78 0x4e 'N' */
812    0xc6, /* 11000110 */
813    0xe6, /* 11100110 */
814    0xf6, /* 11110110 */
815    0xde, /* 11011110 */
816    0xce, /* 11001110 */
817    0xc6, /* 11000110 */
818    0xc6, /* 11000110 */
819    0x00, /* 00000000 */
820
821    /* 79 0x4f 'O' */
822    0x7c, /* 01111100 */
823    0xc6, /* 11000110 */
824    0xc6, /* 11000110 */
825    0xc6, /* 11000110 */
826    0xc6, /* 11000110 */
827    0xc6, /* 11000110 */
828    0x7c, /* 01111100 */
829    0x00, /* 00000000 */
830
831    /* 80 0x50 'P' */
832    0xfc, /* 11111100 */
833    0x66, /* 01100110 */
834    0x66, /* 01100110 */
835    0x7c, /* 01111100 */
836    0x60, /* 01100000 */
837    0x60, /* 01100000 */
838    0xf0, /* 11110000 */
839    0x00, /* 00000000 */
840
841    /* 81 0x51 'Q' */
842    0x7c, /* 01111100 */
843    0xc6, /* 11000110 */
844    0xc6, /* 11000110 */
845    0xc6, /* 11000110 */
846    0xc6, /* 11000110 */
847    0xce, /* 11001110 */
848    0x7c, /* 01111100 */
849    0x0e, /* 00001110 */
850
851    /* 82 0x52 'R' */
852    0xfc, /* 11111100 */
853    0x66, /* 01100110 */
854    0x66, /* 01100110 */
855    0x7c, /* 01111100 */
856    0x6c, /* 01101100 */
857    0x66, /* 01100110 */
858    0xe6, /* 11100110 */
859    0x00, /* 00000000 */
860
861    /* 83 0x53 'S' */
862    0x3c, /* 00111100 */
863    0x66, /* 01100110 */
864    0x30, /* 00110000 */
865    0x18, /* 00011000 */
866    0x0c, /* 00001100 */
867    0x66, /* 01100110 */
868    0x3c, /* 00111100 */
869    0x00, /* 00000000 */
870
871    /* 84 0x54 'T' */
872    0x7e, /* 01111110 */
873    0x7e, /* 01111110 */
874    0x5a, /* 01011010 */
875    0x18, /* 00011000 */
876    0x18, /* 00011000 */
877    0x18, /* 00011000 */
878    0x3c, /* 00111100 */
879    0x00, /* 00000000 */
880
881    /* 85 0x55 'U' */
882    0xc6, /* 11000110 */
883    0xc6, /* 11000110 */
884    0xc6, /* 11000110 */
885    0xc6, /* 11000110 */
886    0xc6, /* 11000110 */
887    0xc6, /* 11000110 */
888    0x7c, /* 01111100 */
889    0x00, /* 00000000 */
890
891    /* 86 0x56 'V' */
892    0xc6, /* 11000110 */
893    0xc6, /* 11000110 */
894    0xc6, /* 11000110 */
895    0xc6, /* 11000110 */
896    0xc6, /* 11000110 */
897    0x6c, /* 01101100 */
898    0x38, /* 00111000 */
899    0x00, /* 00000000 */
900
901    /* 87 0x57 'W' */
902    0xc6, /* 11000110 */
903    0xc6, /* 11000110 */
904    0xc6, /* 11000110 */
905    0xd6, /* 11010110 */
906    0xd6, /* 11010110 */
907    0xfe, /* 11111110 */
908    0x6c, /* 01101100 */
909    0x00, /* 00000000 */
910
911    /* 88 0x58 'X' */
912    0xc6, /* 11000110 */
913    0xc6, /* 11000110 */
914    0x6c, /* 01101100 */
915    0x38, /* 00111000 */
916    0x6c, /* 01101100 */
917    0xc6, /* 11000110 */
918    0xc6, /* 11000110 */
919    0x00, /* 00000000 */
920
921    /* 89 0x59 'Y' */
922    0x66, /* 01100110 */
923    0x66, /* 01100110 */
924    0x66, /* 01100110 */
925    0x3c, /* 00111100 */
926    0x18, /* 00011000 */
927    0x18, /* 00011000 */
928    0x3c, /* 00111100 */
929    0x00, /* 00000000 */
930
931    /* 90 0x5a 'Z' */
932    0xfe, /* 11111110 */
933    0xc6, /* 11000110 */
934    0x8c, /* 10001100 */
935    0x18, /* 00011000 */
936    0x32, /* 00110010 */
937    0x66, /* 01100110 */
938    0xfe, /* 11111110 */
939    0x00, /* 00000000 */
940
941    /* 91 0x5b '[' */
942    0x3c, /* 00111100 */
943    0x30, /* 00110000 */
944    0x30, /* 00110000 */
945    0x30, /* 00110000 */
946    0x30, /* 00110000 */
947    0x30, /* 00110000 */
948    0x3c, /* 00111100 */
949    0x00, /* 00000000 */
950
951    /* 92 0x5c '\' */
952    0xc0, /* 11000000 */
953    0x60, /* 01100000 */
954    0x30, /* 00110000 */
955    0x18, /* 00011000 */
956    0x0c, /* 00001100 */
957    0x06, /* 00000110 */
958    0x02, /* 00000010 */
959    0x00, /* 00000000 */
960
961    /* 93 0x5d ']' */
962    0x3c, /* 00111100 */
963    0x0c, /* 00001100 */
964    0x0c, /* 00001100 */
965    0x0c, /* 00001100 */
966    0x0c, /* 00001100 */
967    0x0c, /* 00001100 */
968    0x3c, /* 00111100 */
969    0x00, /* 00000000 */
970
971    /* 94 0x5e '^' */
972    0x10, /* 00010000 */
973    0x38, /* 00111000 */
974    0x6c, /* 01101100 */
975    0xc6, /* 11000110 */
976    0x00, /* 00000000 */
977    0x00, /* 00000000 */
978    0x00, /* 00000000 */
979    0x00, /* 00000000 */
980
981    /* 95 0x5f '_' */
982    0x00, /* 00000000 */
983    0x00, /* 00000000 */
984    0x00, /* 00000000 */
985    0x00, /* 00000000 */
986    0x00, /* 00000000 */
987    0x00, /* 00000000 */
988    0x00, /* 00000000 */
989    0xff, /* 11111111 */
990
991    /* 96 0x60 '`' */
992    0x30, /* 00110000 */
993    0x18, /* 00011000 */
994    0x0c, /* 00001100 */
995    0x00, /* 00000000 */
996    0x00, /* 00000000 */
997    0x00, /* 00000000 */
998    0x00, /* 00000000 */
999    0x00, /* 00000000 */
1000
1001    /* 97 0x61 'a' */
1002    0x00, /* 00000000 */
1003    0x00, /* 00000000 */
1004    0x78, /* 01111000 */
1005    0x0c, /* 00001100 */
1006    0x7c, /* 01111100 */
1007    0xcc, /* 11001100 */
1008    0x76, /* 01110110 */
1009    0x00, /* 00000000 */
1010
1011    /* 98 0x62 'b' */
1012    0xe0, /* 11100000 */
1013    0x60, /* 01100000 */
1014    0x7c, /* 01111100 */
1015    0x66, /* 01100110 */
1016    0x66, /* 01100110 */
1017    0x66, /* 01100110 */
1018    0xdc, /* 11011100 */
1019    0x00, /* 00000000 */
1020
1021    /* 99 0x63 'c' */
1022    0x00, /* 00000000 */
1023    0x00, /* 00000000 */
1024    0x7c, /* 01111100 */
1025    0xc6, /* 11000110 */
1026    0xc0, /* 11000000 */
1027    0xc6, /* 11000110 */
1028    0x7c, /* 01111100 */
1029    0x00, /* 00000000 */
1030
1031    /* 100 0x64 'd' */
1032    0x1c, /* 00011100 */
1033    0x0c, /* 00001100 */
1034    0x7c, /* 01111100 */
1035    0xcc, /* 11001100 */
1036    0xcc, /* 11001100 */
1037    0xcc, /* 11001100 */
1038    0x76, /* 01110110 */
1039    0x00, /* 00000000 */
1040
1041    /* 101 0x65 'e' */
1042    0x00, /* 00000000 */
1043    0x00, /* 00000000 */
1044    0x7c, /* 01111100 */
1045    0xc6, /* 11000110 */
1046    0xfe, /* 11111110 */
1047    0xc0, /* 11000000 */
1048    0x7c, /* 01111100 */
1049    0x00, /* 00000000 */
1050
1051    /* 102 0x66 'f' */
1052    0x3c, /* 00111100 */
1053    0x66, /* 01100110 */
1054    0x60, /* 01100000 */
1055    0xf8, /* 11111000 */
1056    0x60, /* 01100000 */
1057    0x60, /* 01100000 */
1058    0xf0, /* 11110000 */
1059    0x00, /* 00000000 */
1060
1061    /* 103 0x67 'g' */
1062    0x00, /* 00000000 */
1063    0x00, /* 00000000 */
1064    0x76, /* 01110110 */
1065    0xcc, /* 11001100 */
1066    0xcc, /* 11001100 */
1067    0x7c, /* 01111100 */
1068    0x0c, /* 00001100 */
1069    0xf8, /* 11111000 */
1070
1071    /* 104 0x68 'h' */
1072    0xe0, /* 11100000 */
1073    0x60, /* 01100000 */
1074    0x6c, /* 01101100 */
1075    0x76, /* 01110110 */
1076    0x66, /* 01100110 */
1077    0x66, /* 01100110 */
1078    0xe6, /* 11100110 */
1079    0x00, /* 00000000 */
1080
1081    /* 105 0x69 'i' */
1082    0x18, /* 00011000 */
1083    0x00, /* 00000000 */
1084    0x38, /* 00111000 */
1085    0x18, /* 00011000 */
1086    0x18, /* 00011000 */
1087    0x18, /* 00011000 */
1088    0x3c, /* 00111100 */
1089    0x00, /* 00000000 */
1090
1091    /* 106 0x6a 'j' */
1092    0x06, /* 00000110 */
1093    0x00, /* 00000000 */
1094    0x06, /* 00000110 */
1095    0x06, /* 00000110 */
1096    0x06, /* 00000110 */
1097    0x66, /* 01100110 */
1098    0x66, /* 01100110 */
1099    0x3c, /* 00111100 */
1100
1101    /* 107 0x6b 'k' */
1102    0xe0, /* 11100000 */
1103    0x60, /* 01100000 */
1104    0x66, /* 01100110 */
1105    0x6c, /* 01101100 */
1106    0x78, /* 01111000 */
1107    0x6c, /* 01101100 */
1108    0xe6, /* 11100110 */
1109    0x00, /* 00000000 */
1110
1111    /* 108 0x6c 'l' */
1112    0x38, /* 00111000 */
1113    0x18, /* 00011000 */
1114    0x18, /* 00011000 */
1115    0x18, /* 00011000 */
1116    0x18, /* 00011000 */
1117    0x18, /* 00011000 */
1118    0x3c, /* 00111100 */
1119    0x00, /* 00000000 */
1120
1121    /* 109 0x6d 'm' */
1122    0x00, /* 00000000 */
1123    0x00, /* 00000000 */
1124    0xec, /* 11101100 */
1125    0xfe, /* 11111110 */
1126    0xd6, /* 11010110 */
1127    0xd6, /* 11010110 */
1128    0xd6, /* 11010110 */
1129    0x00, /* 00000000 */
1130
1131    /* 110 0x6e 'n' */
1132    0x00, /* 00000000 */
1133    0x00, /* 00000000 */
1134    0xdc, /* 11011100 */
1135    0x66, /* 01100110 */
1136    0x66, /* 01100110 */
1137    0x66, /* 01100110 */
1138    0x66, /* 01100110 */
1139    0x00, /* 00000000 */
1140
1141    /* 111 0x6f 'o' */
1142    0x00, /* 00000000 */
1143    0x00, /* 00000000 */
1144    0x7c, /* 01111100 */
1145    0xc6, /* 11000110 */
1146    0xc6, /* 11000110 */
1147    0xc6, /* 11000110 */
1148    0x7c, /* 01111100 */
1149    0x00, /* 00000000 */
1150
1151    /* 112 0x70 'p' */
1152    0x00, /* 00000000 */
1153    0x00, /* 00000000 */
1154    0xdc, /* 11011100 */
1155    0x66, /* 01100110 */
1156    0x66, /* 01100110 */
1157    0x7c, /* 01111100 */
1158    0x60, /* 01100000 */
1159    0xf0, /* 11110000 */
1160
1161    /* 113 0x71 'q' */
1162    0x00, /* 00000000 */
1163    0x00, /* 00000000 */
1164    0x76, /* 01110110 */
1165    0xcc, /* 11001100 */
1166    0xcc, /* 11001100 */
1167    0x7c, /* 01111100 */
1168    0x0c, /* 00001100 */
1169    0x1e, /* 00011110 */
1170
1171    /* 114 0x72 'r' */
1172    0x00, /* 00000000 */
1173    0x00, /* 00000000 */
1174    0xdc, /* 11011100 */
1175    0x76, /* 01110110 */
1176    0x60, /* 01100000 */
1177    0x60, /* 01100000 */
1178    0xf0, /* 11110000 */
1179    0x00, /* 00000000 */
1180
1181    /* 115 0x73 's' */
1182    0x00, /* 00000000 */
1183    0x00, /* 00000000 */
1184    0x7e, /* 01111110 */
1185    0xc0, /* 11000000 */
1186    0x7c, /* 01111100 */
1187    0x06, /* 00000110 */
1188    0xfc, /* 11111100 */
1189    0x00, /* 00000000 */
1190
1191    /* 116 0x74 't' */
1192    0x30, /* 00110000 */
1193    0x30, /* 00110000 */
1194    0xfc, /* 11111100 */
1195    0x30, /* 00110000 */
1196    0x30, /* 00110000 */
1197    0x36, /* 00110110 */
1198    0x1c, /* 00011100 */
1199    0x00, /* 00000000 */
1200
1201    /* 117 0x75 'u' */
1202    0x00, /* 00000000 */
1203    0x00, /* 00000000 */
1204    0xcc, /* 11001100 */
1205    0xcc, /* 11001100 */
1206    0xcc, /* 11001100 */
1207    0xcc, /* 11001100 */
1208    0x76, /* 01110110 */
1209    0x00, /* 00000000 */
1210
1211    /* 118 0x76 'v' */
1212    0x00, /* 00000000 */
1213    0x00, /* 00000000 */
1214    0xc6, /* 11000110 */
1215    0xc6, /* 11000110 */
1216    0xc6, /* 11000110 */
1217    0x6c, /* 01101100 */
1218    0x38, /* 00111000 */
1219    0x00, /* 00000000 */
1220
1221    /* 119 0x77 'w' */
1222    0x00, /* 00000000 */
1223    0x00, /* 00000000 */
1224    0xc6, /* 11000110 */
1225    0xd6, /* 11010110 */
1226    0xd6, /* 11010110 */
1227    0xfe, /* 11111110 */
1228    0x6c, /* 01101100 */
1229    0x00, /* 00000000 */
1230
1231    /* 120 0x78 'x' */
1232    0x00, /* 00000000 */
1233    0x00, /* 00000000 */
1234    0xc6, /* 11000110 */
1235    0x6c, /* 01101100 */
1236    0x38, /* 00111000 */
1237    0x6c, /* 01101100 */
1238    0xc6, /* 11000110 */
1239    0x00, /* 00000000 */
1240
1241    /* 121 0x79 'y' */
1242    0x00, /* 00000000 */
1243    0x00, /* 00000000 */
1244    0xc6, /* 11000110 */
1245    0xc6, /* 11000110 */
1246    0xc6, /* 11000110 */
1247    0x7e, /* 01111110 */
1248    0x06, /* 00000110 */
1249    0xfc, /* 11111100 */
1250
1251    /* 122 0x7a 'z' */
1252    0x00, /* 00000000 */
1253    0x00, /* 00000000 */
1254    0x7e, /* 01111110 */
1255    0x4c, /* 01001100 */
1256    0x18, /* 00011000 */
1257    0x32, /* 00110010 */
1258    0x7e, /* 01111110 */
1259    0x00, /* 00000000 */
1260
1261    /* 123 0x7b '{' */
1262    0x0e, /* 00001110 */
1263    0x18, /* 00011000 */
1264    0x18, /* 00011000 */
1265    0x70, /* 01110000 */
1266    0x18, /* 00011000 */
1267    0x18, /* 00011000 */
1268    0x0e, /* 00001110 */
1269    0x00, /* 00000000 */
1270
1271    /* 124 0x7c '|' */
1272    0x18, /* 00011000 */
1273    0x18, /* 00011000 */
1274    0x18, /* 00011000 */
1275    0x18, /* 00011000 */
1276    0x18, /* 00011000 */
1277    0x18, /* 00011000 */
1278    0x18, /* 00011000 */
1279    0x00, /* 00000000 */
1280
1281    /* 125 0x7d '}' */
1282    0x70, /* 01110000 */
1283    0x18, /* 00011000 */
1284    0x18, /* 00011000 */
1285    0x0e, /* 00001110 */
1286    0x18, /* 00011000 */
1287    0x18, /* 00011000 */
1288    0x70, /* 01110000 */
1289    0x00, /* 00000000 */
1290
1291    /* 126 0x7e '~' */
1292    0x76, /* 01110110 */
1293    0xdc, /* 11011100 */
1294    0x00, /* 00000000 */
1295    0x00, /* 00000000 */
1296    0x00, /* 00000000 */
1297    0x00, /* 00000000 */
1298    0x00, /* 00000000 */
1299    0x00, /* 00000000 */
1300
1301    /* 127 0x7f '' */
1302    0x00, /* 00000000 */
1303    0x10, /* 00010000 */
1304    0x38, /* 00111000 */
1305    0x6c, /* 01101100 */
1306    0xc6, /* 11000110 */
1307    0xc6, /* 11000110 */
1308    0xfe, /* 11111110 */
1309    0x00, /* 00000000 */
1310
1311    /* 128 0x80 '€' */
1312    0x7c, /* 01111100 */
1313    0xc6, /* 11000110 */
1314    0xc0, /* 11000000 */
1315    0xc0, /* 11000000 */
1316    0xc6, /* 11000110 */
1317    0x7c, /* 01111100 */
1318    0x0c, /* 00001100 */
1319    0x78, /* 01111000 */
1320
1321    /* 129 0x81 '' */
1322    0xcc, /* 11001100 */
1323    0x00, /* 00000000 */
1324    0xcc, /* 11001100 */
1325    0xcc, /* 11001100 */
1326    0xcc, /* 11001100 */
1327    0xcc, /* 11001100 */
1328    0x76, /* 01110110 */
1329    0x00, /* 00000000 */
1330
1331    /* 130 0x82 '‚' */
1332    0x0c, /* 00001100 */
1333    0x18, /* 00011000 */
1334    0x7c, /* 01111100 */
1335    0xc6, /* 11000110 */
1336    0xfe, /* 11111110 */
1337    0xc0, /* 11000000 */
1338    0x7c, /* 01111100 */
1339    0x00, /* 00000000 */
1340
1341    /* 131 0x83 'ƒ' */
1342    0x7c, /* 01111100 */
1343    0x82, /* 10000010 */
1344    0x78, /* 01111000 */
1345    0x0c, /* 00001100 */
1346    0x7c, /* 01111100 */
1347    0xcc, /* 11001100 */
1348    0x76, /* 01110110 */
1349    0x00, /* 00000000 */
1350
1351    /* 132 0x84 '„' */
1352    0xc6, /* 11000110 */
1353    0x00, /* 00000000 */
1354    0x78, /* 01111000 */
1355    0x0c, /* 00001100 */
1356    0x7c, /* 01111100 */
1357    0xcc, /* 11001100 */
1358    0x76, /* 01110110 */
1359    0x00, /* 00000000 */
1360
1361    /* 133 0x85 '…' */
1362    0x30, /* 00110000 */
1363    0x18, /* 00011000 */
1364    0x78, /* 01111000 */
1365    0x0c, /* 00001100 */
1366    0x7c, /* 01111100 */
1367    0xcc, /* 11001100 */
1368    0x76, /* 01110110 */
1369    0x00, /* 00000000 */
1370
1371    /* 134 0x86 '†' */
1372    0x30, /* 00110000 */
1373    0x30, /* 00110000 */
1374    0x78, /* 01111000 */
1375    0x0c, /* 00001100 */
1376    0x7c, /* 01111100 */
1377    0xcc, /* 11001100 */
1378    0x76, /* 01110110 */
1379    0x00, /* 00000000 */
1380
1381    /* 135 0x87 '‡' */
1382    0x00, /* 00000000 */
1383    0x00, /* 00000000 */
1384    0x7e, /* 01111110 */
1385    0xc0, /* 11000000 */
1386    0xc0, /* 11000000 */
1387    0x7e, /* 01111110 */
1388    0x0c, /* 00001100 */
1389    0x38, /* 00111000 */
1390
1391    /* 136 0x88 'ˆ' */
1392    0x7c, /* 01111100 */
1393    0x82, /* 10000010 */
1394    0x7c, /* 01111100 */
1395    0xc6, /* 11000110 */
1396    0xfe, /* 11111110 */
1397    0xc0, /* 11000000 */
1398    0x7c, /* 01111100 */
1399    0x00, /* 00000000 */
1400
1401    /* 137 0x89 '‰' */
1402    0xc6, /* 11000110 */
1403    0x00, /* 00000000 */
1404    0x7c, /* 01111100 */
1405    0xc6, /* 11000110 */
1406    0xfe, /* 11111110 */
1407    0xc0, /* 11000000 */
1408    0x7c, /* 01111100 */
1409    0x00, /* 00000000 */
1410
1411    /* 138 0x8a 'Š' */
1412    0x30, /* 00110000 */
1413    0x18, /* 00011000 */
1414    0x7c, /* 01111100 */
1415    0xc6, /* 11000110 */
1416    0xfe, /* 11111110 */
1417    0xc0, /* 11000000 */
1418    0x7c, /* 01111100 */
1419    0x00, /* 00000000 */
1420
1421    /* 139 0x8b '‹' */
1422    0x66, /* 01100110 */
1423    0x00, /* 00000000 */
1424    0x38, /* 00111000 */
1425    0x18, /* 00011000 */
1426    0x18, /* 00011000 */
1427    0x18, /* 00011000 */
1428    0x3c, /* 00111100 */
1429    0x00, /* 00000000 */
1430
1431    /* 140 0x8c 'Œ' */
1432    0x7c, /* 01111100 */
1433    0x82, /* 10000010 */
1434    0x38, /* 00111000 */
1435    0x18, /* 00011000 */
1436    0x18, /* 00011000 */
1437    0x18, /* 00011000 */
1438    0x3c, /* 00111100 */
1439    0x00, /* 00000000 */
1440
1441    /* 141 0x8d '' */
1442    0x30, /* 00110000 */
1443    0x18, /* 00011000 */
1444    0x00, /* 00000000 */
1445    0x38, /* 00111000 */
1446    0x18, /* 00011000 */
1447    0x18, /* 00011000 */
1448    0x3c, /* 00111100 */
1449    0x00, /* 00000000 */
1450
1451    /* 142 0x8e 'Ž' */
1452    0xc6, /* 11000110 */
1453    0x38, /* 00111000 */
1454    0x6c, /* 01101100 */
1455    0xc6, /* 11000110 */
1456    0xfe, /* 11111110 */
1457    0xc6, /* 11000110 */
1458    0xc6, /* 11000110 */
1459    0x00, /* 00000000 */
1460
1461    /* 143 0x8f '' */
1462    0x38, /* 00111000 */
1463    0x6c, /* 01101100 */
1464    0x7c, /* 01111100 */
1465    0xc6, /* 11000110 */
1466    0xfe, /* 11111110 */
1467    0xc6, /* 11000110 */
1468    0xc6, /* 11000110 */
1469    0x00, /* 00000000 */
1470
1471    /* 144 0x90 '' */
1472    0x18, /* 00011000 */
1473    0x30, /* 00110000 */
1474    0xfe, /* 11111110 */
1475    0xc0, /* 11000000 */
1476    0xf8, /* 11111000 */
1477    0xc0, /* 11000000 */
1478    0xfe, /* 11111110 */
1479    0x00, /* 00000000 */
1480
1481    /* 145 0x91 '‘' */
1482    0x00, /* 00000000 */
1483    0x00, /* 00000000 */
1484    0x7e, /* 01111110 */
1485    0x18, /* 00011000 */
1486    0x7e, /* 01111110 */
1487    0xd8, /* 11011000 */
1488    0x7e, /* 01111110 */
1489    0x00, /* 00000000 */
1490
1491    /* 146 0x92 '’' */
1492    0x3e, /* 00111110 */
1493    0x6c, /* 01101100 */
1494    0xcc, /* 11001100 */
1495    0xfe, /* 11111110 */
1496    0xcc, /* 11001100 */
1497    0xcc, /* 11001100 */
1498    0xce, /* 11001110 */
1499    0x00, /* 00000000 */
1500
1501    /* 147 0x93 '“' */
1502    0x7c, /* 01111100 */
1503    0x82, /* 10000010 */
1504    0x7c, /* 01111100 */
1505    0xc6, /* 11000110 */
1506    0xc6, /* 11000110 */
1507    0xc6, /* 11000110 */
1508    0x7c, /* 01111100 */
1509    0x00, /* 00000000 */
1510
1511    /* 148 0x94 '”' */
1512    0xc6, /* 11000110 */
1513    0x00, /* 00000000 */
1514    0x7c, /* 01111100 */
1515    0xc6, /* 11000110 */
1516    0xc6, /* 11000110 */
1517    0xc6, /* 11000110 */
1518    0x7c, /* 01111100 */
1519    0x00, /* 00000000 */
1520
1521    /* 149 0x95 '•' */
1522    0x30, /* 00110000 */
1523    0x18, /* 00011000 */
1524    0x7c, /* 01111100 */
1525    0xc6, /* 11000110 */
1526    0xc6, /* 11000110 */
1527    0xc6, /* 11000110 */
1528    0x7c, /* 01111100 */
1529    0x00, /* 00000000 */
1530
1531    /* 150 0x96 '–' */
1532    0x78, /* 01111000 */
1533    0x84, /* 10000100 */
1534    0x00, /* 00000000 */
1535    0xcc, /* 11001100 */
1536    0xcc, /* 11001100 */
1537    0xcc, /* 11001100 */
1538    0x76, /* 01110110 */
1539    0x00, /* 00000000 */
1540
1541    /* 151 0x97 '—' */
1542    0x60, /* 01100000 */
1543    0x30, /* 00110000 */
1544    0xcc, /* 11001100 */
1545    0xcc, /* 11001100 */
1546    0xcc, /* 11001100 */
1547    0xcc, /* 11001100 */
1548    0x76, /* 01110110 */
1549    0x00, /* 00000000 */
1550
1551    /* 152 0x98 '˜' */
1552    0xc6, /* 11000110 */
1553    0x00, /* 00000000 */
1554    0xc6, /* 11000110 */
1555    0xc6, /* 11000110 */
1556    0xc6, /* 11000110 */
1557    0x7e, /* 01111110 */
1558    0x06, /* 00000110 */
1559    0xfc, /* 11111100 */
1560
1561    /* 153 0x99 '™' */
1562    0xc6, /* 11000110 */
1563    0x38, /* 00111000 */
1564    0x6c, /* 01101100 */
1565    0xc6, /* 11000110 */
1566    0xc6, /* 11000110 */
1567    0x6c, /* 01101100 */
1568    0x38, /* 00111000 */
1569    0x00, /* 00000000 */
1570
1571    /* 154 0x9a 'š' */
1572    0xc6, /* 11000110 */
1573    0x00, /* 00000000 */
1574    0xc6, /* 11000110 */
1575    0xc6, /* 11000110 */
1576    0xc6, /* 11000110 */
1577    0xc6, /* 11000110 */
1578    0x7c, /* 01111100 */
1579    0x00, /* 00000000 */
1580
1581    /* 155 0x9b '›' */
1582    0x18, /* 00011000 */
1583    0x18, /* 00011000 */
1584    0x7e, /* 01111110 */
1585    0xc0, /* 11000000 */
1586    0xc0, /* 11000000 */
1587    0x7e, /* 01111110 */
1588    0x18, /* 00011000 */
1589    0x18, /* 00011000 */
1590
1591    /* 156 0x9c 'œ' */
1592    0x38, /* 00111000 */
1593    0x6c, /* 01101100 */
1594    0x64, /* 01100100 */
1595    0xf0, /* 11110000 */
1596    0x60, /* 01100000 */
1597    0x66, /* 01100110 */
1598    0xfc, /* 11111100 */
1599    0x00, /* 00000000 */
1600
1601    /* 157 0x9d '' */
1602    0x66, /* 01100110 */
1603    0x66, /* 01100110 */
1604    0x3c, /* 00111100 */
1605    0x7e, /* 01111110 */
1606    0x18, /* 00011000 */
1607    0x7e, /* 01111110 */
1608    0x18, /* 00011000 */
1609    0x18, /* 00011000 */
1610
1611    /* 158 0x9e 'ž' */
1612    0xf8, /* 11111000 */
1613    0xcc, /* 11001100 */
1614    0xcc, /* 11001100 */
1615    0xfa, /* 11111010 */
1616    0xc6, /* 11000110 */
1617    0xcf, /* 11001111 */
1618    0xc6, /* 11000110 */
1619    0xc7, /* 11000111 */
1620
1621    /* 159 0x9f 'Ÿ' */
1622    0x0e, /* 00001110 */
1623    0x1b, /* 00011011 */
1624    0x18, /* 00011000 */
1625    0x3c, /* 00111100 */
1626    0x18, /* 00011000 */
1627    0xd8, /* 11011000 */
1628    0x70, /* 01110000 */
1629    0x00, /* 00000000 */
1630
1631    /* 160 0xa0 ' ' */
1632    0x18, /* 00011000 */
1633    0x30, /* 00110000 */
1634    0x78, /* 01111000 */
1635    0x0c, /* 00001100 */
1636    0x7c, /* 01111100 */
1637    0xcc, /* 11001100 */
1638    0x76, /* 01110110 */
1639    0x00, /* 00000000 */
1640
1641    /* 161 0xa1 '¡' */
1642    0x0c, /* 00001100 */
1643    0x18, /* 00011000 */
1644    0x00, /* 00000000 */
1645    0x38, /* 00111000 */
1646    0x18, /* 00011000 */
1647    0x18, /* 00011000 */
1648    0x3c, /* 00111100 */
1649    0x00, /* 00000000 */
1650
1651    /* 162 0xa2 '¢' */
1652    0x0c, /* 00001100 */
1653    0x18, /* 00011000 */
1654    0x7c, /* 01111100 */
1655    0xc6, /* 11000110 */
1656    0xc6, /* 11000110 */
1657    0xc6, /* 11000110 */
1658    0x7c, /* 01111100 */
1659    0x00, /* 00000000 */
1660
1661    /* 163 0xa3 '£' */
1662    0x18, /* 00011000 */
1663    0x30, /* 00110000 */
1664    0xcc, /* 11001100 */
1665    0xcc, /* 11001100 */
1666    0xcc, /* 11001100 */
1667    0xcc, /* 11001100 */
1668    0x76, /* 01110110 */
1669    0x00, /* 00000000 */
1670
1671    /* 164 0xa4 '€' */
1672    0x76, /* 01110110 */
1673    0xdc, /* 11011100 */
1674    0x00, /* 00000000 */
1675    0xdc, /* 11011100 */
1676    0x66, /* 01100110 */
1677    0x66, /* 01100110 */
1678    0x66, /* 01100110 */
1679    0x00, /* 00000000 */
1680
1681    /* 165 0xa5 '¥' */
1682    0x76, /* 01110110 */
1683    0xdc, /* 11011100 */
1684    0x00, /* 00000000 */
1685    0xe6, /* 11100110 */
1686    0xf6, /* 11110110 */
1687    0xde, /* 11011110 */
1688    0xce, /* 11001110 */
1689    0x00, /* 00000000 */
1690
1691    /* 166 0xa6 'Š' */
1692    0x3c, /* 00111100 */
1693    0x6c, /* 01101100 */
1694    0x6c, /* 01101100 */
1695    0x3e, /* 00111110 */
1696    0x00, /* 00000000 */
1697    0x7e, /* 01111110 */
1698    0x00, /* 00000000 */
1699    0x00, /* 00000000 */
1700
1701    /* 167 0xa7 '§' */
1702    0x38, /* 00111000 */
1703    0x6c, /* 01101100 */
1704    0x6c, /* 01101100 */
1705    0x38, /* 00111000 */
1706    0x00, /* 00000000 */
1707    0x7c, /* 01111100 */
1708    0x00, /* 00000000 */
1709    0x00, /* 00000000 */
1710
1711    /* 168 0xa8 'š' */
1712    0x18, /* 00011000 */
1713    0x00, /* 00000000 */
1714    0x18, /* 00011000 */
1715    0x18, /* 00011000 */
1716    0x30, /* 00110000 */
1717    0x63, /* 01100011 */
1718    0x3e, /* 00111110 */
1719    0x00, /* 00000000 */
1720
1721    /* 169 0xa9 '©' */
1722    0x00, /* 00000000 */
1723    0x00, /* 00000000 */
1724    0x00, /* 00000000 */
1725    0xfe, /* 11111110 */
1726    0xc0, /* 11000000 */
1727    0xc0, /* 11000000 */
1728    0x00, /* 00000000 */
1729    0x00, /* 00000000 */
1730
1731    /* 170 0xaa 'ª' */
1732    0x00, /* 00000000 */
1733    0x00, /* 00000000 */
1734    0x00, /* 00000000 */
1735    0xfe, /* 11111110 */
1736    0x06, /* 00000110 */
1737    0x06, /* 00000110 */
1738    0x00, /* 00000000 */
1739    0x00, /* 00000000 */
1740
1741    /* 171 0xab '«' */
1742    0x63, /* 01100011 */
1743    0xe6, /* 11100110 */
1744    0x6c, /* 01101100 */
1745    0x7e, /* 01111110 */
1746    0x33, /* 00110011 */
1747    0x66, /* 01100110 */
1748    0xcc, /* 11001100 */
1749    0x0f, /* 00001111 */
1750
1751    /* 172 0xac '¬' */
1752    0x63, /* 01100011 */
1753    0xe6, /* 11100110 */
1754    0x6c, /* 01101100 */
1755    0x7a, /* 01111010 */
1756    0x36, /* 00110110 */
1757    0x6a, /* 01101010 */
1758    0xdf, /* 11011111 */
1759    0x06, /* 00000110 */
1760
1761    /* 173 0xad '­' */
1762    0x18, /* 00011000 */
1763    0x00, /* 00000000 */
1764    0x18, /* 00011000 */
1765    0x18, /* 00011000 */
1766    0x3c, /* 00111100 */
1767    0x3c, /* 00111100 */
1768    0x18, /* 00011000 */
1769    0x00, /* 00000000 */
1770
1771    /* 174 0xae '®' */
1772    0x00, /* 00000000 */
1773    0x33, /* 00110011 */
1774    0x66, /* 01100110 */
1775    0xcc, /* 11001100 */
1776    0x66, /* 01100110 */
1777    0x33, /* 00110011 */
1778    0x00, /* 00000000 */
1779    0x00, /* 00000000 */
1780
1781    /* 175 0xaf '¯' */
1782    0x00, /* 00000000 */
1783    0xcc, /* 11001100 */
1784    0x66, /* 01100110 */
1785    0x33, /* 00110011 */
1786    0x66, /* 01100110 */
1787    0xcc, /* 11001100 */
1788    0x00, /* 00000000 */
1789    0x00, /* 00000000 */
1790
1791    /* 176 0xb0 '°' */
1792    0x22, /* 00100010 */
1793    0x88, /* 10001000 */
1794    0x22, /* 00100010 */
1795    0x88, /* 10001000 */
1796    0x22, /* 00100010 */
1797    0x88, /* 10001000 */
1798    0x22, /* 00100010 */
1799    0x88, /* 10001000 */
1800
1801    /* 177 0xb1 '±' */
1802    0x55, /* 01010101 */
1803    0xaa, /* 10101010 */
1804    0x55, /* 01010101 */
1805    0xaa, /* 10101010 */
1806    0x55, /* 01010101 */
1807    0xaa, /* 10101010 */
1808    0x55, /* 01010101 */
1809    0xaa, /* 10101010 */
1810
1811    /* 178 0xb2 '²' */
1812    0x77, /* 01110111 */
1813    0xdd, /* 11011101 */
1814    0x77, /* 01110111 */
1815    0xdd, /* 11011101 */
1816    0x77, /* 01110111 */
1817    0xdd, /* 11011101 */
1818    0x77, /* 01110111 */
1819    0xdd, /* 11011101 */
1820
1821    /* 179 0xb3 '³' */
1822    0x18, /* 00011000 */
1823    0x18, /* 00011000 */
1824    0x18, /* 00011000 */
1825    0x18, /* 00011000 */
1826    0x18, /* 00011000 */
1827    0x18, /* 00011000 */
1828    0x18, /* 00011000 */
1829    0x18, /* 00011000 */
1830
1831    /* 180 0xb4 'Ž' */
1832    0x18, /* 00011000 */
1833    0x18, /* 00011000 */
1834    0x18, /* 00011000 */
1835    0x18, /* 00011000 */
1836    0xf8, /* 11111000 */
1837    0x18, /* 00011000 */
1838    0x18, /* 00011000 */
1839    0x18, /* 00011000 */
1840
1841    /* 181 0xb5 'µ' */
1842    0x18, /* 00011000 */
1843    0x18, /* 00011000 */
1844    0xf8, /* 11111000 */
1845    0x18, /* 00011000 */
1846    0xf8, /* 11111000 */
1847    0x18, /* 00011000 */
1848    0x18, /* 00011000 */
1849    0x18, /* 00011000 */
1850
1851    /* 182 0xb6 '¶' */
1852    0x36, /* 00110110 */
1853    0x36, /* 00110110 */
1854    0x36, /* 00110110 */
1855    0x36, /* 00110110 */
1856    0xf6, /* 11110110 */
1857    0x36, /* 00110110 */
1858    0x36, /* 00110110 */
1859    0x36, /* 00110110 */
1860
1861    /* 183 0xb7 '·' */
1862    0x00, /* 00000000 */
1863    0x00, /* 00000000 */
1864    0x00, /* 00000000 */
1865    0x00, /* 00000000 */
1866    0xfe, /* 11111110 */
1867    0x36, /* 00110110 */
1868    0x36, /* 00110110 */
1869    0x36, /* 00110110 */
1870
1871    /* 184 0xb8 'ž' */
1872    0x00, /* 00000000 */
1873    0x00, /* 00000000 */
1874    0xf8, /* 11111000 */
1875    0x18, /* 00011000 */
1876    0xf8, /* 11111000 */
1877    0x18, /* 00011000 */
1878    0x18, /* 00011000 */
1879    0x18, /* 00011000 */
1880
1881    /* 185 0xb9 '¹' */
1882    0x36, /* 00110110 */
1883    0x36, /* 00110110 */
1884    0xf6, /* 11110110 */
1885    0x06, /* 00000110 */
1886    0xf6, /* 11110110 */
1887    0x36, /* 00110110 */
1888    0x36, /* 00110110 */
1889    0x36, /* 00110110 */
1890
1891    /* 186 0xba 'º' */
1892    0x36, /* 00110110 */
1893    0x36, /* 00110110 */
1894    0x36, /* 00110110 */
1895    0x36, /* 00110110 */
1896    0x36, /* 00110110 */
1897    0x36, /* 00110110 */
1898    0x36, /* 00110110 */
1899    0x36, /* 00110110 */
1900
1901    /* 187 0xbb '»' */
1902    0x00, /* 00000000 */
1903    0x00, /* 00000000 */
1904    0xfe, /* 11111110 */
1905    0x06, /* 00000110 */
1906    0xf6, /* 11110110 */
1907    0x36, /* 00110110 */
1908    0x36, /* 00110110 */
1909    0x36, /* 00110110 */
1910
1911    /* 188 0xbc 'Œ' */
1912    0x36, /* 00110110 */
1913    0x36, /* 00110110 */
1914    0xf6, /* 11110110 */
1915    0x06, /* 00000110 */
1916    0xfe, /* 11111110 */
1917    0x00, /* 00000000 */
1918    0x00, /* 00000000 */
1919    0x00, /* 00000000 */
1920
1921    /* 189 0xbd 'œ' */
1922    0x36, /* 00110110 */
1923    0x36, /* 00110110 */
1924    0x36, /* 00110110 */
1925    0x36, /* 00110110 */
1926    0xfe, /* 11111110 */
1927    0x00, /* 00000000 */
1928    0x00, /* 00000000 */
1929    0x00, /* 00000000 */
1930
1931    /* 190 0xbe 'Ÿ' */
1932    0x18, /* 00011000 */
1933    0x18, /* 00011000 */
1934    0xf8, /* 11111000 */
1935    0x18, /* 00011000 */
1936    0xf8, /* 11111000 */
1937    0x00, /* 00000000 */
1938    0x00, /* 00000000 */
1939    0x00, /* 00000000 */
1940
1941    /* 191 0xbf '¿' */
1942    0x00, /* 00000000 */
1943    0x00, /* 00000000 */
1944    0x00, /* 00000000 */
1945    0x00, /* 00000000 */
1946    0xf8, /* 11111000 */
1947    0x18, /* 00011000 */
1948    0x18, /* 00011000 */
1949    0x18, /* 00011000 */
1950
1951    /* 192 0xc0 'À' */
1952    0x18, /* 00011000 */
1953    0x18, /* 00011000 */
1954    0x18, /* 00011000 */
1955    0x18, /* 00011000 */
1956    0x1f, /* 00011111 */
1957    0x00, /* 00000000 */
1958    0x00, /* 00000000 */
1959    0x00, /* 00000000 */
1960
1961    /* 193 0xc1 'Á' */
1962    0x18, /* 00011000 */
1963    0x18, /* 00011000 */
1964    0x18, /* 00011000 */
1965    0x18, /* 00011000 */
1966    0xff, /* 11111111 */
1967    0x00, /* 00000000 */
1968    0x00, /* 00000000 */
1969    0x00, /* 00000000 */
1970
1971    /* 194 0xc2 'Â' */
1972    0x00, /* 00000000 */
1973    0x00, /* 00000000 */
1974    0x00, /* 00000000 */
1975    0x00, /* 00000000 */
1976    0xff, /* 11111111 */
1977    0x18, /* 00011000 */
1978    0x18, /* 00011000 */
1979    0x18, /* 00011000 */
1980
1981    /* 195 0xc3 'Ã' */
1982    0x18, /* 00011000 */
1983    0x18, /* 00011000 */
1984    0x18, /* 00011000 */
1985    0x18, /* 00011000 */
1986    0x1f, /* 00011111 */
1987    0x18, /* 00011000 */
1988    0x18, /* 00011000 */
1989    0x18, /* 00011000 */
1990
1991    /* 196 0xc4 'Ä' */
1992    0x00, /* 00000000 */
1993    0x00, /* 00000000 */
1994    0x00, /* 00000000 */
1995    0x00, /* 00000000 */
1996    0xff, /* 11111111 */
1997    0x00, /* 00000000 */
1998    0x00, /* 00000000 */
1999    0x00, /* 00000000 */
2000
2001    /* 197 0xc5 'Å' */
2002    0x18, /* 00011000 */
2003    0x18, /* 00011000 */
2004    0x18, /* 00011000 */
2005    0x18, /* 00011000 */
2006    0xff, /* 11111111 */
2007    0x18, /* 00011000 */
2008    0x18, /* 00011000 */
2009    0x18, /* 00011000 */
2010
2011    /* 198 0xc6 'Æ' */
2012    0x18, /* 00011000 */
2013    0x18, /* 00011000 */
2014    0x1f, /* 00011111 */
2015    0x18, /* 00011000 */
2016    0x1f, /* 00011111 */
2017    0x18, /* 00011000 */
2018    0x18, /* 00011000 */
2019    0x18, /* 00011000 */
2020
2021    /* 199 0xc7 'Ç' */
2022    0x36, /* 00110110 */
2023    0x36, /* 00110110 */
2024    0x36, /* 00110110 */
2025    0x36, /* 00110110 */
2026    0x37, /* 00110111 */
2027    0x36, /* 00110110 */
2028    0x36, /* 00110110 */
2029    0x36, /* 00110110 */
2030
2031    /* 200 0xc8 'È' */
2032    0x36, /* 00110110 */
2033    0x36, /* 00110110 */
2034    0x37, /* 00110111 */
2035    0x30, /* 00110000 */
2036    0x3f, /* 00111111 */
2037    0x00, /* 00000000 */
2038    0x00, /* 00000000 */
2039    0x00, /* 00000000 */
2040
2041    /* 201 0xc9 'É' */
2042    0x00, /* 00000000 */
2043    0x00, /* 00000000 */
2044    0x3f, /* 00111111 */
2045    0x30, /* 00110000 */
2046    0x37, /* 00110111 */
2047    0x36, /* 00110110 */
2048    0x36, /* 00110110 */
2049    0x36, /* 00110110 */
2050
2051    /* 202 0xca 'Ê' */
2052    0x36, /* 00110110 */
2053    0x36, /* 00110110 */
2054    0xf7, /* 11110111 */
2055    0x00, /* 00000000 */
2056    0xff, /* 11111111 */
2057    0x00, /* 00000000 */
2058    0x00, /* 00000000 */
2059    0x00, /* 00000000 */
2060
2061    /* 203 0xcb 'Ë' */
2062    0x00, /* 00000000 */
2063    0x00, /* 00000000 */
2064    0xff, /* 11111111 */
2065    0x00, /* 00000000 */
2066    0xf7, /* 11110111 */
2067    0x36, /* 00110110 */
2068    0x36, /* 00110110 */
2069    0x36, /* 00110110 */
2070
2071    /* 204 0xcc 'Ì' */
2072    0x36, /* 00110110 */
2073    0x36, /* 00110110 */
2074    0x37, /* 00110111 */
2075    0x30, /* 00110000 */
2076    0x37, /* 00110111 */
2077    0x36, /* 00110110 */
2078    0x36, /* 00110110 */
2079    0x36, /* 00110110 */
2080
2081    /* 205 0xcd 'Í' */
2082    0x00, /* 00000000 */
2083    0x00, /* 00000000 */
2084    0xff, /* 11111111 */
2085    0x00, /* 00000000 */
2086    0xff, /* 11111111 */
2087    0x00, /* 00000000 */
2088    0x00, /* 00000000 */
2089    0x00, /* 00000000 */
2090
2091    /* 206 0xce 'Î' */
2092    0x36, /* 00110110 */
2093    0x36, /* 00110110 */
2094    0xf7, /* 11110111 */
2095    0x00, /* 00000000 */
2096    0xf7, /* 11110111 */
2097    0x36, /* 00110110 */
2098    0x36, /* 00110110 */
2099    0x36, /* 00110110 */
2100
2101    /* 207 0xcf 'Ï' */
2102    0x18, /* 00011000 */
2103    0x18, /* 00011000 */
2104    0xff, /* 11111111 */
2105    0x00, /* 00000000 */
2106    0xff, /* 11111111 */
2107    0x00, /* 00000000 */
2108    0x00, /* 00000000 */
2109    0x00, /* 00000000 */
2110
2111    /* 208 0xd0 'Ð' */
2112    0x36, /* 00110110 */
2113    0x36, /* 00110110 */
2114    0x36, /* 00110110 */
2115    0x36, /* 00110110 */
2116    0xff, /* 11111111 */
2117    0x00, /* 00000000 */
2118    0x00, /* 00000000 */
2119    0x00, /* 00000000 */
2120
2121    /* 209 0xd1 'Ñ' */
2122    0x00, /* 00000000 */
2123    0x00, /* 00000000 */
2124    0xff, /* 11111111 */
2125    0x00, /* 00000000 */
2126    0xff, /* 11111111 */
2127    0x18, /* 00011000 */
2128    0x18, /* 00011000 */
2129    0x18, /* 00011000 */
2130
2131    /* 210 0xd2 'Ò' */
2132    0x00, /* 00000000 */
2133    0x00, /* 00000000 */
2134    0x00, /* 00000000 */
2135    0x00, /* 00000000 */
2136    0xff, /* 11111111 */
2137    0x36, /* 00110110 */
2138    0x36, /* 00110110 */
2139    0x36, /* 00110110 */
2140
2141    /* 211 0xd3 'Ó' */
2142    0x36, /* 00110110 */
2143    0x36, /* 00110110 */
2144    0x36, /* 00110110 */
2145    0x36, /* 00110110 */
2146    0x3f, /* 00111111 */
2147    0x00, /* 00000000 */
2148    0x00, /* 00000000 */
2149    0x00, /* 00000000 */
2150
2151    /* 212 0xd4 'Ô' */
2152    0x18, /* 00011000 */
2153    0x18, /* 00011000 */
2154    0x1f, /* 00011111 */
2155    0x18, /* 00011000 */
2156    0x1f, /* 00011111 */
2157    0x00, /* 00000000 */
2158    0x00, /* 00000000 */
2159    0x00, /* 00000000 */
2160
2161    /* 213 0xd5 'Õ' */
2162    0x00, /* 00000000 */
2163    0x00, /* 00000000 */
2164    0x1f, /* 00011111 */
2165    0x18, /* 00011000 */
2166    0x1f, /* 00011111 */
2167    0x18, /* 00011000 */
2168    0x18, /* 00011000 */
2169    0x18, /* 00011000 */
2170
2171    /* 214 0xd6 'Ö' */
2172    0x00, /* 00000000 */
2173    0x00, /* 00000000 */
2174    0x00, /* 00000000 */
2175    0x00, /* 00000000 */
2176    0x3f, /* 00111111 */
2177    0x36, /* 00110110 */
2178    0x36, /* 00110110 */
2179    0x36, /* 00110110 */
2180
2181    /* 215 0xd7 '×' */
2182    0x36, /* 00110110 */
2183    0x36, /* 00110110 */
2184    0x36, /* 00110110 */
2185    0x36, /* 00110110 */
2186    0xff, /* 11111111 */
2187    0x36, /* 00110110 */
2188    0x36, /* 00110110 */
2189    0x36, /* 00110110 */
2190
2191    /* 216 0xd8 'Ø' */
2192    0x18, /* 00011000 */
2193    0x18, /* 00011000 */
2194    0xff, /* 11111111 */
2195    0x18, /* 00011000 */
2196    0xff, /* 11111111 */
2197    0x18, /* 00011000 */
2198    0x18, /* 00011000 */
2199    0x18, /* 00011000 */
2200
2201    /* 217 0xd9 'Ù' */
2202    0x18, /* 00011000 */
2203    0x18, /* 00011000 */
2204    0x18, /* 00011000 */
2205    0x18, /* 00011000 */
2206    0xf8, /* 11111000 */
2207    0x00, /* 00000000 */
2208    0x00, /* 00000000 */
2209    0x00, /* 00000000 */
2210
2211    /* 218 0xda 'Ú' */
2212    0x00, /* 00000000 */
2213    0x00, /* 00000000 */
2214    0x00, /* 00000000 */
2215    0x00, /* 00000000 */
2216    0x1f, /* 00011111 */
2217    0x18, /* 00011000 */
2218    0x18, /* 00011000 */
2219    0x18, /* 00011000 */
2220
2221    /* 219 0xdb 'Û' */
2222    0xff, /* 11111111 */
2223    0xff, /* 11111111 */
2224    0xff, /* 11111111 */
2225    0xff, /* 11111111 */
2226    0xff, /* 11111111 */
2227    0xff, /* 11111111 */
2228    0xff, /* 11111111 */
2229    0xff, /* 11111111 */
2230
2231    /* 220 0xdc 'Ü' */
2232    0x00, /* 00000000 */
2233    0x00, /* 00000000 */
2234    0x00, /* 00000000 */
2235    0x00, /* 00000000 */
2236    0xff, /* 11111111 */
2237    0xff, /* 11111111 */
2238    0xff, /* 11111111 */
2239    0xff, /* 11111111 */
2240
2241    /* 221 0xdd 'Ý' */
2242    0xf0, /* 11110000 */
2243    0xf0, /* 11110000 */
2244    0xf0, /* 11110000 */
2245    0xf0, /* 11110000 */
2246    0xf0, /* 11110000 */
2247    0xf0, /* 11110000 */
2248    0xf0, /* 11110000 */
2249    0xf0, /* 11110000 */
2250
2251    /* 222 0xde 'Þ' */
2252    0x0f, /* 00001111 */
2253    0x0f, /* 00001111 */
2254    0x0f, /* 00001111 */
2255    0x0f, /* 00001111 */
2256    0x0f, /* 00001111 */
2257    0x0f, /* 00001111 */
2258    0x0f, /* 00001111 */
2259    0x0f, /* 00001111 */
2260
2261    /* 223 0xdf 'ß' */
2262    0xff, /* 11111111 */
2263    0xff, /* 11111111 */
2264    0xff, /* 11111111 */
2265    0xff, /* 11111111 */
2266    0x00, /* 00000000 */
2267    0x00, /* 00000000 */
2268    0x00, /* 00000000 */
2269    0x00, /* 00000000 */
2270
2271    /* 224 0xe0 'à' */
2272    0x00, /* 00000000 */
2273    0x00, /* 00000000 */
2274    0x76, /* 01110110 */
2275    0xdc, /* 11011100 */
2276    0xc8, /* 11001000 */
2277    0xdc, /* 11011100 */
2278    0x76, /* 01110110 */
2279    0x00, /* 00000000 */
2280
2281    /* 225 0xe1 'á' */
2282    0x78, /* 01111000 */
2283    0xcc, /* 11001100 */
2284    0xcc, /* 11001100 */
2285    0xd8, /* 11011000 */
2286    0xcc, /* 11001100 */
2287    0xc6, /* 11000110 */
2288    0xcc, /* 11001100 */
2289    0x00, /* 00000000 */
2290
2291    /* 226 0xe2 'â' */
2292    0xfe, /* 11111110 */
2293    0xc6, /* 11000110 */
2294    0xc0, /* 11000000 */
2295    0xc0, /* 11000000 */
2296    0xc0, /* 11000000 */
2297    0xc0, /* 11000000 */
2298    0xc0, /* 11000000 */
2299    0x00, /* 00000000 */
2300
2301    /* 227 0xe3 'ã' */
2302    0x00, /* 00000000 */
2303    0x00, /* 00000000 */
2304    0xfe, /* 11111110 */
2305    0x6c, /* 01101100 */
2306    0x6c, /* 01101100 */
2307    0x6c, /* 01101100 */
2308    0x6c, /* 01101100 */
2309    0x00, /* 00000000 */
2310
2311    /* 228 0xe4 'ä' */
2312    0xfe, /* 11111110 */
2313    0xc6, /* 11000110 */
2314    0x60, /* 01100000 */
2315    0x30, /* 00110000 */
2316    0x60, /* 01100000 */
2317    0xc6, /* 11000110 */
2318    0xfe, /* 11111110 */
2319    0x00, /* 00000000 */
2320
2321    /* 229 0xe5 'å' */
2322    0x00, /* 00000000 */
2323    0x00, /* 00000000 */
2324    0x7e, /* 01111110 */
2325    0xd8, /* 11011000 */
2326    0xd8, /* 11011000 */
2327    0xd8, /* 11011000 */
2328    0x70, /* 01110000 */
2329    0x00, /* 00000000 */
2330
2331    /* 230 0xe6 'æ' */
2332    0x00, /* 00000000 */
2333    0x00, /* 00000000 */
2334    0x66, /* 01100110 */
2335    0x66, /* 01100110 */
2336    0x66, /* 01100110 */
2337    0x66, /* 01100110 */
2338    0x7c, /* 01111100 */
2339    0xc0, /* 11000000 */
2340
2341    /* 231 0xe7 'ç' */
2342    0x00, /* 00000000 */
2343    0x76, /* 01110110 */
2344    0xdc, /* 11011100 */
2345    0x18, /* 00011000 */
2346    0x18, /* 00011000 */
2347    0x18, /* 00011000 */
2348    0x18, /* 00011000 */
2349    0x00, /* 00000000 */
2350
2351    /* 232 0xe8 'è' */
2352    0x7e, /* 01111110 */
2353    0x18, /* 00011000 */
2354    0x3c, /* 00111100 */
2355    0x66, /* 01100110 */
2356    0x66, /* 01100110 */
2357    0x3c, /* 00111100 */
2358    0x18, /* 00011000 */
2359    0x7e, /* 01111110 */
2360
2361    /* 233 0xe9 'é' */
2362    0x38, /* 00111000 */
2363    0x6c, /* 01101100 */
2364    0xc6, /* 11000110 */
2365    0xfe, /* 11111110 */
2366    0xc6, /* 11000110 */
2367    0x6c, /* 01101100 */
2368    0x38, /* 00111000 */
2369    0x00, /* 00000000 */
2370
2371    /* 234 0xea 'ê' */
2372    0x38, /* 00111000 */
2373    0x6c, /* 01101100 */
2374    0xc6, /* 11000110 */
2375    0xc6, /* 11000110 */
2376    0x6c, /* 01101100 */
2377    0x6c, /* 01101100 */
2378    0xee, /* 11101110 */
2379    0x00, /* 00000000 */
2380
2381    /* 235 0xeb 'ë' */
2382    0x0e, /* 00001110 */
2383    0x18, /* 00011000 */
2384    0x0c, /* 00001100 */
2385    0x3e, /* 00111110 */
2386    0x66, /* 01100110 */
2387    0x66, /* 01100110 */
2388    0x3c, /* 00111100 */
2389    0x00, /* 00000000 */
2390
2391    /* 236 0xec 'ì' */
2392    0x00, /* 00000000 */
2393    0x00, /* 00000000 */
2394    0x7e, /* 01111110 */
2395    0xdb, /* 11011011 */
2396    0xdb, /* 11011011 */
2397    0x7e, /* 01111110 */
2398    0x00, /* 00000000 */
2399    0x00, /* 00000000 */
2400
2401    /* 237 0xed 'í' */
2402    0x06, /* 00000110 */
2403    0x0c, /* 00001100 */
2404    0x7e, /* 01111110 */
2405    0xdb, /* 11011011 */
2406    0xdb, /* 11011011 */
2407    0x7e, /* 01111110 */
2408    0x60, /* 01100000 */
2409    0xc0, /* 11000000 */
2410
2411    /* 238 0xee 'î' */
2412    0x1e, /* 00011110 */
2413    0x30, /* 00110000 */
2414    0x60, /* 01100000 */
2415    0x7e, /* 01111110 */
2416    0x60, /* 01100000 */
2417    0x30, /* 00110000 */
2418    0x1e, /* 00011110 */
2419    0x00, /* 00000000 */
2420
2421    /* 239 0xef 'ï' */
2422    0x00, /* 00000000 */
2423    0x7c, /* 01111100 */
2424    0xc6, /* 11000110 */
2425    0xc6, /* 11000110 */
2426    0xc6, /* 11000110 */
2427    0xc6, /* 11000110 */
2428    0xc6, /* 11000110 */
2429    0x00, /* 00000000 */
2430
2431    /* 240 0xf0 'ð' */
2432    0x00, /* 00000000 */
2433    0xfe, /* 11111110 */
2434    0x00, /* 00000000 */
2435    0xfe, /* 11111110 */
2436    0x00, /* 00000000 */
2437    0xfe, /* 11111110 */
2438    0x00, /* 00000000 */
2439    0x00, /* 00000000 */
2440
2441    /* 241 0xf1 'ñ' */
2442    0x18, /* 00011000 */
2443    0x18, /* 00011000 */
2444    0x7e, /* 01111110 */
2445    0x18, /* 00011000 */
2446    0x18, /* 00011000 */
2447    0x00, /* 00000000 */
2448    0x7e, /* 01111110 */
2449    0x00, /* 00000000 */
2450
2451    /* 242 0xf2 'ò' */
2452    0x30, /* 00110000 */
2453    0x18, /* 00011000 */
2454    0x0c, /* 00001100 */
2455    0x18, /* 00011000 */
2456    0x30, /* 00110000 */
2457    0x00, /* 00000000 */
2458    0x7e, /* 01111110 */
2459    0x00, /* 00000000 */
2460
2461    /* 243 0xf3 'ó' */
2462    0x0c, /* 00001100 */
2463    0x18, /* 00011000 */
2464    0x30, /* 00110000 */
2465    0x18, /* 00011000 */
2466    0x0c, /* 00001100 */
2467    0x00, /* 00000000 */
2468    0x7e, /* 01111110 */
2469    0x00, /* 00000000 */
2470
2471    /* 244 0xf4 'ô' */
2472    0x0e, /* 00001110 */
2473    0x1b, /* 00011011 */
2474    0x1b, /* 00011011 */
2475    0x18, /* 00011000 */
2476    0x18, /* 00011000 */
2477    0x18, /* 00011000 */
2478    0x18, /* 00011000 */
2479    0x18, /* 00011000 */
2480
2481    /* 245 0xf5 'õ' */
2482    0x18, /* 00011000 */
2483    0x18, /* 00011000 */
2484    0x18, /* 00011000 */
2485    0x18, /* 00011000 */
2486    0x18, /* 00011000 */
2487    0xd8, /* 11011000 */
2488    0xd8, /* 11011000 */
2489    0x70, /* 01110000 */
2490
2491    /* 246 0xf6 'ö' */
2492    0x00, /* 00000000 */
2493    0x18, /* 00011000 */
2494    0x00, /* 00000000 */
2495    0x7e, /* 01111110 */
2496    0x00, /* 00000000 */
2497    0x18, /* 00011000 */
2498    0x00, /* 00000000 */
2499    0x00, /* 00000000 */
2500
2501    /* 247 0xf7 '÷' */
2502    0x00, /* 00000000 */
2503    0x76, /* 01110110 */
2504    0xdc, /* 11011100 */
2505    0x00, /* 00000000 */
2506    0x76, /* 01110110 */
2507    0xdc, /* 11011100 */
2508    0x00, /* 00000000 */
2509    0x00, /* 00000000 */
2510
2511    /* 248 0xf8 'ø' */
2512    0x38, /* 00111000 */
2513    0x6c, /* 01101100 */
2514    0x6c, /* 01101100 */
2515    0x38, /* 00111000 */
2516    0x00, /* 00000000 */
2517    0x00, /* 00000000 */
2518    0x00, /* 00000000 */
2519    0x00, /* 00000000 */
2520
2521    /* 249 0xf9 'ù' */
2522    0x00, /* 00000000 */
2523    0x00, /* 00000000 */
2524    0x00, /* 00000000 */
2525    0x18, /* 00011000 */
2526    0x18, /* 00011000 */
2527    0x00, /* 00000000 */
2528    0x00, /* 00000000 */
2529    0x00, /* 00000000 */
2530
2531    /* 250 0xfa 'ú' */
2532    0x00, /* 00000000 */
2533    0x00, /* 00000000 */
2534    0x00, /* 00000000 */
2535    0x18, /* 00011000 */
2536    0x00, /* 00000000 */
2537    0x00, /* 00000000 */
2538    0x00, /* 00000000 */
2539    0x00, /* 00000000 */
2540
2541    /* 251 0xfb 'û' */
2542    0x0f, /* 00001111 */
2543    0x0c, /* 00001100 */
2544    0x0c, /* 00001100 */
2545    0x0c, /* 00001100 */
2546    0xec, /* 11101100 */
2547    0x6c, /* 01101100 */
2548    0x3c, /* 00111100 */
2549    0x1c, /* 00011100 */
2550
2551    /* 252 0xfc 'ü' */
2552    0x6c, /* 01101100 */
2553    0x36, /* 00110110 */
2554    0x36, /* 00110110 */
2555    0x36, /* 00110110 */
2556    0x36, /* 00110110 */
2557    0x00, /* 00000000 */
2558    0x00, /* 00000000 */
2559    0x00, /* 00000000 */
2560
2561    /* 253 0xfd 'ý' */
2562    0x78, /* 01111000 */
2563    0x0c, /* 00001100 */
2564    0x18, /* 00011000 */
2565    0x30, /* 00110000 */
2566    0x7c, /* 01111100 */
2567    0x00, /* 00000000 */
2568    0x00, /* 00000000 */
2569    0x00, /* 00000000 */
2570
2571    /* 254 0xfe 'þ' */
2572    0x00, /* 00000000 */
2573    0x00, /* 00000000 */
2574    0x3c, /* 00111100 */
2575    0x3c, /* 00111100 */
2576    0x3c, /* 00111100 */
2577    0x3c, /* 00111100 */
2578    0x00, /* 00000000 */
2579    0x00, /* 00000000 */
2580
2581    /* 255 0xff 'ÿ' */
2582    0x00, /* 00000000 */
2583    0x00, /* 00000000 */
2584    0x00, /* 00000000 */
2585    0x00, /* 00000000 */
2586    0x00, /* 00000000 */
2587    0x00, /* 00000000 */
2588    0x00, /* 00000000 */
2589    0x00, /* 00000000 */
2590
2591};
2592
2593
2594struct fbcon_font_desc font_vga_8x8 = {
2595    VGA8x8_IDX,
2596    "VGA8x8",
2597    8,
2598    8,
2599    fontdata_8x8,
2600    0
2601};
2602
2603
2604union multiptr {
2605    unsigned char *p8;
2606    unsigned short *p16;
2607    unsigned long *p32;
2608};
2609
2610static int con_fd, last_vt = -1;
2611static struct fb_fix_screeninfo fix;
2612static struct fb_var_screeninfo var;
2613static unsigned char *fbuffer;
2614static unsigned char **line_addr;
2615static int fb_fd=0;
2616static int bytes_per_pixel;
2617static unsigned colormap [256];
2618__u32 xres, yres;
2619
2620static char *defaultfbdevice = "/dev/fb0";
2621static char *defaultconsoledevice = "/dev/tty";
2622static char *fbdevice = NULL;
2623static char *consoledevice = NULL;
2624
2625int open_framebuffer(void)
2626{
2627    struct vt_stat vts;
2628    char vtname[128];
2629    int fd, nr;
2630    unsigned y, addr;
2631
2632    if ((fbdevice = getenv ("TSLIB_FBDEVICE")) == NULL)
2633        fbdevice = defaultfbdevice;
2634
2635    if ((consoledevice = getenv ("TSLIB_CONSOLEDEVICE")) == NULL)
2636        consoledevice = defaultconsoledevice;
2637
2638    if (strcmp (consoledevice, "none") != 0) {
2639        sprintf (vtname,"%s%d", consoledevice, 1);
2640            fd = open (vtname, O_WRONLY);
2641            if (fd < 0) {
2642                    perror("open consoledevice");
2643                    return -1;
2644            }
2645
2646        if (ioctl(fd, VT_OPENQRY, &nr) < 0) {
2647                    perror("ioctl VT_OPENQRY");
2648                    return -1;
2649            }
2650            close(fd);
2651
2652            sprintf(vtname, "%s%d", consoledevice, nr);
2653
2654            con_fd = open(vtname, O_RDWR | O_NDELAY);
2655            if (con_fd < 0) {
2656                    perror("open tty");
2657                    return -1;
2658            }
2659
2660            if (ioctl(con_fd, VT_GETSTATE, &vts) == 0)
2661                    last_vt = vts.v_active;
2662
2663            if (ioctl(con_fd, VT_ACTIVATE, nr) < 0) {
2664                    perror("VT_ACTIVATE");
2665                    close(con_fd);
2666                    return -1;
2667            }
2668
2669            if (ioctl(con_fd, VT_WAITACTIVE, nr) < 0) {
2670                    perror("VT_WAITACTIVE");
2671                    close(con_fd);
2672                    return -1;
2673            }
2674
2675            if (ioctl(con_fd, KDSETMODE, KD_GRAPHICS) < 0) {
2676                    perror("KDSETMODE");
2677                    close(con_fd);
2678                    return -1;
2679            }
2680
2681    }
2682
2683    fb_fd = open(fbdevice, O_RDWR);
2684    if (fb_fd == -1) {
2685        perror("open fbdevice");
2686        return -1;
2687    }
2688
2689    if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &fix) < 0) {
2690        perror("ioctl FBIOGET_FSCREENINFO");
2691        close(fb_fd);
2692        return -1;
2693    }
2694
2695    if (ioctl(fb_fd, FBIOGET_VSCREENINFO, &var) < 0) {
2696        perror("ioctl FBIOGET_VSCREENINFO");
2697        close(fb_fd);
2698        return -1;
2699    }
2700    xres = var.xres;
2701    yres = var.yres;
2702
2703    fbuffer = mmap(NULL, fix.smem_len, PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fb_fd, 0);
2704    if (fbuffer == (unsigned char *)-1) {
2705        perror("mmap framebuffer");
2706        close(fb_fd);
2707        return -1;
2708    }
2709    memset(fbuffer,0,fix.smem_len);
2710
2711    bytes_per_pixel = (var.bits_per_pixel + 7) / 8;
2712    line_addr = malloc (sizeof (__u32) * var.yres_virtual);
2713    addr = 0;
2714    for (y = 0; y < var.yres_virtual; y++, addr += fix.line_length)
2715        line_addr [y] = fbuffer + addr;
2716
2717    return 0;
2718}
2719
2720void close_framebuffer(void)
2721{
2722    munmap(fbuffer, fix.smem_len);
2723    close(fb_fd);
2724
2725
2726    if(strcmp(consoledevice,"none")!=0) {
2727    
2728            if (ioctl(con_fd, KDSETMODE, KD_TEXT) < 0)
2729                    perror("KDSETMODE");
2730
2731            if (last_vt >= 0)
2732                    if (ioctl(con_fd, VT_ACTIVATE, last_vt))
2733                            perror("VT_ACTIVATE");
2734
2735            close(con_fd);
2736    }
2737
2738        free (line_addr);
2739}
2740
2741void put_cross(int x, int y, unsigned colidx)
2742{
2743    line (x - 10, y, x - 2, y, colidx);
2744    line (x + 2, y, x + 10, y, colidx);
2745    line (x, y - 10, x, y - 2, colidx);
2746    line (x, y + 2, x, y + 10, colidx);
2747
2748#if 1
2749    line (x - 6, y - 9, x - 9, y - 9, colidx + 1);
2750    line (x - 9, y - 8, x - 9, y - 6, colidx + 1);
2751    line (x - 9, y + 6, x - 9, y + 9, colidx + 1);
2752    line (x - 8, y + 9, x - 6, y + 9, colidx + 1);
2753    line (x + 6, y + 9, x + 9, y + 9, colidx + 1);
2754    line (x + 9, y + 8, x + 9, y + 6, colidx + 1);
2755    line (x + 9, y - 6, x + 9, y - 9, colidx + 1);
2756    line (x + 8, y - 9, x + 6, y - 9, colidx + 1);
2757#else
2758    line (x - 7, y - 7, x - 4, y - 4, colidx + 1);
2759    line (x - 7, y + 7, x - 4, y + 4, colidx + 1);
2760    line (x + 4, y - 4, x + 7, y - 7, colidx + 1);
2761    line (x + 4, y + 4, x + 7, y + 7, colidx + 1);
2762#endif
2763}
2764
2765void put_char(int x, int y, int c, int colidx)
2766{
2767    int i,j,bits;
2768
2769    for (i = 0; i < font_vga_8x8.height; i++) {
2770        bits = font_vga_8x8.data [font_vga_8x8.height * c + i];
2771        for (j = 0; j < font_vga_8x8.width; j++, bits <<= 1)
2772            if (bits & 0x80)
2773                pixel (x + j, y + i, colidx);
2774    }
2775}
2776
2777void put_string(int x, int y, char *s, unsigned colidx)
2778{
2779    int i;
2780    for (i = 0; *s; i++, x += font_vga_8x8.width, s++)
2781        put_char (x, y, *s, colidx);
2782}
2783
2784void put_string_center(int x, int y, char *s, unsigned colidx)
2785{
2786    size_t sl = strlen (s);
2787        put_string (x - (sl / 2) * font_vga_8x8.width,
2788                    y, s, colidx);
2789}
2790
2791void put_int(int x, int y, int c, int colidx)
2792{
2793       int i = 1, tam = 0, num = c;
2794
2795    for(;;i *= 10)
2796    {
2797        if(num/i)
2798            tam++;
2799        else
2800            break;
2801    }
2802
2803    fillrect(x,y,x+8*(tam+1),y+8,0);
2804    
2805       char string[tam];
2806       tam=0;
2807
2808       while(num)
2809       {
2810       i /= 10;
2811       string[tam] = (char)(num/i + 48);
2812       num %= i;
2813       tam++;
2814       }
2815       string[tam] = '\0';
2816       
2817    put_string(x, y, &string, colidx);
2818}
2819
2820
2821void setcolor(unsigned colidx, unsigned value)
2822{
2823    unsigned res;
2824    unsigned short red, green, blue;
2825    struct fb_cmap cmap;
2826
2827#ifdef DEBUG
2828    if (colidx > 255) {
2829        fprintf (stderr, "WARNING: color index = %u, must be <256\n",
2830             colidx);
2831        return;
2832    }
2833#endif
2834
2835    switch (bytes_per_pixel) {
2836    default:
2837    case 1:
2838        res = colidx;
2839        red = (value >> 8) & 0xff00;
2840        green = value & 0xff00;
2841        blue = (value << 8) & 0xff00;
2842        cmap.start = colidx;
2843        cmap.len = 1;
2844        cmap.red = &red;
2845        cmap.green = &green;
2846        cmap.blue = &blue;
2847        cmap.transp = NULL;
2848
2849            if (ioctl (fb_fd, FBIOPUTCMAP, &cmap) < 0)
2850                    perror("ioctl FBIOPUTCMAP");
2851        break;
2852    case 2:
2853    case 4:
2854        red = (value >> 16) & 0xff;
2855        green = (value >> 8) & 0xff;
2856        blue = value & 0xff;
2857        res = ((red >> (8 - var.red.length)) << var.red.offset) |
2858                      ((green >> (8 - var.green.length)) << var.green.offset) |
2859                      ((blue >> (8 - var.blue.length)) << var.blue.offset);
2860    }
2861        colormap [colidx] = res;
2862}
2863
2864static inline void __setpixel (union multiptr loc, unsigned xormode, unsigned color)
2865{
2866    switch(bytes_per_pixel) {
2867    case 1:
2868    default:
2869        if (xormode)
2870            *loc.p8 ^= color;
2871        else
2872            *loc.p8 = color;
2873        break;
2874    case 2:
2875        if (xormode)
2876            *loc.p16 ^= color;
2877        else
2878            *loc.p16 = color;
2879        break;
2880    case 4:
2881        if (xormode)
2882            *loc.p32 ^= color;
2883        else
2884            *loc.p32 = color;
2885        break;
2886    }
2887}
2888
2889void pixel (int x, int y, unsigned colidx)
2890{
2891    unsigned xormode;
2892    union multiptr loc;
2893
2894    if ((x < 0) || ((__u32)x >= var.xres_virtual) ||
2895        (y < 0) || ((__u32)y >= var.yres_virtual))
2896        return;
2897
2898    xormode = colidx & XORMODE;
2899    colidx &= ~XORMODE;
2900
2901#ifdef DEBUG
2902    if (colidx > 255) {
2903        fprintf (stderr, "WARNING: color value = %u, must be <256\n",
2904             colidx);
2905        return;
2906    }
2907#endif
2908
2909    loc.p8 = line_addr [y] + x * bytes_per_pixel;
2910    __setpixel (loc, xormode, colormap [colidx]);
2911}
2912
2913void line (int x1, int y1, int x2, int y2, unsigned colidx)
2914{
2915    int tmp;
2916    int dx = x2 - x1;
2917    int dy = y2 - y1;
2918
2919    if (abs (dx) < abs (dy)) {
2920        if (y1 > y2) {
2921            tmp = x1; x1 = x2; x2 = tmp;
2922            tmp = y1; y1 = y2; y2 = tmp;
2923            dx = -dx; dy = -dy;
2924        }
2925        x1 <<= 16;
2926        /* dy is apriori >0 */
2927        dx = (dx << 16) / dy;
2928        while (y1 <= y2) {
2929            pixel (x1 >> 16, y1, colidx);
2930            x1 += dx;
2931            y1++;
2932        }
2933    } else {
2934        if (x1 > x2) {
2935            tmp = x1; x1 = x2; x2 = tmp;
2936            tmp = y1; y1 = y2; y2 = tmp;
2937            dx = -dx; dy = -dy;
2938        }
2939        y1 <<= 16;
2940        dy = dx ? (dy << 16) / dx : 0;
2941        while (x1 <= x2) {
2942            pixel (x1, y1 >> 16, colidx);
2943            y1 += dy;
2944            x1++;
2945        }
2946    }
2947}
2948
2949void rect (int x1, int y1, int x2, int y2, unsigned colidx)
2950{
2951    line (x1, y1, x2, y1, colidx);
2952    line (x2, y1, x2, y2, colidx);
2953    line (x2, y2, x1, y2, colidx);
2954    line (x1, y2, x1, y1, colidx);
2955}
2956
2957void fillrect (int x1, int y1, int x2, int y2, unsigned colidx)
2958{
2959    int tmp;
2960    unsigned xormode;
2961    union multiptr loc;
2962
2963    /* Clipping and sanity checking */
2964    if (x1 > x2) { tmp = x1; x1 = x2; x2 = tmp; }
2965    if (y1 > y2) { tmp = y1; y1 = y2; y2 = tmp; }
2966    if (x1 < 0) x1 = 0; if ((__u32)x1 >= xres) x1 = xres - 1;
2967    if (x2 < 0) x2 = 0; if ((__u32)x2 >= xres) x2 = xres - 1;
2968    if (y1 < 0) y1 = 0; if ((__u32)y1 >= yres) y1 = yres - 1;
2969    if (y2 < 0) y2 = 0; if ((__u32)y2 >= yres) y2 = yres - 1;
2970
2971    if ((x1 > x2) || (y1 > y2))
2972        return;
2973
2974    xormode = colidx & XORMODE;
2975    colidx &= ~XORMODE;
2976
2977#ifdef DEBUG
2978    if (colidx > 255) {
2979        fprintf (stderr, "WARNING: color value = %u, must be <256\n",
2980             colidx);
2981        return;
2982    }
2983#endif
2984
2985    colidx = colormap [colidx];
2986
2987    for (; y1 <= y2; y1++) {
2988        loc.p8 = line_addr [y1] + x1 * bytes_per_pixel;
2989        for (tmp = x1; tmp <= x2; tmp++) {
2990            __setpixel (loc, xormode, colidx);
2991            loc.p8 += bytes_per_pixel;
2992        }
2993    }
2994}
2995
2996static int palette [] = \
2997{
2998    0x000000, 0xffffff, 0xff0000, 0x00ff00, 0x0000ff
2999};
3000#define NR_COLORS (sizeof (palette) / sizeof (palette [0]))
3001
3002void setColorsFromDefaultPallet()
3003{
3004    int i;
3005    for (i = 0; i < NR_COLORS; i++)
3006            setcolor (i, palette [i]);
3007}
3008
3009

Archive Download this file

Branches:
master



interactive