Keyboard.java
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19: package xeij;
20:
21: import java.awt.*;
22: import java.awt.event.*;
23: import java.awt.image.*;
24: import java.awt.im.*;
25: import java.io.*;
26: import java.util.*;
27: import java.util.concurrent.*;
28: import javax.swing.*;
29:
30: public class Keyboard {
31:
32:
33: public static final boolean KBD_DEBUG_LED = false;
34:
35:
36: public static final int KBD_STANDARD_TYPE = 0;
37: public static final int KBD_COMPACT_TYPE = 1;
38: public static final int KBD_TYPES = 2;
39:
40:
41:
42:
43: public static final int KBD_COL_WIDTH = 6;
44: public static final int KBD_ROW_HEIGHT = 4;
45: public static final int KBD_LED_WIDTH = 11;
46: public static final int KBD_LED_HEIGHT = 4;
47: public static final int KBD_PADDING_TOP = 2;
48: public static final int KBD_PADDING_RIGHT = 6;
49: public static final int KBD_PADDING_BOTTOM = 2;
50: public static final int KBD_PADDING_LEFT = 6;
51: public static final int KBD_TOUCHABLE_AREA = 1;
52: public static final int[] KBD_TYPE_COLS = { 94, 76 };
53: public static final int[] KBD_TYPE_ROWS = { 25, 25 };
54: public static final int KBD_KEY_WIDTH = KBD_COL_WIDTH * 4 - 1;
55: public static final int KBD_KEY_HEIGHT = KBD_ROW_HEIGHT * 4 - 1;
56:
57:
58: public static final int KBD_NONE_STYLE = 0;
59: public static final int KBD_NORMAL_STYLE = 1;
60: public static final int KBD_FUNCTION_STYLE = 2;
61: public static final int KBD_NARROWER_STYLE = 3;
62: public static final int KBD_NARROW_STYLE = 4;
63: public static final int KBD_SHORTER_STYLE = 5;
64: public static final int KBD_SHORT_STYLE = 6;
65: public static final int KBD_RETURN_STYLE = 7;
66: public static final int KBD_SHIFT_STYLE = 8;
67:
68:
69: public static final boolean KBD_USE_ROM_FONT = false;
70:
71:
72: public static final int KBD_LETTER_COLOR = 14;
73: public static final int KBD_TOP_LEFT_COLOR = 10;
74: public static final int KBD_TOP_COLOR = 8;
75: public static final int KBD_LEFT_COLOR = 8;
76: public static final int KBD_POINTED_COLOR = 8;
77: public static final int KBD_TOP_RIGHT_COLOR = 6;
78: public static final int KBD_BOTTOM_LEFT_COLOR = 6;
79: public static final int KBD_KEYTOP_COLOR = 6;
80: public static final int KBD_RIGHT_COLOR = 4;
81: public static final int KBD_BOTTOM_COLOR = 4;
82: public static final int KBD_BOTTOM_RIGHT_COLOR = 2;
83: public static final int KBD_SHADOW_COLOR = 2;
84: public static final int KBD_BACKGROUND_COLOR = 0;
85: public static final int KBD_HOLE_COLOR = 0;
86:
87: public static int kbdLetterRGB;
88: public static int kbdTopLeftRGB;
89: public static int kbdTopRGB;
90: public static int kbdLeftRGB;
91: public static int kbdPointedRGB;
92: public static int kbdTopRightRGB;
93: public static int kbdBottomLeftRGB;
94: public static int kbdKeytopRGB;
95: public static int kbdRightRGB;
96: public static int kbdBottomRGB;
97: public static int kbdBottomRightRGB;
98: public static int kbdShadowRGB;
99: public static int kbdBackgroundRGB;
100: public static int kbdHoleRGB;
101:
102: public static final int KBD_RED_OFF_KEYTOP_COLOR = Color.HSBtoRGB (0.99F, 0.50F, 0.40F);
103: public static final int KBD_RED_OFF_BORDER_COLOR = Color.HSBtoRGB (0.99F, 0.50F, 0.20F);
104: public static final int KBD_RED_ON_KEYTOP_COLOR_0 = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 0);
105: public static final int KBD_RED_ON_BORDER_COLOR_0 = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 0);
106: public static final int KBD_RED_ON_KEYTOP_COLOR_1 = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 1);
107: public static final int KBD_RED_ON_BORDER_COLOR_1 = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 1);
108: public static final int KBD_RED_ON_KEYTOP_COLOR_2 = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 2);
109: public static final int KBD_RED_ON_BORDER_COLOR_2 = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 2);
110: public static final int KBD_RED_ON_KEYTOP_COLOR_3 = Color.HSBtoRGB (0.99F, 1.00F, 1.00F - 0.150F * 3);
111: public static final int KBD_RED_ON_BORDER_COLOR_3 = Color.HSBtoRGB (0.99F, 1.00F, 0.50F - 0.075F * 3);
112: public static final int KBD_GREEN_OFF_KEYTOP_COLOR = Color.HSBtoRGB (0.24F, 0.50F, 0.40F);
113: public static final int KBD_GREEN_OFF_BORDER_COLOR = Color.HSBtoRGB (0.24F, 0.50F, 0.20F);
114: public static final int KBD_GREEN_ON_KEYTOP_COLOR_0 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 0);
115: public static final int KBD_GREEN_ON_BORDER_COLOR_0 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 0);
116: public static final int KBD_GREEN_ON_KEYTOP_COLOR_1 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 1);
117: public static final int KBD_GREEN_ON_BORDER_COLOR_1 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 1);
118: public static final int KBD_GREEN_ON_KEYTOP_COLOR_2 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 2);
119: public static final int KBD_GREEN_ON_BORDER_COLOR_2 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 2);
120: public static final int KBD_GREEN_ON_KEYTOP_COLOR_3 = Color.HSBtoRGB (0.24F, 1.00F, 1.00F - 0.150F * 3);
121: public static final int KBD_GREEN_ON_BORDER_COLOR_3 = Color.HSBtoRGB (0.24F, 1.00F, 0.50F - 0.075F * 3);
122:
123:
124:
125: public static final int KBD_POINTED_BIT = 0;
126: public static final int KBD_POINTED_MASK = 0b00000001;
127: public static final int KBD_PRESSED_BIT = 1;
128: public static final int KBD_PRESSED_MASK = 0b00000010;
129: public static final int KBD_LIGHTED_BIT = 2;
130: public static final int KBD_LIGHTED_MASK = 0b00000100;
131: public static final int KBD_BRIGHTNESS_BIT = 3;
132: public static final int KBD_BRIGHTNESS_MASK = 0b00011000;
133:
134:
135: public static final int KBD_MOUSEDOWN_BIT = 5;
136: public static final int KBD_MOUSEDOWN_MASK = 0b00100000;
137: public static final int KBD_KEYDOWN_BIT = 6;
138: public static final int KBD_KEYDOWN_MASK = 0b01000000;
139: public static final int KBD_LOCKED_BIT = 7;
140: public static final int KBD_LOCKED_MASK = 0b10000000;
141:
142:
143:
144:
145:
146:
147: public static final int KBD_LED_TEST = 0b01011010_01011010_01011010_01011010;
148: public static final int KBD_MODE_TEST = 0b01100110_01100110_01100110_01100110;
149:
150:
151: public static final int KBD_VAR_KEYS = 48;
152: public static final int KBD_LED_KEYS = 8;
153: public static final int KBD_FIX_KEYS = 57;
154: public static final int KBD_ALL_KEYS = KBD_VAR_KEYS + KBD_LED_KEYS + KBD_FIX_KEYS;
155:
156:
157:
158:
159: public static final int KBD_KANA_INDEX = 48;
160: public static final int KBD_ROMA_INDEX = 49;
161: public static final int KBD_CODE_INDEX = 50;
162: public static final int KBD_CAPS_INDEX = 51;
163: public static final int KBD_HIRA_INDEX = 53;
164: public static final int KBD_ZEN_INDEX = 54;
165: public static final int KBD_NUM_INDEX = 55;
166: public static final int KBD_RETURN_INDEX = 59;
167: public static final int KBD_SHIFT_INDEX = 109;
168: public static final int KBD_CTRL_INDEX = 110;
169: public static final int KBD_OPT1_INDEX = 111;
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299: public static final byte[] KBD_NORMAL_CODE = "\2\3\4\5\6\7\b\t\n\13\f\r\16\21\22\23\24\25\26\27\30\31\32\33\34\36\37 !\"#$%&\'()*+,-./01234Z[\\]^_`t\1\17\20\03556789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklpqrs".getBytes (XEiJ.ISO_8859_1);
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429: public static final byte[] KBD_NUM_CODE = "\2\3\4\5\6\7CDE@A\r\16\21\22\23\24\25\26GHIB\33\34\36\37 !\"#KLMF()*+,-./OPQJNZ[\\]^_`t\1\17\20\03556789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklpqrs".getBytes (XEiJ.ISO_8859_1);
430:
431:
432:
433: public static final int[][] KBD_TYPE_FIX_STYLE = {
434:
435: {
436: KBD_NORMAL_STYLE ,
437: KBD_NARROW_STYLE ,
438: KBD_NARROW_STYLE ,
439: KBD_RETURN_STYLE ,
440: KBD_NORMAL_STYLE ,
441: KBD_NORMAL_STYLE ,
442: KBD_NORMAL_STYLE ,
443: KBD_NORMAL_STYLE ,
444: KBD_NORMAL_STYLE ,
445: KBD_NORMAL_STYLE ,
446: KBD_SHORT_STYLE ,
447: KBD_NORMAL_STYLE ,
448: KBD_SHORT_STYLE ,
449: KBD_NORMAL_STYLE ,
450: KBD_NORMAL_STYLE ,
451: KBD_NORMAL_STYLE ,
452: KBD_NORMAL_STYLE ,
453: KBD_NORMAL_STYLE ,
454: KBD_NORMAL_STYLE ,
455: KBD_NORMAL_STYLE ,
456: KBD_NORMAL_STYLE ,
457: KBD_NORMAL_STYLE ,
458: KBD_NORMAL_STYLE ,
459: KBD_NORMAL_STYLE ,
460: KBD_NORMAL_STYLE ,
461: KBD_NORMAL_STYLE ,
462: KBD_NORMAL_STYLE ,
463: KBD_NORMAL_STYLE ,
464: KBD_NORMAL_STYLE ,
465: KBD_SHORTER_STYLE ,
466: KBD_NORMAL_STYLE ,
467: KBD_NORMAL_STYLE ,
468: KBD_NORMAL_STYLE ,
469: KBD_NORMAL_STYLE ,
470: KBD_NORMAL_STYLE ,
471: KBD_NORMAL_STYLE ,
472: KBD_NARROWER_STYLE,
473: KBD_NARROWER_STYLE,
474: KBD_NARROW_STYLE ,
475: KBD_NARROWER_STYLE,
476: KBD_NARROWER_STYLE,
477: KBD_NORMAL_STYLE ,
478: KBD_NORMAL_STYLE ,
479: KBD_FUNCTION_STYLE,
480: KBD_FUNCTION_STYLE,
481: KBD_FUNCTION_STYLE,
482: KBD_FUNCTION_STYLE,
483: KBD_FUNCTION_STYLE,
484: KBD_FUNCTION_STYLE,
485: KBD_FUNCTION_STYLE,
486: KBD_FUNCTION_STYLE,
487: KBD_FUNCTION_STYLE,
488: KBD_FUNCTION_STYLE,
489: KBD_SHIFT_STYLE ,
490: KBD_NARROW_STYLE ,
491: KBD_NARROW_STYLE ,
492: KBD_NARROW_STYLE ,
493: },
494:
495: {
496: KBD_NORMAL_STYLE ,
497: KBD_NARROW_STYLE ,
498: KBD_NARROW_STYLE ,
499: KBD_RETURN_STYLE ,
500: KBD_NORMAL_STYLE ,
501: KBD_NORMAL_STYLE ,
502: KBD_NORMAL_STYLE ,
503: KBD_NORMAL_STYLE ,
504: KBD_NORMAL_STYLE ,
505: KBD_NORMAL_STYLE ,
506: KBD_NORMAL_STYLE ,
507: KBD_NORMAL_STYLE ,
508: KBD_NORMAL_STYLE ,
509: KBD_NORMAL_STYLE ,
510: KBD_NORMAL_STYLE ,
511: KBD_NONE_STYLE ,
512: KBD_NONE_STYLE ,
513: KBD_NONE_STYLE ,
514: KBD_NONE_STYLE ,
515: KBD_NONE_STYLE ,
516: KBD_NONE_STYLE ,
517: KBD_NONE_STYLE ,
518: KBD_NONE_STYLE ,
519: KBD_NONE_STYLE ,
520: KBD_NONE_STYLE ,
521: KBD_NONE_STYLE ,
522: KBD_NONE_STYLE ,
523: KBD_NONE_STYLE ,
524: KBD_NONE_STYLE ,
525: KBD_NONE_STYLE ,
526: KBD_NONE_STYLE ,
527: KBD_NONE_STYLE ,
528: KBD_NONE_STYLE ,
529: KBD_NORMAL_STYLE ,
530: KBD_NORMAL_STYLE ,
531: KBD_NORMAL_STYLE ,
532: KBD_NARROWER_STYLE,
533: KBD_NARROWER_STYLE,
534: KBD_NARROWER_STYLE,
535: KBD_NORMAL_STYLE ,
536: KBD_NORMAL_STYLE ,
537: KBD_NORMAL_STYLE ,
538: KBD_NORMAL_STYLE ,
539: KBD_FUNCTION_STYLE,
540: KBD_FUNCTION_STYLE,
541: KBD_FUNCTION_STYLE,
542: KBD_FUNCTION_STYLE,
543: KBD_FUNCTION_STYLE,
544: KBD_FUNCTION_STYLE,
545: KBD_FUNCTION_STYLE,
546: KBD_FUNCTION_STYLE,
547: KBD_FUNCTION_STYLE,
548: KBD_FUNCTION_STYLE,
549: KBD_SHIFT_STYLE ,
550: KBD_NARROW_STYLE ,
551: KBD_NORMAL_STYLE ,
552: KBD_NORMAL_STYLE ,
553: },
554: };
555:
556:
557:
558: public static final int[][] KBD_RED_LED_COLOR = {
559: { KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR },
560: { KBD_RED_ON_KEYTOP_COLOR_0, KBD_RED_ON_BORDER_COLOR_0 },
561: { KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR },
562: { KBD_RED_ON_KEYTOP_COLOR_1, KBD_RED_ON_BORDER_COLOR_1 },
563: { KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR },
564: { KBD_RED_ON_KEYTOP_COLOR_2, KBD_RED_ON_BORDER_COLOR_2 },
565: { KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR },
566: { KBD_RED_ON_KEYTOP_COLOR_3, KBD_RED_ON_BORDER_COLOR_3 },
567: };
568:
569:
570:
571: public static final int[][] KBD_GREEN_LED_COLOR = {
572: { KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR },
573: { KBD_GREEN_ON_KEYTOP_COLOR_0, KBD_GREEN_ON_BORDER_COLOR_0 },
574: { KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR },
575: { KBD_GREEN_ON_KEYTOP_COLOR_1, KBD_GREEN_ON_BORDER_COLOR_1 },
576: { KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR },
577: { KBD_GREEN_ON_KEYTOP_COLOR_2, KBD_GREEN_ON_BORDER_COLOR_2 },
578: { KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR },
579: { KBD_GREEN_ON_KEYTOP_COLOR_3, KBD_GREEN_ON_BORDER_COLOR_3 },
580: };
581:
582:
583: public static final int[][][] KBD_LED_COLOR = {
584: KBD_RED_LED_COLOR ,
585: KBD_RED_LED_COLOR ,
586: KBD_RED_LED_COLOR ,
587: KBD_RED_LED_COLOR ,
588: KBD_RED_LED_COLOR ,
589: KBD_GREEN_LED_COLOR,
590: KBD_GREEN_LED_COLOR,
591: KBD_RED_LED_COLOR ,
592: };
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661: public static final int[][] KBD_VAR_BOX = {
662: { 4, 5, 4, 4 },
663: { 8, 5, 4, 4 },
664: { 12, 5, 4, 4 },
665: { 16, 5, 4, 4 },
666: { 20, 5, 4, 4 },
667: { 24, 5, 4, 4 },
668: { 28, 5, 4, 4 },
669: { 32, 5, 4, 4 },
670: { 36, 5, 4, 4 },
671: { 40, 5, 4, 4 },
672: { 44, 5, 4, 4 },
673: { 48, 5, 4, 4 },
674: { 52, 5, 4, 4 },
675: { 6, 9, 4, 4 },
676: { 10, 9, 4, 4 },
677: { 14, 9, 4, 4 },
678: { 18, 9, 4, 4 },
679: { 22, 9, 4, 4 },
680: { 26, 9, 4, 4 },
681: { 30, 9, 4, 4 },
682: { 34, 9, 4, 4 },
683: { 38, 9, 4, 4 },
684: { 42, 9, 4, 4 },
685: { 46, 9, 4, 4 },
686: { 50, 9, 4, 4 },
687: { 7, 13, 4, 4 },
688: { 11, 13, 4, 4 },
689: { 15, 13, 4, 4 },
690: { 19, 13, 4, 4 },
691: { 23, 13, 4, 4 },
692: { 27, 13, 4, 4 },
693: { 31, 13, 4, 4 },
694: { 35, 13, 4, 4 },
695: { 39, 13, 4, 4 },
696: { 43, 13, 4, 4 },
697: { 47, 13, 4, 4 },
698: { 51, 13, 4, 4 },
699: { 9, 17, 4, 4 },
700: { 13, 17, 4, 4 },
701: { 17, 17, 4, 4 },
702: { 21, 17, 4, 4 },
703: { 25, 17, 4, 4 },
704: { 29, 17, 4, 4 },
705: { 33, 17, 4, 4 },
706: { 37, 17, 4, 4 },
707: { 41, 17, 4, 4 },
708: { 45, 17, 4, 4 },
709: { 49, 17, 4, 4 },
710: };
711:
712:
713:
714:
715: public static final int[][][] KBD_TYPE_LED_BOX = {
716:
717: {
718: { 64, 0, 4, 4 },
719: { 68, 0, 4, 4 },
720: { 72, 0, 4, 4 },
721: { 78, 0, 4, 4 },
722: { 68, 5, 4, 4 },
723: { 7, 21, 4, 4 },
724: { 51, 21, 4, 4 },
725: null ,
726: },
727:
728: {
729: { 52, 21, 4, 4 },
730: { 48, 21, 4, 4 },
731: { 72, 4, 4, 4 },
732: { 7, 21, 4, 4 },
733: { 68, 13, 4, 4 },
734: { 68, 4, 4, 4 },
735: { 64, 4, 4, 4 },
736: { 64, 13, 4, 4 },
737: },
738: };
739:
740:
741:
742:
743: public static final int[][][] KBD_TYPE_FIX_BOX = {
744:
745: {
746: { 0, 5, 4, 4 },
747: { 56, 5, 6, 4 },
748: { 0, 9, 6, 4 },
749: { 54, 9, 8, 8 },
750: { 21, 21, 14, 4 },
751: { 64, 5, 4, 4 },
752: { 72, 5, 4, 4 },
753: { 64, 9, 4, 4 },
754: { 68, 9, 4, 4 },
755: { 72, 9, 4, 4 },
756: { 64, 13, 4, 8 },
757: { 68, 13, 4, 4 },
758: { 72, 13, 4, 8 },
759: { 68, 17, 4, 4 },
760: { 78, 5, 4, 4 },
761: { 82, 5, 4, 4 },
762: { 86, 5, 4, 4 },
763: { 90, 5, 4, 4 },
764: { 78, 9, 4, 4 },
765: { 82, 9, 4, 4 },
766: { 86, 9, 4, 4 },
767: { 90, 9, 4, 4 },
768: { 78, 13, 4, 4 },
769: { 82, 13, 4, 4 },
770: { 86, 13, 4, 4 },
771: { 90, 13, 4, 4 },
772: { 78, 17, 4, 4 },
773: { 82, 17, 4, 4 },
774: { 86, 17, 4, 4 },
775: { 90, 17, 4, 8 },
776: { 78, 21, 4, 4 },
777: { 82, 21, 4, 4 },
778: { 86, 21, 4, 4 },
779: { 82, 0, 4, 4 },
780: { 86, 0, 4, 4 },
781: { 90, 0, 4, 4 },
782: { 11, 21, 5, 4 },
783: { 16, 21, 5, 4 },
784: { 35, 21, 6, 4 },
785: { 41, 21, 5, 4 },
786: { 46, 21, 5, 4 },
787: { 0, 0, 4, 4 },
788: { 5, 0, 4, 4 },
789: { 11, 0, 5, 4 },
790: { 16, 0, 5, 4 },
791: { 21, 0, 5, 4 },
792: { 26, 0, 5, 4 },
793: { 31, 0, 5, 4 },
794: { 37, 0, 5, 4 },
795: { 42, 0, 5, 4 },
796: { 47, 0, 5, 4 },
797: { 52, 0, 5, 4 },
798: { 57, 0, 5, 4 },
799: { 0, 17, 62, 4 },
800: { 0, 13, 7, 4 },
801: { 64, 21, 6, 4 },
802: { 70, 21, 6, 4 },
803: },
804:
805: {
806: { 0, 5, 4, 4 },
807: { 56, 5, 6, 4 },
808: { 0, 9, 6, 4 },
809: { 54, 9, 8, 8 },
810: { 21, 21, 14, 4 },
811: { 64, 9, 4, 4 },
812: { 72, 9, 4, 4 },
813: { 64, 17, 4, 4 },
814: { 72, 17, 4, 4 },
815: { 72, 13, 4, 4 },
816: { 64, 21, 4, 4 },
817: { 68, 17, 4, 4 },
818: { 72, 21, 4, 4 },
819: { 68, 21, 4, 4 },
820: { 68, 9, 4, 4 },
821: null ,
822: null ,
823: null ,
824: null ,
825: null ,
826: null ,
827: null ,
828: null ,
829: null ,
830: null ,
831: null ,
832: null ,
833: null ,
834: null ,
835: null ,
836: null ,
837: null ,
838: null ,
839: { 64, 0, 4, 4 },
840: { 68, 0, 4, 4 },
841: { 72, 0, 4, 4 },
842: { 11, 21, 5, 4 },
843: { 16, 21, 5, 4 },
844: { 35, 21, 5, 4 },
845: { 40, 21, 4, 4 },
846: { 44, 21, 4, 4 },
847: { 0, 0, 4, 4 },
848: { 5, 0, 4, 4 },
849: { 11, 0, 5, 4 },
850: { 16, 0, 5, 4 },
851: { 21, 0, 5, 4 },
852: { 26, 0, 5, 4 },
853: { 31, 0, 5, 4 },
854: { 37, 0, 5, 4 },
855: { 42, 0, 5, 4 },
856: { 47, 0, 5, 4 },
857: { 52, 0, 5, 4 },
858: { 57, 0, 5, 4 },
859: { 0, 17, 62, 4 },
860: { 0, 13, 7, 4 },
861: { 3, 21, 4, 4 },
862: { 56, 21, 4, 4 },
863: },
864: };
865:
866:
867:
868:
869:
870:
871:
872:
873:
874:
875:
876:
877: public static final char[] KBD_CAPS_BASE = "1234567890-^\\QWERTYUIOP@[ASDFGHJKL;:]ZXCVBNM,./\u0000".toCharArray ();
878: public static final char[] KBD_CAPS_SHIFT_BASE = "!\"#$%&'()\u0000=~|qwertyuiop`{asdfghjkl+*}zxcvbnm<>?_".toCharArray ();
879: public static final char[] KBD_KANA_BASE = "ヌフアウエオヤユヨワホヘータテイスカンナニラゼ゚チトシハキクマノリレケムツサソヒコミモネルメロ".toCharArray ();
880: public static final char[] KBD_KANA_SHIFT_BASE = "ヌファゥェォャュョヲホヘータティスカンナニラゼ「チトシハキクマノリレケ」ッサソヒコミモ、。・\u00a0".toCharArray ();
881: public static final char[] KBD_KANA_AIU_BASE = "アイウエオナニヌネノラリルカキクケコハヒフヘホレロサシスセソマミムメモ゙゚タチツテトヤユヨワヲン".toCharArray ();
882: public static final char[] KBD_KANA_AIU_SHIFT_BASE = "ァィゥェォナニヌネヲラリルカキクケコハヒフヘホレ「\u00a0シスセソマミムメモー」タチッテトャュョ、。・".toCharArray ();
883: public static final char[] KBD_ROMA_BASE = "1234567890ー^\\QWERTYUIOP@「ASDFGHJKL;:」ZXCVBNM、。・\u0000".toCharArray ();
884: public static final char[] KBD_ROMA_SHIFT_BASE = "!\"#$%&'()\u0000=~|QWeRTYuioP`{aSDFGHJKL+*}zXCVBNM<>?_".toCharArray ();
885: public static final char[] KBD_NUM_BASE = (" 789/" + "* 456- 123+ 0,.=\u0084").toCharArray ();
886: public static final byte[] KBD_CAPS_CHR = new byte[KBD_VAR_KEYS];
887: public static final byte[] KBD_NORMAL_CHR = new byte[KBD_VAR_KEYS];
888: public static final byte[] KBD_CODE_CHR = new byte[KBD_VAR_KEYS];
889: public static final byte[] KBD_CAPS_SHIFT_CHR = new byte[KBD_VAR_KEYS];
890: public static final byte[] KBD_SHIFT_CHR = new byte[KBD_VAR_KEYS];
891: public static final byte[] KBD_CTRL_CHR = new byte[KBD_VAR_KEYS];
892: public static final byte[] KBD_KANA_CHR = new byte[KBD_VAR_KEYS];
893: public static final byte[] KBD_KANA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
894: public static final byte[] KBD_KANA_AIU_CHR = new byte[KBD_VAR_KEYS];
895: public static final byte[] KBD_KANA_AIU_SHIFT_CHR = new byte[KBD_VAR_KEYS];
896: public static final byte[] KBD_ROMA_CHR = new byte[KBD_VAR_KEYS];
897: public static final byte[] KBD_ROMA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
898: public static final byte[] KBD_NUM_CAPS_CHR = new byte[KBD_VAR_KEYS];
899: public static final byte[] KBD_NUM_CHR = new byte[KBD_VAR_KEYS];
900: public static final byte[] KBD_NUM_CODE_CHR = new byte[KBD_VAR_KEYS];
901: public static final byte[] KBD_NUM_CAPS_SHIFT_CHR = new byte[KBD_VAR_KEYS];
902: public static final byte[] KBD_NUM_SHIFT_CHR = new byte[KBD_VAR_KEYS];
903: public static final byte[] KBD_NUM_CTRL_CHR = new byte[KBD_VAR_KEYS];
904: public static final byte[] KBD_NUM_KANA_CHR = new byte[KBD_VAR_KEYS];
905: public static final byte[] KBD_NUM_KANA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
906: public static final byte[] KBD_NUM_KANA_AIU_CHR = new byte[KBD_VAR_KEYS];
907: public static final byte[] KBD_NUM_KANA_AIU_SHIFT_CHR = new byte[KBD_VAR_KEYS];
908: public static final byte[] KBD_NUM_ROMA_CHR = new byte[KBD_VAR_KEYS];
909: public static final byte[] KBD_NUM_ROMA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
910:
911:
912:
913:
914:
915:
916:
917:
918:
919:
920:
921:
922:
923:
924:
925:
926:
927:
928:
929:
930:
931:
932:
933:
934:
935:
936:
937:
938:
939:
940:
941:
942:
943:
944: public static final int[][] KBD_VAR_LETTER = {
945: {
946: 0b000000000000000000000,
947: 0b000000000000000000000,
948: 0b000000000000000000000,
949: 0b000000000000000000000,
950: 0b000000000000000000000,
951: 0b000000000000000000000,
952: 0b000000000000000000000,
953: 0b000000000000000000000,
954: 0b000000000000000000000,
955: 0b000000000000000000000,
956: 0b000000000000000000000,
957: 0b000000000000000000000,
958: 0b000000000000000000000,
959: },
960: {
961: 0b000000000000000000000,
962: 0b000000000000000000000,
963: 0b000000100000001000000,
964: 0b000001010000010100000,
965: 0b000010001000010100000,
966: 0b000100000100100010000,
967: 0b000000000000100010000,
968: 0b000000000001000001000,
969: 0b000000000001111111000,
970: 0b000000000001000001000,
971: 0b000000000001000001000,
972: 0b000000000000000000000,
973: 0b000000000000000000000,
974: },
975: {
976: 0b000000000000000000000,
977: 0b000000000000000000000,
978: 0b000000100001111100000,
979: 0b000001010001000010000,
980: 0b000010001001000001000,
981: 0b000100000101000010000,
982: 0b000000000001111100000,
983: 0b000000000001000010000,
984: 0b000000000001000001000,
985: 0b000000000001000010000,
986: 0b000000000001111100000,
987: 0b000000000000000000000,
988: 0b000000000000000000000,
989: },
990: {
991: 0b000000000000000000000,
992: 0b000000000000000000000,
993: 0b000000100000011100000,
994: 0b000001010000100010000,
995: 0b000010001001000001000,
996: 0b000100000101000000000,
997: 0b000000000001000000000,
998: 0b000000000001000000000,
999: 0b000000000001000001000,
1000: 0b000000000000100010000,
1001: 0b000000000000011100000,
1002: 0b000000000000000000000,
1003: 0b000000000000000000000,
1004: },
1005: {
1006: 0b000000000000000000000,
1007: 0b000000000000000000000,
1008: 0b000000100001111100000,
1009: 0b000001010001000010000,
1010: 0b000010001001000001000,
1011: 0b000100000101000001000,
1012: 0b000000000001000001000,
1013: 0b000000000001000001000,
1014: 0b000000000001000001000,
1015: 0b000000000001000010000,
1016: 0b000000000001111100000,
1017: 0b000000000000000000000,
1018: 0b000000000000000000000,
1019: },
1020: {
1021: 0b000000000000000000000,
1022: 0b000000000000000000000,
1023: 0b000000100001111111000,
1024: 0b000001010001000000000,
1025: 0b000010001001000000000,
1026: 0b000100000101000000000,
1027: 0b000000000001111110000,
1028: 0b000000000001000000000,
1029: 0b000000000001000000000,
1030: 0b000000000001000000000,
1031: 0b000000000001111111000,
1032: 0b000000000000000000000,
1033: 0b000000000000000000000,
1034: },
1035: {
1036: 0b000000000000000000000,
1037: 0b000000000000000000000,
1038: 0b000000100001111111000,
1039: 0b000001010001000000000,
1040: 0b000010001001000000000,
1041: 0b000100000101000000000,
1042: 0b000000000001111110000,
1043: 0b000000000001000000000,
1044: 0b000000000001000000000,
1045: 0b000000000001000000000,
1046: 0b000000000001000000000,
1047: 0b000000000000000000000,
1048: 0b000000000000000000000,
1049: },
1050: {
1051: 0b000000000000000000000,
1052: 0b000000000000000000000,
1053: 0b000000100000011110000,
1054: 0b000001010000100000000,
1055: 0b000010001001000000000,
1056: 0b000100000101000000000,
1057: 0b000000000001001111000,
1058: 0b000000000001000010000,
1059: 0b000000000001000010000,
1060: 0b000000000000100010000,
1061: 0b000000000000011100000,
1062: 0b000000000000000000000,
1063: 0b000000000000000000000,
1064: },
1065: {
1066: 0b000000000000000000000,
1067: 0b000000000000000000000,
1068: 0b000000100001000001000,
1069: 0b000001010001000001000,
1070: 0b000010001001000001000,
1071: 0b000100000101000001000,
1072: 0b000000000001111111000,
1073: 0b000000000001000001000,
1074: 0b000000000001000001000,
1075: 0b000000000001000001000,
1076: 0b000000000001000001000,
1077: 0b000000000000000000000,
1078: 0b000000000000000000000,
1079: },
1080: {
1081: 0b000000000000000000000,
1082: 0b000000000000000000000,
1083: 0b000000100000011100000,
1084: 0b000001010000001000000,
1085: 0b000010001000001000000,
1086: 0b000100000100001000000,
1087: 0b000000000000001000000,
1088: 0b000000000000001000000,
1089: 0b000000000000001000000,
1090: 0b000000000000001000000,
1091: 0b000000000000011100000,
1092: 0b000000000000000000000,
1093: 0b000000000000000000000,
1094: },
1095: {
1096: 0b000000000000000000000,
1097: 0b000000000000000000000,
1098: 0b000000100000000001000,
1099: 0b000001010000000001000,
1100: 0b000010001000000001000,
1101: 0b000100000100000001000,
1102: 0b000000000000000001000,
1103: 0b000000000000000001000,
1104: 0b000000000001000001000,
1105: 0b000000000000100010000,
1106: 0b000000000000011100000,
1107: 0b000000000000000000000,
1108: 0b000000000000000000000,
1109: },
1110: {
1111: 0b000000000000000000000,
1112: 0b000000000000000000000,
1113: 0b000000100001000001000,
1114: 0b000001010001000010000,
1115: 0b000010001001000100000,
1116: 0b000100000101001000000,
1117: 0b000000000001010000000,
1118: 0b000000000001101000000,
1119: 0b000000000001000100000,
1120: 0b000000000001000010000,
1121: 0b000000000001000001000,
1122: 0b000000000000000000000,
1123: 0b000000000000000000000,
1124: },
1125: {
1126: 0b000000000000000000000,
1127: 0b000000000000000000000,
1128: 0b000000100001000000000,
1129: 0b000001010001000000000,
1130: 0b000010001001000000000,
1131: 0b000100000101000000000,
1132: 0b000000000001000000000,
1133: 0b000000000001000000000,
1134: 0b000000000001000000000,
1135: 0b000000000001000000000,
1136: 0b000000000001111111000,
1137: 0b000000000000000000000,
1138: 0b000000000000000000000,
1139: },
1140: {
1141: 0b000000000000000000000,
1142: 0b000000000000000000000,
1143: 0b000000100001000001000,
1144: 0b000001010001100011000,
1145: 0b000010001001010101000,
1146: 0b000100000101010101000,
1147: 0b000000000001001001000,
1148: 0b000000000001001001000,
1149: 0b000000000001000001000,
1150: 0b000000000001000001000,
1151: 0b000000000001000001000,
1152: 0b000000000000000000000,
1153: 0b000000000000000000000,
1154: },
1155: {
1156: 0b000000000000000000000,
1157: 0b000000000000000000000,
1158: 0b000000100001000001000,
1159: 0b000001010001000001000,
1160: 0b000010001001100001000,
1161: 0b000100000101010001000,
1162: 0b000000000001001001000,
1163: 0b000000000001000101000,
1164: 0b000000000001000011000,
1165: 0b000000000001000001000,
1166: 0b000000000001000001000,
1167: 0b000000000000000000000,
1168: 0b000000000000000000000,
1169: },
1170: {
1171: 0b000000000000000000000,
1172: 0b000000000000000000000,
1173: 0b000000100000011100000,
1174: 0b000001010000100010000,
1175: 0b000010001001000001000,
1176: 0b000100000101000001000,
1177: 0b000000000001000001000,
1178: 0b000000000001000001000,
1179: 0b000000000001000001000,
1180: 0b000000000000100010000,
1181: 0b000000000000011100000,
1182: 0b000000000000000000000,
1183: 0b000000000000000000000,
1184: },
1185: {
1186: 0b000000000000000000000,
1187: 0b000000000000000000000,
1188: 0b000000100001111100000,
1189: 0b000001010001000010000,
1190: 0b000010001001000001000,
1191: 0b000100000101000001000,
1192: 0b000000000001000010000,
1193: 0b000000000001111100000,
1194: 0b000000000001000000000,
1195: 0b000000000001000000000,
1196: 0b000000000001000000000,
1197: 0b000000000000000000000,
1198: 0b000000000000000000000,
1199: },
1200: {
1201: 0b000000000000000000000,
1202: 0b000000000000000000000,
1203: 0b000000100000011100000,
1204: 0b000001010000100010000,
1205: 0b000010001001000001000,
1206: 0b000100000101000001000,
1207: 0b000000000001000001000,
1208: 0b000000000001001001000,
1209: 0b000000000001000101000,
1210: 0b000000000000100010000,
1211: 0b000000000000011101000,
1212: 0b000000000000000000000,
1213: 0b000000000000000000000,
1214: },
1215: {
1216: 0b000000000000000000000,
1217: 0b000000000000000000000,
1218: 0b000000100001111100000,
1219: 0b000001010001000010000,
1220: 0b000010001001000001000,
1221: 0b000100000101000001000,
1222: 0b000000000001000010000,
1223: 0b000000000001111100000,
1224: 0b000000000001000010000,
1225: 0b000000000001000001000,
1226: 0b000000000001000001000,
1227: 0b000000000000000000000,
1228: 0b000000000000000000000,
1229: },
1230: {
1231: 0b000000000000000000000,
1232: 0b000000000000000000000,
1233: 0b000000100000011110000,
1234: 0b000001010000100000000,
1235: 0b000010001001000000000,
1236: 0b000100000100100000000,
1237: 0b000000000000011100000,
1238: 0b000000000000000010000,
1239: 0b000000000000000001000,
1240: 0b000000000000000010000,
1241: 0b000000000000111100000,
1242: 0b000000000000000000000,
1243: 0b000000000000000000000,
1244: },
1245: {
1246: 0b000000000000000000000,
1247: 0b000000000000000000000,
1248: 0b000000100001111111000,
1249: 0b000001010000001000000,
1250: 0b000010001000001000000,
1251: 0b000100000100001000000,
1252: 0b000000000000001000000,
1253: 0b000000000000001000000,
1254: 0b000000000000001000000,
1255: 0b000000000000001000000,
1256: 0b000000000000001000000,
1257: 0b000000000000000000000,
1258: 0b000000000000000000000,
1259: },
1260: {
1261: 0b000000000000000000000,
1262: 0b000000000000000000000,
1263: 0b000000100001000001000,
1264: 0b000001010001000001000,
1265: 0b000010001001000001000,
1266: 0b000100000101000001000,
1267: 0b000000000001000001000,
1268: 0b000000000001000001000,
1269: 0b000000000001000001000,
1270: 0b000000000000100010000,
1271: 0b000000000000011100000,
1272: 0b000000000000000000000,
1273: 0b000000000000000000000,
1274: },
1275: {
1276: 0b000000000000000000000,
1277: 0b000000000000000000000,
1278: 0b000000100001000001000,
1279: 0b000001010001000001000,
1280: 0b000010001001000001000,
1281: 0b000100000101000001000,
1282: 0b000000000000100010000,
1283: 0b000000000000100010000,
1284: 0b000000000000010100000,
1285: 0b000000000000010100000,
1286: 0b000000000000001000000,
1287: 0b000000000000000000000,
1288: 0b000000000000000000000,
1289: },
1290: {
1291: 0b000000000000000000000,
1292: 0b000000000000000000000,
1293: 0b000000100010001000100,
1294: 0b000001010010001000100,
1295: 0b000010001010001000100,
1296: 0b000100000101010101000,
1297: 0b000000000001010101000,
1298: 0b000000000001010101000,
1299: 0b000000000000100010000,
1300: 0b000000000000100010000,
1301: 0b000000000000100010000,
1302: 0b000000000000000000000,
1303: 0b000000000000000000000,
1304: },
1305: {
1306: 0b000000000000000000000,
1307: 0b000000000000000000000,
1308: 0b000000100001000001000,
1309: 0b000001010001000001000,
1310: 0b000010001000100010000,
1311: 0b000100000100010100000,
1312: 0b000000000000001000000,
1313: 0b000000000000010100000,
1314: 0b000000000000100010000,
1315: 0b000000000001000001000,
1316: 0b000000000001000001000,
1317: 0b000000000000000000000,
1318: 0b000000000000000000000,
1319: },
1320: {
1321: 0b000000000000000000000,
1322: 0b000000000000000000000,
1323: 0b000000100001000001000,
1324: 0b000001010001000001000,
1325: 0b000010001001000001000,
1326: 0b000100000100100010000,
1327: 0b000000000000010100000,
1328: 0b000000000000001000000,
1329: 0b000000000000001000000,
1330: 0b000000000000001000000,
1331: 0b000000000000001000000,
1332: 0b000000000000000000000,
1333: 0b000000000000000000000,
1334: },
1335: {
1336: 0b000000000000000000000,
1337: 0b000000000000000000000,
1338: 0b000000100001111111000,
1339: 0b000001010000000001000,
1340: 0b000010001000000010000,
1341: 0b000100000100000100000,
1342: 0b000000000000001000000,
1343: 0b000000000000010000000,
1344: 0b000000000000100000000,
1345: 0b000000000001000000000,
1346: 0b000000000001111111000,
1347: 0b000000000000000000000,
1348: 0b000000000000000000000,
1349: },
1350: {
1351: 0b000000000000000000000,
1352: 0b000000000000000000000,
1353: 0b000000100000011100000,
1354: 0b000001010000010000000,
1355: 0b000010001000010000000,
1356: 0b000100000100010000000,
1357: 0b000000000000010000000,
1358: 0b000000000000010000000,
1359: 0b000000000000010000000,
1360: 0b000000000000010000000,
1361: 0b000000000000011100000,
1362: 0b000000000000000000000,
1363: 0b000000000000000000000,
1364: },
1365: {
1366: 0b000000000000000000000,
1367: 0b000000000000000000000,
1368: 0b000000100001000001000,
1369: 0b000001010000100010000,
1370: 0b000010001000010100000,
1371: 0b000100000100001000000,
1372: 0b000000000001111111000,
1373: 0b000000000000001000000,
1374: 0b000000000001111111000,
1375: 0b000000000000001000000,
1376: 0b000000000000001000000,
1377: 0b000000000000000000000,
1378: 0b000000000000000000000,
1379: },
1380: {
1381: 0b000000000000000000000,
1382: 0b000000000000000000000,
1383: 0b000000100000011100000,
1384: 0b000001010000000100000,
1385: 0b000010001000000100000,
1386: 0b000100000100000100000,
1387: 0b000000000000000100000,
1388: 0b000000000000000100000,
1389: 0b000000000000000100000,
1390: 0b000000000000000100000,
1391: 0b000000000000011100000,
1392: 0b000000000000000000000,
1393: 0b000000000000000000000,
1394: },
1395: {
1396: 0b000000000000000000000,
1397: 0b000000000000000000000,
1398: 0b000000100000001000000,
1399: 0b000001010000010100000,
1400: 0b000010001000100010000,
1401: 0b000100000101000001000,
1402: 0b000000000000000000000,
1403: 0b000000000000000000000,
1404: 0b000000000000000000000,
1405: 0b000000000000000000000,
1406: 0b000000000000000000000,
1407: 0b000000000000000000000,
1408: 0b000000000000000000000,
1409: },
1410: {
1411: 0b000000000000000000000,
1412: 0b000000000000000000000,
1413: 0b000000100000000000000,
1414: 0b000001010000000000000,
1415: 0b000010001000000000000,
1416: 0b000100000100000000000,
1417: 0b000000000000000000000,
1418: 0b000000000000000000000,
1419: 0b000000000000000000000,
1420: 0b000000000001111111000,
1421: 0b000000000000000000000,
1422: 0b000000000000000000000,
1423: 0b000000000000000000000,
1424: },
1425: null,
1426: {
1427: 0b000000000000000000000,
1428: 0b000000000000000000000,
1429: 0b000000000010000000000,
1430: 0b000000000010000000000,
1431: 0b000000000010000000000,
1432: 0b000000000010000000000,
1433: 0b000000000010000000000,
1434: 0b000000000010000000000,
1435: 0b000000000000000000000,
1436: 0b000000000000000000000,
1437: 0b000000000010000000000,
1438: 0b000000000000000000000,
1439: 0b000000000000000000000,
1440: },
1441: {
1442: 0b000000000000000000000,
1443: 0b000000000000000000000,
1444: 0b000000000101000000000,
1445: 0b000000000101000000000,
1446: 0b000000000101000000000,
1447: 0b000000000000000000000,
1448: 0b000000000000000000000,
1449: 0b000000000000000000000,
1450: 0b000000000000000000000,
1451: 0b000000000000000000000,
1452: 0b000000000000000000000,
1453: 0b000000000000000000000,
1454: 0b000000000000000000000,
1455: },
1456: {
1457: 0b000000000000000000000,
1458: 0b000000000000000000000,
1459: 0b000000000101000000000,
1460: 0b000000000101000000000,
1461: 0b000000011111110000000,
1462: 0b000000000101000000000,
1463: 0b000000000101000000000,
1464: 0b000000000101000000000,
1465: 0b000000011111110000000,
1466: 0b000000000101000000000,
1467: 0b000000000101000000000,
1468: 0b000000000000000000000,
1469: 0b000000000000000000000,
1470: },
1471: {
1472: 0b000000000000000000000,
1473: 0b000000000000000000000,
1474: 0b000000000010000000000,
1475: 0b000000001111110000000,
1476: 0b000000010010000000000,
1477: 0b000000010010000000000,
1478: 0b000000001111100000000,
1479: 0b000000000010010000000,
1480: 0b000000000010010000000,
1481: 0b000000011111100000000,
1482: 0b000000000010000000000,
1483: 0b000000000000000000000,
1484: 0b000000000000000000000,
1485: },
1486: {
1487: 0b000000000000000000000,
1488: 0b000000000000000000000,
1489: 0b000000011100000000000,
1490: 0b000000010100010000000,
1491: 0b000000011100100000000,
1492: 0b000000000001000000000,
1493: 0b000000000010000000000,
1494: 0b000000000100000000000,
1495: 0b000000001001110000000,
1496: 0b000000010001010000000,
1497: 0b000000000001110000000,
1498: 0b000000000000000000000,
1499: 0b000000000000000000000,
1500: },
1501: {
1502: 0b000000000000000000000,
1503: 0b000000000000000000000,
1504: 0b000000001110000000000,
1505: 0b000000010001000000000,
1506: 0b000000010001000000000,
1507: 0b000000001010000000000,
1508: 0b000000000100000000000,
1509: 0b000000001010000000000,
1510: 0b000000010001010000000,
1511: 0b000000010000100000000,
1512: 0b000000001111010000000,
1513: 0b000000000000000000000,
1514: 0b000000000000000000000,
1515: },
1516: {
1517: 0b000000000000000000000,
1518: 0b000000000000000000000,
1519: 0b000000000001000000000,
1520: 0b000000000001000000000,
1521: 0b000000000010000000000,
1522: 0b000000000100000000000,
1523: 0b000000000000000000000,
1524: 0b000000000000000000000,
1525: 0b000000000000000000000,
1526: 0b000000000000000000000,
1527: 0b000000000000000000000,
1528: 0b000000000000000000000,
1529: 0b000000000000000000000,
1530: },
1531: {
1532: 0b000000000000000000000,
1533: 0b000000000000000000000,
1534: 0b000000000001000000000,
1535: 0b000000000010000000000,
1536: 0b000000000100000000000,
1537: 0b000000000100000000000,
1538: 0b000000000100000000000,
1539: 0b000000000100000000000,
1540: 0b000000000100000000000,
1541: 0b000000000010000000000,
1542: 0b000000000001000000000,
1543: 0b000000000000000000000,
1544: 0b000000000000000000000,
1545: },
1546: {
1547: 0b000000000000000000000,
1548: 0b000000000000000000000,
1549: 0b000000000100000000000,
1550: 0b000000000010000000000,
1551: 0b000000000001000000000,
1552: 0b000000000001000000000,
1553: 0b000000000001000000000,
1554: 0b000000000001000000000,
1555: 0b000000000001000000000,
1556: 0b000000000010000000000,
1557: 0b000000000100000000000,
1558: 0b000000000000000000000,
1559: 0b000000000000000000000,
1560: },
1561: {
1562: 0b000000000000000000000,
1563: 0b000000000000000000000,
1564: 0b000000000000000000000,
1565: 0b000000000010000000000,
1566: 0b000000010010010000000,
1567: 0b000000001010100000000,
1568: 0b000000000111000000000,
1569: 0b000000001010100000000,
1570: 0b000000010010010000000,
1571: 0b000000000010000000000,
1572: 0b000000000000000000000,
1573: 0b000000000000000000000,
1574: 0b000000000000000000000,
1575: },
1576: {
1577: 0b000000000000000000000,
1578: 0b000000000000000000000,
1579: 0b000000000000000000000,
1580: 0b000000000010000000000,
1581: 0b000000000010000000000,
1582: 0b000000000010000000000,
1583: 0b000000011111110000000,
1584: 0b000000000010000000000,
1585: 0b000000000010000000000,
1586: 0b000000000010000000000,
1587: 0b000000000000000000000,
1588: 0b000000000000000000000,
1589: 0b000000000000000000000,
1590: },
1591: {
1592: 0b000000000000000000000,
1593: 0b000000000000000000000,
1594: 0b000000000000000000000,
1595: 0b000000000000000000000,
1596: 0b000000000000000000000,
1597: 0b000000000000000000000,
1598: 0b000000000000000000000,
1599: 0b000000000110000000000,
1600: 0b000000000110000000000,
1601: 0b000000000010000000000,
1602: 0b000000000100000000000,
1603: 0b000000000000000000000,
1604: 0b000000000000000000000,
1605: },
1606: {
1607: 0b000000000000000000000,
1608: 0b000000000000000000000,
1609: 0b000000000000000000000,
1610: 0b000000000000000000000,
1611: 0b000000000000000000000,
1612: 0b000000000000000000000,
1613: 0b000000011111110000000,
1614: 0b000000000000000000000,
1615: 0b000000000000000000000,
1616: 0b000000000000000000000,
1617: 0b000000000000000000000,
1618: 0b000000000000000000000,
1619: 0b000000000000000000000,
1620: },
1621: {
1622: 0b000000000000000000000,
1623: 0b000000000000000000000,
1624: 0b000000000000000000000,
1625: 0b000000000000000000000,
1626: 0b000000000000000000000,
1627: 0b000000000000000000000,
1628: 0b000000000000000000000,
1629: 0b000000000000000000000,
1630: 0b000000000110000000000,
1631: 0b000000000110000000000,
1632: 0b000000000000000000000,
1633: 0b000000000000000000000,
1634: 0b000000000000000000000,
1635: },
1636: {
1637: 0b000000000000000000000,
1638: 0b000000000000000000000,
1639: 0b000000000000000000000,
1640: 0b000000000000010000000,
1641: 0b000000000000100000000,
1642: 0b000000000001000000000,
1643: 0b000000000010000000000,
1644: 0b000000000100000000000,
1645: 0b000000001000000000000,
1646: 0b000000010000000000000,
1647: 0b000000000000000000000,
1648: 0b000000000000000000000,
1649: 0b000000000000000000000,
1650: },
1651: {
1652: 0b000000000000000000000,
1653: 0b000000000000000000000,
1654: 0b000000001111100000000,
1655: 0b000000010000010000000,
1656: 0b000000010000010000000,
1657: 0b000000010000010000000,
1658: 0b000000010000010000000,
1659: 0b000000010000010000000,
1660: 0b000000010000010000000,
1661: 0b000000010000010000000,
1662: 0b000000001111100000000,
1663: 0b000000000000000000000,
1664: 0b000000000000000000000,
1665: },
1666: {
1667: 0b000000000000000000000,
1668: 0b000000000000000000000,
1669: 0b000000000001000000000,
1670: 0b000000000011000000000,
1671: 0b000000000101000000000,
1672: 0b000000000001000000000,
1673: 0b000000000001000000000,
1674: 0b000000000001000000000,
1675: 0b000000000001000000000,
1676: 0b000000000001000000000,
1677: 0b000000000001000000000,
1678: 0b000000000000000000000,
1679: 0b000000000000000000000,
1680: },
1681: {
1682: 0b000000000000000000000,
1683: 0b000000000000000000000,
1684: 0b000000001111100000000,
1685: 0b000000010000010000000,
1686: 0b000000000000010000000,
1687: 0b000000000000010000000,
1688: 0b000000000001100000000,
1689: 0b000000000110000000000,
1690: 0b000000001000000000000,
1691: 0b000000010000000000000,
1692: 0b000000011111110000000,
1693: 0b000000000000000000000,
1694: 0b000000000000000000000,
1695: },
1696: {
1697: 0b000000000000000000000,
1698: 0b000000000000000000000,
1699: 0b000000001111100000000,
1700: 0b000000010000010000000,
1701: 0b000000000000010000000,
1702: 0b000000000000010000000,
1703: 0b000000000011100000000,
1704: 0b000000000000010000000,
1705: 0b000000000000010000000,
1706: 0b000000010000010000000,
1707: 0b000000001111100000000,
1708: 0b000000000000000000000,
1709: 0b000000000000000000000,
1710: },
1711: {
1712: 0b000000000000000000000,
1713: 0b000000000000000000000,
1714: 0b000000000001100000000,
1715: 0b000000000010100000000,
1716: 0b000000000100100000000,
1717: 0b000000001000100000000,
1718: 0b000000010000100000000,
1719: 0b000000010000100000000,
1720: 0b000000011111110000000,
1721: 0b000000000000100000000,
1722: 0b000000000000100000000,
1723: 0b000000000000000000000,
1724: 0b000000000000000000000,
1725: },
1726: {
1727: 0b000000000000000000000,
1728: 0b000000000000000000000,
1729: 0b000000011111110000000,
1730: 0b000000010000000000000,
1731: 0b000000010000000000000,
1732: 0b000000011111100000000,
1733: 0b000000000000010000000,
1734: 0b000000000000010000000,
1735: 0b000000000000010000000,
1736: 0b000000010000010000000,
1737: 0b000000001111100000000,
1738: 0b000000000000000000000,
1739: 0b000000000000000000000,
1740: },
1741: {
1742: 0b000000000000000000000,
1743: 0b000000000000000000000,
1744: 0b000000000111100000000,
1745: 0b000000001000000000000,
1746: 0b000000010000000000000,
1747: 0b000000010000000000000,
1748: 0b000000011111100000000,
1749: 0b000000010000010000000,
1750: 0b000000010000010000000,
1751: 0b000000010000010000000,
1752: 0b000000001111100000000,
1753: 0b000000000000000000000,
1754: 0b000000000000000000000,
1755: },
1756: {
1757: 0b000000000000000000000,
1758: 0b000000000000000000000,
1759: 0b000000011111110000000,
1760: 0b000000000000010000000,
1761: 0b000000000000010000000,
1762: 0b000000000000100000000,
1763: 0b000000000001000000000,
1764: 0b000000000001000000000,
1765: 0b000000000010000000000,
1766: 0b000000000010000000000,
1767: 0b000000000010000000000,
1768: 0b000000000000000000000,
1769: 0b000000000000000000000,
1770: },
1771: {
1772: 0b000000000000000000000,
1773: 0b000000000000000000000,
1774: 0b000000001111100000000,
1775: 0b000000010000010000000,
1776: 0b000000010000010000000,
1777: 0b000000010000010000000,
1778: 0b000000001111100000000,
1779: 0b000000010000010000000,
1780: 0b000000010000010000000,
1781: 0b000000010000010000000,
1782: 0b000000001111100000000,
1783: 0b000000000000000000000,
1784: 0b000000000000000000000,
1785: },
1786: {
1787: 0b000000000000000000000,
1788: 0b000000000000000000000,
1789: 0b000000001111100000000,
1790: 0b000000010000010000000,
1791: 0b000000010000010000000,
1792: 0b000000010000010000000,
1793: 0b000000001111110000000,
1794: 0b000000000000010000000,
1795: 0b000000000000100000000,
1796: 0b000000000001000000000,
1797: 0b000000001110000000000,
1798: 0b000000000000000000000,
1799: 0b000000000000000000000,
1800: },
1801: {
1802: 0b000000000000000000000,
1803: 0b000000000000000000000,
1804: 0b000000000000000000000,
1805: 0b000000000110000000000,
1806: 0b000000000110000000000,
1807: 0b000000000000000000000,
1808: 0b000000000000000000000,
1809: 0b000000000110000000000,
1810: 0b000000000110000000000,
1811: 0b000000000000000000000,
1812: 0b000000000000000000000,
1813: 0b000000000000000000000,
1814: 0b000000000000000000000,
1815: },
1816: {
1817: 0b000000000000000000000,
1818: 0b000000000000000000000,
1819: 0b000000000000000000000,
1820: 0b000000000110000000000,
1821: 0b000000000110000000000,
1822: 0b000000000000000000000,
1823: 0b000000000000000000000,
1824: 0b000000000110000000000,
1825: 0b000000000110000000000,
1826: 0b000000000010000000000,
1827: 0b000000000100000000000,
1828: 0b000000000000000000000,
1829: 0b000000000000000000000,
1830: },
1831: {
1832: 0b000000000000000000000,
1833: 0b000000000000000000000,
1834: 0b000000000000100000000,
1835: 0b000000000001000000000,
1836: 0b000000000010000000000,
1837: 0b000000000100000000000,
1838: 0b000000001000000000000,
1839: 0b000000000100000000000,
1840: 0b000000000010000000000,
1841: 0b000000000001000000000,
1842: 0b000000000000100000000,
1843: 0b000000000000000000000,
1844: 0b000000000000000000000,
1845: },
1846: {
1847: 0b000000000000000000000,
1848: 0b000000000000000000000,
1849: 0b000000000000000000000,
1850: 0b000000000000000000000,
1851: 0b000000000000000000000,
1852: 0b000000011111110000000,
1853: 0b000000000000000000000,
1854: 0b000000011111110000000,
1855: 0b000000000000000000000,
1856: 0b000000000000000000000,
1857: 0b000000000000000000000,
1858: 0b000000000000000000000,
1859: 0b000000000000000000000,
1860: },
1861: {
1862: 0b000000000000000000000,
1863: 0b000000000000000000000,
1864: 0b000000001000000000000,
1865: 0b000000000100000000000,
1866: 0b000000000010000000000,
1867: 0b000000000001000000000,
1868: 0b000000000000100000000,
1869: 0b000000000001000000000,
1870: 0b000000000010000000000,
1871: 0b000000000100000000000,
1872: 0b000000001000000000000,
1873: 0b000000000000000000000,
1874: 0b000000000000000000000,
1875: },
1876: {
1877: 0b000000000000000000000,
1878: 0b000000000000000000000,
1879: 0b000000000111000000000,
1880: 0b000000001000100000000,
1881: 0b000000010000010000000,
1882: 0b000000000000010000000,
1883: 0b000000000000100000000,
1884: 0b000000000001000000000,
1885: 0b000000000010000000000,
1886: 0b000000000000000000000,
1887: 0b000000000010000000000,
1888: 0b000000000000000000000,
1889: 0b000000000000000000000,
1890: },
1891: {
1892: 0b000000000000000000000,
1893: 0b000000000000000000000,
1894: 0b000000000111000000000,
1895: 0b000000001000100000000,
1896: 0b000000010010010000000,
1897: 0b000000010101010000000,
1898: 0b000000010101010000000,
1899: 0b000000010101010000000,
1900: 0b000000010011110000000,
1901: 0b000000001000000000000,
1902: 0b000000000111100000000,
1903: 0b000000000000000000000,
1904: 0b000000000000000000000,
1905: },
1906: {
1907: 0b000000000000000000000,
1908: 0b000000000000000000000,
1909: 0b000000000010000000000,
1910: 0b000000000101000000000,
1911: 0b000000000101000000000,
1912: 0b000000001000100000000,
1913: 0b000000001000100000000,
1914: 0b000000010000010000000,
1915: 0b000000011111110000000,
1916: 0b000000010000010000000,
1917: 0b000000010000010000000,
1918: 0b000000000000000000000,
1919: 0b000000000000000000000,
1920: },
1921: {
1922: 0b000000000000000000000,
1923: 0b000000000000000000000,
1924: 0b000000011111000000000,
1925: 0b000000010000100000000,
1926: 0b000000010000010000000,
1927: 0b000000010000100000000,
1928: 0b000000011111000000000,
1929: 0b000000010000100000000,
1930: 0b000000010000010000000,
1931: 0b000000010000100000000,
1932: 0b000000011111000000000,
1933: 0b000000000000000000000,
1934: 0b000000000000000000000,
1935: },
1936: {
1937: 0b000000000000000000000,
1938: 0b000000000000000000000,
1939: 0b000000000111000000000,
1940: 0b000000001000100000000,
1941: 0b000000010000010000000,
1942: 0b000000010000000000000,
1943: 0b000000010000000000000,
1944: 0b000000010000000000000,
1945: 0b000000010000010000000,
1946: 0b000000001000100000000,
1947: 0b000000000111000000000,
1948: 0b000000000000000000000,
1949: 0b000000000000000000000,
1950: },
1951: {
1952: 0b000000000000000000000,
1953: 0b000000000000000000000,
1954: 0b000000011111000000000,
1955: 0b000000010000100000000,
1956: 0b000000010000010000000,
1957: 0b000000010000010000000,
1958: 0b000000010000010000000,
1959: 0b000000010000010000000,
1960: 0b000000010000010000000,
1961: 0b000000010000100000000,
1962: 0b000000011111000000000,
1963: 0b000000000000000000000,
1964: 0b000000000000000000000,
1965: },
1966: {
1967: 0b000000000000000000000,
1968: 0b000000000000000000000,
1969: 0b000000011111110000000,
1970: 0b000000010000000000000,
1971: 0b000000010000000000000,
1972: 0b000000010000000000000,
1973: 0b000000011111100000000,
1974: 0b000000010000000000000,
1975: 0b000000010000000000000,
1976: 0b000000010000000000000,
1977: 0b000000011111110000000,
1978: 0b000000000000000000000,
1979: 0b000000000000000000000,
1980: },
1981: {
1982: 0b000000000000000000000,
1983: 0b000000000000000000000,
1984: 0b000000011111110000000,
1985: 0b000000010000000000000,
1986: 0b000000010000000000000,
1987: 0b000000010000000000000,
1988: 0b000000011111100000000,
1989: 0b000000010000000000000,
1990: 0b000000010000000000000,
1991: 0b000000010000000000000,
1992: 0b000000010000000000000,
1993: 0b000000000000000000000,
1994: 0b000000000000000000000,
1995: },
1996: {
1997: 0b000000000000000000000,
1998: 0b000000000000000000000,
1999: 0b000000000111100000000,
2000: 0b000000001000000000000,
2001: 0b000000010000000000000,
2002: 0b000000010000000000000,
2003: 0b000000010011110000000,
2004: 0b000000010000100000000,
2005: 0b000000010000100000000,
2006: 0b000000001000100000000,
2007: 0b000000000111000000000,
2008: 0b000000000000000000000,
2009: 0b000000000000000000000,
2010: },
2011: {
2012: 0b000000000000000000000,
2013: 0b000000000000000000000,
2014: 0b000000010000010000000,
2015: 0b000000010000010000000,
2016: 0b000000010000010000000,
2017: 0b000000010000010000000,
2018: 0b000000011111110000000,
2019: 0b000000010000010000000,
2020: 0b000000010000010000000,
2021: 0b000000010000010000000,
2022: 0b000000010000010000000,
2023: 0b000000000000000000000,
2024: 0b000000000000000000000,
2025: },
2026: {
2027: 0b000000000000000000000,
2028: 0b000000000000000000000,
2029: 0b000000000111000000000,
2030: 0b000000000010000000000,
2031: 0b000000000010000000000,
2032: 0b000000000010000000000,
2033: 0b000000000010000000000,
2034: 0b000000000010000000000,
2035: 0b000000000010000000000,
2036: 0b000000000010000000000,
2037: 0b000000000111000000000,
2038: 0b000000000000000000000,
2039: 0b000000000000000000000,
2040: },
2041: {
2042: 0b000000000000000000000,
2043: 0b000000000000000000000,
2044: 0b000000000000010000000,
2045: 0b000000000000010000000,
2046: 0b000000000000010000000,
2047: 0b000000000000010000000,
2048: 0b000000000000010000000,
2049: 0b000000000000010000000,
2050: 0b000000010000010000000,
2051: 0b000000001000100000000,
2052: 0b000000000111000000000,
2053: 0b000000000000000000000,
2054: 0b000000000000000000000,
2055: },
2056: {
2057: 0b000000000000000000000,
2058: 0b000000000000000000000,
2059: 0b000000010000010000000,
2060: 0b000000010000100000000,
2061: 0b000000010001000000000,
2062: 0b000000010010000000000,
2063: 0b000000010100000000000,
2064: 0b000000011010000000000,
2065: 0b000000010001000000000,
2066: 0b000000010000100000000,
2067: 0b000000010000010000000,
2068: 0b000000000000000000000,
2069: 0b000000000000000000000,
2070: },
2071: {
2072: 0b000000000000000000000,
2073: 0b000000000000000000000,
2074: 0b000000010000000000000,
2075: 0b000000010000000000000,
2076: 0b000000010000000000000,
2077: 0b000000010000000000000,
2078: 0b000000010000000000000,
2079: 0b000000010000000000000,
2080: 0b000000010000000000000,
2081: 0b000000010000000000000,
2082: 0b000000011111110000000,
2083: 0b000000000000000000000,
2084: 0b000000000000000000000,
2085: },
2086: {
2087: 0b000000000000000000000,
2088: 0b000000000000000000000,
2089: 0b000000010000010000000,
2090: 0b000000011000110000000,
2091: 0b000000010101010000000,
2092: 0b000000010101010000000,
2093: 0b000000010010010000000,
2094: 0b000000010010010000000,
2095: 0b000000010000010000000,
2096: 0b000000010000010000000,
2097: 0b000000010000010000000,
2098: 0b000000000000000000000,
2099: 0b000000000000000000000,
2100: },
2101: {
2102: 0b000000000000000000000,
2103: 0b000000000000000000000,
2104: 0b000000010000010000000,
2105: 0b000000010000010000000,
2106: 0b000000011000010000000,
2107: 0b000000010100010000000,
2108: 0b000000010010010000000,
2109: 0b000000010001010000000,
2110: 0b000000010000110000000,
2111: 0b000000010000010000000,
2112: 0b000000010000010000000,
2113: 0b000000000000000000000,
2114: 0b000000000000000000000,
2115: },
2116: {
2117: 0b000000000000000000000,
2118: 0b000000000000000000000,
2119: 0b000000000111000000000,
2120: 0b000000001000100000000,
2121: 0b000000010000010000000,
2122: 0b000000010000010000000,
2123: 0b000000010000010000000,
2124: 0b000000010000010000000,
2125: 0b000000010000010000000,
2126: 0b000000001000100000000,
2127: 0b000000000111000000000,
2128: 0b000000000000000000000,
2129: 0b000000000000000000000,
2130: },
2131: {
2132: 0b000000000000000000000,
2133: 0b000000000000000000000,
2134: 0b000000011111000000000,
2135: 0b000000010000100000000,
2136: 0b000000010000010000000,
2137: 0b000000010000010000000,
2138: 0b000000010000100000000,
2139: 0b000000011111000000000,
2140: 0b000000010000000000000,
2141: 0b000000010000000000000,
2142: 0b000000010000000000000,
2143: 0b000000000000000000000,
2144: 0b000000000000000000000,
2145: },
2146: {
2147: 0b000000000000000000000,
2148: 0b000000000000000000000,
2149: 0b000000000111000000000,
2150: 0b000000001000100000000,
2151: 0b000000010000010000000,
2152: 0b000000010000010000000,
2153: 0b000000010000010000000,
2154: 0b000000010010010000000,
2155: 0b000000010001010000000,
2156: 0b000000001000100000000,
2157: 0b000000000111010000000,
2158: 0b000000000000000000000,
2159: 0b000000000000000000000,
2160: },
2161: {
2162: 0b000000000000000000000,
2163: 0b000000000000000000000,
2164: 0b000000011111000000000,
2165: 0b000000010000100000000,
2166: 0b000000010000010000000,
2167: 0b000000010000010000000,
2168: 0b000000010000100000000,
2169: 0b000000011111000000000,
2170: 0b000000010000100000000,
2171: 0b000000010000010000000,
2172: 0b000000010000010000000,
2173: 0b000000000000000000000,
2174: 0b000000000000000000000,
2175: },
2176: {
2177: 0b000000000000000000000,
2178: 0b000000000000000000000,
2179: 0b000000000111100000000,
2180: 0b000000001000000000000,
2181: 0b000000010000000000000,
2182: 0b000000001000000000000,
2183: 0b000000000111000000000,
2184: 0b000000000000100000000,
2185: 0b000000000000010000000,
2186: 0b000000000000100000000,
2187: 0b000000001111000000000,
2188: 0b000000000000000000000,
2189: 0b000000000000000000000,
2190: },
2191: {
2192: 0b000000000000000000000,
2193: 0b000000000000000000000,
2194: 0b000000011111110000000,
2195: 0b000000000010000000000,
2196: 0b000000000010000000000,
2197: 0b000000000010000000000,
2198: 0b000000000010000000000,
2199: 0b000000000010000000000,
2200: 0b000000000010000000000,
2201: 0b000000000010000000000,
2202: 0b000000000010000000000,
2203: 0b000000000000000000000,
2204: 0b000000000000000000000,
2205: },
2206: {
2207: 0b000000000000000000000,
2208: 0b000000000000000000000,
2209: 0b000000010000010000000,
2210: 0b000000010000010000000,
2211: 0b000000010000010000000,
2212: 0b000000010000010000000,
2213: 0b000000010000010000000,
2214: 0b000000010000010000000,
2215: 0b000000010000010000000,
2216: 0b000000001000100000000,
2217: 0b000000000111000000000,
2218: 0b000000000000000000000,
2219: 0b000000000000000000000,
2220: },
2221: {
2222: 0b000000000000000000000,
2223: 0b000000000000000000000,
2224: 0b000000010000010000000,
2225: 0b000000010000010000000,
2226: 0b000000010000010000000,
2227: 0b000000010000010000000,
2228: 0b000000001000100000000,
2229: 0b000000001000100000000,
2230: 0b000000000101000000000,
2231: 0b000000000101000000000,
2232: 0b000000000010000000000,
2233: 0b000000000000000000000,
2234: 0b000000000000000000000,
2235: },
2236: {
2237: 0b000000000000000000000,
2238: 0b000000000000000000000,
2239: 0b000000100010001000000,
2240: 0b000000100010001000000,
2241: 0b000000100010001000000,
2242: 0b000000010101010000000,
2243: 0b000000010101010000000,
2244: 0b000000010101010000000,
2245: 0b000000001000100000000,
2246: 0b000000001000100000000,
2247: 0b000000001000100000000,
2248: 0b000000000000000000000,
2249: 0b000000000000000000000,
2250: },
2251: {
2252: 0b000000000000000000000,
2253: 0b000000000000000000000,
2254: 0b000000010000010000000,
2255: 0b000000010000010000000,
2256: 0b000000001000100000000,
2257: 0b000000000101000000000,
2258: 0b000000000010000000000,
2259: 0b000000000101000000000,
2260: 0b000000001000100000000,
2261: 0b000000010000010000000,
2262: 0b000000010000010000000,
2263: 0b000000000000000000000,
2264: 0b000000000000000000000,
2265: },
2266: {
2267: 0b000000000000000000000,
2268: 0b000000000000000000000,
2269: 0b000000010000010000000,
2270: 0b000000010000010000000,
2271: 0b000000010000010000000,
2272: 0b000000001000100000000,
2273: 0b000000000101000000000,
2274: 0b000000000010000000000,
2275: 0b000000000010000000000,
2276: 0b000000000010000000000,
2277: 0b000000000010000000000,
2278: 0b000000000000000000000,
2279: 0b000000000000000000000,
2280: },
2281: {
2282: 0b000000000000000000000,
2283: 0b000000000000000000000,
2284: 0b000000011111110000000,
2285: 0b000000000000010000000,
2286: 0b000000000000100000000,
2287: 0b000000000001000000000,
2288: 0b000000000010000000000,
2289: 0b000000000100000000000,
2290: 0b000000001000000000000,
2291: 0b000000010000000000000,
2292: 0b000000011111110000000,
2293: 0b000000000000000000000,
2294: 0b000000000000000000000,
2295: },
2296: {
2297: 0b000000000000000000000,
2298: 0b000000000000000000000,
2299: 0b000000000111000000000,
2300: 0b000000000100000000000,
2301: 0b000000000100000000000,
2302: 0b000000000100000000000,
2303: 0b000000000100000000000,
2304: 0b000000000100000000000,
2305: 0b000000000100000000000,
2306: 0b000000000100000000000,
2307: 0b000000000111000000000,
2308: 0b000000000000000000000,
2309: 0b000000000000000000000,
2310: },
2311: {
2312: 0b000000000000000000000,
2313: 0b000000000000000000000,
2314: 0b000000010000010000000,
2315: 0b000000001000100000000,
2316: 0b000000000101000000000,
2317: 0b000000000010000000000,
2318: 0b000000011111110000000,
2319: 0b000000000010000000000,
2320: 0b000000011111110000000,
2321: 0b000000000010000000000,
2322: 0b000000000010000000000,
2323: 0b000000000000000000000,
2324: 0b000000000000000000000,
2325: },
2326: {
2327: 0b000000000000000000000,
2328: 0b000000000000000000000,
2329: 0b000000000111000000000,
2330: 0b000000000001000000000,
2331: 0b000000000001000000000,
2332: 0b000000000001000000000,
2333: 0b000000000001000000000,
2334: 0b000000000001000000000,
2335: 0b000000000001000000000,
2336: 0b000000000001000000000,
2337: 0b000000000111000000000,
2338: 0b000000000000000000000,
2339: 0b000000000000000000000,
2340: },
2341: {
2342: 0b000000000000000000000,
2343: 0b000000000000000000000,
2344: 0b000000000010000000000,
2345: 0b000000000101000000000,
2346: 0b000000001000100000000,
2347: 0b000000010000010000000,
2348: 0b000000000000000000000,
2349: 0b000000000000000000000,
2350: 0b000000000000000000000,
2351: 0b000000000000000000000,
2352: 0b000000000000000000000,
2353: 0b000000000000000000000,
2354: 0b000000000000000000000,
2355: },
2356: {
2357: 0b000000000000000000000,
2358: 0b000000000000000000000,
2359: 0b000000000000000000000,
2360: 0b000000000000000000000,
2361: 0b000000000000000000000,
2362: 0b000000000000000000000,
2363: 0b000000000000000000000,
2364: 0b000000000000000000000,
2365: 0b000000000000000000000,
2366: 0b000000011111110000000,
2367: 0b000000000000000000000,
2368: 0b000000000000000000000,
2369: 0b000000000000000000000,
2370: },
2371: {
2372: 0b000000000000000000000,
2373: 0b000000000000000000000,
2374: 0b000000000100000000000,
2375: 0b000000000100000000000,
2376: 0b000000000010000000000,
2377: 0b000000000001000000000,
2378: 0b000000000000000000000,
2379: 0b000000000000000000000,
2380: 0b000000000000000000000,
2381: 0b000000000000000000000,
2382: 0b000000000000000000000,
2383: 0b000000000000000000000,
2384: 0b000000000000000000000,
2385: },
2386: {
2387: 0b000000000000000000000,
2388: 0b000000000000000000000,
2389: 0b000000000000000000000,
2390: 0b000000000000000000000,
2391: 0b000000000000000000000,
2392: 0b000000000111100000000,
2393: 0b000000001000100000000,
2394: 0b000000001000100000000,
2395: 0b000000001001100000000,
2396: 0b000000000110100000000,
2397: 0b000000000000000000000,
2398: 0b000000000000000000000,
2399: 0b000000000000000000000,
2400: },
2401: {
2402: 0b000000000000000000000,
2403: 0b000000000000000000000,
2404: 0b000000001000000000000,
2405: 0b000000001000000000000,
2406: 0b000000001000000000000,
2407: 0b000000001011000000000,
2408: 0b000000001100100000000,
2409: 0b000000001000100000000,
2410: 0b000000001000100000000,
2411: 0b000000001111000000000,
2412: 0b000000000000000000000,
2413: 0b000000000000000000000,
2414: 0b000000000000000000000,
2415: },
2416: {
2417: 0b000000000000000000000,
2418: 0b000000000000000000000,
2419: 0b000000000000000000000,
2420: 0b000000000000000000000,
2421: 0b000000000000000000000,
2422: 0b000000000111000000000,
2423: 0b000000001000000000000,
2424: 0b000000001000000000000,
2425: 0b000000001000100000000,
2426: 0b000000000111000000000,
2427: 0b000000000000000000000,
2428: 0b000000000000000000000,
2429: 0b000000000000000000000,
2430: },
2431: {
2432: 0b000000000000000000000,
2433: 0b000000000000000000000,
2434: 0b000000000000100000000,
2435: 0b000000000000100000000,
2436: 0b000000000000100000000,
2437: 0b000000000111100000000,
2438: 0b000000001000100000000,
2439: 0b000000001000100000000,
2440: 0b000000001001100000000,
2441: 0b000000000110100000000,
2442: 0b000000000000000000000,
2443: 0b000000000000000000000,
2444: 0b000000000000000000000,
2445: },
2446: {
2447: 0b000000000000000000000,
2448: 0b000000000000000000000,
2449: 0b000000000000000000000,
2450: 0b000000000000000000000,
2451: 0b000000000000000000000,
2452: 0b000000000111000000000,
2453: 0b000000001000100000000,
2454: 0b000000001111100000000,
2455: 0b000000001000000000000,
2456: 0b000000000111000000000,
2457: 0b000000000000000000000,
2458: 0b000000000000000000000,
2459: 0b000000000000000000000,
2460: },
2461: {
2462: 0b000000000000000000000,
2463: 0b000000000000000000000,
2464: 0b000000000001100000000,
2465: 0b000000000010000000000,
2466: 0b000000000010000000000,
2467: 0b000000001111100000000,
2468: 0b000000000010000000000,
2469: 0b000000000010000000000,
2470: 0b000000000010000000000,
2471: 0b000000000010000000000,
2472: 0b000000000000000000000,
2473: 0b000000000000000000000,
2474: 0b000000000000000000000,
2475: },
2476: {
2477: 0b000000000000000000000,
2478: 0b000000000000000000000,
2479: 0b000000000000000000000,
2480: 0b000000000000000000000,
2481: 0b000000000111100000000,
2482: 0b000000001000100000000,
2483: 0b000000001000100000000,
2484: 0b000000001000100000000,
2485: 0b000000000111100000000,
2486: 0b000000000000100000000,
2487: 0b000000000111000000000,
2488: 0b000000000000000000000,
2489: 0b000000000000000000000,
2490: },
2491: {
2492: 0b000000000000000000000,
2493: 0b000000000000000000000,
2494: 0b000000001000000000000,
2495: 0b000000001000000000000,
2496: 0b000000001000000000000,
2497: 0b000000001111000000000,
2498: 0b000000001000100000000,
2499: 0b000000001000100000000,
2500: 0b000000001000100000000,
2501: 0b000000001000100000000,
2502: 0b000000000000000000000,
2503: 0b000000000000000000000,
2504: 0b000000000000000000000,
2505: },
2506: {
2507: 0b000000000000000000000,
2508: 0b000000000000000000000,
2509: 0b000000000010000000000,
2510: 0b000000000000000000000,
2511: 0b000000000000000000000,
2512: 0b000000000010000000000,
2513: 0b000000000010000000000,
2514: 0b000000000010000000000,
2515: 0b000000000010000000000,
2516: 0b000000000010000000000,
2517: 0b000000000000000000000,
2518: 0b000000000000000000000,
2519: 0b000000000000000000000,
2520: },
2521: {
2522: 0b000000000000000000000,
2523: 0b000000000000000000000,
2524: 0b000000000000100000000,
2525: 0b000000000000000000000,
2526: 0b000000000000000000000,
2527: 0b000000000000100000000,
2528: 0b000000000000100000000,
2529: 0b000000000000100000000,
2530: 0b000000000000100000000,
2531: 0b000000001000100000000,
2532: 0b000000000111000000000,
2533: 0b000000000000000000000,
2534: 0b000000000000000000000,
2535: },
2536: {
2537: 0b000000000000000000000,
2538: 0b000000000000000000000,
2539: 0b000000001000000000000,
2540: 0b000000001000000000000,
2541: 0b000000001000000000000,
2542: 0b000000001001100000000,
2543: 0b000000001010000000000,
2544: 0b000000001110000000000,
2545: 0b000000001001000000000,
2546: 0b000000001000100000000,
2547: 0b000000000000000000000,
2548: 0b000000000000000000000,
2549: 0b000000000000000000000,
2550: },
2551: {
2552: 0b000000000000000000000,
2553: 0b000000000000000000000,
2554: 0b000000000010000000000,
2555: 0b000000000010000000000,
2556: 0b000000000010000000000,
2557: 0b000000000010000000000,
2558: 0b000000000010000000000,
2559: 0b000000000010000000000,
2560: 0b000000000010000000000,
2561: 0b000000000010000000000,
2562: 0b000000000000000000000,
2563: 0b000000000000000000000,
2564: 0b000000000000000000000,
2565: },
2566: {
2567: 0b000000000000000000000,
2568: 0b000000000000000000000,
2569: 0b000000000000000000000,
2570: 0b000000000000000000000,
2571: 0b000000000000000000000,
2572: 0b000000011101100000000,
2573: 0b000000010010010000000,
2574: 0b000000010010010000000,
2575: 0b000000010010010000000,
2576: 0b000000010010010000000,
2577: 0b000000000000000000000,
2578: 0b000000000000000000000,
2579: 0b000000000000000000000,
2580: },
2581: {
2582: 0b000000000000000000000,
2583: 0b000000000000000000000,
2584: 0b000000000000000000000,
2585: 0b000000000000000000000,
2586: 0b000000000000000000000,
2587: 0b000000001011000000000,
2588: 0b000000001100100000000,
2589: 0b000000001000100000000,
2590: 0b000000001000100000000,
2591: 0b000000001000100000000,
2592: 0b000000000000000000000,
2593: 0b000000000000000000000,
2594: 0b000000000000000000000,
2595: },
2596: {
2597: 0b000000000000000000000,
2598: 0b000000000000000000000,
2599: 0b000000000000000000000,
2600: 0b000000000000000000000,
2601: 0b000000000000000000000,
2602: 0b000000000111000000000,
2603: 0b000000001000100000000,
2604: 0b000000001000100000000,
2605: 0b000000001000100000000,
2606: 0b000000000111000000000,
2607: 0b000000000000000000000,
2608: 0b000000000000000000000,
2609: 0b000000000000000000000,
2610: },
2611: {
2612: 0b000000000000000000000,
2613: 0b000000000000000000000,
2614: 0b000000000000000000000,
2615: 0b000000000000000000000,
2616: 0b000000001011000000000,
2617: 0b000000001100100000000,
2618: 0b000000001000100000000,
2619: 0b000000001000100000000,
2620: 0b000000001111000000000,
2621: 0b000000001000000000000,
2622: 0b000000001000000000000,
2623: 0b000000000000000000000,
2624: 0b000000000000000000000,
2625: },
2626: {
2627: 0b000000000000000000000,
2628: 0b000000000000000000000,
2629: 0b000000000000000000000,
2630: 0b000000000000000000000,
2631: 0b000000000110100000000,
2632: 0b000000001001100000000,
2633: 0b000000001000100000000,
2634: 0b000000001000100000000,
2635: 0b000000000111100000000,
2636: 0b000000000000100000000,
2637: 0b000000000000100000000,
2638: 0b000000000000000000000,
2639: 0b000000000000000000000,
2640: },
2641: {
2642: 0b000000000000000000000,
2643: 0b000000000000000000000,
2644: 0b000000000000000000000,
2645: 0b000000000000000000000,
2646: 0b000000000000000000000,
2647: 0b000000001011000000000,
2648: 0b000000001100100000000,
2649: 0b000000001000000000000,
2650: 0b000000001000000000000,
2651: 0b000000001000000000000,
2652: 0b000000000000000000000,
2653: 0b000000000000000000000,
2654: 0b000000000000000000000,
2655: },
2656: {
2657: 0b000000000000000000000,
2658: 0b000000000000000000000,
2659: 0b000000000000000000000,
2660: 0b000000000000000000000,
2661: 0b000000000000000000000,
2662: 0b000000000111100000000,
2663: 0b000000001000000000000,
2664: 0b000000000111000000000,
2665: 0b000000000000100000000,
2666: 0b000000001111000000000,
2667: 0b000000000000000000000,
2668: 0b000000000000000000000,
2669: 0b000000000000000000000,
2670: },
2671: {
2672: 0b000000000000000000000,
2673: 0b000000000000000000000,
2674: 0b000000000010000000000,
2675: 0b000000000010000000000,
2676: 0b000000000010000000000,
2677: 0b000000001111100000000,
2678: 0b000000000010000000000,
2679: 0b000000000010000000000,
2680: 0b000000000010000000000,
2681: 0b000000000001100000000,
2682: 0b000000000000000000000,
2683: 0b000000000000000000000,
2684: 0b000000000000000000000,
2685: },
2686: {
2687: 0b000000000000000000000,
2688: 0b000000000000000000000,
2689: 0b000000000000000000000,
2690: 0b000000000000000000000,
2691: 0b000000000000000000000,
2692: 0b000000001000100000000,
2693: 0b000000001000100000000,
2694: 0b000000001000100000000,
2695: 0b000000001001100000000,
2696: 0b000000000110100000000,
2697: 0b000000000000000000000,
2698: 0b000000000000000000000,
2699: 0b000000000000000000000,
2700: },
2701: {
2702: 0b000000000000000000000,
2703: 0b000000000000000000000,
2704: 0b000000000000000000000,
2705: 0b000000000000000000000,
2706: 0b000000000000000000000,
2707: 0b000000001000100000000,
2708: 0b000000001000100000000,
2709: 0b000000000101000000000,
2710: 0b000000000101000000000,
2711: 0b000000000010000000000,
2712: 0b000000000000000000000,
2713: 0b000000000000000000000,
2714: 0b000000000000000000000,
2715: },
2716: {
2717: 0b000000000000000000000,
2718: 0b000000000000000000000,
2719: 0b000000000000000000000,
2720: 0b000000000000000000000,
2721: 0b000000000000000000000,
2722: 0b000000010010010000000,
2723: 0b000000010010010000000,
2724: 0b000000010010010000000,
2725: 0b000000010010010000000,
2726: 0b000000001101110000000,
2727: 0b000000000000000000000,
2728: 0b000000000000000000000,
2729: 0b000000000000000000000,
2730: },
2731: {
2732: 0b000000000000000000000,
2733: 0b000000000000000000000,
2734: 0b000000000000000000000,
2735: 0b000000000000000000000,
2736: 0b000000000000000000000,
2737: 0b000000001000100000000,
2738: 0b000000000101000000000,
2739: 0b000000000010000000000,
2740: 0b000000000101000000000,
2741: 0b000000001000100000000,
2742: 0b000000000000000000000,
2743: 0b000000000000000000000,
2744: 0b000000000000000000000,
2745: },
2746: {
2747: 0b000000000000000000000,
2748: 0b000000000000000000000,
2749: 0b000000000000000000000,
2750: 0b000000000000000000000,
2751: 0b000000001000100000000,
2752: 0b000000001000100000000,
2753: 0b000000001000100000000,
2754: 0b000000001000100000000,
2755: 0b000000000111100000000,
2756: 0b000000000000100000000,
2757: 0b000000000111000000000,
2758: 0b000000000000000000000,
2759: 0b000000000000000000000,
2760: },
2761: {
2762: 0b000000000000000000000,
2763: 0b000000000000000000000,
2764: 0b000000000000000000000,
2765: 0b000000000000000000000,
2766: 0b000000000000000000000,
2767: 0b000000001111100000000,
2768: 0b000000000001000000000,
2769: 0b000000000010000000000,
2770: 0b000000000100000000000,
2771: 0b000000001111100000000,
2772: 0b000000000000000000000,
2773: 0b000000000000000000000,
2774: 0b000000000000000000000,
2775: },
2776: {
2777: 0b000000000000000000000,
2778: 0b000000000000000000000,
2779: 0b000000000001000000000,
2780: 0b000000000010000000000,
2781: 0b000000000010000000000,
2782: 0b000000000010000000000,
2783: 0b000000000100000000000,
2784: 0b000000000010000000000,
2785: 0b000000000010000000000,
2786: 0b000000000010000000000,
2787: 0b000000000001000000000,
2788: 0b000000000000000000000,
2789: 0b000000000000000000000,
2790: },
2791: {
2792: 0b000000000000000000000,
2793: 0b000000000000000000000,
2794: 0b000000000010000000000,
2795: 0b000000000010000000000,
2796: 0b000000000010000000000,
2797: 0b000000000010000000000,
2798: 0b000000000010000000000,
2799: 0b000000000010000000000,
2800: 0b000000000010000000000,
2801: 0b000000000010000000000,
2802: 0b000000000010000000000,
2803: 0b000000000000000000000,
2804: 0b000000000000000000000,
2805: },
2806: {
2807: 0b000000000000000000000,
2808: 0b000000000000000000000,
2809: 0b000000000100000000000,
2810: 0b000000000010000000000,
2811: 0b000000000010000000000,
2812: 0b000000000010000000000,
2813: 0b000000000001000000000,
2814: 0b000000000010000000000,
2815: 0b000000000010000000000,
2816: 0b000000000010000000000,
2817: 0b000000000100000000000,
2818: 0b000000000000000000000,
2819: 0b000000000000000000000,
2820: },
2821: {
2822: 0b000000000000000000000,
2823: 0b000000000000000000000,
2824: 0b000000011111110000000,
2825: 0b000000000000000000000,
2826: 0b000000000000000000000,
2827: 0b000000000000000000000,
2828: 0b000000000000000000000,
2829: 0b000000000000000000000,
2830: 0b000000000000000000000,
2831: 0b000000000000000000000,
2832: 0b000000000000000000000,
2833: 0b000000000000000000000,
2834: 0b000000000000000000000,
2835: },
2836: {
2837: 0b000000000000000000000,
2838: 0b000000000000000000000,
2839: 0b000000100000011100000,
2840: 0b000001010000100010000,
2841: 0b000010001001000001000,
2842: 0b000100000100000001000,
2843: 0b000000000000000010000,
2844: 0b000000000000000100000,
2845: 0b000000000000001000000,
2846: 0b000000000000000000000,
2847: 0b000000000000001000000,
2848: 0b000000000000000000000,
2849: 0b000000000000000000000,
2850: },
2851: {
2852: 0b000000000000000000000,
2853: 0b000000000000000000000,
2854: 0b000000010000000000000,
2855: 0b000000001000000000000,
2856: 0b000000000100000000000,
2857: 0b000000000100000000000,
2858: 0b000000000010000000000,
2859: 0b000000000001000000000,
2860: 0b000000000001000000000,
2861: 0b000000000000100000000,
2862: 0b000000000000010000000,
2863: 0b000000000000000000000,
2864: 0b000000000000000000000,
2865: },
2866: {
2867: 0b000000000000000000000,
2868: 0b000000000000000000000,
2869: 0b000000001100000000000,
2870: 0b000000010010010000000,
2871: 0b000000000001100000000,
2872: 0b000000000000000000000,
2873: 0b000000000000000000000,
2874: 0b000000000000000000000,
2875: 0b000000000000000000000,
2876: 0b000000000000000000000,
2877: 0b000000000000000000000,
2878: 0b000000000000000000000,
2879: 0b000000000000000000000,
2880: },
2881: {
2882: 0b000000000000000000000,
2883: 0b000000000000000000000,
2884: 0b000000000010000000000,
2885: 0b000000000010000000000,
2886: 0b000000000010000000000,
2887: 0b000000000010000000000,
2888: 0b000000000000000000000,
2889: 0b000000000010000000000,
2890: 0b000000000010000000000,
2891: 0b000000000010000000000,
2892: 0b000000000010000000000,
2893: 0b000000000000000000000,
2894: 0b000000000000000000000,
2895: },
2896: {
2897: 0b000000000000000000000,
2898: 0b000000000000000000000,
2899: 0b000000100001000000000,
2900: 0b000001010000100000000,
2901: 0b000010001000010000000,
2902: 0b000100000100010000000,
2903: 0b000000000000001000000,
2904: 0b000000000000000100000,
2905: 0b000000000000000100000,
2906: 0b000000000000000010000,
2907: 0b000000000000000001000,
2908: 0b000000000000000000000,
2909: 0b000000000000000000000,
2910: },
2911: {
2912: 0b000000000000000000000,
2913: 0b000000000000000000000,
2914: 0b000000000000000000000,
2915: 0b011101010111011101100,
2916: 0b010001010010010001010,
2917: 0b010001110010010001010,
2918: 0b011101110010011101100,
2919: 0b010001110010010001010,
2920: 0b010001010010010001010,
2921: 0b011101010010011101010,
2922: 0b000000000000000000000,
2923: 0b000000000000000000000,
2924: 0b000000000000000000000,
2925: },
2926: null,
2927: {
2928: 0b000000000000000000000,
2929: 0b000000000000000000000,
2930: 0b000000000010000000000,
2931: 0b000000011111100000000,
2932: 0b000000000100000000000,
2933: 0b000000001110000000000,
2934: 0b000000010011100000000,
2935: 0b000000000101000000000,
2936: 0b000000001001000000000,
2937: 0b000000001000000000000,
2938: 0b000000000111100000000,
2939: 0b000000000000000000000,
2940: 0b000000000000000000000,
2941: },
2942: {
2943: 0b000000000000000000000,
2944: 0b000000000000000000000,
2945: 0b000000000000000000000,
2946: 0b000000000100000000000,
2947: 0b000000011111110000000,
2948: 0b000000000100000000000,
2949: 0b000000001111100000000,
2950: 0b000000010101010000000,
2951: 0b000000010010010000000,
2952: 0b000000001100100000000,
2953: 0b000000000000000000000,
2954: 0b000000000000000000000,
2955: 0b000000000000000000000,
2956: },
2957: {
2958: 0b000000000000000000000,
2959: 0b000000000000000000000,
2960: 0b000000000000000000000,
2961: 0b000000000000000000000,
2962: 0b000000010001000000000,
2963: 0b000000010000100000000,
2964: 0b000000010000100000000,
2965: 0b000000010000010000000,
2966: 0b000000010100010000000,
2967: 0b000000001000000000000,
2968: 0b000000000000000000000,
2969: 0b000000000000000000000,
2970: 0b000000000000000000000,
2971: },
2972: {
2973: 0b000000000000000000000,
2974: 0b000000000000000000000,
2975: 0b000000000000000000000,
2976: 0b000000001110000000000,
2977: 0b000000000000000000000,
2978: 0b000000001111000000000,
2979: 0b000000000000100000000,
2980: 0b000000000000100000000,
2981: 0b000000000001000000000,
2982: 0b000000000110000000000,
2983: 0b000000000000000000000,
2984: 0b000000000000000000000,
2985: 0b000000000000000000000,
2986: },
2987: {
2988: 0b000000000000000000000,
2989: 0b000000000000000000000,
2990: 0b000000000000000000000,
2991: 0b000000000111000000000,
2992: 0b000000000000000000000,
2993: 0b000000001111100000000,
2994: 0b000000000001000000000,
2995: 0b000000000010000000000,
2996: 0b000000000110000000000,
2997: 0b000000001001100000000,
2998: 0b000000000000000000000,
2999: 0b000000000000000000000,
3000: 0b000000000000000000000,
3001: },
3002: {
3003: 0b000000000000000000000,
3004: 0b000000000000000000000,
3005: 0b000000000000000000000,
3006: 0b000000000100000000000,
3007: 0b000000011110100000000,
3008: 0b000000000100100000000,
3009: 0b000000001111000000000,
3010: 0b000000010100100000000,
3011: 0b000000010100100000000,
3012: 0b000000001101000000000,
3013: 0b000000000000000000000,
3014: 0b000000000000000000000,
3015: 0b000000000000000000000,
3016: },
3017: {
3018: 0b000000000000000000000,
3019: 0b000000000000000000000,
3020: 0b000000000000000000000,
3021: 0b000000000000000000000,
3022: 0b000000001010000000000,
3023: 0b000000001111100000000,
3024: 0b000000011001010000000,
3025: 0b000000000101010000000,
3026: 0b000000000100000000000,
3027: 0b000000000010000000000,
3028: 0b000000000000000000000,
3029: 0b000000000000000000000,
3030: 0b000000000000000000000,
3031: },
3032: {
3033: 0b000000000000000000000,
3034: 0b000000000000000000000,
3035: 0b000000000000000000000,
3036: 0b000000000000000000000,
3037: 0b000000010010000000000,
3038: 0b000000010111000000000,
3039: 0b000000011010100000000,
3040: 0b000000010010100000000,
3041: 0b000000010100100000000,
3042: 0b000000000101000000000,
3043: 0b000000000000000000000,
3044: 0b000000000000000000000,
3045: 0b000000000000000000000,
3046: },
3047: {
3048: 0b000000000000000000000,
3049: 0b000000000000000000000,
3050: 0b000000000000000000000,
3051: 0b000000000010000000000,
3052: 0b000000000010000000000,
3053: 0b000000000011100000000,
3054: 0b000000000010000000000,
3055: 0b000000000111000000000,
3056: 0b000000001010100000000,
3057: 0b000000000100000000000,
3058: 0b000000000000000000000,
3059: 0b000000000000000000000,
3060: 0b000000000000000000000,
3061: },
3062: {
3063: 0b000000000000000000000,
3064: 0b000000000000000000000,
3065: 0b000000000000000000000,
3066: 0b000000000000000000000,
3067: 0b000000000000000000000,
3068: 0b000000011111000000000,
3069: 0b000000000000100000000,
3070: 0b000000000000100000000,
3071: 0b000000000001000000000,
3072: 0b000000000110000000000,
3073: 0b000000000000000000000,
3074: 0b000000000000000000000,
3075: 0b000000000000000000000,
3076: },
3077: null,
3078: {
3079: 0b000000000000000000000,
3080: 0b000000000000000000000,
3081: 0b000000000100000000000,
3082: 0b000000011111110000000,
3083: 0b000000000100000000000,
3084: 0b000000001111100000000,
3085: 0b000000010101010000000,
3086: 0b000000100101001000000,
3087: 0b000000100101001000000,
3088: 0b000000100010001000000,
3089: 0b000000011100010000000,
3090: 0b000000000000000000000,
3091: 0b000000000000000000000,
3092: },
3093: {
3094: 0b000000000000000000000,
3095: 0b000000000000000000000,
3096: 0b000000100000100000000,
3097: 0b000000100000010000000,
3098: 0b000000100000010000000,
3099: 0b000000100000010000000,
3100: 0b000000100000001000000,
3101: 0b000000100000001000000,
3102: 0b000000101000001000000,
3103: 0b000000010000000000000,
3104: 0b000000000000000000000,
3105: 0b000000000000000000000,
3106: 0b000000000000000000000,
3107: },
3108: {
3109: 0b000000000000000000000,
3110: 0b000000000000000000000,
3111: 0b000000001111000000000,
3112: 0b000000000000000000000,
3113: 0b000000001111000000000,
3114: 0b000000110000100000000,
3115: 0b000000000000010000000,
3116: 0b000000000000010000000,
3117: 0b000000000000100000000,
3118: 0b000000000001000000000,
3119: 0b000000000110000000000,
3120: 0b000000000000000000000,
3121: 0b000000000000000000000,
3122: },
3123: {
3124: 0b000000000000000000000,
3125: 0b000000000000000000000,
3126: 0b000000000111000000000,
3127: 0b000000000000000000000,
3128: 0b000000011111110000000,
3129: 0b000000000000100000000,
3130: 0b000000000001000000000,
3131: 0b000000000010000000000,
3132: 0b000000000101000000000,
3133: 0b000000001001000000000,
3134: 0b000000010000110000000,
3135: 0b000000000000000000000,
3136: 0b000000000000000000000,
3137: },
3138: {
3139: 0b000000000000000000000,
3140: 0b000000000000000000000,
3141: 0b000000001000000000000,
3142: 0b000000111110100000000,
3143: 0b000000001000010000000,
3144: 0b000000001111001000000,
3145: 0b000000011000100000000,
3146: 0b000000101000010000000,
3147: 0b000001001000010000000,
3148: 0b000000101000100000000,
3149: 0b000000011001000000000,
3150: 0b000000000000000000000,
3151: 0b000000000000000000000,
3152: },
3153: {
3154: 0b000000000000000000000,
3155: 0b000000000000000000000,
3156: 0b000000000100100000000,
3157: 0b000000000100010000000,
3158: 0b000000111110010000000,
3159: 0b000000001001001000000,
3160: 0b000000001001001000000,
3161: 0b000000010001000000000,
3162: 0b000000010001000000000,
3163: 0b000000100001000000000,
3164: 0b000000100110000000000,
3165: 0b000000000000000000000,
3166: 0b000000000000000000000,
3167: },
3168: {
3169: 0b000000000000000000000,
3170: 0b000000000000000000000,
3171: 0b000000000100000000000,
3172: 0b000000011111110000000,
3173: 0b000000000010000000000,
3174: 0b000000011111110000000,
3175: 0b000000000001000000000,
3176: 0b000000001111100000000,
3177: 0b000000010000010000000,
3178: 0b000000010000000000000,
3179: 0b000000001111110000000,
3180: 0b000000000000000000000,
3181: 0b000000000000000000000,
3182: },
3183: {
3184: 0b000000000000000000000,
3185: 0b000000000000000000000,
3186: 0b000000000000100000000,
3187: 0b000000000001000000000,
3188: 0b000000000010000000000,
3189: 0b000000000100000000000,
3190: 0b000000001000000000000,
3191: 0b000000000100000000000,
3192: 0b000000000010000000000,
3193: 0b000000000001000000000,
3194: 0b000000000000100000000,
3195: 0b000000000000000000000,
3196: 0b000000000000000000000,
3197: },
3198: {
3199: 0b000000000000000000000,
3200: 0b000000000000000000000,
3201: 0b000000100001000000000,
3202: 0b000000100001000000000,
3203: 0b000000101111110000000,
3204: 0b000000100001000000000,
3205: 0b000000100001000000000,
3206: 0b000000100001000000000,
3207: 0b000000100001000000000,
3208: 0b000000100010000000000,
3209: 0b000000100100000000000,
3210: 0b000000000000000000000,
3211: 0b000000000000000000000,
3212: },
3213: {
3214: 0b000000000000000000000,
3215: 0b000000000000000000000,
3216: 0b000000001111100000000,
3217: 0b000000000000010000000,
3218: 0b000000000000100000000,
3219: 0b000000000001000000000,
3220: 0b000000000000000000000,
3221: 0b000000001000000000000,
3222: 0b000000010000000000000,
3223: 0b000000001111110000000,
3224: 0b000000000000000000000,
3225: 0b000000000000000000000,
3226: 0b000000000000000000000,
3227: },
3228: {
3229: 0b000000000000000000000,
3230: 0b000000000000000000000,
3231: 0b000000001000000000000,
3232: 0b000000000100100000000,
3233: 0b000000011111000000000,
3234: 0b000000000010000000000,
3235: 0b000000000001000000000,
3236: 0b000000001111100000000,
3237: 0b000000010000000000000,
3238: 0b000000010000000000000,
3239: 0b000000001111110000000,
3240: 0b000000000000000000000,
3241: 0b000000000000000000000,
3242: },
3243: {
3244: 0b000000000000000000000,
3245: 0b000000000000000000000,
3246: 0b000000010000000000000,
3247: 0b000000010000000000000,
3248: 0b000000010000000000000,
3249: 0b000000010000000000000,
3250: 0b000000010000000000000,
3251: 0b000000010000010000000,
3252: 0b000000010000010000000,
3253: 0b000000001000100000000,
3254: 0b000000000111000000000,
3255: 0b000000000000000000000,
3256: 0b000000000000000000000,
3257: },
3258: {
3259: 0b000000000000000000000,
3260: 0b000000000000000000000,
3261: 0b000000000001000000000,
3262: 0b000000111111110000000,
3263: 0b000000000001000000000,
3264: 0b000000001101000000000,
3265: 0b000000010011000000000,
3266: 0b000000010011000000000,
3267: 0b000000001101000000000,
3268: 0b000000000001000000000,
3269: 0b000000000110000000000,
3270: 0b000000000000000000000,
3271: 0b000000000000000000000,
3272: },
3273: {
3274: 0b000000000000000000000,
3275: 0b000000000000000000000,
3276: 0b000000001000100000000,
3277: 0b000000001000100000000,
3278: 0b000000111111111000000,
3279: 0b000000001000100000000,
3280: 0b000000001001100000000,
3281: 0b000000001000000000000,
3282: 0b000000001000000000000,
3283: 0b000000001000000000000,
3284: 0b000000000111110000000,
3285: 0b000000000000000000000,
3286: 0b000000000000000000000,
3287: },
3288: {
3289: 0b000000000000000000000,
3290: 0b000000000000000000000,
3291: 0b000000001111100000000,
3292: 0b000000000001000000000,
3293: 0b000000000010000000000,
3294: 0b000000001100000000000,
3295: 0b000000111111111000000,
3296: 0b000000000110000000000,
3297: 0b000000001000000000000,
3298: 0b000000001000000000000,
3299: 0b000000000111110000000,
3300: 0b000000000000000000000,
3301: 0b000000000000000000000,
3302: },
3303: {
3304: 0b000000000000000000000,
3305: 0b000000000000000000000,
3306: 0b000000010101010000000,
3307: 0b000000000000000000000,
3308: 0b000000010101010000000,
3309: 0b000000000000000000000,
3310: 0b000000010101010000000,
3311: 0b000000000000000000000,
3312: 0b000000010101010000000,
3313: 0b000000000000000000000,
3314: 0b000000010101010000000,
3315: 0b000000000000000000000,
3316: 0b000000000000000000000,
3317: },
3318: {
3319: 0b000000000000000000000,
3320: 0b000000000000000000000,
3321: 0b000000000000000000000,
3322: 0b000000000000000000000,
3323: 0b000000000000000000000,
3324: 0b000000000000000000000,
3325: 0b000000000000000000000,
3326: 0b000000000110000000000,
3327: 0b000000001001000000000,
3328: 0b000000001001000000000,
3329: 0b000000000110000000000,
3330: 0b000000000000000000000,
3331: 0b000000000000000000000,
3332: },
3333: {
3334: 0b000000000000000000000,
3335: 0b000000000000000000000,
3336: 0b000000001111100000000,
3337: 0b000000001000000000000,
3338: 0b000000001000000000000,
3339: 0b000000001000000000000,
3340: 0b000000001000000000000,
3341: 0b000000001000000000000,
3342: 0b000000000000000000000,
3343: 0b000000000000000000000,
3344: 0b000000000000000000000,
3345: 0b000000000000000000000,
3346: 0b000000000000000000000,
3347: },
3348: {
3349: 0b000000000000000000000,
3350: 0b000000000000000000000,
3351: 0b000000000000000000000,
3352: 0b000000000000000000000,
3353: 0b000000000000000000000,
3354: 0b000000000000100000000,
3355: 0b000000000000100000000,
3356: 0b000000000000100000000,
3357: 0b000000000000100000000,
3358: 0b000000000000100000000,
3359: 0b000000001111100000000,
3360: 0b000000000000000000000,
3361: 0b000000000000000000000,
3362: },
3363: {
3364: 0b000000000000000000000,
3365: 0b000000000000000000000,
3366: 0b000000000000000000000,
3367: 0b000000000000000000000,
3368: 0b000000000000000000000,
3369: 0b000000000000000000000,
3370: 0b000000000000000000000,
3371: 0b000000000000000000000,
3372: 0b000000000100000000000,
3373: 0b000000000010000000000,
3374: 0b000000000001000000000,
3375: 0b000000000000000000000,
3376: 0b000000000000000000000,
3377: },
3378: {
3379: 0b000000000000000000000,
3380: 0b000000000000000000000,
3381: 0b000000000000000000000,
3382: 0b000000000000000000000,
3383: 0b000000000000000000000,
3384: 0b000000000110000000000,
3385: 0b000000000110000000000,
3386: 0b000000000000000000000,
3387: 0b000000000000000000000,
3388: 0b000000000000000000000,
3389: 0b000000000000000000000,
3390: 0b000000000000000000000,
3391: 0b000000000000000000000,
3392: },
3393: {
3394: 0b000000000000000000000,
3395: 0b000000000000000000000,
3396: 0b000000011111110000000,
3397: 0b000000000000010000000,
3398: 0b000000000000010000000,
3399: 0b000000011111110000000,
3400: 0b000000000000010000000,
3401: 0b000000000000010000000,
3402: 0b000000000000100000000,
3403: 0b000000000001000000000,
3404: 0b000000000110000000000,
3405: 0b000000000000000000000,
3406: 0b000000000000000000000,
3407: },
3408: {
3409: 0b000000000000000000000,
3410: 0b000000000000000000000,
3411: 0b000000000000000000000,
3412: 0b000000000000000000000,
3413: 0b000000001111100000000,
3414: 0b000000000000100000000,
3415: 0b000000000101000000000,
3416: 0b000000000110000000000,
3417: 0b000000000100000000000,
3418: 0b000000001000000000000,
3419: 0b000000000000000000000,
3420: 0b000000000000000000000,
3421: 0b000000000000000000000,
3422: },
3423: {
3424: 0b000000000000000000000,
3425: 0b000000000000000000000,
3426: 0b000000000000000000000,
3427: 0b000000000000000000000,
3428: 0b000000000000100000000,
3429: 0b000000000001000000000,
3430: 0b000000000011000000000,
3431: 0b000000000101000000000,
3432: 0b000000001001000000000,
3433: 0b000000000001000000000,
3434: 0b000000000000000000000,
3435: 0b000000000000000000000,
3436: 0b000000000000000000000,
3437: },
3438: {
3439: 0b000000000000000000000,
3440: 0b000000000000000000000,
3441: 0b000000000000000000000,
3442: 0b000000000000000000000,
3443: 0b000000000010000000000,
3444: 0b000000001111100000000,
3445: 0b000000001000100000000,
3446: 0b000000000000100000000,
3447: 0b000000000001000000000,
3448: 0b000000000010000000000,
3449: 0b000000000000000000000,
3450: 0b000000000000000000000,
3451: 0b000000000000000000000,
3452: },
3453: {
3454: 0b000000000000000000000,
3455: 0b000000000000000000000,
3456: 0b000000000000000000000,
3457: 0b000000000000000000000,
3458: 0b000000001111100000000,
3459: 0b000000000010000000000,
3460: 0b000000000010000000000,
3461: 0b000000000010000000000,
3462: 0b000000000010000000000,
3463: 0b000000001111100000000,
3464: 0b000000000000000000000,
3465: 0b000000000000000000000,
3466: 0b000000000000000000000,
3467: },
3468: {
3469: 0b000000000000000000000,
3470: 0b000000000000000000000,
3471: 0b000000000000000000000,
3472: 0b000000000000000000000,
3473: 0b000000000001000000000,
3474: 0b000000001111100000000,
3475: 0b000000000001000000000,
3476: 0b000000000011000000000,
3477: 0b000000000101000000000,
3478: 0b000000001001000000000,
3479: 0b000000000000000000000,
3480: 0b000000000000000000000,
3481: 0b000000000000000000000,
3482: },
3483: {
3484: 0b000000000000000000000,
3485: 0b000000000000000000000,
3486: 0b000000000000000000000,
3487: 0b000000000000000000000,
3488: 0b000000000100000000000,
3489: 0b000000001111100000000,
3490: 0b000000000100100000000,
3491: 0b000000000010000000000,
3492: 0b000000000010000000000,
3493: 0b000000000001000000000,
3494: 0b000000000000000000000,
3495: 0b000000000000000000000,
3496: 0b000000000000000000000,
3497: },
3498: {
3499: 0b000000000000000000000,
3500: 0b000000000000000000000,
3501: 0b000000000000000000000,
3502: 0b000000000000000000000,
3503: 0b000000000111000000000,
3504: 0b000000000001000000000,
3505: 0b000000000001000000000,
3506: 0b000000000010000000000,
3507: 0b000000000010000000000,
3508: 0b000000001111100000000,
3509: 0b000000000000000000000,
3510: 0b000000000000000000000,
3511: 0b000000000000000000000,
3512: },
3513: {
3514: 0b000000000000000000000,
3515: 0b000000000000000000000,
3516: 0b000000000000000000000,
3517: 0b000000000000000000000,
3518: 0b000000001111100000000,
3519: 0b000000000000100000000,
3520: 0b000000001111100000000,
3521: 0b000000000000100000000,
3522: 0b000000001111100000000,
3523: 0b000000000000100000000,
3524: 0b000000000000000000000,
3525: 0b000000000000000000000,
3526: 0b000000000000000000000,
3527: },
3528: {
3529: 0b000000000000000000000,
3530: 0b000000000000000000000,
3531: 0b000000000000000000000,
3532: 0b000000000000000000000,
3533: 0b000000001010100000000,
3534: 0b000000001010100000000,
3535: 0b000000000000100000000,
3536: 0b000000000001000000000,
3537: 0b000000000010000000000,
3538: 0b000000000100000000000,
3539: 0b000000000000000000000,
3540: 0b000000000000000000000,
3541: 0b000000000000000000000,
3542: },
3543: {
3544: 0b000000000000000000000,
3545: 0b000000000000000000000,
3546: 0b000000000000000000000,
3547: 0b000000000000000000000,
3548: 0b000000000000000000000,
3549: 0b000000010000000000000,
3550: 0b000000001111110000000,
3551: 0b000000000000000000000,
3552: 0b000000000000000000000,
3553: 0b000000000000000000000,
3554: 0b000000000000000000000,
3555: 0b000000000000000000000,
3556: 0b000000000000000000000,
3557: },
3558: {
3559: 0b000000000000000000000,
3560: 0b000000000000000000000,
3561: 0b000000011111110000000,
3562: 0b000000000000010000000,
3563: 0b000000000000010000000,
3564: 0b000000000100100000000,
3565: 0b000000000111000000000,
3566: 0b000000000100000000000,
3567: 0b000000000100000000000,
3568: 0b000000001000000000000,
3569: 0b000000010000000000000,
3570: 0b000000000000000000000,
3571: 0b000000000000000000000,
3572: },
3573: {
3574: 0b000000000000000000000,
3575: 0b000000000000000000000,
3576: 0b000000000000010000000,
3577: 0b000000000000010000000,
3578: 0b000000000000100000000,
3579: 0b000000000001000000000,
3580: 0b000000000011000000000,
3581: 0b000000000101000000000,
3582: 0b000000001001000000000,
3583: 0b000000010001000000000,
3584: 0b000000000001000000000,
3585: 0b000000000000000000000,
3586: 0b000000000000000000000,
3587: },
3588: {
3589: 0b000000000000000000000,
3590: 0b000000000000000000000,
3591: 0b000000000010000000000,
3592: 0b000000000010000000000,
3593: 0b000000011111110000000,
3594: 0b000000010000010000000,
3595: 0b000000010000010000000,
3596: 0b000000000000010000000,
3597: 0b000000000000100000000,
3598: 0b000000000001000000000,
3599: 0b000000000110000000000,
3600: 0b000000000000000000000,
3601: 0b000000000000000000000,
3602: },
3603: {
3604: 0b000000000000000000000,
3605: 0b000000000000000000000,
3606: 0b000000001111100000000,
3607: 0b000000000010000000000,
3608: 0b000000000010000000000,
3609: 0b000000000010000000000,
3610: 0b000000000010000000000,
3611: 0b000000000010000000000,
3612: 0b000000000010000000000,
3613: 0b000000011111110000000,
3614: 0b000000000000000000000,
3615: 0b000000000000000000000,
3616: 0b000000000000000000000,
3617: },
3618: {
3619: 0b000000000000000000000,
3620: 0b000000000000000000000,
3621: 0b000000000001000000000,
3622: 0b000000000001000000000,
3623: 0b000000011111110000000,
3624: 0b000000000001000000000,
3625: 0b000000000011000000000,
3626: 0b000000000101000000000,
3627: 0b000000001001000000000,
3628: 0b000000010001000000000,
3629: 0b000000000001000000000,
3630: 0b000000000000000000000,
3631: 0b000000000000000000000,
3632: },
3633: {
3634: 0b000000000000000000000,
3635: 0b000000000000000000000,
3636: 0b000000000010000000000,
3637: 0b000000000010000000000,
3638: 0b000000011111110000000,
3639: 0b000000000010010000000,
3640: 0b000000000100010000000,
3641: 0b000000000100010000000,
3642: 0b000000001000010000000,
3643: 0b000000001000010000000,
3644: 0b000000010001100000000,
3645: 0b000000000000000000000,
3646: 0b000000000000000000000,
3647: },
3648: {
3649: 0b000000000000000000000,
3650: 0b000000000000000000000,
3651: 0b000000000100100000000,
3652: 0b000000000101000000000,
3653: 0b000000011110010000000,
3654: 0b000000000010100000000,
3655: 0b000000000011000000000,
3656: 0b000000011101000000000,
3657: 0b000000000001000000000,
3658: 0b000000000000100000000,
3659: 0b000000000000100000000,
3660: 0b000000000000000000000,
3661: 0b000000000000000000000,
3662: },
3663: {
3664: 0b000000000000000000000,
3665: 0b000000000000000000000,
3666: 0b000000000010000000000,
3667: 0b000000000011110000000,
3668: 0b000000000100010000000,
3669: 0b000000000100010000000,
3670: 0b000000001000100000000,
3671: 0b000000010000100000000,
3672: 0b000000000001000000000,
3673: 0b000000000010000000000,
3674: 0b000000000100000000000,
3675: 0b000000000000000000000,
3676: 0b000000000000000000000,
3677: },
3678: {
3679: 0b000000000000000000000,
3680: 0b000000000000000000000,
3681: 0b000000000100000000000,
3682: 0b000000000100000000000,
3683: 0b000000000111110000000,
3684: 0b000000001001000000000,
3685: 0b000000010001000000000,
3686: 0b000000000001000000000,
3687: 0b000000000010000000000,
3688: 0b000000000010000000000,
3689: 0b000000000100000000000,
3690: 0b000000000000000000000,
3691: 0b000000000000000000000,
3692: },
3693: {
3694: 0b000000000000000000000,
3695: 0b000000000000000000000,
3696: 0b000000011111110000000,
3697: 0b000000000000010000000,
3698: 0b000000000000010000000,
3699: 0b000000000000010000000,
3700: 0b000000000000010000000,
3701: 0b000000000000010000000,
3702: 0b000000000000010000000,
3703: 0b000000011111110000000,
3704: 0b000000000000010000000,
3705: 0b000000000000000000000,
3706: 0b000000000000000000000,
3707: },
3708: {
3709: 0b000000000000000000000,
3710: 0b000000000000000000000,
3711: 0b000000001000100000000,
3712: 0b000000001000100000000,
3713: 0b000000011111110000000,
3714: 0b000000001000100000000,
3715: 0b000000001000100000000,
3716: 0b000000000000100000000,
3717: 0b000000000000100000000,
3718: 0b000000000001000000000,
3719: 0b000000000110000000000,
3720: 0b000000000000000000000,
3721: 0b000000000000000000000,
3722: },
3723: {
3724: 0b000000000000000000000,
3725: 0b000000000000000000000,
3726: 0b000000011000000000000,
3727: 0b000000000100000000000,
3728: 0b000000000000000000000,
3729: 0b000000011000010000000,
3730: 0b000000000100010000000,
3731: 0b000000000000100000000,
3732: 0b000000000001000000000,
3733: 0b000000000010000000000,
3734: 0b000000011100000000000,
3735: 0b000000000000000000000,
3736: 0b000000000000000000000,
3737: },
3738: {
3739: 0b000000000000000000000,
3740: 0b000000000000000000000,
3741: 0b000000011111110000000,
3742: 0b000000000000010000000,
3743: 0b000000000000010000000,
3744: 0b000000000000100000000,
3745: 0b000000000001000000000,
3746: 0b000000000010000000000,
3747: 0b000000000101000000000,
3748: 0b000000001000100000000,
3749: 0b000000010000010000000,
3750: 0b000000000000000000000,
3751: 0b000000000000000000000,
3752: },
3753: {
3754: 0b000000000000000000000,
3755: 0b000000000000000000000,
3756: 0b000000001000000000000,
3757: 0b000000001000000000000,
3758: 0b000000001011110000000,
3759: 0b000000011100010000000,
3760: 0b000000001000100000000,
3761: 0b000000001000000000000,
3762: 0b000000001000000000000,
3763: 0b000000001000000000000,
3764: 0b000000000111110000000,
3765: 0b000000000000000000000,
3766: 0b000000000000000000000,
3767: },
3768: {
3769: 0b000000000000000000000,
3770: 0b000000000000000000000,
3771: 0b000000000000010000000,
3772: 0b000000010000010000000,
3773: 0b000000001000010000000,
3774: 0b000000000100010000000,
3775: 0b000000000000100000000,
3776: 0b000000000000100000000,
3777: 0b000000000001000000000,
3778: 0b000000000010000000000,
3779: 0b000000000100000000000,
3780: 0b000000000000000000000,
3781: 0b000000000000000000000,
3782: },
3783: {
3784: 0b000000000000000000000,
3785: 0b000000000000000000000,
3786: 0b000000000010000000000,
3787: 0b000000000011110000000,
3788: 0b000000000100010000000,
3789: 0b000000000110010000000,
3790: 0b000000001001100000000,
3791: 0b000000010000100000000,
3792: 0b000000000001010000000,
3793: 0b000000000010000000000,
3794: 0b000000000100000000000,
3795: 0b000000000000000000000,
3796: 0b000000000000000000000,
3797: },
3798: {
3799: 0b000000000000000000000,
3800: 0b000000000000000000000,
3801: 0b000000000000100000000,
3802: 0b000000000011000000000,
3803: 0b000000001110000000000,
3804: 0b000000000001000000000,
3805: 0b000000011111110000000,
3806: 0b000000000001000000000,
3807: 0b000000000001000000000,
3808: 0b000000000010000000000,
3809: 0b000000000100000000000,
3810: 0b000000000000000000000,
3811: 0b000000000000000000000,
3812: },
3813: {
3814: 0b000000000000000000000,
3815: 0b000000000000000000000,
3816: 0b000000000100010000000,
3817: 0b000000000010010000000,
3818: 0b000000010010010000000,
3819: 0b000000001000010000000,
3820: 0b000000001000100000000,
3821: 0b000000000000100000000,
3822: 0b000000000001000000000,
3823: 0b000000000010000000000,
3824: 0b000000000100000000000,
3825: 0b000000000000000000000,
3826: 0b000000000000000000000,
3827: },
3828: {
3829: 0b000000000000000000000,
3830: 0b000000000000000000000,
3831: 0b000000001111100000000,
3832: 0b000000000000000000000,
3833: 0b000000000000000000000,
3834: 0b000000011111110000000,
3835: 0b000000000010000000000,
3836: 0b000000000010000000000,
3837: 0b000000000010000000000,
3838: 0b000000000100000000000,
3839: 0b000000001000000000000,
3840: 0b000000000000000000000,
3841: 0b000000000000000000000,
3842: },
3843: {
3844: 0b000000000000000000000,
3845: 0b000000000000000000000,
3846: 0b000000001000000000000,
3847: 0b000000001000000000000,
3848: 0b000000001000000000000,
3849: 0b000000001000000000000,
3850: 0b000000001110000000000,
3851: 0b000000001001000000000,
3852: 0b000000001000100000000,
3853: 0b000000001000000000000,
3854: 0b000000001000000000000,
3855: 0b000000000000000000000,
3856: 0b000000000000000000000,
3857: },
3858: {
3859: 0b000000000000000000000,
3860: 0b000000000000000000000,
3861: 0b000000000010000000000,
3862: 0b000000000010000000000,
3863: 0b000000011111110000000,
3864: 0b000000000010000000000,
3865: 0b000000000010000000000,
3866: 0b000000000010000000000,
3867: 0b000000000010000000000,
3868: 0b000000000100000000000,
3869: 0b000000001000000000000,
3870: 0b000000000000000000000,
3871: 0b000000000000000000000,
3872: },
3873: {
3874: 0b000000000000000000000,
3875: 0b000000000000000000000,
3876: 0b000000001111100000000,
3877: 0b000000000000000000000,
3878: 0b000000000000000000000,
3879: 0b000000000000000000000,
3880: 0b000000000000000000000,
3881: 0b000000000000000000000,
3882: 0b000000000000000000000,
3883: 0b000000011111110000000,
3884: 0b000000000000000000000,
3885: 0b000000000000000000000,
3886: 0b000000000000000000000,
3887: },
3888: {
3889: 0b000000000000000000000,
3890: 0b000000000000000000000,
3891: 0b000000011111110000000,
3892: 0b000000000000010000000,
3893: 0b000000000000010000000,
3894: 0b000000001000100000000,
3895: 0b000000000101000000000,
3896: 0b000000000010000000000,
3897: 0b000000000101000000000,
3898: 0b000000001000100000000,
3899: 0b000000010000000000000,
3900: 0b000000000000000000000,
3901: 0b000000000000000000000,
3902: },
3903: {
3904: 0b000000000000000000000,
3905: 0b000000000000000000000,
3906: 0b000000000010000000000,
3907: 0b000000011111110000000,
3908: 0b000000000000010000000,
3909: 0b000000000000100000000,
3910: 0b000000000001000000000,
3911: 0b000000000010000000000,
3912: 0b000000000110100000000,
3913: 0b000000011010010000000,
3914: 0b000000000010000000000,
3915: 0b000000000000000000000,
3916: 0b000000000000000000000,
3917: },
3918: {
3919: 0b000000000000000000000,
3920: 0b000000000000000000000,
3921: 0b000000000000010000000,
3922: 0b000000000000010000000,
3923: 0b000000000000010000000,
3924: 0b000000000000100000000,
3925: 0b000000000000100000000,
3926: 0b000000000001000000000,
3927: 0b000000000010000000000,
3928: 0b000000000100000000000,
3929: 0b000000011000000000000,
3930: 0b000000000000000000000,
3931: 0b000000000000000000000,
3932: },
3933: {
3934: 0b000000000000000000000,
3935: 0b000000000000000000000,
3936: 0b000000000010000000000,
3937: 0b000000000001000000000,
3938: 0b000000001001000000000,
3939: 0b000000001000100000000,
3940: 0b000000001000100000000,
3941: 0b000000001000100000000,
3942: 0b000000010000010000000,
3943: 0b000000010000010000000,
3944: 0b000000010000010000000,
3945: 0b000000000000000000000,
3946: 0b000000000000000000000,
3947: },
3948: {
3949: 0b000000000000000000000,
3950: 0b000000000000000000000,
3951: 0b000000010000000000000,
3952: 0b000000010000000000000,
3953: 0b000000010000110000000,
3954: 0b000000011111000000000,
3955: 0b000000010000000000000,
3956: 0b000000010000000000000,
3957: 0b000000010000000000000,
3958: 0b000000010000000000000,
3959: 0b000000001111110000000,
3960: 0b000000000000000000000,
3961: 0b000000000000000000000,
3962: },
3963: {
3964: 0b000000000000000000000,
3965: 0b000000000000000000000,
3966: 0b000000011111110000000,
3967: 0b000000000000010000000,
3968: 0b000000000000010000000,
3969: 0b000000000000010000000,
3970: 0b000000000000010000000,
3971: 0b000000000000010000000,
3972: 0b000000000000100000000,
3973: 0b000000000001000000000,
3974: 0b000000000110000000000,
3975: 0b000000000000000000000,
3976: 0b000000000000000000000,
3977: },
3978: {
3979: 0b000000000000000000000,
3980: 0b000000000000000000000,
3981: 0b000000000100000000000,
3982: 0b000000001010000000000,
3983: 0b000000001001000000000,
3984: 0b000000010001000000000,
3985: 0b000000010000100000000,
3986: 0b000000000000100000000,
3987: 0b000000000000010000000,
3988: 0b000000000000010000000,
3989: 0b000000000000010000000,
3990: 0b000000000000000000000,
3991: 0b000000000000000000000,
3992: },
3993: {
3994: 0b000000000000000000000,
3995: 0b000000000000000000000,
3996: 0b000000000010000000000,
3997: 0b000000000010000000000,
3998: 0b000000011111110000000,
3999: 0b000000000010000000000,
4000: 0b000000000010000000000,
4001: 0b000000001010100000000,
4002: 0b000000010010010000000,
4003: 0b000000010010010000000,
4004: 0b000000000010000000000,
4005: 0b000000000000000000000,
4006: 0b000000000000000000000,
4007: },
4008: {
4009: 0b000000000000000000000,
4010: 0b000000000000000000000,
4011: 0b000000011111110000000,
4012: 0b000000000000010000000,
4013: 0b000000000000010000000,
4014: 0b000000000000100000000,
4015: 0b000000010001000000000,
4016: 0b000000001010000000000,
4017: 0b000000000100000000000,
4018: 0b000000000010000000000,
4019: 0b000000000001000000000,
4020: 0b000000000000000000000,
4021: 0b000000000000000000000,
4022: },
4023: {
4024: 0b000000000000000000000,
4025: 0b000000000000000000000,
4026: 0b000000001110000000000,
4027: 0b000000000001100000000,
4028: 0b000000000000010000000,
4029: 0b000000001110000000000,
4030: 0b000000000001100000000,
4031: 0b000000000000010000000,
4032: 0b000000011110000000000,
4033: 0b000000000001100000000,
4034: 0b000000000000010000000,
4035: 0b000000000000000000000,
4036: 0b000000000000000000000,
4037: },
4038: {
4039: 0b000000000000000000000,
4040: 0b000000000000000000000,
4041: 0b000000000010000000000,
4042: 0b000000000010000000000,
4043: 0b000000000010000000000,
4044: 0b000000000100000000000,
4045: 0b000000000100000000000,
4046: 0b000000001000100000000,
4047: 0b000000001000100000000,
4048: 0b000000010011010000000,
4049: 0b000000011100010000000,
4050: 0b000000000000000000000,
4051: 0b000000000000000000000,
4052: },
4053: {
4054: 0b000000000000000000000,
4055: 0b000000000000000000000,
4056: 0b000000000000100000000,
4057: 0b000000000000100000000,
4058: 0b000000000001000000000,
4059: 0b000000011001000000000,
4060: 0b000000000110000000000,
4061: 0b000000000011000000000,
4062: 0b000000000100100000000,
4063: 0b000000001000010000000,
4064: 0b000000010000000000000,
4065: 0b000000000000000000000,
4066: 0b000000000000000000000,
4067: },
4068: {
4069: 0b000000000000000000000,
4070: 0b000000000000000000000,
4071: 0b000000001111100000000,
4072: 0b000000000010000000000,
4073: 0b000000000010000000000,
4074: 0b000000011111110000000,
4075: 0b000000000010000000000,
4076: 0b000000000010000000000,
4077: 0b000000000010000000000,
4078: 0b000000000010000000000,
4079: 0b000000000001110000000,
4080: 0b000000000000000000000,
4081: 0b000000000000000000000,
4082: },
4083: {
4084: 0b000000000000000000000,
4085: 0b000000000000000000000,
4086: 0b000000001000000000000,
4087: 0b000000001001110000000,
4088: 0b000000000110010000000,
4089: 0b000000011100100000000,
4090: 0b000000000100000000000,
4091: 0b000000000010000000000,
4092: 0b000000000010000000000,
4093: 0b000000000001000000000,
4094: 0b000000000000100000000,
4095: 0b000000000000000000000,
4096: 0b000000000000000000000,
4097: },
4098: {
4099: 0b000000000000000000000,
4100: 0b000000000000000000000,
4101: 0b000000001111100000000,
4102: 0b000000000000100000000,
4103: 0b000000000000100000000,
4104: 0b000000000001000000000,
4105: 0b000000000001000000000,
4106: 0b000000000010000000000,
4107: 0b000000000010000000000,
4108: 0b000000011111110000000,
4109: 0b000000000000000000000,
4110: 0b000000000000000000000,
4111: 0b000000000000000000000,
4112: },
4113: {
4114: 0b000000000000000000000,
4115: 0b000000000000000000000,
4116: 0b000000011111110000000,
4117: 0b000000000000010000000,
4118: 0b000000000000010000000,
4119: 0b000000011111110000000,
4120: 0b000000000000010000000,
4121: 0b000000000000010000000,
4122: 0b000000000000010000000,
4123: 0b000000011111110000000,
4124: 0b000000000000010000000,
4125: 0b000000000000000000000,
4126: 0b000000000000000000000,
4127: },
4128: {
4129: 0b000000000000000000000,
4130: 0b000000000000000000000,
4131: 0b000000011111110000000,
4132: 0b000000000000000000000,
4133: 0b000000011111110000000,
4134: 0b000000000000010000000,
4135: 0b000000000000010000000,
4136: 0b000000000000010000000,
4137: 0b000000000000100000000,
4138: 0b000000000001000000000,
4139: 0b000000000110000000000,
4140: 0b000000000000000000000,
4141: 0b000000000000000000000,
4142: },
4143: {
4144: 0b000000000000000000000,
4145: 0b000000000000000000000,
4146: 0b000000010000010000000,
4147: 0b000000010000010000000,
4148: 0b000000010000010000000,
4149: 0b000000010000010000000,
4150: 0b000000000000010000000,
4151: 0b000000000000100000000,
4152: 0b000000000000100000000,
4153: 0b000000000001000000000,
4154: 0b000000000110000000000,
4155: 0b000000000000000000000,
4156: 0b000000000000000000000,
4157: },
4158: {
4159: 0b000000000000000000000,
4160: 0b000000000000000000000,
4161: 0b000000001010000000000,
4162: 0b000000001010000000000,
4163: 0b000000001010000000000,
4164: 0b000000001010000000000,
4165: 0b000000001010000000000,
4166: 0b000000001010010000000,
4167: 0b000000001010010000000,
4168: 0b000000010010100000000,
4169: 0b000000010011000000000,
4170: 0b000000000000000000000,
4171: 0b000000000000000000000,
4172: },
4173: {
4174: 0b000000000000000000000,
4175: 0b000000000000000000000,
4176: 0b000000010000000000000,
4177: 0b000000010000000000000,
4178: 0b000000010000000000000,
4179: 0b000000010000000000000,
4180: 0b000000010000010000000,
4181: 0b000000010000010000000,
4182: 0b000000010000100000000,
4183: 0b000000010011000000000,
4184: 0b000000011100000000000,
4185: 0b000000000000000000000,
4186: 0b000000000000000000000,
4187: },
4188: {
4189: 0b000000000000000000000,
4190: 0b000000000000000000000,
4191: 0b000000011111110000000,
4192: 0b000000010000010000000,
4193: 0b000000010000010000000,
4194: 0b000000010000010000000,
4195: 0b000000010000010000000,
4196: 0b000000010000010000000,
4197: 0b000000010000010000000,
4198: 0b000000011111110000000,
4199: 0b000000010000010000000,
4200: 0b000000000000000000000,
4201: 0b000000000000000000000,
4202: },
4203: {
4204: 0b000000000000000000000,
4205: 0b000000000000000000000,
4206: 0b000000011111110000000,
4207: 0b000000010000010000000,
4208: 0b000000010000010000000,
4209: 0b000000010000010000000,
4210: 0b000000000000010000000,
4211: 0b000000000000010000000,
4212: 0b000000000000100000000,
4213: 0b000000000001000000000,
4214: 0b000000000110000000000,
4215: 0b000000000000000000000,
4216: 0b000000000000000000000,
4217: },
4218: {
4219: 0b000000000000000000000,
4220: 0b000000000000000000000,
4221: 0b000000010000000000000,
4222: 0b000000001000000000000,
4223: 0b000000000100000000000,
4224: 0b000000000000000000000,
4225: 0b000000000000010000000,
4226: 0b000000000000100000000,
4227: 0b000000000001000000000,
4228: 0b000000000110000000000,
4229: 0b000000011000000000000,
4230: 0b000000000000000000000,
4231: 0b000000000000000000000,
4232: },
4233: {
4234: 0b000000000000000000000,
4235: 0b000000000000000000000,
4236: 0b000000010010000000000,
4237: 0b000000001001000000000,
4238: 0b000000000100100000000,
4239: 0b000000000000000000000,
4240: 0b000000000000000000000,
4241: 0b000000000000000000000,
4242: 0b000000000000000000000,
4243: 0b000000000000000000000,
4244: 0b000000000000000000000,
4245: 0b000000000000000000000,
4246: 0b000000000000000000000,
4247: },
4248: {
4249: 0b000000000000000000000,
4250: 0b000000000000000000000,
4251: 0b000000000110000000000,
4252: 0b000000001001000000000,
4253: 0b000000001001000000000,
4254: 0b000000000110000000000,
4255: 0b000000000000000000000,
4256: 0b000000000000000000000,
4257: 0b000000000000000000000,
4258: 0b000000000000000000000,
4259: 0b000000000000000000000,
4260: 0b000000000000000000000,
4261: 0b000000000000000000000,
4262: },
4263: {
4264: 0b000000000000000000000,
4265: 0b000000000000000000000,
4266: 0b000000000100000000000,
4267: 0b000000000100000000000,
4268: 0b000000011111110000000,
4269: 0b000000000100000000000,
4270: 0b000000001001110000000,
4271: 0b000000001000010000000,
4272: 0b000000001000000000000,
4273: 0b000000010010000000000,
4274: 0b000000010001110000000,
4275: 0b000000000000000000000,
4276: 0b000000000000000000000,
4277: },
4278: {
4279: 0b000000000000000000000,
4280: 0b000000000000000000000,
4281: 0b000000000100000000000,
4282: 0b000000111111111000000,
4283: 0b000000001000000000000,
4284: 0b000000001011100000000,
4285: 0b000000011100010000000,
4286: 0b000000010000001000000,
4287: 0b000000000000001000000,
4288: 0b000000000000010000000,
4289: 0b000000000111100000000,
4290: 0b000000000000000000000,
4291: 0b000000000000000000000,
4292: },
4293: {
4294: 0b000000000000000000000,
4295: 0b000000000000000000000,
4296: 0b000000000000000000000,
4297: 0b000000001111100000000,
4298: 0b000000110000010000000,
4299: 0b000000000000001000000,
4300: 0b000000000000001000000,
4301: 0b000000000000010000000,
4302: 0b000000000001100000000,
4303: 0b000000000110000000000,
4304: 0b000000000000000000000,
4305: 0b000000000000000000000,
4306: 0b000000000000000000000,
4307: },
4308: {
4309: 0b000000000000000000000,
4310: 0b000000000000000000000,
4311: 0b000000111111110000000,
4312: 0b000000000001100000000,
4313: 0b000000000010000000000,
4314: 0b000000000100000000000,
4315: 0b000000001000000000000,
4316: 0b000000001000000000000,
4317: 0b000000001000000000000,
4318: 0b000000000100000000000,
4319: 0b000000000011100000000,
4320: 0b000000000000000000000,
4321: 0b000000000000000000000,
4322: },
4323: {
4324: 0b000000000000000000000,
4325: 0b000000000000000000000,
4326: 0b000000001000000000000,
4327: 0b000000001000000000000,
4328: 0b000000001001110000000,
4329: 0b000000000110000000000,
4330: 0b000000001000000000000,
4331: 0b000000010000000000000,
4332: 0b000000010000000000000,
4333: 0b000000010000000000000,
4334: 0b000000001111110000000,
4335: 0b000000000000000000000,
4336: 0b000000000000000000000,
4337: },
4338: {
4339: 0b000000000000000000000,
4340: 0b000000000000000000000,
4341: 0b000000001001000000000,
4342: 0b000000001000100000000,
4343: 0b000000111100010000000,
4344: 0b000000010001010000000,
4345: 0b000000010001000000000,
4346: 0b000000100111000000000,
4347: 0b000000001001100000000,
4348: 0b000000001001010000000,
4349: 0b000000000110000000000,
4350: 0b000000000000000000000,
4351: 0b000000000000000000000,
4352: },
4353: {
4354: 0b000000000000000000000,
4355: 0b000000000000000000000,
4356: 0b000000010011100000000,
4357: 0b000000010000010000000,
4358: 0b000000010000100000000,
4359: 0b000000010000000000000,
4360: 0b000000010000000000000,
4361: 0b000000010100000000000,
4362: 0b000000010100000000000,
4363: 0b000000010011110000000,
4364: 0b000000000000000000000,
4365: 0b000000000000000000000,
4366: 0b000000000000000000000,
4367: },
4368: {
4369: 0b000000000000000000000,
4370: 0b000000000000000000000,
4371: 0b000000000001000000000,
4372: 0b000000010001000000000,
4373: 0b000000010111110000000,
4374: 0b000000001010001000000,
4375: 0b000000011010001000000,
4376: 0b000000101010001000000,
4377: 0b000000100100111000000,
4378: 0b000000100101001100000,
4379: 0b000000011000110000000,
4380: 0b000000000000000000000,
4381: 0b000000000000000000000,
4382: },
4383: {
4384: 0b000000000000000000000,
4385: 0b000000000000000000000,
4386: 0b000000001000000000000,
4387: 0b000000111011100000000,
4388: 0b000000001100010000000,
4389: 0b000000001000010000000,
4390: 0b000000011000010000000,
4391: 0b000000011001110000000,
4392: 0b000000101010011000000,
4393: 0b000000101010010000000,
4394: 0b000000001001100000000,
4395: 0b000000000000000000000,
4396: 0b000000000000000000000,
4397: },
4398: {
4399: 0b000000000000000000000,
4400: 0b000000000000000000000,
4401: 0b000000000000000000000,
4402: 0b000000001111100000000,
4403: 0b000000010010010000000,
4404: 0b000000100010001000000,
4405: 0b000000100010001000000,
4406: 0b000000100010001000000,
4407: 0b000000100100001000000,
4408: 0b000000011000010000000,
4409: 0b000000000000000000000,
4410: 0b000000000000000000000,
4411: 0b000000000000000000000,
4412: },
4413: {
4414: 0b000000000000000000000,
4415: 0b000000000000000000000,
4416: 0b000000100001000000000,
4417: 0b000000100001000000000,
4418: 0b000000101111110000000,
4419: 0b000000100001000000000,
4420: 0b000000100001000000000,
4421: 0b000000100111000000000,
4422: 0b000000101001100000000,
4423: 0b000000101001010000000,
4424: 0b000000100110000000000,
4425: 0b000000000000000000000,
4426: 0b000000000000000000000,
4427: },
4428: {
4429: 0b000000000000000000000,
4430: 0b000000000000000000000,
4431: 0b000000111001000000000,
4432: 0b000000001001100000000,
4433: 0b000000010001010000000,
4434: 0b000000100001000000000,
4435: 0b000000100001000000000,
4436: 0b000000100001000000000,
4437: 0b000000100010000000000,
4438: 0b000000011100000000000,
4439: 0b000000000000000000000,
4440: 0b000000000000000000000,
4441: 0b000000000000000000000,
4442: },
4443: {
4444: 0b000000000000000000000,
4445: 0b000000000000000000000,
4446: 0b000000011111000000000,
4447: 0b000000000001000000000,
4448: 0b000000000010000000000,
4449: 0b000000100100010000000,
4450: 0b000000100010010000000,
4451: 0b000001000001001000000,
4452: 0b000001000001001000000,
4453: 0b000001010001001000000,
4454: 0b000000001110000000000,
4455: 0b000000000000000000000,
4456: 0b000000000000000000000,
4457: },
4458: {
4459: 0b000000000000000000000,
4460: 0b000000000000000000000,
4461: 0b000000000000000000000,
4462: 0b000000000000000000000,
4463: 0b000000000110000000000,
4464: 0b000000001001000000000,
4465: 0b000000010000100000000,
4466: 0b000000100000010000000,
4467: 0b000000000000001000000,
4468: 0b000000000000000000000,
4469: 0b000000000000000000000,
4470: 0b000000000000000000000,
4471: 0b000000000000000000000,
4472: },
4473: {
4474: 0b000000000000000000000,
4475: 0b000000000000000000000,
4476: 0b000000101111110000000,
4477: 0b000000100001000000000,
4478: 0b000000101111110000000,
4479: 0b000000100001000000000,
4480: 0b000000100001000000000,
4481: 0b000000100111100000000,
4482: 0b000000101001010000000,
4483: 0b000000101001000000000,
4484: 0b000000100110000000000,
4485: 0b000000000000000000000,
4486: 0b000000000000000000000,
4487: },
4488: {
4489: 0b000000000000000000000,
4490: 0b000000000000000000000,
4491: 0b000000000010000000000,
4492: 0b000000011111110000000,
4493: 0b000000000010000000000,
4494: 0b000000011111110000000,
4495: 0b000000000010000000000,
4496: 0b000000001111000000000,
4497: 0b000000010010100000000,
4498: 0b000000010010010000000,
4499: 0b000000001100000000000,
4500: 0b000000000000000000000,
4501: 0b000000000000000000000,
4502: },
4503: {
4504: 0b000000000000000000000,
4505: 0b000000000000000000000,
4506: 0b000000011110000000000,
4507: 0b000000000010000000000,
4508: 0b000000000010010000000,
4509: 0b000000001111110000000,
4510: 0b000000010100011000000,
4511: 0b000000100100010000000,
4512: 0b000000100100010000000,
4513: 0b000000011001100000000,
4514: 0b000000000000000000000,
4515: 0b000000000000000000000,
4516: 0b000000000000000000000,
4517: },
4518: {
4519: 0b000000000000000000000,
4520: 0b000000000000000000000,
4521: 0b000000000100000000000,
4522: 0b000000111111110000000,
4523: 0b000000000100000000000,
4524: 0b000000000100110000000,
4525: 0b000000011100001000000,
4526: 0b000000100100000000000,
4527: 0b000000100100010000000,
4528: 0b000000011100010000000,
4529: 0b000000000011100000000,
4530: 0b000000000000000000000,
4531: 0b000000000000000000000,
4532: },
4533: {
4534: 0b000000000000000000000,
4535: 0b000000000000000000000,
4536: 0b000000000001000000000,
4537: 0b000000010001000000000,
4538: 0b000000010111100000000,
4539: 0b000000001010010000000,
4540: 0b000000011010001000000,
4541: 0b000000101010001000000,
4542: 0b000000100100001000000,
4543: 0b000000100100001000000,
4544: 0b000000011000110000000,
4545: 0b000000000000000000000,
4546: 0b000000000000000000000,
4547: },
4548: {
4549: 0b000000000000000000000,
4550: 0b000000000000000000000,
4551: 0b000000000100000000000,
4552: 0b000000011111100000000,
4553: 0b000000000100000000000,
4554: 0b000000011111100000000,
4555: 0b000000000100000000000,
4556: 0b000000000100000000000,
4557: 0b000000000100010000000,
4558: 0b000000000100010000000,
4559: 0b000000000011100000000,
4560: 0b000000000000000000000,
4561: 0b000000000000000000000,
4562: },
4563: {
4564: 0b000000000000000000000,
4565: 0b000000000000000000000,
4566: 0b000000000010000000000,
4567: 0b000000010010000000000,
4568: 0b000000010011110000000,
4569: 0b000000001101001000000,
4570: 0b000000011001001000000,
4571: 0b000000101000010000000,
4572: 0b000000000100000000000,
4573: 0b000000000100000000000,
4574: 0b000000000010000000000,
4575: 0b000000000001000000000,
4576: 0b000000000000000000000,
4577: },
4578: {
4579: 0b000000000000000000000,
4580: 0b000000000000000000000,
4581: 0b000000000010000000000,
4582: 0b000000100001000000000,
4583: 0b000000100111110000000,
4584: 0b000000101001001000000,
4585: 0b000000010001001000000,
4586: 0b000000010001001000000,
4587: 0b000000010010001000000,
4588: 0b000000000010010000000,
4589: 0b000000000100000000000,
4590: 0b000000000000000000000,
4591: 0b000000000000000000000,
4592: },
4593: {
4594: 0b000000000000000000000,
4595: 0b000000000000000000000,
4596: 0b000000000010000000000,
4597: 0b000000000010000000000,
4598: 0b000000000011110000000,
4599: 0b000000000010000000000,
4600: 0b000000000010000000000,
4601: 0b000000001111000000000,
4602: 0b000000010010100000000,
4603: 0b000000010010010000000,
4604: 0b000000001100000000000,
4605: 0b000000000000000000000,
4606: 0b000000000000000000000,
4607: },
4608: {
4609: 0b000000000000000000000,
4610: 0b000000000000000000000,
4611: 0b000000011000000000000,
4612: 0b000000000110000000000,
4613: 0b000000000000000000000,
4614: 0b000000010000000000000,
4615: 0b000000010111100000000,
4616: 0b000000011000010000000,
4617: 0b000000010000010000000,
4618: 0b000000000000100000000,
4619: 0b000000000111000000000,
4620: 0b000000000000000000000,
4621: 0b000000000000000000000,
4622: },
4623: {
4624: 0b000000000000000000000,
4625: 0b000000000000000000000,
4626: 0b000000010011100000000,
4627: 0b000000010100010000000,
4628: 0b000000011000010000000,
4629: 0b000000011000010000000,
4630: 0b000000010000010000000,
4631: 0b000000010000100000000,
4632: 0b000000000000100000000,
4633: 0b000000000001000000000,
4634: 0b000000000110000000000,
4635: 0b000000000000000000000,
4636: 0b000000000000000000000,
4637: },
4638: {
4639: 0b000000000000000000000,
4640: 0b000000000000000000000,
4641: 0b000000001111100000000,
4642: 0b000000000001000000000,
4643: 0b000000000010000000000,
4644: 0b000000000100000000000,
4645: 0b000000001111100000000,
4646: 0b000000010000010000000,
4647: 0b000000000111010000000,
4648: 0b000000001000110000000,
4649: 0b000000000111100000000,
4650: 0b000000000000000000000,
4651: 0b000000000000000000000,
4652: },
4653: {
4654: 0b000000000000000000000,
4655: 0b000000000000000000000,
4656: 0b000000001000000000000,
4657: 0b000000111011100000000,
4658: 0b000000001100010000000,
4659: 0b000000001000010000000,
4660: 0b000000011000010000000,
4661: 0b000000011000100000000,
4662: 0b000000101000100000000,
4663: 0b000000101001000000000,
4664: 0b000000001001110000000,
4665: 0b000000000000000000000,
4666: 0b000000000000000000000,
4667: },
4668: {
4669: 0b000000000000000000000,
4670: 0b000000000000000000000,
4671: 0b000000001111100000000,
4672: 0b000000000001000000000,
4673: 0b000000000010000000000,
4674: 0b000000000100000000000,
4675: 0b000000001111100000000,
4676: 0b000000010000010000000,
4677: 0b000000000000010000000,
4678: 0b000000000000100000000,
4679: 0b000000000111000000000,
4680: 0b000000000000000000000,
4681: 0b000000000000000000000,
4682: },
4683: {
4684: 0b000000000000000000000,
4685: 0b000000000000000000000,
4686: 0b000000001000000000000,
4687: 0b000000001000000000000,
4688: 0b000000111011100000000,
4689: 0b000000001100010000000,
4690: 0b000000011000010000000,
4691: 0b000000011000010000000,
4692: 0b000000111000010000000,
4693: 0b000000101000100000000,
4694: 0b000000001001000000000,
4695: 0b000000000000000000000,
4696: 0b000000000000000000000,
4697: },
4698: {
4699: 0b000000000000000000000,
4700: 0b000000000000000000000,
4701: 0b000000000100000000000,
4702: 0b000000000100000000000,
4703: 0b000000000100000000000,
4704: 0b000000001000000000000,
4705: 0b000000001000000000000,
4706: 0b000000011100000000000,
4707: 0b000000010010010000000,
4708: 0b000000100010010000000,
4709: 0b000000100001100000000,
4710: 0b000000000000000000000,
4711: 0b000000000000000000000,
4712: },
4713: null,
4714: null,
4715: };
4716:
4717:
4718: public static final int[][] KBD_LED_LETTER = {
4719: {
4720: 0b000000000000000000000,
4721: 0b000000000000000000000,
4722: 0b000001001000001001000,
4723: 0b000001000100001000100,
4724: 0b001111100100111100010,
4725: 0b000010010010010001010,
4726: 0b000010010010010001000,
4727: 0b000100010000100111000,
4728: 0b000100010000001001100,
4729: 0b001000010000001001010,
4730: 0b001001100000000110000,
4731: 0b000000000000000000000,
4732: 0b000000000000000000000,
4733: },
4734: {
4735: 0b000000000000000000000,
4736: 0b000000000000000000000,
4737: 0b000000000000000000000,
4738: 0b001111100000011111000,
4739: 0b001000100000000001000,
4740: 0b001000100000000001000,
4741: 0b001000101111010010000,
4742: 0b001000100000001100000,
4743: 0b001000100000000100000,
4744: 0b001111100000000010000,
4745: 0b000000000000000000000,
4746: 0b000000000000000000000,
4747: 0b000000000000000000000,
4748: },
4749: {
4750: 0b000000000000000000000,
4751: 0b000000000000000000000,
4752: 0b000000000000000010100,
4753: 0b001111100000001010100,
4754: 0b000000100000001000000,
4755: 0b000000100000001000000,
4756: 0b000000101111001110000,
4757: 0b000000100000001001000,
4758: 0b000000100000001000000,
4759: 0b001111100000001000000,
4760: 0b000000000000000000000,
4761: 0b000000000000000000000,
4762: 0b000000000000000000000,
4763: },
4764: {
4765: 0b000000000000000000000,
4766: 0b000000000000000000000,
4767: 0b000000000000000000000,
4768: 0b001100011001110001100,
4769: 0b010010100101001010010,
4770: 0b010000100101001010000,
4771: 0b010000111101110001100,
4772: 0b010000100101000000010,
4773: 0b010010100101000010010,
4774: 0b001100100101000001100,
4775: 0b000000000000000000000,
4776: 0b000000000000000000000,
4777: 0b000000000000000000000,
4778: },
4779: {
4780: 0b000000000000000000000,
4781: 0b000000000000000000000,
4782: 0b000000000000000000000,
4783: 0b000111001000100111000,
4784: 0b000010001000101000100,
4785: 0b000010001100101000000,
4786: 0b000010001010100111000,
4787: 0b000010001001100000100,
4788: 0b000010001000101000100,
4789: 0b000111001000100111000,
4790: 0b000000000000000000000,
4791: 0b000000000000000000000,
4792: 0b000000000000000000000,
4793: },
4794: {
4795: 0b000000000000000000000,
4796: 0b000000000000000000000,
4797: 0b000000000000110000000,
4798: 0b000111001000001100000,
4799: 0b000001001100000000000,
4800: 0b000010001010100000000,
4801: 0b000100001000101111000,
4802: 0b000100001000110000100,
4803: 0b000100001000100000100,
4804: 0b000100010000000001000,
4805: 0b000011100000001110000,
4806: 0b000000000000000000000,
4807: 0b000000000000000000000,
4808: },
4809: {
4810: 0b000000000000000000000,
4811: 0b000000000000000000000,
4812: 0b000001000000011110000,
4813: 0b000010100000100010000,
4814: 0b000100010001111111100,
4815: 0b011000001100100100100,
4816: 0b000111110000111111100,
4817: 0b000001000000100100100,
4818: 0b000111110000111111100,
4819: 0b000001000000100000100,
4820: 0b001111111001000001100,
4821: 0b000000000000000000000,
4822: 0b000000000000000000000,
4823: },
4824: {
4825: 0b000000000000000000000,
4826: 0b000000000000000000000,
4827: 0b000000000000000000000,
4828: 0b001000101000101000100,
4829: 0b001000101000101101100,
4830: 0b001100101000101010100,
4831: 0b001010101000101000100,
4832: 0b001001101000101000100,
4833: 0b001000101000101000100,
4834: 0b001000100111001000100,
4835: 0b000000000000000000000,
4836: 0b000000000000000000000,
4837: 0b000000000000000000000,
4838: },
4839: };
4840:
4841:
4842: public static final int[][] KBD_FIX_LETTER = {
4843: {
4844: 0b000000000000000000000,
4845: 0b000000000000000000000,
4846: 0b000000000000000000000,
4847: 0b001111100111000111000,
4848: 0b001000001000101000100,
4849: 0b001000001000001000000,
4850: 0b001111000111001000000,
4851: 0b001000000000101000000,
4852: 0b001000001000101000100,
4853: 0b001111100111000111000,
4854: 0b000000000000000000000,
4855: 0b000000000000000000000,
4856: 0b000000000000000000000,
4857: },
4858: {
4859: 0b000000000000000000000,
4860: 0b000000000000000000000,
4861: 0b000000000000000000000,
4862: 0b000001111000111000000,
4863: 0b000001000101000100000,
4864: 0b000001000101000000000,
4865: 0b000001111000111000000,
4866: 0b000001000100000100000,
4867: 0b000001000101000100000,
4868: 0b000001111000111000000,
4869: 0b000000000000000000000,
4870: 0b000000000000000000000,
4871: 0b000000000000000000000,
4872: },
4873: {
4874: 0b000000000000000000000,
4875: 0b000000000000000000000,
4876: 0b000000000000000000000,
4877: 0b001111100010001111000,
4878: 0b000010000101001000100,
4879: 0b000010000101001000100,
4880: 0b000010001000101111000,
4881: 0b000010001111101000100,
4882: 0b000010001000101000100,
4883: 0b000010001000101111000,
4884: 0b000000000000000000000,
4885: 0b000000000000000000000,
4886: 0b000000000000000000000,
4887: },
4888: {
4889: 0b0,0b00000000000000000000000000000000,
4890: 0b0,0b00000000000000000000000000000000,
4891: 0b0,0b00000000000000000000000000000000,
4892: 0b0,0b00000000000000000000000000000000,
4893: 0b0,0b00000000000000000000000000000000,
4894: 0b0,0b00000000000000000000000000000000,
4895: 0b0,0b00000000000000000000000000000000,
4896: 0b0,0b00000000000000000001110000000000,
4897: 0b0,0b00000000000000000001010000000000,
4898: 0b0,0b00000000000000000001010000000000,
4899: 0b0,0b00000000000000000001010000000000,
4900: 0b0,0b00000000000000000001010000000000,
4901: 0b0,0b00000000000000000001010000000000,
4902: 0b0,0b00000000000000000001010000000000,
4903: 0b0,0b00000000000000000001010000000000,
4904: 0b0,0b00000000000000000001010000000000,
4905: 0b0,0b00000000000000000001010000000000,
4906: 0b0,0b00000000000000001001010000000000,
4907: 0b0,0b00000000000000011001010000000000,
4908: 0b0,0b00000000000000101111010000000000,
4909: 0b0,0b00000000000001000000010000000000,
4910: 0b0,0b00000000000000101111110000000000,
4911: 0b0,0b00000000000000011000000000000000,
4912: 0b0,0b00000000000000001000000000000000,
4913: 0b0,0b00000000000000000000000000000000,
4914: 0b0,0b00000000000000000000000000000000,
4915: 0b0,0b00000000000000000000000000000000,
4916: 0b0,0b00000000000000000000000000000000,
4917: 0b0,0b00000000000000000000000000000000,
4918: },
4919: null,
4920: {
4921: 0b000000000000000000000,
4922: 0b000000000000000000000,
4923: 0b000000000000000000000,
4924: 0b010010011001001011110,
4925: 0b010010100101111010000,
4926: 0b010010100101111010000,
4927: 0b011110100101001011100,
4928: 0b010010100101001010000,
4929: 0b010010100101001010000,
4930: 0b010010011001001011110,
4931: 0b000000000000000000000,
4932: 0b000000000000000000000,
4933: 0b000000000000000000000,
4934: },
4935: {
4936: 0b000000000000000000000,
4937: 0b000000000000000000000,
4938: 0b000000000000000000000,
4939: 0b001110001111101000000,
4940: 0b001001001000001000000,
4941: 0b001000101000001000000,
4942: 0b001000101111001000000,
4943: 0b001000101000001000000,
4944: 0b001001001000001000000,
4945: 0b001110001111101111100,
4946: 0b000000000000000000000,
4947: 0b000000000000000000000,
4948: 0b000000000000000000000,
4949: },
4950: {
4951: 0b000000000000000000000,
4952: 0b011100011001000010000,
4953: 0b010010100101000010000,
4954: 0b011100100101000010000,
4955: 0b010010100101000010000,
4956: 0b010010011001111011110,
4957: 0b000000000000000000000,
4958: 0b000000100101110000000,
4959: 0b000000100101001000000,
4960: 0b000000100101110000000,
4961: 0b000000100101000000000,
4962: 0b000000011001000000000,
4963: 0b000000000000000000000,
4964: },
4965: {
4966: 0b000000000000000000000,
4967: 0b011100011001000010000,
4968: 0b010010100101000010000,
4969: 0b011100100101000010000,
4970: 0b010010100101000010000,
4971: 0b010010011001111011110,
4972: 0b000000000000000000000,
4973: 0b011100011001001010010,
4974: 0b010010100101001011010,
4975: 0b010010100101111011110,
4976: 0b010010100101111010110,
4977: 0b011100011001001010010,
4978: 0b000000000000000000000,
4979: },
4980: {
4981: 0b000000000000000000000,
4982: 0b000000000000000000000,
4983: 0b000000000000000000000,
4984: 0b010010100101100001100,
4985: 0b010010100101010010010,
4986: 0b010010110101001010010,
4987: 0b010010111101001010010,
4988: 0b010010101101001010010,
4989: 0b010010100101010010010,
4990: 0b001100100101100001100,
4991: 0b000000000000000000000,
4992: 0b000000000000000000000,
4993: 0b000000000000000000000,
4994: },
4995: {
4996: 0b000000000000000000000,
4997: 0b000000000000000000000,
4998: 0b000000000000000000000,
4999: 0b000000000100000000000,
5000: 0b000000001100000000000,
5001: 0b000000010111111000000,
5002: 0b000000100000001000000,
5003: 0b000000010111111000000,
5004: 0b000000001100000000000,
5005: 0b000000000100000000000,
5006: 0b000000000000000000000,
5007: 0b000000000000000000000,
5008: 0b000000000000000000000,
5009: },
5010: {
5011: 0b000000000000000000000,
5012: 0b000000000000000000000,
5013: 0b000000000010000000000,
5014: 0b000000000101000000000,
5015: 0b000000001000100000000,
5016: 0b000000011101110000000,
5017: 0b000000000101000000000,
5018: 0b000000000101000000000,
5019: 0b000000000101000000000,
5020: 0b000000000101000000000,
5021: 0b000000000111000000000,
5022: 0b000000000000000000000,
5023: 0b000000000000000000000,
5024: },
5025: {
5026: 0b000000000000000000000,
5027: 0b000000000000000000000,
5028: 0b000000000000000000000,
5029: 0b000000000001000000000,
5030: 0b000000000001100000000,
5031: 0b000000111111010000000,
5032: 0b000000100000001000000,
5033: 0b000000111111010000000,
5034: 0b000000000001100000000,
5035: 0b000000000001000000000,
5036: 0b000000000000000000000,
5037: 0b000000000000000000000,
5038: 0b000000000000000000000,
5039: },
5040: {
5041: 0b000000000000000000000,
5042: 0b000000000000000000000,
5043: 0b000000000111000000000,
5044: 0b000000000101000000000,
5045: 0b000000000101000000000,
5046: 0b000000000101000000000,
5047: 0b000000000101000000000,
5048: 0b000000011101110000000,
5049: 0b000000001000100000000,
5050: 0b000000000101000000000,
5051: 0b000000000010000000000,
5052: 0b000000000000000000000,
5053: 0b000000000000000000000,
5054: },
5055: {
5056: 0b000000000000000000000,
5057: 0b000000000000000000000,
5058: 0b000000000000000000000,
5059: 0b000111001000001111000,
5060: 0b001000101000001000100,
5061: 0b001000001000001000100,
5062: 0b001000001000001111000,
5063: 0b001000001000001000100,
5064: 0b001000101000001000100,
5065: 0b000111001111101000100,
5066: 0b000000000000000000000,
5067: 0b000000000000000000000,
5068: 0b000000000000000000000,
5069: },
5070: {
5071: 0b000000000000000000000,
5072: 0b000000000000000000000,
5073: 0b000000000000000000000,
5074: 0b000000000000010000000,
5075: 0b000000000000100000000,
5076: 0b000000000001000000000,
5077: 0b000000000010000000000,
5078: 0b000000000100000000000,
5079: 0b000000001000000000000,
5080: 0b000000010000000000000,
5081: 0b000000000000000000000,
5082: 0b000000000000000000000,
5083: 0b000000000000000000000,
5084: },
5085: {
5086: 0b000000000000000000000,
5087: 0b000000000000000000000,
5088: 0b000000000000000000000,
5089: 0b000000000010000000000,
5090: 0b000000010010010000000,
5091: 0b000000001010100000000,
5092: 0b000000000111000000000,
5093: 0b000000001010100000000,
5094: 0b000000010010010000000,
5095: 0b000000000010000000000,
5096: 0b000000000000000000000,
5097: 0b000000000000000000000,
5098: 0b000000000000000000000,
5099: },
5100: {
5101: 0b000000000000000000000,
5102: 0b000000000000000000000,
5103: 0b000000000000000000000,
5104: 0b000000000000000000000,
5105: 0b000000000000000000000,
5106: 0b000000000000000000000,
5107: 0b000000011111110000000,
5108: 0b000000000000000000000,
5109: 0b000000000000000000000,
5110: 0b000000000000000000000,
5111: 0b000000000000000000000,
5112: 0b000000000000000000000,
5113: 0b000000000000000000000,
5114: },
5115: {
5116: 0b000000000000000000000,
5117: 0b000000000000000000000,
5118: 0b000000011111110000000,
5119: 0b000000000000010000000,
5120: 0b000000000000010000000,
5121: 0b000000000000100000000,
5122: 0b000000000001000000000,
5123: 0b000000000001000000000,
5124: 0b000000000010000000000,
5125: 0b000000000010000000000,
5126: 0b000000000010000000000,
5127: 0b000000000000000000000,
5128: 0b000000000000000000000,
5129: },
5130: {
5131: 0b000000000000000000000,
5132: 0b000000000000000000000,
5133: 0b000000001111100000000,
5134: 0b000000010000010000000,
5135: 0b000000010000010000000,
5136: 0b000000010000010000000,
5137: 0b000000001111100000000,
5138: 0b000000010000010000000,
5139: 0b000000010000010000000,
5140: 0b000000010000010000000,
5141: 0b000000001111100000000,
5142: 0b000000000000000000000,
5143: 0b000000000000000000000,
5144: },
5145: {
5146: 0b000000000000000000000,
5147: 0b000000000000000000000,
5148: 0b000000001111100000000,
5149: 0b000000010000010000000,
5150: 0b000000010000010000000,
5151: 0b000000010000010000000,
5152: 0b000000001111110000000,
5153: 0b000000000000010000000,
5154: 0b000000000000010000000,
5155: 0b000000000000100000000,
5156: 0b000000001111000000000,
5157: 0b000000000000000000000,
5158: 0b000000000000000000000,
5159: },
5160: {
5161: 0b000000000000000000000,
5162: 0b000000000000000000000,
5163: 0b000000000000000000000,
5164: 0b000000000010000000000,
5165: 0b000000000010000000000,
5166: 0b000000000010000000000,
5167: 0b000000011111110000000,
5168: 0b000000000010000000000,
5169: 0b000000000010000000000,
5170: 0b000000000010000000000,
5171: 0b000000000000000000000,
5172: 0b000000000000000000000,
5173: 0b000000000000000000000,
5174: },
5175: {
5176: 0b000000000000000000000,
5177: 0b000000000000000000000,
5178: 0b000000000001100000000,
5179: 0b000000000010100000000,
5180: 0b000000000100100000000,
5181: 0b000000001000100000000,
5182: 0b000000010000100000000,
5183: 0b000000010000100000000,
5184: 0b000000011111110000000,
5185: 0b000000000000100000000,
5186: 0b000000000000100000000,
5187: 0b000000000000000000000,
5188: 0b000000000000000000000,
5189: },
5190: {
5191: 0b000000000000000000000,
5192: 0b000000000000000000000,
5193: 0b000000011111110000000,
5194: 0b000000010000000000000,
5195: 0b000000010000000000000,
5196: 0b000000011111100000000,
5197: 0b000000000000010000000,
5198: 0b000000000000010000000,
5199: 0b000000000000010000000,
5200: 0b000000010000010000000,
5201: 0b000000001111100000000,
5202: 0b000000000000000000000,
5203: 0b000000000000000000000,
5204: },
5205: {
5206: 0b000000000000000000000,
5207: 0b000000000000000000000,
5208: 0b000000000111100000000,
5209: 0b000000001000000000000,
5210: 0b000000010000000000000,
5211: 0b000000010000000000000,
5212: 0b000000011111100000000,
5213: 0b000000010000010000000,
5214: 0b000000010000010000000,
5215: 0b000000010000010000000,
5216: 0b000000001111100000000,
5217: 0b000000000000000000000,
5218: 0b000000000000000000000,
5219: },
5220: {
5221: 0b000000000000000000000,
5222: 0b000000000000000000000,
5223: 0b000000000000000000000,
5224: 0b000000000000000000000,
5225: 0b000000000000000000000,
5226: 0b000000011111110000000,
5227: 0b000000000000000000000,
5228: 0b000000011111110000000,
5229: 0b000000000000000000000,
5230: 0b000000000000000000000,
5231: 0b000000000000000000000,
5232: 0b000000000000000000000,
5233: 0b000000000000000000000,
5234: },
5235: {
5236: 0b000000000000000000000,
5237: 0b000000000000000000000,
5238: 0b000000000010000000000,
5239: 0b000000000110000000000,
5240: 0b000000001010000000000,
5241: 0b000000000010000000000,
5242: 0b000000000010000000000,
5243: 0b000000000010000000000,
5244: 0b000000000010000000000,
5245: 0b000000000010000000000,
5246: 0b000000000010000000000,
5247: 0b000000000000000000000,
5248: 0b000000000000000000000,
5249: },
5250: {
5251: 0b000000000000000000000,
5252: 0b000000000000000000000,
5253: 0b000000001111100000000,
5254: 0b000000010000010000000,
5255: 0b000000000000010000000,
5256: 0b000000000000010000000,
5257: 0b000000000001100000000,
5258: 0b000000000110000000000,
5259: 0b000000001000000000000,
5260: 0b000000010000000000000,
5261: 0b000000011111110000000,
5262: 0b000000000000000000000,
5263: 0b000000000000000000000,
5264: },
5265: {
5266: 0b000000000000000000000,
5267: 0b000000000000000000000,
5268: 0b000000001111100000000,
5269: 0b000000010000010000000,
5270: 0b000000000000010000000,
5271: 0b000000000000010000000,
5272: 0b000000000011100000000,
5273: 0b000000000000010000000,
5274: 0b000000000000010000000,
5275: 0b000000010000010000000,
5276: 0b000000001111100000000,
5277: 0b000000000000000000000,
5278: 0b000000000000000000000,
5279: },
5280: {
5281: 0b000000000000000000000,
5282: 0b000000000000000000000,
5283: 0b000000000000000000000,
5284: 0b000000000000000000000,
5285: 0b000000000000000000000,
5286: 0b000000000000000000000,
5287: 0b000000000000000000000,
5288: 0b011101010111011101100,
5289: 0b010001010010010001010,
5290: 0b010001110010010001010,
5291: 0b011101110010011101100,
5292: 0b010001110010010001010,
5293: 0b010001010010010001010,
5294: 0b011101010010011101010,
5295: 0b000000000000000000000,
5296: 0b000000000000000000000,
5297: 0b000000000000000000000,
5298: 0b000000000000000000000,
5299: 0b000000000000000000000,
5300: 0b000000000000000000000,
5301: 0b000000000000000000000,
5302: },
5303: {
5304: 0b000000000000000000000,
5305: 0b000000000000000000000,
5306: 0b000000001111100000000,
5307: 0b000000010000010000000,
5308: 0b000000010000010000000,
5309: 0b000000010000010000000,
5310: 0b000000010000010000000,
5311: 0b000000010000010000000,
5312: 0b000000010000010000000,
5313: 0b000000010000010000000,
5314: 0b000000001111100000000,
5315: 0b000000000000000000000,
5316: 0b000000000000000000000,
5317: },
5318: {
5319: 0b000000000000000000000,
5320: 0b000000000000000000000,
5321: 0b000000000000000000000,
5322: 0b000000000000000000000,
5323: 0b000000000000000000000,
5324: 0b000000000000000000000,
5325: 0b000000000000000000000,
5326: 0b000000000110000000000,
5327: 0b000000000110000000000,
5328: 0b000000000010000000000,
5329: 0b000000000100000000000,
5330: 0b000000000000000000000,
5331: 0b000000000000000000000,
5332: },
5333: {
5334: 0b000000000000000000000,
5335: 0b000000000000000000000,
5336: 0b000000000000000000000,
5337: 0b000000000000000000000,
5338: 0b000000000000000000000,
5339: 0b000000000000000000000,
5340: 0b000000000000000000000,
5341: 0b000000000000000000000,
5342: 0b000000000110000000000,
5343: 0b000000000110000000000,
5344: 0b000000000000000000000,
5345: 0b000000000000000000000,
5346: 0b000000000000000000000,
5347: },
5348: {
5349: 0b000000000000000000000,
5350: 0b000000000000000000000,
5351: 0b000111011110011111000,
5352: 0b000000000010010001000,
5353: 0b001111000010011111000,
5354: 0b000000011110000000000,
5355: 0b000111010000111111100,
5356: 0b000000010000001000000,
5357: 0b000111010000001111000,
5358: 0b000101010010000001000,
5359: 0b000111011110011111000,
5360: 0b000000000000000000000,
5361: 0b000000000000000000000,
5362: },
5363: {
5364: 0b000000000000000000000,
5365: 0b000000000000000000000,
5366: 0b010111000100110011100,
5367: 0b001010101001001000100,
5368: 0b000111110010111011100,
5369: 0b001000001001100000100,
5370: 0b010111110100110111110,
5371: 0b000100010001100001000,
5372: 0b000111110010101011110,
5373: 0b000010100001110011100,
5374: 0b001111111011000101010,
5375: 0b000000000000000000000,
5376: 0b000000000000000000000,
5377: },
5378: {
5379: 0b000000000000000000000,
5380: 0b000000000000000000000,
5381: 0b000000000000000000000,
5382: 0b010010111101000011100,
5383: 0b010010100001000010010,
5384: 0b010010100001000010010,
5385: 0b011110111001000011100,
5386: 0b010010100001000010000,
5387: 0b010010100001000010000,
5388: 0b010010111101111010000,
5389: 0b000000000000000000000,
5390: 0b000000000000000000000,
5391: 0b000000000000000000000,
5392: },
5393: {
5394: 0b000000000000000000000,
5395: 0b000000000000000000000,
5396: 0b000000000000000000000,
5397: 0b001000101111100010000,
5398: 0b001000101000000110000,
5399: 0b000101001000000010000,
5400: 0b000010001111000010000,
5401: 0b000101001000000010000,
5402: 0b001000101000000010000,
5403: 0b001000101000000010000,
5404: 0b000000000000000000000,
5405: 0b000000000000000000000,
5406: 0b000000000000000000000,
5407: },
5408: {
5409: 0b000000000000000000000,
5410: 0b000000000000000000000,
5411: 0b000000000000000000000,
5412: 0b001000101111100111000,
5413: 0b001000101000001000100,
5414: 0b000101001000000000100,
5415: 0b000010001111000011000,
5416: 0b000101001000000100000,
5417: 0b001000101000001000000,
5418: 0b001000101000001111100,
5419: 0b000000000000000000000,
5420: 0b000000000000000000000,
5421: 0b000000000000000000000,
5422: },
5423: {
5424: 0b000000000000000000000,
5425: 0b000000000000000000000,
5426: 0b000000000000000000000,
5427: 0b001000101111100111000,
5428: 0b001000101000001000100,
5429: 0b000101001000000000100,
5430: 0b000010001111000011000,
5431: 0b000101001000000000100,
5432: 0b001000101000001000100,
5433: 0b001000101000000111000,
5434: 0b000000000000000000000,
5435: 0b000000000000000000000,
5436: 0b000000000000000000000,
5437: },
5438: {
5439: 0b000000000000000000000,
5440: 0b000000000000000000000,
5441: 0b000000000000000000000,
5442: 0b001000101111100001000,
5443: 0b001000101000000011000,
5444: 0b000101001000000101000,
5445: 0b000010001111001001000,
5446: 0b000101001000001111100,
5447: 0b001000101000000001000,
5448: 0b001000101000000001000,
5449: 0b000000000000000000000,
5450: 0b000000000000000000000,
5451: 0b000000000000000000000,
5452: },
5453: {
5454: 0b000000000000000000000,
5455: 0b000000000000000000000,
5456: 0b000000000000000000000,
5457: 0b001000101111101111100,
5458: 0b001000101000001000000,
5459: 0b000101001000001111000,
5460: 0b000010001111000000100,
5461: 0b000101001000000000100,
5462: 0b001000101000001000100,
5463: 0b001000101000000111000,
5464: 0b000000000000000000000,
5465: 0b000000000000000000000,
5466: 0b000000000000000000000,
5467: },
5468: {
5469: 0b000000000000000000000,
5470: 0b000000000000000000000,
5471: 0b000000000000000000000,
5472: 0b011001100111001001010,
5473: 0b010101010100010101010,
5474: 0b010101010100010101010,
5475: 0b011001100111011101100,
5476: 0b010101010100010101010,
5477: 0b010101010100010101010,
5478: 0b011001010111010101010,
5479: 0b000000000000000000000,
5480: 0b000000000000000000000,
5481: 0b000000000000000000000,
5482: },
5483: {
5484: 0b000000000000000000000,
5485: 0b000000000000000000000,
5486: 0b000000000000000000000,
5487: 0b001100011001110100010,
5488: 0b010010100101001100010,
5489: 0b010000100101001010100,
5490: 0b010000100101110001000,
5491: 0b010000100101000001000,
5492: 0b010010100101000001000,
5493: 0b001100011001000001000,
5494: 0b000000000000000000000,
5495: 0b000000000000000000000,
5496: 0b000000000000000000000,
5497: },
5498: {
5499: 0b000000000000000000000000000,
5500: 0b000000000000000000000000000,
5501: 0b000000001111100010000000000,
5502: 0b000000001000000110000000000,
5503: 0b000000001000000010000000000,
5504: 0b000000001111000010000000000,
5505: 0b000000001000000010000000000,
5506: 0b000000001000000010000000000,
5507: 0b000000001000000010000000000,
5508: 0b000000000000000000000000000,
5509: 0b000000000000000000000000000,
5510: },
5511: {
5512: 0b000000000000000000000000000,
5513: 0b000000000000000000000000000,
5514: 0b000000001111100111000000000,
5515: 0b000000001000001000100000000,
5516: 0b000000001000000000100000000,
5517: 0b000000001111000011000000000,
5518: 0b000000001000000100000000000,
5519: 0b000000001000001000000000000,
5520: 0b000000001000001111100000000,
5521: 0b000000000000000000000000000,
5522: 0b000000000000000000000000000,
5523: },
5524: {
5525: 0b000000000000000000000000000,
5526: 0b000000000000000000000000000,
5527: 0b000000001111100111000000000,
5528: 0b000000001000001000100000000,
5529: 0b000000001000000000100000000,
5530: 0b000000001111000011000000000,
5531: 0b000000001000000000100000000,
5532: 0b000000001000001000100000000,
5533: 0b000000001000000111000000000,
5534: 0b000000000000000000000000000,
5535: 0b000000000000000000000000000,
5536: },
5537: {
5538: 0b000000000000000000000000000,
5539: 0b000000000000000000000000000,
5540: 0b000000001111100001000000000,
5541: 0b000000001000000011000000000,
5542: 0b000000001000000101000000000,
5543: 0b000000001111001001000000000,
5544: 0b000000001000001111100000000,
5545: 0b000000001000000001000000000,
5546: 0b000000001000000001000000000,
5547: 0b000000000000000000000000000,
5548: 0b000000000000000000000000000,
5549: },
5550: {
5551: 0b000000000000000000000000000,
5552: 0b000000000000000000000000000,
5553: 0b000000001111101111100000000,
5554: 0b000000001000001000000000000,
5555: 0b000000001000001111000000000,
5556: 0b000000001111000000100000000,
5557: 0b000000001000000000100000000,
5558: 0b000000001000001000100000000,
5559: 0b000000001000000111000000000,
5560: 0b000000000000000000000000000,
5561: 0b000000000000000000000000000,
5562: },
5563: {
5564: 0b000000000000000000000000000,
5565: 0b000000000000000000000000000,
5566: 0b000000001111100011000000000,
5567: 0b000000001000000100000000000,
5568: 0b000000001000001000000000000,
5569: 0b000000001111001111000000000,
5570: 0b000000001000001000100000000,
5571: 0b000000001000001000100000000,
5572: 0b000000001000000111000000000,
5573: 0b000000000000000000000000000,
5574: 0b000000000000000000000000000,
5575: },
5576: {
5577: 0b000000000000000000000000000,
5578: 0b000000000000000000000000000,
5579: 0b000000001111101111100000000,
5580: 0b000000001000000000100000000,
5581: 0b000000001000000000100000000,
5582: 0b000000001111000001000000000,
5583: 0b000000001000000010000000000,
5584: 0b000000001000000010000000000,
5585: 0b000000001000000010000000000,
5586: 0b000000000000000000000000000,
5587: 0b000000000000000000000000000,
5588: },
5589: {
5590: 0b000000000000000000000000000,
5591: 0b000000000000000000000000000,
5592: 0b000000001111100111000000000,
5593: 0b000000001000001000100000000,
5594: 0b000000001000001000100000000,
5595: 0b000000001111000111000000000,
5596: 0b000000001000001000100000000,
5597: 0b000000001000001000100000000,
5598: 0b000000001000000111000000000,
5599: 0b000000000000000000000000000,
5600: 0b000000000000000000000000000,
5601: },
5602: {
5603: 0b000000000000000000000000000,
5604: 0b000000000000000000000000000,
5605: 0b000000001111100111000000000,
5606: 0b000000001000001000100000000,
5607: 0b000000001000001000100000000,
5608: 0b000000001111000111100000000,
5609: 0b000000001000000000100000000,
5610: 0b000000001000000001000000000,
5611: 0b000000001000000110000000000,
5612: 0b000000000000000000000000000,
5613: 0b000000000000000000000000000,
5614: },
5615: {
5616: 0b000000000000000000000000000,
5617: 0b000000000000000000000000000,
5618: 0b000001111100010000111000000,
5619: 0b000001000000110001000100000,
5620: 0b000001000000010001000100000,
5621: 0b000001111000010001000100000,
5622: 0b000001000000010001000100000,
5623: 0b000001000000010001000100000,
5624: 0b000001000000010000111000000,
5625: 0b000000000000000000000000000,
5626: 0b000000000000000000000000000,
5627: },
5628: {
5629: 0b0000000,0b00000000000000000000000000000000,
5630: 0b0000000,0b00000000000000000000000000000000,
5631: 0b0000000,0b00000000000000000000000000000000,
5632: 0b0000001,0b11001000100111001111101111100000,
5633: 0b0000010,0b00101000100010001000000010000000,
5634: 0b0000010,0b00001000100010001000000010000000,
5635: 0b0000001,0b11001111100010001111000010000000,
5636: 0b0000000,0b00101000100010001000000010000000,
5637: 0b0000010,0b00101000100010001000000010000000,
5638: 0b0000001,0b11001000100111001000000010000000,
5639: 0b0000000,0b00000000000000000000000000000000,
5640: 0b0000000,0b00000000000000000000000000000000,
5641: 0b0000000,0b00000000000000000000000000000000,
5642: },
5643: {
5644: 0b000000000000000000000000000,
5645: 0b000000000000000000000000000,
5646: 0b000000000000000000000000000,
5647: 0b000111001111101111001000000,
5648: 0b001000100010001000101000000,
5649: 0b001000000010001000101000000,
5650: 0b001000000010001111001000000,
5651: 0b001000000010001000101000000,
5652: 0b001000100010001000101000000,
5653: 0b000111000010001000101111100,
5654: 0b000000000000000000000000000,
5655: 0b000000000000000000000000000,
5656: 0b000000000000000000000000000,
5657: },
5658: {
5659: 0b000000000000000000000,
5660: 0b000000000000000000000,
5661: 0b000000000000000000000,
5662: 0b000110011100111000100,
5663: 0b001001010010010001100,
5664: 0b001001010010010000100,
5665: 0b001001011100010000100,
5666: 0b001001010000010000100,
5667: 0b001001010000010000100,
5668: 0b000110010000010100100,
5669: 0b000000000000000000000,
5670: 0b000000000000000000000,
5671: 0b000000000000000000000,
5672: },
5673: {
5674: 0b000000000000000000000,
5675: 0b000000000000000000000,
5676: 0b000000000000000000000,
5677: 0b001100111001110001100,
5678: 0b010010100100100010010,
5679: 0b010010100100100000010,
5680: 0b010010111000100000100,
5681: 0b010010100000100001000,
5682: 0b010010100000100010000,
5683: 0b001100100000101011110,
5684: 0b000000000000000000000,
5685: 0b000000000000000000000,
5686: 0b000000000000000000000,
5687: },
5688: };
5689:
5690:
5691:
5692:
5693: public static final int[][][] kbdVarStatBitmap = new int[256][][];
5694: public static final int[][][] kbdLedStatBitmap = new int[KBD_LED_KEYS][][];
5695:
5696:
5697:
5698:
5699:
5700:
5701:
5702:
5703:
5704:
5705:
5706:
5707: public static final BufferedImage[] kbdDataTypeImage = new BufferedImage[KBD_TYPES];
5708: public static final int[] kbdDataTypeWidth = new int[KBD_TYPES];
5709: public static final int[] kbdDataTypeHeight = new int[KBD_TYPES];
5710: public static final int[][] kbdDataTypeBitmap = new int[KBD_TYPES][];
5711: public static final byte[][] kbdDataTypeIndexMap = new byte[KBD_TYPES][];
5712: public static final int[][][] kbdDataTypeStatFixBitmap = new int[KBD_TYPES][][];
5713: public static final int[][][] kbdDataTypeIndexRect = new int[KBD_TYPES][][];
5714: public static final int[][] kbdDataTypeIndexCharacterStat = new int[KBD_TYPES][];
5715:
5716:
5717: public static boolean kbdUSLayoutOn;
5718: public static int[] kbdDefaultMapNonZ;
5719: public static int[] kbdCurrentMapNonZ;
5720: public static int[] kbdCurrentMap;
5721:
5722:
5723:
5724: public static boolean kbdOn;
5725: public static int kbdType;
5726: public static int kbdWidth;
5727: public static int kbdHeight;
5728: public static BufferedImage kbdImage;
5729: public static int[] kbdBitmap;
5730: public static byte[] kbdIndexMap;
5731: public static final int[] kbdStat = new int[KBD_ALL_KEYS];
5732: public static int kbdPointedIndex;
5733: public static TimerTask kbdRepeatTask;
5734: public static int kbdRepeatDelay;
5735: public static int kbdRepeatInterval;
5736: public static int kbdLedBrightness;
5737:
5738: public static final int KBD_F11_FULLSCREEN = 0;
5739: public static final int KBD_F11_SCREENSHOT = 1;
5740: public static final int KBD_F11_GIFANIMATION = 2;
5741: public static final int KBD_F11_STOPANDSTART = 3;
5742: public static final int KBD_F11_DO_NOTHING = 4;
5743: public static int kbdF11Mode;
5744:
5745:
5746: public static final boolean KBD_ZKEY_ON = true;
5747: public static boolean kbdZKeyOnRequest;
5748: public static boolean kbdZKeyOn;
5749: public static int kbdZKeyStatus;
5750: public static ZKeyLEDPort kbdZKeyPort;
5751: public static boolean kbdZKeyDebugFlag;
5752:
5753:
5754:
5755:
5756:
5757:
5758:
5759:
5760:
5761:
5762:
5763:
5764:
5765:
5766:
5767: public static final int KBD_ZKEY_IO_ADDRESS = 0x00e9f040;
5768: public static final int KBD_ZKEY_IO_SIZE = 16;
5769: public static long kbdZKeyIOData;
5770: public static boolean kbdZKeyIOProgrammable;
5771:
5772:
5773:
5774:
5775:
5776:
5777:
5778:
5779:
5780: public static KeyEvent kbdXF4Locked;
5781: public static boolean kbdSavedNumLock;
5782: public static boolean kbdIgnoreNumLock;
5783:
5784: public static int[] kbdDefaultMapZ;
5785: public static int[] kbdCurrentMapZ;
5786:
5787: public static JMenu kbdF11KeyMenu;
5788: public static JMenu kbdZKeyMenu;
5789: public static JCheckBoxMenuItem kbdZKeyConnectCheckBox;
5790: public static JCheckBoxMenuItem kbdZKeyDemoCheckBox;
5791:
5792:
5793:
5794:
5795:
5796:
5797:
5798:
5799:
5800:
5801:
5802:
5803:
5804:
5805:
5806:
5807:
5808:
5809:
5810:
5811:
5812:
5813:
5814:
5815:
5816:
5817:
5818:
5819:
5820:
5821:
5822:
5823:
5824:
5825:
5826:
5827:
5828:
5829:
5830:
5831:
5832:
5833:
5834:
5835: public static final int[] KBD_DEFAULT_MAP_LINUX = {
5836:
5837:
5838: 0x001b_01b_1, 0x001b_009_1, 0x0000_000_0,
5839: 0x0031_031_1, 0x0031_00a_1, 0x0000_000_0,
5840: 0x0032_032_1, 0x0032_00b_1, 0x0000_000_0,
5841: 0x0033_033_1, 0x0033_00c_1, 0x0000_000_0,
5842: 0x0034_034_1, 0x0034_00d_1, 0x0000_000_0,
5843: 0x0035_035_1, 0x0035_00e_1, 0x0000_000_0,
5844: 0x0036_036_1, 0x0036_00f_1, 0x0000_000_0,
5845: 0x0037_037_1, 0x0037_010_1, 0x0000_000_0,
5846: 0x0038_038_1, 0x0038_011_1, 0x0000_000_0,
5847: 0x0039_039_1, 0x0039_012_1, 0x0000_000_0,
5848: 0x0030_030_1, 0x0030_013_1, 0x0000_000_0,
5849: 0x002d_0bd_1, 0x002d_014_1, 0x0000_000_0,
5850: 0x0202_0de_1, 0x0202_015_1, 0x0000_000_0,
5851: 0x005c_0dc_1, 0x005c_084_1, 0x0000_000_0,
5852: 0x0008_008_1, 0x0008_016_1, 0x0000_000_0,
5853: 0x0009_009_1, 0x0009_017_1, 0x0000_000_0,
5854: 0x0051_051_1, 0x0051_018_1, 0x0000_000_0,
5855: 0x0057_057_1, 0x0057_019_1, 0x0000_000_0,
5856: 0x0045_045_1, 0x0045_01a_1, 0x0000_000_0,
5857: 0x0052_052_1, 0x0052_01b_1, 0x0000_000_0,
5858: 0x0054_054_1, 0x0054_01c_1, 0x0000_000_0,
5859: 0x0059_059_1, 0x0059_01d_1, 0x0000_000_0,
5860: 0x0055_055_1, 0x0055_01e_1, 0x0000_000_0,
5861: 0x0049_049_1, 0x0049_01f_1, 0x0000_000_0,
5862: 0x004f_04f_1, 0x004f_020_1, 0x0000_000_0,
5863: 0x0050_050_1, 0x0050_021_1, 0x0000_000_0,
5864: 0x0200_0c0_1, 0x0200_022_1, 0x0000_000_0,
5865: 0x005b_0db_1, 0x005b_023_1, 0x0000_000_0,
5866: 0x000a_00d_1, 0x000a_024_1, 0x0000_000_0,
5867: 0x0041_041_1, 0x0041_026_1, 0x0000_000_0,
5868: 0x0053_053_1, 0x0053_027_1, 0x0000_000_0,
5869: 0x0044_044_1, 0x0044_028_1, 0x0000_000_0,
5870: 0x0046_046_1, 0x0046_029_1, 0x0000_000_0,
5871: 0x0047_047_1, 0x0047_02a_1, 0x0000_000_0,
5872: 0x0048_048_1, 0x0048_02b_1, 0x0000_000_0,
5873: 0x004a_04a_1, 0x004a_02c_1, 0x0000_000_0,
5874: 0x004b_04b_1, 0x004b_02d_1, 0x0000_000_0,
5875: 0x004c_04c_1, 0x004c_02e_1, 0x0000_000_0,
5876: 0x003b_0bb_1, 0x003b_02f_1, 0x0000_000_0,
5877: 0x0201_0ba_1, 0x0201_030_1, 0x0000_000_0,
5878: 0x005d_0dd_1, 0x005d_033_1, 0x0000_000_0,
5879: 0x005a_05a_1, 0x005a_034_1, 0x0000_000_0,
5880: 0x0058_058_1, 0x0058_035_1, 0x0000_000_0,
5881: 0x0043_043_1, 0x0043_036_1, 0x0000_000_0,
5882: 0x0056_056_1, 0x0056_037_1, 0x0000_000_0,
5883: 0x0042_042_1, 0x0042_038_1, 0x0000_000_0,
5884: 0x004e_04e_1, 0x004e_039_1, 0x0000_000_0,
5885: 0x004d_04d_1, 0x004d_03a_1, 0x0000_000_0,
5886: 0x002c_0bc_1, 0x002c_03b_1, 0x0000_000_0,
5887: 0x002e_0be_1, 0x002e_03c_1, 0x0000_000_0,
5888: 0x002f_0bf_1, 0x002f_03d_1, 0x0000_000_0,
5889: 0x005c_0e2_1, 0x005c_061_1, 0x0000_000_0,
5890: 0x0020_020_1, 0x0020_041_1, 0x0000_000_0,
5891: 0x0024_024_1, 0x0024_06e_1, 0x0000_000_0,
5892: 0x007f_02e_1, 0x007f_077_1, 0x0000_000_0,
5893: 0x0022_022_1, 0x0022_075_1, 0x0000_000_0,
5894: 0x0021_021_1, 0x0021_070_1, 0x0000_000_0,
5895: 0x0023_023_1, 0x0023_073_1, 0x0000_000_0,
5896: 0x0025_025_1, 0x0025_071_1, 0x0000_000_0,
5897: 0x0026_026_1, 0x0026_06f_1, 0x0000_000_0,
5898: 0x0027_027_1, 0x0027_072_1, 0x0000_000_0,
5899: 0x0028_028_1, 0x0028_074_1, 0x0000_000_0,
5900: 0x0090_090_4, 0x0000_000_0, 0x0000_000_0,
5901: 0x006f_06f_4, 0x0000_000_0, 0x0000_000_0,
5902: 0x006a_06a_4, 0x0000_000_0, 0x0000_000_0,
5903: 0x006d_06d_4, 0x0000_000_0, 0x0000_000_0,
5904: 0x0024_024_4, 0x0067_067_4, 0x0000_000_0,
5905: 0x0026_026_4, 0x0068_068_4, 0x0000_000_0,
5906: 0x0021_021_4, 0x0069_069_4, 0x0000_000_0,
5907: 0x006b_06b_4, 0x0000_000_0, 0x0000_000_0,
5908: 0x0025_025_4, 0x0064_064_4, 0x0000_000_0,
5909: 0x000c_00c_4, 0x0065_065_4, 0x0000_000_0,
5910: 0x0027_027_4, 0x0066_066_4, 0x0000_000_0,
5911: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5912: 0x0023_023_4, 0x0061_061_4, 0x0000_000_0,
5913: 0x0028_028_4, 0x0062_062_4, 0x0000_000_0,
5914: 0x0022_022_4, 0x0063_063_4, 0x0000_000_0,
5915: 0x000a_00d_4, 0x0000_000_0, 0x0000_000_0,
5916: 0x009b_02d_4, 0x0060_060_4, 0x0000_000_0,
5917: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5918: 0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0,
5919: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5920: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5921: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5922: 0x0012_012_2, 0x0012_040_2, 0x0000_000_0,
5923: 0x001d_01d_1, 0x001d_066_1, 0x0000_000_0,
5924: 0x0012_012_3, 0x0012_06c_3, 0x0000_000_0,
5925: 0x020d_05d_1, 0x0000_000_0, 0x0000_000_0,
5926: 0x0011_011_3, 0x0000_000_0, 0x0000_000_0,
5927: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5928: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5929: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5930: 0x0014_014_1, 0x0000_000_0, 0x0000_000_0,
5931: 0x009b_02d_1, 0x009b_076_1, 0x0000_000_0,
5932: 0x020c_05b_2, 0x0000_000_0, 0x0000_000_0,
5933: 0x020c_05c_3, 0x0000_000_0, 0x0000_000_0,
5934: 0x0013_013_1, 0x0000_000_0, 0x0000_000_0,
5935: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5936: 0x0070_070_1, 0x0070_043_1, 0x0000_000_0,
5937: 0x0071_071_1, 0x0071_044_1, 0x0000_000_0,
5938: 0x0072_072_1, 0x0072_045_1, 0x0000_000_0,
5939: 0x0073_073_1, 0x0073_046_1, 0x0000_000_0,
5940: 0x0074_074_1, 0x0074_047_1, 0x0000_000_0,
5941: 0x0075_075_1, 0x0075_048_1, 0x0000_000_0,
5942: 0x0076_076_1, 0x0076_049_1, 0x0000_000_0,
5943: 0x0077_077_1, 0x0077_04a_1, 0x0000_000_0,
5944: 0x0078_078_1, 0x0078_04b_1, 0x0000_000_0,
5945: 0x0079_079_1, 0x0079_04c_1, 0x0000_000_0,
5946: 0x0010_010_3, 0x0010_032_2, 0x0010_03e_3,
5947: 0x0011_011_2, 0x0011_042_2, 0x0000_000_0,
5948: 0x007a_05f_1, 0x0000_000_0, 0x0000_000_0,
5949: 0x007b_060_1, 0x0000_000_0, 0x0000_000_0,
5950: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
5951: };
5952:
5953:
5954:
5955:
5956:
5957:
5958:
5959:
5960:
5961:
5962:
5963:
5964:
5965:
5966:
5967:
5968:
5969:
5970:
5971:
5972:
5973:
5974:
5975:
5976: public static final int[] KBD_DEFAULT_MAP_MAC_US = {
5977:
5978:
5979: 0x0_01b_01b_1, 0x0_000_000_0, 0x0_000_000_0,
5980: 0x0_031_031_1, 0x0_031_205_1, 0x0_000_000_0,
5981: 0x0_032_032_1, 0x0_032_200_1, 0x0_000_000_0,
5982: 0x0_033_033_1, 0x0_033_208_1, 0x0_000_000_0,
5983: 0x0_034_034_1, 0x0_034_203_1, 0x0_000_000_0,
5984: 0x0_035_035_1, 0x0_035_000_1, 0x0_000_000_0,
5985: 0x0_036_036_1, 0x0_036_202_1, 0x0_000_000_0,
5986: 0x0_037_037_1, 0x0_037_096_1, 0x0_000_000_0,
5987: 0x0_038_038_1, 0x0_038_097_1, 0x0_000_000_0,
5988: 0x0_039_039_1, 0x0_039_207_1, 0x0_000_000_0,
5989: 0x0_030_030_1, 0x0_030_20a_1, 0x0_000_000_0,
5990: 0x0_02d_02d_1, 0x0_02d_20b_1, 0x0_02d_000_1,
5991: 0x0_03d_03d_1, 0x0_03d_209_1, 0x0_03d_000_1,
5992: 0x0_05c_05c_1, 0x1_05c_07c_1, 0x0_000_000_0,
5993: 0x0_008_008_1, 0x0_000_000_0, 0x0_000_000_0,
5994: 0x0_009_009_1, 0x0_000_000_0, 0x0_000_000_0,
5995: 0x0_051_051_1, 0x0_051_000_1, 0x0_000_000_0,
5996: 0x0_057_057_1, 0x0_057_000_1, 0x0_000_000_0,
5997: 0x0_045_045_1, 0x0_045_000_1, 0x0_000_000_0,
5998: 0x0_052_052_1, 0x0_052_000_1, 0x0_000_000_0,
5999: 0x0_054_054_1, 0x0_054_000_1, 0x0_000_000_0,
6000: 0x0_059_059_1, 0x0_059_000_1, 0x0_000_000_0,
6001: 0x0_055_055_1, 0x0_055_000_1, 0x0_000_000_0,
6002: 0x0_049_049_1, 0x0_049_000_1, 0x0_000_000_0,
6003: 0x0_04f_04f_1, 0x0_04f_000_1, 0x0_000_000_0,
6004: 0x0_050_050_1, 0x0_050_000_1, 0x0_000_000_0,
6005: 0x0_05b_05b_1, 0x0_05b_0a1_1, 0x0_000_000_0,
6006: 0x0_05d_05d_1, 0x0_05d_0a2_1, 0x0_05d_01b_1,
6007: 0x0_00a_00a_1, 0x0_00a_000_1, 0x0_000_000_0,
6008: 0x0_041_041_1, 0x0_041_000_1, 0x0_000_000_0,
6009: 0x0_053_053_1, 0x0_053_000_1, 0x0_000_000_0,
6010: 0x0_044_044_1, 0x0_044_000_1, 0x0_000_000_0,
6011: 0x0_046_046_1, 0x0_046_000_1, 0x0_000_000_0,
6012: 0x0_047_047_1, 0x0_047_000_1, 0x0_000_000_0,
6013: 0x0_048_048_1, 0x0_048_008_1, 0x0_000_000_0,
6014: 0x0_04a_04a_1, 0x0_04a_00a_1, 0x0_000_000_0,
6015: 0x0_04b_04b_1, 0x0_04b_000_1, 0x0_000_000_0,
6016: 0x0_04c_04c_1, 0x0_04c_000_1, 0x0_000_000_0,
6017: 0x0_03b_03b_1, 0x0_03b_201_1, 0x0_000_000_0,
6018: 0x0_0de_0de_1, 0x0_0de_098_1, 0x0_000_000_0,
6019: 0x0_0c0_0c0_1, 0x1_0c0_07e_1, 0x0_05c_000_1,
6020: 0x0_05a_05a_1, 0x0_05a_000_1, 0x0_000_000_0,
6021: 0x0_058_058_1, 0x0_058_000_1, 0x0_000_000_0,
6022: 0x0_043_043_1, 0x0_043_000_1, 0x0_000_000_0,
6023: 0x0_056_056_1, 0x0_056_000_1, 0x0_000_000_0,
6024: 0x0_042_042_1, 0x0_042_000_1, 0x0_000_000_0,
6025: 0x0_04e_04e_1, 0x0_04e_000_1, 0x0_000_000_0,
6026: 0x0_04d_04d_1, 0x0_04d_000_1, 0x0_000_000_0,
6027: 0x0_02c_02c_1, 0x0_02c_099_1, 0x0_000_000_0,
6028: 0x0_02e_02e_1, 0x0_02e_0a0_1, 0x0_000_000_0,
6029: 0x0_02f_02f_1, 0x0_02f_000_1, 0x0_000_000_0,
6030: 0x0_02d_20b_1, 0x0_20b_000_4, 0x0_000_000_0,
6031: 0x0_020_020_1, 0x0_000_000_0, 0x0_000_000_0,
6032: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6033: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6034: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6035: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6036: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6037: 0x0_025_025_1, 0x0_000_000_0, 0x0_000_000_0,
6038: 0x0_026_026_1, 0x0_000_000_0, 0x0_000_000_0,
6039: 0x0_027_027_1, 0x0_000_000_0, 0x0_000_000_0,
6040: 0x0_028_028_1, 0x0_000_000_0, 0x0_000_000_0,
6041: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6042: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6043: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6044: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6045: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6046: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6047: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6048: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6049: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6050: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6051: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6052: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6053: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6054: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6055: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6056: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6057: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6058: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6059: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6060: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6061: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6062: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6063: 0x0_012_012_2, 0x0_000_000_0, 0x0_000_000_0,
6064: 0x0_09d_09d_2, 0x0_000_000_0, 0x0_000_000_0,
6065: 0x0_09d_09d_3, 0x0_000_000_0, 0x0_000_000_0,
6066: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6067: 0x0_07b_07b_1, 0x0_000_000_0, 0x0_000_000_0,
6068: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6069: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6070: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6071: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6072: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6073: 0x0_014_014_1, 0x0_000_000_0, 0x0_000_000_0,
6074: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6075: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6076: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6077: 0x0_070_070_1, 0x0_000_000_0, 0x0_000_000_0,
6078: 0x0_071_071_1, 0x0_000_000_0, 0x0_000_000_0,
6079: 0x0_072_072_1, 0x0_000_000_0, 0x0_000_000_0,
6080: 0x0_073_073_1, 0x0_000_000_0, 0x0_000_000_0,
6081: 0x0_074_074_1, 0x0_000_000_0, 0x0_000_000_0,
6082: 0x0_075_075_1, 0x0_000_000_0, 0x0_000_000_0,
6083: 0x0_076_076_1, 0x0_000_000_0, 0x0_000_000_0,
6084: 0x0_077_077_1, 0x0_000_000_0, 0x0_000_000_0,
6085: 0x0_078_078_1, 0x0_000_000_0, 0x0_000_000_0,
6086: 0x0_079_079_1, 0x0_000_000_0, 0x0_000_000_0,
6087: 0x0_010_010_2, 0x0_010_010_3, 0x0_000_000_0,
6088: 0x0_011_011_2, 0x0_000_000_0, 0x0_000_000_0,
6089: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6090: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6091: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6092: };
6093:
6094:
6095: public static final int[] KBD_DEFAULT_MAP_MAC = {
6096:
6097:
6098: 0x0_01b_01b_1, 0x0_000_000_0, 0x0_000_000_0,
6099: 0x0_031_031_1, 0x0_031_205_1, 0x0_000_000_0,
6100: 0x0_032_032_1, 0x0_032_098_1, 0x0_000_000_0,
6101: 0x0_033_033_1, 0x0_033_208_1, 0x0_000_000_0,
6102: 0x0_034_034_1, 0x0_034_203_1, 0x0_000_000_0,
6103: 0x0_035_035_1, 0x0_035_000_1, 0x0_000_000_0,
6104: 0x0_036_036_1, 0x0_036_096_1, 0x0_000_000_0,
6105: 0x0_037_037_1, 0x0_037_0de_1, 0x0_000_000_0,
6106: 0x0_038_038_1, 0x0_038_207_1, 0x0_000_000_0,
6107: 0x0_039_039_1, 0x0_039_20a_1, 0x0_000_000_0,
6108: 0x0_030_030_1, 0x0_000_000_0, 0x0_000_000_0,
6109: 0x0_02d_02d_1, 0x0_02d_03d_1, 0x0_02d_000_1,
6110: 0x0_03d_202_1, 0x1_03d_07e_1, 0x0_03d_000_1,
6111: 0x1_05c_0a5_1, 0x1_05c_07c_1, 0x0_000_000_0,
6112: 0x0_008_008_1, 0x0_000_000_0, 0x0_000_000_0,
6113: 0x0_009_009_1, 0x0_000_000_0, 0x0_000_000_0,
6114: 0x0_051_051_1, 0x0_051_000_1, 0x0_000_000_0,
6115: 0x0_057_057_1, 0x0_057_000_1, 0x0_000_000_0,
6116: 0x0_045_045_1, 0x0_045_000_1, 0x0_000_000_0,
6117: 0x0_052_052_1, 0x0_052_000_1, 0x0_000_000_0,
6118: 0x0_054_054_1, 0x0_054_000_1, 0x0_000_000_0,
6119: 0x0_059_059_1, 0x0_059_000_1, 0x0_000_000_0,
6120: 0x0_055_055_1, 0x0_055_000_1, 0x0_000_000_0,
6121: 0x0_049_049_1, 0x0_049_000_1, 0x0_000_000_0,
6122: 0x0_04f_04f_1, 0x0_04f_000_1, 0x0_000_000_0,
6123: 0x0_050_050_1, 0x0_050_000_1, 0x0_000_000_0,
6124: 0x0_05b_200_1, 0x0_05b_0c0_1, 0x0_05b_020_1,
6125: 0x0_05d_05b_1, 0x0_05d_0a1_1, 0x0_05d_01b_1,
6126: 0x0_00a_00a_1, 0x0_000_000_0, 0x0_000_000_0,
6127: 0x0_041_041_1, 0x0_041_000_1, 0x0_000_000_0,
6128: 0x0_053_053_1, 0x0_053_000_1, 0x0_000_000_0,
6129: 0x0_044_044_1, 0x0_044_000_1, 0x0_000_000_0,
6130: 0x0_046_046_1, 0x0_046_000_1, 0x0_000_000_0,
6131: 0x0_047_047_1, 0x0_047_000_1, 0x0_000_000_0,
6132: 0x0_048_048_1, 0x0_048_008_1, 0x0_000_000_0,
6133: 0x0_04a_04a_1, 0x0_04a_00a_1, 0x0_000_000_0,
6134: 0x0_04b_04b_1, 0x0_04b_000_1, 0x0_000_000_0,
6135: 0x0_04c_04c_1, 0x0_04c_000_1, 0x0_000_000_0,
6136: 0x0_03b_03b_1, 0x0_03b_209_1, 0x0_000_000_0,
6137: 0x0_0de_201_1, 0x0_0de_097_1, 0x0_0de_0de_1,
6138: 0x0_05c_05d_1, 0x0_05c_0a2_1, 0x0_05c_000_1,
6139: 0x0_05a_05a_1, 0x0_05a_000_1, 0x0_000_000_0,
6140: 0x0_058_058_1, 0x0_058_000_1, 0x0_000_000_0,
6141: 0x0_043_043_1, 0x0_043_000_1, 0x0_000_000_0,
6142: 0x0_056_056_1, 0x0_056_000_1, 0x0_000_000_0,
6143: 0x0_042_042_1, 0x0_042_000_1, 0x0_000_000_0,
6144: 0x0_04e_04e_1, 0x0_04e_000_1, 0x0_000_000_0,
6145: 0x0_04d_04d_1, 0x0_04d_000_1, 0x0_000_000_0,
6146: 0x0_02c_02c_1, 0x0_02c_099_1, 0x0_000_000_0,
6147: 0x0_02e_02e_1, 0x0_02e_0a0_1, 0x0_000_000_0,
6148: 0x0_02f_02f_1, 0x0_02f_000_1, 0x0_000_000_0,
6149: 0x0_20b_20b_4, 0x0_20b_000_4, 0x0_000_000_0,
6150: 0x0_020_020_1, 0x0_000_000_0, 0x0_000_000_0,
6151: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6152: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6153: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6154: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6155: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6156: 0x0_025_025_1, 0x0_000_000_0, 0x0_000_000_0,
6157: 0x0_026_026_1, 0x0_000_000_0, 0x0_000_000_0,
6158: 0x0_027_027_1, 0x0_000_000_0, 0x0_000_000_0,
6159: 0x0_028_028_1, 0x0_000_000_0, 0x0_000_000_0,
6160: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6161: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6162: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6163: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6164: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6165: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6166: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6167: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6168: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6169: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6170: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6171: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6172: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6173: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6174: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6175: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6176: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6177: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6178: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6179: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6180: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6181: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6182: 0x0_012_012_2, 0x0_000_000_0, 0x0_000_000_0,
6183: 0x0_09d_09d_2, 0x0_000_000_0, 0x0_000_000_0,
6184: 0x0_09d_09d_3, 0x0_000_000_0, 0x0_000_000_0,
6185: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6186: 0x0_07b_07b_1, 0x0_000_000_0, 0x0_000_000_0,
6187: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6188: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6189: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6190: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6191: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6192: 0x0_014_014_1, 0x0_000_000_0, 0x0_000_000_0,
6193: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6194: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6195: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6196: 0x0_070_070_1, 0x0_000_000_0, 0x0_000_000_0,
6197: 0x0_071_071_1, 0x0_000_000_0, 0x0_000_000_0,
6198: 0x0_072_072_1, 0x0_000_000_0, 0x0_000_000_0,
6199: 0x0_073_073_1, 0x0_000_000_0, 0x0_000_000_0,
6200: 0x0_074_074_1, 0x0_000_000_0, 0x0_000_000_0,
6201: 0x0_075_075_1, 0x0_000_000_0, 0x0_000_000_0,
6202: 0x0_076_076_1, 0x0_000_000_0, 0x0_000_000_0,
6203: 0x0_077_077_1, 0x0_000_000_0, 0x0_000_000_0,
6204: 0x0_078_078_1, 0x0_000_000_0, 0x0_000_000_0,
6205: 0x0_079_079_1, 0x0_000_000_0, 0x0_000_000_0,
6206: 0x0_010_010_2, 0x0_010_010_3, 0x0_000_000_0,
6207: 0x0_011_011_2, 0x0_000_000_0, 0x0_000_000_0,
6208: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6209: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6210: 0x0_000_000_0, 0x0_000_000_0, 0x0_000_000_0,
6211: };
6212:
6213: public static final int[] KBD_DEFAULT_MAP_WIN_US = {
6214:
6215:
6216: 0x001b_01b_1, 0x0000_000_0, 0x0000_000_0,
6217: 0x0031_031_1, 0x0000_000_0, 0x0000_000_0,
6218: 0x0032_032_1, 0x0000_000_0, 0x0000_000_0,
6219: 0x0033_033_1, 0x0000_000_0, 0x0000_000_0,
6220: 0x0034_034_1, 0x0000_000_0, 0x0000_000_0,
6221: 0x0035_035_1, 0x0000_000_0, 0x0000_000_0,
6222: 0x0036_036_1, 0x0000_000_0, 0x0000_000_0,
6223: 0x0037_037_1, 0x0000_000_0, 0x0000_000_0,
6224: 0x0038_038_1, 0x0000_000_0, 0x0000_000_0,
6225: 0x0039_039_1, 0x0000_000_0, 0x0000_000_0,
6226: 0x0030_030_1, 0x0000_000_0, 0x0000_000_0,
6227: 0x002d_0bd_1, 0x0000_000_0, 0x0000_000_0,
6228: 0x003d_0bb_1, 0x0000_000_0, 0x0000_000_0,
6229: 0x00c0_0c0_1, 0x0000_0ff_1, 0x0000_000_0,
6230: 0x0008_008_1, 0x0000_000_0, 0x0000_000_0,
6231: 0x0009_009_1, 0x0000_000_0, 0x0000_000_0,
6232: 0x0051_051_1, 0x0000_000_0, 0x0000_000_0,
6233: 0x0057_057_1, 0x0000_000_0, 0x0000_000_0,
6234: 0x0045_045_1, 0x0000_000_0, 0x0000_000_0,
6235: 0x0052_052_1, 0x0000_000_0, 0x0000_000_0,
6236: 0x0054_054_1, 0x0000_000_0, 0x0000_000_0,
6237: 0x0059_059_1, 0x0000_000_0, 0x0000_000_0,
6238: 0x0055_055_1, 0x0000_000_0, 0x0000_000_0,
6239: 0x0049_049_1, 0x0000_000_0, 0x0000_000_0,
6240: 0x004f_04f_1, 0x0000_000_0, 0x0000_000_0,
6241: 0x0050_050_1, 0x0000_000_0, 0x0000_000_0,
6242: 0x005b_0db_1, 0x0000_000_0, 0x0000_000_0,
6243: 0x005d_0dd_1, 0x0000_000_0, 0x0000_000_0,
6244: 0x000a_00d_1, 0x0000_000_0, 0x0000_000_0,
6245: 0x0041_041_1, 0x0000_000_0, 0x0000_000_0,
6246: 0x0053_053_1, 0x0000_000_0, 0x0000_000_0,
6247: 0x0044_044_1, 0x0000_000_0, 0x0000_000_0,
6248: 0x0046_046_1, 0x0000_000_0, 0x0000_000_0,
6249: 0x0047_047_1, 0x0000_000_0, 0x0000_000_0,
6250: 0x0048_048_1, 0x0000_000_0, 0x0000_000_0,
6251: 0x004a_04a_1, 0x0000_000_0, 0x0000_000_0,
6252: 0x004b_04b_1, 0x0000_000_0, 0x0000_000_0,
6253: 0x004c_04c_1, 0x0000_000_0, 0x0000_000_0,
6254: 0x003b_0ba_1, 0x0000_000_0, 0x0000_000_0,
6255: 0x00de_0de_1, 0x0000_000_0, 0x0000_000_0,
6256: 0x005c_0dc_1, 0x0000_000_0, 0x0000_000_0,
6257: 0x005a_05a_1, 0x0000_000_0, 0x0000_000_0,
6258: 0x0058_058_1, 0x0000_000_0, 0x0000_000_0,
6259: 0x0043_043_1, 0x0000_000_0, 0x0000_000_0,
6260: 0x0056_056_1, 0x0000_000_0, 0x0000_000_0,
6261: 0x0042_042_1, 0x0000_000_0, 0x0000_000_0,
6262: 0x004e_04e_1, 0x0000_000_0, 0x0000_000_0,
6263: 0x004d_04d_1, 0x0000_000_0, 0x0000_000_0,
6264: 0x002c_0bc_1, 0x0000_000_0, 0x0000_000_0,
6265: 0x002e_0be_1, 0x0000_000_0, 0x0000_000_0,
6266: 0x002f_0bf_1, 0x0000_000_0, 0x0000_000_0,
6267: 0x0000_0c1_1, 0x0000_000_0, 0x0000_000_0,
6268: 0x0020_020_1, 0x0000_000_0, 0x0000_000_0,
6269: 0x0024_024_1, 0x0000_000_0, 0x0000_000_0,
6270: 0x007f_02e_1, 0x0000_000_0, 0x0000_000_0,
6271: 0x0022_022_1, 0x0000_000_0, 0x0000_000_0,
6272: 0x0021_021_1, 0x0000_000_0, 0x0000_000_0,
6273: 0x0023_023_1, 0x0000_000_0, 0x0000_000_0,
6274: 0x0025_025_1, 0x0000_000_0, 0x0000_000_0,
6275: 0x0026_026_1, 0x0000_000_0, 0x0000_000_0,
6276: 0x0027_027_1, 0x0000_000_0, 0x0000_000_0,
6277: 0x0028_028_1, 0x0000_000_0, 0x0000_000_0,
6278: 0x0090_090_4, 0x0000_000_0, 0x0000_000_0,
6279: 0x006f_06f_4, 0x0000_000_0, 0x0000_000_0,
6280: 0x006a_06a_4, 0x0000_000_0, 0x0000_000_0,
6281: 0x006d_06d_4, 0x0000_000_0, 0x0000_000_0,
6282: 0x0024_024_4, 0x0067_067_4, 0x0000_000_0,
6283: 0x0026_026_4, 0x0068_068_4, 0x0000_000_0,
6284: 0x0021_021_4, 0x0069_069_4, 0x0000_000_0,
6285: 0x006b_06b_4, 0x0000_000_0, 0x0000_000_0,
6286: 0x0025_025_4, 0x0064_064_4, 0x0000_000_0,
6287: 0x000c_00c_4, 0x0065_065_4, 0x0000_000_0,
6288: 0x0027_027_4, 0x0066_066_4, 0x0000_000_0,
6289: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6290: 0x0023_023_4, 0x0061_061_4, 0x0000_000_0,
6291: 0x0028_028_4, 0x0062_062_4, 0x0000_000_0,
6292: 0x0022_022_4, 0x0063_063_4, 0x0000_000_0,
6293: 0x000a_00d_4, 0x0000_000_0, 0x0000_000_0,
6294: 0x009b_02d_4, 0x0060_060_4, 0x0000_000_0,
6295: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6296: 0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0,
6297: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6298: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6299: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6300: 0x0012_012_2, 0x0000_000_0, 0x0000_000_0,
6301: 0x0000_0eb_1, 0x0000_000_0, 0x0000_000_0,
6302: 0x0012_012_3, 0x0000_000_0, 0x0000_000_0,
6303: 0x020d_05d_1, 0x0000_000_0, 0x0000_000_0,
6304: 0x0011_011_3, 0x0000_000_0, 0x0000_000_0,
6305: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6306: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6307: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6308: 0x0014_014_1, 0x0000_000_0, 0x0000_000_0,
6309: 0x009b_02d_1, 0x0000_000_0, 0x0000_000_0,
6310: 0x020c_05b_2, 0x0000_000_0, 0x0000_000_0,
6311: 0x020c_05c_3, 0x0000_000_0, 0x0000_000_0,
6312: 0x0013_013_1, 0x0000_000_0, 0x0000_000_0,
6313: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6314: 0x0070_070_1, 0x0000_000_0, 0x0000_000_0,
6315: 0x0071_071_1, 0x0000_000_0, 0x0000_000_0,
6316: 0x0072_072_1, 0x0000_000_0, 0x0000_000_0,
6317: 0x0073_073_1, 0x0000_000_0, 0x0000_000_0,
6318: 0x0074_074_1, 0x0000_000_0, 0x0000_000_0,
6319: 0x0075_075_1, 0x0000_000_0, 0x0000_000_0,
6320: 0x0076_076_1, 0x0000_000_0, 0x0000_000_0,
6321: 0x0077_077_1, 0x0000_000_0, 0x0000_000_0,
6322: 0x0078_078_1, 0x0000_000_0, 0x0000_000_0,
6323: 0x0079_079_1, 0x0000_000_0, 0x0000_000_0,
6324: 0x0010_010_2, 0x0010_010_3, 0x0000_000_0,
6325: 0x0011_011_2, 0x0000_000_0, 0x0000_000_0,
6326: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6327: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6328: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6329: };
6330:
6331: public static final int[] KBD_DEFAULT_MAP_WIN = {
6332:
6333:
6334: 0x001b_01b_1, 0x0000_000_0, 0x0000_000_0,
6335: 0x0031_031_1, 0x0000_000_0, 0x0000_000_0,
6336: 0x0032_032_1, 0x0000_000_0, 0x0000_000_0,
6337: 0x0033_033_1, 0x0000_000_0, 0x0000_000_0,
6338: 0x0034_034_1, 0x0000_000_0, 0x0000_000_0,
6339: 0x0035_035_1, 0x0000_000_0, 0x0000_000_0,
6340: 0x0036_036_1, 0x0000_000_0, 0x0000_000_0,
6341: 0x0037_037_1, 0x0000_000_0, 0x0000_000_0,
6342: 0x0038_038_1, 0x0000_000_0, 0x0000_000_0,
6343: 0x0039_039_1, 0x0000_000_0, 0x0000_000_0,
6344: 0x0030_030_1, 0x0000_000_0, 0x0000_000_0,
6345: 0x002d_0bd_1, 0x0000_000_0, 0x0000_000_0,
6346: 0x0202_0de_1, 0x0000_000_0, 0x0000_000_0,
6347: 0x005c_0dc_1, 0x0000_000_0, 0x0000_000_0,
6348: 0x0008_008_1, 0x0000_000_0, 0x0000_000_0,
6349: 0x0009_009_1, 0x0000_000_0, 0x0000_000_0,
6350: 0x0051_051_1, 0x0000_000_0, 0x0000_000_0,
6351: 0x0057_057_1, 0x0000_000_0, 0x0000_000_0,
6352: 0x0045_045_1, 0x0000_000_0, 0x0000_000_0,
6353: 0x0052_052_1, 0x0000_000_0, 0x0000_000_0,
6354: 0x0054_054_1, 0x0000_000_0, 0x0000_000_0,
6355: 0x0059_059_1, 0x0000_000_0, 0x0000_000_0,
6356: 0x0055_055_1, 0x0000_000_0, 0x0000_000_0,
6357: 0x0049_049_1, 0x0000_000_0, 0x0000_000_0,
6358: 0x004f_04f_1, 0x0000_000_0, 0x0000_000_0,
6359: 0x0050_050_1, 0x0000_000_0, 0x0000_000_0,
6360: 0x0200_0c0_1, 0x0000_000_0, 0x0000_000_0,
6361: 0x005b_0db_1, 0x0000_000_0, 0x0000_000_0,
6362: 0x000a_00d_1, 0x0000_000_0, 0x0000_000_0,
6363: 0x0041_041_1, 0x0000_000_0, 0x0000_000_0,
6364: 0x0053_053_1, 0x0000_000_0, 0x0000_000_0,
6365: 0x0044_044_1, 0x0000_000_0, 0x0000_000_0,
6366: 0x0046_046_1, 0x0000_000_0, 0x0000_000_0,
6367: 0x0047_047_1, 0x0000_000_0, 0x0000_000_0,
6368: 0x0048_048_1, 0x0000_000_0, 0x0000_000_0,
6369: 0x004a_04a_1, 0x0000_000_0, 0x0000_000_0,
6370: 0x004b_04b_1, 0x0000_000_0, 0x0000_000_0,
6371: 0x004c_04c_1, 0x0000_000_0, 0x0000_000_0,
6372: 0x003b_0bb_1, 0x0000_000_0, 0x0000_000_0,
6373: 0x0201_0ba_1, 0x0000_000_0, 0x0000_000_0,
6374: 0x005d_0dd_1, 0x0000_000_0, 0x0000_000_0,
6375: 0x005a_05a_1, 0x0000_000_0, 0x0000_000_0,
6376: 0x0058_058_1, 0x0000_000_0, 0x0000_000_0,
6377: 0x0043_043_1, 0x0000_000_0, 0x0000_000_0,
6378: 0x0056_056_1, 0x0000_000_0, 0x0000_000_0,
6379: 0x0042_042_1, 0x0000_000_0, 0x0000_000_0,
6380: 0x004e_04e_1, 0x0000_000_0, 0x0000_000_0,
6381: 0x004d_04d_1, 0x0000_000_0, 0x0000_000_0,
6382: 0x002c_0bc_1, 0x0000_000_0, 0x0000_000_0,
6383: 0x002e_0be_1, 0x0000_000_0, 0x0000_000_0,
6384: 0x002f_0bf_1, 0x0000_000_0, 0x0000_000_0,
6385: 0x005c_0e2_1, 0x0000_000_0, 0x0000_000_0,
6386: 0x0020_020_1, 0x0000_000_0, 0x0000_000_0,
6387: 0x0024_024_1, 0x0000_000_0, 0x0000_000_0,
6388: 0x007f_02e_1, 0x0000_000_0, 0x0000_000_0,
6389: 0x0022_022_1, 0x0000_000_0, 0x0000_000_0,
6390: 0x0021_021_1, 0x0000_000_0, 0x0000_000_0,
6391: 0x0023_023_1, 0x0000_000_0, 0x0000_000_0,
6392: 0x0025_025_1, 0x0000_000_0, 0x0000_000_0,
6393: 0x0026_026_1, 0x0000_000_0, 0x0000_000_0,
6394: 0x0027_027_1, 0x0000_000_0, 0x0000_000_0,
6395: 0x0028_028_1, 0x0000_000_0, 0x0000_000_0,
6396: 0x0090_090_4, 0x0000_000_0, 0x0000_000_0,
6397: 0x006f_06f_4, 0x0000_000_0, 0x0000_000_0,
6398: 0x006a_06a_4, 0x0000_000_0, 0x0000_000_0,
6399: 0x006d_06d_4, 0x0000_000_0, 0x0000_000_0,
6400: 0x0024_024_4, 0x0067_067_4, 0x0000_000_0,
6401: 0x0026_026_4, 0x0068_068_4, 0x0000_000_0,
6402: 0x0021_021_4, 0x0069_069_4, 0x0000_000_0,
6403: 0x006b_06b_4, 0x0000_000_0, 0x0000_000_0,
6404: 0x0025_025_4, 0x0064_064_4, 0x0000_000_0,
6405: 0x000c_00c_4, 0x0065_065_4, 0x0000_000_0,
6406: 0x0027_027_4, 0x0066_066_4, 0x0000_000_0,
6407: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6408: 0x0023_023_4, 0x0061_061_4, 0x0000_000_0,
6409: 0x0028_028_4, 0x0062_062_4, 0x0000_000_0,
6410: 0x0022_022_4, 0x0063_063_4, 0x0000_000_0,
6411: 0x000a_00d_4, 0x0000_000_0, 0x0000_000_0,
6412: 0x009b_02d_4, 0x0060_060_4, 0x0000_000_0,
6413: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6414: 0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0,
6415: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6416: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6417: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6418: 0x0012_012_2, 0x0000_000_0, 0x0000_000_0,
6419: 0x001d_01d_1, 0x0000_000_0, 0x0000_000_0,
6420: 0x0012_012_3, 0x0000_000_0, 0x0000_000_0,
6421: 0x020d_05d_1, 0x0000_000_0, 0x0000_000_0,
6422: 0x0011_011_3, 0x0000_000_0, 0x0000_000_0,
6423: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6424: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6425: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6426: 0x0014_014_1, 0x0000_000_0, 0x0000_000_0,
6427: 0x009b_02d_1, 0x0000_000_0, 0x0000_000_0,
6428: 0x020c_05b_2, 0x0000_000_0, 0x0000_000_0,
6429: 0x020c_05c_3, 0x0000_000_0, 0x0000_000_0,
6430: 0x0013_013_1, 0x0000_000_0, 0x0000_000_0,
6431: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6432: 0x0070_070_1, 0x0000_000_0, 0x0000_000_0,
6433: 0x0071_071_1, 0x0000_000_0, 0x0000_000_0,
6434: 0x0072_072_1, 0x0000_000_0, 0x0000_000_0,
6435: 0x0073_073_1, 0x0000_000_0, 0x0000_000_0,
6436: 0x0074_074_1, 0x0000_000_0, 0x0000_000_0,
6437: 0x0075_075_1, 0x0000_000_0, 0x0000_000_0,
6438: 0x0076_076_1, 0x0000_000_0, 0x0000_000_0,
6439: 0x0077_077_1, 0x0000_000_0, 0x0000_000_0,
6440: 0x0078_078_1, 0x0000_000_0, 0x0000_000_0,
6441: 0x0079_079_1, 0x0000_000_0, 0x0000_000_0,
6442: 0x0010_010_2, 0x0010_010_3, 0x0000_000_0,
6443: 0x0011_011_2, 0x0000_000_0, 0x0000_000_0,
6444: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6445: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6446: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6447: };
6448:
6449: public static final int[] KBD_DEFAULT_MAP_ZKEY = {
6450:
6451:
6452: 0x001b_01b_1, 0x0000_000_0, 0x0000_000_0,
6453: 0x0031_031_1, 0x0000_000_0, 0x0000_000_0,
6454: 0x0032_032_1, 0x0000_000_0, 0x0000_000_0,
6455: 0x0033_033_1, 0x0000_000_0, 0x0000_000_0,
6456: 0x0034_034_1, 0x0000_000_0, 0x0000_000_0,
6457: 0x0035_035_1, 0x0000_000_0, 0x0000_000_0,
6458: 0x0036_036_1, 0x0000_000_0, 0x0000_000_0,
6459: 0x0037_037_1, 0x0000_000_0, 0x0000_000_0,
6460: 0x0038_038_1, 0x0000_000_0, 0x0000_000_0,
6461: 0x0039_039_1, 0x0000_000_0, 0x0000_000_0,
6462: 0x0030_030_1, 0x0000_000_0, 0x0000_000_0,
6463: 0x002d_0bd_1, 0x0000_000_0, 0x0000_000_0,
6464: 0x0202_0de_1, 0x0000_000_0, 0x0000_000_0,
6465: 0x005c_0dc_1, 0x0000_000_0, 0x0000_000_0,
6466: 0x0008_008_1, 0x0000_000_0, 0x0000_000_0,
6467: 0x0009_009_1, 0x0000_000_0, 0x0000_000_0,
6468: 0x0051_051_1, 0x0000_000_0, 0x0000_000_0,
6469: 0x0057_057_1, 0x0000_000_0, 0x0000_000_0,
6470: 0x0045_045_1, 0x0000_000_0, 0x0000_000_0,
6471: 0x0052_052_1, 0x0000_000_0, 0x0000_000_0,
6472: 0x0054_054_1, 0x0000_000_0, 0x0000_000_0,
6473: 0x0059_059_1, 0x0000_000_0, 0x0000_000_0,
6474: 0x0055_055_1, 0x0000_000_0, 0x0000_000_0,
6475: 0x0049_049_1, 0x0000_000_0, 0x0000_000_0,
6476: 0x004f_04f_1, 0x0000_000_0, 0x0000_000_0,
6477: 0x0050_050_1, 0x0000_000_0, 0x0000_000_0,
6478: 0x0200_0c0_1, 0x0000_000_0, 0x0000_000_0,
6479: 0x005b_0db_1, 0x0000_000_0, 0x0000_000_0,
6480: 0x000a_00d_1, 0x0000_000_0, 0x0000_000_0,
6481: 0x0041_041_1, 0x0000_000_0, 0x0000_000_0,
6482: 0x0053_053_1, 0x0000_000_0, 0x0000_000_0,
6483: 0x0044_044_1, 0x0000_000_0, 0x0000_000_0,
6484: 0x0046_046_1, 0x0000_000_0, 0x0000_000_0,
6485: 0x0047_047_1, 0x0000_000_0, 0x0000_000_0,
6486: 0x0048_048_1, 0x0000_000_0, 0x0000_000_0,
6487: 0x004a_04a_1, 0x0000_000_0, 0x0000_000_0,
6488: 0x004b_04b_1, 0x0000_000_0, 0x0000_000_0,
6489: 0x004c_04c_1, 0x0000_000_0, 0x0000_000_0,
6490: 0x003b_0bb_1, 0x0000_000_0, 0x0000_000_0,
6491: 0x0201_0ba_1, 0x0000_000_0, 0x0000_000_0,
6492: 0x005d_0dd_1, 0x0000_000_0, 0x0000_000_0,
6493: 0x005a_05a_1, 0x0000_000_0, 0x0000_000_0,
6494: 0x0058_058_1, 0x0000_000_0, 0x0000_000_0,
6495: 0x0043_043_1, 0x0000_000_0, 0x0000_000_0,
6496: 0x0056_056_1, 0x0000_000_0, 0x0000_000_0,
6497: 0x0042_042_1, 0x0000_000_0, 0x0000_000_0,
6498: 0x004e_04e_1, 0x0000_000_0, 0x0000_000_0,
6499: 0x004d_04d_1, 0x0000_000_0, 0x0000_000_0,
6500: 0x002c_0bc_1, 0x0000_000_0, 0x0000_000_0,
6501: 0x002e_0be_1, 0x0000_000_0, 0x0000_000_0,
6502: 0x002f_0bf_1, 0x0000_000_0, 0x0000_000_0,
6503: 0x005c_0e2_1, 0x0000_000_0, 0x0000_000_0,
6504: 0x0020_020_1, 0x0000_000_0, 0x0000_000_0,
6505: 0x0024_024_1, 0x0000_000_0, 0x0000_000_0,
6506: 0x007f_02e_1, 0x0000_000_0, 0x0000_000_0,
6507: 0x0021_021_1, 0x0000_000_0, 0x0000_000_0,
6508: 0x0022_022_1, 0x0000_000_0, 0x0000_000_0,
6509: 0x0023_023_1, 0x0000_000_0, 0x0000_000_0,
6510: 0x0025_025_1, 0x0000_000_0, 0x0000_000_0,
6511: 0x0026_026_1, 0x0000_000_0, 0x0000_000_0,
6512: 0x0027_027_1, 0x0000_000_0, 0x0000_000_0,
6513: 0x0028_028_1, 0x0000_000_0, 0x0000_000_0,
6514: 0x0090_090_4, 0x0000_000_0, 0x0000_000_0,
6515: 0x006f_06f_4, 0x0000_000_0, 0x0000_000_0,
6516: 0x006a_06a_4, 0x0000_000_0, 0x0000_000_0,
6517: 0x006d_06d_4, 0x0000_000_0, 0x0000_000_0,
6518: 0x0024_024_4, 0x0067_067_4, 0x0000_000_0,
6519: 0x0026_026_4, 0x0068_068_4, 0x0000_000_0,
6520: 0x0021_021_4, 0x0069_069_4, 0x0000_000_0,
6521: 0x006b_06b_4, 0x0000_000_0, 0x0000_000_0,
6522: 0x0025_025_4, 0x0064_064_4, 0x0000_000_0,
6523: 0x0065_065_4, 0x0000_000_0, 0x0000_000_0,
6524: 0x0027_027_4, 0x0066_066_4, 0x0000_000_0,
6525: 0x000c_00c_4, 0x0000_000_0, 0x0000_000_0,
6526: 0x0023_023_4, 0x0061_061_4, 0x0000_000_0,
6527: 0x0028_028_4, 0x0062_062_4, 0x0000_000_0,
6528: 0x0022_022_4, 0x0063_063_4, 0x0000_000_0,
6529: 0x000a_00d_4, 0x0000_000_0, 0x0000_000_0,
6530: 0x009b_02d_4, 0x0060_060_4, 0x0000_000_0,
6531: 0x0000_0c2_1, 0x0000_000_0, 0x0000_000_0,
6532: 0x007f_02e_4, 0x006e_06e_4, 0x0000_000_0,
6533: 0xf009_085_1, 0x0000_000_0, 0x0000_000_0,
6534: 0xf00a_086_1, 0x0000_000_0, 0x0000_000_0,
6535: 0xf00b_087_1, 0x0000_000_0, 0x0000_000_0,
6536: 0x0012_012_2, 0x0000_000_0, 0x0000_000_0,
6537: 0xf001_07d_1, 0x0000_000_0, 0x0000_000_0,
6538: 0xf002_07e_1, 0x0000_000_0, 0x0000_000_0,
6539: 0xf003_07f_1, 0x0000_000_0, 0x0000_000_0,
6540: 0x0012_012_3, 0x0000_000_0, 0x0000_000_0,
6541: 0xf005_081_1, 0x0000_000_0, 0x0000_000_0,
6542: 0xf006_082_1, 0x0000_000_0, 0x0000_000_0,
6543: 0x0013_013_1, 0x0000_000_0, 0x0000_000_0,
6544: 0xf004_080_1, 0x0000_000_0, 0x0000_000_0,
6545: 0x009b_02d_1, 0x0000_000_0, 0x0000_000_0,
6546: 0xf007_083_1, 0x0000_000_0, 0x0000_000_0,
6547: 0xf008_084_1, 0x0000_000_0, 0x0000_000_0,
6548: 0x00f4_0f3_1, 0x00f3_0f4_1, 0x0000_000_0,
6549: 0x020d_05d_1, 0x0000_000_0, 0x0000_000_0,
6550: 0x0070_070_1, 0x0000_000_0, 0x0000_000_0,
6551: 0x0071_071_1, 0x0000_000_0, 0x0000_000_0,
6552: 0x0072_072_1, 0x0000_000_0, 0x0000_000_0,
6553: 0x0073_073_1, 0x0000_000_0, 0x0000_000_0,
6554: 0x0074_074_1, 0x0000_000_0, 0x0000_000_0,
6555: 0x0075_075_1, 0x0000_000_0, 0x0000_000_0,
6556: 0x0076_076_1, 0x0000_000_0, 0x0000_000_0,
6557: 0x0077_077_1, 0x0000_000_0, 0x0000_000_0,
6558: 0x0078_078_1, 0x0000_000_0, 0x0000_000_0,
6559: 0x0079_079_1, 0x0000_000_0, 0x0000_000_0,
6560: 0x0010_010_2, 0x0010_010_3, 0x0000_000_0,
6561: 0x0011_011_2, 0x0000_000_0, 0x0000_000_0,
6562: 0xf000_07c_1, 0x0000_000_0, 0x0000_000_0,
6563: 0x007b_07b_1, 0x0000_000_0, 0x0000_000_0,
6564: 0x0000_000_0, 0x0000_000_0, 0x0000_000_0,
6565: };
6566:
6567:
6568: public static final int[] KBD_EO_TO_XO = {
6569:
6570: 1,
6571: 2,
6572: 3,
6573: 4,
6574: 5,
6575: 6,
6576: 7,
6577: 8,
6578: 9,
6579: 10,
6580: 11,
6581: 12,
6582: 13,
6583: 16,
6584: 17,
6585: 18,
6586: 19,
6587: 20,
6588: 21,
6589: 22,
6590: 23,
6591: 24,
6592: 25,
6593: 26,
6594: 27,
6595: 29,
6596: 30,
6597: 31,
6598: 32,
6599: 33,
6600: 34,
6601: 35,
6602: 36,
6603: 37,
6604: 38,
6605: 39,
6606: 40,
6607: 41,
6608: 42,
6609: 43,
6610: 44,
6611: 45,
6612: 46,
6613: 47,
6614: 48,
6615: 49,
6616: 50,
6617: 51,
6618: 89,
6619: 90,
6620: 91,
6621: 92,
6622: 93,
6623: 94,
6624: 95,
6625: 112,
6626: 0,
6627: 14,
6628: 15,
6629: 28,
6630: 52,
6631: 53,
6632: 54,
6633: 55,
6634: 56,
6635: 57,
6636: 58,
6637: 59,
6638: 60,
6639: 61,
6640: 62,
6641: 63,
6642: 64,
6643: 65,
6644: 66,
6645: 67,
6646: 68,
6647: 69,
6648: 70,
6649: 71,
6650: 72,
6651: 73,
6652: 74,
6653: 75,
6654: 76,
6655: 77,
6656: 78,
6657: 79,
6658: 80,
6659: 81,
6660: 82,
6661: 83,
6662: 84,
6663: 85,
6664: 86,
6665: 87,
6666: 88,
6667: 96,
6668: 97,
6669: 98,
6670: 99,
6671: 100,
6672: 101,
6673: 102,
6674: 103,
6675: 104,
6676: 105,
6677: 106,
6678: 107,
6679: 108,
6680: 109,
6681: 110,
6682: 111,
6683: };
6684:
6685:
6686: public static final int[] KBD_XO_TO_EO = {
6687:
6688: 56,
6689: 0,
6690: 1,
6691: 2,
6692: 3,
6693: 4,
6694: 5,
6695: 6,
6696: 7,
6697: 8,
6698: 9,
6699: 10,
6700: 11,
6701: 12,
6702: 57,
6703: 58,
6704: 13,
6705: 14,
6706: 15,
6707: 16,
6708: 17,
6709: 18,
6710: 19,
6711: 20,
6712: 21,
6713: 22,
6714: 23,
6715: 24,
6716: 59,
6717: 25,
6718: 26,
6719: 27,
6720: 28,
6721: 29,
6722: 30,
6723: 31,
6724: 32,
6725: 33,
6726: 34,
6727: 35,
6728: 36,
6729: 37,
6730: 38,
6731: 39,
6732: 40,
6733: 41,
6734: 42,
6735: 43,
6736: 44,
6737: 45,
6738: 46,
6739: 47,
6740: 60,
6741: 61,
6742: 62,
6743: 63,
6744: 64,
6745: 65,
6746: 66,
6747: 67,
6748: 68,
6749: 69,
6750: 70,
6751: 71,
6752: 72,
6753: 73,
6754: 74,
6755: 75,
6756: 76,
6757: 77,
6758: 78,
6759: 79,
6760: 80,
6761: 81,
6762: 82,
6763: 83,
6764: 84,
6765: 85,
6766: 86,
6767: 87,
6768: 88,
6769: 89,
6770: 90,
6771: 91,
6772: 92,
6773: 93,
6774: 94,
6775: 95,
6776: 96,
6777: 48,
6778: 49,
6779: 50,
6780: 51,
6781: 52,
6782: 53,
6783: 54,
6784: 97,
6785: 98,
6786: 99,
6787: 100,
6788: 101,
6789: 102,
6790: 103,
6791: 104,
6792: 105,
6793: 106,
6794: 107,
6795: 108,
6796: 109,
6797: 110,
6798: 111,
6799: 112,
6800: 55,
6801: };
6802:
6803: public static JFrame kbdFrame;
6804: public static KeyMapEditor kbdEditor;
6805:
6806:
6807:
6808: public static void kbdInit () {
6809:
6810:
6811: kbdUSLayoutOn = Settings.sgsGetOnOff ("keymapus");
6812:
6813: kbdDefaultMapNonZ = (XEiJ.prgIsLinux ? KBD_DEFAULT_MAP_LINUX :
6814: XEiJ.prgIsMac ?
6815: kbdUSLayoutOn ? KBD_DEFAULT_MAP_MAC_US : KBD_DEFAULT_MAP_MAC :
6816: kbdUSLayoutOn ? KBD_DEFAULT_MAP_WIN_US : KBD_DEFAULT_MAP_WIN);
6817:
6818: kbdCurrentMapNonZ = new int[KBD_DEFAULT_MAP_WIN.length];
6819: {
6820: int[] map = Settings.sgsGetIntArray ("keymap");
6821: if (map.length == 0 || map[0] != -3) {
6822: System.arraycopy (kbdDefaultMapNonZ, 0,
6823: kbdCurrentMapNonZ, 0,
6824: KBD_DEFAULT_MAP_WIN.length);
6825: } else {
6826: Arrays.fill (kbdCurrentMapNonZ, 0);
6827: System.arraycopy (map, 1,
6828: kbdCurrentMapNonZ, 0,
6829: Math.min (map.length - 1, KBD_DEFAULT_MAP_WIN.length));
6830: }
6831: }
6832:
6833: kbdCurrentMap = new int[KBD_DEFAULT_MAP_WIN.length];
6834: System.arraycopy (kbdCurrentMapNonZ, 0,
6835: kbdCurrentMap, 0,
6836: KBD_DEFAULT_MAP_WIN.length);
6837:
6838:
6839: String paramKeyboard = Settings.sgsGetString ("keyboard");
6840: switch (paramKeyboard.toLowerCase ()) {
6841: case "":
6842: case "none":
6843: kbdOn = false;
6844: kbdType = KBD_STANDARD_TYPE;
6845: break;
6846: case "standard":
6847: kbdOn = true;
6848: kbdType = KBD_STANDARD_TYPE;
6849: break;
6850: case "compact":
6851: kbdOn = true;
6852: kbdType = KBD_COMPACT_TYPE;
6853: break;
6854: default:
6855: kbdOn = true;
6856: kbdType = KBD_STANDARD_TYPE;
6857: }
6858:
6859:
6860:
6861: switch (Settings.sgsGetString ("f11key").toLowerCase ()) {
6862: case "fullscreen":
6863: kbdF11Mode = KBD_F11_FULLSCREEN;
6864: break;
6865: case "screenshot":
6866: kbdF11Mode = KBD_F11_SCREENSHOT;
6867: break;
6868: case "gifanimation":
6869: kbdF11Mode = KBD_F11_GIFANIMATION;
6870: break;
6871: case "stopandstart":
6872: kbdF11Mode = KBD_F11_STOPANDSTART;
6873: break;
6874: case "donothing":
6875: kbdF11Mode = KBD_F11_DO_NOTHING;
6876: break;
6877: default:
6878: kbdF11Mode = KBD_F11_FULLSCREEN;
6879: }
6880:
6881:
6882: if (KBD_ZKEY_ON) {
6883: kbdZKeyOnRequest = XEiJ.prgWindllLoaded && Settings.sgsGetOnOff ("zkeyboard");
6884: kbdZKeyOn = false;
6885: kbdZKeyStatus = 0;
6886: kbdZKeyPort = null;
6887: kbdZKeyDebugFlag = false;
6888:
6889: kbdZKeyIOData = 0L;
6890: kbdZKeyIOProgrammable = false;
6891:
6892: kbdXF4Locked = null;
6893: kbdSavedNumLock = false;
6894: kbdIgnoreNumLock = false;
6895:
6896: demoInit ();
6897:
6898: kbdDefaultMapZ = KBD_DEFAULT_MAP_ZKEY;
6899:
6900: kbdCurrentMapZ = new int[KBD_DEFAULT_MAP_WIN.length];
6901: {
6902: int[] map = Settings.sgsGetIntArray ("zkeymap");
6903: if (map.length == 0 || map[0] != -3) {
6904: System.arraycopy (kbdDefaultMapZ, 0,
6905: kbdCurrentMapZ, 0,
6906: KBD_DEFAULT_MAP_WIN.length);
6907: } else {
6908: Arrays.fill (kbdCurrentMapZ, 0);
6909: System.arraycopy (map, 1,
6910: kbdCurrentMapZ, 0,
6911: Math.min (map.length - 1, KBD_DEFAULT_MAP_WIN.length));
6912: }
6913: }
6914:
6915: ActionListener listener = new ActionListener () {
6916: @Override public void actionPerformed (ActionEvent ae) {
6917: Object source = ae.getSource ();
6918: String command = ae.getActionCommand ();
6919: switch (command) {
6920: case "Toggle fullscreen":
6921: kbdF11Mode = KBD_F11_FULLSCREEN;
6922: break;
6923: case "Take a screenshot":
6924: kbdF11Mode = KBD_F11_SCREENSHOT;
6925: break;
6926: case "Record GIF animation":
6927: kbdF11Mode = KBD_F11_GIFANIMATION;
6928: break;
6929: case "Stop and start":
6930: kbdF11Mode = KBD_F11_STOPANDSTART;
6931: break;
6932: case "Do nothing":
6933: kbdF11Mode = KBD_F11_DO_NOTHING;
6934: break;
6935: case "Connect":
6936: if (KBD_ZKEY_ON) {
6937: kbdZKeyOnRequest = ((JCheckBoxMenuItem) source).isSelected ();
6938: if (kbdZKeyOnRequest) {
6939: kbdZKeyOpen ();
6940: } else {
6941: XEiJ.tmrTimer.schedule (new TimerTask () {
6942: @Override public void run () {
6943: kbdZKeyClose ();
6944: }
6945: }, 0L);
6946: }
6947: }
6948: break;
6949: case "LED operation chedk":
6950: if (KBD_ZKEY_ON) {
6951: if (((JCheckBoxMenuItem) source).isSelected ()) {
6952: demoStart ();
6953: } else {
6954: demoEnd ();
6955: }
6956: }
6957: break;
6958: case "Debug flag":
6959: if (KBD_ZKEY_ON) {
6960: kbdZKeyDebugFlag = ((JCheckBoxMenuItem) source).isSelected ();
6961: if (kbdZKeyPort != null) {
6962: kbdZKeyPort.setDebugFlag (kbdZKeyDebugFlag);
6963: }
6964: }
6965: break;
6966: }
6967: }
6968: };
6969: ButtonGroup f11Group = new ButtonGroup ();
6970: kbdF11KeyMenu = Multilingual.mlnText (
6971: ComponentFactory.createMenu (
6972: "F11 key",
6973: Multilingual.mlnText (
6974: ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_FULLSCREEN, "Toggle fullscreen", listener),
6975: "ja", "全画面表示"),
6976: Multilingual.mlnText (
6977: ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_SCREENSHOT, "Take a screenshot", listener),
6978: "ja", "スクリーンショット"),
6979: Multilingual.mlnText (
6980: ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_GIFANIMATION, "Record GIF animation", listener),
6981: "ja", "GIF アニメーション録画"),
6982: Multilingual.mlnText (
6983: ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_STOPANDSTART, "Stop and start", listener),
6984: "ja", "停止と再開"),
6985: Multilingual.mlnText (
6986: ComponentFactory.createRadioButtonMenuItem (f11Group, kbdF11Mode == KBD_F11_DO_NOTHING, "Do nothing", listener),
6987: "ja", "何もしない")
6988: ),
6989: "ja", "F11 キー");
6990: kbdZKeyMenu = !KBD_ZKEY_ON ? null : Multilingual.mlnText (
6991: ComponentFactory.createMenu (
6992: "Z keyboard",
6993: kbdZKeyConnectCheckBox =
6994: Multilingual.mlnText (
6995: ComponentFactory.createCheckBoxMenuItem (kbdZKeyOnRequest, "Connect", listener),
6996: "ja", "接続"),
6997: kbdZKeyDemoCheckBox =
6998: ComponentFactory.setEnabled (
6999: Multilingual.mlnText (
7000: ComponentFactory.createCheckBoxMenuItem (demoThread != null, "LED operation chedk", listener),
7001: "ja", "LED の動作確認"),
7002: kbdZKeyOn),
7003: ComponentFactory.createHorizontalSeparator (),
7004: Multilingual.mlnText (
7005: ComponentFactory.createCheckBoxMenuItem (kbdZKeyDebugFlag, "Debug flag", listener),
7006: "ja", "デバッグフラグ")
7007: ),
7008: "ja", "Z キーボード");
7009: }
7010:
7011:
7012: for (int i = 0; i < KBD_VAR_KEYS; i++) {
7013: int t = KBD_CAPS_BASE[i];
7014: KBD_CAPS_CHR[i] = (byte) t;
7015: KBD_NORMAL_CHR[i] = (byte) (t >= 'A' && t <= 'Z' ? t ^ 0x20 : t);
7016: KBD_CODE_CHR[i] = (byte) (t >= '0' && t <= '9' || t >= 'A' && t <= 'F' ? t : 0);
7017: t = KBD_CAPS_SHIFT_BASE[i];
7018: KBD_CAPS_SHIFT_CHR[i] = (byte) t;
7019: KBD_SHIFT_CHR[i] = (byte) (t >= 'a' && t <= 'z' ? t ^ 0x20 : t);
7020: KBD_CTRL_CHR[i] = (byte) (t < 0x20 ? t : t >= 0x40 ? t & 0x1f : 0);
7021: t = KBD_KANA_BASE[i];
7022: KBD_KANA_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
7023: t = KBD_KANA_SHIFT_BASE[i];
7024: KBD_KANA_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
7025: t = KBD_KANA_AIU_BASE[i];
7026: KBD_KANA_AIU_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
7027: t = KBD_KANA_AIU_SHIFT_BASE[i];
7028: KBD_KANA_AIU_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
7029: t = KBD_ROMA_BASE[i];
7030: KBD_ROMA_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
7031: t = KBD_ROMA_SHIFT_BASE[i];
7032: KBD_ROMA_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
7033: t = KBD_NUM_BASE[i];
7034: if (t != ' ') {
7035: KBD_NUM_CAPS_CHR[i] =
7036: KBD_NUM_CHR[i] =
7037: KBD_NUM_CODE_CHR[i] =
7038: KBD_NUM_CAPS_SHIFT_CHR[i] =
7039: KBD_NUM_SHIFT_CHR[i] =
7040: KBD_NUM_CTRL_CHR[i] =
7041: KBD_NUM_KANA_CHR[i] =
7042: KBD_NUM_KANA_SHIFT_CHR[i] =
7043: KBD_NUM_KANA_AIU_CHR[i] =
7044: KBD_NUM_KANA_AIU_SHIFT_CHR[i] =
7045: KBD_NUM_ROMA_CHR[i] =
7046: KBD_NUM_ROMA_SHIFT_CHR[i] = (byte) t;
7047: } else {
7048: KBD_NUM_CAPS_CHR[i] = KBD_CAPS_CHR[i];
7049: KBD_NUM_CHR[i] = KBD_NORMAL_CHR[i];
7050: KBD_NUM_CODE_CHR[i] = KBD_CODE_CHR[i];
7051: KBD_NUM_CAPS_SHIFT_CHR[i] = KBD_CAPS_SHIFT_CHR[i];
7052: KBD_NUM_SHIFT_CHR[i] = KBD_SHIFT_CHR[i];
7053: KBD_NUM_CTRL_CHR[i] = KBD_CTRL_CHR[i];
7054: KBD_NUM_KANA_CHR[i] = KBD_KANA_CHR[i];
7055: KBD_NUM_KANA_SHIFT_CHR[i] = KBD_KANA_SHIFT_CHR[i];
7056: KBD_NUM_KANA_AIU_CHR[i] = KBD_KANA_AIU_CHR[i];
7057: KBD_NUM_KANA_AIU_SHIFT_CHR[i] = KBD_KANA_AIU_SHIFT_CHR[i];
7058: KBD_NUM_ROMA_CHR[i] = KBD_ROMA_CHR[i];
7059: KBD_NUM_ROMA_SHIFT_CHR[i] = KBD_ROMA_SHIFT_CHR[i];
7060: }
7061: }
7062:
7063:
7064:
7065: if (LnF.lnfHSB[6] <= LnF.lnfHSB[8]) {
7066: kbdLetterRGB = LnF.lnfRGB[KBD_LETTER_COLOR];
7067: kbdTopLeftRGB = LnF.lnfRGB[KBD_TOP_LEFT_COLOR];
7068: kbdTopRGB = LnF.lnfRGB[KBD_TOP_COLOR];
7069: kbdLeftRGB = LnF.lnfRGB[KBD_LEFT_COLOR];
7070: kbdPointedRGB = LnF.lnfRGB[KBD_POINTED_COLOR];
7071: kbdTopRightRGB = LnF.lnfRGB[KBD_TOP_RIGHT_COLOR];
7072: kbdBottomLeftRGB = LnF.lnfRGB[KBD_BOTTOM_LEFT_COLOR];
7073: kbdKeytopRGB = LnF.lnfRGB[KBD_KEYTOP_COLOR];
7074: kbdRightRGB = LnF.lnfRGB[KBD_RIGHT_COLOR];
7075: kbdBottomRGB = LnF.lnfRGB[KBD_BOTTOM_COLOR];
7076: kbdBottomRightRGB = LnF.lnfRGB[KBD_BOTTOM_RIGHT_COLOR];
7077: kbdShadowRGB = LnF.lnfRGB[KBD_SHADOW_COLOR];
7078: kbdBackgroundRGB = LnF.lnfRGB[KBD_BACKGROUND_COLOR];
7079: kbdHoleRGB = LnF.lnfRGB[KBD_HOLE_COLOR];
7080: } else {
7081: kbdLetterRGB = LnF.lnfRGB[14 - KBD_LETTER_COLOR];
7082: kbdTopLeftRGB = LnF.lnfRGB[14 - KBD_TOP_LEFT_COLOR];
7083: kbdTopRGB = LnF.lnfRGB[14 - KBD_TOP_COLOR];
7084: kbdLeftRGB = LnF.lnfRGB[14 - KBD_LEFT_COLOR];
7085: kbdPointedRGB = LnF.lnfRGB[14 - KBD_POINTED_COLOR];
7086: kbdTopRightRGB = LnF.lnfRGB[14 - KBD_TOP_RIGHT_COLOR];
7087: kbdBottomLeftRGB = LnF.lnfRGB[14 - KBD_BOTTOM_LEFT_COLOR];
7088: kbdKeytopRGB = LnF.lnfRGB[14 - KBD_KEYTOP_COLOR];
7089: kbdRightRGB = LnF.lnfRGB[14 - KBD_RIGHT_COLOR];
7090: kbdBottomRGB = LnF.lnfRGB[14 - KBD_BOTTOM_COLOR];
7091: kbdBottomRightRGB = LnF.lnfRGB[14 - KBD_BOTTOM_RIGHT_COLOR];
7092: kbdShadowRGB = LnF.lnfRGB[14 - KBD_SHADOW_COLOR];
7093: kbdBackgroundRGB = LnF.lnfRGB[14 - KBD_BACKGROUND_COLOR];
7094: kbdHoleRGB = LnF.lnfRGB[14 - KBD_HOLE_COLOR];
7095: }
7096:
7097:
7098:
7099: for (int i = 0; i < 256; i++) {
7100: int[] letter = KBD_VAR_LETTER[i];
7101: if (letter == null) {
7102: kbdVarStatBitmap[i] = null;
7103: continue;
7104: }
7105: int[][] statBitmap = kbdVarStatBitmap[i] = new int[4][];
7106: for (int stat = 0; stat < 4; stat++) {
7107: if (KBD_USE_ROM_FONT) {
7108: kbdDrawKey2 (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
7109: KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, null, i, stat);
7110: } else {
7111: kbdDrawKey (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
7112: KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, null, letter, stat);
7113: }
7114: }
7115: }
7116:
7117:
7118:
7119: for (int i = 0; i < KBD_LED_KEYS; i++) {
7120: int[] letter = KBD_LED_LETTER[i];
7121: if (letter == null) {
7122: kbdLedStatBitmap[i] = null;
7123: continue;
7124: }
7125: int[][] statBitmap = kbdLedStatBitmap[i] = new int[32][];
7126: for (int stat = 0; stat < 32; stat++) {
7127: kbdDrawKey (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
7128: KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, KBD_LED_COLOR[i][stat >> 2], letter, stat & 3);
7129: }
7130: }
7131:
7132:
7133:
7134:
7135:
7136:
7137:
7138:
7139:
7140:
7141: for (int type = 0; type < KBD_TYPES; type++) {
7142: int cols = KBD_TYPE_COLS[type];
7143: int rows = KBD_TYPE_ROWS[type];
7144: int width = kbdDataTypeWidth[type] = KBD_PADDING_LEFT + KBD_COL_WIDTH * cols + KBD_PADDING_RIGHT;
7145: int height = kbdDataTypeHeight[type] = KBD_PADDING_TOP + KBD_ROW_HEIGHT * rows + KBD_PADDING_BOTTOM;
7146: BufferedImage image = kbdDataTypeImage[type] = new BufferedImage (width, height, BufferedImage.TYPE_INT_RGB);
7147: kbdDataTypeBitmap[type] = ((DataBufferInt) image.getRaster ().getDataBuffer ()).getData ();
7148: Arrays.fill (kbdDataTypeBitmap[type], kbdBackgroundRGB);
7149: byte[] indexMap = kbdDataTypeIndexMap[type] = new byte[width * height];
7150: Arrays.fill (kbdDataTypeIndexMap[type], (byte) -1);
7151: kbdDataTypeStatFixBitmap[type] = new int[4][];
7152: int[][] indexRect = kbdDataTypeIndexRect[type] = new int[KBD_ALL_KEYS][];
7153: int[] indexCharacterStat = kbdDataTypeIndexCharacterStat[type] = new int[KBD_ALL_KEYS];
7154: Arrays.fill (indexCharacterStat, -1);
7155:
7156:
7157: int[][] ledBox = KBD_TYPE_LED_BOX[type];
7158: for (int i = 0; i < KBD_VAR_KEYS + KBD_LED_KEYS; i++) {
7159: int[] box = i < KBD_VAR_KEYS ? KBD_VAR_BOX[i] : ledBox[i - KBD_VAR_KEYS];
7160: if (box == null) {
7161: indexRect[i] = new int[0];
7162: continue;
7163: }
7164: int x = KBD_PADDING_LEFT + KBD_COL_WIDTH * box[0];
7165: int y = KBD_PADDING_TOP + KBD_ROW_HEIGHT * box[1];
7166: int w = KBD_COL_WIDTH * box[2] - 1;
7167: int h = KBD_ROW_HEIGHT * box[3] - 1;
7168: indexRect[i] = box == null ? new int[0] : new int[] { x, y, w, h };
7169: int tx = x + KBD_TOUCHABLE_AREA;
7170: int ty = y + KBD_TOUCHABLE_AREA;
7171: int tw = w - KBD_TOUCHABLE_AREA * 2;
7172: int th = h - KBD_TOUCHABLE_AREA * 2;
7173: int p = tx + width * ty;
7174: for (int v = 0; v < th; v++) {
7175: for (int u = 0; u < tw; u++) {
7176: indexMap[p + u] = (byte) i;
7177: }
7178: p += width;
7179: }
7180: }
7181:
7182:
7183: for (int stat = 0; stat < 4; stat++) {
7184: int[] bitmap = kbdDataTypeStatFixBitmap[type][stat] = new int[width * height];
7185: Arrays.fill (bitmap, kbdBackgroundRGB);
7186: }
7187: int[][] fixBox = KBD_TYPE_FIX_BOX[type];
7188: int[] fixStyle = KBD_TYPE_FIX_STYLE[type];
7189: for (int i = KBD_VAR_KEYS + KBD_LED_KEYS; i < KBD_ALL_KEYS; i++) {
7190: int[] box = fixBox[i - (KBD_VAR_KEYS + KBD_LED_KEYS)];
7191: if (box == null) {
7192: indexRect[i] = new int[0];
7193: continue;
7194: }
7195: int col = box[0];
7196: int row = box[1];
7197: int wide = box[2];
7198: int tall = box[3];
7199: int x = KBD_PADDING_LEFT + KBD_COL_WIDTH * col;
7200: int y = KBD_PADDING_TOP + KBD_ROW_HEIGHT * row;
7201: int w = KBD_COL_WIDTH * wide - 1;
7202: int h = KBD_ROW_HEIGHT * tall - 1;
7203: int style = fixStyle[i - (KBD_VAR_KEYS + KBD_LED_KEYS)];
7204: if (style == KBD_RETURN_STYLE) {
7205:
7206: int wl = KBD_COL_WIDTH;
7207: int hb = KBD_ROW_HEIGHT * 4;
7208: int wr = w - wl;
7209: int ht = h - hb;
7210: indexRect[i] = new int[] { x, y, w, ht, x + wl, y + ht, wr, hb };
7211: int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
7212: int ty = y + KBD_TOUCHABLE_AREA;
7213: int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
7214: int th = ht - KBD_TOUCHABLE_AREA * 2;
7215: int p = tx + width * ty;
7216: for (int v = 0; v < th; v++) {
7217: for (int u = 0; u < tw; u++) {
7218: indexMap[p + u] = (byte) i;
7219: }
7220: p += width;
7221: }
7222: tx = x + wl + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
7223: ty = y + ht - KBD_TOUCHABLE_AREA;
7224: tw = wr - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
7225: th = hb;
7226: p = tx + width * ty;
7227: for (int v = 0; v < th; v++) {
7228: for (int u = 0; u < tw; u++) {
7229: indexMap[p + u] = (byte) i;
7230: }
7231: p += width;
7232: }
7233:
7234: for (int stat = 0; stat < 2; stat++) {
7235: int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
7236: kbdDrawLine (bitmap, x + width * y,
7237: 1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
7238: width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
7239: -1, 1, kbdBottomRightRGB, -1, wr - 2, kbdBottomRGB,
7240: -width, 1, kbdBottomLeftRGB, -width, hb - 1, kbdLeftRGB,
7241: -1, 1, kbdBottomLeftRGB, -1, wl - 1, kbdBottomRGB,
7242: -width, 1, kbdBottomLeftRGB, -width, ht - 2, kbdLeftRGB);
7243: }
7244: for (int stat = 2; stat < 4; stat++) {
7245: int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
7246: kbdDrawLine (bitmap, x + width * y,
7247: 1, 1, kbdHoleRGB, 1, w - 2, kbdHoleRGB,
7248: width, 1, kbdHoleRGB, width, h - 2, kbdHoleRGB,
7249: -1, 1, kbdHoleRGB, -1, wr - 2, kbdHoleRGB,
7250: -width, 1, kbdHoleRGB, -width, hb - 1, kbdHoleRGB,
7251: -1, 1, kbdHoleRGB, -1, wl - 1, kbdHoleRGB,
7252: -width, 1, kbdHoleRGB, -width, ht - 2, kbdHoleRGB);
7253: }
7254: int u = KBD_COL_WIDTH;
7255: x += 1 + u;
7256: y += 1;
7257: w -= 2 + u * 2;
7258: h -= 2;
7259: wr -= 2 + u * 2;
7260: ht -= 2;
7261:
7262: for (int stat = 0; stat < 4; stat++) {
7263: int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
7264: kbdFillRect (bitmap, width, x - u, y, u, ht, kbdKeytopRGB);
7265: kbdFillRect (bitmap, width, x + wl - u, y + ht, u, h - ht, kbdKeytopRGB);
7266: kbdFillRect (bitmap, width, x + w, y, u, h, kbdKeytopRGB);
7267: }
7268:
7269: int lx = x;
7270: int ly = y;
7271: int lw = w;
7272: int lh = h;
7273: for (int stat = 0; stat < 4; stat++) {
7274: int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
7275: kbdDrawLine (bitmap, x + width * y,
7276: 1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
7277: width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
7278: -1, 1, kbdBottomRightRGB, -1, wr - 2, kbdBottomRGB,
7279: -width, 1, kbdBottomLeftRGB, -width, hb - 1, kbdLeftRGB,
7280: -1, 1, kbdBottomLeftRGB, -1, wl - 1, kbdBottomRGB,
7281: -width, 1, kbdBottomLeftRGB, -width, ht - 2, kbdLeftRGB);
7282: }
7283: x++;
7284: y++;
7285: w -= 2;
7286: h -= 2;
7287: wr -= 2;
7288: ht -= 2;
7289:
7290: for (int stat = 0; stat < 4; stat++) {
7291: int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
7292: kbdDrawLine (bitmap, x + width * y,
7293: 1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
7294: width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
7295: -1, 1, kbdBottomRightRGB, -1, wr - 2, kbdBottomRGB,
7296: -width, 1, kbdBottomLeftRGB, -width, hb - 1, kbdLeftRGB,
7297: -1, 1, kbdBottomLeftRGB, -1, wl - 1, kbdBottomRGB,
7298: -width, 1, kbdBottomLeftRGB, -width, ht - 2, kbdLeftRGB);
7299: }
7300: x++;
7301: y++;
7302: w -= 2;
7303: h -= 2;
7304: wr -= 2;
7305: ht -= 2;
7306:
7307: int[] letter = KBD_FIX_LETTER[KBD_RETURN_INDEX - (KBD_VAR_KEYS + KBD_LED_KEYS)];
7308: for (int stat = 0; stat < 4; stat++) {
7309: int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
7310: boolean pointed = (stat & KBD_POINTED_MASK) != 0;
7311: int color = pointed ? kbdPointedRGB : kbdKeytopRGB;
7312: kbdFillRect (bitmap, width, x, y, w, ht, color);
7313: kbdFillRect (bitmap, width, x + wl, y + ht, w - wl, h - ht, color);
7314: kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter);
7315: }
7316: } else if (style == KBD_SHIFT_STYLE) {
7317: int xr = x + KBD_COL_WIDTH * (wide - 9);
7318: w = KBD_COL_WIDTH * 9 - 1;
7319: indexRect[i] = new int[] { x, y, w, h, xr, y, w, h };
7320: int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
7321: int ty = y + KBD_TOUCHABLE_AREA;
7322: int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
7323: int th = h - KBD_TOUCHABLE_AREA * 2;
7324: int p = tx + width * ty;
7325: for (int v = 0; v < th; v++) {
7326: for (int u = 0; u < tw; u++) {
7327: indexMap[p + u] = (byte) i;
7328: }
7329: p += width;
7330: }
7331: tx = xr + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
7332: p = tx + width * ty;
7333: for (int v = 0; v < th; v++) {
7334: for (int u = 0; u < tw; u++) {
7335: indexMap[p + u] = (byte) i;
7336: }
7337: p += width;
7338: }
7339: int[] letter = KBD_FIX_LETTER[KBD_SHIFT_INDEX - (KBD_VAR_KEYS + KBD_LED_KEYS)];
7340: for (int stat = 0; stat < 4; stat++) {
7341: int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
7342: kbdDrawKey (bitmap, width, x, y, w, h, KBD_COL_WIDTH, 0, null, letter, stat);
7343: kbdDrawKey (bitmap, width, xr, y, w, h, KBD_COL_WIDTH, 0, null, letter, stat);
7344: }
7345: } else {
7346: if (style == KBD_FUNCTION_STYLE) {
7347: y += KBD_ROW_HEIGHT >> 1;
7348: h -= KBD_ROW_HEIGHT >> 1;
7349: }
7350: int pw = (style == KBD_NARROWER_STYLE ? KBD_COL_WIDTH >> 1 :
7351: style == KBD_NARROW_STYLE ? KBD_COL_WIDTH :
7352: 0);
7353: int ph = (style == KBD_SHORTER_STYLE ? KBD_ROW_HEIGHT :
7354: style == KBD_SHORT_STYLE ? KBD_ROW_HEIGHT << 1 :
7355: 0);
7356: indexRect[i] = new int[] { x, y, w, h };
7357: int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + pw);
7358: int ty = y + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + ph);
7359: int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + pw) * 2;
7360: int th = h - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + ph) * 2;
7361: int p = tx + width * ty;
7362: for (int v = 0; v < th; v++) {
7363: for (int u = 0; u < tw; u++) {
7364: indexMap[p + u] = (byte) i;
7365: }
7366: p += width;
7367: }
7368: for (int stat = 0; stat < 4; stat++) {
7369: int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
7370: kbdDrawKey (bitmap, width, x, y, w, h, pw, ph, null, KBD_FIX_LETTER[i - (KBD_VAR_KEYS + KBD_LED_KEYS)], stat);
7371: }
7372: }
7373: }
7374: }
7375:
7376:
7377: if (kbdOn) {
7378: kbdWidth = kbdDataTypeWidth[kbdType];
7379: kbdHeight = kbdDataTypeHeight[kbdType];
7380: kbdImage = kbdDataTypeImage[kbdType];
7381: kbdBitmap = kbdDataTypeBitmap[kbdType];
7382: kbdIndexMap = kbdDataTypeIndexMap[kbdType];
7383: kbdFlush ();
7384: } else {
7385: kbdWidth = 0;
7386: kbdHeight = 0;
7387: kbdImage = null;
7388: kbdBitmap = null;
7389: kbdIndexMap = null;
7390: }
7391:
7392: Arrays.fill (kbdStat, 0);
7393: kbdPointedIndex = -1;
7394: if (!MC68901.MFP_KBD_ON) {
7395: kbdRepeatTask = null;
7396: }
7397:
7398:
7399:
7400: kbdSetRepeatDelay (MainMemory.mmrRbs (0x00ed003a));
7401: kbdSetRepeatInterval (MainMemory.mmrRbs (0x00ed003b));
7402:
7403: kbdLedBrightness = 0;
7404:
7405: }
7406:
7407:
7408:
7409: public static void kbdTini () {
7410:
7411:
7412: if (KBD_ZKEY_ON && kbdZKeyPort != null) {
7413: System.arraycopy (kbdCurrentMap, 0,
7414: kbdCurrentMapZ, 0,
7415: KBD_DEFAULT_MAP_WIN.length);
7416: } else {
7417: System.arraycopy (kbdCurrentMap, 0,
7418: kbdCurrentMapNonZ, 0,
7419: KBD_DEFAULT_MAP_WIN.length);
7420: }
7421:
7422:
7423: Settings.sgsPutOnOff ("keymapus", kbdUSLayoutOn);
7424: {
7425: int[] map;
7426: if (Arrays.equals (kbdCurrentMapNonZ, kbdDefaultMapNonZ)) {
7427: map = new int[0];
7428: } else {
7429: map = new int[1 + KBD_DEFAULT_MAP_WIN.length];
7430: map[0] = -3;
7431: Arrays.fill (map, 1, 1 + KBD_DEFAULT_MAP_WIN.length, 0);
7432: System.arraycopy (kbdCurrentMapNonZ, 0,
7433: map, 1,
7434: KBD_DEFAULT_MAP_WIN.length);
7435: }
7436: Settings.sgsPutIntArray ("keymap", map);
7437: }
7438:
7439:
7440: Settings.sgsPutString ("keyboard",
7441: !kbdOn ? "none" :
7442: kbdType == KBD_COMPACT_TYPE ? "compact" :
7443: kbdType == KBD_STANDARD_TYPE ? "standard" :
7444: "standard");
7445:
7446:
7447: Settings.sgsPutString ("f11key",
7448: kbdF11Mode == KBD_F11_FULLSCREEN ? "fullscreen" :
7449: kbdF11Mode == KBD_F11_SCREENSHOT ? "screenshot" :
7450: kbdF11Mode == KBD_F11_GIFANIMATION ? "gifanimation" :
7451: kbdF11Mode == KBD_F11_STOPANDSTART ? "stopandstart" :
7452: kbdF11Mode == KBD_F11_DO_NOTHING ? "donothing" :
7453: "fullscreen");
7454:
7455:
7456: if (KBD_ZKEY_ON) {
7457: Settings.sgsPutOnOff ("zkeyboard", kbdZKeyOnRequest);
7458: kbdZKeyClose ();
7459: int[] map;
7460: if (Arrays.equals (kbdCurrentMapZ, kbdDefaultMapZ)) {
7461: map = new int[0];
7462: } else {
7463: map = new int[1 + KBD_DEFAULT_MAP_WIN.length];
7464: map[0] = -3;
7465: Arrays.fill (map, 1, 1 + KBD_DEFAULT_MAP_WIN.length, 0);
7466: System.arraycopy (kbdCurrentMapZ, 0,
7467: map, 1,
7468: KBD_DEFAULT_MAP_WIN.length);
7469: }
7470: Settings.sgsPutIntArray ("zkeymap", map);
7471: }
7472:
7473: }
7474:
7475:
7476:
7477: public static void kbdReset () {
7478: kbdRePress ();
7479: if (KBD_ZKEY_ON) {
7480: if (!kbdZKeyOn && kbdZKeyOnRequest) {
7481: kbdZKeyOpen ();
7482: }
7483: kbdZKeyIOData = 0L;
7484: kbdZKeyIOProgrammable = false;
7485: kbdZKeyUpdate ();
7486: }
7487: }
7488:
7489:
7490:
7491:
7492:
7493:
7494:
7495:
7496:
7497:
7498:
7499:
7500:
7501:
7502: public static void kbdDrawKey (int[] bitmap, int width, int x, int y, int w, int h, int u, int v, int[] ledColors, int[] letter, int stat) {
7503: boolean pointed = (stat & KBD_POINTED_MASK) != 0;
7504: boolean pressed = (stat & KBD_PRESSED_MASK) != 0;
7505:
7506: if (!pressed) {
7507: kbdDrawLine (bitmap, x + width * y,
7508: 1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
7509: width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
7510: -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
7511: -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
7512: } else {
7513: kbdDrawLine (bitmap, x + width * y,
7514: 1, 1, kbdHoleRGB, 1, w - 2, kbdHoleRGB,
7515: width, 1, kbdHoleRGB, width, h - 2, kbdHoleRGB,
7516: -1, 1, kbdHoleRGB, -1, w - 2, kbdHoleRGB,
7517: -width, 1, kbdHoleRGB, -width, h - 2, kbdHoleRGB);
7518: }
7519: x += 1 + u;
7520: y += 1 + v;
7521: w -= 2 + u * 2;
7522: h -= 2 + v * 2;
7523:
7524: if (u > 0) {
7525: kbdFillRect (bitmap, width, x - u, y, u, h, kbdKeytopRGB);
7526: kbdFillRect (bitmap, width, x + w, y, u, h, kbdKeytopRGB);
7527: }
7528: if (v > 0) {
7529: kbdFillRect (bitmap, width, x, y - v, w, v, kbdKeytopRGB);
7530: kbdFillRect (bitmap, width, x, y + h, w, v, kbdKeytopRGB);
7531: }
7532:
7533: int lx = x;
7534: int ly = y;
7535: int lw = w;
7536: int lh = h;
7537: kbdDrawLine (bitmap, x + width * y,
7538: 1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
7539: width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
7540: -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
7541: -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
7542: x++;
7543: y++;
7544: w -= 2;
7545: h -= 2;
7546:
7547: kbdDrawLine (bitmap, x + width * y,
7548: 1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
7549: width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
7550: -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
7551: -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
7552: x++;
7553: y++;
7554: w -= 2;
7555: h -= 2;
7556:
7557: kbdFillRect (bitmap, width, x, y, w, h, pointed ? kbdPointedRGB : kbdKeytopRGB);
7558:
7559: if (ledColors != null) {
7560: x += w - KBD_LED_WIDTH >> 1;
7561: y += h;
7562: kbdFillRect (bitmap, width, x, y - KBD_LED_HEIGHT, KBD_LED_WIDTH, KBD_LED_HEIGHT, ledColors[0]);
7563: kbdFillRect (bitmap, width, x, y, KBD_LED_WIDTH, pressed ? 2 : 3, ledColors[1]);
7564: }
7565:
7566: if (letter != null) {
7567: kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter);
7568: }
7569: }
7570:
7571:
7572:
7573:
7574:
7575:
7576:
7577:
7578:
7579:
7580:
7581:
7582:
7583:
7584: public static void kbdDrawKey2 (int[] bitmap, int width, int x, int y, int w, int h, int u, int v, int[] ledColors, int code, int stat) {
7585: if (KBD_USE_ROM_FONT) {
7586: boolean pointed = (stat & KBD_POINTED_MASK) != 0;
7587: boolean pressed = (stat & KBD_PRESSED_MASK) != 0;
7588:
7589: if (!pressed) {
7590: kbdDrawLine (bitmap, x + width * y,
7591: 1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
7592: width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
7593: -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
7594: -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
7595: } else {
7596: kbdDrawLine (bitmap, x + width * y,
7597: 1, 1, kbdHoleRGB, 1, w - 2, kbdHoleRGB,
7598: width, 1, kbdHoleRGB, width, h - 2, kbdHoleRGB,
7599: -1, 1, kbdHoleRGB, -1, w - 2, kbdHoleRGB,
7600: -width, 1, kbdHoleRGB, -width, h - 2, kbdHoleRGB);
7601: }
7602: x += 1 + u;
7603: y += 1 + v;
7604: w -= 2 + u * 2;
7605: h -= 2 + v * 2;
7606:
7607: if (u > 0) {
7608: kbdFillRect (bitmap, width, x - u, y, u, h, kbdKeytopRGB);
7609: kbdFillRect (bitmap, width, x + w, y, u, h, kbdKeytopRGB);
7610: }
7611: if (v > 0) {
7612: kbdFillRect (bitmap, width, x, y - v, w, v, kbdKeytopRGB);
7613: kbdFillRect (bitmap, width, x, y + h, w, v, kbdKeytopRGB);
7614: }
7615:
7616: int lx = x;
7617: int ly = y;
7618: int lw = w;
7619: int lh = h;
7620: kbdDrawLine (bitmap, x + width * y,
7621: 1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
7622: width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
7623: -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
7624: -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
7625: x++;
7626: y++;
7627: w -= 2;
7628: h -= 2;
7629:
7630: kbdDrawLine (bitmap, x + width * y,
7631: 1, 1, kbdTopLeftRGB, 1, w - 2, kbdTopRGB,
7632: width, 1, kbdTopRightRGB, width, h - 2, kbdRightRGB,
7633: -1, 1, kbdBottomRightRGB, -1, w - 2, kbdBottomRGB,
7634: -width, 1, kbdBottomLeftRGB, -width, h - 2, kbdLeftRGB);
7635: x++;
7636: y++;
7637: w -= 2;
7638: h -= 2;
7639:
7640: kbdFillRect (bitmap, width, x, y, w, h, pointed ? kbdPointedRGB : kbdKeytopRGB);
7641:
7642: if (ledColors != null) {
7643: x += w - KBD_LED_WIDTH >> 1;
7644: y += h;
7645: kbdFillRect (bitmap, width, x, y - KBD_LED_HEIGHT, KBD_LED_WIDTH, KBD_LED_HEIGHT, ledColors[0]);
7646: kbdFillRect (bitmap, width, x, y, KBD_LED_WIDTH, pressed ? 2 : 3, ledColors[1]);
7647: }
7648:
7649: if (code != 0) {
7650: kbdDrawLetter2 (bitmap, width, lx, ly, lw, lh, code);
7651: }
7652: }
7653: }
7654:
7655:
7656:
7657:
7658:
7659:
7660:
7661:
7662:
7663:
7664: public static void kbdFillRect (int[] bitmap, int width, int x, int y, int w, int h, int color) {
7665: for (int j = 0; j < h; j++) {
7666: int dst = x + width * (y + j);
7667: for (int i = 0; i < w; i++) {
7668: bitmap[dst + i] = color;
7669: }
7670: }
7671: }
7672:
7673:
7674:
7675:
7676:
7677:
7678:
7679:
7680:
7681:
7682:
7683: public static void kbdDrawLetter (int[] bitmap, int width, int lx, int ly, int lw, int lh, int[] letter) {
7684: if (lw <= 32) {
7685: for (int j = 0; j < lh; j++) {
7686: int dst = lx + width * (ly + j);
7687: for (int i = 0; i < lw; i++) {
7688: if ((letter[j] >> lw - 1 - i & 1) != 0) {
7689: bitmap[dst + i] = kbdLetterRGB;
7690: } else if (i > 0 && j > 0 && (letter[j - 1] >> lw - 1 - (i - 1) & 1) != 0) {
7691: bitmap[dst + i] = kbdShadowRGB;
7692:
7693:
7694: }
7695: }
7696: }
7697: } else {
7698: int n = lw + 31 >> 5;
7699: for (int j = 0; j < lh; j++) {
7700: int src = n * j + n - 1;
7701: int dst = lx + width * (ly + j) + lw - 1;
7702: for (int i = 0; i < lw; i++) {
7703: if ((letter[src - (i >> 5)] >> (i & 0x1f) & 1) != 0) {
7704: bitmap[dst - i] = kbdLetterRGB;
7705: } else if (i > 0 && j > 0 && (letter[src - n - (i + 1 >> 5)] >> (i + 1 & 0x1f) & 1) != 0) {
7706: bitmap[dst - i] = kbdShadowRGB;
7707:
7708:
7709: }
7710: }
7711: }
7712: }
7713: }
7714:
7715:
7716:
7717:
7718:
7719:
7720:
7721:
7722:
7723:
7724:
7725: public static void kbdDrawLetter2 (int[] bitmap, int width, int lx, int ly, int lw, int lh, int code) {
7726: final int fw = 8;
7727: final int fh = 8;
7728: final int fa = 0x00f3a000;
7729: int dst = lx + (lw - fw >> 1) + width * (ly + (lh - fh >> 1));
7730: int src = fa + (fw + 7 >> 3) * fh * code;
7731: for (int y = 0; y < fh; y++) {
7732: for (int x = 0; x < fw; x++) {
7733: if ((MainMemory.mmrM8[src + (fw + 7 >> 3) * y + (x >> 3)] & 1 << (~x & 0x07)) != 0) {
7734: bitmap[dst + width * y + x] = kbdLetterRGB;
7735: } else if (x > 0 && y > 0 &&
7736: (MainMemory.mmrM8[src + (fw + 7 >> 3) * (y - 1) + (x - 1 >> 3)] & 1 << (~(x - 1) & 0x07)) != 0) {
7737: bitmap[dst + width * y + x] = kbdShadowRGB;
7738: }
7739: }
7740: }
7741: }
7742:
7743:
7744:
7745:
7746:
7747:
7748:
7749: public static void kbdDrawLine (int[] bitmap, int pos, int... vect_step_color) {
7750: for (int i = 0; i < vect_step_color.length; i += 3) {
7751: int vect = vect_step_color[i];
7752: int step = vect_step_color[i + 1];
7753: int color = vect_step_color[i + 2];
7754: for (; step > 0; step--) {
7755: bitmap[pos] = color;
7756: pos += vect;
7757: }
7758: }
7759: }
7760:
7761:
7762:
7763:
7764: public static void kbdStart () {
7765:
7766:
7767:
7768:
7769:
7770:
7771: XEiJ.pnlPanel.setFocusTraversalKeysEnabled (false);
7772:
7773:
7774: XEiJ.pnlPanel.setFocusable (true);
7775: ComponentFactory.addListener (
7776: XEiJ.pnlPanel,
7777: new FocusAdapter () {
7778: @Override public void focusGained (FocusEvent fe) {
7779: kbdCloseIME ();
7780: }
7781:
7782:
7783: });
7784: XEiJ.pnlPanel.requestFocusInWindow ();
7785: ComponentFactory.addListener (
7786: XEiJ.pnlPanel,
7787: new KeyAdapter () {
7788: @Override public void keyPressed (KeyEvent ke) {
7789: if (Mouse.musOutputButtonStatus) {
7790: System.out.println ("when=" + ke.getWhen () + " toString=\"" + ke.toString () + "\"");
7791:
7792:
7793: }
7794: kbdCloseIME ();
7795: int keyCode = ke.getKeyCode ();
7796: if (KBD_ZKEY_ON && kbdZKeyPort != null) {
7797: switch (keyCode) {
7798: case KeyEvent.VK_HALF_WIDTH:
7799: case KeyEvent.VK_FULL_WIDTH:
7800:
7801: break;
7802: case KeyEvent.VK_F17:
7803:
7804: kbdInput (ke, true);
7805: kbdInput (ke, false);
7806: break;
7807: case KeyEvent.VK_F16:
7808:
7809: kbdInput (ke, true);
7810: kbdXF4Locked = ke;
7811: break;
7812: case KeyEvent.VK_NUM_LOCK:
7813: if (kbdIgnoreNumLock) {
7814: } else {
7815: kbdInput (ke, true);
7816: }
7817: break;
7818: default:
7819: kbdInput (ke, true);
7820: }
7821: } else {
7822: kbdInput (ke, true);
7823: }
7824: ke.consume ();
7825: }
7826: @Override public void keyReleased (KeyEvent ke) {
7827: if (Mouse.musOutputButtonStatus) {
7828: System.out.println ("when=" + ke.getWhen () + " toString=\"" + ke.toString () + "\"");
7829:
7830:
7831: }
7832: kbdCloseIME ();
7833: int keyCode = ke.getKeyCode ();
7834: int keyLocation = ke.getKeyLocation ();
7835: if (KBD_ZKEY_ON && kbdZKeyPort != null) {
7836: switch (keyCode) {
7837: case KeyEvent.VK_HALF_WIDTH:
7838: case KeyEvent.VK_FULL_WIDTH:
7839:
7840: kbdInput (ke, true);
7841: kbdInput (ke, false);
7842: break;
7843: case KeyEvent.VK_F17:
7844: case KeyEvent.VK_F16:
7845:
7846: break;
7847: case KeyEvent.VK_NUM_LOCK:
7848: if (kbdIgnoreNumLock) {
7849: kbdIgnoreNumLock = false;
7850: } else {
7851: kbdInput (ke, false);
7852:
7853: if (!kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK)) {
7854: kbdIgnoreNumLock = true;
7855: kbdZKeyPort.hitKey (KeyEvent.VK_NUM_LOCK);
7856: }
7857: }
7858: break;
7859: default:
7860: kbdInput (ke, false);
7861: if (kbdXF4Locked != null) {
7862: kbdInput (kbdXF4Locked, false);
7863: kbdXF4Locked = null;
7864: }
7865: }
7866: } else {
7867: kbdInput (ke, false);
7868: }
7869: ke.consume ();
7870: }
7871: @Override public void keyTyped (KeyEvent ke) {
7872: if (Mouse.musOutputButtonStatus) {
7873: System.out.println ("when=" + ke.getWhen () + " toString=\"" + ke.toString () + "\"");
7874:
7875:
7876: }
7877: kbdCloseIME ();
7878: ke.consume ();
7879: }
7880: });
7881:
7882:
7883: kbdCloseIME ();
7884:
7885: if (kbdOn) {
7886:
7887: if (MC68901.MFP_KBD_ON) {
7888: MC68901.mfpKbdInput (0xff, false);
7889: } else {
7890: kbdTransfer (0xff, false);
7891: }
7892: }
7893:
7894:
7895: if (RestorableFrame.rfmGetOpened (Settings.SGS_KBS_FRAME_KEY)) {
7896: kbdOpen ();
7897: }
7898:
7899: }
7900:
7901:
7902:
7903: public static void kbdOpen () {
7904: if (kbdFrame == null) {
7905: kbdMakeFrame ();
7906: }
7907: XEiJ.pnlExitFullScreen (false);
7908: kbdFrame.setVisible (true);
7909: }
7910:
7911:
7912:
7913:
7914: public static void kbdMakeFrame () {
7915:
7916:
7917: kbdEditor = new KeyMapEditor (kbdCurrentMap);
7918:
7919:
7920: ActionListener listener = new ActionListener () {
7921: @Override public void actionPerformed (ActionEvent ae) {
7922: Object source = ae.getSource ();
7923: switch (ae.getActionCommand ()) {
7924: case "Blank":
7925: kbdEditor.blank ();
7926: break;
7927: case "US layout":
7928: kbdUSLayoutOn = ((JCheckBox) source).isSelected ();
7929: kbdDefaultMapNonZ = (XEiJ.prgIsLinux ? KBD_DEFAULT_MAP_LINUX :
7930: XEiJ.prgIsMac ?
7931: kbdUSLayoutOn ? KBD_DEFAULT_MAP_MAC_US : KBD_DEFAULT_MAP_MAC :
7932: kbdUSLayoutOn ? KBD_DEFAULT_MAP_WIN_US : KBD_DEFAULT_MAP_WIN);
7933: break;
7934: case "Default":
7935: kbdEditor.reset (KBD_ZKEY_ON && kbdZKeyPort != null ? kbdDefaultMapZ : kbdDefaultMapNonZ);
7936: break;
7937: case "Save":
7938: kbdEditor.save ();
7939: break;
7940: case "Restore":
7941: kbdEditor.restore ();
7942: break;
7943: case "Undo":
7944: kbdEditor.undo ();
7945: break;
7946: case "Redo":
7947: kbdEditor.redo ();
7948: break;
7949: }
7950: }
7951: };
7952:
7953:
7954: kbdFrame = Multilingual.mlnTitle (
7955: ComponentFactory.createRestorableSubFrame (
7956: Settings.SGS_KBS_FRAME_KEY,
7957: "Key assignment",
7958: null,
7959: ComponentFactory.createVerticalBox (
7960: ComponentFactory.createFlowPanel (
7961: FlowLayout.CENTER, 10, 2,
7962: Multilingual.mlnText (ComponentFactory.createButton ("Blank", listener), "ja", "白紙"),
7963: ComponentFactory.setLineBorder (
7964: ComponentFactory.createFlowPanel (2, 2,
7965: Multilingual.mlnText (ComponentFactory.createCheckBox (kbdUSLayoutOn, "US layout", listener), "ja", "英語配列"),
7966: Multilingual.mlnText (ComponentFactory.createButton ("Default", listener), "ja", "初期値")
7967: )
7968: ),
7969: Multilingual.mlnText (ComponentFactory.createButton ("Save", listener), "ja", "保存"),
7970: Multilingual.mlnText (ComponentFactory.createButton ("Restore", listener), "ja", "復元"),
7971: Multilingual.mlnText (ComponentFactory.createButton ("Undo", listener), "ja", "取り消し"),
7972: Multilingual.mlnText (ComponentFactory.createButton ("Redo", listener), "ja", "やり直し")
7973: ),
7974: kbdEditor.getPanel ()
7975: )
7976: ),
7977: "ja", "キー割り当て");
7978:
7979: }
7980:
7981:
7982:
7983:
7984:
7985: public static void kbdCloseIME () {
7986: try {
7987: InputContext context = XEiJ.pnlPanel.getInputContext ();
7988: if (context != null && context.isCompositionEnabled ()) {
7989: context.setCompositionEnabled (false);
7990: context.setCharacterSubsets (null);
7991: }
7992: } catch (UnsupportedOperationException uoe) {
7993: }
7994: }
7995:
7996:
7997:
7998: public static void kbdSetOn (boolean on) {
7999: if (kbdOn != on) {
8000: kbdOn = on;
8001: if (on) {
8002: if (kbdType == KBD_STANDARD_TYPE) {
8003: System.out.println (Multilingual.mlnJapanese ?
8004: "標準キーボードを接続します" :
8005: "Connecting standard keyboard");
8006: } else if (kbdType == KBD_COMPACT_TYPE) {
8007: System.out.println (Multilingual.mlnJapanese ?
8008: "コンパクトキーボードを接続します" :
8009: "Connecting compact keyboard");
8010: }
8011: kbdWidth = kbdDataTypeWidth[kbdType];
8012: kbdHeight = kbdDataTypeHeight[kbdType];
8013: kbdImage = kbdDataTypeImage[kbdType];
8014: kbdBitmap = kbdDataTypeBitmap[kbdType];
8015: kbdIndexMap = kbdDataTypeIndexMap[kbdType];
8016: kbdFlush ();
8017:
8018: if (MC68901.MFP_KBD_ON) {
8019: MC68901.mfpKbdInput (0xff, false);
8020: } else {
8021: kbdTransfer (0xff, false);
8022: }
8023: } else {
8024: System.out.println (Multilingual.mlnJapanese ?
8025: "キーボードを切り離します" :
8026: "Disconnecting keyboard");
8027:
8028: if (kbdPointedIndex >= 0) {
8029: kbdHover (0, 0);
8030: }
8031: kbdWidth = 0;
8032: kbdHeight = 0;
8033: kbdImage = null;
8034: kbdBitmap = null;
8035: kbdIndexMap = null;
8036: }
8037: XEiJ.pnlUpdateArrangement ();
8038: }
8039: }
8040:
8041:
8042:
8043:
8044: public static void kbdSetType (int type) {
8045: if (kbdType != type) {
8046: kbdType = type;
8047: if (kbdOn) {
8048: System.out.println (Multilingual.mlnJapanese ?
8049: "キーボードを切り離します" :
8050: "Disconnecting keyboard");
8051:
8052: if (kbdPointedIndex >= 0) {
8053: kbdHover (0, 0);
8054: }
8055: if (kbdType == KBD_STANDARD_TYPE) {
8056: System.out.println (Multilingual.mlnJapanese ?
8057: "標準キーボードを接続します" :
8058: "Connecting standard keyboard");
8059: } else if (kbdType == KBD_COMPACT_TYPE) {
8060: System.out.println (Multilingual.mlnJapanese ?
8061: "コンパクトキーボードを接続します" :
8062: "Connecting compact keyboard");
8063: }
8064: kbdWidth = kbdDataTypeWidth[kbdType];
8065: kbdHeight = kbdDataTypeHeight[kbdType];
8066: kbdImage = kbdDataTypeImage[kbdType];
8067: kbdBitmap = kbdDataTypeBitmap[kbdType];
8068: kbdIndexMap = kbdDataTypeIndexMap[kbdType];
8069: kbdFlush ();
8070:
8071: if (MC68901.MFP_KBD_ON) {
8072: MC68901.mfpKbdInput (0xff, false);
8073: } else {
8074: kbdTransfer (0xff, false);
8075: }
8076: XEiJ.pnlUpdateArrangement ();
8077: }
8078: }
8079: }
8080:
8081:
8082:
8083: public static void kbdRepaint () {
8084: if (kbdOn) {
8085: kbdFlush ();
8086: XEiJ.pnlPanel.repaint (XEiJ.pnlKeyboardX, XEiJ.pnlKeyboardY, kbdWidth, kbdHeight);
8087: }
8088: }
8089:
8090:
8091:
8092: public static void kbdFlush () {
8093: int width = kbdDataTypeWidth[kbdType];
8094: int[][] indexRect = kbdDataTypeIndexRect[kbdType];
8095: int[] indexCharacterStat = kbdDataTypeIndexCharacterStat[kbdType];
8096: int[][] statFixBitmap = kbdDataTypeStatFixBitmap[kbdType];
8097:
8098: boolean numOff = KBD_LED_TEST << (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
8099: boolean ctrlOn = KBD_MODE_TEST << (kbdStat[KBD_CTRL_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
8100: boolean codeOn = KBD_LED_TEST << (kbdStat[KBD_CODE_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
8101: boolean opt1Off = KBD_MODE_TEST << (kbdStat[KBD_OPT1_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
8102: boolean kanaOn = KBD_LED_TEST << (kbdStat[KBD_KANA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
8103: boolean shiftOff = KBD_MODE_TEST << (kbdStat[KBD_SHIFT_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
8104: boolean romaOn = KBD_LED_TEST << (kbdStat[KBD_ROMA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
8105: boolean capsOff = KBD_LED_TEST << (kbdStat[KBD_CAPS_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
8106: boolean zenOn = KBD_LED_TEST << (kbdStat[KBD_ZEN_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
8107: boolean hiraOn = KBD_LED_TEST << (kbdStat[KBD_HIRA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
8108: byte[] varChr =
8109: (numOff
8110: ?
8111: (ctrlOn
8112: ?
8113: KBD_CTRL_CHR
8114: :
8115: (codeOn
8116: ?
8117: KBD_CODE_CHR
8118: :
8119: (opt1Off && kanaOn
8120: ?
8121: (XEiJ.busPbs (0x00ed002b) == 0
8122: ?
8123: (shiftOff
8124: ?
8125: KBD_KANA_CHR
8126: :
8127: KBD_KANA_SHIFT_CHR
8128: )
8129: :
8130: (shiftOff
8131: ?
8132: KBD_KANA_AIU_CHR
8133: :
8134: KBD_KANA_AIU_SHIFT_CHR
8135: )
8136: )
8137: :
8138: (opt1Off && romaOn
8139: ?
8140: (shiftOff
8141: ?
8142: KBD_ROMA_CHR
8143: :
8144: KBD_ROMA_SHIFT_CHR
8145: )
8146: :
8147: (capsOff
8148: ?
8149: (shiftOff
8150: ?
8151: KBD_NORMAL_CHR
8152: :
8153: KBD_SHIFT_CHR
8154: )
8155: :
8156: (shiftOff
8157: ?
8158: KBD_CAPS_CHR
8159: :
8160: KBD_CAPS_SHIFT_CHR
8161: )
8162: )
8163: )
8164: )
8165: )
8166: )
8167: :
8168: (ctrlOn
8169: ?
8170: KBD_NUM_CTRL_CHR
8171: :
8172: (codeOn
8173: ?
8174: KBD_NUM_CODE_CHR
8175: :
8176: (opt1Off && kanaOn
8177: ?
8178: (MainMemory.mmrM8[0x00ed002b] == 0
8179: ?
8180: (shiftOff
8181: ?
8182: KBD_NUM_KANA_CHR
8183: :
8184: KBD_NUM_KANA_SHIFT_CHR
8185: )
8186: :
8187: (shiftOff
8188: ?
8189: KBD_NUM_KANA_AIU_CHR
8190: :
8191: KBD_NUM_KANA_AIU_SHIFT_CHR
8192: )
8193: )
8194: :
8195: (opt1Off && romaOn
8196: ?
8197: (shiftOff
8198: ?
8199: KBD_NUM_ROMA_CHR
8200: :
8201: KBD_NUM_ROMA_SHIFT_CHR
8202: )
8203: :
8204: (capsOff
8205: ?
8206: (shiftOff
8207: ?
8208: KBD_NUM_CHR
8209: :
8210: KBD_NUM_SHIFT_CHR
8211: )
8212: :
8213: (shiftOff
8214: ?
8215: KBD_NUM_CAPS_CHR
8216: :
8217: KBD_NUM_CAPS_SHIFT_CHR
8218: )
8219: )
8220: )
8221: )
8222: )
8223: )
8224: );
8225: for (int i = 0; i < KBD_ALL_KEYS; i++) {
8226: int chr = 0;
8227: if (i < KBD_VAR_KEYS) {
8228: chr = varChr[i] & 255;
8229: if (0xa6 <= chr && chr <= 0xdd && chr != 0xb0 &&
8230: zenOn && hiraOn) {
8231: chr ^= 0x20;
8232: } else if (chr == 0x5c && (MainMemory.mmrM8[0x00ed0059] & 0b00000001) != 0) {
8233: chr = 0x80;
8234: } else if (chr == 0x7e && (MainMemory.mmrM8[0x00ed0059] & 0b00000010) != 0) {
8235: chr = 0x81;
8236: } else if (chr == 0x7c && (MainMemory.mmrM8[0x00ed0059] & 0b00000100) != 0) {
8237: chr = 0x82;
8238: }
8239: }
8240: int stat = kbdStat[i] & (KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK);
8241: int characterStat = chr << 8 | stat;
8242: if (indexCharacterStat[i] != characterStat) {
8243: indexCharacterStat[i] = characterStat;
8244: int[] rect = indexRect[i];
8245: if (i < KBD_VAR_KEYS) {
8246: int[] bitmap = kbdVarStatBitmap[chr][stat];
8247: int p = rect[0] + width * rect[1];
8248: int w = rect[2];
8249: int h = rect[3];
8250: int q = 0;
8251: for (int dy = 0; dy < h; dy++) {
8252: for (int dx = 0; dx < w; dx++) {
8253: kbdBitmap[p++] = bitmap[q++];
8254: }
8255: p += width - w;
8256: }
8257: } else if (i < KBD_VAR_KEYS + KBD_LED_KEYS) {
8258: int[] bitmap = kbdLedStatBitmap[i - KBD_VAR_KEYS][stat];
8259: if (rect.length >= 4) {
8260: int p = rect[0] + width * rect[1];
8261: int w = rect[2];
8262: int h = rect[3];
8263: int q = 0;
8264: for (int dy = 0; dy < h; dy++) {
8265: for (int dx = 0; dx < w; dx++) {
8266: kbdBitmap[p++] = bitmap[q++];
8267: }
8268: p += width - w;
8269: }
8270: }
8271: } else {
8272: int[] bitmap = statFixBitmap[stat];
8273: if (rect.length >= 4) {
8274: int p = rect[0] + width * rect[1];
8275: int w = rect[2];
8276: int h = rect[3];
8277: for (int dy = 0; dy < h; dy++) {
8278: for (int dx = 0; dx < w; dx++) {
8279: kbdBitmap[p] = bitmap[p];
8280: p++;
8281: }
8282: p += width - w;
8283: }
8284: if (rect.length >= 8) {
8285: p = rect[4] + width * rect[5];
8286: w = rect[6];
8287: h = rect[7];
8288: for (int dy = 0; dy < h; dy++) {
8289: for (int dx = 0; dx < w; dx++) {
8290: kbdBitmap[p] = bitmap[p];
8291: p++;
8292: }
8293: p += width - w;
8294: }
8295: }
8296: }
8297: }
8298: }
8299: }
8300: }
8301:
8302:
8303:
8304:
8305: public static void kbdHover (int x, int y) {
8306: boolean flag = false;
8307: int i = kbdIndexMap[x + kbdWidth * y];
8308: if (kbdPointedIndex != i) {
8309: if (kbdPointedIndex >= 0) {
8310: int stat = kbdStat[kbdPointedIndex];
8311: kbdStat[kbdPointedIndex] = stat &= ~KBD_POINTED_MASK;
8312: if ((stat & KBD_MOUSEDOWN_MASK) != 0) {
8313: kbdStat[kbdPointedIndex] = stat &= ~KBD_MOUSEDOWN_MASK;
8314: if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {
8315: kbdStat[kbdPointedIndex] = stat &= ~KBD_PRESSED_MASK;
8316: kbdRelease (kbdPointedIndex);
8317: }
8318: }
8319: }
8320: kbdPointedIndex = i;
8321: flag = true;
8322: }
8323: if (kbdPointedIndex >= 0) {
8324: int stat = kbdStat[kbdPointedIndex];
8325: kbdStat[kbdPointedIndex] = stat |= KBD_POINTED_MASK;
8326: if (((stat & KBD_MOUSEDOWN_MASK) != 0) != (Mouse.musButtonLeft || Mouse.musButtonRight)) {
8327: if (Mouse.musButtonLeft && (kbdPointedIndex == KBD_SHIFT_INDEX ||
8328: kbdPointedIndex == KBD_CTRL_INDEX) ||
8329: Mouse.musButtonRight) {
8330: stat ^= KBD_LOCKED_MASK;
8331: kbdStat[kbdPointedIndex] = stat |= KBD_MOUSEDOWN_MASK;
8332: if ((stat & KBD_PRESSED_MASK) == 0) {
8333: kbdStat[kbdPointedIndex] = stat |= KBD_PRESSED_MASK;
8334: kbdPress (kbdPointedIndex);
8335: }
8336: } else if (Mouse.musButtonLeft) {
8337: stat &= ~KBD_LOCKED_MASK;
8338: kbdStat[kbdPointedIndex] = stat |= KBD_MOUSEDOWN_MASK;
8339: if ((stat & KBD_PRESSED_MASK) == 0) {
8340: kbdStat[kbdPointedIndex] = stat |= KBD_PRESSED_MASK;
8341: kbdPress (kbdPointedIndex);
8342: }
8343: } else {
8344: kbdStat[kbdPointedIndex] = stat &= ~KBD_MOUSEDOWN_MASK;
8345: if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {
8346: kbdStat[kbdPointedIndex] = stat &= ~KBD_PRESSED_MASK;
8347: kbdRelease (kbdPointedIndex);
8348: }
8349: }
8350: flag = true;
8351: }
8352: }
8353: if (flag) {
8354: kbdRepaint ();
8355: }
8356: }
8357:
8358:
8359:
8360: public static void kbdInput (KeyEvent ke, boolean pressed) {
8361: int keyCode = ke.getKeyCode ();
8362: if (pressed) {
8363: if ((ke.getModifiersEx () & XEiJ.MNB_MODIFIERS) == XEiJ.MNB_MODIFIERS) {
8364: switch (keyCode) {
8365: case KeyEvent.VK_C:
8366: XEiJ.mnbConfigMenu.doClick ();
8367: return;
8368: case KeyEvent.VK_D:
8369: XEiJ.mnbDisplayMenu.doClick ();
8370: return;
8371: case KeyEvent.VK_F:
8372: XEiJ.mnbFileMenu.doClick ();
8373: return;
8374: case KeyEvent.VK_I:
8375: XEiJ.mnbInputMenu.doClick ();
8376: return;
8377: case KeyEvent.VK_K:
8378: if (kbdOn) {
8379: XEiJ.mnbNoKeyboardMenuItem.doClick ();
8380: } else if (kbdType == KBD_COMPACT_TYPE) {
8381: XEiJ.mnbCompactKeyboardMenuItem.doClick ();
8382: } else {
8383: XEiJ.mnbStandardKeyboardMenuItem.doClick ();
8384: }
8385: return;
8386: case KeyEvent.VK_L:
8387: XEiJ.mnbLanguageMenu.doClick ();
8388: return;
8389: case KeyEvent.VK_M:
8390: XEiJ.mpuMenu.doClick ();
8391: return;
8392: case KeyEvent.VK_O:
8393: XEiJ.mpuOpt1ResetMenuItem.doClick ();
8394: return;
8395: case KeyEvent.VK_P:
8396: if (XEiJ.mnbPlayMenuItem.isEnabled ()) {
8397: XEiJ.mnbPlayMenuItem.doClick ();
8398: }
8399: return;
8400: case KeyEvent.VK_Q:
8401: if (XEiJ.mnbQuitMenuItem.isEnabled ()) {
8402: XEiJ.mnbQuitMenuItem.doClick ();
8403: }
8404: return;
8405: case KeyEvent.VK_R:
8406: XEiJ.mpuResetMenuItem.doClick ();
8407: return;
8408: case KeyEvent.VK_S:
8409: if (XEiJ.mnbSoundMenu.isEnabled ()) {
8410: XEiJ.mnbSoundMenu.doClick ();
8411: }
8412: return;
8413: case KeyEvent.VK_T:
8414: if (XEiJ.PNL_STEREOSCOPIC_ON) {
8415: XEiJ.mnbStereoscopicMenuItem.doClick ();
8416: }
8417: return;
8418: case KeyEvent.VK_V:
8419: if (XEiJ.mnbPasteMenuItem.isEnabled ()) {
8420: XEiJ.mnbPasteMenuItem.doClick ();
8421: }
8422: return;
8423: case KeyEvent.VK_W:
8424: if (XEiJ.mnbFitInWindowMenuItem.isEnabled ()) {
8425: XEiJ.mnbFitInWindowMenuItem.doClick ();
8426: }
8427: return;
8428: case KeyEvent.VK_X:
8429: XEiJ.mnbFixedScaleMenuItem.doClick ();
8430: return;
8431: }
8432: }
8433: }
8434: if (PPI.ppiInput (ke, pressed)) {
8435: return;
8436: }
8437: {
8438:
8439: int keyLocation = ke.getKeyLocation ();
8440: int extendedOrRaw = XEiJ.prgIsMac ? ke.getExtendedKeyCode () : kbdGetRawCode (ke);
8441: int intCode = keyCode << 16 | extendedOrRaw << 4 | keyLocation;
8442: if ((keyCode & (XEiJ.prgIsMac ? 0x00000fff : 0x0000ffff)) != keyCode ||
8443: (extendedOrRaw & (XEiJ.prgIsMac ? 0x0f000fff : 0x00000fff)) != extendedOrRaw ||
8444: (keyLocation & 0x0000000f) != keyLocation ||
8445: intCode == 0) {
8446: System.out.printf ("KeyEvent: keyCode=0x%08x, extendedOrRaw=0x%08x, keyLocation=0x%08x\n",
8447: keyCode, extendedOrRaw, keyLocation);
8448: } else {
8449: if (Mouse.musOutputButtonStatus) {
8450: System.out.printf ("intCode=0x%08x, pressed=%b\n", intCode, pressed);
8451: }
8452: for (int xo = 0; xo < KBD_ALL_KEYS; xo++) {
8453: if (kbdCurrentMap[3 * xo] == intCode ||
8454: kbdCurrentMap[3 * xo + 1] == intCode ||
8455: kbdCurrentMap[3 * xo + 2] == intCode) {
8456: int eo = KBD_XO_TO_EO[xo];
8457: int stat = kbdStat[eo];
8458:
8459: if (pressed) {
8460: if ((stat & KBD_KEYDOWN_MASK) == 0) {
8461: kbdStat[eo] = stat |= KBD_KEYDOWN_MASK;
8462: if ((stat & KBD_PRESSED_MASK) == 0) {
8463: kbdStat[eo] = stat |= KBD_PRESSED_MASK;
8464: kbdPress (eo);
8465: kbdRepaint ();
8466: }
8467: }
8468: } else {
8469: if ((stat & KBD_KEYDOWN_MASK) != 0) {
8470: kbdStat[eo] = stat &= ~KBD_KEYDOWN_MASK;
8471: if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {
8472: kbdStat[eo] = stat &= ~KBD_PRESSED_MASK;
8473: kbdRelease (eo);
8474: kbdRepaint ();
8475: }
8476: }
8477: }
8478: return;
8479: }
8480: }
8481: }
8482: }
8483: if (pressed) {
8484: if (keyCode == KeyEvent.VK_F11) {
8485: if ((ke.getModifiersEx () & InputEvent.SHIFT_DOWN_MASK) == InputEvent.SHIFT_DOWN_MASK) {
8486: Mouse.musSetSeamlessOn (!Mouse.musSeamlessOn);
8487: return;
8488: }
8489: if (kbdF11Mode == KBD_F11_DO_NOTHING) {
8490: } else if (XEiJ.pnlFullscreenOn ||
8491: kbdF11Mode == KBD_F11_FULLSCREEN) {
8492:
8493: if (XEiJ.mnbFullscreenMenuItem.isEnabled ()) {
8494: if (!XEiJ.mnbFullscreenMenuItem.isSelected ()) {
8495: XEiJ.mnbFullscreenMenuItem.doClick ();
8496: } else if (XEiJ.pnlPrevFitInWindowOn) {
8497: XEiJ.mnbFitInWindowMenuItem.doClick ();
8498: } else {
8499: XEiJ.mnbFixedScaleMenuItem.doClick ();
8500: }
8501: }
8502: } else if (kbdF11Mode == KBD_F11_SCREENSHOT) {
8503: kbdDoCapture ();
8504: } else if (kbdF11Mode == KBD_F11_GIFANIMATION) {
8505: GIFAnimation.gifStartRecording ();
8506: } else if (kbdF11Mode == KBD_F11_STOPANDSTART) {
8507: if (XEiJ.mpuTask == null) {
8508: XEiJ.mpuStart ();
8509: } else {
8510: if (RootPointerList.RTL_ON) {
8511: if (RootPointerList.rtlCurrentSupervisorTaskIsStoppable ||
8512: RootPointerList.rtlCurrentUserTaskIsStoppable) {
8513: XEiJ.mpuStop (null);
8514: }
8515: } else {
8516: XEiJ.mpuStop (null);
8517: }
8518: }
8519: }
8520: return;
8521: } else if (keyCode == KeyEvent.VK_F12) {
8522: Mouse.musSetSeamlessOn (!Mouse.musSeamlessOn);
8523: return;
8524: }
8525: }
8526: }
8527:
8528: public static void kbdCommandPress (int x68kCode) {
8529: if ((0x01 <= x68kCode && x68kCode <= 0x6c) ||
8530: (0x70 <= x68kCode && x68kCode <= 0x74)) {
8531: int eo = KBD_XO_TO_EO[x68kCode < 0x70 ? x68kCode - 1 : x68kCode - 4];
8532: int stat = kbdStat[eo];
8533: if ((stat & KBD_PRESSED_MASK) == 0) {
8534: kbdStat[eo] = stat |= KBD_PRESSED_MASK;
8535: kbdPress (eo);
8536: kbdRepaint ();
8537: }
8538: }
8539: }
8540:
8541: public static void kbdCommandRelease (int x68kCode) {
8542: if ((0x01 <= x68kCode && x68kCode <= 0x6c) ||
8543: (0x70 <= x68kCode && x68kCode <= 0x74)) {
8544: int eo = KBD_XO_TO_EO[x68kCode < 0x70 ? x68kCode - 1 : x68kCode - 4];
8545: int stat = kbdStat[eo];
8546: if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {
8547: kbdStat[eo] = stat &= ~KBD_PRESSED_MASK;
8548: kbdRelease (eo);
8549: kbdRepaint ();
8550: }
8551: }
8552: }
8553:
8554:
8555:
8556: public static int kbdGetRawCode (KeyEvent ke) {
8557: int rawCode = 0;
8558:
8559: String s = ke.paramString ();
8560: int i = s.indexOf ("rawCode=");
8561: if (0 <= i) {
8562: i += 8;
8563: for (int k = s.length (); i < k; i++) {
8564: char c = s.charAt (i);
8565: if (c < '0' || '9' < c) {
8566: break;
8567: }
8568: rawCode = rawCode * 10 + (c - '0');
8569: }
8570: }
8571: return rawCode;
8572: }
8573:
8574:
8575:
8576:
8577: public static void kbdRePress () {
8578: for (int i = 0; i < KBD_ALL_KEYS; i++) {
8579: if (i != KBD_NUM_INDEX &&
8580: (kbdStat[i] & KBD_PRESSED_MASK) != 0) {
8581:
8582: int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f;
8583:
8584: if (MC68901.MFP_KBD_ON) {
8585: MC68901.mfpKbdInput (code, true);
8586: } else {
8587: kbdTransfer (code, true);
8588: }
8589: }
8590: }
8591: }
8592:
8593:
8594:
8595: public static void kbdPress (int i) {
8596:
8597: int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f;
8598:
8599: if (KBD_DEBUG_LED ? KBD_KANA_INDEX <= i && i <= KBD_NUM_INDEX : i == KBD_NUM_INDEX) {
8600: int stat = kbdStat[i];
8601: if ((stat & KBD_LIGHTED_MASK) != 0) {
8602: stat &= ~(KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK);
8603: } else {
8604: stat |= kbdLedBrightness << KBD_BRIGHTNESS_BIT | KBD_LIGHTED_MASK;
8605: }
8606: kbdStat[i] = stat;
8607: kbdRepaint ();
8608: }
8609:
8610: if (MC68901.MFP_KBD_ON) {
8611: MC68901.mfpKbdInput (code, true);
8612: } else {
8613: kbdTransfer (code, true);
8614: }
8615: }
8616:
8617:
8618:
8619: public static void kbdRelease (int i) {
8620:
8621: int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f | 0x80;
8622:
8623: if (MC68901.MFP_KBD_ON) {
8624: MC68901.mfpKbdInput (code, false);
8625: } else {
8626: kbdTransfer (code, false);
8627: }
8628: }
8629:
8630:
8631:
8632:
8633: public static void kbdTransfer (int code, boolean repeat) {
8634: XEiJ.tmrTimer.schedule (new KBDTask (code, repeat), 0L);
8635: }
8636:
8637:
8638:
8639:
8640: public static void kbdSetRepeatDelay (int n) {
8641: n &= 15;
8642: kbdRepeatDelay = 200 + 100 * n;
8643: }
8644:
8645:
8646:
8647:
8648: public static void kbdSetRepeatInterval (int n) {
8649: n &= 15;
8650: kbdRepeatInterval = 30 + 5 * n * n;
8651: }
8652:
8653:
8654:
8655:
8656:
8657:
8658:
8659:
8660:
8661:
8662: public static void kbdSetLedStatus (int n) {
8663: boolean flag = false;
8664: n = ~n & 127;
8665: if (KBD_ZKEY_ON) {
8666: if (kbdZKeyStatus != n) {
8667: kbdZKeyStatus = n;
8668: kbdZKeyUpdate ();
8669: }
8670: }
8671: for (int i = KBD_KANA_INDEX; i <= KBD_ZEN_INDEX; i++) {
8672: int mask = (n & 1) << KBD_LIGHTED_BIT;
8673: int stat = kbdStat[i];
8674: if ((stat & KBD_LIGHTED_MASK) != mask) {
8675: if (mask == 0) {
8676: stat &= ~(KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK);
8677: } else {
8678: stat |= kbdLedBrightness << KBD_BRIGHTNESS_BIT | KBD_LIGHTED_MASK;
8679: }
8680: kbdStat[i] = stat;
8681: flag = true;
8682: }
8683: n >>= 1;
8684: }
8685: if (flag) {
8686: kbdRepaint ();
8687: }
8688: }
8689:
8690:
8691:
8692:
8693:
8694:
8695:
8696: public static void kbdSetLedBrightness (int n) {
8697: n &= 3;
8698: if (kbdLedBrightness != n) {
8699: kbdLedBrightness = n;
8700: boolean flag = false;
8701: for (int i = KBD_KANA_INDEX; i <= KBD_ZEN_INDEX; i++) {
8702: int stat = kbdStat[i];
8703: if ((stat & KBD_LIGHTED_MASK) != 0) {
8704: stat &= ~(KBD_BRIGHTNESS_MASK | KBD_LIGHTED_MASK);
8705: stat |= kbdLedBrightness << KBD_BRIGHTNESS_BIT | KBD_LIGHTED_MASK;
8706: kbdStat[i] = stat;
8707: flag = true;
8708: }
8709: }
8710: if (flag) {
8711: kbdRepaint ();
8712: }
8713: if (KBD_ZKEY_ON) {
8714: kbdZKeyUpdate ();
8715: }
8716: }
8717: }
8718:
8719:
8720:
8721: public static void kbdZKeyOpen () {
8722: if (KBD_ZKEY_ON) {
8723: if (kbdZKeyPort == null) {
8724:
8725: try {
8726: kbdZKeyPort = new ZKeyLEDPort (kbdZKeyDebugFlag);
8727: } catch (IOException ioe) {
8728:
8729: }
8730:
8731: if (kbdZKeyPort == null) {
8732: System.out.printf (Multilingual.mlnJapanese ?
8733: "Z キーボードが接続されていないか制御できません\n" :
8734: "Z Keyboard is not connected or cannot be controlled\n");
8735: kbdZKeyOnRequest = false;
8736: if (kbdZKeyConnectCheckBox != null) {
8737: kbdZKeyConnectCheckBox.setSelected (false);
8738: }
8739: return;
8740: }
8741:
8742: senderStart ();
8743:
8744: System.arraycopy (kbdCurrentMap, 0,
8745: kbdCurrentMapNonZ, 0,
8746: KBD_DEFAULT_MAP_WIN.length);
8747:
8748: System.arraycopy (kbdCurrentMapZ, 0,
8749: kbdCurrentMap, 0,
8750: KBD_DEFAULT_MAP_WIN.length);
8751:
8752: if (kbdEditor != null) {
8753: kbdEditor.updateTextAll ();
8754: }
8755:
8756: kbdSavedNumLock = kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK);
8757:
8758: if (!kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK)) {
8759: kbdIgnoreNumLock = true;
8760: kbdZKeyPort.hitKey (KeyEvent.VK_NUM_LOCK);
8761: }
8762: }
8763: if (!kbdZKeyOn) {
8764: System.out.printf (Multilingual.mlnJapanese ?
8765: "Z キーボードの制御を開始しました\n" :
8766: "Z keyboard control started\n");
8767: kbdZKeyOn = true;
8768: if (kbdZKeyDemoCheckBox != null) {
8769: kbdZKeyDemoCheckBox.setEnabled (true);
8770: }
8771: }
8772: }
8773: }
8774:
8775:
8776:
8777: public static void kbdZKeyClose () {
8778: if (KBD_ZKEY_ON) {
8779:
8780: demoEnd ();
8781: if (kbdZKeyPort != null) {
8782:
8783: if (kbdSavedNumLock != kbdZKeyPort.isKeyToggled (KeyEvent.VK_NUM_LOCK)) {
8784: kbdIgnoreNumLock = true;
8785: kbdZKeyPort.hitKey (KeyEvent.VK_NUM_LOCK);
8786: }
8787:
8788:
8789:
8790: senderEnd ();
8791:
8792:
8793: kbdZKeyPort.send (0L);
8794:
8795: kbdZKeyPort.close ();
8796: kbdZKeyPort = null;
8797:
8798: System.arraycopy (kbdCurrentMap, 0,
8799: kbdCurrentMapZ, 0,
8800: KBD_DEFAULT_MAP_WIN.length);
8801:
8802: System.arraycopy (kbdCurrentMapNonZ, 0,
8803: kbdCurrentMap, 0,
8804: KBD_DEFAULT_MAP_WIN.length);
8805:
8806: if (kbdEditor != null) {
8807: kbdEditor.updateTextAll ();
8808: }
8809: }
8810: if (kbdZKeyOn) {
8811: System.out.printf (Multilingual.mlnJapanese ?
8812: "Z キーボードの制御を終了しました\n" :
8813: "Z keyboard control ended\n");
8814: kbdZKeyOn = false;
8815: if (kbdZKeyDemoCheckBox != null) {
8816: kbdZKeyDemoCheckBox.setEnabled (false);
8817: }
8818: }
8819: }
8820: }
8821:
8822:
8823:
8824: public static void kbdZKeyUpdate () {
8825: if (KBD_ZKEY_ON && kbdZKeyPort != null &&
8826: !kbdZKeyIOProgrammable &&
8827: demoThread == null) {
8828: long data = 0L;
8829: for (int i = 0; i < 7; i++) {
8830: if ((kbdZKeyStatus & (1 << i)) != 0) {
8831: data |= 1L << (8 * i);
8832: }
8833: }
8834: data *= (kbdLedBrightness == 0 ? 255 :
8835: kbdLedBrightness == 1 ? 128 :
8836: kbdLedBrightness == 2 ? 64 : 32);
8837: senderSend (data);
8838: }
8839: }
8840:
8841:
8842:
8843:
8844:
8845: public static int kbdZKeyIOReadByte (int a) {
8846: a &= 15;
8847: if (a < 8) {
8848: return (int) (kbdZKeyIOData >>> (a << 3)) & 0xff;
8849: } else if (a == 8) {
8850: return kbdZKeyIOProgrammable ? 1 : 0;
8851: } else {
8852: return 0xff;
8853: }
8854: }
8855:
8856:
8857:
8858: public static int kbdZKeyIOReadWord (int a) {
8859: a &= 15;
8860: if (a < 8) {
8861: return (int) (kbdZKeyIOData >>> (a << 3)) & 0xffff;
8862: } else {
8863: return (kbdZKeyIOReadByte (a) << 8 |
8864: kbdZKeyIOReadByte (a + 1));
8865: }
8866: }
8867:
8868:
8869:
8870: public static int kbdZKeyIOReadLong (int a) {
8871: a &= 15;
8872: if (a < 8) {
8873: return (int) (kbdZKeyIOData >>> (a << 3));
8874: } else {
8875: return (kbdZKeyIOReadByte (a) << 24 |
8876: kbdZKeyIOReadByte (a + 1) << 16 |
8877: kbdZKeyIOReadByte (a + 2) << 8 |
8878: kbdZKeyIOReadByte (a + 3));
8879: }
8880: }
8881:
8882:
8883:
8884: public static void kbdZKeyIOWriteByte (int a, int d) {
8885: a &= 15;
8886: if (a < 8) {
8887: int bit = a << 3;
8888: kbdZKeyIOData = (kbdZKeyIOData & ~(0xffL << bit)) | (long) (d & 0xff) << bit;
8889: } else if (a == 8) {
8890: boolean programmable = (d & 1) != 0;
8891: if (kbdZKeyIOProgrammable != programmable) {
8892: kbdZKeyIOProgrammable = programmable;
8893: if (kbdZKeyIOProgrammable) {
8894: } else {
8895: kbdZKeyUpdate ();
8896: }
8897: }
8898: if (kbdZKeyIOProgrammable &&
8899: (d & 2) != 0 &&
8900: kbdZKeyPort != null &&
8901: demoThread == null) {
8902: long data = kbdZKeyIOData & 0x00ffffffffffffffL;
8903: senderSend (data);
8904: }
8905: }
8906: }
8907:
8908:
8909:
8910: public static void kbdZKeyIOWriteWord (int a, int d) {
8911: a &= 15;
8912: if (a < 8) {
8913: int bit = a << 3;
8914: kbdZKeyIOData = (kbdZKeyIOData & ~(0xffffL << bit)) | (long) (d & 0xffff) << bit;
8915: } else {
8916: kbdZKeyIOWriteByte (a, d >> 8);
8917: kbdZKeyIOWriteByte (a + 1, d);
8918: }
8919: }
8920:
8921:
8922:
8923: public static void kbdZKeyIOWriteLong (int a, int d) {
8924: a &= 15;
8925: if (a < 8) {
8926: int bit = a << 3;
8927: kbdZKeyIOData = (kbdZKeyIOData & ~(0xffffffffL << bit)) | ((long) d & 0xffffffffL) << bit;
8928: } else {
8929: kbdZKeyIOWriteByte (a, d >> 24);
8930: kbdZKeyIOWriteByte (a + 1, d >> 16);
8931: kbdZKeyIOWriteByte (a + 2, d >> 8);
8932: kbdZKeyIOWriteByte (a + 3, d);
8933: }
8934: }
8935:
8936:
8937:
8938:
8939: public static void kbdDoCapture () {
8940: try {
8941: File dir = new File ("capture");
8942: if (dir.exists ()) {
8943: if (!dir.isDirectory ()) {
8944: return;
8945: }
8946: } else {
8947: if (!dir.mkdir ()) {
8948: return;
8949: }
8950: }
8951: HashSet<String> nameSet = new HashSet<String> ();
8952: for (String name : dir.list ()) {
8953: nameSet.add (name);
8954: }
8955: int number = 0;
8956: for (String key : Settings.SGS_FRAME_KEYS) {
8957: BufferedImage image = RestorableFrame.rfmCapture (key);
8958: if (image != null) {
8959: String name;
8960: do {
8961: number++;
8962: name = number + ".png";
8963: } while (!nameSet.add (name));
8964: name = "capture/" + name;
8965: if (XEiJ.saveImage (image, name)) {
8966: System.out.println (Multilingual.mlnJapanese ? name + " を更新しました" : name + " was updated");
8967: }
8968: }
8969: }
8970: } catch (Exception e) {
8971: }
8972: }
8973:
8974:
8975:
8976:
8977: public static class KBDTask extends TimerTask {
8978: public int code;
8979: public boolean repeat;
8980: public KBDTask (int c, boolean r) {
8981: code = c;
8982: repeat = r;
8983: }
8984: @Override public void run () {
8985: if (kbdRepeatTask != null) {
8986:
8987:
8988: kbdRepeatTask.cancel ();
8989: kbdRepeatTask = null;
8990: }
8991:
8992: MC68901.mfpKeyboardInput (code);
8993: if (repeat) {
8994:
8995: XEiJ.tmrTimer.schedule (kbdRepeatTask = new KBDRepeatTask (code), (long) kbdRepeatDelay, (long) kbdRepeatInterval);
8996: }
8997: }
8998: }
8999:
9000:
9001:
9002:
9003: public static class KBDRepeatTask extends TimerTask {
9004: public int code;
9005: public KBDRepeatTask (int c) {
9006: code = c;
9007: }
9008: @Override public void run () {
9009:
9010: MC68901.mfpKeyboardInput (code);
9011: }
9012: }
9013:
9014:
9015:
9016:
9017: static final long DEMO_INTERVAL = 40L;
9018: static final int DEMO_LEVEL = 60;
9019: static final int DEMO_BRIGHTEN = 3;
9020: static final int DEMO_DIM = -1;
9021: static final int DEMO_PROPAGATION = 10;
9022: static final int DEMO_LED = 7;
9023: static final int DEMO_INVISIBLE = 3;
9024: static long[] demoMap;
9025: static int[] demoBrightness;
9026: static int[] demoDelta;
9027: static int demoCounter;
9028: static Thread demoThread;
9029:
9030:
9031: static void demoInit () {
9032: demoMap = new long[DEMO_LEVEL];
9033: for (int i = 0; i < DEMO_LEVEL; i++) {
9034: demoMap[i] = (long) (i * i * 255 / ((DEMO_LEVEL - 1) * (DEMO_LEVEL - 1)));
9035: }
9036: demoBrightness = new int[DEMO_LED];
9037: demoDelta = new int[DEMO_LED];
9038: demoThread = null;
9039: }
9040:
9041:
9042: static void demoStart () {
9043: if (demoThread == null) {
9044: Arrays.fill (demoBrightness, 0);
9045: Arrays.fill (demoDelta, 0);
9046: demoCounter = 0;
9047:
9048: demoThread = new DemoThread ();
9049: demoThread.start ();
9050: }
9051: }
9052:
9053:
9054: static void demoEnd () {
9055: if (demoThread != null) {
9056:
9057: demoThread.interrupt ();
9058:
9059: try {
9060: demoThread.join (100);
9061: } catch (InterruptedException ie) {
9062: }
9063: demoThread = null;
9064: }
9065:
9066: kbdZKeyUpdate ();
9067: }
9068:
9069:
9070: static class DemoThread extends Thread {
9071: @Override public void run () {
9072:
9073: for (;;) {
9074:
9075: long data = 0L;
9076: for (int i = 0; i < DEMO_LED; i++) {
9077: data |= demoMap[demoBrightness[i]] << (i << 3);
9078: }
9079:
9080: senderSend (data);
9081:
9082: for (int i = 0; i < DEMO_LED; i++) {
9083: demoBrightness[i] += demoDelta[i];
9084: if (0 < demoDelta[i]) {
9085: if (DEMO_LEVEL - 1 <= demoBrightness[i]) {
9086: demoBrightness[i] = DEMO_LEVEL - 1;
9087: demoDelta[i] = DEMO_DIM;
9088: }
9089: } else if (demoDelta[i] < 0) {
9090: if (demoBrightness[i] <= 0) {
9091: demoBrightness[i] = 0;
9092: demoDelta[i] = 0;
9093: }
9094: }
9095: }
9096:
9097: if (demoCounter % DEMO_PROPAGATION == 0) {
9098: int k = demoCounter / DEMO_PROPAGATION;
9099: if (DEMO_INVISIBLE * 2 + DEMO_LED <= k) {
9100: k = (DEMO_INVISIBLE * 2 + DEMO_LED) * 2 - 1 - k;
9101: }
9102: if (DEMO_INVISIBLE <= k && k < DEMO_INVISIBLE + DEMO_LED) {
9103: demoDelta[k - DEMO_INVISIBLE] = DEMO_BRIGHTEN;
9104: }
9105: }
9106:
9107: demoCounter++;
9108: if (demoCounter == DEMO_PROPAGATION * (DEMO_INVISIBLE * 2 + DEMO_LED) * 2) {
9109: demoCounter = 0;
9110: }
9111:
9112: try {
9113: Thread.sleep (DEMO_INTERVAL);
9114: } catch (InterruptedException ie) {
9115: break;
9116: }
9117: }
9118: }
9119: }
9120:
9121:
9122:
9123:
9124:
9125: static final long SENDER_INTERVAL = 10L;
9126: static long senderLastData;
9127: static long senderSentData;
9128: static ArrayBlockingQueue<Long> senderQueue;
9129: static Thread senderThread;
9130:
9131:
9132: static void senderStart () {
9133: if (senderThread == null) {
9134: if (senderQueue == null) {
9135: senderLastData = -1L;
9136: senderSentData = -1L;
9137:
9138: senderQueue = new ArrayBlockingQueue<Long> (10);
9139: }
9140:
9141: senderThread = new SenderThread ();
9142: senderThread.start ();
9143: }
9144: }
9145:
9146:
9147: static void senderEnd () {
9148: if (senderThread != null) {
9149:
9150: senderThread.interrupt ();
9151:
9152: try {
9153: senderThread.join (100);
9154: } catch (InterruptedException ie) {
9155: }
9156: senderThread = null;
9157: }
9158: }
9159:
9160:
9161: static void senderSend (long data) {
9162: if (senderLastData != data) {
9163: senderLastData = data;
9164:
9165: senderQueue.clear ();
9166:
9167: senderQueue.offer (data);
9168: }
9169: }
9170:
9171:
9172: static class SenderThread extends Thread {
9173: @Override public void run () {
9174:
9175: for (;;) {
9176: long data;
9177:
9178: try {
9179: data = senderQueue.take ();
9180: } catch (InterruptedException ie) {
9181: break;
9182: }
9183:
9184: if (senderSentData != data) {
9185: senderSentData = data;
9186: kbdZKeyPort.send (data);
9187: }
9188:
9189: try {
9190: Thread.sleep (SENDER_INTERVAL);
9191: } catch (InterruptedException ie) {
9192: break;
9193: }
9194: }
9195: }
9196: }
9197:
9198:
9199:
9200: }
9201:
9202:
9203: