Keyboard.java
     1: //========================================================================================
     2: //  Keyboard.java
     3: //    en:Keyboard
     4: //    ja:キーボード
     5: //  Copyright (C) 2003-2017 Makoto Kamada
     6: //
     7: //  This file is part of the XEiJ (X68000 Emulator in Java).
     8: //  You can use, modify and redistribute the XEiJ if the conditions are met.
     9: //  Read the XEiJ License for more details.
    10: //  http://stdkmd.com/xeij/
    11: //========================================================================================
    12: 
    13: //----------------------------------------------------------------------------------------
    14: //! SHIFTとCTRLは左ボタンで押されただけでロックするようになっているが、
    15: //  これをプレフィックスにして次に他のキーが離された後にSHIFTとCTRLも自動的に離されるモードが欲しい
    16: //  右ボタンで押されたときのロックは従来通り、ロックしたキーをクリックするまで押されっぱなしにする
    17: //----------------------------------------------------------------------------------------
    18: 
    19: package xeij;
    20: 
    21: import java.awt.*;  //BasicStroke,BorderLayout,BoxLayout,Color,Component,Container,Cursor,Desktop,Dimension,Font,Frame,Graphics,Graphics2D,GraphicsDevice,GraphicsEnvironment,GridLayout,Image,Insets,Paint,Point,Rectangle,RenderingHints,Robot,Shape,Stroke,TexturePaint,Toolkit
    22: import java.awt.event.*;  //ActionEvent,ActionListener,ComponentAdapter,ComponentEvent,ComponentListener,FocusAdapter,FocusEvent,FocusListener,InputEvent,KeyAdapter,KeyEvent,KeyListener,MouseAdapter,MouseEvent,MouseListener,MouseMotionAdapter,MouseWheelEvent,WindowAdapter,WindowEvent,WindowListener,WindowStateListener
    23: import java.awt.image.*;  //BufferedImage,DataBuffer,DataBufferByte,DataBufferInt,IndexColorModel
    24: import java.awt.im.*;  //InputContext
    25: import java.io.*;  //BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,File,FileInputStream,FileNotFoundException,FileReader,InputStream,InputStreamReader,IOException,OutputStreamWriter,RandomAccessFile
    26: import java.lang.*;  //Boolean,Character,Class,Comparable,Double,Exception,Float,IllegalArgumentException,Integer,Long,Math,Number,Object,Runnable,SecurityException,String,StringBuilder,System
    27: import java.util.*;  //ArrayList,Arrays,Calendar,GregorianCalendar,HashMap,Map,Map.Entry,Timer,TimerTask,TreeMap
    28: 
    29: public class Keyboard {
    30: 
    31:   //デバッグ
    32:   public static final boolean KBD_DEBUG_LED = false;  //LEDキーが押されたらLEDを反転する
    33: 
    34:   //種類
    35:   public static final int KBD_STANDARD_TYPE =  0;  //Standard Keyboard
    36:   public static final int KBD_COMPACT_TYPE  =  1;  //Compact Keyboard
    37:   public static final int KBD_TYPES         =  2;  //キーボードの種類の数。Standard KeyboardとCompact Keyboardの2種類
    38: 
    39:   //サイズ
    40:   //  6+6*94+6=576,2+4*25+2=104  Standard Keyboard
    41:   //  6+6*76+6=468,2+4*25+2=104  Compact Keyboard
    42:   public static final int KBD_COL_WIDTH      =  6;  //列の幅(px)。可変キーの幅の1/4
    43:   public static final int KBD_ROW_HEIGHT     =  4;  //行の高さ(px)。可変キーの高さの1/4
    44:   public static final int KBD_LED_WIDTH      = 11;  //LEDの幅
    45:   public static final int KBD_LED_HEIGHT     =  4;  //LEDのキートップ側の高さ
    46:   public static final int KBD_PADDING_TOP    =  2;  //パディング(px)
    47:   public static final int KBD_PADDING_RIGHT  =  6;
    48:   public static final int KBD_PADDING_BOTTOM =  2;
    49:   public static final int KBD_PADDING_LEFT   =  6;
    50:   public static final int KBD_TOUCHABLE_AREA =  1;  //ポイントできる範囲。0=1段目から,1=2段目から,2=3段目から,3=キートップのみ
    51:   public static final int[] KBD_TYPE_COLS    = { 94, 76 };  //種類→キーボードの幅(列数)
    52:   public static final int[] KBD_TYPE_ROWS    = { 25, 25 };  //種類→キーボードの高さ(行数)
    53:   public static final int KBD_KEY_WIDTH      = KBD_COL_WIDTH * 4 - 1;  //可変キーとLEDキーの幅
    54:   public static final int KBD_KEY_HEIGHT     = KBD_ROW_HEIGHT * 4 - 1;  //可変キーとLEDキーの高さ
    55: 
    56:   //スタイル
    57:   public static final int KBD_NONE_STYLE     = 0;  //キーなし
    58:   public static final int KBD_NORMAL_STYLE   = 1;  //ノーマル
    59:   public static final int KBD_FUNCTION_STYLE = 2;  //キーの上端を1/2行削る。63~6C:F1~F10
    60:   public static final int KBD_NARROWER_STYLE = 3;  //キートップの左右を1/2列ずつ削る。55:XF1,56:XF2,57:XF3(Compact),58:XF4(Standard),59:XF5(Standard)
    61:   public static final int KBD_NARROW_STYLE   = 4;  //キートップの左右を1列ずつ削る。10:TAB,57:XF3(Standard),71:CTRL,72:OPT.1,73:OPT.2
    62:   public static final int KBD_SHORTER_STYLE  = 5;  //キートップの上下を1行ずつ削る。4E:ENTER(Standard)
    63:   public static final int KBD_SHORT_STYLE    = 6;  //キートップの上下を2行ずつ削る。3B:LEFT(Standard),3D:RIGHT(Standard)
    64:   public static final int KBD_RETURN_STYLE   = 7;  //レクタングルの左下を1列x4行削る。キートップの左右を1列ずつ削る。1D:RETURN
    65:   public static final int KBD_SHIFT_STYLE    = 8;  //レクタングルの左右を9列ずつ残して中央を削る。70:SHIFT
    66: 
    67:   //文字
    68:   public static final boolean KBD_USE_ROM_FONT = false;  //可変キーの文字をROMフォントにする。ROMフォントが生成済みでなければならない
    69: 
    70:   //色
    71:   public static final int KBD_LETTER_COLOR       = 14;  //文字
    72:   public static final int KBD_TOP_LEFT_COLOR     = 10;  //ボーダー左上
    73:   public static final int KBD_TOP_COLOR          =  8;  //ボーダー上
    74:   public static final int KBD_LEFT_COLOR         =  8;  //ボーダー左
    75:   public static final int KBD_POINTED_COLOR      =  8;  //キートップ(pointed)
    76:   public static final int KBD_TOP_RIGHT_COLOR    =  6;  //ボーダー右上
    77:   public static final int KBD_BOTTOM_LEFT_COLOR  =  6;  //ボーダー左下
    78:   public static final int KBD_KEYTOP_COLOR       =  6;  //キートップ
    79:   public static final int KBD_RIGHT_COLOR        =  4;  //ボーダー右
    80:   public static final int KBD_BOTTOM_COLOR       =  4;  //ボーダー下
    81:   public static final int KBD_BOTTOM_RIGHT_COLOR =  2;  //ボーダー右下
    82:   public static final int KBD_SHADOW_COLOR       =  2;  //文字の影
    83:   public static final int KBD_BACKGROUND_COLOR   =  0;  //背景
    84:   public static final int KBD_HOLE_COLOR         =  0;  //押し下げられたキーの周囲の隙間
    85:   public static final int KBD_RED_OFF_KEYTOP_COLOR   = Color.HSBtoRGB (0.99F, 0.50F, 0.40F);  //赤色LED,消灯,キートップ側
    86:   public static final int KBD_RED_OFF_BORDER_COLOR   = Color.HSBtoRGB (0.99F, 0.50F, 0.20F);  //赤色LED,消灯,ボーダー側
    87:   public static final int KBD_RED_ON_KEYTOP_COLOR    = Color.HSBtoRGB (0.99F, 1.00F, 1.00F);  //赤色LED,点灯,キートップ側
    88:   public static final int KBD_RED_ON_BORDER_COLOR    = Color.HSBtoRGB (0.99F, 1.00F, 0.50F);  //赤色LED,点灯,ボーダー側
    89:   public static final int KBD_GREEN_OFF_KEYTOP_COLOR = Color.HSBtoRGB (0.24F, 0.50F, 0.40F);  //緑色LED,消灯,キートップ側
    90:   public static final int KBD_GREEN_OFF_BORDER_COLOR = Color.HSBtoRGB (0.24F, 0.50F, 0.20F);  //緑色LED,消灯,ボーダー側
    91:   public static final int KBD_GREEN_ON_KEYTOP_COLOR  = Color.HSBtoRGB (0.24F, 1.00F, 1.00F);  //緑色LED,消灯,キートップ側
    92:   public static final int KBD_GREEN_ON_BORDER_COLOR  = Color.HSBtoRGB (0.24F, 1.00F, 0.50F);  //緑色LED,消灯,ボーダー側
    93: 
    94:   //状態
    95:   //  stat = KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK | KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK
    96:   //  ビット位置に依存しているので変更しないこと
    97:   public static final int KBD_POINTED_BIT   = 0;  //bit0 1=ポイントされている。ポイントされているキーは1つしか存在しない
    98:   public static final int KBD_PRESSED_BIT   = 1;  //bit1 1=押されている。(locked||keydown||mousedown)==pressed
    99:   public static final int KBD_LIGHTED_BIT   = 2;  //bit2 1=LEDが点灯している。LEDキーのみ
   100:   public static final int KBD_MOUSEDOWN_BIT = 3;  //bit3 1=マウスで押されている。pressedを伴う。描画には使わない
   101:   public static final int KBD_KEYDOWN_BIT   = 4;  //bit4 1=キーで押されている。pressedを伴う。描画には使わない
   102:   public static final int KBD_LOCKED_BIT    = 5;  //bit5 1=ロックされている。pressedを伴う。描画には使わない
   103:   public static final int KBD_POINTED_MASK   = 1 << KBD_POINTED_BIT;
   104:   public static final int KBD_PRESSED_MASK   = 1 << KBD_PRESSED_BIT;
   105:   public static final int KBD_LIGHTED_MASK   = 1 << KBD_LIGHTED_BIT;
   106:   public static final int KBD_MOUSEDOWN_MASK = 1 << KBD_MOUSEDOWN_BIT;
   107:   public static final int KBD_KEYDOWN_MASK   = 1 << KBD_KEYDOWN_BIT;
   108:   public static final int KBD_LOCKED_MASK    = 1 << KBD_LOCKED_BIT;
   109:   //  LEDキー
   110:   //    lighted||pointedかどうかで可変キーに表示する文字を変更する
   111:   //    KBD_LED_TEST << (stat & (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0
   112:   //  その他のモードキー
   113:   //    pressed||pointedかどうかで可変キーに表示する文字を変更する
   114:   //    KBD_MODE_TEST << (stat & (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0
   115:   public static final int KBD_LED_TEST  = 0b01011010_01011010_01011010_01011010;
   116:   public static final int KBD_MODE_TEST = 0b01100110_01100110_01100110_01100110;
   117: 
   118:   //数
   119:   public static final int KBD_VAR_KEYS = 48;  //可変キーの数
   120:   public static final int KBD_LED_KEYS =  8;  //LEDキーの数
   121:   public static final int KBD_FIX_KEYS = 57;  //固定キーの数
   122:   public static final int KBD_ALL_KEYS = KBD_VAR_KEYS + KBD_LED_KEYS + KBD_FIX_KEYS;  //キーの数
   123: 
   124:   //番号
   125:   //  可変キー,LEDキー,固定キーの順序でスキャンコード順に割り当てた番号
   126:   //  RETURNキーの上下とSHIFTキーの左右は形を特別扱いにすることで1個の番号で扱う
   127:   public static final int KBD_KANA_INDEX   =  48;  //かなキーの番号
   128:   public static final int KBD_ROMA_INDEX   =  49;  //ローマ字キーの番号
   129:   public static final int KBD_CODE_INDEX   =  50;  //コード入力キーの番号
   130:   public static final int KBD_CAPS_INDEX   =  51;  //CAPSキーの番号
   131:   public static final int KBD_HIRA_INDEX   =  53;  //ひらがなキーの番号
   132:   public static final int KBD_ZEN_INDEX    =  54;  //全角キーの番号
   133:   public static final int KBD_NUM_INDEX    =  55;  //NUMキーの番号
   134:   public static final int KBD_RETURN_INDEX =  59;  //RETURNキーの番号
   135:   public static final int KBD_SHIFT_INDEX  = 109;  //SHIFTキーの番号
   136:   public static final int KBD_CTRL_INDEX   = 110;  //CTRLキーの番号
   137:   public static final int KBD_OPT1_INDEX   = 111;  //OPT.1キーの番号
   138: 
   139:   //番号→スキャンコード(NUM OFF)
   140: /*
   141:   public static final byte[] KBD_NORMAL_CODE = {
   142:     //              |1| | | | | | | | | | | | |NUM
   143:     //              | |1| | | | | | | | | | | |CTRL
   144:     //              | | |1| | | | | | | | | | |コード入力
   145:     //              | | | |0|0|0|0|0|0| | | | |OPT.1
   146:     //              | | | |1|1|1|1| | | | | | |かな。ひらがな+全角→ひらがな
   147:     //              | | | | | | | |1|1| | | | |ローマ字
   148:     //              | | | |0|0|1|1| | | | | | |五十音
   149:     //              | | | | | | | | | |0|0|1|1|CAPS
   150:     //              | | | |0|1|0|1|0|1|0|1|0|1|SHIFT
   151:     0x02,  //  0  0 | | |1|ヌ|ヌ|ア|ァ|1|!|1|!|1|!|
   152:     0x03,  //  1  1 | | |2|フ|フ|イ|ィ|2|"|2|"|2|"|
   153:     0x04,  //  2  2 | | |3|ア|ァ|ウ|ゥ|3|#|3|#|3|#|
   154:     0x05,  //  3  3 | | |4|ウ|ゥ|エ|ェ|4|$|4|$|4|$|
   155:     0x06,  //  4  4 | | |5|エ|ェ|オ|ォ|5|%|5|%|5|%|
   156:     0x07,  //  5  5 | | |6|オ|ォ|ナ|ナ|6|&|6|&|6|&|
   157:     0x08,  //  6  6 |7| |7|ヤ|ャ|ニ|ニ|7|'|7|'|7|'|
   158:     0x09,  //  7  7 |8| |8|ユ|ュ|ヌ|ヌ|8|(|8|(|8|(|
   159:     0x0a,  //  8  8 |9| |9|ヨ|ョ|ネ|ネ|9|)|9|)|9|)|
   160:     0x0b,  //  9  9 |/| |0|ワ|ヲ|ノ|ヲ|0| |0| |0| |
   161:     0x0c,  // 10 10 |*| | |ホ|ホ|ラ|ラ|ー|=|-|=|-|=|
   162:     0x0d,  // 11 11 | |^| |ヘ|ヘ|リ|リ|^|~|^|~|^|~|
   163:     0x0e,  // 12 12 | |\| |ー|ー|ル|ル|\|||\|||\|||
   164:     0x11,  // 13 13 | |Q| |タ|タ|カ|カ|Q|Q|q|Q|Q|q|
   165:     0x12,  // 14 14 | |W| |テ|テ|キ|キ|W|W|w|W|W|w|
   166:     0x13,  // 15 15 | |E|e|イ|ィ|ク|ク|E|e|e|E|E|e|
   167:     0x14,  // 16 16 | |R| |ス|ス|ケ|ケ|R|R|r|R|R|r|
   168:     0x15,  // 17 17 | |T| |カ|カ|コ|コ|T|T|t|T|T|t|
   169:     0x16,  // 18 18 | |Y| |ン|ン|ハ|ハ|Y|Y|y|Y|Y|y|
   170:     0x17,  // 19 19 |4|U| |ナ|ナ|ヒ|ヒ|U|u|u|U|U|u|
   171:     0x18,  // 20 20 |5|I| |ニ|ニ|フ|フ|I|i|i|I|I|i|
   172:     0x19,  // 21 21 |6|O| |ラ|ラ|ヘ|ヘ|O|o|o|O|O|o|
   173:     0x1a,  // 22 22 |-|P| |セ|セ|ホ|ホ|P|P|p|P|P|p|
   174:     0x1b,  // 23 23 | | | |゙|゙|レ|レ|@|`|@|`|@|`|
   175:     0x1c,  // 24 24 | |[| |゚|「|ロ|「|「|{|[|{|[|{|
   176:     0x1e,  // 25 25 | |A|a|チ|チ|サ| |A|a|a|A|A|a| かな+五十音+SHIFT→0xa0
   177:     0x1f,  // 26 26 | |S| |ト|ト|シ|シ|S|S|s|S|S|s|
   178:     0x20,  // 27 27 | |D|d|シ|シ|ス|ス|D|D|d|D|D|d|
   179:     0x21,  // 28 28 | |F|f|ハ|ハ|セ|セ|F|F|f|F|F|f|
   180:     0x22,  // 29 29 | |G| |キ|キ|ソ|ソ|G|G|g|G|G|g|
   181:     0x23,  // 30 30 | |H| |ク|ク|マ|マ|H|H|h|H|H|h|
   182:     0x24,  // 31 31 |1|J| |マ|マ|ミ|ミ|J|J|j|J|J|j|
   183:     0x25,  // 32 32 |2|K| |ノ|ノ|ム|ム|K|K|k|K|K|k|
   184:     0x26,  // 33 33 |3|L| |リ|リ|メ|メ|L|L|l|L|L|l|
   185:     0x27,  // 34 34 |+| | |レ|レ|モ|モ|;|+|;|+|;|+|
   186:     0x28,  // 35 35 | | | |ケ|ケ|゙|ー|:|*|:|*|:|*|
   187:     0x29,  // 36 36 | |]| |ム|」|゚|」|」|}|]|}|]|}|
   188:     0x2a,  // 37 37 | |Z| |ツ|ッ|タ|タ|Z|z|z|Z|Z|z|
   189:     0x2b,  // 38 38 | |X| |サ|サ|チ|チ|X|X|x|X|X|x|
   190:     0x2c,  // 39 39 | |C|c|ソ|ソ|ツ|ッ|C|C|c|C|C|c|
   191:     0x2d,  // 40 40 | |V| |ヒ|ヒ|テ|テ|V|V|v|V|V|v|
   192:     0x2e,  // 41 41 | |B|b|コ|コ|ト|ト|B|B|b|B|B|b|
   193:     0x2f,  // 42 42 | |N| |ミ|ミ|ヤ|ャ|N|N|n|N|N|n|
   194:     0x30,  // 43 43 |0|M| |モ|モ|ユ|ュ|M|M|m|M|M|m|
   195:     0x31,  // 44 44 |,| | |ネ|、|ヨ|ョ|、|<|,|<|,|<|
   196:     0x32,  // 45 45 |.| | |ル|。|ワ|、|。|>|.|>|.|>|
   197:     0x33,  // 46 46 |=| | |メ|・|ヲ|。|・|?|/|?|/|?|
   198:     0x34,  // 47 47 |E|_| |ロ| |ン|・| |_| |_| |_| NUM→ENTER、かな+SHIFT→0xa0
   199:     0x5a,  // 48  0 かな
   200:     0x5b,  // 49  1 ローマ字
   201:     0x5c,  // 50  2 コード入力
   202:     0x5d,  // 51  3 CAPS
   203:     0x5e,  // 52  4 INS
   204:     0x5f,  // 53  5 ひらがな
   205:     0x60,  // 54  6 全角
   206:     0x74,  // 55  7 NUM
   207:     0x01,  // 56  0 ESC
   208:     0x0f,  // 57  1 BS
   209:     0x10,  // 58  2 TAB
   210:     0x1d,  // 59  3 RETURN
   211:     0x35,  // 60  4 Space
   212:     0x36,  // 61  5 HOME
   213:     0x37,  // 62  6 DEL
   214:     0x38,  // 63  7 ROLLUP
   215:     0x39,  // 64  8 ROLLDOWN
   216:     0x3a,  // 65  9 UNDO
   217:     0x3b,  // 66 10 ←
   218:     0x3c,  // 67 11 ↑
   219:     0x3d,  // 68 12 →
   220:     0x3e,  // 69 13 ↓
   221:     0x3f,  // 70 14 CLR
   222:     0x40,  // 71 15 /
   223:     0x41,  // 72 16 *
   224:     0x42,  // 73 17 -
   225:     0x43,  // 74 18 7
   226:     0x44,  // 75 19 8
   227:     0x45,  // 76 20 9
   228:     0x46,  // 77 21 +
   229:     0x47,  // 78 22 4
   230:     0x48,  // 79 23 5
   231:     0x49,  // 80 24 6
   232:     0x4a,  // 81 25 =
   233:     0x4b,  // 82 26 1
   234:     0x4c,  // 83 27 2
   235:     0x4d,  // 84 28 3
   236:     0x4e,  // 85 29 ENTER
   237:     0x4f,  // 86 30 0
   238:     0x50,  // 87 31 ,
   239:     0x51,  // 88 32 .
   240:     0x52,  // 89 33 記号入力
   241:     0x53,  // 90 34 登録
   242:     0x54,  // 91 35 HELP
   243:     0x55,  // 92 36 XF1
   244:     0x56,  // 93 37 XF2
   245:     0x57,  // 94 38 XF3
   246:     0x58,  // 95 39 XF4
   247:     0x59,  // 96 40 XF5
   248:     0x61,  // 97 41 BREAK
   249:     0x62,  // 98 42 COPY
   250:     0x63,  // 99 43 F1
   251:     0x64,  //100 44 F2
   252:     0x65,  //101 45 F3
   253:     0x66,  //102 46 F4
   254:     0x67,  //103 47 F5
   255:     0x68,  //104 48 F6
   256:     0x69,  //105 49 F7
   257:     0x6a,  //106 50 F8
   258:     0x6b,  //107 51 F9
   259:     0x6c,  //108 52 F10
   260:     0x70,  //109 53 SHIFT
   261:     0x71,  //110 54 CTRL
   262:     0x72,  //111 55 OPT.1
   263:     0x73,  //112 56 OPT.2
   264:   };
   265: */
   266:   //  perl misc/itob.pl xeij/Keyboard.java KBD_NORMAL_CODE
   267:   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);
   268: 
   269:   //番号→スキャンコード(NUM ON)
   270: /*
   271:   public static final byte[] KBD_NUM_CODE = {
   272:     //              |1| | | | | | | | | | | | |NUM
   273:     //              | |1| | | | | | | | | | | |CTRL
   274:     //              | | |1| | | | | | | | | | |コード入力
   275:     //              | | | |0|0|0|0|0|0| | | | |OPT.1
   276:     //              | | | |1|1|1|1| | | | | | |かな。ひらがな+全角→ひらがな
   277:     //              | | | | | | | |1|1| | | | |ローマ字
   278:     //              | | | |0|0|1|1| | | | | | |五十音
   279:     //              | | | | | | | | | |0|0|1|1|CAPS
   280:     //              | | | |0|1|0|1|0|1|0|1|0|1|SHIFT
   281:     0x02,  //  0  0 | | |1|ヌ|ヌ|ア|ァ|1|!|1|!|1|!|
   282:     0x03,  //  1  1 | | |2|フ|フ|イ|ィ|2|"|2|"|2|"|
   283:     0x04,  //  2  2 | | |3|ア|ァ|ウ|ゥ|3|#|3|#|3|#|
   284:     0x05,  //  3  3 | | |4|ウ|ゥ|エ|ェ|4|$|4|$|4|$|
   285:     0x06,  //  4  4 | | |5|エ|ェ|オ|ォ|5|%|5|%|5|%|
   286:     0x07,  //  5  5 | | |6|オ|ォ|ナ|ナ|6|&|6|&|6|&|
   287:     0x43,  //  6  6 |7| |7|ヤ|ャ|ニ|ニ|7|'|7|'|7|'|
   288:     0x44,  //  7  7 |8| |8|ユ|ュ|ヌ|ヌ|8|(|8|(|8|(|
   289:     0x45,  //  8  8 |9| |9|ヨ|ョ|ネ|ネ|9|)|9|)|9|)|
   290:     0x40,  //  9  9 |/| |0|ワ|ヲ|ノ|ヲ|0| |0| |0| |
   291:     0x41,  // 10 10 |*| | |ホ|ホ|ラ|ラ|ー|=|-|=|-|=|
   292:     0x0d,  // 11 11 | |^| |ヘ|ヘ|リ|リ|^|~|^|~|^|~|
   293:     0x0e,  // 12 12 | |\| |ー|ー|ル|ル|\|||\|||\|||
   294:     0x11,  // 13 13 | |Q| |タ|タ|カ|カ|Q|Q|q|Q|Q|q|
   295:     0x12,  // 14 14 | |W| |テ|テ|キ|キ|W|W|w|W|W|w|
   296:     0x13,  // 15 15 | |E|e|イ|ィ|ク|ク|E|e|e|E|E|e|
   297:     0x14,  // 16 16 | |R| |ス|ス|ケ|ケ|R|R|r|R|R|r|
   298:     0x15,  // 17 17 | |T| |カ|カ|コ|コ|T|T|t|T|T|t|
   299:     0x16,  // 18 18 | |Y| |ン|ン|ハ|ハ|Y|Y|y|Y|Y|y|
   300:     0x47,  // 19 19 |4|U| |ナ|ナ|ヒ|ヒ|U|u|u|U|U|u|
   301:     0x48,  // 20 20 |5|I| |ニ|ニ|フ|フ|I|i|i|I|I|i|
   302:     0x49,  // 21 21 |6|O| |ラ|ラ|ヘ|ヘ|O|o|o|O|O|o|
   303:     0x42,  // 22 22 |-|P| |セ|セ|ホ|ホ|P|P|p|P|P|p|
   304:     0x1b,  // 23 23 | | | |゙|゙|レ|レ|@|`|@|`|@|`|
   305:     0x1c,  // 24 24 | |[| |゚|「|ロ|「|「|{|[|{|[|{|
   306:     0x1e,  // 25 25 | |A|a|チ|チ|サ| |A|a|a|A|A|a| かな+五十音+SHIFT→0xa0
   307:     0x1f,  // 26 26 | |S| |ト|ト|シ|シ|S|S|s|S|S|s|
   308:     0x20,  // 27 27 | |D|d|シ|シ|ス|ス|D|D|d|D|D|d|
   309:     0x21,  // 28 28 | |F|f|ハ|ハ|セ|セ|F|F|f|F|F|f|
   310:     0x22,  // 29 29 | |G| |キ|キ|ソ|ソ|G|G|g|G|G|g|
   311:     0x23,  // 30 30 | |H| |ク|ク|マ|マ|H|H|h|H|H|h|
   312:     0x4b,  // 31 31 |1|J| |マ|マ|ミ|ミ|J|J|j|J|J|j|
   313:     0x4c,  // 32 32 |2|K| |ノ|ノ|ム|ム|K|K|k|K|K|k|
   314:     0x4d,  // 33 33 |3|L| |リ|リ|メ|メ|L|L|l|L|L|l|
   315:     0x46,  // 34 34 |+| | |レ|レ|モ|モ|;|+|;|+|;|+|
   316:     0x28,  // 35 35 | | | |ケ|ケ|゙|ー|:|*|:|*|:|*|
   317:     0x29,  // 36 36 | |]| |ム|」|゚|」|」|}|]|}|]|}|
   318:     0x2a,  // 37 37 | |Z| |ツ|ッ|タ|タ|Z|z|z|Z|Z|z|
   319:     0x2b,  // 38 38 | |X| |サ|サ|チ|チ|X|X|x|X|X|x|
   320:     0x2c,  // 39 39 | |C|c|ソ|ソ|ツ|ッ|C|C|c|C|C|c|
   321:     0x2d,  // 40 40 | |V| |ヒ|ヒ|テ|テ|V|V|v|V|V|v|
   322:     0x2e,  // 41 41 | |B|b|コ|コ|ト|ト|B|B|b|B|B|b|
   323:     0x2f,  // 42 42 | |N| |ミ|ミ|ヤ|ャ|N|N|n|N|N|n|
   324:     0x4f,  // 43 43 |0|M| |モ|モ|ユ|ュ|M|M|m|M|M|m|
   325:     0x50,  // 44 44 |,| | |ネ|、|ヨ|ョ|、|<|,|<|,|<|
   326:     0x51,  // 45 45 |.| | |ル|。|ワ|、|。|>|.|>|.|>|
   327:     0x4a,  // 46 46 |=| | |メ|・|ヲ|。|・|?|/|?|/|?|
   328:     0x4e,  // 47 47 |E|_| |ロ| |ン|・| |_| |_| |_| NUM→ENTER、かな+SHIFT→0xa0
   329:     0x5a,  // 48  0 かな
   330:     0x5b,  // 49  1 ローマ字
   331:     0x5c,  // 50  2 コード入力
   332:     0x5d,  // 51  3 CAPS
   333:     0x5e,  // 52  4 INS
   334:     0x5f,  // 53  5 ひらがな
   335:     0x60,  // 54  6 全角
   336:     0x74,  // 55  7 NUM
   337:     0x01,  // 56  0 ESC
   338:     0x0f,  // 57  1 BS
   339:     0x10,  // 58  2 TAB
   340:     0x1d,  // 59  3 RETURN
   341:     0x35,  // 60  4 Space
   342:     0x36,  // 61  5 HOME
   343:     0x37,  // 62  6 DEL
   344:     0x38,  // 63  7 ROLLUP
   345:     0x39,  // 64  8 ROLLDOWN
   346:     0x3a,  // 65  9 UNDO
   347:     0x3b,  // 66 10 ←
   348:     0x3c,  // 67 11 ↑
   349:     0x3d,  // 68 12 →
   350:     0x3e,  // 69 13 ↓
   351:     0x3f,  // 70 14 CLR
   352:     0x40,  // 71 15 /
   353:     0x41,  // 72 16 *
   354:     0x42,  // 73 17 -
   355:     0x43,  // 74 18 7
   356:     0x44,  // 75 19 8
   357:     0x45,  // 76 20 9
   358:     0x46,  // 77 21 +
   359:     0x47,  // 78 22 4
   360:     0x48,  // 79 23 5
   361:     0x49,  // 80 24 6
   362:     0x4a,  // 81 25 =
   363:     0x4b,  // 82 26 1
   364:     0x4c,  // 83 27 2
   365:     0x4d,  // 84 28 3
   366:     0x4e,  // 85 29 ENTER
   367:     0x4f,  // 86 30 0
   368:     0x50,  // 87 31 ,
   369:     0x51,  // 88 32 .
   370:     0x52,  // 89 33 記号入力
   371:     0x53,  // 90 34 登録
   372:     0x54,  // 91 35 HELP
   373:     0x55,  // 92 36 XF1
   374:     0x56,  // 93 37 XF2
   375:     0x57,  // 94 38 XF3
   376:     0x58,  // 95 39 XF4
   377:     0x59,  // 96 40 XF5
   378:     0x61,  // 97 41 BREAK
   379:     0x62,  // 98 42 COPY
   380:     0x63,  // 99 43 F1
   381:     0x64,  //100 44 F2
   382:     0x65,  //101 45 F3
   383:     0x66,  //102 46 F4
   384:     0x67,  //103 47 F5
   385:     0x68,  //104 48 F6
   386:     0x69,  //105 49 F7
   387:     0x6a,  //106 50 F8
   388:     0x6b,  //107 51 F9
   389:     0x6c,  //108 52 F10
   390:     0x70,  //109 53 SHIFT
   391:     0x71,  //110 54 CTRL
   392:     0x72,  //111 55 OPT.1
   393:     0x73,  //112 56 OPT.2
   394:   };
   395: */
   396:   //  perl misc/itob.pl xeij/Keyboard.java KBD_NUM_CODE
   397:   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);
   398: 
   399:   //種類→固定キーの番号→固定キーのスタイル
   400:   //  Standard KeyboardとCompact KeyboardではXFnキーやOPT.nキーの形が異なるので種類毎にスタイルデータを用意する
   401:   public static final int[][] KBD_TYPE_FIX_STYLE = {
   402:     //Standard Keyboard
   403:     {
   404:       KBD_NORMAL_STYLE  ,  //0x01  0 ESC
   405:       KBD_NARROW_STYLE  ,  //0x0f  1 BS
   406:       KBD_NARROW_STYLE  ,  //0x10  2 TAB
   407:       KBD_RETURN_STYLE  ,  //0x1d  3 RETURN
   408:       KBD_NORMAL_STYLE  ,  //0x35  4 Space
   409:       KBD_NORMAL_STYLE  ,  //0x36  5 HOME
   410:       KBD_NORMAL_STYLE  ,  //0x37  6 DEL
   411:       KBD_NORMAL_STYLE  ,  //0x38  7 ROLLUP
   412:       KBD_NORMAL_STYLE  ,  //0x39  8 ROLLDOWN
   413:       KBD_NORMAL_STYLE  ,  //0x3a  9 UNDO
   414:       KBD_SHORT_STYLE   ,  //0x3b 10 ←
   415:       KBD_NORMAL_STYLE  ,  //0x3c 11 ↑
   416:       KBD_SHORT_STYLE   ,  //0x3d 12 →
   417:       KBD_NORMAL_STYLE  ,  //0x3e 13 ↓
   418:       KBD_NORMAL_STYLE  ,  //0x3f 14 CLR
   419:       KBD_NORMAL_STYLE  ,  //0x40 15 /
   420:       KBD_NORMAL_STYLE  ,  //0x41 16 *
   421:       KBD_NORMAL_STYLE  ,  //0x42 17 -
   422:       KBD_NORMAL_STYLE  ,  //0x43 18 7
   423:       KBD_NORMAL_STYLE  ,  //0x44 19 8
   424:       KBD_NORMAL_STYLE  ,  //0x45 20 9
   425:       KBD_NORMAL_STYLE  ,  //0x46 21 +
   426:       KBD_NORMAL_STYLE  ,  //0x47 22 4
   427:       KBD_NORMAL_STYLE  ,  //0x48 23 5
   428:       KBD_NORMAL_STYLE  ,  //0x49 24 6
   429:       KBD_NORMAL_STYLE  ,  //0x4a 25 =
   430:       KBD_NORMAL_STYLE  ,  //0x4b 26 1
   431:       KBD_NORMAL_STYLE  ,  //0x4c 27 2
   432:       KBD_NORMAL_STYLE  ,  //0x4d 28 3
   433:       KBD_SHORTER_STYLE ,  //0x4e 29 ENTER
   434:       KBD_NORMAL_STYLE  ,  //0x4f 30 0
   435:       KBD_NORMAL_STYLE  ,  //0x50 31 ,
   436:       KBD_NORMAL_STYLE  ,  //0x51 32 .
   437:       KBD_NORMAL_STYLE  ,  //0x52 33 記号入力
   438:       KBD_NORMAL_STYLE  ,  //0x53 34 登録
   439:       KBD_NORMAL_STYLE  ,  //0x54 35 HELP
   440:       KBD_NARROWER_STYLE,  //0x55 36 XF1
   441:       KBD_NARROWER_STYLE,  //0x56 37 XF2
   442:       KBD_NARROW_STYLE  ,  //0x57 38 XF3
   443:       KBD_NARROWER_STYLE,  //0x58 39 XF4
   444:       KBD_NARROWER_STYLE,  //0x59 40 XF5
   445:       KBD_NORMAL_STYLE  ,  //0x61 41 BREAK
   446:       KBD_NORMAL_STYLE  ,  //0x62 42 COPY
   447:       KBD_FUNCTION_STYLE,  //0x63 43 F1
   448:       KBD_FUNCTION_STYLE,  //0x64 44 F2
   449:       KBD_FUNCTION_STYLE,  //0x65 45 F3
   450:       KBD_FUNCTION_STYLE,  //0x66 46 F4
   451:       KBD_FUNCTION_STYLE,  //0x67 47 F5
   452:       KBD_FUNCTION_STYLE,  //0x68 48 F6
   453:       KBD_FUNCTION_STYLE,  //0x69 49 F7
   454:       KBD_FUNCTION_STYLE,  //0x6a 50 F8
   455:       KBD_FUNCTION_STYLE,  //0x6b 51 F9
   456:       KBD_FUNCTION_STYLE,  //0x6c 52 F10
   457:       KBD_SHIFT_STYLE   ,  //0x70 53 SHIFT
   458:       KBD_NARROW_STYLE  ,  //0x71 54 CTRL
   459:       KBD_NARROW_STYLE  ,  //0x72 55 OPT.1
   460:       KBD_NARROW_STYLE  ,  //0x73 56 OPT.2
   461:     },
   462:     //Compact Keyboard
   463:     {
   464:       KBD_NORMAL_STYLE  ,  //0x01  0 ESC
   465:       KBD_NARROW_STYLE  ,  //0x0f  1 BS
   466:       KBD_NARROW_STYLE  ,  //0x10  2 TAB
   467:       KBD_RETURN_STYLE  ,  //0x1d  3 RETURN
   468:       KBD_NORMAL_STYLE  ,  //0x35  4 Space
   469:       KBD_NORMAL_STYLE  ,  //0x36  5 HOME
   470:       KBD_NORMAL_STYLE  ,  //0x37  6 DEL
   471:       KBD_NORMAL_STYLE  ,  //0x38  7 ROLLUP
   472:       KBD_NORMAL_STYLE  ,  //0x39  8 ROLLDOWN
   473:       KBD_NORMAL_STYLE  ,  //0x3a  9 UNDO
   474:       KBD_NORMAL_STYLE  ,  //0x3b 10 ←
   475:       KBD_NORMAL_STYLE  ,  //0x3c 11 ↑
   476:       KBD_NORMAL_STYLE  ,  //0x3d 12 →
   477:       KBD_NORMAL_STYLE  ,  //0x3e 13 ↓
   478:       KBD_NORMAL_STYLE  ,  //0x3f 14 CLR
   479:       KBD_NONE_STYLE    ,  //0x40 15 /
   480:       KBD_NONE_STYLE    ,  //0x41 16 *
   481:       KBD_NONE_STYLE    ,  //0x42 17 -
   482:       KBD_NONE_STYLE    ,  //0x43 18 7
   483:       KBD_NONE_STYLE    ,  //0x44 19 8
   484:       KBD_NONE_STYLE    ,  //0x45 20 9
   485:       KBD_NONE_STYLE    ,  //0x46 21 +
   486:       KBD_NONE_STYLE    ,  //0x47 22 4
   487:       KBD_NONE_STYLE    ,  //0x48 23 5
   488:       KBD_NONE_STYLE    ,  //0x49 24 6
   489:       KBD_NONE_STYLE    ,  //0x4a 25 =
   490:       KBD_NONE_STYLE    ,  //0x4b 26 1
   491:       KBD_NONE_STYLE    ,  //0x4c 27 2
   492:       KBD_NONE_STYLE    ,  //0x4d 28 3
   493:       KBD_NONE_STYLE    ,  //0x4e 29 ENTER
   494:       KBD_NONE_STYLE    ,  //0x4f 30 0
   495:       KBD_NONE_STYLE    ,  //0x50 31 ,
   496:       KBD_NONE_STYLE    ,  //0x51 32 .
   497:       KBD_NORMAL_STYLE  ,  //0x52 33 記号入力
   498:       KBD_NORMAL_STYLE  ,  //0x53 34 登録
   499:       KBD_NORMAL_STYLE  ,  //0x54 35 HELP
   500:       KBD_NARROWER_STYLE,  //0x55 36 XF1
   501:       KBD_NARROWER_STYLE,  //0x56 37 XF2
   502:       KBD_NARROWER_STYLE,  //0x57 38 XF3
   503:       KBD_NORMAL_STYLE  ,  //0x58 39 XF4
   504:       KBD_NORMAL_STYLE  ,  //0x59 40 XF5
   505:       KBD_NORMAL_STYLE  ,  //0x61 41 BREAK
   506:       KBD_NORMAL_STYLE  ,  //0x62 42 COPY
   507:       KBD_FUNCTION_STYLE,  //0x63 43 F1
   508:       KBD_FUNCTION_STYLE,  //0x64 44 F2
   509:       KBD_FUNCTION_STYLE,  //0x65 45 F3
   510:       KBD_FUNCTION_STYLE,  //0x66 46 F4
   511:       KBD_FUNCTION_STYLE,  //0x67 47 F5
   512:       KBD_FUNCTION_STYLE,  //0x68 48 F6
   513:       KBD_FUNCTION_STYLE,  //0x69 49 F7
   514:       KBD_FUNCTION_STYLE,  //0x6a 50 F8
   515:       KBD_FUNCTION_STYLE,  //0x6b 51 F9
   516:       KBD_FUNCTION_STYLE,  //0x6c 52 F10
   517:       KBD_SHIFT_STYLE   ,  //0x70 53 SHIFT
   518:       KBD_NARROW_STYLE  ,  //0x71 54 CTRL
   519:       KBD_NORMAL_STYLE  ,  //0x72 55 OPT.1
   520:       KBD_NORMAL_STYLE  ,  //0x73 56 OPT.2
   521:     },
   522:   };  //KBD_TYPE_FIX_STYLE
   523: 
   524:   //赤色LEDの色
   525:   //  5A:かな,5B:ローマ字,5C:コード入力,5D:CAPS,5E:INS,74:NUM
   526:   public static final int[][] KBD_RED_LED_COLOR = {
   527:     { KBD_RED_OFF_KEYTOP_COLOR, KBD_RED_OFF_BORDER_COLOR },
   528:     { KBD_RED_ON_KEYTOP_COLOR, KBD_RED_ON_BORDER_COLOR },
   529:   };
   530: 
   531:   //緑色LEDの色
   532:   //  5F:ひらがな,60:全角
   533:   public static final int[][] KBD_GREEN_LED_COLOR = {
   534:     { KBD_GREEN_OFF_KEYTOP_COLOR, KBD_GREEN_OFF_BORDER_COLOR },
   535:     { KBD_GREEN_ON_KEYTOP_COLOR, KBD_GREEN_ON_BORDER_COLOR },
   536:   };
   537: 
   538:   //LEDキーの番号→LEDの色
   539:   public static final int[][][] KBD_LED_COLOR = {
   540:     KBD_RED_LED_COLOR  ,  //0x5a  0 かな
   541:     KBD_RED_LED_COLOR  ,  //0x5b  1 ローマ字
   542:     KBD_RED_LED_COLOR  ,  //0x5c  2 コード入力
   543:     KBD_RED_LED_COLOR  ,  //0x5d  3 CAPS
   544:     KBD_RED_LED_COLOR  ,  //0x5e  4 INS
   545:     KBD_GREEN_LED_COLOR,  //0x5f  5 ひらがな
   546:     KBD_GREEN_LED_COLOR,  //0x60  6 全角
   547:     KBD_RED_LED_COLOR  ,  //0x74  7 NUM
   548:   };
   549: 
   550:   //Standard Keyboard
   551:   //                       1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9
   552:   //   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
   553:   // 0 +-------+ +-------+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +-------+-------+-------+ . +-------+-------+-------+-------+  0
   554:   // 1 |61     | |62     | . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . |5A     |5B     |5C     | . |5D     |52     |53     |54     |  1
   555:   // 2 | BREAK | |  COPY | . |63       |64       |65       |66       |67       | |68       |69       |6A       |6B       |6C       | . | KANA  | ROMA  | CODE  | . | CAPS  | KIGOU |TOUROKU| HELP  |  2
   556:   // 3 |       | |       | . |   F1    |   F2    |   F3    |   F4    |   F5    | |   F6    |   F7    |   F8    |   F9    |  F10    | . |  rrr  |  rrr  |  rrr  | . |  rrr  |       |       |       |  3
   557:   // 4 +-------+ +-------+ . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . +--rrr--+--rrr--+--rrr--+ . +--rrr--+-------+-------+-------+  4
   558:   // 5 +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----------+ . +-------+-------+-------+ . +-------+-------+-------+-------+  5
   559:   // 6 |01     |02     |03     |04     |05     |06     |07     |08     |09     |0A     |0B     |0C     |0D     |0E     | !0F     ! | . |36     |5E     |37     | . |3F     |40     |41     |42     |  6
   560:   // 7 |  ESC  |  1!   |  2"   |  3#   |  4$   |  5%   |  6&   |  7'   |  8(   |  9)   |   0   |  -=   |  ^~   |  \|   | !  BS   ! | . | HOME  |  INS  |  DEL  | . |  CLR  |   /   |   *   |   -   |  7
   561:   // 8 |       |       |       |       |       |       |       |       |       |       |       |       |       |       | !       ! | . |       |  rrr  |       | . |       | ~~~~~ | ~~~~~ | ~~~~~ |  8
   562:   // 9 +-------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-----------+ . +-------+--rrr--+-------+ . +-------+-------+-------+-------+  9
   563:   //10 | !10     ! |11     |12     |13     |14     |15     |16     |17     |18     |19     |1A     |1B     |1C     | !1D         ! | . |38     |39     |3A     | . |43     |44     |45     |46     | 10
   564:   //11 | !  TAB  ! |   Q   |   W   |   E   |   R   |   T   |   Y   |   U   |   I   |   O   |   P   |  @`   |  [{   | !           ! | . | R-UP  |R-DOWN | UNDO  | . |   7   |   8   |   9   |   +   | 11
   565:   //12 | !       ! |       |       |       |       |       |       |       |       |       |       |       |       | !           ! | . |       |       |       | . | ~~~~~ | ~~~~~ | ~~~~~ | ~~~~~ | 12
   566:   //13 +-----------+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+ ! RETURN  ! | . +-------+-------+-------+ . +-------+-------+-------+-------+ 13
   567:   //14 | !71       ! |1E     |1F     |20     |21     |22     |23     |24     |25     |26     |27     |28     |29     | !         ! | . |       |3C     |       | . |47     |48     |49     |4A     | 14
   568:   //15 | !  CTRL   ! |   A   |   S   |   D   |   F   |   G   |   H   |   J   |   K   |   L   |  ;+   |  :*   |  ]}   | !         ! | . | - - - |  UP   | - - - | . |   4   |   5   |   6   |   =   | 15
   569:   //16 | !         ! |       |       |       |       |       |       |       |       |       |       |       |       | !         ! | . | 3B    |       |3D     | . | ~~~~~ | ~~~~~ | ~~~~~ | ~~~~~ | 16
   570:   //17 +-------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------------+ . | LEFT  +-------+ RIGHT | . +-------+-------+-------+-------+ 17
   571:   //18 | !70           ! |2A     |2B     |2C     |2D     |2E     |2F     |30     |31     |32     |33     |34     | !70           ! | . |       |3E     |       | . |4B     |4C     |4D     | - - - | 18
   572:   //19 | !    SHIFT    ! |   Z   |   X   |   C   |   V   |   B   |   M   |   N   |  ,<   |  .>   |  /?   |   _   | !    SHIFT    ! | . | - - - | DOWN  | - - - | . |   1   |   2   |   3   |4E     | 19
   573:   //20 | !             ! |       |       |       |       |       |       |       |       |       |       |       | !             ! | . |       |       |       | . | ~~~~~ | ~~~~~ | ~~~~~ |       | 20
   574:   //21 +-------------+---+---+---+-----+-+-------+-------+-------+-------+---+---+-------+-------+-+-----+---+---+---+-------------+ . +-------+---+---+-------+ . +-------+-------+-------+ ENTER | 21
   575:   //22 . . . . . . . |5F     |!55     !|!56     !|35                         | !57     ! |!58     !|!59     !|60     | . . . . . . . . | !72     ! | !73     ! | . |4F     |50     |51     | ~~~~~ | 22
   576:   //23 . . . . . . . | HIRA  |!  XF1  !|!  XF2  !|           SPACE           | !  XF3  ! |!  XF4  !|!  XF5  !|ZENKAKU| . . . . . . . . | ! OPT.1 ! | ! OPT.2 ! | . |   0   |   ,   |   .   |       | 23
   577:   //24 . . . . . . . |  ggg  |!       !|!       !|                           | !       ! |!       !|!       !|  ggg  | . . . . . . . . | !       ! | !       ! | . | ~~~~~ | ~~~~~ | ~~~~~ | - - - | 24
   578:   //25 . . . . . . . +--ggg--+---------+---------+---------------------------+-----------+---------+---------+--ggg--+ . . . . . . . . +-----------+-----------+ . +-------+-------+-------+-------+ 25
   579:   //                       1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9
   580:   //   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4
   581: 
   582:   //Compact Keyboard
   583:   //                       1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7
   584:   //   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
   585:   // 0 +-------+ +-------+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . +-------+-------+-------+  0
   586:   // 1 |61     | |62     | . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . |52     |53     |54     |  1
   587:   // 2 | BREAK | |  COPY | . |63       |64       |65       |66       |67       | |68       |69       |6A       |6B       |6C       | . | KIGOU |TOUROKU| HELP  |  2
   588:   // 3 |       | |       | . |   F1    |   F2    |   F3    |   F4    |   F5    | |   F6    |   F7    |   F8    |   F9    |  F10    | . |       |       |       |  3
   589:   // 4 +-------+ +-------+ . +---------+---------+---------+---------+---------+ +---------+---------+---------+---------+---------+ . +-------+-------+-------+  4
   590:   // 5 +-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-----------+ . |60     |5F     |5C     |  5
   591:   // 6 |01     |02     |03     |04     |05     |06     |07     |08  /  |09  /  |0A  /  |0B  /  |0C  /  |0D     |0E     | !0F     ! | . |ZENKAKU| HIRA  | CODE  |  6
   592:   // 7 |  ESC  |  1!   |  2"   |  3#   |  4$   |  5%   |  6&   | 7'/ 7 | 8(/ 8 | 9)/ 9 | 0 / / | -=/ * |  ^~   |  \|   | !  BS   ! | . |  ggg  |  ggg  |  rrr  |  7
   593:   // 8 |       |       |       |       |       |       |       |  /  43|  /  44|  /  45|  /  40|  /  41|       |       | !       ! | . +--ggg--+--ggg--+--rrr--+  8
   594:   // 9 +-------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-----------+ . +-------+--rrr--+-------+  9
   595:   //10 | !10     ! |11     |12     |13     |14     |15     |16     |17  /  |18  /  |19  /  |1A  /  |1B     |1C     | !1D         ! | . |36     |3F     |37     | 10
   596:   //11 | !  TAB  ! |   Q   |   W   |   E   |   R   |   T   |   Y   | U / 4 | I / 5 | O / 6 | P / - |  @`   |  [{   | !           ! | . | HOME  |  CLR  |  DEL  | 11
   597:   //12 | !       ! |       |       |       |       |       |       |  /  47|  /  48|  /  49|  /  42|       |       | !           ! | . |       |       |       | 12
   598:   //13 +-----------+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+-----+-+ ! RETURN  ! | . +-------+-------+-------+ 13
   599:   //14 | !71       ! |1E     |1F     |20     |21     |22     |23     |24  /  |25  /  |26  /  |27  /  |28     |29     | !         ! | . |74     |5E     |3A     | 14
   600:   //15 | !  CTRL   ! |   A   |   S   |   D   |   F   |   G   |   H   | J / 1 | K / 2 | L / 3 | ;+/ + |  :*   |  ]}   | !         ! | . |  NUM  |  INS  | UNDO  | 15
   601:   //16 | !         ! |       |       |       |       |       |       |  /  4B|  /  4C|  /  4D|  /  46|       |       | !         ! | . |  rrr  |  rrr  |       | 16
   602:   //17 +-------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-------------+ . +--rrr--+--rrr--+-------+ 17
   603:   //18 | !70           ! |2A     |2B     |2C     |2D     |2E     |2F     |30  /  |31  /  |32  /  |33  /  |34  /  | !70           ! | . |38     |3C     |39     | 18
   604:   //19 | !    SHIFT    ! |   Z   |   X   |   C   |   V   |   B   |   M   | N / 0 | ,</ , | .>/ . | /?/ = | _ /ENT| !    SHIFT    ! | . | R-UP  |  UP   |R-DOWN | 19
   605:   //20 | !             ! |       |       |       |       |       |       |  /  4F|  /  50|  /  51|  /  4A|  /  4E| !             ! | . |       |       |       | 20
   606:   //21 +-----+-------+---+---+---+-----+-+-------+-------+-------+-------+---+---+-----+-+-----+-+-----+-+-----+-+-----+-------+---+ . +-------+-------+-------+ 21
   607:   //22 . . . |72     |5D     |!55     !|!56     !|35                         |! 57    !|58     |59     |5B     |5A     |73     | . . . |3B     |3E     |3D     | 22
   608:   //23 . . . | OPT.1 | CAPS  |!  XF1  !|!  XF2  !|           SPACE           |!  XF3  !|  XF4  |  XF5  | ROMA  | KANA  | OPT.2 | . . . | LEFT  | DOWN  | RIGHT | 23
   609:   //24 . . . |       |  rrr  |!       !|!       !|                           |!       !|       |       |  rrr  |  rrr  |       | . . . |       |       |       | 24
   610:   //25 . . . +-------+--rrr--+---------+---------+---------------------------+---------+-------+-------+--rrr--+--rrr--+-------+ . . . +-------+-------+-------+ 25
   611:   //                       1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7
   612:   //   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
   613: 
   614:   //可変キーの番号→ボックス
   615:   //  Standard KeyboardとCompact Keyboardで共通
   616:   //  欠番なし
   617:   public static final int[][] KBD_VAR_BOX = {
   618:     {  4,  5,  4, 4 },  //0x02  0 1
   619:     {  8,  5,  4, 4 },  //0x03  1 2
   620:     { 12,  5,  4, 4 },  //0x04  2 3
   621:     { 16,  5,  4, 4 },  //0x05  3 4
   622:     { 20,  5,  4, 4 },  //0x06  4 5
   623:     { 24,  5,  4, 4 },  //0x07  5 6
   624:     { 28,  5,  4, 4 },  //0x08  6 7
   625:     { 32,  5,  4, 4 },  //0x09  7 8
   626:     { 36,  5,  4, 4 },  //0x0a  8 9
   627:     { 40,  5,  4, 4 },  //0x0b  9 0
   628:     { 44,  5,  4, 4 },  //0x0c 10 -
   629:     { 48,  5,  4, 4 },  //0x0d 11 ^
   630:     { 52,  5,  4, 4 },  //0x0e 12 \
   631:     {  6,  9,  4, 4 },  //0x11 13 q
   632:     { 10,  9,  4, 4 },  //0x12 14 w
   633:     { 14,  9,  4, 4 },  //0x13 15 e
   634:     { 18,  9,  4, 4 },  //0x14 16 r
   635:     { 22,  9,  4, 4 },  //0x15 17 t
   636:     { 26,  9,  4, 4 },  //0x16 18 y
   637:     { 30,  9,  4, 4 },  //0x17 19 u
   638:     { 34,  9,  4, 4 },  //0x18 20 i
   639:     { 38,  9,  4, 4 },  //0x19 21 o
   640:     { 42,  9,  4, 4 },  //0x1a 22 p
   641:     { 46,  9,  4, 4 },  //0x1b 23 @
   642:     { 50,  9,  4, 4 },  //0x1c 24 [
   643:     {  7, 13,  4, 4 },  //0x1e 25 a
   644:     { 11, 13,  4, 4 },  //0x1f 26 s
   645:     { 15, 13,  4, 4 },  //0x20 27 d
   646:     { 19, 13,  4, 4 },  //0x21 28 f
   647:     { 23, 13,  4, 4 },  //0x22 29 g
   648:     { 27, 13,  4, 4 },  //0x23 30 h
   649:     { 31, 13,  4, 4 },  //0x24 31 j
   650:     { 35, 13,  4, 4 },  //0x25 32 k
   651:     { 39, 13,  4, 4 },  //0x26 33 l
   652:     { 43, 13,  4, 4 },  //0x27 34 ;
   653:     { 47, 13,  4, 4 },  //0x28 35 :
   654:     { 51, 13,  4, 4 },  //0x29 36 ]
   655:     {  9, 17,  4, 4 },  //0x2a 37 z
   656:     { 13, 17,  4, 4 },  //0x2b 38 x
   657:     { 17, 17,  4, 4 },  //0x2c 39 c
   658:     { 21, 17,  4, 4 },  //0x2d 40 v
   659:     { 25, 17,  4, 4 },  //0x2e 41 b
   660:     { 29, 17,  4, 4 },  //0x2f 42 n
   661:     { 33, 17,  4, 4 },  //0x30 43 m
   662:     { 37, 17,  4, 4 },  //0x31 44 ,
   663:     { 41, 17,  4, 4 },  //0x32 45 .
   664:     { 45, 17,  4, 4 },  //0x33 46 /
   665:     { 49, 17,  4, 4 },  //0x34 47
   666:   };  //KBD_VAR_BOX
   667: 
   668:   //種類→LEDキーの番号→ボックス
   669:   //  欠番あり
   670:   //    Standard KeyboardのNUMキー
   671:   public static final int[][][] KBD_TYPE_LED_BOX = {
   672:     //Standard Keyboard
   673:     {
   674:       { 64,  0,  4, 4 },  //0x5a  0 かな
   675:       { 68,  0,  4, 4 },  //0x5b  1 ローマ字
   676:       { 72,  0,  4, 4 },  //0x5c  2 コード入力
   677:       { 78,  0,  4, 4 },  //0x5d  3 CAPS
   678:       { 68,  5,  4, 4 },  //0x5e  4 INS
   679:       {  7, 21,  4, 4 },  //0x5f  5 ひらがな
   680:       { 51, 21,  4, 4 },  //0x60  6 全角
   681:       null             ,  //0x74  7 NUM
   682:     },
   683:     //Compact Keyboard
   684:     {
   685:       { 52, 21,  4, 4 },  //0x5a  0 かな
   686:       { 48, 21,  4, 4 },  //0x5b  1 ローマ字
   687:       { 72,  4,  4, 4 },  //0x5c  2 コード入力
   688:       {  7, 21,  4, 4 },  //0x5d  3 CAPS
   689:       { 68, 13,  4, 4 },  //0x5e  4 INS
   690:       { 68,  4,  4, 4 },  //0x5f  5 ひらがな
   691:       { 64,  4,  4, 4 },  //0x60  6 全角
   692:       { 64, 13,  4, 4 },  //0x74  7 NUM
   693:     },
   694:   };  //KBD_TYPE_LED_BOX
   695: 
   696:   //種類→固定キーのインデックス→ボックス
   697:   //  欠番あり
   698:   //    Compact Keyboardのテンキー
   699:   public static final int[][][] KBD_TYPE_FIX_BOX = {
   700:     //Standard Keyboard
   701:     {
   702:       {  0,  5,  4, 4 },  //0x01  0 ESC
   703:       { 56,  5,  6, 4 },  //0x0f  1 BS
   704:       {  0,  9,  6, 4 },  //0x10  2 TAB
   705:       { 54,  9,  8, 8 },  //0x1d  3 RETURN
   706:       { 21, 21, 14, 4 },  //0x35  4 Space
   707:       { 64,  5,  4, 4 },  //0x36  5 HOME
   708:       { 72,  5,  4, 4 },  //0x37  6 DEL
   709:       { 64,  9,  4, 4 },  //0x38  7 ROLLUP
   710:       { 68,  9,  4, 4 },  //0x39  8 ROLLDOWN
   711:       { 72,  9,  4, 4 },  //0x3a  9 UNDO
   712:       { 64, 13,  4, 8 },  //0x3b 10 ←
   713:       { 68, 13,  4, 4 },  //0x3c 11 ↑
   714:       { 72, 13,  4, 8 },  //0x3d 12 →
   715:       { 68, 17,  4, 4 },  //0x3e 13 ↓
   716:       { 78,  5,  4, 4 },  //0x3f 14 CLR
   717:       { 82,  5,  4, 4 },  //0x40 15 /
   718:       { 86,  5,  4, 4 },  //0x41 16 *
   719:       { 90,  5,  4, 4 },  //0x42 17 -
   720:       { 78,  9,  4, 4 },  //0x43 18 7
   721:       { 82,  9,  4, 4 },  //0x44 19 8
   722:       { 86,  9,  4, 4 },  //0x45 20 9
   723:       { 90,  9,  4, 4 },  //0x46 21 +
   724:       { 78, 13,  4, 4 },  //0x47 22 4
   725:       { 82, 13,  4, 4 },  //0x48 23 5
   726:       { 86, 13,  4, 4 },  //0x49 24 6
   727:       { 90, 13,  4, 4 },  //0x4a 25 =
   728:       { 78, 17,  4, 4 },  //0x4b 26 1
   729:       { 82, 17,  4, 4 },  //0x4c 27 2
   730:       { 86, 17,  4, 4 },  //0x4d 28 3
   731:       { 90, 17,  4, 8 },  //0x4e 29 ENTER
   732:       { 78, 21,  4, 4 },  //0x4f 30 0
   733:       { 82, 21,  4, 4 },  //0x50 31 ,
   734:       { 86, 21,  4, 4 },  //0x51 32 .
   735:       { 82,  0,  4, 4 },  //0x52 33 記号入力
   736:       { 86,  0,  4, 4 },  //0x53 34 登録
   737:       { 90,  0,  4, 4 },  //0x54 35 HELP
   738:       { 11, 21,  5, 4 },  //0x55 36 XF1
   739:       { 16, 21,  5, 4 },  //0x56 37 XF2
   740:       { 35, 21,  6, 4 },  //0x57 38 XF3
   741:       { 41, 21,  5, 4 },  //0x58 39 XF4
   742:       { 46, 21,  5, 4 },  //0x59 40 XF5
   743:       {  0,  0,  4, 4 },  //0x61 41 BREAK
   744:       {  5,  0,  4, 4 },  //0x62 42 COPY
   745:       { 11,  0,  5, 4 },  //0x63 43 F1
   746:       { 16,  0,  5, 4 },  //0x64 44 F2
   747:       { 21,  0,  5, 4 },  //0x65 45 F3
   748:       { 26,  0,  5, 4 },  //0x66 46 F4
   749:       { 31,  0,  5, 4 },  //0x67 47 F5
   750:       { 37,  0,  5, 4 },  //0x68 48 F6
   751:       { 42,  0,  5, 4 },  //0x69 49 F7
   752:       { 47,  0,  5, 4 },  //0x6a 50 F8
   753:       { 52,  0,  5, 4 },  //0x6b 51 F9
   754:       { 57,  0,  5, 4 },  //0x6c 52 F10
   755:       {  0, 17, 62, 4 },  //0x70 53 SHIFT
   756:       {  0, 13,  7, 4 },  //0x71 54 CTRL
   757:       { 64, 21,  6, 4 },  //0x72 55 OPT.1
   758:       { 70, 21,  6, 4 },  //0x73 56 OPT.2
   759:     },
   760:     //Compact Keyboard
   761:     {
   762:       {  0,  5,  4, 4 },  //0x01  0 ESC
   763:       { 56,  5,  6, 4 },  //0x0f  1 BS
   764:       {  0,  9,  6, 4 },  //0x10  2 TAB
   765:       { 54,  9,  8, 8 },  //0x1d  3 RETURN
   766:       { 21, 21, 14, 4 },  //0x35  4 Space
   767:       { 64,  9,  4, 4 },  //0x36  5 HOME
   768:       { 72,  9,  4, 4 },  //0x37  6 DEL
   769:       { 64, 17,  4, 4 },  //0x38  7 ROLLUP
   770:       { 72, 17,  4, 4 },  //0x39  8 ROLLDOWN
   771:       { 72, 13,  4, 4 },  //0x3a  9 UNDO
   772:       { 64, 21,  4, 4 },  //0x3b 10 ←
   773:       { 68, 17,  4, 4 },  //0x3c 11 ↑
   774:       { 72, 21,  4, 4 },  //0x3d 12 →
   775:       { 68, 21,  4, 4 },  //0x3e 13 ↓
   776:       { 68,  9,  4, 4 },  //0x3f 14 CLR
   777:       null             ,  //0x40 15 /
   778:       null             ,  //0x41 16 *
   779:       null             ,  //0x42 17 -
   780:       null             ,  //0x43 18 7
   781:       null             ,  //0x44 19 8
   782:       null             ,  //0x45 20 9
   783:       null             ,  //0x46 21 +
   784:       null             ,  //0x47 22 4
   785:       null             ,  //0x48 23 5
   786:       null             ,  //0x49 24 6
   787:       null             ,  //0x4a 25 =
   788:       null             ,  //0x4b 26 1
   789:       null             ,  //0x4c 27 2
   790:       null             ,  //0x4d 28 3
   791:       null             ,  //0x4e 29 ENTER
   792:       null             ,  //0x4f 30 0
   793:       null             ,  //0x50 31 ,
   794:       null             ,  //0x51 32 .
   795:       { 64,  0,  4, 4 },  //0x52 33 記号入力
   796:       { 68,  0,  4, 4 },  //0x53 34 登録
   797:       { 72,  0,  4, 4 },  //0x54 35 HELP
   798:       { 11, 21,  5, 4 },  //0x55 36 XF1
   799:       { 16, 21,  5, 4 },  //0x56 37 XF2
   800:       { 35, 21,  5, 4 },  //0x57 38 XF3
   801:       { 40, 21,  4, 4 },  //0x58 39 XF4
   802:       { 44, 21,  4, 4 },  //0x59 40 XF5
   803:       {  0,  0,  4, 4 },  //0x61 41 BREAK
   804:       {  5,  0,  4, 4 },  //0x62 42 COPY
   805:       { 11,  0,  5, 4 },  //0x63 43 F1
   806:       { 16,  0,  5, 4 },  //0x64 44 F2
   807:       { 21,  0,  5, 4 },  //0x65 45 F3
   808:       { 26,  0,  5, 4 },  //0x66 46 F4
   809:       { 31,  0,  5, 4 },  //0x67 47 F5
   810:       { 37,  0,  5, 4 },  //0x68 48 F6
   811:       { 42,  0,  5, 4 },  //0x69 49 F7
   812:       { 47,  0,  5, 4 },  //0x6a 50 F8
   813:       { 52,  0,  5, 4 },  //0x6b 51 F9
   814:       { 57,  0,  5, 4 },  //0x6c 52 F10
   815:       {  0, 17, 62, 4 },  //0x70 53 SHIFT
   816:       {  0, 13,  7, 4 },  //0x71 54 CTRL
   817:       {  3, 21,  4, 4 },  //0x72 55 OPT.1
   818:       { 56, 21,  4, 4 },  //0x73 56 OPT.2
   819:     },
   820:   };  //KBD_TYPE_FIX_BOX
   821: 
   822:   //可変キーの番号→可変キーに表示する文字の文字コード
   823:   //  可変キーに表示する文字はモードキーの状態によって変化する
   824:   //  かなの配列はSRAMの設定によって変化する
   825:   //    0x00ed002b  キーボードのかなの配列。0=旧JIS,0以外=五十音
   826:   //  文字コード0x5c,0x7e,0x7cの字体はSRAMの設定によって変化する
   827:   //    0x00ed0059  bit0  文字コード0x5cの字体。0=YEN SIGN(0x5c,U+00A5),1=REVERSE SOLIDUS(0x80,U+005C)
   828:   //                bit1  文字コード0x7eの字体。0=MACRON(0x7e,U+00AF),1=TILDE(0x81,U+007E)
   829:   //                bit2  文字コード0x7cの字体。0=VERTICAL LINE(0x7c,U+007C),1=BROKEN BAR(0x82,U+00A6)
   830:   //  文字の字体は半角と全角を区別しない
   831:   //  文字の字体はカタカナとひらがなを区別する。ひらがな+全角のときだけひらがなにする
   832:   //  テレビコントロール(SHIFT|OPT.2+←|↑|→|↓|CLR|/|*|-|7|8|9|+|4|5|6|=|1|2|3|0|,|.)は区別しない
   833:   public static final char[] KBD_CAPS_BASE           = "1234567890-^\\QWERTYUIOP@[ASDFGHJKL;:]ZXCVBNM,./\u0000".toCharArray ();
   834:   public static final char[] KBD_CAPS_SHIFT_BASE     = "!\"#$%&'()\u0000=~|qwertyuiop`{asdfghjkl+*}zxcvbnm<>?_".toCharArray ();
   835:   public static final char[] KBD_KANA_BASE           = "ヌフアウエオヤユヨワホヘータテイスカンナニラゼ゚チトシハキクマノリレケムツサソヒコミモネルメロ".toCharArray ();
   836:   public static final char[] KBD_KANA_SHIFT_BASE     = "ヌファゥェォャュョヲホヘータティスカンナニラゼ「チトシハキクマノリレケ」ッサソヒコミモ、。・\u00a0".toCharArray ();
   837:   public static final char[] KBD_KANA_AIU_BASE       = "アイウエオナニヌネノラリルカキクケコハヒフヘホレロサシスセソマミムメモ゙゚タチツテトヤユヨワヲン".toCharArray ();
   838:   public static final char[] KBD_KANA_AIU_SHIFT_BASE = "ァィゥェォナニヌネヲラリルカキクケコハヒフヘホレ「\u00a0シスセソマミムメモー」タチッテトャュョ、。・".toCharArray ();
   839:   public static final char[] KBD_ROMA_BASE           = "1234567890ー^\\QWERTYUIOP@「ASDFGHJKL;:」ZXCVBNM、。・\u0000".toCharArray ();
   840:   public static final char[] KBD_ROMA_SHIFT_BASE     = "!\"#$%&'()\u0000=~|QWeRTYuioP`{aSDFGHJKL+*}zXCVBNM<>?_".toCharArray ();
   841:   public static final char[] KBD_NUM_BASE            = ("      789/" + "*        456-        123+        0,.=\u0084").toCharArray ();
   842:   public static final byte[] KBD_CAPS_CHR = new byte[KBD_VAR_KEYS];
   843:   public static final byte[] KBD_NORMAL_CHR = new byte[KBD_VAR_KEYS];
   844:   public static final byte[] KBD_CODE_CHR = new byte[KBD_VAR_KEYS];
   845:   public static final byte[] KBD_CAPS_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   846:   public static final byte[] KBD_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   847:   public static final byte[] KBD_CTRL_CHR = new byte[KBD_VAR_KEYS];
   848:   public static final byte[] KBD_KANA_CHR = new byte[KBD_VAR_KEYS];
   849:   public static final byte[] KBD_KANA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   850:   public static final byte[] KBD_KANA_AIU_CHR = new byte[KBD_VAR_KEYS];
   851:   public static final byte[] KBD_KANA_AIU_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   852:   public static final byte[] KBD_ROMA_CHR = new byte[KBD_VAR_KEYS];
   853:   public static final byte[] KBD_ROMA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   854:   public static final byte[] KBD_NUM_CAPS_CHR = new byte[KBD_VAR_KEYS];
   855:   public static final byte[] KBD_NUM_CHR = new byte[KBD_VAR_KEYS];
   856:   public static final byte[] KBD_NUM_CODE_CHR = new byte[KBD_VAR_KEYS];
   857:   public static final byte[] KBD_NUM_CAPS_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   858:   public static final byte[] KBD_NUM_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   859:   public static final byte[] KBD_NUM_CTRL_CHR = new byte[KBD_VAR_KEYS];
   860:   public static final byte[] KBD_NUM_KANA_CHR = new byte[KBD_VAR_KEYS];
   861:   public static final byte[] KBD_NUM_KANA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   862:   public static final byte[] KBD_NUM_KANA_AIU_CHR = new byte[KBD_VAR_KEYS];
   863:   public static final byte[] KBD_NUM_KANA_AIU_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   864:   public static final byte[] KBD_NUM_ROMA_CHR = new byte[KBD_VAR_KEYS];
   865:   public static final byte[] KBD_NUM_ROMA_SHIFT_CHR = new byte[KBD_VAR_KEYS];
   866: 
   867:   //文字コード→可変キーに表示する文字のパターン
   868:   //
   869:   //       +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f
   870:   //  0x00   ^A ^B ^C ^D ^E ^F ^G ^H ^I ^J ^K ^L ^M ^N ^O
   871:   //  0x10 ^P ^Q ^R ^S ^T ^U ^V ^W ^X ^Y ^Z ^[ ^¥ ^] ^^ ^_
   872:   //  0x20   ! ” # $ % & ’ ( ) * + , - . /
   873:   //  0x30 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
   874:   //  0x40 @ A B C D E F G H I J K L M N O
   875:   //  0x50 P Q R S T U V W X Y Z [ ¥ ] ^ _
   876:   //  0x60 ` a b c d e f g h i j k l m n o
   877:   //  0x70 p q r s t u v w x y z { | }  ̄ ^?
   878:   //  0x80 \ ~ ¦ ^\ EN   を ぁ ぃ ぅ ぇ ぉ ゃ ゅ ょ っ
   879:   //  0x90   あ い う え お か き く け こ さ し す せ そ
   880:   //  0xa0 □ 。 「 」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ
   881:   //  0xb0 ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ
   882:   //  0xc0 タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ
   883:   //  0xd0 ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜
   884:   //  0xe0 た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま
   885:   //  0xf0 み む め も や ゆ よ ら り る れ ろ わ ん    
   886:   //
   887:   //    0x00         U+0020         SPACE。文字が割り当てられていないキーを表示するときに使うので^@ではなくて空白
   888:   //    0x1c  ^¥     U+005E,U+00A5  CIRCUMFLEX ACCENT,YEN SIGN
   889:   //    0x5c  ¥      U+00A5         YEN SIGN
   890:   //    0x7c  |      U+007C         VERTICAL LINE
   891:   //    0x7e  ¯      U+00AF         MACRON
   892:   //    0x7f  ^?     U+005E,U+003F  CIRCUMFLEX ACCENT,QUESTION MARK
   893:   //    0x80  \      U+005C         REVERSE SOLIDUS。0x5cの代わり
   894:   //    0x81  ~      U+007E         TILDE。0x7eの代わり
   895:   //    0x82  ¦      U+00A6         BROKEN BAR。0x7cの代わり
   896:   //    0x83  ^\     U+005E,U+005C  CIRCUMFLEX ACCENT,REVERSE SOLIDUS。0x1cの代わり
   897:   //    0x84  ENTER                 NUM ONのときに使う
   898:   //    0xa0  □     U+00A0         NO-BREAK SPACE。空白と見分けがつかないと困るのでキーボードには市松模様で表示する
   899:   //
   900:   public static final int[][] KBD_VAR_LETTER = {
   901:     {
   902:       0b000000000000000000000,
   903:       0b000000000000000000000,
   904:       0b000000000000000000000,
   905:       0b000000000000000000000,
   906:       0b000000000000000000000,
   907:       0b000000000000000000000,
   908:       0b000000000000000000000,
   909:       0b000000000000000000000,
   910:       0b000000000000000000000,
   911:       0b000000000000000000000,
   912:       0b000000000000000000000,
   913:       0b000000000000000000000,
   914:       0b000000000000000000000,
   915:     },  //0x00
   916:     {
   917:       0b000000000000000000000,
   918:       0b000000000000000000000,
   919:       0b000000100000001000000,
   920:       0b000001010000010100000,
   921:       0b000010001000010100000,
   922:       0b000100000100100010000,
   923:       0b000000000000100010000,
   924:       0b000000000001000001000,
   925:       0b000000000001111111000,
   926:       0b000000000001000001000,
   927:       0b000000000001000001000,
   928:       0b000000000000000000000,
   929:       0b000000000000000000000,
   930:     },  //0x01 ^A
   931:     {
   932:       0b000000000000000000000,
   933:       0b000000000000000000000,
   934:       0b000000100001111100000,
   935:       0b000001010001000010000,
   936:       0b000010001001000001000,
   937:       0b000100000101000010000,
   938:       0b000000000001111100000,
   939:       0b000000000001000010000,
   940:       0b000000000001000001000,
   941:       0b000000000001000010000,
   942:       0b000000000001111100000,
   943:       0b000000000000000000000,
   944:       0b000000000000000000000,
   945:     },  //0x02 ^B
   946:     {
   947:       0b000000000000000000000,
   948:       0b000000000000000000000,
   949:       0b000000100000011100000,
   950:       0b000001010000100010000,
   951:       0b000010001001000001000,
   952:       0b000100000101000000000,
   953:       0b000000000001000000000,
   954:       0b000000000001000000000,
   955:       0b000000000001000001000,
   956:       0b000000000000100010000,
   957:       0b000000000000011100000,
   958:       0b000000000000000000000,
   959:       0b000000000000000000000,
   960:     },  //0x03 ^C
   961:     {
   962:       0b000000000000000000000,
   963:       0b000000000000000000000,
   964:       0b000000100001111100000,
   965:       0b000001010001000010000,
   966:       0b000010001001000001000,
   967:       0b000100000101000001000,
   968:       0b000000000001000001000,
   969:       0b000000000001000001000,
   970:       0b000000000001000001000,
   971:       0b000000000001000010000,
   972:       0b000000000001111100000,
   973:       0b000000000000000000000,
   974:       0b000000000000000000000,
   975:     },  //0x04 ^D
   976:     {
   977:       0b000000000000000000000,
   978:       0b000000000000000000000,
   979:       0b000000100001111111000,
   980:       0b000001010001000000000,
   981:       0b000010001001000000000,
   982:       0b000100000101000000000,
   983:       0b000000000001111110000,
   984:       0b000000000001000000000,
   985:       0b000000000001000000000,
   986:       0b000000000001000000000,
   987:       0b000000000001111111000,
   988:       0b000000000000000000000,
   989:       0b000000000000000000000,
   990:     },  //0x05 ^E
   991:     {
   992:       0b000000000000000000000,
   993:       0b000000000000000000000,
   994:       0b000000100001111111000,
   995:       0b000001010001000000000,
   996:       0b000010001001000000000,
   997:       0b000100000101000000000,
   998:       0b000000000001111110000,
   999:       0b000000000001000000000,
  1000:       0b000000000001000000000,
  1001:       0b000000000001000000000,
  1002:       0b000000000001000000000,
  1003:       0b000000000000000000000,
  1004:       0b000000000000000000000,
  1005:     },  //0x06 ^F
  1006:     {
  1007:       0b000000000000000000000,
  1008:       0b000000000000000000000,
  1009:       0b000000100000011110000,
  1010:       0b000001010000100000000,
  1011:       0b000010001001000000000,
  1012:       0b000100000101000000000,
  1013:       0b000000000001001111000,
  1014:       0b000000000001000010000,
  1015:       0b000000000001000010000,
  1016:       0b000000000000100010000,
  1017:       0b000000000000011100000,
  1018:       0b000000000000000000000,
  1019:       0b000000000000000000000,
  1020:     },  //0x07 ^G
  1021:     {
  1022:       0b000000000000000000000,
  1023:       0b000000000000000000000,
  1024:       0b000000100001000001000,
  1025:       0b000001010001000001000,
  1026:       0b000010001001000001000,
  1027:       0b000100000101000001000,
  1028:       0b000000000001111111000,
  1029:       0b000000000001000001000,
  1030:       0b000000000001000001000,
  1031:       0b000000000001000001000,
  1032:       0b000000000001000001000,
  1033:       0b000000000000000000000,
  1034:       0b000000000000000000000,
  1035:     },  //0x08 ^H
  1036:     {
  1037:       0b000000000000000000000,
  1038:       0b000000000000000000000,
  1039:       0b000000100000011100000,
  1040:       0b000001010000001000000,
  1041:       0b000010001000001000000,
  1042:       0b000100000100001000000,
  1043:       0b000000000000001000000,
  1044:       0b000000000000001000000,
  1045:       0b000000000000001000000,
  1046:       0b000000000000001000000,
  1047:       0b000000000000011100000,
  1048:       0b000000000000000000000,
  1049:       0b000000000000000000000,
  1050:     },  //0x09 ^I
  1051:     {
  1052:       0b000000000000000000000,
  1053:       0b000000000000000000000,
  1054:       0b000000100000000001000,
  1055:       0b000001010000000001000,
  1056:       0b000010001000000001000,
  1057:       0b000100000100000001000,
  1058:       0b000000000000000001000,
  1059:       0b000000000000000001000,
  1060:       0b000000000001000001000,
  1061:       0b000000000000100010000,
  1062:       0b000000000000011100000,
  1063:       0b000000000000000000000,
  1064:       0b000000000000000000000,
  1065:     },  //0x0a ^J
  1066:     {
  1067:       0b000000000000000000000,
  1068:       0b000000000000000000000,
  1069:       0b000000100001000001000,
  1070:       0b000001010001000010000,
  1071:       0b000010001001000100000,
  1072:       0b000100000101001000000,
  1073:       0b000000000001010000000,
  1074:       0b000000000001101000000,
  1075:       0b000000000001000100000,
  1076:       0b000000000001000010000,
  1077:       0b000000000001000001000,
  1078:       0b000000000000000000000,
  1079:       0b000000000000000000000,
  1080:     },  //0x0b ^K
  1081:     {
  1082:       0b000000000000000000000,
  1083:       0b000000000000000000000,
  1084:       0b000000100001000000000,
  1085:       0b000001010001000000000,
  1086:       0b000010001001000000000,
  1087:       0b000100000101000000000,
  1088:       0b000000000001000000000,
  1089:       0b000000000001000000000,
  1090:       0b000000000001000000000,
  1091:       0b000000000001000000000,
  1092:       0b000000000001111111000,
  1093:       0b000000000000000000000,
  1094:       0b000000000000000000000,
  1095:     },  //0x0c ^L
  1096:     {
  1097:       0b000000000000000000000,
  1098:       0b000000000000000000000,
  1099:       0b000000100001000001000,
  1100:       0b000001010001100011000,
  1101:       0b000010001001010101000,
  1102:       0b000100000101010101000,
  1103:       0b000000000001001001000,
  1104:       0b000000000001001001000,
  1105:       0b000000000001000001000,
  1106:       0b000000000001000001000,
  1107:       0b000000000001000001000,
  1108:       0b000000000000000000000,
  1109:       0b000000000000000000000,
  1110:     },  //0x0d ^M
  1111:     {
  1112:       0b000000000000000000000,
  1113:       0b000000000000000000000,
  1114:       0b000000100001000001000,
  1115:       0b000001010001000001000,
  1116:       0b000010001001100001000,
  1117:       0b000100000101010001000,
  1118:       0b000000000001001001000,
  1119:       0b000000000001000101000,
  1120:       0b000000000001000011000,
  1121:       0b000000000001000001000,
  1122:       0b000000000001000001000,
  1123:       0b000000000000000000000,
  1124:       0b000000000000000000000,
  1125:     },  //0x0e ^N
  1126:     {
  1127:       0b000000000000000000000,
  1128:       0b000000000000000000000,
  1129:       0b000000100000011100000,
  1130:       0b000001010000100010000,
  1131:       0b000010001001000001000,
  1132:       0b000100000101000001000,
  1133:       0b000000000001000001000,
  1134:       0b000000000001000001000,
  1135:       0b000000000001000001000,
  1136:       0b000000000000100010000,
  1137:       0b000000000000011100000,
  1138:       0b000000000000000000000,
  1139:       0b000000000000000000000,
  1140:     },  //0x0f ^O
  1141:     {
  1142:       0b000000000000000000000,
  1143:       0b000000000000000000000,
  1144:       0b000000100001111100000,
  1145:       0b000001010001000010000,
  1146:       0b000010001001000001000,
  1147:       0b000100000101000001000,
  1148:       0b000000000001000010000,
  1149:       0b000000000001111100000,
  1150:       0b000000000001000000000,
  1151:       0b000000000001000000000,
  1152:       0b000000000001000000000,
  1153:       0b000000000000000000000,
  1154:       0b000000000000000000000,
  1155:     },  //0x10 ^P
  1156:     {
  1157:       0b000000000000000000000,
  1158:       0b000000000000000000000,
  1159:       0b000000100000011100000,
  1160:       0b000001010000100010000,
  1161:       0b000010001001000001000,
  1162:       0b000100000101000001000,
  1163:       0b000000000001000001000,
  1164:       0b000000000001001001000,
  1165:       0b000000000001000101000,
  1166:       0b000000000000100010000,
  1167:       0b000000000000011101000,
  1168:       0b000000000000000000000,
  1169:       0b000000000000000000000,
  1170:     },  //0x11 ^Q
  1171:     {
  1172:       0b000000000000000000000,
  1173:       0b000000000000000000000,
  1174:       0b000000100001111100000,
  1175:       0b000001010001000010000,
  1176:       0b000010001001000001000,
  1177:       0b000100000101000001000,
  1178:       0b000000000001000010000,
  1179:       0b000000000001111100000,
  1180:       0b000000000001000010000,
  1181:       0b000000000001000001000,
  1182:       0b000000000001000001000,
  1183:       0b000000000000000000000,
  1184:       0b000000000000000000000,
  1185:     },  //0x12 ^R
  1186:     {
  1187:       0b000000000000000000000,
  1188:       0b000000000000000000000,
  1189:       0b000000100000011110000,
  1190:       0b000001010000100000000,
  1191:       0b000010001001000000000,
  1192:       0b000100000100100000000,
  1193:       0b000000000000011100000,
  1194:       0b000000000000000010000,
  1195:       0b000000000000000001000,
  1196:       0b000000000000000010000,
  1197:       0b000000000000111100000,
  1198:       0b000000000000000000000,
  1199:       0b000000000000000000000,
  1200:     },  //0x13 ^S
  1201:     {
  1202:       0b000000000000000000000,
  1203:       0b000000000000000000000,
  1204:       0b000000100001111111000,
  1205:       0b000001010000001000000,
  1206:       0b000010001000001000000,
  1207:       0b000100000100001000000,
  1208:       0b000000000000001000000,
  1209:       0b000000000000001000000,
  1210:       0b000000000000001000000,
  1211:       0b000000000000001000000,
  1212:       0b000000000000001000000,
  1213:       0b000000000000000000000,
  1214:       0b000000000000000000000,
  1215:     },  //0x14 ^T
  1216:     {
  1217:       0b000000000000000000000,
  1218:       0b000000000000000000000,
  1219:       0b000000100001000001000,
  1220:       0b000001010001000001000,
  1221:       0b000010001001000001000,
  1222:       0b000100000101000001000,
  1223:       0b000000000001000001000,
  1224:       0b000000000001000001000,
  1225:       0b000000000001000001000,
  1226:       0b000000000000100010000,
  1227:       0b000000000000011100000,
  1228:       0b000000000000000000000,
  1229:       0b000000000000000000000,
  1230:     },  //0x15 ^U
  1231:     {
  1232:       0b000000000000000000000,
  1233:       0b000000000000000000000,
  1234:       0b000000100001000001000,
  1235:       0b000001010001000001000,
  1236:       0b000010001001000001000,
  1237:       0b000100000101000001000,
  1238:       0b000000000000100010000,
  1239:       0b000000000000100010000,
  1240:       0b000000000000010100000,
  1241:       0b000000000000010100000,
  1242:       0b000000000000001000000,
  1243:       0b000000000000000000000,
  1244:       0b000000000000000000000,
  1245:     },  //0x16 ^V
  1246:     {
  1247:       0b000000000000000000000,
  1248:       0b000000000000000000000,
  1249:       0b000000100010001000100,
  1250:       0b000001010010001000100,
  1251:       0b000010001010001000100,
  1252:       0b000100000101010101000,
  1253:       0b000000000001010101000,
  1254:       0b000000000001010101000,
  1255:       0b000000000000100010000,
  1256:       0b000000000000100010000,
  1257:       0b000000000000100010000,
  1258:       0b000000000000000000000,
  1259:       0b000000000000000000000,
  1260:     },  //0x17 ^W
  1261:     {
  1262:       0b000000000000000000000,
  1263:       0b000000000000000000000,
  1264:       0b000000100001000001000,
  1265:       0b000001010001000001000,
  1266:       0b000010001000100010000,
  1267:       0b000100000100010100000,
  1268:       0b000000000000001000000,
  1269:       0b000000000000010100000,
  1270:       0b000000000000100010000,
  1271:       0b000000000001000001000,
  1272:       0b000000000001000001000,
  1273:       0b000000000000000000000,
  1274:       0b000000000000000000000,
  1275:     },  //0x18 ^X
  1276:     {
  1277:       0b000000000000000000000,
  1278:       0b000000000000000000000,
  1279:       0b000000100001000001000,
  1280:       0b000001010001000001000,
  1281:       0b000010001001000001000,
  1282:       0b000100000100100010000,
  1283:       0b000000000000010100000,
  1284:       0b000000000000001000000,
  1285:       0b000000000000001000000,
  1286:       0b000000000000001000000,
  1287:       0b000000000000001000000,
  1288:       0b000000000000000000000,
  1289:       0b000000000000000000000,
  1290:     },  //0x19 ^Y
  1291:     {
  1292:       0b000000000000000000000,
  1293:       0b000000000000000000000,
  1294:       0b000000100001111111000,
  1295:       0b000001010000000001000,
  1296:       0b000010001000000010000,
  1297:       0b000100000100000100000,
  1298:       0b000000000000001000000,
  1299:       0b000000000000010000000,
  1300:       0b000000000000100000000,
  1301:       0b000000000001000000000,
  1302:       0b000000000001111111000,
  1303:       0b000000000000000000000,
  1304:       0b000000000000000000000,
  1305:     },  //0x1a ^Z
  1306:     {
  1307:       0b000000000000000000000,
  1308:       0b000000000000000000000,
  1309:       0b000000100000011100000,
  1310:       0b000001010000010000000,
  1311:       0b000010001000010000000,
  1312:       0b000100000100010000000,
  1313:       0b000000000000010000000,
  1314:       0b000000000000010000000,
  1315:       0b000000000000010000000,
  1316:       0b000000000000010000000,
  1317:       0b000000000000011100000,
  1318:       0b000000000000000000000,
  1319:       0b000000000000000000000,
  1320:     },  //0x1b ^[
  1321:     {
  1322:       0b000000000000000000000,
  1323:       0b000000000000000000000,
  1324:       0b000000100001000001000,
  1325:       0b000001010000100010000,
  1326:       0b000010001000010100000,
  1327:       0b000100000100001000000,
  1328:       0b000000000001111111000,
  1329:       0b000000000000001000000,
  1330:       0b000000000001111111000,
  1331:       0b000000000000001000000,
  1332:       0b000000000000001000000,
  1333:       0b000000000000000000000,
  1334:       0b000000000000000000000,
  1335:     },  //0x1c ^¥
  1336:     {
  1337:       0b000000000000000000000,
  1338:       0b000000000000000000000,
  1339:       0b000000100000011100000,
  1340:       0b000001010000000100000,
  1341:       0b000010001000000100000,
  1342:       0b000100000100000100000,
  1343:       0b000000000000000100000,
  1344:       0b000000000000000100000,
  1345:       0b000000000000000100000,
  1346:       0b000000000000000100000,
  1347:       0b000000000000011100000,
  1348:       0b000000000000000000000,
  1349:       0b000000000000000000000,
  1350:     },  //0x1d ^]
  1351:     {
  1352:       0b000000000000000000000,
  1353:       0b000000000000000000000,
  1354:       0b000000100000001000000,
  1355:       0b000001010000010100000,
  1356:       0b000010001000100010000,
  1357:       0b000100000101000001000,
  1358:       0b000000000000000000000,
  1359:       0b000000000000000000000,
  1360:       0b000000000000000000000,
  1361:       0b000000000000000000000,
  1362:       0b000000000000000000000,
  1363:       0b000000000000000000000,
  1364:       0b000000000000000000000,
  1365:     },  //0x1e ^^
  1366:     {
  1367:       0b000000000000000000000,
  1368:       0b000000000000000000000,
  1369:       0b000000100000000000000,
  1370:       0b000001010000000000000,
  1371:       0b000010001000000000000,
  1372:       0b000100000100000000000,
  1373:       0b000000000000000000000,
  1374:       0b000000000000000000000,
  1375:       0b000000000000000000000,
  1376:       0b000000000001111111000,
  1377:       0b000000000000000000000,
  1378:       0b000000000000000000000,
  1379:       0b000000000000000000000,
  1380:     },  //0x1f ^_
  1381:     null,  //0x20
  1382:     {
  1383:       0b000000000000000000000,
  1384:       0b000000000000000000000,
  1385:       0b000000000010000000000,
  1386:       0b000000000010000000000,
  1387:       0b000000000010000000000,
  1388:       0b000000000010000000000,
  1389:       0b000000000010000000000,
  1390:       0b000000000010000000000,
  1391:       0b000000000000000000000,
  1392:       0b000000000000000000000,
  1393:       0b000000000010000000000,
  1394:       0b000000000000000000000,
  1395:       0b000000000000000000000,
  1396:     },  //0x21 !
  1397:     {
  1398:       0b000000000000000000000,
  1399:       0b000000000000000000000,
  1400:       0b000000000101000000000,
  1401:       0b000000000101000000000,
  1402:       0b000000000101000000000,
  1403:       0b000000000000000000000,
  1404:       0b000000000000000000000,
  1405:       0b000000000000000000000,
  1406:       0b000000000000000000000,
  1407:       0b000000000000000000000,
  1408:       0b000000000000000000000,
  1409:       0b000000000000000000000,
  1410:       0b000000000000000000000,
  1411:     },  //0x22 "
  1412:     {
  1413:       0b000000000000000000000,
  1414:       0b000000000000000000000,
  1415:       0b000000000101000000000,
  1416:       0b000000000101000000000,
  1417:       0b000000011111110000000,
  1418:       0b000000000101000000000,
  1419:       0b000000000101000000000,
  1420:       0b000000000101000000000,
  1421:       0b000000011111110000000,
  1422:       0b000000000101000000000,
  1423:       0b000000000101000000000,
  1424:       0b000000000000000000000,
  1425:       0b000000000000000000000,
  1426:     },  //0x23 #
  1427:     {
  1428:       0b000000000000000000000,
  1429:       0b000000000000000000000,
  1430:       0b000000000010000000000,
  1431:       0b000000001111110000000,
  1432:       0b000000010010000000000,
  1433:       0b000000010010000000000,
  1434:       0b000000001111100000000,
  1435:       0b000000000010010000000,
  1436:       0b000000000010010000000,
  1437:       0b000000011111100000000,
  1438:       0b000000000010000000000,
  1439:       0b000000000000000000000,
  1440:       0b000000000000000000000,
  1441:     },  //0x24 $
  1442:     {
  1443:       0b000000000000000000000,
  1444:       0b000000000000000000000,
  1445:       0b000000011100000000000,
  1446:       0b000000010100010000000,
  1447:       0b000000011100100000000,
  1448:       0b000000000001000000000,
  1449:       0b000000000010000000000,
  1450:       0b000000000100000000000,
  1451:       0b000000001001110000000,
  1452:       0b000000010001010000000,
  1453:       0b000000000001110000000,
  1454:       0b000000000000000000000,
  1455:       0b000000000000000000000,
  1456:     },  //0x25 %
  1457:     {
  1458:       0b000000000000000000000,
  1459:       0b000000000000000000000,
  1460:       0b000000001110000000000,
  1461:       0b000000010001000000000,
  1462:       0b000000010001000000000,
  1463:       0b000000001010000000000,
  1464:       0b000000000100000000000,
  1465:       0b000000001010000000000,
  1466:       0b000000010001010000000,
  1467:       0b000000010000100000000,
  1468:       0b000000001111010000000,
  1469:       0b000000000000000000000,
  1470:       0b000000000000000000000,
  1471:     },  //0x26 &
  1472:     {
  1473:       0b000000000000000000000,
  1474:       0b000000000000000000000,
  1475:       0b000000000001000000000,
  1476:       0b000000000001000000000,
  1477:       0b000000000010000000000,
  1478:       0b000000000100000000000,
  1479:       0b000000000000000000000,
  1480:       0b000000000000000000000,
  1481:       0b000000000000000000000,
  1482:       0b000000000000000000000,
  1483:       0b000000000000000000000,
  1484:       0b000000000000000000000,
  1485:       0b000000000000000000000,
  1486:     },  //0x27 '
  1487:     {
  1488:       0b000000000000000000000,
  1489:       0b000000000000000000000,
  1490:       0b000000000001000000000,
  1491:       0b000000000010000000000,
  1492:       0b000000000100000000000,
  1493:       0b000000000100000000000,
  1494:       0b000000000100000000000,
  1495:       0b000000000100000000000,
  1496:       0b000000000100000000000,
  1497:       0b000000000010000000000,
  1498:       0b000000000001000000000,
  1499:       0b000000000000000000000,
  1500:       0b000000000000000000000,
  1501:     },  //0x28 (
  1502:     {
  1503:       0b000000000000000000000,
  1504:       0b000000000000000000000,
  1505:       0b000000000100000000000,
  1506:       0b000000000010000000000,
  1507:       0b000000000001000000000,
  1508:       0b000000000001000000000,
  1509:       0b000000000001000000000,
  1510:       0b000000000001000000000,
  1511:       0b000000000001000000000,
  1512:       0b000000000010000000000,
  1513:       0b000000000100000000000,
  1514:       0b000000000000000000000,
  1515:       0b000000000000000000000,
  1516:     },  //0x29 )
  1517:     {
  1518:       0b000000000000000000000,
  1519:       0b000000000000000000000,
  1520:       0b000000000000000000000,
  1521:       0b000000000010000000000,
  1522:       0b000000010010010000000,
  1523:       0b000000001010100000000,
  1524:       0b000000000111000000000,
  1525:       0b000000001010100000000,
  1526:       0b000000010010010000000,
  1527:       0b000000000010000000000,
  1528:       0b000000000000000000000,
  1529:       0b000000000000000000000,
  1530:       0b000000000000000000000,
  1531:     },  //0x2a *
  1532:     {
  1533:       0b000000000000000000000,
  1534:       0b000000000000000000000,
  1535:       0b000000000000000000000,
  1536:       0b000000000010000000000,
  1537:       0b000000000010000000000,
  1538:       0b000000000010000000000,
  1539:       0b000000011111110000000,
  1540:       0b000000000010000000000,
  1541:       0b000000000010000000000,
  1542:       0b000000000010000000000,
  1543:       0b000000000000000000000,
  1544:       0b000000000000000000000,
  1545:       0b000000000000000000000,
  1546:     },  //0x2b +
  1547:     {
  1548:       0b000000000000000000000,
  1549:       0b000000000000000000000,
  1550:       0b000000000000000000000,
  1551:       0b000000000000000000000,
  1552:       0b000000000000000000000,
  1553:       0b000000000000000000000,
  1554:       0b000000000000000000000,
  1555:       0b000000000110000000000,
  1556:       0b000000000110000000000,
  1557:       0b000000000010000000000,
  1558:       0b000000000100000000000,
  1559:       0b000000000000000000000,
  1560:       0b000000000000000000000,
  1561:     },  //0x2c ,
  1562:     {
  1563:       0b000000000000000000000,
  1564:       0b000000000000000000000,
  1565:       0b000000000000000000000,
  1566:       0b000000000000000000000,
  1567:       0b000000000000000000000,
  1568:       0b000000000000000000000,
  1569:       0b000000011111110000000,
  1570:       0b000000000000000000000,
  1571:       0b000000000000000000000,
  1572:       0b000000000000000000000,
  1573:       0b000000000000000000000,
  1574:       0b000000000000000000000,
  1575:       0b000000000000000000000,
  1576:     },  //0x2d -
  1577:     {
  1578:       0b000000000000000000000,
  1579:       0b000000000000000000000,
  1580:       0b000000000000000000000,
  1581:       0b000000000000000000000,
  1582:       0b000000000000000000000,
  1583:       0b000000000000000000000,
  1584:       0b000000000000000000000,
  1585:       0b000000000000000000000,
  1586:       0b000000000110000000000,
  1587:       0b000000000110000000000,
  1588:       0b000000000000000000000,
  1589:       0b000000000000000000000,
  1590:       0b000000000000000000000,
  1591:     },  //0x2e .
  1592:     {
  1593:       0b000000000000000000000,
  1594:       0b000000000000000000000,
  1595:       0b000000000000000000000,
  1596:       0b000000000000010000000,
  1597:       0b000000000000100000000,
  1598:       0b000000000001000000000,
  1599:       0b000000000010000000000,
  1600:       0b000000000100000000000,
  1601:       0b000000001000000000000,
  1602:       0b000000010000000000000,
  1603:       0b000000000000000000000,
  1604:       0b000000000000000000000,
  1605:       0b000000000000000000000,
  1606:     },  //0x2f /
  1607:     {
  1608:       0b000000000000000000000,
  1609:       0b000000000000000000000,
  1610:       0b000000001111100000000,
  1611:       0b000000010000010000000,
  1612:       0b000000010000010000000,
  1613:       0b000000010000010000000,
  1614:       0b000000010000010000000,
  1615:       0b000000010000010000000,
  1616:       0b000000010000010000000,
  1617:       0b000000010000010000000,
  1618:       0b000000001111100000000,
  1619:       0b000000000000000000000,
  1620:       0b000000000000000000000,
  1621:     },  //0x30 0
  1622:     {
  1623:       0b000000000000000000000,
  1624:       0b000000000000000000000,
  1625:       0b000000000001000000000,
  1626:       0b000000000011000000000,
  1627:       0b000000000101000000000,
  1628:       0b000000000001000000000,
  1629:       0b000000000001000000000,
  1630:       0b000000000001000000000,
  1631:       0b000000000001000000000,
  1632:       0b000000000001000000000,
  1633:       0b000000000001000000000,
  1634:       0b000000000000000000000,
  1635:       0b000000000000000000000,
  1636:     },  //0x31 1
  1637:     {
  1638:       0b000000000000000000000,
  1639:       0b000000000000000000000,
  1640:       0b000000001111100000000,
  1641:       0b000000010000010000000,
  1642:       0b000000000000010000000,
  1643:       0b000000000000010000000,
  1644:       0b000000000001100000000,
  1645:       0b000000000110000000000,
  1646:       0b000000001000000000000,
  1647:       0b000000010000000000000,
  1648:       0b000000011111110000000,
  1649:       0b000000000000000000000,
  1650:       0b000000000000000000000,
  1651:     },  //0x32 2
  1652:     {
  1653:       0b000000000000000000000,
  1654:       0b000000000000000000000,
  1655:       0b000000001111100000000,
  1656:       0b000000010000010000000,
  1657:       0b000000000000010000000,
  1658:       0b000000000000010000000,
  1659:       0b000000000011100000000,
  1660:       0b000000000000010000000,
  1661:       0b000000000000010000000,
  1662:       0b000000010000010000000,
  1663:       0b000000001111100000000,
  1664:       0b000000000000000000000,
  1665:       0b000000000000000000000,
  1666:     },  //0x33 3
  1667:     {
  1668:       0b000000000000000000000,
  1669:       0b000000000000000000000,
  1670:       0b000000000001100000000,
  1671:       0b000000000010100000000,
  1672:       0b000000000100100000000,
  1673:       0b000000001000100000000,
  1674:       0b000000010000100000000,
  1675:       0b000000010000100000000,
  1676:       0b000000011111110000000,
  1677:       0b000000000000100000000,
  1678:       0b000000000000100000000,
  1679:       0b000000000000000000000,
  1680:       0b000000000000000000000,
  1681:     },  //0x34 4
  1682:     {
  1683:       0b000000000000000000000,
  1684:       0b000000000000000000000,
  1685:       0b000000011111110000000,
  1686:       0b000000010000000000000,
  1687:       0b000000010000000000000,
  1688:       0b000000011111100000000,
  1689:       0b000000000000010000000,
  1690:       0b000000000000010000000,
  1691:       0b000000000000010000000,
  1692:       0b000000010000010000000,
  1693:       0b000000001111100000000,
  1694:       0b000000000000000000000,
  1695:       0b000000000000000000000,
  1696:     },  //0x35 5
  1697:     {
  1698:       0b000000000000000000000,
  1699:       0b000000000000000000000,
  1700:       0b000000000111100000000,
  1701:       0b000000001000000000000,
  1702:       0b000000010000000000000,
  1703:       0b000000010000000000000,
  1704:       0b000000011111100000000,
  1705:       0b000000010000010000000,
  1706:       0b000000010000010000000,
  1707:       0b000000010000010000000,
  1708:       0b000000001111100000000,
  1709:       0b000000000000000000000,
  1710:       0b000000000000000000000,
  1711:     },  //0x36 6
  1712:     {
  1713:       0b000000000000000000000,
  1714:       0b000000000000000000000,
  1715:       0b000000011111110000000,
  1716:       0b000000000000010000000,
  1717:       0b000000000000010000000,
  1718:       0b000000000000100000000,
  1719:       0b000000000001000000000,
  1720:       0b000000000001000000000,
  1721:       0b000000000010000000000,
  1722:       0b000000000010000000000,
  1723:       0b000000000010000000000,
  1724:       0b000000000000000000000,
  1725:       0b000000000000000000000,
  1726:     },  //0x37 7
  1727:     {
  1728:       0b000000000000000000000,
  1729:       0b000000000000000000000,
  1730:       0b000000001111100000000,
  1731:       0b000000010000010000000,
  1732:       0b000000010000010000000,
  1733:       0b000000010000010000000,
  1734:       0b000000001111100000000,
  1735:       0b000000010000010000000,
  1736:       0b000000010000010000000,
  1737:       0b000000010000010000000,
  1738:       0b000000001111100000000,
  1739:       0b000000000000000000000,
  1740:       0b000000000000000000000,
  1741:     },  //0x38 8
  1742:     {
  1743:       0b000000000000000000000,
  1744:       0b000000000000000000000,
  1745:       0b000000001111100000000,
  1746:       0b000000010000010000000,
  1747:       0b000000010000010000000,
  1748:       0b000000010000010000000,
  1749:       0b000000001111110000000,
  1750:       0b000000000000010000000,
  1751:       0b000000000000100000000,
  1752:       0b000000000001000000000,
  1753:       0b000000001110000000000,
  1754:       0b000000000000000000000,
  1755:       0b000000000000000000000,
  1756:     },  //0x39 9
  1757:     {
  1758:       0b000000000000000000000,
  1759:       0b000000000000000000000,
  1760:       0b000000000000000000000,
  1761:       0b000000000110000000000,
  1762:       0b000000000110000000000,
  1763:       0b000000000000000000000,
  1764:       0b000000000000000000000,
  1765:       0b000000000110000000000,
  1766:       0b000000000110000000000,
  1767:       0b000000000000000000000,
  1768:       0b000000000000000000000,
  1769:       0b000000000000000000000,
  1770:       0b000000000000000000000,
  1771:     },  //0x3a :
  1772:     {
  1773:       0b000000000000000000000,
  1774:       0b000000000000000000000,
  1775:       0b000000000000000000000,
  1776:       0b000000000110000000000,
  1777:       0b000000000110000000000,
  1778:       0b000000000000000000000,
  1779:       0b000000000000000000000,
  1780:       0b000000000110000000000,
  1781:       0b000000000110000000000,
  1782:       0b000000000010000000000,
  1783:       0b000000000100000000000,
  1784:       0b000000000000000000000,
  1785:       0b000000000000000000000,
  1786:     },  //0x3b ;
  1787:     {
  1788:       0b000000000000000000000,
  1789:       0b000000000000000000000,
  1790:       0b000000000000100000000,
  1791:       0b000000000001000000000,
  1792:       0b000000000010000000000,
  1793:       0b000000000100000000000,
  1794:       0b000000001000000000000,
  1795:       0b000000000100000000000,
  1796:       0b000000000010000000000,
  1797:       0b000000000001000000000,
  1798:       0b000000000000100000000,
  1799:       0b000000000000000000000,
  1800:       0b000000000000000000000,
  1801:     },  //0x3c <
  1802:     {
  1803:       0b000000000000000000000,
  1804:       0b000000000000000000000,
  1805:       0b000000000000000000000,
  1806:       0b000000000000000000000,
  1807:       0b000000000000000000000,
  1808:       0b000000011111110000000,
  1809:       0b000000000000000000000,
  1810:       0b000000011111110000000,
  1811:       0b000000000000000000000,
  1812:       0b000000000000000000000,
  1813:       0b000000000000000000000,
  1814:       0b000000000000000000000,
  1815:       0b000000000000000000000,
  1816:     },  //0x3d =
  1817:     {
  1818:       0b000000000000000000000,
  1819:       0b000000000000000000000,
  1820:       0b000000001000000000000,
  1821:       0b000000000100000000000,
  1822:       0b000000000010000000000,
  1823:       0b000000000001000000000,
  1824:       0b000000000000100000000,
  1825:       0b000000000001000000000,
  1826:       0b000000000010000000000,
  1827:       0b000000000100000000000,
  1828:       0b000000001000000000000,
  1829:       0b000000000000000000000,
  1830:       0b000000000000000000000,
  1831:     },  //0x3e >
  1832:     {
  1833:       0b000000000000000000000,
  1834:       0b000000000000000000000,
  1835:       0b000000000111000000000,
  1836:       0b000000001000100000000,
  1837:       0b000000010000010000000,
  1838:       0b000000000000010000000,
  1839:       0b000000000000100000000,
  1840:       0b000000000001000000000,
  1841:       0b000000000010000000000,
  1842:       0b000000000000000000000,
  1843:       0b000000000010000000000,
  1844:       0b000000000000000000000,
  1845:       0b000000000000000000000,
  1846:     },  //0x3f ?
  1847:     {
  1848:       0b000000000000000000000,
  1849:       0b000000000000000000000,
  1850:       0b000000000111000000000,
  1851:       0b000000001000100000000,
  1852:       0b000000010010010000000,
  1853:       0b000000010101010000000,
  1854:       0b000000010101010000000,
  1855:       0b000000010101010000000,
  1856:       0b000000010011110000000,
  1857:       0b000000001000000000000,
  1858:       0b000000000111100000000,
  1859:       0b000000000000000000000,
  1860:       0b000000000000000000000,
  1861:     },  //0x40 @
  1862:     {
  1863:       0b000000000000000000000,
  1864:       0b000000000000000000000,
  1865:       0b000000000010000000000,
  1866:       0b000000000101000000000,
  1867:       0b000000000101000000000,
  1868:       0b000000001000100000000,
  1869:       0b000000001000100000000,
  1870:       0b000000010000010000000,
  1871:       0b000000011111110000000,
  1872:       0b000000010000010000000,
  1873:       0b000000010000010000000,
  1874:       0b000000000000000000000,
  1875:       0b000000000000000000000,
  1876:     },  //0x41 A
  1877:     {
  1878:       0b000000000000000000000,
  1879:       0b000000000000000000000,
  1880:       0b000000011111000000000,
  1881:       0b000000010000100000000,
  1882:       0b000000010000010000000,
  1883:       0b000000010000100000000,
  1884:       0b000000011111000000000,
  1885:       0b000000010000100000000,
  1886:       0b000000010000010000000,
  1887:       0b000000010000100000000,
  1888:       0b000000011111000000000,
  1889:       0b000000000000000000000,
  1890:       0b000000000000000000000,
  1891:     },  //0x42 B
  1892:     {
  1893:       0b000000000000000000000,
  1894:       0b000000000000000000000,
  1895:       0b000000000111000000000,
  1896:       0b000000001000100000000,
  1897:       0b000000010000010000000,
  1898:       0b000000010000000000000,
  1899:       0b000000010000000000000,
  1900:       0b000000010000000000000,
  1901:       0b000000010000010000000,
  1902:       0b000000001000100000000,
  1903:       0b000000000111000000000,
  1904:       0b000000000000000000000,
  1905:       0b000000000000000000000,
  1906:     },  //0x43 C
  1907:     {
  1908:       0b000000000000000000000,
  1909:       0b000000000000000000000,
  1910:       0b000000011111000000000,
  1911:       0b000000010000100000000,
  1912:       0b000000010000010000000,
  1913:       0b000000010000010000000,
  1914:       0b000000010000010000000,
  1915:       0b000000010000010000000,
  1916:       0b000000010000010000000,
  1917:       0b000000010000100000000,
  1918:       0b000000011111000000000,
  1919:       0b000000000000000000000,
  1920:       0b000000000000000000000,
  1921:     },  //0x44 D
  1922:     {
  1923:       0b000000000000000000000,
  1924:       0b000000000000000000000,
  1925:       0b000000011111110000000,
  1926:       0b000000010000000000000,
  1927:       0b000000010000000000000,
  1928:       0b000000010000000000000,
  1929:       0b000000011111100000000,
  1930:       0b000000010000000000000,
  1931:       0b000000010000000000000,
  1932:       0b000000010000000000000,
  1933:       0b000000011111110000000,
  1934:       0b000000000000000000000,
  1935:       0b000000000000000000000,
  1936:     },  //0x45 E
  1937:     {
  1938:       0b000000000000000000000,
  1939:       0b000000000000000000000,
  1940:       0b000000011111110000000,
  1941:       0b000000010000000000000,
  1942:       0b000000010000000000000,
  1943:       0b000000010000000000000,
  1944:       0b000000011111100000000,
  1945:       0b000000010000000000000,
  1946:       0b000000010000000000000,
  1947:       0b000000010000000000000,
  1948:       0b000000010000000000000,
  1949:       0b000000000000000000000,
  1950:       0b000000000000000000000,
  1951:     },  //0x46 F
  1952:     {
  1953:       0b000000000000000000000,
  1954:       0b000000000000000000000,
  1955:       0b000000000111100000000,
  1956:       0b000000001000000000000,
  1957:       0b000000010000000000000,
  1958:       0b000000010000000000000,
  1959:       0b000000010011110000000,
  1960:       0b000000010000100000000,
  1961:       0b000000010000100000000,
  1962:       0b000000001000100000000,
  1963:       0b000000000111000000000,
  1964:       0b000000000000000000000,
  1965:       0b000000000000000000000,
  1966:     },  //0x47 G
  1967:     {
  1968:       0b000000000000000000000,
  1969:       0b000000000000000000000,
  1970:       0b000000010000010000000,
  1971:       0b000000010000010000000,
  1972:       0b000000010000010000000,
  1973:       0b000000010000010000000,
  1974:       0b000000011111110000000,
  1975:       0b000000010000010000000,
  1976:       0b000000010000010000000,
  1977:       0b000000010000010000000,
  1978:       0b000000010000010000000,
  1979:       0b000000000000000000000,
  1980:       0b000000000000000000000,
  1981:     },  //0x48 H
  1982:     {
  1983:       0b000000000000000000000,
  1984:       0b000000000000000000000,
  1985:       0b000000000111000000000,
  1986:       0b000000000010000000000,
  1987:       0b000000000010000000000,
  1988:       0b000000000010000000000,
  1989:       0b000000000010000000000,
  1990:       0b000000000010000000000,
  1991:       0b000000000010000000000,
  1992:       0b000000000010000000000,
  1993:       0b000000000111000000000,
  1994:       0b000000000000000000000,
  1995:       0b000000000000000000000,
  1996:     },  //0x49 I
  1997:     {
  1998:       0b000000000000000000000,
  1999:       0b000000000000000000000,
  2000:       0b000000000000010000000,
  2001:       0b000000000000010000000,
  2002:       0b000000000000010000000,
  2003:       0b000000000000010000000,
  2004:       0b000000000000010000000,
  2005:       0b000000000000010000000,
  2006:       0b000000010000010000000,
  2007:       0b000000001000100000000,
  2008:       0b000000000111000000000,
  2009:       0b000000000000000000000,
  2010:       0b000000000000000000000,
  2011:     },  //0x4a J
  2012:     {
  2013:       0b000000000000000000000,
  2014:       0b000000000000000000000,
  2015:       0b000000010000010000000,
  2016:       0b000000010000100000000,
  2017:       0b000000010001000000000,
  2018:       0b000000010010000000000,
  2019:       0b000000010100000000000,
  2020:       0b000000011010000000000,
  2021:       0b000000010001000000000,
  2022:       0b000000010000100000000,
  2023:       0b000000010000010000000,
  2024:       0b000000000000000000000,
  2025:       0b000000000000000000000,
  2026:     },  //0x4b K
  2027:     {
  2028:       0b000000000000000000000,
  2029:       0b000000000000000000000,
  2030:       0b000000010000000000000,
  2031:       0b000000010000000000000,
  2032:       0b000000010000000000000,
  2033:       0b000000010000000000000,
  2034:       0b000000010000000000000,
  2035:       0b000000010000000000000,
  2036:       0b000000010000000000000,
  2037:       0b000000010000000000000,
  2038:       0b000000011111110000000,
  2039:       0b000000000000000000000,
  2040:       0b000000000000000000000,
  2041:     },  //0x4c L
  2042:     {
  2043:       0b000000000000000000000,
  2044:       0b000000000000000000000,
  2045:       0b000000010000010000000,
  2046:       0b000000011000110000000,
  2047:       0b000000010101010000000,
  2048:       0b000000010101010000000,
  2049:       0b000000010010010000000,
  2050:       0b000000010010010000000,
  2051:       0b000000010000010000000,
  2052:       0b000000010000010000000,
  2053:       0b000000010000010000000,
  2054:       0b000000000000000000000,
  2055:       0b000000000000000000000,
  2056:     },  //0x4d M
  2057:     {
  2058:       0b000000000000000000000,
  2059:       0b000000000000000000000,
  2060:       0b000000010000010000000,
  2061:       0b000000010000010000000,
  2062:       0b000000011000010000000,
  2063:       0b000000010100010000000,
  2064:       0b000000010010010000000,
  2065:       0b000000010001010000000,
  2066:       0b000000010000110000000,
  2067:       0b000000010000010000000,
  2068:       0b000000010000010000000,
  2069:       0b000000000000000000000,
  2070:       0b000000000000000000000,
  2071:     },  //0x4e N
  2072:     {
  2073:       0b000000000000000000000,
  2074:       0b000000000000000000000,
  2075:       0b000000000111000000000,
  2076:       0b000000001000100000000,
  2077:       0b000000010000010000000,
  2078:       0b000000010000010000000,
  2079:       0b000000010000010000000,
  2080:       0b000000010000010000000,
  2081:       0b000000010000010000000,
  2082:       0b000000001000100000000,
  2083:       0b000000000111000000000,
  2084:       0b000000000000000000000,
  2085:       0b000000000000000000000,
  2086:     },  //0x4f O
  2087:     {
  2088:       0b000000000000000000000,
  2089:       0b000000000000000000000,
  2090:       0b000000011111000000000,
  2091:       0b000000010000100000000,
  2092:       0b000000010000010000000,
  2093:       0b000000010000010000000,
  2094:       0b000000010000100000000,
  2095:       0b000000011111000000000,
  2096:       0b000000010000000000000,
  2097:       0b000000010000000000000,
  2098:       0b000000010000000000000,
  2099:       0b000000000000000000000,
  2100:       0b000000000000000000000,
  2101:     },  //0x50 P
  2102:     {
  2103:       0b000000000000000000000,
  2104:       0b000000000000000000000,
  2105:       0b000000000111000000000,
  2106:       0b000000001000100000000,
  2107:       0b000000010000010000000,
  2108:       0b000000010000010000000,
  2109:       0b000000010000010000000,
  2110:       0b000000010010010000000,
  2111:       0b000000010001010000000,
  2112:       0b000000001000100000000,
  2113:       0b000000000111010000000,
  2114:       0b000000000000000000000,
  2115:       0b000000000000000000000,
  2116:     },  //0x51 Q
  2117:     {
  2118:       0b000000000000000000000,
  2119:       0b000000000000000000000,
  2120:       0b000000011111000000000,
  2121:       0b000000010000100000000,
  2122:       0b000000010000010000000,
  2123:       0b000000010000010000000,
  2124:       0b000000010000100000000,
  2125:       0b000000011111000000000,
  2126:       0b000000010000100000000,
  2127:       0b000000010000010000000,
  2128:       0b000000010000010000000,
  2129:       0b000000000000000000000,
  2130:       0b000000000000000000000,
  2131:     },  //0x52 R
  2132:     {
  2133:       0b000000000000000000000,
  2134:       0b000000000000000000000,
  2135:       0b000000000111100000000,
  2136:       0b000000001000000000000,
  2137:       0b000000010000000000000,
  2138:       0b000000001000000000000,
  2139:       0b000000000111000000000,
  2140:       0b000000000000100000000,
  2141:       0b000000000000010000000,
  2142:       0b000000000000100000000,
  2143:       0b000000001111000000000,
  2144:       0b000000000000000000000,
  2145:       0b000000000000000000000,
  2146:     },  //0x53 S
  2147:     {
  2148:       0b000000000000000000000,
  2149:       0b000000000000000000000,
  2150:       0b000000011111110000000,
  2151:       0b000000000010000000000,
  2152:       0b000000000010000000000,
  2153:       0b000000000010000000000,
  2154:       0b000000000010000000000,
  2155:       0b000000000010000000000,
  2156:       0b000000000010000000000,
  2157:       0b000000000010000000000,
  2158:       0b000000000010000000000,
  2159:       0b000000000000000000000,
  2160:       0b000000000000000000000,
  2161:     },  //0x54 T
  2162:     {
  2163:       0b000000000000000000000,
  2164:       0b000000000000000000000,
  2165:       0b000000010000010000000,
  2166:       0b000000010000010000000,
  2167:       0b000000010000010000000,
  2168:       0b000000010000010000000,
  2169:       0b000000010000010000000,
  2170:       0b000000010000010000000,
  2171:       0b000000010000010000000,
  2172:       0b000000001000100000000,
  2173:       0b000000000111000000000,
  2174:       0b000000000000000000000,
  2175:       0b000000000000000000000,
  2176:     },  //0x55 U
  2177:     {
  2178:       0b000000000000000000000,
  2179:       0b000000000000000000000,
  2180:       0b000000010000010000000,
  2181:       0b000000010000010000000,
  2182:       0b000000010000010000000,
  2183:       0b000000010000010000000,
  2184:       0b000000001000100000000,
  2185:       0b000000001000100000000,
  2186:       0b000000000101000000000,
  2187:       0b000000000101000000000,
  2188:       0b000000000010000000000,
  2189:       0b000000000000000000000,
  2190:       0b000000000000000000000,
  2191:     },  //0x56 V
  2192:     {
  2193:       0b000000000000000000000,
  2194:       0b000000000000000000000,
  2195:       0b000000100010001000000,
  2196:       0b000000100010001000000,
  2197:       0b000000100010001000000,
  2198:       0b000000010101010000000,
  2199:       0b000000010101010000000,
  2200:       0b000000010101010000000,
  2201:       0b000000001000100000000,
  2202:       0b000000001000100000000,
  2203:       0b000000001000100000000,
  2204:       0b000000000000000000000,
  2205:       0b000000000000000000000,
  2206:     },  //0x57 W
  2207:     {
  2208:       0b000000000000000000000,
  2209:       0b000000000000000000000,
  2210:       0b000000010000010000000,
  2211:       0b000000010000010000000,
  2212:       0b000000001000100000000,
  2213:       0b000000000101000000000,
  2214:       0b000000000010000000000,
  2215:       0b000000000101000000000,
  2216:       0b000000001000100000000,
  2217:       0b000000010000010000000,
  2218:       0b000000010000010000000,
  2219:       0b000000000000000000000,
  2220:       0b000000000000000000000,
  2221:     },  //0x58 X
  2222:     {
  2223:       0b000000000000000000000,
  2224:       0b000000000000000000000,
  2225:       0b000000010000010000000,
  2226:       0b000000010000010000000,
  2227:       0b000000010000010000000,
  2228:       0b000000001000100000000,
  2229:       0b000000000101000000000,
  2230:       0b000000000010000000000,
  2231:       0b000000000010000000000,
  2232:       0b000000000010000000000,
  2233:       0b000000000010000000000,
  2234:       0b000000000000000000000,
  2235:       0b000000000000000000000,
  2236:     },  //0x59 Y
  2237:     {
  2238:       0b000000000000000000000,
  2239:       0b000000000000000000000,
  2240:       0b000000011111110000000,
  2241:       0b000000000000010000000,
  2242:       0b000000000000100000000,
  2243:       0b000000000001000000000,
  2244:       0b000000000010000000000,
  2245:       0b000000000100000000000,
  2246:       0b000000001000000000000,
  2247:       0b000000010000000000000,
  2248:       0b000000011111110000000,
  2249:       0b000000000000000000000,
  2250:       0b000000000000000000000,
  2251:     },  //0x5a Z
  2252:     {
  2253:       0b000000000000000000000,
  2254:       0b000000000000000000000,
  2255:       0b000000000111000000000,
  2256:       0b000000000100000000000,
  2257:       0b000000000100000000000,
  2258:       0b000000000100000000000,
  2259:       0b000000000100000000000,
  2260:       0b000000000100000000000,
  2261:       0b000000000100000000000,
  2262:       0b000000000100000000000,
  2263:       0b000000000111000000000,
  2264:       0b000000000000000000000,
  2265:       0b000000000000000000000,
  2266:     },  //0x5b [
  2267:     {
  2268:       0b000000000000000000000,
  2269:       0b000000000000000000000,
  2270:       0b000000010000010000000,
  2271:       0b000000001000100000000,
  2272:       0b000000000101000000000,
  2273:       0b000000000010000000000,
  2274:       0b000000011111110000000,
  2275:       0b000000000010000000000,
  2276:       0b000000011111110000000,
  2277:       0b000000000010000000000,
  2278:       0b000000000010000000000,
  2279:       0b000000000000000000000,
  2280:       0b000000000000000000000,
  2281:     },  //0x5c ¥
  2282:     {
  2283:       0b000000000000000000000,
  2284:       0b000000000000000000000,
  2285:       0b000000000111000000000,
  2286:       0b000000000001000000000,
  2287:       0b000000000001000000000,
  2288:       0b000000000001000000000,
  2289:       0b000000000001000000000,
  2290:       0b000000000001000000000,
  2291:       0b000000000001000000000,
  2292:       0b000000000001000000000,
  2293:       0b000000000111000000000,
  2294:       0b000000000000000000000,
  2295:       0b000000000000000000000,
  2296:     },  //0x5d ]
  2297:     {
  2298:       0b000000000000000000000,
  2299:       0b000000000000000000000,
  2300:       0b000000000010000000000,
  2301:       0b000000000101000000000,
  2302:       0b000000001000100000000,
  2303:       0b000000010000010000000,
  2304:       0b000000000000000000000,
  2305:       0b000000000000000000000,
  2306:       0b000000000000000000000,
  2307:       0b000000000000000000000,
  2308:       0b000000000000000000000,
  2309:       0b000000000000000000000,
  2310:       0b000000000000000000000,
  2311:     },  //0x5e ^
  2312:     {
  2313:       0b000000000000000000000,
  2314:       0b000000000000000000000,
  2315:       0b000000000000000000000,
  2316:       0b000000000000000000000,
  2317:       0b000000000000000000000,
  2318:       0b000000000000000000000,
  2319:       0b000000000000000000000,
  2320:       0b000000000000000000000,
  2321:       0b000000000000000000000,
  2322:       0b000000011111110000000,
  2323:       0b000000000000000000000,
  2324:       0b000000000000000000000,
  2325:       0b000000000000000000000,
  2326:     },  //0x5f _
  2327:     {
  2328:       0b000000000000000000000,
  2329:       0b000000000000000000000,
  2330:       0b000000000100000000000,
  2331:       0b000000000100000000000,
  2332:       0b000000000010000000000,
  2333:       0b000000000001000000000,
  2334:       0b000000000000000000000,
  2335:       0b000000000000000000000,
  2336:       0b000000000000000000000,
  2337:       0b000000000000000000000,
  2338:       0b000000000000000000000,
  2339:       0b000000000000000000000,
  2340:       0b000000000000000000000,
  2341:     },  //0x60 `
  2342:     {
  2343:       0b000000000000000000000,
  2344:       0b000000000000000000000,
  2345:       0b000000000000000000000,
  2346:       0b000000000000000000000,
  2347:       0b000000000000000000000,
  2348:       0b000000000111100000000,
  2349:       0b000000001000100000000,
  2350:       0b000000001000100000000,
  2351:       0b000000001001100000000,
  2352:       0b000000000110100000000,
  2353:       0b000000000000000000000,
  2354:       0b000000000000000000000,
  2355:       0b000000000000000000000,
  2356:     },  //0x61 a
  2357:     {
  2358:       0b000000000000000000000,
  2359:       0b000000000000000000000,
  2360:       0b000000001000000000000,
  2361:       0b000000001000000000000,
  2362:       0b000000001000000000000,
  2363:       0b000000001011000000000,
  2364:       0b000000001100100000000,
  2365:       0b000000001000100000000,
  2366:       0b000000001000100000000,
  2367:       0b000000001111000000000,
  2368:       0b000000000000000000000,
  2369:       0b000000000000000000000,
  2370:       0b000000000000000000000,
  2371:     },  //0x62 b
  2372:     {
  2373:       0b000000000000000000000,
  2374:       0b000000000000000000000,
  2375:       0b000000000000000000000,
  2376:       0b000000000000000000000,
  2377:       0b000000000000000000000,
  2378:       0b000000000111000000000,
  2379:       0b000000001000000000000,
  2380:       0b000000001000000000000,
  2381:       0b000000001000100000000,
  2382:       0b000000000111000000000,
  2383:       0b000000000000000000000,
  2384:       0b000000000000000000000,
  2385:       0b000000000000000000000,
  2386:     },  //0x63 c
  2387:     {
  2388:       0b000000000000000000000,
  2389:       0b000000000000000000000,
  2390:       0b000000000000100000000,
  2391:       0b000000000000100000000,
  2392:       0b000000000000100000000,
  2393:       0b000000000111100000000,
  2394:       0b000000001000100000000,
  2395:       0b000000001000100000000,
  2396:       0b000000001001100000000,
  2397:       0b000000000110100000000,
  2398:       0b000000000000000000000,
  2399:       0b000000000000000000000,
  2400:       0b000000000000000000000,
  2401:     },  //0x64 d
  2402:     {
  2403:       0b000000000000000000000,
  2404:       0b000000000000000000000,
  2405:       0b000000000000000000000,
  2406:       0b000000000000000000000,
  2407:       0b000000000000000000000,
  2408:       0b000000000111000000000,
  2409:       0b000000001000100000000,
  2410:       0b000000001111100000000,
  2411:       0b000000001000000000000,
  2412:       0b000000000111000000000,
  2413:       0b000000000000000000000,
  2414:       0b000000000000000000000,
  2415:       0b000000000000000000000,
  2416:     },  //0x65 e
  2417:     {
  2418:       0b000000000000000000000,
  2419:       0b000000000000000000000,
  2420:       0b000000000001100000000,
  2421:       0b000000000010000000000,
  2422:       0b000000000010000000000,
  2423:       0b000000001111100000000,
  2424:       0b000000000010000000000,
  2425:       0b000000000010000000000,
  2426:       0b000000000010000000000,
  2427:       0b000000000010000000000,
  2428:       0b000000000000000000000,
  2429:       0b000000000000000000000,
  2430:       0b000000000000000000000,
  2431:     },  //0x66 f
  2432:     {
  2433:       0b000000000000000000000,
  2434:       0b000000000000000000000,
  2435:       0b000000000000000000000,
  2436:       0b000000000000000000000,
  2437:       0b000000000111100000000,
  2438:       0b000000001000100000000,
  2439:       0b000000001000100000000,
  2440:       0b000000001000100000000,
  2441:       0b000000000111100000000,
  2442:       0b000000000000100000000,
  2443:       0b000000000111000000000,
  2444:       0b000000000000000000000,
  2445:       0b000000000000000000000,
  2446:     },  //0x67 g
  2447:     {
  2448:       0b000000000000000000000,
  2449:       0b000000000000000000000,
  2450:       0b000000001000000000000,
  2451:       0b000000001000000000000,
  2452:       0b000000001000000000000,
  2453:       0b000000001111000000000,
  2454:       0b000000001000100000000,
  2455:       0b000000001000100000000,
  2456:       0b000000001000100000000,
  2457:       0b000000001000100000000,
  2458:       0b000000000000000000000,
  2459:       0b000000000000000000000,
  2460:       0b000000000000000000000,
  2461:     },  //0x68 h
  2462:     {
  2463:       0b000000000000000000000,
  2464:       0b000000000000000000000,
  2465:       0b000000000010000000000,
  2466:       0b000000000000000000000,
  2467:       0b000000000000000000000,
  2468:       0b000000000010000000000,
  2469:       0b000000000010000000000,
  2470:       0b000000000010000000000,
  2471:       0b000000000010000000000,
  2472:       0b000000000010000000000,
  2473:       0b000000000000000000000,
  2474:       0b000000000000000000000,
  2475:       0b000000000000000000000,
  2476:     },  //0x69 i
  2477:     {
  2478:       0b000000000000000000000,
  2479:       0b000000000000000000000,
  2480:       0b000000000000100000000,
  2481:       0b000000000000000000000,
  2482:       0b000000000000000000000,
  2483:       0b000000000000100000000,
  2484:       0b000000000000100000000,
  2485:       0b000000000000100000000,
  2486:       0b000000000000100000000,
  2487:       0b000000001000100000000,
  2488:       0b000000000111000000000,
  2489:       0b000000000000000000000,
  2490:       0b000000000000000000000,
  2491:     },  //0x6a j
  2492:     {
  2493:       0b000000000000000000000,
  2494:       0b000000000000000000000,
  2495:       0b000000001000000000000,
  2496:       0b000000001000000000000,
  2497:       0b000000001000000000000,
  2498:       0b000000001001100000000,
  2499:       0b000000001010000000000,
  2500:       0b000000001110000000000,
  2501:       0b000000001001000000000,
  2502:       0b000000001000100000000,
  2503:       0b000000000000000000000,
  2504:       0b000000000000000000000,
  2505:       0b000000000000000000000,
  2506:     },  //0x6b k
  2507:     {
  2508:       0b000000000000000000000,
  2509:       0b000000000000000000000,
  2510:       0b000000000010000000000,
  2511:       0b000000000010000000000,
  2512:       0b000000000010000000000,
  2513:       0b000000000010000000000,
  2514:       0b000000000010000000000,
  2515:       0b000000000010000000000,
  2516:       0b000000000010000000000,
  2517:       0b000000000010000000000,
  2518:       0b000000000000000000000,
  2519:       0b000000000000000000000,
  2520:       0b000000000000000000000,
  2521:     },  //0x6c l
  2522:     {
  2523:       0b000000000000000000000,
  2524:       0b000000000000000000000,
  2525:       0b000000000000000000000,
  2526:       0b000000000000000000000,
  2527:       0b000000000000000000000,
  2528:       0b000000011101100000000,
  2529:       0b000000010010010000000,
  2530:       0b000000010010010000000,
  2531:       0b000000010010010000000,
  2532:       0b000000010010010000000,
  2533:       0b000000000000000000000,
  2534:       0b000000000000000000000,
  2535:       0b000000000000000000000,
  2536:     },  //0x6d m
  2537:     {
  2538:       0b000000000000000000000,
  2539:       0b000000000000000000000,
  2540:       0b000000000000000000000,
  2541:       0b000000000000000000000,
  2542:       0b000000000000000000000,
  2543:       0b000000001011000000000,
  2544:       0b000000001100100000000,
  2545:       0b000000001000100000000,
  2546:       0b000000001000100000000,
  2547:       0b000000001000100000000,
  2548:       0b000000000000000000000,
  2549:       0b000000000000000000000,
  2550:       0b000000000000000000000,
  2551:     },  //0x6e n
  2552:     {
  2553:       0b000000000000000000000,
  2554:       0b000000000000000000000,
  2555:       0b000000000000000000000,
  2556:       0b000000000000000000000,
  2557:       0b000000000000000000000,
  2558:       0b000000000111000000000,
  2559:       0b000000001000100000000,
  2560:       0b000000001000100000000,
  2561:       0b000000001000100000000,
  2562:       0b000000000111000000000,
  2563:       0b000000000000000000000,
  2564:       0b000000000000000000000,
  2565:       0b000000000000000000000,
  2566:     },  //0x6f o
  2567:     {
  2568:       0b000000000000000000000,
  2569:       0b000000000000000000000,
  2570:       0b000000000000000000000,
  2571:       0b000000000000000000000,
  2572:       0b000000001011000000000,
  2573:       0b000000001100100000000,
  2574:       0b000000001000100000000,
  2575:       0b000000001000100000000,
  2576:       0b000000001111000000000,
  2577:       0b000000001000000000000,
  2578:       0b000000001000000000000,
  2579:       0b000000000000000000000,
  2580:       0b000000000000000000000,
  2581:     },  //0x70 p
  2582:     {
  2583:       0b000000000000000000000,
  2584:       0b000000000000000000000,
  2585:       0b000000000000000000000,
  2586:       0b000000000000000000000,
  2587:       0b000000000110100000000,
  2588:       0b000000001001100000000,
  2589:       0b000000001000100000000,
  2590:       0b000000001000100000000,
  2591:       0b000000000111100000000,
  2592:       0b000000000000100000000,
  2593:       0b000000000000100000000,
  2594:       0b000000000000000000000,
  2595:       0b000000000000000000000,
  2596:     },  //0x71 q
  2597:     {
  2598:       0b000000000000000000000,
  2599:       0b000000000000000000000,
  2600:       0b000000000000000000000,
  2601:       0b000000000000000000000,
  2602:       0b000000000000000000000,
  2603:       0b000000001011000000000,
  2604:       0b000000001100100000000,
  2605:       0b000000001000000000000,
  2606:       0b000000001000000000000,
  2607:       0b000000001000000000000,
  2608:       0b000000000000000000000,
  2609:       0b000000000000000000000,
  2610:       0b000000000000000000000,
  2611:     },  //0x72 r
  2612:     {
  2613:       0b000000000000000000000,
  2614:       0b000000000000000000000,
  2615:       0b000000000000000000000,
  2616:       0b000000000000000000000,
  2617:       0b000000000000000000000,
  2618:       0b000000000111100000000,
  2619:       0b000000001000000000000,
  2620:       0b000000000111000000000,
  2621:       0b000000000000100000000,
  2622:       0b000000001111000000000,
  2623:       0b000000000000000000000,
  2624:       0b000000000000000000000,
  2625:       0b000000000000000000000,
  2626:     },  //0x73 s
  2627:     {
  2628:       0b000000000000000000000,
  2629:       0b000000000000000000000,
  2630:       0b000000000010000000000,
  2631:       0b000000000010000000000,
  2632:       0b000000000010000000000,
  2633:       0b000000001111100000000,
  2634:       0b000000000010000000000,
  2635:       0b000000000010000000000,
  2636:       0b000000000010000000000,
  2637:       0b000000000001100000000,
  2638:       0b000000000000000000000,
  2639:       0b000000000000000000000,
  2640:       0b000000000000000000000,
  2641:     },  //0x74 t
  2642:     {
  2643:       0b000000000000000000000,
  2644:       0b000000000000000000000,
  2645:       0b000000000000000000000,
  2646:       0b000000000000000000000,
  2647:       0b000000000000000000000,
  2648:       0b000000001000100000000,
  2649:       0b000000001000100000000,
  2650:       0b000000001000100000000,
  2651:       0b000000001001100000000,
  2652:       0b000000000110100000000,
  2653:       0b000000000000000000000,
  2654:       0b000000000000000000000,
  2655:       0b000000000000000000000,
  2656:     },  //0x75 u
  2657:     {
  2658:       0b000000000000000000000,
  2659:       0b000000000000000000000,
  2660:       0b000000000000000000000,
  2661:       0b000000000000000000000,
  2662:       0b000000000000000000000,
  2663:       0b000000001000100000000,
  2664:       0b000000001000100000000,
  2665:       0b000000000101000000000,
  2666:       0b000000000101000000000,
  2667:       0b000000000010000000000,
  2668:       0b000000000000000000000,
  2669:       0b000000000000000000000,
  2670:       0b000000000000000000000,
  2671:     },  //0x76 v
  2672:     {
  2673:       0b000000000000000000000,
  2674:       0b000000000000000000000,
  2675:       0b000000000000000000000,
  2676:       0b000000000000000000000,
  2677:       0b000000000000000000000,
  2678:       0b000000010010010000000,
  2679:       0b000000010010010000000,
  2680:       0b000000010010010000000,
  2681:       0b000000010010010000000,
  2682:       0b000000001101110000000,
  2683:       0b000000000000000000000,
  2684:       0b000000000000000000000,
  2685:       0b000000000000000000000,
  2686:     },  //0x77 w
  2687:     {
  2688:       0b000000000000000000000,
  2689:       0b000000000000000000000,
  2690:       0b000000000000000000000,
  2691:       0b000000000000000000000,
  2692:       0b000000000000000000000,
  2693:       0b000000001000100000000,
  2694:       0b000000000101000000000,
  2695:       0b000000000010000000000,
  2696:       0b000000000101000000000,
  2697:       0b000000001000100000000,
  2698:       0b000000000000000000000,
  2699:       0b000000000000000000000,
  2700:       0b000000000000000000000,
  2701:     },  //0x78 x
  2702:     {
  2703:       0b000000000000000000000,
  2704:       0b000000000000000000000,
  2705:       0b000000000000000000000,
  2706:       0b000000000000000000000,
  2707:       0b000000001000100000000,
  2708:       0b000000001000100000000,
  2709:       0b000000001000100000000,
  2710:       0b000000001000100000000,
  2711:       0b000000000111100000000,
  2712:       0b000000000000100000000,
  2713:       0b000000000111000000000,
  2714:       0b000000000000000000000,
  2715:       0b000000000000000000000,
  2716:     },  //0x79 y
  2717:     {
  2718:       0b000000000000000000000,
  2719:       0b000000000000000000000,
  2720:       0b000000000000000000000,
  2721:       0b000000000000000000000,
  2722:       0b000000000000000000000,
  2723:       0b000000001111100000000,
  2724:       0b000000000001000000000,
  2725:       0b000000000010000000000,
  2726:       0b000000000100000000000,
  2727:       0b000000001111100000000,
  2728:       0b000000000000000000000,
  2729:       0b000000000000000000000,
  2730:       0b000000000000000000000,
  2731:     },  //0x7a z
  2732:     {
  2733:       0b000000000000000000000,
  2734:       0b000000000000000000000,
  2735:       0b000000000001000000000,
  2736:       0b000000000010000000000,
  2737:       0b000000000010000000000,
  2738:       0b000000000010000000000,
  2739:       0b000000000100000000000,
  2740:       0b000000000010000000000,
  2741:       0b000000000010000000000,
  2742:       0b000000000010000000000,
  2743:       0b000000000001000000000,
  2744:       0b000000000000000000000,
  2745:       0b000000000000000000000,
  2746:     },  //0x7b {
  2747:     {
  2748:       0b000000000000000000000,
  2749:       0b000000000000000000000,
  2750:       0b000000000010000000000,
  2751:       0b000000000010000000000,
  2752:       0b000000000010000000000,
  2753:       0b000000000010000000000,
  2754:       0b000000000010000000000,
  2755:       0b000000000010000000000,
  2756:       0b000000000010000000000,
  2757:       0b000000000010000000000,
  2758:       0b000000000010000000000,
  2759:       0b000000000000000000000,
  2760:       0b000000000000000000000,
  2761:     },  //0x7c |
  2762:     {
  2763:       0b000000000000000000000,
  2764:       0b000000000000000000000,
  2765:       0b000000000100000000000,
  2766:       0b000000000010000000000,
  2767:       0b000000000010000000000,
  2768:       0b000000000010000000000,
  2769:       0b000000000001000000000,
  2770:       0b000000000010000000000,
  2771:       0b000000000010000000000,
  2772:       0b000000000010000000000,
  2773:       0b000000000100000000000,
  2774:       0b000000000000000000000,
  2775:       0b000000000000000000000,
  2776:     },  //0x7d }
  2777:     {
  2778:       0b000000000000000000000,
  2779:       0b000000000000000000000,
  2780:       0b000000011111110000000,
  2781:       0b000000000000000000000,
  2782:       0b000000000000000000000,
  2783:       0b000000000000000000000,
  2784:       0b000000000000000000000,
  2785:       0b000000000000000000000,
  2786:       0b000000000000000000000,
  2787:       0b000000000000000000000,
  2788:       0b000000000000000000000,
  2789:       0b000000000000000000000,
  2790:       0b000000000000000000000,
  2791:     },  //0x7e ¯
  2792:     {
  2793:       0b000000000000000000000,
  2794:       0b000000000000000000000,
  2795:       0b000000100000011100000,
  2796:       0b000001010000100010000,
  2797:       0b000010001001000001000,
  2798:       0b000100000100000001000,
  2799:       0b000000000000000010000,
  2800:       0b000000000000000100000,
  2801:       0b000000000000001000000,
  2802:       0b000000000000000000000,
  2803:       0b000000000000001000000,
  2804:       0b000000000000000000000,
  2805:       0b000000000000000000000,
  2806:     },  //0x7f ^?
  2807:     {
  2808:       0b000000000000000000000,
  2809:       0b000000000000000000000,
  2810:       0b000000010000000000000,
  2811:       0b000000001000000000000,
  2812:       0b000000000100000000000,
  2813:       0b000000000100000000000,
  2814:       0b000000000010000000000,
  2815:       0b000000000001000000000,
  2816:       0b000000000001000000000,
  2817:       0b000000000000100000000,
  2818:       0b000000000000010000000,
  2819:       0b000000000000000000000,
  2820:       0b000000000000000000000,
  2821:     },  //0x80 \
  2822:     {
  2823:       0b000000000000000000000,
  2824:       0b000000000000000000000,
  2825:       0b000000001100000000000,
  2826:       0b000000010010010000000,
  2827:       0b000000000001100000000,
  2828:       0b000000000000000000000,
  2829:       0b000000000000000000000,
  2830:       0b000000000000000000000,
  2831:       0b000000000000000000000,
  2832:       0b000000000000000000000,
  2833:       0b000000000000000000000,
  2834:       0b000000000000000000000,
  2835:       0b000000000000000000000,
  2836:     },  //0x81 ~
  2837:     {
  2838:       0b000000000000000000000,
  2839:       0b000000000000000000000,
  2840:       0b000000000010000000000,
  2841:       0b000000000010000000000,
  2842:       0b000000000010000000000,
  2843:       0b000000000010000000000,
  2844:       0b000000000000000000000,
  2845:       0b000000000010000000000,
  2846:       0b000000000010000000000,
  2847:       0b000000000010000000000,
  2848:       0b000000000010000000000,
  2849:       0b000000000000000000000,
  2850:       0b000000000000000000000,
  2851:     },  //0x82 ¦
  2852:     {
  2853:       0b000000000000000000000,
  2854:       0b000000000000000000000,
  2855:       0b000000100001000000000,
  2856:       0b000001010000100000000,
  2857:       0b000010001000010000000,
  2858:       0b000100000100010000000,
  2859:       0b000000000000001000000,
  2860:       0b000000000000000100000,
  2861:       0b000000000000000100000,
  2862:       0b000000000000000010000,
  2863:       0b000000000000000001000,
  2864:       0b000000000000000000000,
  2865:       0b000000000000000000000,
  2866:     },  //0x83 ^\
  2867:     {
  2868:       0b000000000000000000000,
  2869:       0b000000000000000000000,
  2870:       0b000000000000000000000,
  2871:       0b011101010111011101100,
  2872:       0b010001010010010001010,
  2873:       0b010001110010010001010,
  2874:       0b011101110010011101100,
  2875:       0b010001110010010001010,
  2876:       0b010001010010010001010,
  2877:       0b011101010010011101010,
  2878:       0b000000000000000000000,
  2879:       0b000000000000000000000,
  2880:       0b000000000000000000000,
  2881:     },  //0x84 ENTER
  2882:     null,  //0x85
  2883:     {
  2884:       0b000000000000000000000,
  2885:       0b000000000000000000000,
  2886:       0b000000000010000000000,
  2887:       0b000000011111100000000,
  2888:       0b000000000100000000000,
  2889:       0b000000001110000000000,
  2890:       0b000000010011100000000,
  2891:       0b000000000101000000000,
  2892:       0b000000001001000000000,
  2893:       0b000000001000000000000,
  2894:       0b000000000111100000000,
  2895:       0b000000000000000000000,
  2896:       0b000000000000000000000,
  2897:     },  //0x86 を
  2898:     {
  2899:       0b000000000000000000000,
  2900:       0b000000000000000000000,
  2901:       0b000000000000000000000,
  2902:       0b000000000100000000000,
  2903:       0b000000011111110000000,
  2904:       0b000000000100000000000,
  2905:       0b000000001111100000000,
  2906:       0b000000010101010000000,
  2907:       0b000000010010010000000,
  2908:       0b000000001100100000000,
  2909:       0b000000000000000000000,
  2910:       0b000000000000000000000,
  2911:       0b000000000000000000000,
  2912:     },  //0x87 ぁ
  2913:     {
  2914:       0b000000000000000000000,
  2915:       0b000000000000000000000,
  2916:       0b000000000000000000000,
  2917:       0b000000000000000000000,
  2918:       0b000000010001000000000,
  2919:       0b000000010000100000000,
  2920:       0b000000010000100000000,
  2921:       0b000000010000010000000,
  2922:       0b000000010100010000000,
  2923:       0b000000001000000000000,
  2924:       0b000000000000000000000,
  2925:       0b000000000000000000000,
  2926:       0b000000000000000000000,
  2927:     },  //0x88 ぃ
  2928:     {
  2929:       0b000000000000000000000,
  2930:       0b000000000000000000000,
  2931:       0b000000000000000000000,
  2932:       0b000000001110000000000,
  2933:       0b000000000000000000000,
  2934:       0b000000001111000000000,
  2935:       0b000000000000100000000,
  2936:       0b000000000000100000000,
  2937:       0b000000000001000000000,
  2938:       0b000000000110000000000,
  2939:       0b000000000000000000000,
  2940:       0b000000000000000000000,
  2941:       0b000000000000000000000,
  2942:     },  //0x89 ぅ
  2943:     {
  2944:       0b000000000000000000000,
  2945:       0b000000000000000000000,
  2946:       0b000000000000000000000,
  2947:       0b000000000111000000000,
  2948:       0b000000000000000000000,
  2949:       0b000000001111100000000,
  2950:       0b000000000001000000000,
  2951:       0b000000000010000000000,
  2952:       0b000000000110000000000,
  2953:       0b000000001001100000000,
  2954:       0b000000000000000000000,
  2955:       0b000000000000000000000,
  2956:       0b000000000000000000000,
  2957:     },  //0x8a ぇ
  2958:     {
  2959:       0b000000000000000000000,
  2960:       0b000000000000000000000,
  2961:       0b000000000000000000000,
  2962:       0b000000000100000000000,
  2963:       0b000000011110100000000,
  2964:       0b000000000100100000000,
  2965:       0b000000001111000000000,
  2966:       0b000000010100100000000,
  2967:       0b000000010100100000000,
  2968:       0b000000001101000000000,
  2969:       0b000000000000000000000,
  2970:       0b000000000000000000000,
  2971:       0b000000000000000000000,
  2972:     },  //0x8b ぉ
  2973:     {
  2974:       0b000000000000000000000,
  2975:       0b000000000000000000000,
  2976:       0b000000000000000000000,
  2977:       0b000000000000000000000,
  2978:       0b000000001010000000000,
  2979:       0b000000001111100000000,
  2980:       0b000000011001010000000,
  2981:       0b000000000101010000000,
  2982:       0b000000000100000000000,
  2983:       0b000000000010000000000,
  2984:       0b000000000000000000000,
  2985:       0b000000000000000000000,
  2986:       0b000000000000000000000,
  2987:     },  //0x8c ゃ
  2988:     {
  2989:       0b000000000000000000000,
  2990:       0b000000000000000000000,
  2991:       0b000000000000000000000,
  2992:       0b000000000000000000000,
  2993:       0b000000010010000000000,
  2994:       0b000000010111000000000,
  2995:       0b000000011010100000000,
  2996:       0b000000010010100000000,
  2997:       0b000000010100100000000,
  2998:       0b000000000101000000000,
  2999:       0b000000000000000000000,
  3000:       0b000000000000000000000,
  3001:       0b000000000000000000000,
  3002:     },  //0x8d ゅ
  3003:     {
  3004:       0b000000000000000000000,
  3005:       0b000000000000000000000,
  3006:       0b000000000000000000000,
  3007:       0b000000000010000000000,
  3008:       0b000000000010000000000,
  3009:       0b000000000011100000000,
  3010:       0b000000000010000000000,
  3011:       0b000000000111000000000,
  3012:       0b000000001010100000000,
  3013:       0b000000000100000000000,
  3014:       0b000000000000000000000,
  3015:       0b000000000000000000000,
  3016:       0b000000000000000000000,
  3017:     },  //0x8e ょ
  3018:     {
  3019:       0b000000000000000000000,
  3020:       0b000000000000000000000,
  3021:       0b000000000000000000000,
  3022:       0b000000000000000000000,
  3023:       0b000000000000000000000,
  3024:       0b000000011111000000000,
  3025:       0b000000000000100000000,
  3026:       0b000000000000100000000,
  3027:       0b000000000001000000000,
  3028:       0b000000000110000000000,
  3029:       0b000000000000000000000,
  3030:       0b000000000000000000000,
  3031:       0b000000000000000000000,
  3032:     },  //0x8f っ
  3033:     null,  //0x90
  3034:     {
  3035:       0b000000000000000000000,
  3036:       0b000000000000000000000,
  3037:       0b000000000100000000000,
  3038:       0b000000011111110000000,
  3039:       0b000000000100000000000,
  3040:       0b000000001111100000000,
  3041:       0b000000010101010000000,
  3042:       0b000000100101001000000,
  3043:       0b000000100101001000000,
  3044:       0b000000100010001000000,
  3045:       0b000000011100010000000,
  3046:       0b000000000000000000000,
  3047:       0b000000000000000000000,
  3048:     },  //0x91 あ
  3049:     {
  3050:       0b000000000000000000000,
  3051:       0b000000000000000000000,
  3052:       0b000000100000100000000,
  3053:       0b000000100000010000000,
  3054:       0b000000100000010000000,
  3055:       0b000000100000010000000,
  3056:       0b000000100000001000000,
  3057:       0b000000100000001000000,
  3058:       0b000000101000001000000,
  3059:       0b000000010000000000000,
  3060:       0b000000000000000000000,
  3061:       0b000000000000000000000,
  3062:       0b000000000000000000000,
  3063:     },  //0x92 い
  3064:     {
  3065:       0b000000000000000000000,
  3066:       0b000000000000000000000,
  3067:       0b000000001111000000000,
  3068:       0b000000000000000000000,
  3069:       0b000000001111000000000,
  3070:       0b000000110000100000000,
  3071:       0b000000000000010000000,
  3072:       0b000000000000010000000,
  3073:       0b000000000000100000000,
  3074:       0b000000000001000000000,
  3075:       0b000000000110000000000,
  3076:       0b000000000000000000000,
  3077:       0b000000000000000000000,
  3078:     },  //0x93 う
  3079:     {
  3080:       0b000000000000000000000,
  3081:       0b000000000000000000000,
  3082:       0b000000000111000000000,
  3083:       0b000000000000000000000,
  3084:       0b000000011111110000000,
  3085:       0b000000000000100000000,
  3086:       0b000000000001000000000,
  3087:       0b000000000010000000000,
  3088:       0b000000000101000000000,
  3089:       0b000000001001000000000,
  3090:       0b000000010000110000000,
  3091:       0b000000000000000000000,
  3092:       0b000000000000000000000,
  3093:     },  //0x94 え
  3094:     {
  3095:       0b000000000000000000000,
  3096:       0b000000000000000000000,
  3097:       0b000000001000000000000,
  3098:       0b000000111110100000000,
  3099:       0b000000001000010000000,
  3100:       0b000000001111001000000,
  3101:       0b000000011000100000000,
  3102:       0b000000101000010000000,
  3103:       0b000001001000010000000,
  3104:       0b000000101000100000000,
  3105:       0b000000011001000000000,
  3106:       0b000000000000000000000,
  3107:       0b000000000000000000000,
  3108:     },  //0x95 お
  3109:     {
  3110:       0b000000000000000000000,
  3111:       0b000000000000000000000,
  3112:       0b000000000100100000000,
  3113:       0b000000000100010000000,
  3114:       0b000000111110010000000,
  3115:       0b000000001001001000000,
  3116:       0b000000001001001000000,
  3117:       0b000000010001000000000,
  3118:       0b000000010001000000000,
  3119:       0b000000100001000000000,
  3120:       0b000000100110000000000,
  3121:       0b000000000000000000000,
  3122:       0b000000000000000000000,
  3123:     },  //0x96 か
  3124:     {
  3125:       0b000000000000000000000,
  3126:       0b000000000000000000000,
  3127:       0b000000000100000000000,
  3128:       0b000000011111110000000,
  3129:       0b000000000010000000000,
  3130:       0b000000011111110000000,
  3131:       0b000000000001000000000,
  3132:       0b000000001111100000000,
  3133:       0b000000010000010000000,
  3134:       0b000000010000000000000,
  3135:       0b000000001111110000000,
  3136:       0b000000000000000000000,
  3137:       0b000000000000000000000,
  3138:     },  //0x97 き
  3139:     {
  3140:       0b000000000000000000000,
  3141:       0b000000000000000000000,
  3142:       0b000000000000100000000,
  3143:       0b000000000001000000000,
  3144:       0b000000000010000000000,
  3145:       0b000000000100000000000,
  3146:       0b000000001000000000000,
  3147:       0b000000000100000000000,
  3148:       0b000000000010000000000,
  3149:       0b000000000001000000000,
  3150:       0b000000000000100000000,
  3151:       0b000000000000000000000,
  3152:       0b000000000000000000000,
  3153:     },  //0x98 く
  3154:     {
  3155:       0b000000000000000000000,
  3156:       0b000000000000000000000,
  3157:       0b000000100001000000000,
  3158:       0b000000100001000000000,
  3159:       0b000000101111110000000,
  3160:       0b000000100001000000000,
  3161:       0b000000100001000000000,
  3162:       0b000000100001000000000,
  3163:       0b000000100001000000000,
  3164:       0b000000100010000000000,
  3165:       0b000000100100000000000,
  3166:       0b000000000000000000000,
  3167:       0b000000000000000000000,
  3168:     },  //0x99 け
  3169:     {
  3170:       0b000000000000000000000,
  3171:       0b000000000000000000000,
  3172:       0b000000001111100000000,
  3173:       0b000000000000010000000,
  3174:       0b000000000000100000000,
  3175:       0b000000000001000000000,
  3176:       0b000000000000000000000,
  3177:       0b000000001000000000000,
  3178:       0b000000010000000000000,
  3179:       0b000000001111110000000,
  3180:       0b000000000000000000000,
  3181:       0b000000000000000000000,
  3182:       0b000000000000000000000,
  3183:     },  //0x9a こ
  3184:     {
  3185:       0b000000000000000000000,
  3186:       0b000000000000000000000,
  3187:       0b000000001000000000000,
  3188:       0b000000000100100000000,
  3189:       0b000000011111000000000,
  3190:       0b000000000010000000000,
  3191:       0b000000000001000000000,
  3192:       0b000000001111100000000,
  3193:       0b000000010000000000000,
  3194:       0b000000010000000000000,
  3195:       0b000000001111110000000,
  3196:       0b000000000000000000000,
  3197:       0b000000000000000000000,
  3198:     },  //0x9b さ
  3199:     {
  3200:       0b000000000000000000000,
  3201:       0b000000000000000000000,
  3202:       0b000000010000000000000,
  3203:       0b000000010000000000000,
  3204:       0b000000010000000000000,
  3205:       0b000000010000000000000,
  3206:       0b000000010000000000000,
  3207:       0b000000010000010000000,
  3208:       0b000000010000010000000,
  3209:       0b000000001000100000000,
  3210:       0b000000000111000000000,
  3211:       0b000000000000000000000,
  3212:       0b000000000000000000000,
  3213:     },  //0x9c し
  3214:     {
  3215:       0b000000000000000000000,
  3216:       0b000000000000000000000,
  3217:       0b000000000001000000000,
  3218:       0b000000111111110000000,
  3219:       0b000000000001000000000,
  3220:       0b000000001101000000000,
  3221:       0b000000010011000000000,
  3222:       0b000000010011000000000,
  3223:       0b000000001101000000000,
  3224:       0b000000000001000000000,
  3225:       0b000000000110000000000,
  3226:       0b000000000000000000000,
  3227:       0b000000000000000000000,
  3228:     },  //0x9d す
  3229:     {
  3230:       0b000000000000000000000,
  3231:       0b000000000000000000000,
  3232:       0b000000001000100000000,
  3233:       0b000000001000100000000,
  3234:       0b000000111111111000000,
  3235:       0b000000001000100000000,
  3236:       0b000000001001100000000,
  3237:       0b000000001000000000000,
  3238:       0b000000001000000000000,
  3239:       0b000000001000000000000,
  3240:       0b000000000111110000000,
  3241:       0b000000000000000000000,
  3242:       0b000000000000000000000,
  3243:     },  //0x9e せ
  3244:     {
  3245:       0b000000000000000000000,
  3246:       0b000000000000000000000,
  3247:       0b000000001111100000000,
  3248:       0b000000000001000000000,
  3249:       0b000000000010000000000,
  3250:       0b000000001100000000000,
  3251:       0b000000111111111000000,
  3252:       0b000000000110000000000,
  3253:       0b000000001000000000000,
  3254:       0b000000001000000000000,
  3255:       0b000000000111110000000,
  3256:       0b000000000000000000000,
  3257:       0b000000000000000000000,
  3258:     },  //0x9f そ
  3259:     {
  3260:       0b000000000000000000000,
  3261:       0b000000000000000000000,
  3262:       0b000000010101010000000,
  3263:       0b000000000000000000000,
  3264:       0b000000010101010000000,
  3265:       0b000000000000000000000,
  3266:       0b000000010101010000000,
  3267:       0b000000000000000000000,
  3268:       0b000000010101010000000,
  3269:       0b000000000000000000000,
  3270:       0b000000010101010000000,
  3271:       0b000000000000000000000,
  3272:       0b000000000000000000000,
  3273:     },  //0xa0 □
  3274:     {
  3275:       0b000000000000000000000,
  3276:       0b000000000000000000000,
  3277:       0b000000000000000000000,
  3278:       0b000000000000000000000,
  3279:       0b000000000000000000000,
  3280:       0b000000000000000000000,
  3281:       0b000000000000000000000,
  3282:       0b000000000110000000000,
  3283:       0b000000001001000000000,
  3284:       0b000000001001000000000,
  3285:       0b000000000110000000000,
  3286:       0b000000000000000000000,
  3287:       0b000000000000000000000,
  3288:     },  //0xa1 。
  3289:     {
  3290:       0b000000000000000000000,
  3291:       0b000000000000000000000,
  3292:       0b000000001111100000000,
  3293:       0b000000001000000000000,
  3294:       0b000000001000000000000,
  3295:       0b000000001000000000000,
  3296:       0b000000001000000000000,
  3297:       0b000000001000000000000,
  3298:       0b000000000000000000000,
  3299:       0b000000000000000000000,
  3300:       0b000000000000000000000,
  3301:       0b000000000000000000000,
  3302:       0b000000000000000000000,
  3303:     },  //0xa2 「
  3304:     {
  3305:       0b000000000000000000000,
  3306:       0b000000000000000000000,
  3307:       0b000000000000000000000,
  3308:       0b000000000000000000000,
  3309:       0b000000000000000000000,
  3310:       0b000000000000100000000,
  3311:       0b000000000000100000000,
  3312:       0b000000000000100000000,
  3313:       0b000000000000100000000,
  3314:       0b000000000000100000000,
  3315:       0b000000001111100000000,
  3316:       0b000000000000000000000,
  3317:       0b000000000000000000000,
  3318:     },  //0xa3 」
  3319:     {
  3320:       0b000000000000000000000,
  3321:       0b000000000000000000000,
  3322:       0b000000000000000000000,
  3323:       0b000000000000000000000,
  3324:       0b000000000000000000000,
  3325:       0b000000000000000000000,
  3326:       0b000000000000000000000,
  3327:       0b000000000000000000000,
  3328:       0b000000000100000000000,
  3329:       0b000000000010000000000,
  3330:       0b000000000001000000000,
  3331:       0b000000000000000000000,
  3332:       0b000000000000000000000,
  3333:     },  //0xa4 、
  3334:     {
  3335:       0b000000000000000000000,
  3336:       0b000000000000000000000,
  3337:       0b000000000000000000000,
  3338:       0b000000000000000000000,
  3339:       0b000000000000000000000,
  3340:       0b000000000110000000000,
  3341:       0b000000000110000000000,
  3342:       0b000000000000000000000,
  3343:       0b000000000000000000000,
  3344:       0b000000000000000000000,
  3345:       0b000000000000000000000,
  3346:       0b000000000000000000000,
  3347:       0b000000000000000000000,
  3348:     },  //0xa5 ・
  3349:     {
  3350:       0b000000000000000000000,
  3351:       0b000000000000000000000,
  3352:       0b000000011111110000000,
  3353:       0b000000000000010000000,
  3354:       0b000000000000010000000,
  3355:       0b000000011111110000000,
  3356:       0b000000000000010000000,
  3357:       0b000000000000010000000,
  3358:       0b000000000000100000000,
  3359:       0b000000000001000000000,
  3360:       0b000000000110000000000,
  3361:       0b000000000000000000000,
  3362:       0b000000000000000000000,
  3363:     },  //0xa6 ヲ
  3364:     {
  3365:       0b000000000000000000000,
  3366:       0b000000000000000000000,
  3367:       0b000000000000000000000,
  3368:       0b000000000000000000000,
  3369:       0b000000001111100000000,
  3370:       0b000000000000100000000,
  3371:       0b000000000101000000000,
  3372:       0b000000000110000000000,
  3373:       0b000000000100000000000,
  3374:       0b000000001000000000000,
  3375:       0b000000000000000000000,
  3376:       0b000000000000000000000,
  3377:       0b000000000000000000000,
  3378:     },  //0xa7 ァ
  3379:     {
  3380:       0b000000000000000000000,
  3381:       0b000000000000000000000,
  3382:       0b000000000000000000000,
  3383:       0b000000000000000000000,
  3384:       0b000000000000100000000,
  3385:       0b000000000001000000000,
  3386:       0b000000000011000000000,
  3387:       0b000000000101000000000,
  3388:       0b000000001001000000000,
  3389:       0b000000000001000000000,
  3390:       0b000000000000000000000,
  3391:       0b000000000000000000000,
  3392:       0b000000000000000000000,
  3393:     },  //0xa8 ィ
  3394:     {
  3395:       0b000000000000000000000,
  3396:       0b000000000000000000000,
  3397:       0b000000000000000000000,
  3398:       0b000000000000000000000,
  3399:       0b000000000010000000000,
  3400:       0b000000001111100000000,
  3401:       0b000000001000100000000,
  3402:       0b000000000000100000000,
  3403:       0b000000000001000000000,
  3404:       0b000000000010000000000,
  3405:       0b000000000000000000000,
  3406:       0b000000000000000000000,
  3407:       0b000000000000000000000,
  3408:     },  //0xa9 ゥ
  3409:     {
  3410:       0b000000000000000000000,
  3411:       0b000000000000000000000,
  3412:       0b000000000000000000000,
  3413:       0b000000000000000000000,
  3414:       0b000000001111100000000,
  3415:       0b000000000010000000000,
  3416:       0b000000000010000000000,
  3417:       0b000000000010000000000,
  3418:       0b000000000010000000000,
  3419:       0b000000001111100000000,
  3420:       0b000000000000000000000,
  3421:       0b000000000000000000000,
  3422:       0b000000000000000000000,
  3423:     },  //0xaa ェ
  3424:     {
  3425:       0b000000000000000000000,
  3426:       0b000000000000000000000,
  3427:       0b000000000000000000000,
  3428:       0b000000000000000000000,
  3429:       0b000000000001000000000,
  3430:       0b000000001111100000000,
  3431:       0b000000000001000000000,
  3432:       0b000000000011000000000,
  3433:       0b000000000101000000000,
  3434:       0b000000001001000000000,
  3435:       0b000000000000000000000,
  3436:       0b000000000000000000000,
  3437:       0b000000000000000000000,
  3438:     },  //0xab ォ
  3439:     {
  3440:       0b000000000000000000000,
  3441:       0b000000000000000000000,
  3442:       0b000000000000000000000,
  3443:       0b000000000000000000000,
  3444:       0b000000000100000000000,
  3445:       0b000000001111100000000,
  3446:       0b000000000100100000000,
  3447:       0b000000000010000000000,
  3448:       0b000000000010000000000,
  3449:       0b000000000001000000000,
  3450:       0b000000000000000000000,
  3451:       0b000000000000000000000,
  3452:       0b000000000000000000000,
  3453:     },  //0xac ャ
  3454:     {
  3455:       0b000000000000000000000,
  3456:       0b000000000000000000000,
  3457:       0b000000000000000000000,
  3458:       0b000000000000000000000,
  3459:       0b000000000111000000000,
  3460:       0b000000000001000000000,
  3461:       0b000000000001000000000,
  3462:       0b000000000010000000000,
  3463:       0b000000000010000000000,
  3464:       0b000000001111100000000,
  3465:       0b000000000000000000000,
  3466:       0b000000000000000000000,
  3467:       0b000000000000000000000,
  3468:     },  //0xad ュ
  3469:     {
  3470:       0b000000000000000000000,
  3471:       0b000000000000000000000,
  3472:       0b000000000000000000000,
  3473:       0b000000000000000000000,
  3474:       0b000000001111100000000,
  3475:       0b000000000000100000000,
  3476:       0b000000001111100000000,
  3477:       0b000000000000100000000,
  3478:       0b000000001111100000000,
  3479:       0b000000000000100000000,
  3480:       0b000000000000000000000,
  3481:       0b000000000000000000000,
  3482:       0b000000000000000000000,
  3483:     },  //0xae ョ
  3484:     {
  3485:       0b000000000000000000000,
  3486:       0b000000000000000000000,
  3487:       0b000000000000000000000,
  3488:       0b000000000000000000000,
  3489:       0b000000001010100000000,
  3490:       0b000000001010100000000,
  3491:       0b000000000000100000000,
  3492:       0b000000000001000000000,
  3493:       0b000000000010000000000,
  3494:       0b000000000100000000000,
  3495:       0b000000000000000000000,
  3496:       0b000000000000000000000,
  3497:       0b000000000000000000000,
  3498:     },  //0xaf ッ
  3499:     {
  3500:       0b000000000000000000000,
  3501:       0b000000000000000000000,
  3502:       0b000000000000000000000,
  3503:       0b000000000000000000000,
  3504:       0b000000000000000000000,
  3505:       0b000000010000000000000,
  3506:       0b000000001111110000000,
  3507:       0b000000000000000000000,
  3508:       0b000000000000000000000,
  3509:       0b000000000000000000000,
  3510:       0b000000000000000000000,
  3511:       0b000000000000000000000,
  3512:       0b000000000000000000000,
  3513:     },  //0xb0 ー
  3514:     {
  3515:       0b000000000000000000000,
  3516:       0b000000000000000000000,
  3517:       0b000000011111110000000,
  3518:       0b000000000000010000000,
  3519:       0b000000000000010000000,
  3520:       0b000000000100100000000,
  3521:       0b000000000111000000000,
  3522:       0b000000000100000000000,
  3523:       0b000000000100000000000,
  3524:       0b000000001000000000000,
  3525:       0b000000010000000000000,
  3526:       0b000000000000000000000,
  3527:       0b000000000000000000000,
  3528:     },  //0xb1 ア
  3529:     {
  3530:       0b000000000000000000000,
  3531:       0b000000000000000000000,
  3532:       0b000000000000010000000,
  3533:       0b000000000000010000000,
  3534:       0b000000000000100000000,
  3535:       0b000000000001000000000,
  3536:       0b000000000011000000000,
  3537:       0b000000000101000000000,
  3538:       0b000000001001000000000,
  3539:       0b000000010001000000000,
  3540:       0b000000000001000000000,
  3541:       0b000000000000000000000,
  3542:       0b000000000000000000000,
  3543:     },  //0xb2 イ
  3544:     {
  3545:       0b000000000000000000000,
  3546:       0b000000000000000000000,
  3547:       0b000000000010000000000,
  3548:       0b000000000010000000000,
  3549:       0b000000011111110000000,
  3550:       0b000000010000010000000,
  3551:       0b000000010000010000000,
  3552:       0b000000000000010000000,
  3553:       0b000000000000100000000,
  3554:       0b000000000001000000000,
  3555:       0b000000000110000000000,
  3556:       0b000000000000000000000,
  3557:       0b000000000000000000000,
  3558:     },  //0xb3 ウ
  3559:     {
  3560:       0b000000000000000000000,
  3561:       0b000000000000000000000,
  3562:       0b000000001111100000000,
  3563:       0b000000000010000000000,
  3564:       0b000000000010000000000,
  3565:       0b000000000010000000000,
  3566:       0b000000000010000000000,
  3567:       0b000000000010000000000,
  3568:       0b000000000010000000000,
  3569:       0b000000011111110000000,
  3570:       0b000000000000000000000,
  3571:       0b000000000000000000000,
  3572:       0b000000000000000000000,
  3573:     },  //0xb4 エ
  3574:     {
  3575:       0b000000000000000000000,
  3576:       0b000000000000000000000,
  3577:       0b000000000001000000000,
  3578:       0b000000000001000000000,
  3579:       0b000000011111110000000,
  3580:       0b000000000001000000000,
  3581:       0b000000000011000000000,
  3582:       0b000000000101000000000,
  3583:       0b000000001001000000000,
  3584:       0b000000010001000000000,
  3585:       0b000000000001000000000,
  3586:       0b000000000000000000000,
  3587:       0b000000000000000000000,
  3588:     },  //0xb5 オ
  3589:     {
  3590:       0b000000000000000000000,
  3591:       0b000000000000000000000,
  3592:       0b000000000010000000000,
  3593:       0b000000000010000000000,
  3594:       0b000000011111110000000,
  3595:       0b000000000010010000000,
  3596:       0b000000000100010000000,
  3597:       0b000000000100010000000,
  3598:       0b000000001000010000000,
  3599:       0b000000001000010000000,
  3600:       0b000000010001100000000,
  3601:       0b000000000000000000000,
  3602:       0b000000000000000000000,
  3603:     },  //0xb6 カ
  3604:     {
  3605:       0b000000000000000000000,
  3606:       0b000000000000000000000,
  3607:       0b000000000100100000000,
  3608:       0b000000000101000000000,
  3609:       0b000000011110010000000,
  3610:       0b000000000010100000000,
  3611:       0b000000000011000000000,
  3612:       0b000000011101000000000,
  3613:       0b000000000001000000000,
  3614:       0b000000000000100000000,
  3615:       0b000000000000100000000,
  3616:       0b000000000000000000000,
  3617:       0b000000000000000000000,
  3618:     },  //0xb7 キ
  3619:     {
  3620:       0b000000000000000000000,
  3621:       0b000000000000000000000,
  3622:       0b000000000010000000000,
  3623:       0b000000000011110000000,
  3624:       0b000000000100010000000,
  3625:       0b000000000100010000000,
  3626:       0b000000001000100000000,
  3627:       0b000000010000100000000,
  3628:       0b000000000001000000000,
  3629:       0b000000000010000000000,
  3630:       0b000000000100000000000,
  3631:       0b000000000000000000000,
  3632:       0b000000000000000000000,
  3633:     },  //0xb8 ク
  3634:     {
  3635:       0b000000000000000000000,
  3636:       0b000000000000000000000,
  3637:       0b000000000100000000000,
  3638:       0b000000000100000000000,
  3639:       0b000000000111110000000,
  3640:       0b000000001001000000000,
  3641:       0b000000010001000000000,
  3642:       0b000000000001000000000,
  3643:       0b000000000010000000000,
  3644:       0b000000000010000000000,
  3645:       0b000000000100000000000,
  3646:       0b000000000000000000000,
  3647:       0b000000000000000000000,
  3648:     },  //0xb9 ケ
  3649:     {
  3650:       0b000000000000000000000,
  3651:       0b000000000000000000000,
  3652:       0b000000011111110000000,
  3653:       0b000000000000010000000,
  3654:       0b000000000000010000000,
  3655:       0b000000000000010000000,
  3656:       0b000000000000010000000,
  3657:       0b000000000000010000000,
  3658:       0b000000000000010000000,
  3659:       0b000000011111110000000,
  3660:       0b000000000000010000000,
  3661:       0b000000000000000000000,
  3662:       0b000000000000000000000,
  3663:     },  //0xba コ
  3664:     {
  3665:       0b000000000000000000000,
  3666:       0b000000000000000000000,
  3667:       0b000000001000100000000,
  3668:       0b000000001000100000000,
  3669:       0b000000011111110000000,
  3670:       0b000000001000100000000,
  3671:       0b000000001000100000000,
  3672:       0b000000000000100000000,
  3673:       0b000000000000100000000,
  3674:       0b000000000001000000000,
  3675:       0b000000000110000000000,
  3676:       0b000000000000000000000,
  3677:       0b000000000000000000000,
  3678:     },  //0xbb サ
  3679:     {
  3680:       0b000000000000000000000,
  3681:       0b000000000000000000000,
  3682:       0b000000011000000000000,
  3683:       0b000000000100000000000,
  3684:       0b000000000000000000000,
  3685:       0b000000011000010000000,
  3686:       0b000000000100010000000,
  3687:       0b000000000000100000000,
  3688:       0b000000000001000000000,
  3689:       0b000000000010000000000,
  3690:       0b000000011100000000000,
  3691:       0b000000000000000000000,
  3692:       0b000000000000000000000,
  3693:     },  //0xbc シ
  3694:     {
  3695:       0b000000000000000000000,
  3696:       0b000000000000000000000,
  3697:       0b000000011111110000000,
  3698:       0b000000000000010000000,
  3699:       0b000000000000010000000,
  3700:       0b000000000000100000000,
  3701:       0b000000000001000000000,
  3702:       0b000000000010000000000,
  3703:       0b000000000101000000000,
  3704:       0b000000001000100000000,
  3705:       0b000000010000010000000,
  3706:       0b000000000000000000000,
  3707:       0b000000000000000000000,
  3708:     },  //0xbd ス
  3709:     {
  3710:       0b000000000000000000000,
  3711:       0b000000000000000000000,
  3712:       0b000000001000000000000,
  3713:       0b000000001000000000000,
  3714:       0b000000001011110000000,
  3715:       0b000000011100010000000,
  3716:       0b000000001000100000000,
  3717:       0b000000001000000000000,
  3718:       0b000000001000000000000,
  3719:       0b000000001000000000000,
  3720:       0b000000000111110000000,
  3721:       0b000000000000000000000,
  3722:       0b000000000000000000000,
  3723:     },  //0xbe セ
  3724:     {
  3725:       0b000000000000000000000,
  3726:       0b000000000000000000000,
  3727:       0b000000000000010000000,
  3728:       0b000000010000010000000,
  3729:       0b000000001000010000000,
  3730:       0b000000000100010000000,
  3731:       0b000000000000100000000,
  3732:       0b000000000000100000000,
  3733:       0b000000000001000000000,
  3734:       0b000000000010000000000,
  3735:       0b000000000100000000000,
  3736:       0b000000000000000000000,
  3737:       0b000000000000000000000,
  3738:     },  //0xbf ソ
  3739:     {
  3740:       0b000000000000000000000,
  3741:       0b000000000000000000000,
  3742:       0b000000000010000000000,
  3743:       0b000000000011110000000,
  3744:       0b000000000100010000000,
  3745:       0b000000000110010000000,
  3746:       0b000000001001100000000,
  3747:       0b000000010000100000000,
  3748:       0b000000000001010000000,
  3749:       0b000000000010000000000,
  3750:       0b000000000100000000000,
  3751:       0b000000000000000000000,
  3752:       0b000000000000000000000,
  3753:     },  //0xc0 タ
  3754:     {
  3755:       0b000000000000000000000,
  3756:       0b000000000000000000000,
  3757:       0b000000000000100000000,
  3758:       0b000000000011000000000,
  3759:       0b000000001110000000000,
  3760:       0b000000000001000000000,
  3761:       0b000000011111110000000,
  3762:       0b000000000001000000000,
  3763:       0b000000000001000000000,
  3764:       0b000000000010000000000,
  3765:       0b000000000100000000000,
  3766:       0b000000000000000000000,
  3767:       0b000000000000000000000,
  3768:     },  //0xc1 チ
  3769:     {
  3770:       0b000000000000000000000,
  3771:       0b000000000000000000000,
  3772:       0b000000000100010000000,
  3773:       0b000000000010010000000,
  3774:       0b000000010010010000000,
  3775:       0b000000001000010000000,
  3776:       0b000000001000100000000,
  3777:       0b000000000000100000000,
  3778:       0b000000000001000000000,
  3779:       0b000000000010000000000,
  3780:       0b000000000100000000000,
  3781:       0b000000000000000000000,
  3782:       0b000000000000000000000,
  3783:     },  //0xc2 ツ
  3784:     {
  3785:       0b000000000000000000000,
  3786:       0b000000000000000000000,
  3787:       0b000000001111100000000,
  3788:       0b000000000000000000000,
  3789:       0b000000000000000000000,
  3790:       0b000000011111110000000,
  3791:       0b000000000010000000000,
  3792:       0b000000000010000000000,
  3793:       0b000000000010000000000,
  3794:       0b000000000100000000000,
  3795:       0b000000001000000000000,
  3796:       0b000000000000000000000,
  3797:       0b000000000000000000000,
  3798:     },  //0xc3 テ
  3799:     {
  3800:       0b000000000000000000000,
  3801:       0b000000000000000000000,
  3802:       0b000000001000000000000,
  3803:       0b000000001000000000000,
  3804:       0b000000001000000000000,
  3805:       0b000000001000000000000,
  3806:       0b000000001110000000000,
  3807:       0b000000001001000000000,
  3808:       0b000000001000100000000,
  3809:       0b000000001000000000000,
  3810:       0b000000001000000000000,
  3811:       0b000000000000000000000,
  3812:       0b000000000000000000000,
  3813:     },  //0xc4 ト
  3814:     {
  3815:       0b000000000000000000000,
  3816:       0b000000000000000000000,
  3817:       0b000000000010000000000,
  3818:       0b000000000010000000000,
  3819:       0b000000011111110000000,
  3820:       0b000000000010000000000,
  3821:       0b000000000010000000000,
  3822:       0b000000000010000000000,
  3823:       0b000000000010000000000,
  3824:       0b000000000100000000000,
  3825:       0b000000001000000000000,
  3826:       0b000000000000000000000,
  3827:       0b000000000000000000000,
  3828:     },  //0xc5 ナ
  3829:     {
  3830:       0b000000000000000000000,
  3831:       0b000000000000000000000,
  3832:       0b000000001111100000000,
  3833:       0b000000000000000000000,
  3834:       0b000000000000000000000,
  3835:       0b000000000000000000000,
  3836:       0b000000000000000000000,
  3837:       0b000000000000000000000,
  3838:       0b000000000000000000000,
  3839:       0b000000011111110000000,
  3840:       0b000000000000000000000,
  3841:       0b000000000000000000000,
  3842:       0b000000000000000000000,
  3843:     },  //0xc6 ニ
  3844:     {
  3845:       0b000000000000000000000,
  3846:       0b000000000000000000000,
  3847:       0b000000011111110000000,
  3848:       0b000000000000010000000,
  3849:       0b000000000000010000000,
  3850:       0b000000001000100000000,
  3851:       0b000000000101000000000,
  3852:       0b000000000010000000000,
  3853:       0b000000000101000000000,
  3854:       0b000000001000100000000,
  3855:       0b000000010000000000000,
  3856:       0b000000000000000000000,
  3857:       0b000000000000000000000,
  3858:     },  //0xc7 ヌ
  3859:     {
  3860:       0b000000000000000000000,
  3861:       0b000000000000000000000,
  3862:       0b000000000010000000000,
  3863:       0b000000011111110000000,
  3864:       0b000000000000010000000,
  3865:       0b000000000000100000000,
  3866:       0b000000000001000000000,
  3867:       0b000000000010000000000,
  3868:       0b000000000110100000000,
  3869:       0b000000011010010000000,
  3870:       0b000000000010000000000,
  3871:       0b000000000000000000000,
  3872:       0b000000000000000000000,
  3873:     },  //0xc8 ネ
  3874:     {
  3875:       0b000000000000000000000,
  3876:       0b000000000000000000000,
  3877:       0b000000000000010000000,
  3878:       0b000000000000010000000,
  3879:       0b000000000000010000000,
  3880:       0b000000000000100000000,
  3881:       0b000000000000100000000,
  3882:       0b000000000001000000000,
  3883:       0b000000000010000000000,
  3884:       0b000000000100000000000,
  3885:       0b000000011000000000000,
  3886:       0b000000000000000000000,
  3887:       0b000000000000000000000,
  3888:     },  //0xc9 ノ
  3889:     {
  3890:       0b000000000000000000000,
  3891:       0b000000000000000000000,
  3892:       0b000000000010000000000,
  3893:       0b000000000001000000000,
  3894:       0b000000001001000000000,
  3895:       0b000000001000100000000,
  3896:       0b000000001000100000000,
  3897:       0b000000001000100000000,
  3898:       0b000000010000010000000,
  3899:       0b000000010000010000000,
  3900:       0b000000010000010000000,
  3901:       0b000000000000000000000,
  3902:       0b000000000000000000000,
  3903:     },  //0xca ハ
  3904:     {
  3905:       0b000000000000000000000,
  3906:       0b000000000000000000000,
  3907:       0b000000010000000000000,
  3908:       0b000000010000000000000,
  3909:       0b000000010000110000000,
  3910:       0b000000011111000000000,
  3911:       0b000000010000000000000,
  3912:       0b000000010000000000000,
  3913:       0b000000010000000000000,
  3914:       0b000000010000000000000,
  3915:       0b000000001111110000000,
  3916:       0b000000000000000000000,
  3917:       0b000000000000000000000,
  3918:     },  //0xcb ヒ
  3919:     {
  3920:       0b000000000000000000000,
  3921:       0b000000000000000000000,
  3922:       0b000000011111110000000,
  3923:       0b000000000000010000000,
  3924:       0b000000000000010000000,
  3925:       0b000000000000010000000,
  3926:       0b000000000000010000000,
  3927:       0b000000000000010000000,
  3928:       0b000000000000100000000,
  3929:       0b000000000001000000000,
  3930:       0b000000000110000000000,
  3931:       0b000000000000000000000,
  3932:       0b000000000000000000000,
  3933:     },  //0xcc フ
  3934:     {
  3935:       0b000000000000000000000,
  3936:       0b000000000000000000000,
  3937:       0b000000000100000000000,
  3938:       0b000000001010000000000,
  3939:       0b000000001001000000000,
  3940:       0b000000010001000000000,
  3941:       0b000000010000100000000,
  3942:       0b000000000000100000000,
  3943:       0b000000000000010000000,
  3944:       0b000000000000010000000,
  3945:       0b000000000000010000000,
  3946:       0b000000000000000000000,
  3947:       0b000000000000000000000,
  3948:     },  //0xcd ヘ
  3949:     {
  3950:       0b000000000000000000000,
  3951:       0b000000000000000000000,
  3952:       0b000000000010000000000,
  3953:       0b000000000010000000000,
  3954:       0b000000011111110000000,
  3955:       0b000000000010000000000,
  3956:       0b000000000010000000000,
  3957:       0b000000001010100000000,
  3958:       0b000000010010010000000,
  3959:       0b000000010010010000000,
  3960:       0b000000000010000000000,
  3961:       0b000000000000000000000,
  3962:       0b000000000000000000000,
  3963:     },  //0xce ホ
  3964:     {
  3965:       0b000000000000000000000,
  3966:       0b000000000000000000000,
  3967:       0b000000011111110000000,
  3968:       0b000000000000010000000,
  3969:       0b000000000000010000000,
  3970:       0b000000000000100000000,
  3971:       0b000000010001000000000,
  3972:       0b000000001010000000000,
  3973:       0b000000000100000000000,
  3974:       0b000000000010000000000,
  3975:       0b000000000001000000000,
  3976:       0b000000000000000000000,
  3977:       0b000000000000000000000,
  3978:     },  //0xcf マ
  3979:     {
  3980:       0b000000000000000000000,
  3981:       0b000000000000000000000,
  3982:       0b000000001110000000000,
  3983:       0b000000000001100000000,
  3984:       0b000000000000010000000,
  3985:       0b000000001110000000000,
  3986:       0b000000000001100000000,
  3987:       0b000000000000010000000,
  3988:       0b000000011110000000000,
  3989:       0b000000000001100000000,
  3990:       0b000000000000010000000,
  3991:       0b000000000000000000000,
  3992:       0b000000000000000000000,
  3993:     },  //0xd0 ミ
  3994:     {
  3995:       0b000000000000000000000,
  3996:       0b000000000000000000000,
  3997:       0b000000000010000000000,
  3998:       0b000000000010000000000,
  3999:       0b000000000010000000000,
  4000:       0b000000000100000000000,
  4001:       0b000000000100000000000,
  4002:       0b000000001000100000000,
  4003:       0b000000001000100000000,
  4004:       0b000000010011010000000,
  4005:       0b000000011100010000000,
  4006:       0b000000000000000000000,
  4007:       0b000000000000000000000,
  4008:     },  //0xd1 ム
  4009:     {
  4010:       0b000000000000000000000,
  4011:       0b000000000000000000000,
  4012:       0b000000000000100000000,
  4013:       0b000000000000100000000,
  4014:       0b000000000001000000000,
  4015:       0b000000011001000000000,
  4016:       0b000000000110000000000,
  4017:       0b000000000011000000000,
  4018:       0b000000000100100000000,
  4019:       0b000000001000010000000,
  4020:       0b000000010000000000000,
  4021:       0b000000000000000000000,
  4022:       0b000000000000000000000,
  4023:     },  //0xd2 メ
  4024:     {
  4025:       0b000000000000000000000,
  4026:       0b000000000000000000000,
  4027:       0b000000001111100000000,
  4028:       0b000000000010000000000,
  4029:       0b000000000010000000000,
  4030:       0b000000011111110000000,
  4031:       0b000000000010000000000,
  4032:       0b000000000010000000000,
  4033:       0b000000000010000000000,
  4034:       0b000000000010000000000,
  4035:       0b000000000001110000000,
  4036:       0b000000000000000000000,
  4037:       0b000000000000000000000,
  4038:     },  //0xd3 モ
  4039:     {
  4040:       0b000000000000000000000,
  4041:       0b000000000000000000000,
  4042:       0b000000001000000000000,
  4043:       0b000000001001110000000,
  4044:       0b000000000110010000000,
  4045:       0b000000011100100000000,
  4046:       0b000000000100000000000,
  4047:       0b000000000010000000000,
  4048:       0b000000000010000000000,
  4049:       0b000000000001000000000,
  4050:       0b000000000000100000000,
  4051:       0b000000000000000000000,
  4052:       0b000000000000000000000,
  4053:     },  //0xd4 ヤ
  4054:     {
  4055:       0b000000000000000000000,
  4056:       0b000000000000000000000,
  4057:       0b000000001111100000000,
  4058:       0b000000000000100000000,
  4059:       0b000000000000100000000,
  4060:       0b000000000001000000000,
  4061:       0b000000000001000000000,
  4062:       0b000000000010000000000,
  4063:       0b000000000010000000000,
  4064:       0b000000011111110000000,
  4065:       0b000000000000000000000,
  4066:       0b000000000000000000000,
  4067:       0b000000000000000000000,
  4068:     },  //0xd5 ユ
  4069:     {
  4070:       0b000000000000000000000,
  4071:       0b000000000000000000000,
  4072:       0b000000011111110000000,
  4073:       0b000000000000010000000,
  4074:       0b000000000000010000000,
  4075:       0b000000011111110000000,
  4076:       0b000000000000010000000,
  4077:       0b000000000000010000000,
  4078:       0b000000000000010000000,
  4079:       0b000000011111110000000,
  4080:       0b000000000000010000000,
  4081:       0b000000000000000000000,
  4082:       0b000000000000000000000,
  4083:     },  //0xd6 ヨ
  4084:     {
  4085:       0b000000000000000000000,
  4086:       0b000000000000000000000,
  4087:       0b000000011111110000000,
  4088:       0b000000000000000000000,
  4089:       0b000000011111110000000,
  4090:       0b000000000000010000000,
  4091:       0b000000000000010000000,
  4092:       0b000000000000010000000,
  4093:       0b000000000000100000000,
  4094:       0b000000000001000000000,
  4095:       0b000000000110000000000,
  4096:       0b000000000000000000000,
  4097:       0b000000000000000000000,
  4098:     },  //0xd7 ラ
  4099:     {
  4100:       0b000000000000000000000,
  4101:       0b000000000000000000000,
  4102:       0b000000010000010000000,
  4103:       0b000000010000010000000,
  4104:       0b000000010000010000000,
  4105:       0b000000010000010000000,
  4106:       0b000000000000010000000,
  4107:       0b000000000000100000000,
  4108:       0b000000000000100000000,
  4109:       0b000000000001000000000,
  4110:       0b000000000110000000000,
  4111:       0b000000000000000000000,
  4112:       0b000000000000000000000,
  4113:     },  //0xd8 リ
  4114:     {
  4115:       0b000000000000000000000,
  4116:       0b000000000000000000000,
  4117:       0b000000001010000000000,
  4118:       0b000000001010000000000,
  4119:       0b000000001010000000000,
  4120:       0b000000001010000000000,
  4121:       0b000000001010000000000,
  4122:       0b000000001010010000000,
  4123:       0b000000001010010000000,
  4124:       0b000000010010100000000,
  4125:       0b000000010011000000000,
  4126:       0b000000000000000000000,
  4127:       0b000000000000000000000,
  4128:     },  //0xd9 ル
  4129:     {
  4130:       0b000000000000000000000,
  4131:       0b000000000000000000000,
  4132:       0b000000010000000000000,
  4133:       0b000000010000000000000,
  4134:       0b000000010000000000000,
  4135:       0b000000010000000000000,
  4136:       0b000000010000010000000,
  4137:       0b000000010000010000000,
  4138:       0b000000010000100000000,
  4139:       0b000000010011000000000,
  4140:       0b000000011100000000000,
  4141:       0b000000000000000000000,
  4142:       0b000000000000000000000,
  4143:     },  //0xda レ
  4144:     {
  4145:       0b000000000000000000000,
  4146:       0b000000000000000000000,
  4147:       0b000000011111110000000,
  4148:       0b000000010000010000000,
  4149:       0b000000010000010000000,
  4150:       0b000000010000010000000,
  4151:       0b000000010000010000000,
  4152:       0b000000010000010000000,
  4153:       0b000000010000010000000,
  4154:       0b000000011111110000000,
  4155:       0b000000010000010000000,
  4156:       0b000000000000000000000,
  4157:       0b000000000000000000000,
  4158:     },  //0xdb ロ
  4159:     {
  4160:       0b000000000000000000000,
  4161:       0b000000000000000000000,
  4162:       0b000000011111110000000,
  4163:       0b000000010000010000000,
  4164:       0b000000010000010000000,
  4165:       0b000000010000010000000,
  4166:       0b000000000000010000000,
  4167:       0b000000000000010000000,
  4168:       0b000000000000100000000,
  4169:       0b000000000001000000000,
  4170:       0b000000000110000000000,
  4171:       0b000000000000000000000,
  4172:       0b000000000000000000000,
  4173:     },  //0xdc ワ
  4174:     {
  4175:       0b000000000000000000000,
  4176:       0b000000000000000000000,
  4177:       0b000000010000000000000,
  4178:       0b000000001000000000000,
  4179:       0b000000000100000000000,
  4180:       0b000000000000000000000,
  4181:       0b000000000000010000000,
  4182:       0b000000000000100000000,
  4183:       0b000000000001000000000,
  4184:       0b000000000110000000000,
  4185:       0b000000011000000000000,
  4186:       0b000000000000000000000,
  4187:       0b000000000000000000000,
  4188:     },  //0xdd ン
  4189:     {
  4190:       0b000000000000000000000,
  4191:       0b000000000000000000000,
  4192:       0b000000010010000000000,
  4193:       0b000000001001000000000,
  4194:       0b000000000100100000000,
  4195:       0b000000000000000000000,
  4196:       0b000000000000000000000,
  4197:       0b000000000000000000000,
  4198:       0b000000000000000000000,
  4199:       0b000000000000000000000,
  4200:       0b000000000000000000000,
  4201:       0b000000000000000000000,
  4202:       0b000000000000000000000,
  4203:     },  //0xde ゛
  4204:     {
  4205:       0b000000000000000000000,
  4206:       0b000000000000000000000,
  4207:       0b000000000110000000000,
  4208:       0b000000001001000000000,
  4209:       0b000000001001000000000,
  4210:       0b000000000110000000000,
  4211:       0b000000000000000000000,
  4212:       0b000000000000000000000,
  4213:       0b000000000000000000000,
  4214:       0b000000000000000000000,
  4215:       0b000000000000000000000,
  4216:       0b000000000000000000000,
  4217:       0b000000000000000000000,
  4218:     },  //0xdf ゜
  4219:     {
  4220:       0b000000000000000000000,
  4221:       0b000000000000000000000,
  4222:       0b000000000100000000000,
  4223:       0b000000000100000000000,
  4224:       0b000000011111110000000,
  4225:       0b000000000100000000000,
  4226:       0b000000001001110000000,
  4227:       0b000000001000010000000,
  4228:       0b000000001000000000000,
  4229:       0b000000010010000000000,
  4230:       0b000000010001110000000,
  4231:       0b000000000000000000000,
  4232:       0b000000000000000000000,
  4233:     },  //0xe0 た
  4234:     {
  4235:       0b000000000000000000000,
  4236:       0b000000000000000000000,
  4237:       0b000000000100000000000,
  4238:       0b000000111111111000000,
  4239:       0b000000001000000000000,
  4240:       0b000000001011100000000,
  4241:       0b000000011100010000000,
  4242:       0b000000010000001000000,
  4243:       0b000000000000001000000,
  4244:       0b000000000000010000000,
  4245:       0b000000000111100000000,
  4246:       0b000000000000000000000,
  4247:       0b000000000000000000000,
  4248:     },  //0xe1 ち
  4249:     {
  4250:       0b000000000000000000000,
  4251:       0b000000000000000000000,
  4252:       0b000000000000000000000,
  4253:       0b000000001111100000000,
  4254:       0b000000110000010000000,
  4255:       0b000000000000001000000,
  4256:       0b000000000000001000000,
  4257:       0b000000000000010000000,
  4258:       0b000000000001100000000,
  4259:       0b000000000110000000000,
  4260:       0b000000000000000000000,
  4261:       0b000000000000000000000,
  4262:       0b000000000000000000000,
  4263:     },  //0xe2 つ
  4264:     {
  4265:       0b000000000000000000000,
  4266:       0b000000000000000000000,
  4267:       0b000000111111110000000,
  4268:       0b000000000001100000000,
  4269:       0b000000000010000000000,
  4270:       0b000000000100000000000,
  4271:       0b000000001000000000000,
  4272:       0b000000001000000000000,
  4273:       0b000000001000000000000,
  4274:       0b000000000100000000000,
  4275:       0b000000000011100000000,
  4276:       0b000000000000000000000,
  4277:       0b000000000000000000000,
  4278:     },  //0xe3 て
  4279:     {
  4280:       0b000000000000000000000,
  4281:       0b000000000000000000000,
  4282:       0b000000001000000000000,
  4283:       0b000000001000000000000,
  4284:       0b000000001001110000000,
  4285:       0b000000000110000000000,
  4286:       0b000000001000000000000,
  4287:       0b000000010000000000000,
  4288:       0b000000010000000000000,
  4289:       0b000000010000000000000,
  4290:       0b000000001111110000000,
  4291:       0b000000000000000000000,
  4292:       0b000000000000000000000,
  4293:     },  //0xe4 と
  4294:     {
  4295:       0b000000000000000000000,
  4296:       0b000000000000000000000,
  4297:       0b000000001001000000000,
  4298:       0b000000001000100000000,
  4299:       0b000000111100010000000,
  4300:       0b000000010001010000000,
  4301:       0b000000010001000000000,
  4302:       0b000000100111000000000,
  4303:       0b000000001001100000000,
  4304:       0b000000001001010000000,
  4305:       0b000000000110000000000,
  4306:       0b000000000000000000000,
  4307:       0b000000000000000000000,
  4308:     },  //0xe5 な
  4309:     {
  4310:       0b000000000000000000000,
  4311:       0b000000000000000000000,
  4312:       0b000000010011100000000,
  4313:       0b000000010000010000000,
  4314:       0b000000010000100000000,
  4315:       0b000000010000000000000,
  4316:       0b000000010000000000000,
  4317:       0b000000010100000000000,
  4318:       0b000000010100000000000,
  4319:       0b000000010011110000000,
  4320:       0b000000000000000000000,
  4321:       0b000000000000000000000,
  4322:       0b000000000000000000000,
  4323:     },  //0xe6 に
  4324:     {
  4325:       0b000000000000000000000,
  4326:       0b000000000000000000000,
  4327:       0b000000000001000000000,
  4328:       0b000000010001000000000,
  4329:       0b000000010111110000000,
  4330:       0b000000001010001000000,
  4331:       0b000000011010001000000,
  4332:       0b000000101010001000000,
  4333:       0b000000100100111000000,
  4334:       0b000000100101001100000,
  4335:       0b000000011000110000000,
  4336:       0b000000000000000000000,
  4337:       0b000000000000000000000,
  4338:     },  //0xe7 ぬ
  4339:     {
  4340:       0b000000000000000000000,
  4341:       0b000000000000000000000,
  4342:       0b000000001000000000000,
  4343:       0b000000111011100000000,
  4344:       0b000000001100010000000,
  4345:       0b000000001000010000000,
  4346:       0b000000011000010000000,
  4347:       0b000000011001110000000,
  4348:       0b000000101010011000000,
  4349:       0b000000101010010000000,
  4350:       0b000000001001100000000,
  4351:       0b000000000000000000000,
  4352:       0b000000000000000000000,
  4353:     },  //0xe8 ね
  4354:     {
  4355:       0b000000000000000000000,
  4356:       0b000000000000000000000,
  4357:       0b000000000000000000000,
  4358:       0b000000001111100000000,
  4359:       0b000000010010010000000,
  4360:       0b000000100010001000000,
  4361:       0b000000100010001000000,
  4362:       0b000000100010001000000,
  4363:       0b000000100100001000000,
  4364:       0b000000011000010000000,
  4365:       0b000000000000000000000,
  4366:       0b000000000000000000000,
  4367:       0b000000000000000000000,
  4368:     },  //0xe9 の
  4369:     {
  4370:       0b000000000000000000000,
  4371:       0b000000000000000000000,
  4372:       0b000000100001000000000,
  4373:       0b000000100001000000000,
  4374:       0b000000101111110000000,
  4375:       0b000000100001000000000,
  4376:       0b000000100001000000000,
  4377:       0b000000100111000000000,
  4378:       0b000000101001100000000,
  4379:       0b000000101001010000000,
  4380:       0b000000100110000000000,
  4381:       0b000000000000000000000,
  4382:       0b000000000000000000000,
  4383:     },  //0xea は
  4384:     {
  4385:       0b000000000000000000000,
  4386:       0b000000000000000000000,
  4387:       0b000000111001000000000,
  4388:       0b000000001001100000000,
  4389:       0b000000010001010000000,
  4390:       0b000000100001000000000,
  4391:       0b000000100001000000000,
  4392:       0b000000100001000000000,
  4393:       0b000000100010000000000,
  4394:       0b000000011100000000000,
  4395:       0b000000000000000000000,
  4396:       0b000000000000000000000,
  4397:       0b000000000000000000000,
  4398:     },  //0xeb ひ
  4399:     {
  4400:       0b000000000000000000000,
  4401:       0b000000000000000000000,
  4402:       0b000000011111000000000,
  4403:       0b000000000001000000000,
  4404:       0b000000000010000000000,
  4405:       0b000000100100010000000,
  4406:       0b000000100010010000000,
  4407:       0b000001000001001000000,
  4408:       0b000001000001001000000,
  4409:       0b000001010001001000000,
  4410:       0b000000001110000000000,
  4411:       0b000000000000000000000,
  4412:       0b000000000000000000000,
  4413:     },  //0xec ふ
  4414:     {
  4415:       0b000000000000000000000,
  4416:       0b000000000000000000000,
  4417:       0b000000000000000000000,
  4418:       0b000000000000000000000,
  4419:       0b000000000110000000000,
  4420:       0b000000001001000000000,
  4421:       0b000000010000100000000,
  4422:       0b000000100000010000000,
  4423:       0b000000000000001000000,
  4424:       0b000000000000000000000,
  4425:       0b000000000000000000000,
  4426:       0b000000000000000000000,
  4427:       0b000000000000000000000,
  4428:     },  //0xed へ
  4429:     {
  4430:       0b000000000000000000000,
  4431:       0b000000000000000000000,
  4432:       0b000000101111110000000,
  4433:       0b000000100001000000000,
  4434:       0b000000101111110000000,
  4435:       0b000000100001000000000,
  4436:       0b000000100001000000000,
  4437:       0b000000100111100000000,
  4438:       0b000000101001010000000,
  4439:       0b000000101001000000000,
  4440:       0b000000100110000000000,
  4441:       0b000000000000000000000,
  4442:       0b000000000000000000000,
  4443:     },  //0xee ほ
  4444:     {
  4445:       0b000000000000000000000,
  4446:       0b000000000000000000000,
  4447:       0b000000000010000000000,
  4448:       0b000000011111110000000,
  4449:       0b000000000010000000000,
  4450:       0b000000011111110000000,
  4451:       0b000000000010000000000,
  4452:       0b000000001111000000000,
  4453:       0b000000010010100000000,
  4454:       0b000000010010010000000,
  4455:       0b000000001100000000000,
  4456:       0b000000000000000000000,
  4457:       0b000000000000000000000,
  4458:     },  //0xef ま
  4459:     {
  4460:       0b000000000000000000000,
  4461:       0b000000000000000000000,
  4462:       0b000000011110000000000,
  4463:       0b000000000010000000000,
  4464:       0b000000000010010000000,
  4465:       0b000000001111110000000,
  4466:       0b000000010100011000000,
  4467:       0b000000100100010000000,
  4468:       0b000000100100010000000,
  4469:       0b000000011001100000000,
  4470:       0b000000000000000000000,
  4471:       0b000000000000000000000,
  4472:       0b000000000000000000000,
  4473:     },  //0xf0 み
  4474:     {
  4475:       0b000000000000000000000,
  4476:       0b000000000000000000000,
  4477:       0b000000000100000000000,
  4478:       0b000000111111110000000,
  4479:       0b000000000100000000000,
  4480:       0b000000000100110000000,
  4481:       0b000000011100001000000,
  4482:       0b000000100100000000000,
  4483:       0b000000100100010000000,
  4484:       0b000000011100010000000,
  4485:       0b000000000011100000000,
  4486:       0b000000000000000000000,
  4487:       0b000000000000000000000,
  4488:     },  //0xf1 む
  4489:     {
  4490:       0b000000000000000000000,
  4491:       0b000000000000000000000,
  4492:       0b000000000001000000000,
  4493:       0b000000010001000000000,
  4494:       0b000000010111100000000,
  4495:       0b000000001010010000000,
  4496:       0b000000011010001000000,
  4497:       0b000000101010001000000,
  4498:       0b000000100100001000000,
  4499:       0b000000100100001000000,
  4500:       0b000000011000110000000,
  4501:       0b000000000000000000000,
  4502:       0b000000000000000000000,
  4503:     },  //0xf2 め
  4504:     {
  4505:       0b000000000000000000000,
  4506:       0b000000000000000000000,
  4507:       0b000000000100000000000,
  4508:       0b000000011111100000000,
  4509:       0b000000000100000000000,
  4510:       0b000000011111100000000,
  4511:       0b000000000100000000000,
  4512:       0b000000000100000000000,
  4513:       0b000000000100010000000,
  4514:       0b000000000100010000000,
  4515:       0b000000000011100000000,
  4516:       0b000000000000000000000,
  4517:       0b000000000000000000000,
  4518:     },  //0xf3 も
  4519:     {
  4520:       0b000000000000000000000,
  4521:       0b000000000000000000000,
  4522:       0b000000000010000000000,
  4523:       0b000000010010000000000,
  4524:       0b000000010011110000000,
  4525:       0b000000001101001000000,
  4526:       0b000000011001001000000,
  4527:       0b000000101000010000000,
  4528:       0b000000000100000000000,
  4529:       0b000000000100000000000,
  4530:       0b000000000010000000000,
  4531:       0b000000000001000000000,
  4532:       0b000000000000000000000,
  4533:     },  //0xf4 や
  4534:     {
  4535:       0b000000000000000000000,
  4536:       0b000000000000000000000,
  4537:       0b000000000010000000000,
  4538:       0b000000100001000000000,
  4539:       0b000000100111110000000,
  4540:       0b000000101001001000000,
  4541:       0b000000010001001000000,
  4542:       0b000000010001001000000,
  4543:       0b000000010010001000000,
  4544:       0b000000000010010000000,
  4545:       0b000000000100000000000,
  4546:       0b000000000000000000000,
  4547:       0b000000000000000000000,
  4548:     },  //0xf5 ゆ
  4549:     {
  4550:       0b000000000000000000000,
  4551:       0b000000000000000000000,
  4552:       0b000000000010000000000,
  4553:       0b000000000010000000000,
  4554:       0b000000000011110000000,
  4555:       0b000000000010000000000,
  4556:       0b000000000010000000000,
  4557:       0b000000001111000000000,
  4558:       0b000000010010100000000,
  4559:       0b000000010010010000000,
  4560:       0b000000001100000000000,
  4561:       0b000000000000000000000,
  4562:       0b000000000000000000000,
  4563:     },  //0xf6 よ
  4564:     {
  4565:       0b000000000000000000000,
  4566:       0b000000000000000000000,
  4567:       0b000000011000000000000,
  4568:       0b000000000110000000000,
  4569:       0b000000000000000000000,
  4570:       0b000000010000000000000,
  4571:       0b000000010111100000000,
  4572:       0b000000011000010000000,
  4573:       0b000000010000010000000,
  4574:       0b000000000000100000000,
  4575:       0b000000000111000000000,
  4576:       0b000000000000000000000,
  4577:       0b000000000000000000000,
  4578:     },  //0xf7 ら
  4579:     {
  4580:       0b000000000000000000000,
  4581:       0b000000000000000000000,
  4582:       0b000000010011100000000,
  4583:       0b000000010100010000000,
  4584:       0b000000011000010000000,
  4585:       0b000000011000010000000,
  4586:       0b000000010000010000000,
  4587:       0b000000010000100000000,
  4588:       0b000000000000100000000,
  4589:       0b000000000001000000000,
  4590:       0b000000000110000000000,
  4591:       0b000000000000000000000,
  4592:       0b000000000000000000000,
  4593:     },  //0xf8 り
  4594:     {
  4595:       0b000000000000000000000,
  4596:       0b000000000000000000000,
  4597:       0b000000001111100000000,
  4598:       0b000000000001000000000,
  4599:       0b000000000010000000000,
  4600:       0b000000000100000000000,
  4601:       0b000000001111100000000,
  4602:       0b000000010000010000000,
  4603:       0b000000000111010000000,
  4604:       0b000000001000110000000,
  4605:       0b000000000111100000000,
  4606:       0b000000000000000000000,
  4607:       0b000000000000000000000,
  4608:     },  //0xf9 る
  4609:     {
  4610:       0b000000000000000000000,
  4611:       0b000000000000000000000,
  4612:       0b000000001000000000000,
  4613:       0b000000111011100000000,
  4614:       0b000000001100010000000,
  4615:       0b000000001000010000000,
  4616:       0b000000011000010000000,
  4617:       0b000000011000100000000,
  4618:       0b000000101000100000000,
  4619:       0b000000101001000000000,
  4620:       0b000000001001110000000,
  4621:       0b000000000000000000000,
  4622:       0b000000000000000000000,
  4623:     },  //0xfa れ
  4624:     {
  4625:       0b000000000000000000000,
  4626:       0b000000000000000000000,
  4627:       0b000000001111100000000,
  4628:       0b000000000001000000000,
  4629:       0b000000000010000000000,
  4630:       0b000000000100000000000,
  4631:       0b000000001111100000000,
  4632:       0b000000010000010000000,
  4633:       0b000000000000010000000,
  4634:       0b000000000000100000000,
  4635:       0b000000000111000000000,
  4636:       0b000000000000000000000,
  4637:       0b000000000000000000000,
  4638:     },  //0xfb ろ
  4639:     {
  4640:       0b000000000000000000000,
  4641:       0b000000000000000000000,
  4642:       0b000000001000000000000,
  4643:       0b000000001000000000000,
  4644:       0b000000111011100000000,
  4645:       0b000000001100010000000,
  4646:       0b000000011000010000000,
  4647:       0b000000011000010000000,
  4648:       0b000000111000010000000,
  4649:       0b000000101000100000000,
  4650:       0b000000001001000000000,
  4651:       0b000000000000000000000,
  4652:       0b000000000000000000000,
  4653:     },  //0xfc わ
  4654:     {
  4655:       0b000000000000000000000,
  4656:       0b000000000000000000000,
  4657:       0b000000000100000000000,
  4658:       0b000000000100000000000,
  4659:       0b000000000100000000000,
  4660:       0b000000001000000000000,
  4661:       0b000000001000000000000,
  4662:       0b000000011100000000000,
  4663:       0b000000010010010000000,
  4664:       0b000000100010010000000,
  4665:       0b000000100001100000000,
  4666:       0b000000000000000000000,
  4667:       0b000000000000000000000,
  4668:     },  //0xfd ん
  4669:     null,  //0xfe
  4670:     null,  //0xff
  4671:   };
  4672: 
  4673:   //LEDキーの番号→LEDキーに表示する文字のパターン
  4674:   public static final int[][] KBD_LED_LETTER = {
  4675:     {
  4676:       0b000000000000000000000,
  4677:       0b000000000000000000000,
  4678:       0b000001001000001001000,
  4679:       0b000001000100001000100,
  4680:       0b001111100100111100010,
  4681:       0b000010010010010001010,
  4682:       0b000010010010010001000,
  4683:       0b000100010000100111000,
  4684:       0b000100010000001001100,
  4685:       0b001000010000001001010,
  4686:       0b001001100000000110000,
  4687:       0b000000000000000000000,
  4688:       0b000000000000000000000,
  4689:     },  //0x5a  0 かな
  4690:     {
  4691:       0b000000000000000000000,
  4692:       0b000000000000000000000,
  4693:       0b000000000000000000000,
  4694:       0b001111100000011111000,
  4695:       0b001000100000000001000,
  4696:       0b001000100000000001000,
  4697:       0b001000101111010010000,
  4698:       0b001000100000001100000,
  4699:       0b001000100000000100000,
  4700:       0b001111100000000010000,
  4701:       0b000000000000000000000,
  4702:       0b000000000000000000000,
  4703:       0b000000000000000000000,
  4704:     },  //0x5b  1 ローマ字
  4705:     {
  4706:       0b000000000000000000000,
  4707:       0b000000000000000000000,
  4708:       0b000000000000000010100,
  4709:       0b001111100000001010100,
  4710:       0b000000100000001000000,
  4711:       0b000000100000001000000,
  4712:       0b000000101111001110000,
  4713:       0b000000100000001001000,
  4714:       0b000000100000001000000,
  4715:       0b001111100000001000000,
  4716:       0b000000000000000000000,
  4717:       0b000000000000000000000,
  4718:       0b000000000000000000000,
  4719:     },  //0x5c  2 コード入力
  4720:     {
  4721:       0b000000000000000000000,
  4722:       0b000000000000000000000,
  4723:       0b000000000000000000000,
  4724:       0b001100011001110001100,
  4725:       0b010010100101001010010,
  4726:       0b010000100101001010000,
  4727:       0b010000111101110001100,
  4728:       0b010000100101000000010,
  4729:       0b010010100101000010010,
  4730:       0b001100100101000001100,
  4731:       0b000000000000000000000,
  4732:       0b000000000000000000000,
  4733:       0b000000000000000000000,
  4734:     },  //0x5d  3 CAPS
  4735:     {
  4736:       0b000000000000000000000,
  4737:       0b000000000000000000000,
  4738:       0b000000000000000000000,
  4739:       0b000111001000100111000,
  4740:       0b000010001000101000100,
  4741:       0b000010001100101000000,
  4742:       0b000010001010100111000,
  4743:       0b000010001001100000100,
  4744:       0b000010001000101000100,
  4745:       0b000111001000100111000,
  4746:       0b000000000000000000000,
  4747:       0b000000000000000000000,
  4748:       0b000000000000000000000,
  4749:     },  //0x5e  4 INS
  4750:     {
  4751:       0b000000000000000000000,
  4752:       0b000000000000000000000,
  4753:       0b000000000000110000000,
  4754:       0b000111001000001100000,
  4755:       0b000001001100000000000,
  4756:       0b000010001010100000000,
  4757:       0b000100001000101111000,
  4758:       0b000100001000110000100,
  4759:       0b000100001000100000100,
  4760:       0b000100010000000001000,
  4761:       0b000011100000001110000,
  4762:       0b000000000000000000000,
  4763:       0b000000000000000000000,
  4764:     },  //0x5f  5 ひらがな
  4765:     {
  4766:       0b000000000000000000000,
  4767:       0b000000000000000000000,
  4768:       0b000001000000011110000,
  4769:       0b000010100000100010000,
  4770:       0b000100010001111111100,
  4771:       0b011000001100100100100,
  4772:       0b000111110000111111100,
  4773:       0b000001000000100100100,
  4774:       0b000111110000111111100,
  4775:       0b000001000000100000100,
  4776:       0b001111111001000001100,
  4777:       0b000000000000000000000,
  4778:       0b000000000000000000000,
  4779:     },  //0x60  6 全角
  4780:     {
  4781:       0b000000000000000000000,
  4782:       0b000000000000000000000,
  4783:       0b000000000000000000000,
  4784:       0b001000101000101000100,
  4785:       0b001000101000101101100,
  4786:       0b001100101000101010100,
  4787:       0b001010101000101000100,
  4788:       0b001001101000101000100,
  4789:       0b001000101000101000100,
  4790:       0b001000100111001000100,
  4791:       0b000000000000000000000,
  4792:       0b000000000000000000000,
  4793:       0b000000000000000000000,
  4794:     },  //0x74  7 NUM
  4795:   };
  4796: 
  4797:   //固定キーの番号→固定キーに表示する文字のパターン
  4798:   public static final int[][] KBD_FIX_LETTER = {
  4799:     {
  4800:       0b000000000000000000000,
  4801:       0b000000000000000000000,
  4802:       0b000000000000000000000,
  4803:       0b001111100111000111000,
  4804:       0b001000001000101000100,
  4805:       0b001000001000001000000,
  4806:       0b001111000111001000000,
  4807:       0b001000000000101000000,
  4808:       0b001000001000101000100,
  4809:       0b001111100111000111000,
  4810:       0b000000000000000000000,
  4811:       0b000000000000000000000,
  4812:       0b000000000000000000000,
  4813:     },  //0x01  0 ESC
  4814:     {
  4815:       0b000000000000000000000,
  4816:       0b000000000000000000000,
  4817:       0b000000000000000000000,
  4818:       0b000001111000111000000,
  4819:       0b000001000101000100000,
  4820:       0b000001000101000000000,
  4821:       0b000001111000111000000,
  4822:       0b000001000100000100000,
  4823:       0b000001000101000100000,
  4824:       0b000001111000111000000,
  4825:       0b000000000000000000000,
  4826:       0b000000000000000000000,
  4827:       0b000000000000000000000,
  4828:     },  //0x0f  1 BS
  4829:     {
  4830:       0b000000000000000000000,
  4831:       0b000000000000000000000,
  4832:       0b000000000000000000000,
  4833:       0b001111100010001111000,
  4834:       0b000010000101001000100,
  4835:       0b000010000101001000100,
  4836:       0b000010001000101111000,
  4837:       0b000010001111101000100,
  4838:       0b000010001000101000100,
  4839:       0b000010001000101111000,
  4840:       0b000000000000000000000,
  4841:       0b000000000000000000000,
  4842:       0b000000000000000000000,
  4843:     },  //0x10  2 TAB
  4844:     {
  4845:       0b0,0b00000000000000000000000000000000,
  4846:       0b0,0b00000000000000000000000000000000,
  4847:       0b0,0b00000000000000000000000000000000,
  4848:       0b0,0b00000000000000000000000000000000,
  4849:       0b0,0b00000000000000000000000000000000,
  4850:       0b0,0b00000000000000000000000000000000,
  4851:       0b0,0b00000000000000000000000000000000,
  4852:       0b0,0b00000000000000000001110000000000,
  4853:       0b0,0b00000000000000000001010000000000,
  4854:       0b0,0b00000000000000000001010000000000,
  4855:       0b0,0b00000000000000000001010000000000,
  4856:       0b0,0b00000000000000000001010000000000,
  4857:       0b0,0b00000000000000000001010000000000,
  4858:       0b0,0b00000000000000000001010000000000,
  4859:       0b0,0b00000000000000000001010000000000,
  4860:       0b0,0b00000000000000000001010000000000,
  4861:       0b0,0b00000000000000000001010000000000,
  4862:       0b0,0b00000000000000001001010000000000,
  4863:       0b0,0b00000000000000011001010000000000,
  4864:       0b0,0b00000000000000101111010000000000,
  4865:       0b0,0b00000000000001000000010000000000,
  4866:       0b0,0b00000000000000101111110000000000,
  4867:       0b0,0b00000000000000011000000000000000,
  4868:       0b0,0b00000000000000001000000000000000,
  4869:       0b0,0b00000000000000000000000000000000,
  4870:       0b0,0b00000000000000000000000000000000,
  4871:       0b0,0b00000000000000000000000000000000,
  4872:       0b0,0b00000000000000000000000000000000,
  4873:       0b0,0b00000000000000000000000000000000,
  4874:     },  //0x1d  3 RETURN
  4875:     null,  //0x35  4 Space
  4876:     {
  4877:       0b000000000000000000000,
  4878:       0b000000000000000000000,
  4879:       0b000000000000000000000,
  4880:       0b010010011001001011110,
  4881:       0b010010100101111010000,
  4882:       0b010010100101111010000,
  4883:       0b011110100101001011100,
  4884:       0b010010100101001010000,
  4885:       0b010010100101001010000,
  4886:       0b010010011001001011110,
  4887:       0b000000000000000000000,
  4888:       0b000000000000000000000,
  4889:       0b000000000000000000000,
  4890:     },  //0x36  5 HOME
  4891:     {
  4892:       0b000000000000000000000,
  4893:       0b000000000000000000000,
  4894:       0b000000000000000000000,
  4895:       0b001110001111101000000,
  4896:       0b001001001000001000000,
  4897:       0b001000101000001000000,
  4898:       0b001000101111001000000,
  4899:       0b001000101000001000000,
  4900:       0b001001001000001000000,
  4901:       0b001110001111101111100,
  4902:       0b000000000000000000000,
  4903:       0b000000000000000000000,
  4904:       0b000000000000000000000,
  4905:     },  //0x37  6 DEL
  4906:     {
  4907:       0b000000000000000000000,
  4908:       0b011100011001000010000,
  4909:       0b010010100101000010000,
  4910:       0b011100100101000010000,
  4911:       0b010010100101000010000,
  4912:       0b010010011001111011110,
  4913:       0b000000000000000000000,
  4914:       0b000000100101110000000,
  4915:       0b000000100101001000000,
  4916:       0b000000100101110000000,
  4917:       0b000000100101000000000,
  4918:       0b000000011001000000000,
  4919:       0b000000000000000000000,
  4920:     },  //0x38  7 ROLLUP
  4921:     {
  4922:       0b000000000000000000000,
  4923:       0b011100011001000010000,
  4924:       0b010010100101000010000,
  4925:       0b011100100101000010000,
  4926:       0b010010100101000010000,
  4927:       0b010010011001111011110,
  4928:       0b000000000000000000000,
  4929:       0b011100011001001010010,
  4930:       0b010010100101001011010,
  4931:       0b010010100101111011110,
  4932:       0b010010100101111010110,
  4933:       0b011100011001001010010,
  4934:       0b000000000000000000000,
  4935:     },  //0x39  8 ROLLDOWN
  4936:     {
  4937:       0b000000000000000000000,
  4938:       0b000000000000000000000,
  4939:       0b000000000000000000000,
  4940:       0b010010100101100001100,
  4941:       0b010010100101010010010,
  4942:       0b010010110101001010010,
  4943:       0b010010111101001010010,
  4944:       0b010010101101001010010,
  4945:       0b010010100101010010010,
  4946:       0b001100100101100001100,
  4947:       0b000000000000000000000,
  4948:       0b000000000000000000000,
  4949:       0b000000000000000000000,
  4950:     },  //0x3a  9 UNDO
  4951:     {
  4952:       0b000000000000000000000,
  4953:       0b000000000000000000000,
  4954:       0b000000000000000000000,
  4955:       0b000000000100000000000,
  4956:       0b000000001100000000000,
  4957:       0b000000010111111000000,
  4958:       0b000000100000001000000,
  4959:       0b000000010111111000000,
  4960:       0b000000001100000000000,
  4961:       0b000000000100000000000,
  4962:       0b000000000000000000000,
  4963:       0b000000000000000000000,
  4964:       0b000000000000000000000,
  4965:     },  //0x3b 10 ←
  4966:     {
  4967:       0b000000000000000000000,
  4968:       0b000000000000000000000,
  4969:       0b000000000010000000000,
  4970:       0b000000000101000000000,
  4971:       0b000000001000100000000,
  4972:       0b000000011101110000000,
  4973:       0b000000000101000000000,
  4974:       0b000000000101000000000,
  4975:       0b000000000101000000000,
  4976:       0b000000000101000000000,
  4977:       0b000000000111000000000,
  4978:       0b000000000000000000000,
  4979:       0b000000000000000000000,
  4980:     },  //0x3c 11 ↑
  4981:     {
  4982:       0b000000000000000000000,
  4983:       0b000000000000000000000,
  4984:       0b000000000000000000000,
  4985:       0b000000000001000000000,
  4986:       0b000000000001100000000,
  4987:       0b000000111111010000000,
  4988:       0b000000100000001000000,
  4989:       0b000000111111010000000,
  4990:       0b000000000001100000000,
  4991:       0b000000000001000000000,
  4992:       0b000000000000000000000,
  4993:       0b000000000000000000000,
  4994:       0b000000000000000000000,
  4995:     },  //0x3d 12 →
  4996:     {
  4997:       0b000000000000000000000,
  4998:       0b000000000000000000000,
  4999:       0b000000000111000000000,
  5000:       0b000000000101000000000,
  5001:       0b000000000101000000000,
  5002:       0b000000000101000000000,
  5003:       0b000000000101000000000,
  5004:       0b000000011101110000000,
  5005:       0b000000001000100000000,
  5006:       0b000000000101000000000,
  5007:       0b000000000010000000000,
  5008:       0b000000000000000000000,
  5009:       0b000000000000000000000,
  5010:     },  //0x3e 13 ↓
  5011:     {
  5012:       0b000000000000000000000,
  5013:       0b000000000000000000000,
  5014:       0b000000000000000000000,
  5015:       0b000111001000001111000,
  5016:       0b001000101000001000100,
  5017:       0b001000001000001000100,
  5018:       0b001000001000001111000,
  5019:       0b001000001000001000100,
  5020:       0b001000101000001000100,
  5021:       0b000111001111101000100,
  5022:       0b000000000000000000000,
  5023:       0b000000000000000000000,
  5024:       0b000000000000000000000,
  5025:     },  //0x3f 14 CLR
  5026:     {
  5027:       0b000000000000000000000,
  5028:       0b000000000000000000000,
  5029:       0b000000000000000000000,
  5030:       0b000000000000010000000,
  5031:       0b000000000000100000000,
  5032:       0b000000000001000000000,
  5033:       0b000000000010000000000,
  5034:       0b000000000100000000000,
  5035:       0b000000001000000000000,
  5036:       0b000000010000000000000,
  5037:       0b000000000000000000000,
  5038:       0b000000000000000000000,
  5039:       0b000000000000000000000,
  5040:     },  //0x40 15 /
  5041:     {
  5042:       0b000000000000000000000,
  5043:       0b000000000000000000000,
  5044:       0b000000000000000000000,
  5045:       0b000000000010000000000,
  5046:       0b000000010010010000000,
  5047:       0b000000001010100000000,
  5048:       0b000000000111000000000,
  5049:       0b000000001010100000000,
  5050:       0b000000010010010000000,
  5051:       0b000000000010000000000,
  5052:       0b000000000000000000000,
  5053:       0b000000000000000000000,
  5054:       0b000000000000000000000,
  5055:     },  //0x41 16 *
  5056:     {
  5057:       0b000000000000000000000,
  5058:       0b000000000000000000000,
  5059:       0b000000000000000000000,
  5060:       0b000000000000000000000,
  5061:       0b000000000000000000000,
  5062:       0b000000000000000000000,
  5063:       0b000000011111110000000,
  5064:       0b000000000000000000000,
  5065:       0b000000000000000000000,
  5066:       0b000000000000000000000,
  5067:       0b000000000000000000000,
  5068:       0b000000000000000000000,
  5069:       0b000000000000000000000,
  5070:     },  //0x42 17 -
  5071:     {
  5072:       0b000000000000000000000,
  5073:       0b000000000000000000000,
  5074:       0b000000011111110000000,
  5075:       0b000000000000010000000,
  5076:       0b000000000000010000000,
  5077:       0b000000000000100000000,
  5078:       0b000000000001000000000,
  5079:       0b000000000001000000000,
  5080:       0b000000000010000000000,
  5081:       0b000000000010000000000,
  5082:       0b000000000010000000000,
  5083:       0b000000000000000000000,
  5084:       0b000000000000000000000,
  5085:     },  //0x43 18 7
  5086:     {
  5087:       0b000000000000000000000,
  5088:       0b000000000000000000000,
  5089:       0b000000001111100000000,
  5090:       0b000000010000010000000,
  5091:       0b000000010000010000000,
  5092:       0b000000010000010000000,
  5093:       0b000000001111100000000,
  5094:       0b000000010000010000000,
  5095:       0b000000010000010000000,
  5096:       0b000000010000010000000,
  5097:       0b000000001111100000000,
  5098:       0b000000000000000000000,
  5099:       0b000000000000000000000,
  5100:     },  //0x44 19 8
  5101:     {
  5102:       0b000000000000000000000,
  5103:       0b000000000000000000000,
  5104:       0b000000001111100000000,
  5105:       0b000000010000010000000,
  5106:       0b000000010000010000000,
  5107:       0b000000010000010000000,
  5108:       0b000000001111110000000,
  5109:       0b000000000000010000000,
  5110:       0b000000000000010000000,
  5111:       0b000000000000100000000,
  5112:       0b000000001111000000000,
  5113:       0b000000000000000000000,
  5114:       0b000000000000000000000,
  5115:     },  //0x45 20 9
  5116:     {
  5117:       0b000000000000000000000,
  5118:       0b000000000000000000000,
  5119:       0b000000000000000000000,
  5120:       0b000000000010000000000,
  5121:       0b000000000010000000000,
  5122:       0b000000000010000000000,
  5123:       0b000000011111110000000,
  5124:       0b000000000010000000000,
  5125:       0b000000000010000000000,
  5126:       0b000000000010000000000,
  5127:       0b000000000000000000000,
  5128:       0b000000000000000000000,
  5129:       0b000000000000000000000,
  5130:     },  //0x46 21 +
  5131:     {
  5132:       0b000000000000000000000,
  5133:       0b000000000000000000000,
  5134:       0b000000000001100000000,
  5135:       0b000000000010100000000,
  5136:       0b000000000100100000000,
  5137:       0b000000001000100000000,
  5138:       0b000000010000100000000,
  5139:       0b000000010000100000000,
  5140:       0b000000011111110000000,
  5141:       0b000000000000100000000,
  5142:       0b000000000000100000000,
  5143:       0b000000000000000000000,
  5144:       0b000000000000000000000,
  5145:     },  //0x47 22 4
  5146:     {
  5147:       0b000000000000000000000,
  5148:       0b000000000000000000000,
  5149:       0b000000011111110000000,
  5150:       0b000000010000000000000,
  5151:       0b000000010000000000000,
  5152:       0b000000011111100000000,
  5153:       0b000000000000010000000,
  5154:       0b000000000000010000000,
  5155:       0b000000000000010000000,
  5156:       0b000000010000010000000,
  5157:       0b000000001111100000000,
  5158:       0b000000000000000000000,
  5159:       0b000000000000000000000,
  5160:     },  //0x48 23 5
  5161:     {
  5162:       0b000000000000000000000,
  5163:       0b000000000000000000000,
  5164:       0b000000000111100000000,
  5165:       0b000000001000000000000,
  5166:       0b000000010000000000000,
  5167:       0b000000010000000000000,
  5168:       0b000000011111100000000,
  5169:       0b000000010000010000000,
  5170:       0b000000010000010000000,
  5171:       0b000000010000010000000,
  5172:       0b000000001111100000000,
  5173:       0b000000000000000000000,
  5174:       0b000000000000000000000,
  5175:     },  //0x49 24 6
  5176:     {
  5177:       0b000000000000000000000,
  5178:       0b000000000000000000000,
  5179:       0b000000000000000000000,
  5180:       0b000000000000000000000,
  5181:       0b000000000000000000000,
  5182:       0b000000011111110000000,
  5183:       0b000000000000000000000,
  5184:       0b000000011111110000000,
  5185:       0b000000000000000000000,
  5186:       0b000000000000000000000,
  5187:       0b000000000000000000000,
  5188:       0b000000000000000000000,
  5189:       0b000000000000000000000,
  5190:     },  //0x4a 25 =
  5191:     {
  5192:       0b000000000000000000000,
  5193:       0b000000000000000000000,
  5194:       0b000000000010000000000,
  5195:       0b000000000110000000000,
  5196:       0b000000001010000000000,
  5197:       0b000000000010000000000,
  5198:       0b000000000010000000000,
  5199:       0b000000000010000000000,
  5200:       0b000000000010000000000,
  5201:       0b000000000010000000000,
  5202:       0b000000000010000000000,
  5203:       0b000000000000000000000,
  5204:       0b000000000000000000000,
  5205:     },  //0x4b 26 1
  5206:     {
  5207:       0b000000000000000000000,
  5208:       0b000000000000000000000,
  5209:       0b000000001111100000000,
  5210:       0b000000010000010000000,
  5211:       0b000000000000010000000,
  5212:       0b000000000000010000000,
  5213:       0b000000000001100000000,
  5214:       0b000000000110000000000,
  5215:       0b000000001000000000000,
  5216:       0b000000010000000000000,
  5217:       0b000000011111110000000,
  5218:       0b000000000000000000000,
  5219:       0b000000000000000000000,
  5220:     },  //0x4c 27 2
  5221:     {
  5222:       0b000000000000000000000,
  5223:       0b000000000000000000000,
  5224:       0b000000001111100000000,
  5225:       0b000000010000010000000,
  5226:       0b000000000000010000000,
  5227:       0b000000000000010000000,
  5228:       0b000000000011100000000,
  5229:       0b000000000000010000000,
  5230:       0b000000000000010000000,
  5231:       0b000000010000010000000,
  5232:       0b000000001111100000000,
  5233:       0b000000000000000000000,
  5234:       0b000000000000000000000,
  5235:     },  //0x4d 28 3
  5236:     {
  5237:       0b000000000000000000000,
  5238:       0b000000000000000000000,
  5239:       0b000000000000000000000,
  5240:       0b000000000000000000000,
  5241:       0b000000000000000000000,
  5242:       0b000000000000000000000,
  5243:       0b000000000000000000000,
  5244:       0b011101010111011101100,
  5245:       0b010001010010010001010,
  5246:       0b010001110010010001010,
  5247:       0b011101110010011101100,
  5248:       0b010001110010010001010,
  5249:       0b010001010010010001010,
  5250:       0b011101010010011101010,
  5251:       0b000000000000000000000,
  5252:       0b000000000000000000000,
  5253:       0b000000000000000000000,
  5254:       0b000000000000000000000,
  5255:       0b000000000000000000000,
  5256:       0b000000000000000000000,
  5257:       0b000000000000000000000,
  5258:     },  //0x4e 29 ENTER
  5259:     {
  5260:       0b000000000000000000000,
  5261:       0b000000000000000000000,
  5262:       0b000000001111100000000,
  5263:       0b000000010000010000000,
  5264:       0b000000010000010000000,
  5265:       0b000000010000010000000,
  5266:       0b000000010000010000000,
  5267:       0b000000010000010000000,
  5268:       0b000000010000010000000,
  5269:       0b000000010000010000000,
  5270:       0b000000001111100000000,
  5271:       0b000000000000000000000,
  5272:       0b000000000000000000000,
  5273:     },  //0x4f 30 0
  5274:     {
  5275:       0b000000000000000000000,
  5276:       0b000000000000000000000,
  5277:       0b000000000000000000000,
  5278:       0b000000000000000000000,
  5279:       0b000000000000000000000,
  5280:       0b000000000000000000000,
  5281:       0b000000000000000000000,
  5282:       0b000000000110000000000,
  5283:       0b000000000110000000000,
  5284:       0b000000000010000000000,
  5285:       0b000000000100000000000,
  5286:       0b000000000000000000000,
  5287:       0b000000000000000000000,
  5288:     },  //0x50 31 ,
  5289:     {
  5290:       0b000000000000000000000,
  5291:       0b000000000000000000000,
  5292:       0b000000000000000000000,
  5293:       0b000000000000000000000,
  5294:       0b000000000000000000000,
  5295:       0b000000000000000000000,
  5296:       0b000000000000000000000,
  5297:       0b000000000000000000000,
  5298:       0b000000000110000000000,
  5299:       0b000000000110000000000,
  5300:       0b000000000000000000000,
  5301:       0b000000000000000000000,
  5302:       0b000000000000000000000,
  5303:     },  //0x51 32 .
  5304:     {
  5305:       0b000000000000000000000,
  5306:       0b000000000000000000000,
  5307:       0b000111011110011111000,
  5308:       0b000000000010010001000,
  5309:       0b001111000010011111000,
  5310:       0b000000011110000000000,
  5311:       0b000111010000111111100,
  5312:       0b000000010000001000000,
  5313:       0b000111010000001111000,
  5314:       0b000101010010000001000,
  5315:       0b000111011110011111000,
  5316:       0b000000000000000000000,
  5317:       0b000000000000000000000,
  5318:     },  //0x52 33 記号入力
  5319:     {
  5320:       0b000000000000000000000,
  5321:       0b000000000000000000000,
  5322:       0b010111000100110011100,
  5323:       0b001010101001001000100,
  5324:       0b000111110010111011100,
  5325:       0b001000001001100000100,
  5326:       0b010111110100110111110,
  5327:       0b000100010001100001000,
  5328:       0b000111110010101011110,
  5329:       0b000010100001110011100,
  5330:       0b001111111011000101010,
  5331:       0b000000000000000000000,
  5332:       0b000000000000000000000,
  5333:     },  //0x53 34 登録
  5334:     {
  5335:       0b000000000000000000000,
  5336:       0b000000000000000000000,
  5337:       0b000000000000000000000,
  5338:       0b010010111101000011100,
  5339:       0b010010100001000010010,
  5340:       0b010010100001000010010,
  5341:       0b011110111001000011100,
  5342:       0b010010100001000010000,
  5343:       0b010010100001000010000,
  5344:       0b010010111101111010000,
  5345:       0b000000000000000000000,
  5346:       0b000000000000000000000,
  5347:       0b000000000000000000000,
  5348:     },  //0x54 35 HELP
  5349:     {
  5350:       0b000000000000000000000,
  5351:       0b000000000000000000000,
  5352:       0b000000000000000000000,
  5353:       0b001000101111100010000,
  5354:       0b001000101000000110000,
  5355:       0b000101001000000010000,
  5356:       0b000010001111000010000,
  5357:       0b000101001000000010000,
  5358:       0b001000101000000010000,
  5359:       0b001000101000000010000,
  5360:       0b000000000000000000000,
  5361:       0b000000000000000000000,
  5362:       0b000000000000000000000,
  5363:     },  //0x55 36 XF1
  5364:     {
  5365:       0b000000000000000000000,
  5366:       0b000000000000000000000,
  5367:       0b000000000000000000000,
  5368:       0b001000101111100111000,
  5369:       0b001000101000001000100,
  5370:       0b000101001000000000100,
  5371:       0b000010001111000011000,
  5372:       0b000101001000000100000,
  5373:       0b001000101000001000000,
  5374:       0b001000101000001111100,
  5375:       0b000000000000000000000,
  5376:       0b000000000000000000000,
  5377:       0b000000000000000000000,
  5378:     },  //0x56 37 XF2
  5379:     {
  5380:       0b000000000000000000000,
  5381:       0b000000000000000000000,
  5382:       0b000000000000000000000,
  5383:       0b001000101111100111000,
  5384:       0b001000101000001000100,
  5385:       0b000101001000000000100,
  5386:       0b000010001111000011000,
  5387:       0b000101001000000000100,
  5388:       0b001000101000001000100,
  5389:       0b001000101000000111000,
  5390:       0b000000000000000000000,
  5391:       0b000000000000000000000,
  5392:       0b000000000000000000000,
  5393:     },  //0x57 38 XF3
  5394:     {
  5395:       0b000000000000000000000,
  5396:       0b000000000000000000000,
  5397:       0b000000000000000000000,
  5398:       0b001000101111100001000,
  5399:       0b001000101000000011000,
  5400:       0b000101001000000101000,
  5401:       0b000010001111001001000,
  5402:       0b000101001000001111100,
  5403:       0b001000101000000001000,
  5404:       0b001000101000000001000,
  5405:       0b000000000000000000000,
  5406:       0b000000000000000000000,
  5407:       0b000000000000000000000,
  5408:     },  //0x58 39 XF4
  5409:     {
  5410:       0b000000000000000000000,
  5411:       0b000000000000000000000,
  5412:       0b000000000000000000000,
  5413:       0b001000101111101111100,
  5414:       0b001000101000001000000,
  5415:       0b000101001000001111000,
  5416:       0b000010001111000000100,
  5417:       0b000101001000000000100,
  5418:       0b001000101000001000100,
  5419:       0b001000101000000111000,
  5420:       0b000000000000000000000,
  5421:       0b000000000000000000000,
  5422:       0b000000000000000000000,
  5423:     },  //0x59 40 XF5
  5424:     {
  5425:       0b000000000000000000000,
  5426:       0b000000000000000000000,
  5427:       0b000000000000000000000,
  5428:       0b011001100111001001010,
  5429:       0b010101010100010101010,
  5430:       0b010101010100010101010,
  5431:       0b011001100111011101100,
  5432:       0b010101010100010101010,
  5433:       0b010101010100010101010,
  5434:       0b011001010111010101010,
  5435:       0b000000000000000000000,
  5436:       0b000000000000000000000,
  5437:       0b000000000000000000000,
  5438:     },  //0x61 41 BREAK
  5439:     {
  5440:       0b000000000000000000000,
  5441:       0b000000000000000000000,
  5442:       0b000000000000000000000,
  5443:       0b001100011001110100010,
  5444:       0b010010100101001100010,
  5445:       0b010000100101001010100,
  5446:       0b010000100101110001000,
  5447:       0b010000100101000001000,
  5448:       0b010010100101000001000,
  5449:       0b001100011001000001000,
  5450:       0b000000000000000000000,
  5451:       0b000000000000000000000,
  5452:       0b000000000000000000000,
  5453:     },  //0x62 42 COPY
  5454:     {
  5455:       0b000000000000000000000000000,
  5456:       0b000000000000000000000000000,
  5457:       0b000000001111100010000000000,
  5458:       0b000000001000000110000000000,
  5459:       0b000000001000000010000000000,
  5460:       0b000000001111000010000000000,
  5461:       0b000000001000000010000000000,
  5462:       0b000000001000000010000000000,
  5463:       0b000000001000000010000000000,
  5464:       0b000000000000000000000000000,
  5465:       0b000000000000000000000000000,
  5466:     },  //0x63 43 F1
  5467:     {
  5468:       0b000000000000000000000000000,
  5469:       0b000000000000000000000000000,
  5470:       0b000000001111100111000000000,
  5471:       0b000000001000001000100000000,
  5472:       0b000000001000000000100000000,
  5473:       0b000000001111000011000000000,
  5474:       0b000000001000000100000000000,
  5475:       0b000000001000001000000000000,
  5476:       0b000000001000001111100000000,
  5477:       0b000000000000000000000000000,
  5478:       0b000000000000000000000000000,
  5479:     },  //0x64 44 F2
  5480:     {
  5481:       0b000000000000000000000000000,
  5482:       0b000000000000000000000000000,
  5483:       0b000000001111100111000000000,
  5484:       0b000000001000001000100000000,
  5485:       0b000000001000000000100000000,
  5486:       0b000000001111000011000000000,
  5487:       0b000000001000000000100000000,
  5488:       0b000000001000001000100000000,
  5489:       0b000000001000000111000000000,
  5490:       0b000000000000000000000000000,
  5491:       0b000000000000000000000000000,
  5492:     },  //0x65 45 F3
  5493:     {
  5494:       0b000000000000000000000000000,
  5495:       0b000000000000000000000000000,
  5496:       0b000000001111100001000000000,
  5497:       0b000000001000000011000000000,
  5498:       0b000000001000000101000000000,
  5499:       0b000000001111001001000000000,
  5500:       0b000000001000001111100000000,
  5501:       0b000000001000000001000000000,
  5502:       0b000000001000000001000000000,
  5503:       0b000000000000000000000000000,
  5504:       0b000000000000000000000000000,
  5505:     },  //0x66 46 F4
  5506:     {
  5507:       0b000000000000000000000000000,
  5508:       0b000000000000000000000000000,
  5509:       0b000000001111101111100000000,
  5510:       0b000000001000001000000000000,
  5511:       0b000000001000001111000000000,
  5512:       0b000000001111000000100000000,
  5513:       0b000000001000000000100000000,
  5514:       0b000000001000001000100000000,
  5515:       0b000000001000000111000000000,
  5516:       0b000000000000000000000000000,
  5517:       0b000000000000000000000000000,
  5518:     },  //0x67 47 F5
  5519:     {
  5520:       0b000000000000000000000000000,
  5521:       0b000000000000000000000000000,
  5522:       0b000000001111100011000000000,
  5523:       0b000000001000000100000000000,
  5524:       0b000000001000001000000000000,
  5525:       0b000000001111001111000000000,
  5526:       0b000000001000001000100000000,
  5527:       0b000000001000001000100000000,
  5528:       0b000000001000000111000000000,
  5529:       0b000000000000000000000000000,
  5530:       0b000000000000000000000000000,
  5531:     },  //0x68 48 F6
  5532:     {
  5533:       0b000000000000000000000000000,
  5534:       0b000000000000000000000000000,
  5535:       0b000000001111101111100000000,
  5536:       0b000000001000000000100000000,
  5537:       0b000000001000000000100000000,
  5538:       0b000000001111000001000000000,
  5539:       0b000000001000000010000000000,
  5540:       0b000000001000000010000000000,
  5541:       0b000000001000000010000000000,
  5542:       0b000000000000000000000000000,
  5543:       0b000000000000000000000000000,
  5544:     },  //0x69 49 F7
  5545:     {
  5546:       0b000000000000000000000000000,
  5547:       0b000000000000000000000000000,
  5548:       0b000000001111100111000000000,
  5549:       0b000000001000001000100000000,
  5550:       0b000000001000001000100000000,
  5551:       0b000000001111000111000000000,
  5552:       0b000000001000001000100000000,
  5553:       0b000000001000001000100000000,
  5554:       0b000000001000000111000000000,
  5555:       0b000000000000000000000000000,
  5556:       0b000000000000000000000000000,
  5557:     },  //0x6a 50 F8
  5558:     {
  5559:       0b000000000000000000000000000,
  5560:       0b000000000000000000000000000,
  5561:       0b000000001111100111000000000,
  5562:       0b000000001000001000100000000,
  5563:       0b000000001000001000100000000,
  5564:       0b000000001111000111100000000,
  5565:       0b000000001000000000100000000,
  5566:       0b000000001000000001000000000,
  5567:       0b000000001000000110000000000,
  5568:       0b000000000000000000000000000,
  5569:       0b000000000000000000000000000,
  5570:     },  //0x6b 51 F9
  5571:     {
  5572:       0b000000000000000000000000000,
  5573:       0b000000000000000000000000000,
  5574:       0b000001111100010000111000000,
  5575:       0b000001000000110001000100000,
  5576:       0b000001000000010001000100000,
  5577:       0b000001111000010001000100000,
  5578:       0b000001000000010001000100000,
  5579:       0b000001000000010001000100000,
  5580:       0b000001000000010000111000000,
  5581:       0b000000000000000000000000000,
  5582:       0b000000000000000000000000000,
  5583:     },  //0x6c 52 F10
  5584:     {
  5585:       0b0000000,0b00000000000000000000000000000000,
  5586:       0b0000000,0b00000000000000000000000000000000,
  5587:       0b0000000,0b00000000000000000000000000000000,
  5588:       0b0000001,0b11001000100111001111101111100000,
  5589:       0b0000010,0b00101000100010001000000010000000,
  5590:       0b0000010,0b00001000100010001000000010000000,
  5591:       0b0000001,0b11001111100010001111000010000000,
  5592:       0b0000000,0b00101000100010001000000010000000,
  5593:       0b0000010,0b00101000100010001000000010000000,
  5594:       0b0000001,0b11001000100111001000000010000000,
  5595:       0b0000000,0b00000000000000000000000000000000,
  5596:       0b0000000,0b00000000000000000000000000000000,
  5597:       0b0000000,0b00000000000000000000000000000000,
  5598:     },  //0x70 53 SHIFT
  5599:     {
  5600:       0b000000000000000000000000000,
  5601:       0b000000000000000000000000000,
  5602:       0b000000000000000000000000000,
  5603:       0b000111001111101111001000000,
  5604:       0b001000100010001000101000000,
  5605:       0b001000000010001000101000000,
  5606:       0b001000000010001111001000000,
  5607:       0b001000000010001000101000000,
  5608:       0b001000100010001000101000000,
  5609:       0b000111000010001000101111100,
  5610:       0b000000000000000000000000000,
  5611:       0b000000000000000000000000000,
  5612:       0b000000000000000000000000000,
  5613:     },  //0x71 54 CTRL
  5614:     {
  5615:       0b000000000000000000000,
  5616:       0b000000000000000000000,
  5617:       0b000000000000000000000,
  5618:       0b000110011100111000100,
  5619:       0b001001010010010001100,
  5620:       0b001001010010010000100,
  5621:       0b001001011100010000100,
  5622:       0b001001010000010000100,
  5623:       0b001001010000010000100,
  5624:       0b000110010000010100100,
  5625:       0b000000000000000000000,
  5626:       0b000000000000000000000,
  5627:       0b000000000000000000000,
  5628:     },  //0x72 55 OPT.1
  5629:     {
  5630:       0b000000000000000000000,
  5631:       0b000000000000000000000,
  5632:       0b000000000000000000000,
  5633:       0b001100111001110001100,
  5634:       0b010010100100100010010,
  5635:       0b010010100100100000010,
  5636:       0b010010111000100000100,
  5637:       0b010010100000100001000,
  5638:       0b010010100000100010000,
  5639:       0b001100100000101011110,
  5640:       0b000000000000000000000,
  5641:       0b000000000000000000000,
  5642:       0b000000000000000000000,
  5643:     },  //0x73 56 OPT.2
  5644:   };
  5645: 
  5646:   //キーマップ
  5647:   //  [0],[1],[2],[3],[4]の繰り返し
  5648:   //    [0]  e.getKeyCode()      0でないとき有効
  5649:   //    [1]  e.getKeyLocation()  0でないとき有効
  5650:   //    [2]  e.getKeyChar()      0でないとき有効
  5651:   //    [3]  e.getModifiersEx()&(InputEvent.CTRL_DOWN_MASK|InputEvent.SHIFT_DOWN_MASK)  [2]が0でないとき有効
  5652:   //    [4]  番号
  5653:   //  [0]の昇順に列挙する
  5654: /*
  5655:   public static final int[] KBD_KEY_MAP = {
  5656:     //0x0000, 0, 0x0000, 0x0000,       //                   VK_UNDEFINED
  5657:     //0x0003, 0, 0x0000, 0x0000,       //                   VK_CANCEL
  5658:     0x0008, 0, 0x0000, 0x0000,  57,  //0x0f  57 BS        VK_BACK_SPACE
  5659:     0x0009, 0, 0x0000, 0x0000,  58,  //0x10  58 TAB       VK_TAB
  5660:     0x000a, 1, 0x0000, 0x0000,  59,  //0x1d  59 RETURN    VK_ENTER(STANDARD)
  5661:     0x000a, 4, 0x0000, 0x0000,  85,  //0x4e  85 ENTER     VK_ENTER(NUMPAD)
  5662:     //0x000c, 0, 0x0000, 0x0000,       //                   VK_CLEAR
  5663:     0x0010, 0, 0x0000, 0x0000, 109,  //0x70 109 SHIFT     VK_SHIFT
  5664:     0x0011, 2, 0x0000, 0x0000, 110,  //0x71 110 CTRL      VK_CONTROL(LEFT)
  5665:     0x0011, 3, 0x0000, 0x0000,  96,  //0x59  96 XF5       VK_CONTROL(RIGHT)
  5666:     0x0012, 2, 0x0000, 0x0000,  92,  //0x55  92 XF1       VK_ALT(LEFT)
  5667:     0x0012, 3, 0x0000, 0x0000,  94,  //0x57  94 XF3       VK_ALT(RIGHT)
  5668:     0x0013, 0, 0x0000, 0x0000,  97,  //0x61  97 BREAK     VK_PAUSE
  5669:     0x0014, 0, 0x0000, 0x0000,  51,  //0x5d  51 CAPS      VK_CAPS_LOCK
  5670:     //0x0015, 0, 0x0000, 0x0000,       //                   VK_KANA
  5671:     //0x0018, 0, 0x0000, 0x0000,       //                   VK_FINAL
  5672:     //0x0019, 0, 0x0000, 0x0000,       //                   VK_KANJI
  5673:     0x001b, 0, 0x0000, 0x0000,  56,  //0x01  56 ESC       VK_ESCAPE
  5674:     //0x001c, 0, 0x0000, 0x0000,       //                   VK_CONVERT
  5675:     0x001d, 0, 0x0000, 0x0000,  93,  //0x56  93 XF2       VK_NONCONVERT
  5676:     //0x001e, 0, 0x0000, 0x0000,       //                   VK_ACCEPT
  5677:     //0x001f, 0, 0x0000, 0x0000,       //                   VK_MODECHANGE
  5678:     0x0020, 0, 0x0000, 0x0000,  60,  //0x35  60 Space     VK_SPACE
  5679:     0x0021, 0, 0x0000, 0x0000,  63,  //0x38  63 ROLLUP    VK_PAGE_UP
  5680:     0x0022, 0, 0x0000, 0x0000,  64,  //0x39  64 ROLLDOWN  VK_PAGE_DOWN
  5681:     //0x0023, 0, 0x0000, 0x0000,       //                   VK_END
  5682:     0x0024, 0, 0x0000, 0x0000,  61,  //0x36  61 HOME      VK_HOME
  5683:     0x0025, 0, 0x0000, 0x0000,  66,  //0x3b  66 ←        VK_LEFT
  5684:     0x0026, 0, 0x0000, 0x0000,  67,  //0x3c  67 ↑        VK_UP
  5685:     0x0027, 0, 0x0000, 0x0000,  68,  //0x3d  68 →        VK_RIGHT
  5686:     0x0028, 0, 0x0000, 0x0000,  69,  //0x3e  69 ↓        VK_DOWN
  5687:     0x002c, 0, 0x0000, 0x0000,  44,  //0x31  44 ,<        VK_COMMA
  5688:     0x002d, 0, 0x0000, 0x0000,  10,  //0x0c  10 -=        VK_MINUS
  5689:     0x002e, 0, 0x0000, 0x0000,  45,  //0x32  45 .>        VK_PERIOD
  5690:     0x002f, 0, 0x0000, 0x0000,  46,  //0x33  46 /?        VK_SLASH
  5691:     0x0030, 0, 0x0000, 0x0000,   9,  //0x0b   9 0         VK_0
  5692:     0x0031, 0, 0x0000, 0x0000,   0,  //0x02   0 1!        VK_1
  5693:     0x0032, 0, 0x0000, 0x0000,   1,  //0x03   1 2"        VK_2
  5694:     0x0033, 0, 0x0000, 0x0000,   2,  //0x04   2 3#        VK_3
  5695:     0x0034, 0, 0x0000, 0x0000,   3,  //0x05   3 4$        VK_4
  5696:     0x0035, 0, 0x0000, 0x0000,   4,  //0x06   4 5%        VK_5
  5697:     0x0036, 0, 0x0000, 0x0000,   5,  //0x07   5 6&        VK_6
  5698:     0x0037, 0, 0x0000, 0x0000,   6,  //0x08   6 7'        VK_7
  5699:     0x0038, 0, 0x0000, 0x0000,   7,  //0x09   7 8(        VK_8
  5700:     0x0039, 0, 0x0000, 0x0000,   8,  //0x0a   8 9)        VK_9
  5701:     0x003b, 0, 0x0000, 0x0000,  34,  //0x27  34 ;+        VK_SEMICOLON
  5702:     //0x003d, 0, 0x0000, 0x0000,       //                   VK_EQUALS
  5703:     0x0041, 0, 0x0000, 0x0000,  25,  //0x1e  25 A         VK_A
  5704:     0x0042, 0, 0x0000, 0x0000,  41,  //0x2e  41 B         VK_B
  5705:     0x0043, 0, 0x0000, 0x0000,  39,  //0x2c  39 C         VK_C
  5706:     0x0044, 0, 0x0000, 0x0000,  27,  //0x20  27 D         VK_D
  5707:     0x0045, 0, 0x0000, 0x0000,  15,  //0x13  15 E         VK_E
  5708:     0x0046, 0, 0x0000, 0x0000,  28,  //0x21  28 F         VK_F
  5709:     0x0047, 0, 0x0000, 0x0000,  29,  //0x22  29 G         VK_G
  5710:     0x0048, 0, 0x0000, 0x0000,  30,  //0x23  30 H         VK_H
  5711:     0x0049, 0, 0x0000, 0x0000,  20,  //0x18  20 I         VK_I
  5712:     0x004a, 0, 0x0000, 0x0000,  31,  //0x24  31 J         VK_J
  5713:     0x004b, 0, 0x0000, 0x0000,  32,  //0x25  32 K         VK_K
  5714:     0x004c, 0, 0x0000, 0x0000,  33,  //0x26  33 L         VK_L
  5715:     0x004d, 0, 0x0000, 0x0000,  43,  //0x30  43 M         VK_M
  5716:     0x004e, 0, 0x0000, 0x0000,  42,  //0x2f  42 N         VK_N
  5717:     0x004f, 0, 0x0000, 0x0000,  21,  //0x19  21 O         VK_O
  5718:     0x0050, 0, 0x0000, 0x0000,  22,  //0x1a  22 P         VK_P
  5719:     0x0051, 0, 0x0000, 0x0000,  13,  //0x11  13 Q         VK_Q
  5720:     0x0052, 0, 0x0000, 0x0000,  16,  //0x14  16 R         VK_R
  5721:     0x0053, 0, 0x0000, 0x0000,  26,  //0x1f  26 S         VK_S
  5722:     0x0054, 0, 0x0000, 0x0000,  17,  //0x15  17 T         VK_T
  5723:     0x0055, 0, 0x0000, 0x0000,  19,  //0x17  19 U         VK_U
  5724:     0x0056, 0, 0x0000, 0x0000,  40,  //0x2d  40 V         VK_V
  5725:     0x0057, 0, 0x0000, 0x0000,  14,  //0x12  14 W         VK_W
  5726:     0x0058, 0, 0x0000, 0x0000,  38,  //0x2b  38 X         VK_X
  5727:     0x0059, 0, 0x0000, 0x0000,  18,  //0x16  18 Y         VK_Y
  5728:     0x005a, 0, 0x0000, 0x0000,  37,  //0x2a  37 Z         VK_Z
  5729:     0x005b, 0, 0x0000, 0x0000,  24,  //0x1c  24 [{        VK_OPEN_BRACKET
  5730:     //\|キー
  5731:     //  Shiftを押すと|(0x7c)になる
  5732:     //  Ctrlを押すと0x1cになる
  5733:     0x005c, 0, 0x005c, 0x0000,  12,  //0x0e  12 \|        VK_BACK_SLASH
  5734:     0x005c, 0, 0x007c, 0x0040,  12,  //0x0e  12 \|        VK_BACK_SLASH(SHIFT)
  5735:     0x005c, 0, 0x001c, 0x0080,  12,  //0x0e  12 \|        VK_BACK_SLASH(CTRL)
  5736:     0x005c, 0, 0xffff, 0x00c0,  12,  //0x0e  12 \|        VK_BACK_SLASH(SHIFT+CTRL)
  5737:     //\_キー
  5738:     //  Shiftなしで\(0x5c)になる場合は\|キーと見分けがつかない
  5739:     //  Shiftを押すと_(0x5f)になる
  5740:     //  Shiftを押しても|(0x7c)にならない
  5741:     //  Ctrlを押しても0x1cにならない
  5742:     0x005c, 0, 0x005f, 0x0000,  47,  //0x34  47 _         VK_BACK_SLASH
  5743:     0x005c, 0, 0x005c, 0x0040,  47,  //0x34  47 _         VK_BACK_SLASH(SHIFT)
  5744:     0x005c, 0, 0x005f, 0x0040,  47,  //0x34  47 _         VK_BACK_SLASH(SHIFT)
  5745:     0x005c, 0, 0x005c, 0x0080,  47,  //0x34  47 _         VK_BACK_SLASH(CTRL)
  5746:     0x005c, 0, 0x005f, 0x0080,  47,  //0x34  47 _         VK_BACK_SLASH(CTRL)
  5747:     0x005c, 0, 0x005c, 0x00c0,  47,  //0x34  47 _         VK_BACK_SLASH(SHIFT+CTRL)
  5748:     0x005c, 0, 0x005f, 0x00c0,  47,  //0x34  47 _         VK_BACK_SLASH(SHIFT+CTRL)
  5749:     0x005d, 0, 0x0000, 0x0000,  36,  //0x29  36 ]}        VK_CLOSE_BRACKET
  5750:     0x0060, 0, 0x0000, 0x0000,  86,  //0x4f  86 0         VK_NUMPAD0
  5751:     0x0061, 0, 0x0000, 0x0000,  82,  //0x4b  82 1         VK_NUMPAD1
  5752:     0x0062, 0, 0x0000, 0x0000,  83,  //0x4c  83 2         VK_NUMPAD2
  5753:     0x0063, 0, 0x0000, 0x0000,  84,  //0x4d  84 3         VK_NUMPAD3
  5754:     0x0064, 0, 0x0000, 0x0000,  78,  //0x47  78 4         VK_NUMPAD4
  5755:     0x0065, 0, 0x0000, 0x0000,  79,  //0x48  79 5         VK_NUMPAD5
  5756:     0x0066, 0, 0x0000, 0x0000,  80,  //0x49  80 6         VK_NUMPAD6
  5757:     0x0067, 0, 0x0000, 0x0000,  74,  //0x43  74 7         VK_NUMPAD7
  5758:     0x0068, 0, 0x0000, 0x0000,  75,  //0x44  75 8         VK_NUMPAD8
  5759:     0x0069, 0, 0x0000, 0x0000,  76,  //0x45  76 9         VK_NUMPAD9
  5760:     0x006a, 0, 0x0000, 0x0000,  72,  //0x41  72  *        VK_MULTIPLY
  5761:     0x006b, 0, 0x0000, 0x0000,  77,  //0x46  77 +         VK_ADD
  5762:     0x006c, 0, 0x0000, 0x0000,  87,  //0x50  87 ,         VK_SEPARATER
  5763:     0x006d, 0, 0x0000, 0x0000,  73,  //0x42  73 -         VK_SUBTRACT
  5764:     0x006e, 0, 0x0000, 0x0000,  88,  //0x51  88 .         VK_DECIMAL
  5765:     0x006f, 0, 0x0000, 0x0000,  71,  //0x40  71 /         VK_DIVIDE
  5766:     0x0070, 0, 0x0000, 0x0000,  99,  //0x63  99 F1        VK_F1
  5767:     0x0071, 0, 0x0000, 0x0000, 100,  //0x64 100 F2        VK_F2
  5768:     0x0072, 0, 0x0000, 0x0000, 101,  //0x65 101 F3        VK_F3
  5769:     0x0073, 0, 0x0000, 0x0000, 102,  //0x66 102 F4        VK_F4
  5770:     0x0074, 0, 0x0000, 0x0000, 103,  //0x67 103 F5        VK_F5
  5771:     0x0075, 0, 0x0000, 0x0000, 104,  //0x68 104 F6        VK_F6
  5772:     0x0076, 0, 0x0000, 0x0000, 105,  //0x69 105 F7        VK_F7
  5773:     0x0077, 0, 0x0000, 0x0000, 106,  //0x6a 106 F8        VK_F8
  5774:     0x0078, 0, 0x0000, 0x0000, 107,  //0x6b 107 F9        VK_F9
  5775:     0x0079, 0, 0x0000, 0x0000, 108,  //0x6c 108 F10       VK_F10
  5776:     //0x007a, 0, 0x0000, 0x0000,       //                   VK_F11
  5777:     //0x007b, 0, 0x0000, 0x0000,       //                   VK_F12
  5778:     0x007f, 0, 0x0000, 0x0000,  62,  //0x37  62 DEL       VK_DELETE
  5779:     //0x0080, 0, 0x0000, 0x0000,       //                   VK_DEAD_GRAVE
  5780:     //0x0081, 0, 0x0000, 0x0000,       //                   VK_DEAD_ACUTE
  5781:     //0x0082, 0, 0x0000, 0x0000,       //                   VK_DEAD_CIRCUMFLEX
  5782:     //0x0083, 0, 0x0000, 0x0000,       //                   VK_DEAD_TILDE
  5783:     //0x0084, 0, 0x0000, 0x0000,       //                   VK_DEAD_MACRON
  5784:     //0x0085, 0, 0x0000, 0x0000,       //                   VK_DEAD_BREVE
  5785:     //0x0086, 0, 0x0000, 0x0000,       //                   VK_DEAD_ABOVEDOT
  5786:     //0x0087, 0, 0x0000, 0x0000,       //                   VK_DEAD_DIAERESIS
  5787:     //0x0088, 0, 0x0000, 0x0000,       //                   VK_DEAD_ABOVERING
  5788:     //0x0089, 0, 0x0000, 0x0000,       //                   VK_DEAD_DOUBLEACUTE
  5789:     //0x008a, 0, 0x0000, 0x0000,       //                   VK_DEAD_CARON
  5790:     //0x008b, 0, 0x0000, 0x0000,       //                   VK_DEAD_CEDILLA
  5791:     //0x008c, 0, 0x0000, 0x0000,       //                   VK_DEAD_OGONEK
  5792:     //0x008d, 0, 0x0000, 0x0000,       //                   VK_DEAD_IOTA
  5793:     //0x008e, 0, 0x0000, 0x0000,       //                   VK_DEAD_VOICED_SOUND
  5794:     //0x008f, 0, 0x0000, 0x0000,       //                   VK_DEAD_SEMIVOICED_SOUND
  5795:     //0x0090, 0, 0x0000, 0x0000,       //                   VK_NUM_LOCK
  5796:     //0x0091, 0, 0x0000, 0x0000,       //                   VK_SCROLL_LOCK
  5797:     //0x0096, 0, 0x0000, 0x0000,       //                   VK_AMPERSAND
  5798:     //0x0097, 0, 0x0000, 0x0000,       //                   VK_ASTERISK
  5799:     //0x0098, 0, 0x0000, 0x0000,       //                   VK_QUOTEDBL
  5800:     //0x0099, 0, 0x0000, 0x0000,       //                   VK_LESS
  5801:     //0x009a, 0, 0x0000, 0x0000,       //                   VK_PRINTSCREEN
  5802:     0x009b, 0, 0x0000, 0x0000,  52,  //0x5e  52 INS       VK_INSERT
  5803:     //0x009c, 0, 0x0000, 0x0000,       //                   VK_HELP
  5804:     //0x009d, 0, 0x0000, 0x0000,       //                   VK_META
  5805:     //0x00a0, 0, 0x0000, 0x0000,       //                   VK_GREATER
  5806:     //0x00a1, 0, 0x0000, 0x0000,       //                   VK_BRACELEFT
  5807:     //0x00a2, 0, 0x0000, 0x0000,       //                   VK_BRACERIGHT
  5808:     //0x00c0, 0, 0x0000, 0x0000,       //                   VK_BACK_QUOTE
  5809:     //0x00de, 0, 0x0000, 0x0000,       //                   VK_QUOTE
  5810:     //0x00e0, 0, 0x0000, 0x0000,       //                   VK_KP_UP
  5811:     //0x00e1, 0, 0x0000, 0x0000,       //                   VK_KP_DOWN
  5812:     //0x00e2, 0, 0x0000, 0x0000,       //                   VK_KP_LEFT
  5813:     //0x00e3, 0, 0x0000, 0x0000,       //                   VK_KP_RIGHT
  5814:     //0x00f0, 0, 0x0000, 0x0000,       //                   VK_ALPHANUMERIC
  5815:     //0x00f1, 0, 0x0000, 0x0000,       //                   VK_KATAKANA
  5816:     //0x00f2, 0, 0x0000, 0x0000,       //                   VK_HIRAGANA
  5817:     //0x00f3, 0, 0x0000, 0x0000,       //                   VK_FULL_WIDTH
  5818:     //0x00f4, 0, 0x0000, 0x0000,       //                   VK_HALF_WIDTH
  5819:     //0x00f5, 0, 0x0000, 0x0000,       //                   VK_ROMAN_CHARACTERS
  5820:     //0x0100, 0, 0x0000, 0x0000,       //                   VK_ALL_CANDIDATES
  5821:     //0x0101, 0, 0x0000, 0x0000,       //                   VK_PREVIOUS_CANDIDATE
  5822:     //0x0102, 0, 0x0000, 0x0000,       //                   VK_CODE_INPUT
  5823:     //0x0103, 0, 0x0000, 0x0000,       //                   VK_JAPANESE_KATAKANA
  5824:     //0x0104, 0, 0x0000, 0x0000,       //                   VK_JAPANESE_HIRAGANA
  5825:     //0x0105, 0, 0x0000, 0x0000,       //                   VK_JAPANESE_ROMAN
  5826:     //0x0106, 0, 0x0000, 0x0000,       //                   VK_KANA_LOCK
  5827:     //0x0107, 0, 0x0000, 0x0000,       //                   VK_INPUT_METHOD_ON_OFF
  5828:     0x0200, 0, 0x0000, 0x0000,  23,  //0x1b  23 @`        VK_AT
  5829:     0x0201, 0, 0x0000, 0x0000,  35,  //0x28  35 :+        VK_COLON
  5830:     0x0202, 0, 0x0000, 0x0000,  11,  //0x0d  11 ^~        VK_CIRCUMFLEX
  5831:     //0x0203, 0, 0x0000, 0x0000,       //                   VK_DOLLAR
  5832:     //0x0204, 0, 0x0000, 0x0000,       //                   VK_EURO_SIGN
  5833:     //0x0205, 0, 0x0000, 0x0000,       //                   VK_EXCLAMATION_MARK
  5834:     //0x0206, 0, 0x0000, 0x0000,       //                   VK_INVERTED_EXCLAMATION_MARK
  5835:     //0x0207, 0, 0x0000, 0x0000,       //                   VK_LEFT_PARENTHESIS
  5836:     //0x0208, 0, 0x0000, 0x0000,       //                   VK_NUMBER_SIGN
  5837:     //0x0209, 0, 0x0000, 0x0000,       //                   VK_PLUS
  5838:     //0x020a, 0, 0x0000, 0x0000,       //                   VK_RIGHT_PARENTHESIS
  5839:     //0x020b, 0, 0x0000, 0x0000,       //                   VK_UNDERSCORE
  5840:     //0x020c, 0, 0x0000, 0x0000,       //                   VK_WINDOWS
  5841:     0x020d, 0, 0x0000, 0x0000,  95,  //0x58  95 XF4       VK_CONTEXT_MENU
  5842:     //0xf000, 0, 0x0000, 0x0000,       //                   VK_F13
  5843:     //0xf001, 0, 0x0000, 0x0000,       //                   VK_F14
  5844:     //0xf002, 0, 0x0000, 0x0000,       //                   VK_F15
  5845:     //0xf003, 0, 0x0000, 0x0000,       //                   VK_F16
  5846:     //0xf004, 0, 0x0000, 0x0000,       //                   VK_F17
  5847:     //0xf005, 0, 0x0000, 0x0000,       //                   VK_F18
  5848:     //0xf006, 0, 0x0000, 0x0000,       //                   VK_F19
  5849:     //0xf007, 0, 0x0000, 0x0000,       //                   VK_F20
  5850:     //0xf008, 0, 0x0000, 0x0000,       //                   VK_F21
  5851:     //0xf009, 0, 0x0000, 0x0000,       //                   VK_F22
  5852:     //0xf00a, 0, 0x0000, 0x0000,       //                   VK_F23
  5853:     //0xf00b, 0, 0x0000, 0x0000,       //                   VK_F24
  5854:     //0xff20, 0, 0x0000, 0x0000,       //                   VK_COMPOSE
  5855:     //0xff58, 0, 0x0000, 0x0000,       //                   VK_BEGIN
  5856:     //0xff7e, 0, 0x0000, 0x0000,       //                   VK_ALT_GRAPH
  5857:     //0xffc8, 0, 0x0000, 0x0000,       //                   VK_STOP
  5858:     //0xffc9, 0, 0x0000, 0x0000,       //                   VK_AGAIN
  5859:     //0xffca, 0, 0x0000, 0x0000,       //                   VK_PROPS
  5860:     //0xffcb, 0, 0x0000, 0x0000,       //                   VK_UNDO
  5861:     //0xffcd, 0, 0x0000, 0x0000,       //                   VK_COPY
  5862:     //0xffcf, 0, 0x0000, 0x0000,       //                   VK_PASTE
  5863:     //0xffd0, 0, 0x0000, 0x0000,       //                   VK_FIND
  5864:     //0xffd1, 0, 0x0000, 0x0000,       //                   VK_CUT
  5865:   };
  5866: */
  5867:   //  perl misc/itoc.pl xeij/Keyboard.java KBD_KEY_MAP
  5868:   public static final char[] KBD_KEY_MAP = "\b\0\0\09\t\0\0\0:\n\1\0\0;\n\4\0\0U\20\0\0\0m\21\2\0\0n\21\3\0\0`\22\2\0\0\\\22\3\0\0^\23\0\0\0a\24\0\0\0003\33\0\0\08\35\0\0\0] \0\0\0<!\0\0\0?\"\0\0\0@$\0\0\0=%\0\0\0B&\0\0\0C\'\0\0\0D(\0\0\0E,\0\0\0,-\0\0\0\n.\0\0\0-/\0\0\0.0\0\0\0\t1\0\0\0\0002\0\0\0\0013\0\0\0\0024\0\0\0\0035\0\0\0\0046\0\0\0\0057\0\0\0\68\0\0\0\79\0\0\0\b;\0\0\0\"A\0\0\0\31B\0\0\0)C\0\0\0\'D\0\0\0\33E\0\0\0\17F\0\0\0\34G\0\0\0\35H\0\0\0\36I\0\0\0\24J\0\0\0\37K\0\0\0 L\0\0\0!M\0\0\0+N\0\0\0*O\0\0\0\25P\0\0\0\26Q\0\0\0\rR\0\0\0\20S\0\0\0\32T\0\0\0\21U\0\0\0\23V\0\0\0(W\0\0\0\16X\0\0\0&Y\0\0\0\22Z\0\0\0%[\0\0\0\30\\\0\\\0\f\\\0|@\f\\\0\34\200\f\\\0\uffff\300\f\\\0_\0/\\\0\\@/\\\0_@/\\\0\\\200/\\\0_\200/\\\0\\\300/\\\0_\300/]\0\0\0$`\0\0\0Va\0\0\0Rb\0\0\0Sc\0\0\0Td\0\0\0Ne\0\0\0Of\0\0\0Pg\0\0\0Jh\0\0\0Ki\0\0\0Lj\0\0\0Hk\0\0\0Ml\0\0\0Wm\0\0\0In\0\0\0Xo\0\0\0Gp\0\0\0cq\0\0\0dr\0\0\0es\0\0\0ft\0\0\0gu\0\0\0hv\0\0\0iw\0\0\0jx\0\0\0ky\0\0\0l\177\0\0\0>\233\0\0\0004\u0200\0\0\0\27\u0201\0\0\0#\u0202\0\0\0\13\u020d\0\0\0_".toCharArray ();
  5869:   public static final int KBD_KEY_MAP_LENGTH = KBD_KEY_MAP.length;
  5870: 
  5871:   //キーのビットマップ
  5872:   //  可変キーとLEDキーはキー毎にビットマップを用意する
  5873:   //  可変キーのビットマップの幅はキーの幅
  5874:   public static final int[][][] kbdVarStatBitmap = new int[256][][];  //文字コード→状態→可変キーのビットマップ
  5875:   public static final int[][][] kbdLedStatBitmap = new int[KBD_LED_KEYS][][];  //LEDキーの番号→状態→LEDキーのビットマップ
  5876: 
  5877:   //種類毎に別々に用意するもの
  5878:   //  ビットマップ
  5879:   //    ピクセルオフセット→RGBコード
  5880:   //    固定キーのビットマップの幅はキーボードの幅
  5881:   //  番号マップ
  5882:   //    ピクセルオフセット→番号。-1=キーがない
  5883:   //    マウスの座標にどのキーがあるか瞬時に判断するための配列
  5884:   //  レクタングル
  5885:   //    {}または{x,y,w,h}または{x1,y1,w1,h1,x2,y2,w2,h2}
  5886:   //    1段目を囲む0個~2個の長方形。欠番は0個、RETURNキーとSHIFTキーは2個、その他は1個
  5887:   //    キーを描き変えるときに使う
  5888:   public static final BufferedImage[] kbdDataTypeImage = new BufferedImage[KBD_TYPES];  //種類→イメージ
  5889:   public static final int[] kbdDataTypeWidth = new int[KBD_TYPES];  //種類→キーボードの幅
  5890:   public static final int[] kbdDataTypeHeight = new int[KBD_TYPES];  //種類→キーボードの高さ
  5891:   public static final int[][] kbdDataTypeBitmap = new int[KBD_TYPES][];  //種類→ビットマップ
  5892:   public static final byte[][] kbdDataTypeIndexMap = new byte[KBD_TYPES][];  //種類→番号マップ
  5893:   public static final int[][][] kbdDataTypeStatFixBitmap = new int[KBD_TYPES][][];  //種類→状態→固定キーのビットマップ
  5894:   public static final int[][][] kbdDataTypeIndexRect = new int[KBD_TYPES][][];  //種類→番号→レクタングル
  5895:   public static final int[][] kbdDataTypeIndexCharacterStat = new int[KBD_TYPES][];  //種類→番号→最後に描画したときの文字<<8|状態。-1=まだ描画されていない
  5896: 
  5897:   //現在の状態
  5898:   //  表示位置のXEiJ.pnlKeyboardX,XEiJ.pnlKeyboardYはパネル側で制御するのでここにはない
  5899:   public static boolean kbdOn;  //true=表示する,false=表示しない
  5900:   public static int kbdType;  //キーボードの種類。KBD_STANDARD_TYPEまたはKBD_COMPACT_TYPE
  5901:   public static int kbdWidth;  //キーボードの幅
  5902:   public static int kbdHeight;  //キーボードの高さ
  5903:   public static BufferedImage kbdImage;  //イメージ
  5904:   public static int[] kbdBitmap;  //ビットマップ
  5905:   public static byte[] kbdIndexMap;  //番号マップ
  5906:   public static final int[] kbdStat = new int[KBD_ALL_KEYS];  //番号→状態
  5907:   public static int kbdPointedIndex;  //ポイントされているキーの番号。-1=どのキーもポイントされていない
  5908:   public static TimerTask kbdRepeatTask;  //リピート中のキーコードをMFPに転送するタスク。null=リピート中ではない
  5909:   public static int kbdRepeatDelay;  //リピートディレイ(ms)
  5910:   public static int kbdRepeatInterval;  //リピートインターバル(ms)
  5911: 
  5912:   public static final int KBD_F11_FULLSCREEN = 0;
  5913:   public static final int KBD_F11_SCREENSHOT = 1;
  5914:   public static final int KBD_F11_STOPSTART = 2;
  5915:   public static int kbdF11Mode;  //F11キーが押されたとき何をするか
  5916: 
  5917:   //kbdInit ()
  5918:   //  キーボードを初期化する
  5919:   public static void kbdInit () {
  5920: 
  5921:     //配列を初期化する
  5922:     for (int i = 0; i < KBD_VAR_KEYS; i++) {
  5923:       int t = KBD_CAPS_BASE[i];
  5924:       KBD_CAPS_CHR[i] = (byte) t;
  5925:       KBD_NORMAL_CHR[i] = (byte) (t >= 'A' && t <= 'Z' ? t ^ 0x20 : t);
  5926:       KBD_CODE_CHR[i] = (byte) (t >= '0' && t <= '9' || t >= 'A' && t <= 'F' ? t : 0);
  5927:       t = KBD_CAPS_SHIFT_BASE[i];
  5928:       KBD_CAPS_SHIFT_CHR[i] = (byte) t;
  5929:       KBD_SHIFT_CHR[i] = (byte) (t >= 'a' && t <= 'z' ? t ^ 0x20 : t);
  5930:       KBD_CTRL_CHR[i] = (byte) (t < 0x20 ? t : t >= 0x40 ? t & 0x1f : 0);
  5931:       t = KBD_KANA_BASE[i];
  5932:       KBD_KANA_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  5933:       t = KBD_KANA_SHIFT_BASE[i];
  5934:       KBD_KANA_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  5935:       t = KBD_KANA_AIU_BASE[i];
  5936:       KBD_KANA_AIU_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  5937:       t = KBD_KANA_AIU_SHIFT_BASE[i];
  5938:       KBD_KANA_AIU_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  5939:       t = KBD_ROMA_BASE[i];
  5940:       KBD_ROMA_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  5941:       t = KBD_ROMA_SHIFT_BASE[i];
  5942:       KBD_ROMA_SHIFT_CHR[i] = (byte) (t <= 0xff ? t : t - 0xfec0);
  5943:       t = KBD_NUM_BASE[i];
  5944:       if (t != ' ') {
  5945:         KBD_NUM_CAPS_CHR[i] =
  5946:           KBD_NUM_CHR[i] =
  5947:             KBD_NUM_CODE_CHR[i] =
  5948:               KBD_NUM_CAPS_SHIFT_CHR[i] =
  5949:                 KBD_NUM_SHIFT_CHR[i] =
  5950:                   KBD_NUM_CTRL_CHR[i] =
  5951:                     KBD_NUM_KANA_CHR[i] =
  5952:                       KBD_NUM_KANA_SHIFT_CHR[i] =
  5953:                         KBD_NUM_KANA_AIU_CHR[i] =
  5954:                           KBD_NUM_KANA_AIU_SHIFT_CHR[i] =
  5955:                             KBD_NUM_ROMA_CHR[i] =
  5956:                               KBD_NUM_ROMA_SHIFT_CHR[i] = (byte) t;
  5957:       } else {
  5958:         KBD_NUM_CAPS_CHR[i] = KBD_CAPS_CHR[i];
  5959:         KBD_NUM_CHR[i] = KBD_NORMAL_CHR[i];
  5960:         KBD_NUM_CODE_CHR[i] = KBD_CODE_CHR[i];
  5961:         KBD_NUM_CAPS_SHIFT_CHR[i] = KBD_CAPS_SHIFT_CHR[i];
  5962:         KBD_NUM_SHIFT_CHR[i] = KBD_SHIFT_CHR[i];
  5963:         KBD_NUM_CTRL_CHR[i] = KBD_CTRL_CHR[i];
  5964:         KBD_NUM_KANA_CHR[i] = KBD_KANA_CHR[i];
  5965:         KBD_NUM_KANA_SHIFT_CHR[i] = KBD_KANA_SHIFT_CHR[i];
  5966:         KBD_NUM_KANA_AIU_CHR[i] = KBD_KANA_AIU_CHR[i];
  5967:         KBD_NUM_KANA_AIU_SHIFT_CHR[i] = KBD_KANA_AIU_SHIFT_CHR[i];
  5968:         KBD_NUM_ROMA_CHR[i] = KBD_ROMA_CHR[i];
  5969:         KBD_NUM_ROMA_SHIFT_CHR[i] = KBD_ROMA_SHIFT_CHR[i];
  5970:       }
  5971:     }
  5972: 
  5973:     //可変キーを描く
  5974:     //kbdVarStatBitmap = new int[256][][];
  5975:     for (int i = 0; i < 256; i++) {
  5976:       int[] letter = KBD_VAR_LETTER[i];
  5977:       if (letter == null) {
  5978:         kbdVarStatBitmap[i] = null;
  5979:         continue;
  5980:       }
  5981:       int[][] statBitmap = kbdVarStatBitmap[i] = new int[4][];
  5982:       for (int stat = 0; stat < 4; stat++) {
  5983:         if (KBD_USE_ROM_FONT) {  //ROMフォントを使う
  5984:           kbdDrawKey2 (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
  5985:                        KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, null, i, stat);
  5986:         } else {
  5987:           kbdDrawKey (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
  5988:                       KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, null, letter, stat);
  5989:         }
  5990:       }
  5991:     }
  5992: 
  5993:     //LEDキーを描く
  5994:     //kbdLedStatBitmap = new int[KBD_LED_KEYS][][];
  5995:     for (int i = 0; i < KBD_LED_KEYS; i++) {
  5996:       int[] letter = KBD_LED_LETTER[i];
  5997:       if (letter == null) {
  5998:         kbdLedStatBitmap[i] = null;
  5999:         continue;
  6000:       }
  6001:       int[][] statBitmap = kbdLedStatBitmap[i] = new int[8][];
  6002:       for (int stat = 0; stat < 8; stat++) {
  6003:         kbdDrawKey (statBitmap[stat] = new int[KBD_KEY_WIDTH * KBD_KEY_HEIGHT],
  6004:                     KBD_KEY_WIDTH, 0, 0, KBD_KEY_WIDTH, KBD_KEY_HEIGHT, 0, 0, KBD_LED_COLOR[i][stat >> 2], letter, stat & 0x03);
  6005:       }
  6006:     }
  6007: 
  6008:     //種類毎に別々に用意するもの
  6009:     //kbdDataTypeImage = new BufferedImage[KBD_TYPES];
  6010:     //kbdDataTypeWidth = new int[KBD_TYPES];
  6011:     //kbdDataTypeHeight = new int[KBD_TYPES];
  6012:     //kbdDataTypeBitmap = new int[KBD_TYPES][];
  6013:     //kbdDataTypeIndexMap = new byte[KBD_TYPES][];
  6014:     //kbdDataTypeStatFixBitmap = new int[KBD_TYPES][][];
  6015:     //kbdDataTypeIndexRect = new int[KBD_TYPES][][];
  6016:     //kbdDataTypeIndexCharacterStat = new int[KBD_TYPES][];
  6017:     for (int type = 0; type < KBD_TYPES; type++) {
  6018:       int cols = KBD_TYPE_COLS[type];
  6019:       int rows = KBD_TYPE_ROWS[type];
  6020:       int width = kbdDataTypeWidth[type] = KBD_PADDING_LEFT + KBD_COL_WIDTH * cols + KBD_PADDING_RIGHT;
  6021:       int height = kbdDataTypeHeight[type] = KBD_PADDING_TOP + KBD_ROW_HEIGHT * rows + KBD_PADDING_BOTTOM;
  6022:       BufferedImage image = kbdDataTypeImage[type] = new BufferedImage (width, height, BufferedImage.TYPE_INT_RGB);
  6023:       kbdDataTypeBitmap[type] = ((DataBufferInt) image.getRaster ().getDataBuffer ()).getData ();
  6024:       Arrays.fill (kbdDataTypeBitmap[type], LnF.LNF_RGB[KBD_BACKGROUND_COLOR]);
  6025:       byte[] indexMap = kbdDataTypeIndexMap[type] = new byte[width * height];
  6026:       Arrays.fill (kbdDataTypeIndexMap[type], (byte) -1);
  6027:       kbdDataTypeStatFixBitmap[type] = new int[4][];
  6028:       int[][] indexRect = kbdDataTypeIndexRect[type] = new int[KBD_ALL_KEYS][];
  6029:       int[] indexCharacterStat = kbdDataTypeIndexCharacterStat[type] = new int[KBD_ALL_KEYS];
  6030:       Arrays.fill (indexCharacterStat, -1);  //初回はすべてのキーを描画する
  6031: 
  6032:       //可変キーとLEDキーのレクタングルを作る
  6033:       int[][] ledBox = KBD_TYPE_LED_BOX[type];
  6034:       for (int i = 0; i < KBD_VAR_KEYS + KBD_LED_KEYS; i++) {
  6035:         int[] box = i < KBD_VAR_KEYS ? KBD_VAR_BOX[i] : ledBox[i - KBD_VAR_KEYS];
  6036:         if (box == null) {  //欠番。Standard KeyboardのNUMキー
  6037:           indexRect[i] = new int[0];
  6038:           continue;
  6039:         }
  6040:         int x = KBD_PADDING_LEFT + KBD_COL_WIDTH * box[0];
  6041:         int y = KBD_PADDING_TOP + KBD_ROW_HEIGHT * box[1];
  6042:         int w = KBD_COL_WIDTH * box[2] - 1;
  6043:         int h = KBD_ROW_HEIGHT * box[3] - 1;
  6044:         indexRect[i] = box == null ? new int[0] : new int[] { x, y, w, h };
  6045:         int tx = x + KBD_TOUCHABLE_AREA;
  6046:         int ty = y + KBD_TOUCHABLE_AREA;
  6047:         int tw = w - KBD_TOUCHABLE_AREA * 2;
  6048:         int th = h - KBD_TOUCHABLE_AREA * 2;
  6049:         int p = tx + width * ty;
  6050:         for (int v = 0; v < th; v++) {
  6051:           for (int u = 0; u < tw; u++) {
  6052:             indexMap[p + u] = (byte) i;
  6053:           }
  6054:           p += width;
  6055:         }
  6056:       }
  6057: 
  6058:       //固定キーを描く
  6059:       for (int stat = 0; stat < 4; stat++) {
  6060:         int[] bitmap = kbdDataTypeStatFixBitmap[type][stat] = new int[width * height];
  6061:         Arrays.fill (bitmap, LnF.LNF_RGB[KBD_BACKGROUND_COLOR]);
  6062:       }
  6063:       int[][] fixBox = KBD_TYPE_FIX_BOX[type];
  6064:       int[] fixStyle = KBD_TYPE_FIX_STYLE[type];
  6065:       for (int i = KBD_VAR_KEYS + KBD_LED_KEYS; i < KBD_ALL_KEYS; i++) {
  6066:         int[] box = fixBox[i - (KBD_VAR_KEYS + KBD_LED_KEYS)];
  6067:         if (box == null) {  //欠番。Compact Keyboardのテンキー
  6068:           indexRect[i] = new int[0];
  6069:           continue;
  6070:         }
  6071:         int col = box[0];  //列
  6072:         int row = box[1];  //行
  6073:         int wide = box[2];  //幅
  6074:         int tall = box[3];  //高さ
  6075:         int x = KBD_PADDING_LEFT + KBD_COL_WIDTH * col;
  6076:         int y = KBD_PADDING_TOP + KBD_ROW_HEIGHT * row;
  6077:         int w = KBD_COL_WIDTH * wide - 1;
  6078:         int h = KBD_ROW_HEIGHT * tall - 1;
  6079:         int style = fixStyle[i - (KBD_VAR_KEYS + KBD_LED_KEYS)];
  6080:         if (style == KBD_RETURN_STYLE) {  //RETURNキー
  6081:           //レクタングルの左下を1列x4行削る。キートップの左右を1列ずつ削る
  6082:           int wl = KBD_COL_WIDTH;  //左側
  6083:           int hb = KBD_ROW_HEIGHT * 4;  //下側
  6084:           int wr = w - wl;  //右側
  6085:           int ht = h - hb;  //上側
  6086:           indexRect[i] = new int[] { x, y, w, ht, x + wl, y + ht, wr, hb };
  6087:           int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
  6088:           int ty = y + KBD_TOUCHABLE_AREA;
  6089:           int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
  6090:           int th = ht - KBD_TOUCHABLE_AREA * 2;
  6091:           int p = tx + width * ty;
  6092:           for (int v = 0; v < th; v++) {
  6093:             for (int u = 0; u < tw; u++) {
  6094:               indexMap[p + u] = (byte) i;
  6095:             }
  6096:             p += width;
  6097:           }
  6098:           tx = x + wl + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
  6099:           ty = y + ht - KBD_TOUCHABLE_AREA;
  6100:           tw = wr - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
  6101:           th = hb;
  6102:           p = tx + width * ty;
  6103:           for (int v = 0; v < th; v++) {
  6104:             for (int u = 0; u < tw; u++) {
  6105:               indexMap[p + u] = (byte) i;
  6106:             }
  6107:             p += width;
  6108:           }
  6109:           //1段目
  6110:           for (int stat = 0; stat < 2; stat++) {  //!pressedのみ
  6111:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  6112:             kbdDrawLine (bitmap, x + width * y,
  6113:                          1, 1, LnF.LNF_RGB[KBD_TOP_LEFT_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_TOP_COLOR],  //→→
  6114:                          width, 1, LnF.LNF_RGB[KBD_TOP_RIGHT_COLOR], width, h - 2, LnF.LNF_RGB[KBD_RIGHT_COLOR],  //↓↓
  6115:                          -1, 1, LnF.LNF_RGB[KBD_BOTTOM_RIGHT_COLOR], -1, wr - 2, LnF.LNF_RGB[KBD_BOTTOM_COLOR],  //←
  6116:                          -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, hb - 1, LnF.LNF_RGB[KBD_LEFT_COLOR],  //↑
  6117:                          -1, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR],  -1, wl - 1, LnF.LNF_RGB[KBD_BOTTOM_COLOR],  //←
  6118:                          -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, ht - 2, LnF.LNF_RGB[KBD_LEFT_COLOR]);  //↑
  6119:           }
  6120:           for (int stat = 2; stat < 4; stat++) {  //pressedのみ
  6121:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  6122:             kbdDrawLine (bitmap, x + width * y,
  6123:                          1, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_HOLE_COLOR],  //→→
  6124:                          width, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], width, h - 2, LnF.LNF_RGB[KBD_HOLE_COLOR],  //↓↓
  6125:                          -1, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], -1, wr - 2, LnF.LNF_RGB[KBD_HOLE_COLOR],  //←
  6126:                          -width, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], -width, hb - 1, LnF.LNF_RGB[KBD_HOLE_COLOR],  //↑
  6127:                          -1, 1, LnF.LNF_RGB[KBD_HOLE_COLOR],  -1, wl - 1, LnF.LNF_RGB[KBD_HOLE_COLOR],  //←
  6128:                          -width, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], -width, ht - 2, LnF.LNF_RGB[KBD_HOLE_COLOR]);  //↑
  6129:           }
  6130:           int u = KBD_COL_WIDTH;
  6131:           x += 1 + u;
  6132:           y += 1;
  6133:           w -= 2 + u * 2;
  6134:           h -= 2;
  6135:           wr -= 2 + u * 2;
  6136:           ht -= 2;
  6137:           //島
  6138:           for (int stat = 0; stat < 4; stat++) {
  6139:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  6140:             kbdFillRect (bitmap, width, x - u, y, u, ht, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //左側の上半分
  6141:             kbdFillRect (bitmap, width, x + wl - u, y + ht, u, h - ht, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //左側の下半分
  6142:             kbdFillRect (bitmap, width, x + w, y, u, h, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //右側
  6143:           }
  6144:           //2段目
  6145:           int lx = x;
  6146:           int ly = y;
  6147:           int lw = w;
  6148:           int lh = h;
  6149:           for (int stat = 0; stat < 4; stat++) {
  6150:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  6151:             kbdDrawLine (bitmap, x + width * y,
  6152:                          1, 1, LnF.LNF_RGB[KBD_TOP_LEFT_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_TOP_COLOR],  //→→
  6153:                          width, 1, LnF.LNF_RGB[KBD_TOP_RIGHT_COLOR], width, h - 2, LnF.LNF_RGB[KBD_RIGHT_COLOR],  //↓↓
  6154:                          -1, 1, LnF.LNF_RGB[KBD_BOTTOM_RIGHT_COLOR], -1, wr - 2, LnF.LNF_RGB[KBD_BOTTOM_COLOR],  //←
  6155:                          -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, hb - 1, LnF.LNF_RGB[KBD_LEFT_COLOR],  //↑
  6156:                          -1, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -1, wl - 1, LnF.LNF_RGB[KBD_BOTTOM_COLOR],  //←
  6157:                          -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, ht - 2, LnF.LNF_RGB[KBD_LEFT_COLOR]);  //↑
  6158:           }
  6159:           x++;
  6160:           y++;
  6161:           w -= 2;
  6162:           h -= 2;
  6163:           wr -= 2;
  6164:           ht -= 2;
  6165:           //3段目
  6166:           for (int stat = 0; stat < 4; stat++) {
  6167:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  6168:             kbdDrawLine (bitmap, x + width * y,
  6169:                          1, 1, LnF.LNF_RGB[KBD_TOP_LEFT_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_TOP_COLOR],  //→→
  6170:                          width, 1, LnF.LNF_RGB[KBD_TOP_RIGHT_COLOR], width, h - 2, LnF.LNF_RGB[KBD_RIGHT_COLOR],  //↓↓
  6171:                          -1, 1, LnF.LNF_RGB[KBD_BOTTOM_RIGHT_COLOR], -1, wr - 2, LnF.LNF_RGB[KBD_BOTTOM_COLOR],  //←
  6172:                          -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, hb - 1, LnF.LNF_RGB[KBD_LEFT_COLOR],  //↑
  6173:                          -1, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -1, wl - 1, LnF.LNF_RGB[KBD_BOTTOM_COLOR],  //←
  6174:                          -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, ht - 2, LnF.LNF_RGB[KBD_LEFT_COLOR]);  //↑
  6175:           }
  6176:           x++;
  6177:           y++;
  6178:           w -= 2;
  6179:           h -= 2;
  6180:           wr -= 2;
  6181:           ht -= 2;
  6182:           //キートップと文字
  6183:           int[] letter = KBD_FIX_LETTER[KBD_RETURN_INDEX - (KBD_VAR_KEYS + KBD_LED_KEYS)];
  6184:           for (int stat = 0; stat < 4; stat++) {
  6185:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  6186:             boolean pointed = (stat & KBD_POINTED_MASK) != 0;
  6187:             int color = pointed ? LnF.LNF_RGB[KBD_POINTED_COLOR] : LnF.LNF_RGB[KBD_KEYTOP_COLOR];
  6188:             kbdFillRect (bitmap, width, x, y, w, ht, color);  //上半分
  6189:             kbdFillRect (bitmap, width, x + wl, y + ht, w - wl, h - ht, color);  //下半分
  6190:             kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter);
  6191:           }
  6192:         } else if (style == KBD_SHIFT_STYLE) {  //SHIFTキー
  6193:           int xr = x + KBD_COL_WIDTH * (wide - 9);  //右
  6194:           w = KBD_COL_WIDTH * 9 - 1;  //幅
  6195:           indexRect[i] = new int[] { x, y, w, h, xr, y, w, h };
  6196:           int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
  6197:           int ty = y + KBD_TOUCHABLE_AREA;
  6198:           int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH) * 2;
  6199:           int th = h - KBD_TOUCHABLE_AREA * 2;
  6200:           int p = tx + width * ty;
  6201:           for (int v = 0; v < th; v++) {
  6202:             for (int u = 0; u < tw; u++) {
  6203:               indexMap[p + u] = (byte) i;
  6204:             }
  6205:             p += width;
  6206:           }
  6207:           tx = xr + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + KBD_COL_WIDTH);
  6208:           p = tx + width * ty;
  6209:           for (int v = 0; v < th; v++) {
  6210:             for (int u = 0; u < tw; u++) {
  6211:               indexMap[p + u] = (byte) i;
  6212:             }
  6213:             p += width;
  6214:           }
  6215:           int[] letter = KBD_FIX_LETTER[KBD_SHIFT_INDEX - (KBD_VAR_KEYS + KBD_LED_KEYS)];
  6216:           for (int stat = 0; stat < 4; stat++) {
  6217:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  6218:             kbdDrawKey (bitmap, width, x, y, w, h, KBD_COL_WIDTH, 0, null, letter, stat);
  6219:             kbdDrawKey (bitmap, width, xr, y, w, h, KBD_COL_WIDTH, 0, null, letter, stat);
  6220:           }
  6221:         } else {  //RETURNキーとSHIFTキー以外
  6222:           if (style == KBD_FUNCTION_STYLE) {  //F1~F10
  6223:             y += KBD_ROW_HEIGHT >> 1;  //キーの上端を1/2行削る
  6224:             h -= KBD_ROW_HEIGHT >> 1;
  6225:           }
  6226:           int pw = (style == KBD_NARROWER_STYLE ? KBD_COL_WIDTH >> 1 :  //キートップの左右を1/2列ずつ削る
  6227:                     style == KBD_NARROW_STYLE ? KBD_COL_WIDTH :  //キートップの左右を1列ずつ削る
  6228:                     0);
  6229:           int ph = (style == KBD_SHORTER_STYLE ? KBD_ROW_HEIGHT :  //キートップの上下を1行ずつ削る
  6230:                     style == KBD_SHORT_STYLE ? KBD_ROW_HEIGHT << 1 :  //キートップの上下を2行ずつ削る
  6231:                     0);
  6232:           indexRect[i] = new int[] { x, y, w, h };
  6233:           int tx = x + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + pw);
  6234:           int ty = y + (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + ph);
  6235:           int tw = w - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + pw) * 2;
  6236:           int th = h - (KBD_TOUCHABLE_AREA == 0 ? 0 : KBD_TOUCHABLE_AREA + ph) * 2;
  6237:           int p = tx + width * ty;
  6238:           for (int v = 0; v < th; v++) {
  6239:             for (int u = 0; u < tw; u++) {
  6240:               indexMap[p + u] = (byte) i;
  6241:             }
  6242:             p += width;
  6243:           }
  6244:           for (int stat = 0; stat < 4; stat++) {
  6245:             int[] bitmap = kbdDataTypeStatFixBitmap[type][stat];
  6246:             kbdDrawKey (bitmap, width, x, y, w, h, pw, ph, null, KBD_FIX_LETTER[i - (KBD_VAR_KEYS + KBD_LED_KEYS)], stat);
  6247:           }
  6248:         }  //RETURNキー以外
  6249:       }  //for i
  6250:     }  //for type
  6251: 
  6252:     //現在の状態
  6253:     if (kbdOn) {
  6254:       kbdWidth = kbdDataTypeWidth[kbdType];
  6255:       kbdHeight = kbdDataTypeHeight[kbdType];
  6256:       kbdImage = kbdDataTypeImage[kbdType];
  6257:       kbdBitmap = kbdDataTypeBitmap[kbdType];
  6258:       kbdIndexMap = kbdDataTypeIndexMap[kbdType];
  6259:       kbdFlush ();
  6260:     } else {
  6261:       kbdWidth = 0;
  6262:       kbdHeight = 0;
  6263:       kbdImage = null;
  6264:       kbdBitmap = null;
  6265:       kbdIndexMap = null;
  6266:     }
  6267:     //kbdStat = new int[KBD_ALL_KEYS];
  6268:     Arrays.fill (kbdStat, 0);
  6269:     kbdPointedIndex = -1;
  6270:     if (!MC68901.MFP_KBD_ON) {
  6271:       kbdRepeatTask = null;
  6272:     }
  6273:     kbdRepeatDelay = 200 + 100 * 3;
  6274:     kbdRepeatInterval = 30 + 5 * 4 * 4;
  6275: 
  6276:     kbdF11Mode = KBD_F11_FULLSCREEN;
  6277:   }  //kbdInit()
  6278: 
  6279:   //kbdDrawKey (bitmap, width, x, y, w, h, u, v, ledColors, letter, stat)
  6280:   //  キーを描く
  6281:   //  bitmap     ビットマップ
  6282:   //  width      bitmapの幅(px)
  6283:   //  x          キーのx座標(px)
  6284:   //  y          キーのy座標(px)
  6285:   //  w          キーの幅(px)
  6286:   //  h          キーの高さ(px)
  6287:   //  u          キートップの左右を削る幅(px)
  6288:   //  v          キートップの上下を削る幅(px)
  6289:   //  ledColors  LEDの色。[0]=キートップ側の色(rgb),[1]=ボーダー側の色(rgb)
  6290:   //  letter     文字のパターン
  6291:   //  stat       キーの状態。bit0=pointed,bit1=pressed
  6292:   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) {
  6293:     boolean pointed = (stat & KBD_POINTED_MASK) != 0;
  6294:     boolean pressed = (stat & KBD_PRESSED_MASK) != 0;
  6295:     //1段目
  6296:     if (!pressed) {
  6297:       kbdDrawLine (bitmap, x + width * y,
  6298:                    1, 1, LnF.LNF_RGB[KBD_TOP_LEFT_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_TOP_COLOR],
  6299:                    width, 1, LnF.LNF_RGB[KBD_TOP_RIGHT_COLOR], width, h - 2, LnF.LNF_RGB[KBD_RIGHT_COLOR],
  6300:                    -1, 1, LnF.LNF_RGB[KBD_BOTTOM_RIGHT_COLOR], -1, w - 2, LnF.LNF_RGB[KBD_BOTTOM_COLOR],
  6301:                    -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, h - 2, LnF.LNF_RGB[KBD_LEFT_COLOR]);
  6302:     } else {
  6303:       kbdDrawLine (bitmap, x + width * y,
  6304:                    1, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_HOLE_COLOR],
  6305:                    width, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], width, h - 2, LnF.LNF_RGB[KBD_HOLE_COLOR],
  6306:                    -1, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], -1, w - 2, LnF.LNF_RGB[KBD_HOLE_COLOR],
  6307:                    -width, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], -width, h - 2, LnF.LNF_RGB[KBD_HOLE_COLOR]);
  6308:     }
  6309:     x += 1 + u;
  6310:     y += 1 + v;
  6311:     w -= 2 + u * 2;
  6312:     h -= 2 + v * 2;
  6313:     //島
  6314:     if (u > 0) {
  6315:       kbdFillRect (bitmap, width, x - u, y, u, h, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //左側
  6316:       kbdFillRect (bitmap, width, x + w, y, u, h, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //右側
  6317:     }
  6318:     if (v > 0) {
  6319:       kbdFillRect (bitmap, width, x, y - v, w, v, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //上側
  6320:       kbdFillRect (bitmap, width, x, y + h, w, v, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //下側
  6321:     }
  6322:     //2段目
  6323:     int lx = x;
  6324:     int ly = y;
  6325:     int lw = w;
  6326:     int lh = h;
  6327:     kbdDrawLine (bitmap, x + width * y,
  6328:                  1, 1, LnF.LNF_RGB[KBD_TOP_LEFT_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_TOP_COLOR],
  6329:                  width, 1, LnF.LNF_RGB[KBD_TOP_RIGHT_COLOR], width, h - 2, LnF.LNF_RGB[KBD_RIGHT_COLOR],
  6330:                  -1, 1, LnF.LNF_RGB[KBD_BOTTOM_RIGHT_COLOR], -1, w - 2, LnF.LNF_RGB[KBD_BOTTOM_COLOR],
  6331:                  -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, h - 2, LnF.LNF_RGB[KBD_LEFT_COLOR]);
  6332:     x++;
  6333:     y++;
  6334:     w -= 2;
  6335:     h -= 2;
  6336:     //3段目
  6337:     kbdDrawLine (bitmap, x + width * y,
  6338:                  1, 1, LnF.LNF_RGB[KBD_TOP_LEFT_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_TOP_COLOR],
  6339:                  width, 1, LnF.LNF_RGB[KBD_TOP_RIGHT_COLOR], width, h - 2, LnF.LNF_RGB[KBD_RIGHT_COLOR],
  6340:                  -1, 1, LnF.LNF_RGB[KBD_BOTTOM_RIGHT_COLOR], -1, w - 2, LnF.LNF_RGB[KBD_BOTTOM_COLOR],
  6341:                  -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, h - 2, LnF.LNF_RGB[KBD_LEFT_COLOR]);
  6342:     x++;
  6343:     y++;
  6344:     w -= 2;
  6345:     h -= 2;
  6346:     //キートップ
  6347:     kbdFillRect (bitmap, width, x, y, w, h, pointed ? LnF.LNF_RGB[KBD_POINTED_COLOR] : LnF.LNF_RGB[KBD_KEYTOP_COLOR]);
  6348:     //LED
  6349:     if (ledColors != null) {
  6350:       x += w - KBD_LED_WIDTH >> 1;
  6351:       y += h;
  6352:       kbdFillRect (bitmap, width, x, y - KBD_LED_HEIGHT, KBD_LED_WIDTH, KBD_LED_HEIGHT, ledColors[0]);  //上半分
  6353:       kbdFillRect (bitmap, width, x, y, KBD_LED_WIDTH, pressed ? 2 : 3, ledColors[1]);  //下半分の高さはボーダーの幅
  6354:     }
  6355:     //文字
  6356:     if (letter != null) {  //文字あり
  6357:       kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter);
  6358:     }
  6359:   }  //kbdDrawKey
  6360: 
  6361:   //kbdDrawKey2 (bitmap, width, x, y, w, h, u, v, ledColors, code, stat)
  6362:   //  キーを描く
  6363:   //  bitmap     ビットマップ
  6364:   //  width      bitmapの幅(px)
  6365:   //  x          キーのx座標(px)
  6366:   //  y          キーのy座標(px)
  6367:   //  w          キーの幅(px)
  6368:   //  h          キーの高さ(px)
  6369:   //  u          キートップの左右を削る幅(px)
  6370:   //  v          キートップの上下を削る幅(px)
  6371:   //  ledColors  LEDの色。[0]=キートップ側の色(rgb),[1]=ボーダー側の色(rgb)
  6372:   //  code       文字コード
  6373:   //  stat       キーの状態。bit0=pointed,bit1=pressed
  6374:   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) {
  6375:     if (KBD_USE_ROM_FONT) {  //ROMフォントを使う
  6376:       boolean pointed = (stat & KBD_POINTED_MASK) != 0;
  6377:       boolean pressed = (stat & KBD_PRESSED_MASK) != 0;
  6378:       //1段目
  6379:       if (!pressed) {
  6380:         kbdDrawLine (bitmap, x + width * y,
  6381:                      1, 1, LnF.LNF_RGB[KBD_TOP_LEFT_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_TOP_COLOR],
  6382:                      width, 1, LnF.LNF_RGB[KBD_TOP_RIGHT_COLOR], width, h - 2, LnF.LNF_RGB[KBD_RIGHT_COLOR],
  6383:                      -1, 1, LnF.LNF_RGB[KBD_BOTTOM_RIGHT_COLOR], -1, w - 2, LnF.LNF_RGB[KBD_BOTTOM_COLOR],
  6384:                      -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, h - 2, LnF.LNF_RGB[KBD_LEFT_COLOR]);
  6385:       } else {
  6386:         kbdDrawLine (bitmap, x + width * y,
  6387:                      1, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_HOLE_COLOR],
  6388:                      width, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], width, h - 2, LnF.LNF_RGB[KBD_HOLE_COLOR],
  6389:                      -1, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], -1, w - 2, LnF.LNF_RGB[KBD_HOLE_COLOR],
  6390:                      -width, 1, LnF.LNF_RGB[KBD_HOLE_COLOR], -width, h - 2, LnF.LNF_RGB[KBD_HOLE_COLOR]);
  6391:       }
  6392:       x += 1 + u;
  6393:       y += 1 + v;
  6394:       w -= 2 + u * 2;
  6395:       h -= 2 + v * 2;
  6396:       //島
  6397:       if (u > 0) {
  6398:         kbdFillRect (bitmap, width, x - u, y, u, h, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //左側
  6399:         kbdFillRect (bitmap, width, x + w, y, u, h, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //右側
  6400:       }
  6401:       if (v > 0) {
  6402:         kbdFillRect (bitmap, width, x, y - v, w, v, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //上側
  6403:         kbdFillRect (bitmap, width, x, y + h, w, v, LnF.LNF_RGB[KBD_KEYTOP_COLOR]);  //下側
  6404:       }
  6405:       //2段目
  6406:       int lx = x;
  6407:       int ly = y;
  6408:       int lw = w;
  6409:       int lh = h;
  6410:       kbdDrawLine (bitmap, x + width * y,
  6411:                    1, 1, LnF.LNF_RGB[KBD_TOP_LEFT_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_TOP_COLOR],
  6412:                    width, 1, LnF.LNF_RGB[KBD_TOP_RIGHT_COLOR], width, h - 2, LnF.LNF_RGB[KBD_RIGHT_COLOR],
  6413:                    -1, 1, LnF.LNF_RGB[KBD_BOTTOM_RIGHT_COLOR], -1, w - 2, LnF.LNF_RGB[KBD_BOTTOM_COLOR],
  6414:                    -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, h - 2, LnF.LNF_RGB[KBD_LEFT_COLOR]);
  6415:       x++;
  6416:       y++;
  6417:       w -= 2;
  6418:       h -= 2;
  6419:       //3段目
  6420:       kbdDrawLine (bitmap, x + width * y,
  6421:                    1, 1, LnF.LNF_RGB[KBD_TOP_LEFT_COLOR], 1, w - 2, LnF.LNF_RGB[KBD_TOP_COLOR],
  6422:                    width, 1, LnF.LNF_RGB[KBD_TOP_RIGHT_COLOR], width, h - 2, LnF.LNF_RGB[KBD_RIGHT_COLOR],
  6423:                    -1, 1, LnF.LNF_RGB[KBD_BOTTOM_RIGHT_COLOR], -1, w - 2, LnF.LNF_RGB[KBD_BOTTOM_COLOR],
  6424:                    -width, 1, LnF.LNF_RGB[KBD_BOTTOM_LEFT_COLOR], -width, h - 2, LnF.LNF_RGB[KBD_LEFT_COLOR]);
  6425:       x++;
  6426:       y++;
  6427:       w -= 2;
  6428:       h -= 2;
  6429:       //キートップ
  6430:       kbdFillRect (bitmap, width, x, y, w, h, pointed ? LnF.LNF_RGB[KBD_POINTED_COLOR] : LnF.LNF_RGB[KBD_KEYTOP_COLOR]);
  6431:       //LED
  6432:       if (ledColors != null) {
  6433:         x += w - KBD_LED_WIDTH >> 1;
  6434:         y += h;
  6435:         kbdFillRect (bitmap, width, x, y - KBD_LED_HEIGHT, KBD_LED_WIDTH, KBD_LED_HEIGHT, ledColors[0]);  //上半分
  6436:         kbdFillRect (bitmap, width, x, y, KBD_LED_WIDTH, pressed ? 2 : 3, ledColors[1]);  //下半分の高さはボーダーの幅
  6437:       }
  6438:       //文字
  6439:       if (code != 0) {  //文字あり
  6440:         kbdDrawLetter2 (bitmap, width, lx, ly, lw, lh, code);
  6441:       }
  6442:     }  //if KBD_USE_ROM_FONT
  6443:   }  //kbdDrawKey2
  6444: 
  6445:   //kbdFillRect (bitmap, width, x, y, w, h, color)
  6446:   //  矩形を塗り潰す
  6447:   //  bitmap  ビットマップ
  6448:   //  width   bitmapの幅(px)
  6449:   //  x       x座標(px)
  6450:   //  y       y座標(px)
  6451:   //  w       幅(px)
  6452:   //  h       高さ(px)
  6453:   //  color   色(rgb)
  6454:   public static void kbdFillRect (int[] bitmap, int width, int x, int y, int w, int h, int color) {
  6455:     for (int j = 0; j < h; j++) {
  6456:       int dst = x + width * (y + j);
  6457:       for (int i = 0; i < w; i++) {
  6458:         bitmap[dst + i] = color;
  6459:       }
  6460:     }
  6461:   }  //kbdFillRect(int[],int,int,int,int,int,int)
  6462: 
  6463:   //kbdDrawLetter (bitmap, width, lx, ly, lw, lh, letter)
  6464:   //  文字のパターンを描く
  6465:   //  影を付ける
  6466:   //  bitmap  ビットマップ
  6467:   //  width   bitmapの幅(px)
  6468:   //  lx      x座標(px)
  6469:   //  ly      y座標(px)
  6470:   //  lw      幅(px)
  6471:   //  lh      高さ(px)
  6472:   //  letter  文字のパターン
  6473:   public static void kbdDrawLetter (int[] bitmap, int width, int lx, int ly, int lw, int lh, int[] letter) {
  6474:     if (lw <= 32) {
  6475:       for (int j = 0; j < lh; j++) {
  6476:         int dst = lx + width * (ly + j);
  6477:         for (int i = 0; i < lw; i++) {
  6478:           if ((letter[j] >> lw - 1 - i & 1) != 0) {
  6479:             bitmap[dst + i] = LnF.LNF_RGB[KBD_LETTER_COLOR];
  6480:           } else if (i > 0 && j > 0 && (letter[j - 1] >> lw - 1 - (i - 1) & 1) != 0) {
  6481:             bitmap[dst + i] = LnF.LNF_RGB[KBD_SHADOW_COLOR];
  6482:             //bitmap[dst + i] = 0xff000000 | bitmap[dst + i] >> 2 & 0x003f3f3f;
  6483:             //bitmap[dst + i] = 0xff000000 | bitmap[dst + i] >> 1 & 0x007f7f7f;
  6484:           }
  6485:         }
  6486:       }
  6487:     } else {
  6488:       int n = lw + 31 >> 5;  //1ラスタあたりの文字データの数
  6489:       for (int j = 0; j < lh; j++) {
  6490:         int src = n * j + n - 1;  //文字データの右端
  6491:         int dst = lx + width * (ly + j) + lw - 1;  //キートップの右端
  6492:         for (int i = 0; i < lw; i++) {  //右端が0,左端がlw-1
  6493:           if ((letter[src - (i >> 5)] >> (i & 0x1f) & 1) != 0) {
  6494:             bitmap[dst - i] = LnF.LNF_RGB[KBD_LETTER_COLOR];
  6495:           } else if (i > 0 && j > 0 && (letter[src - n - (i + 1 >> 5)] >> (i + 1 & 0x1f) & 1) != 0) {
  6496:             bitmap[dst - i] = LnF.LNF_RGB[KBD_SHADOW_COLOR];
  6497:             //bitmap[dst - i] = 0xff000000 | bitmap[dst - i] >> 2 & 0x003f3f3f;
  6498:             //bitmap[dst - i] = 0xff000000 | bitmap[dst - i] >> 1 & 0x007f7f7f;
  6499:           }
  6500:         }
  6501:       }
  6502:     }
  6503:   }  //kbdDrawLetter(int[],int,int,int,int,int,int[])
  6504: 
  6505:   //kbdDrawLetter2 (bitmap, width, lx, ly, lw, lh, code)
  6506:   //  文字のパターンを描く
  6507:   //  影を付ける
  6508:   //  bitmap  ビットマップ
  6509:   //  width   bitmapの幅(px)
  6510:   //  lx      x座標(px)
  6511:   //  ly      y座標(px)
  6512:   //  lw      幅(px)
  6513:   //  lh      高さ(px)
  6514:   //  code    文字コード
  6515:   public static void kbdDrawLetter2 (int[] bitmap, int width, int lx, int ly, int lw, int lh, int code) {
  6516:     final int fw = 8;
  6517:     final int fh = 8;
  6518:     final int fa = FontEditor.FNT_ADDRESS_ANK8X8;
  6519:     int dst = lx + (lw - fw >> 1) + width * (ly + (lh - fh >> 1));
  6520:     int src = fa + (fw + 7 >> 3) * fh * code;
  6521:     for (int y = 0; y < fh; y++) {
  6522:       for (int x = 0; x < fw; x++) {
  6523:         if ((MainMemory.mmrM8[src + (fw + 7 >> 3) * y + (x >> 3)] & 1 << (~x & 0x07)) != 0) {
  6524:           bitmap[dst + width * y + x] = LnF.LNF_RGB[KBD_LETTER_COLOR];
  6525:         } else if (x > 0 && y > 0 &&
  6526:                    (MainMemory.mmrM8[src + (fw + 7 >> 3) * (y - 1) + (x - 1 >> 3)] & 1 << (~(x - 1) & 0x07)) != 0) {
  6527:           bitmap[dst + width * y + x] = LnF.LNF_RGB[KBD_SHADOW_COLOR];
  6528:         }
  6529:       }
  6530:     }
  6531:   }  //kbdDrawLetter2(int[],int,int,int,int,int,int)
  6532: 
  6533:   //kbdDrawLine (bitmap, pos, vect0, step0, color0, vect1, step1, color1, ...)
  6534:   //  bitmap  ビットマップ
  6535:   //  pos     開始位置のオフセット
  6536:   //  vect    方向。オフセットの差分
  6537:   //  step    長さ(px)
  6538:   //  color   色(rgb)
  6539:   public static void kbdDrawLine (int[] bitmap, int pos, int... vect_step_color) {
  6540:     for (int i = 0; i < vect_step_color.length; i += 3) {
  6541:       int vect = vect_step_color[i];
  6542:       int step = vect_step_color[i + 1];
  6543:       int color = vect_step_color[i + 2];
  6544:       for (; step > 0; step--) {
  6545:         bitmap[pos] = color;
  6546:         pos += vect;
  6547:       }
  6548:     }
  6549:   }  //kbdDrawLine(int[],int,int...)
  6550: 
  6551:   //kbdStart ()
  6552:   //  キーボードのイベントリスナーを設定して動作を開始する
  6553:   //  MFPが初期化されている必要がある
  6554:   public static void kbdStart () {
  6555: 
  6556:     //Tabキーによるフォーカスの移動を無効にする
  6557:     //  setFocusTraversalKeysにCollections.EMPTY_SETを指定すると無検査変換の警告が出る
  6558:     //XEiJ.pnlPanel.setFocusTraversalKeys (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
  6559:     //XEiJ.pnlPanel.setFocusTraversalKeys (KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, Collections.EMPTY_SET);
  6560:     //XEiJ.pnlPanel.setFocusTraversalKeys (KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS, Collections.EMPTY_SET);
  6561:     XEiJ.pnlPanel.setFocusTraversalKeysEnabled (false);  //Component.setFocusTraversalKeysEnabled()は1.4から
  6562: 
  6563:     //フォーカスリスナーとキーリスナー
  6564:     XEiJ.pnlPanel.setFocusable (true);  //普通のコンポーネントはクリックしてもフォーカスされないのでキーイベントが発生しない
  6565:     ComponentFactory.addListener (
  6566:       XEiJ.pnlPanel,
  6567:       new FocusAdapter () {
  6568:         @Override public void focusGained (FocusEvent fe) {
  6569:           kbdCloseIME ();  //IMEが開いていたら閉じる
  6570:         }
  6571:         //@Override public void focusLost (FocusEvent fe) {
  6572:         //}
  6573:       });
  6574:     XEiJ.pnlPanel.requestFocusInWindow ();  //フォーカスを要求する。Component.requestFocusInWindow()は1.4から
  6575:     ComponentFactory.addListener (
  6576:       XEiJ.pnlPanel,
  6577:       new KeyAdapter () {
  6578:         @Override public void keyPressed (KeyEvent ke) {
  6579:           //System.out.printf ("0x%04x, 0x%04x, %d\n", (int) e.getKeyChar (), e.getKeyCode (), e.getKeyLocation ());
  6580:           kbdCloseIME ();  //IMEが開いていたら閉じる
  6581:           kbdInput (ke, true);
  6582:           ke.consume ();
  6583:         }
  6584:         @Override public void keyReleased (KeyEvent ke) {
  6585:           kbdCloseIME ();  //IMEが開いていたら閉じる
  6586:           kbdInput (ke, false);
  6587:           ke.consume ();
  6588:         }
  6589:         @Override public void keyTyped (KeyEvent ke) {
  6590:           kbdCloseIME ();  //IMEが開いていたら閉じる
  6591:           ke.consume ();
  6592:         }
  6593:       });
  6594: 
  6595:     //IMEが開いていたら閉じる
  6596:     kbdCloseIME ();
  6597: 
  6598:     if (kbdOn) {
  6599:       //点灯要求コードを送出する
  6600:       if (MC68901.MFP_KBD_ON) {
  6601:         MC68901.mfpKbdInput (0xff, false);
  6602:       } else {
  6603:         kbdTransfer (0xff, false);
  6604:       }
  6605:     }
  6606: 
  6607:   }  //kbdStart()
  6608: 
  6609:   //kbdCloseIME ()
  6610:   //  IMEが開いていたら閉じる
  6611:   //  継続的にIMEを無効化する方法が見当たらないのでIMEを開くキーが押されたらすぐに閉じることで擬似的にIMEを無効化する
  6612:   public static void kbdCloseIME () {
  6613:     try {
  6614:       InputContext context = XEiJ.pnlPanel.getInputContext ();
  6615:       if (context.isCompositionEnabled ()) {  //InputContext.isCompositionEnabled()は1.3から
  6616:         context.setCompositionEnabled (false);  //InputContext.setCompositionEnabled()は1.3から
  6617:         //context.setCharacterSubsets (null);
  6618:       }
  6619:     } catch (UnsupportedOperationException uoe) {
  6620:     }
  6621:   }  //kbdCloseIME()
  6622: 
  6623:   //kbdSetOn (on)
  6624:   //  キーボードを表示する/表示しない
  6625:   public static void kbdSetOn (boolean on) {
  6626:     if (kbdOn != on) {
  6627:       kbdOn = on;
  6628:       if (on) {
  6629:         kbdWidth = kbdDataTypeWidth[kbdType];
  6630:         kbdHeight = kbdDataTypeHeight[kbdType];
  6631:         kbdImage = kbdDataTypeImage[kbdType];
  6632:         kbdBitmap = kbdDataTypeBitmap[kbdType];
  6633:         kbdIndexMap = kbdDataTypeIndexMap[kbdType];
  6634:         kbdFlush ();
  6635:         //点灯要求コードを送出する
  6636:         if (MC68901.MFP_KBD_ON) {
  6637:           MC68901.mfpKbdInput (0xff, false);
  6638:         } else {
  6639:           kbdTransfer (0xff, false);
  6640:         }
  6641:       } else {
  6642:         //ポイントされているキーがあれば解除する
  6643:         if (kbdPointedIndex >= 0) {
  6644:           kbdHover (0, 0);
  6645:         }
  6646:         kbdWidth = 0;
  6647:         kbdHeight = 0;
  6648:         kbdImage = null;
  6649:         kbdBitmap = null;
  6650:         kbdIndexMap = null;
  6651:       }
  6652:       XEiJ.pnlUpdateArrangement ();
  6653:     }
  6654:   }  //kbdSetOn(boolean)
  6655: 
  6656:   //kbdSetType (type)
  6657:   //  キーボードの種類を変更する
  6658:   //  type  キーボードの種類。KEY_STANDARD_TYPEまたはKBD_COMPACT_TYPE
  6659:   public static void kbdSetType (int type) {
  6660:     if (kbdType != type) {
  6661:       kbdType = type;
  6662:       if (kbdOn) {
  6663:         //ポイントされているキーがあれば解除する
  6664:         if (kbdPointedIndex >= 0) {
  6665:           kbdHover (0, 0);
  6666:         }
  6667:         kbdWidth = kbdDataTypeWidth[kbdType];
  6668:         kbdHeight = kbdDataTypeHeight[kbdType];
  6669:         kbdImage = kbdDataTypeImage[kbdType];
  6670:         kbdBitmap = kbdDataTypeBitmap[kbdType];
  6671:         kbdIndexMap = kbdDataTypeIndexMap[kbdType];
  6672:         kbdFlush ();
  6673:         //点灯要求コードを送出する
  6674:         if (MC68901.MFP_KBD_ON) {
  6675:           MC68901.mfpKbdInput (0xff, false);
  6676:         } else {
  6677:           kbdTransfer (0xff, false);
  6678:         }
  6679:         XEiJ.pnlUpdateArrangement ();
  6680:       }
  6681:     }
  6682:   }  //kbdSetType(int)
  6683: 
  6684:   //kbdRepaint ()
  6685:   //  キーボードが表示されているときkbdImageを作り直して再描画する
  6686:   public static void kbdRepaint () {
  6687:     if (kbdOn) {  //キーボードが表示されているとき
  6688:       kbdFlush ();  //kbdImageを作り直して
  6689:       XEiJ.pnlPanel.repaint (XEiJ.pnlKeyboardX, XEiJ.pnlKeyboardY, kbdWidth, kbdHeight);  //再描画する
  6690:     }
  6691:   }  //kbdRepaint()
  6692: 
  6693:   //kbdFlush ()
  6694:   //  kbdImageを作り直す
  6695:   public static void kbdFlush () {
  6696:     int width = kbdDataTypeWidth[kbdType];
  6697:     int[][] indexRect = kbdDataTypeIndexRect[kbdType];
  6698:     int[] indexCharacterStat = kbdDataTypeIndexCharacterStat[kbdType];
  6699:     int[][] statFixBitmap = kbdDataTypeStatFixBitmap[kbdType];
  6700:     //LEDキーとモードキーの状態によってキートップに表示する文字の配列を選択する
  6701:     boolean numOff = KBD_LED_TEST << (kbdStat[KBD_NUM_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
  6702:     boolean ctrlOn = KBD_MODE_TEST << (kbdStat[KBD_CTRL_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  6703:     boolean codeOn = KBD_LED_TEST << (kbdStat[KBD_CODE_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  6704:     boolean opt1Off = KBD_MODE_TEST << (kbdStat[KBD_OPT1_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
  6705:     boolean kanaOn = KBD_LED_TEST << (kbdStat[KBD_KANA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  6706:     boolean shiftOff = KBD_MODE_TEST << (kbdStat[KBD_SHIFT_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
  6707:     boolean romaOn = KBD_LED_TEST << (kbdStat[KBD_ROMA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  6708:     boolean capsOff = KBD_LED_TEST << (kbdStat[KBD_CAPS_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) >= 0;
  6709:     boolean zenOn = KBD_LED_TEST << (kbdStat[KBD_ZEN_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  6710:     boolean hiraOn = KBD_LED_TEST << (kbdStat[KBD_HIRA_INDEX] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK)) < 0;
  6711:     byte[] varChr =
  6712:       (numOff
  6713:        ?  //-NUM
  6714:        (ctrlOn
  6715:         ?  //-NUM+CTRL
  6716:         KBD_CTRL_CHR
  6717:         :  //-NUM-CTRL
  6718:         (codeOn
  6719:          ?  //-NUM-CTRL+CODE
  6720:          KBD_CODE_CHR
  6721:          :  //-NUM-CTRL-CODE
  6722:          (opt1Off && kanaOn
  6723:           ?  //-NUM-CTRL-CODE+KANA
  6724:           (XEiJ.busPbs (0x00ed002b) == 0
  6725:            ?  //-NUM-CTRL-CODE+KANA-AIU
  6726:            (shiftOff
  6727:             ?  //-NUM-CTRL-CODE+KANA-AIU-SHIFT
  6728:             KBD_KANA_CHR
  6729:             :  //-NUM-CTRL-CODE+KANA-AIU+SHIFT
  6730:             KBD_KANA_SHIFT_CHR
  6731:             )  //!SHIFT
  6732:            :  //-NUM-CTRL-CODE+KANA+AIU
  6733:            (shiftOff
  6734:             ?  //-NUM-CTRL-CODE+KANA+AIU-SHIFT
  6735:             KBD_KANA_AIU_CHR
  6736:             :  //-NUM-CTRL-CODE+KANA+AIU+SHIFT
  6737:             KBD_KANA_AIU_SHIFT_CHR
  6738:             )  //!SHIFT
  6739:            )  //!AIU
  6740:           :  //-NUM-CTRL-CODE-KANA
  6741:           (opt1Off && romaOn
  6742:            ?  //-NUM-CTRL-CODE-KANA+ROMA
  6743:            (shiftOff
  6744:             ?  //-NUM-CTRL-CODE-KANA+ROMA-SHIFT
  6745:             KBD_ROMA_CHR
  6746:             :  //-NUM-CTRL-CODE-KANA+ROMA+SHIFT
  6747:             KBD_ROMA_SHIFT_CHR
  6748:             )  //!SHIFT
  6749:            :  //-NUM-CTRL-CODE-KANA-ROMA
  6750:            (capsOff
  6751:             ?  //-NUM-CTRL-CODE-KANA-ROMA-CAPS
  6752:             (shiftOff
  6753:              ?  //-NUM-CTRL-CODE-KANA-ROMA-CAPS-SHIFT
  6754:              KBD_NORMAL_CHR
  6755:              :  //-NUM-CTRL-CODE-KANA-ROMA-CAPS+SHIFT
  6756:              KBD_SHIFT_CHR
  6757:              )  //!SHIFT
  6758:             :  //-NUM-CTRL-CODE-KANA-ROMA+CAPS
  6759:             (shiftOff
  6760:              ?  //-NUM-CTRL-CODE-KANA-ROMA+CAPS-SHIFT
  6761:              KBD_CAPS_CHR
  6762:              :  //-NUM-CTRL-CODE-KANA-ROMA+CAPS+SHIFT
  6763:              KBD_CAPS_SHIFT_CHR
  6764:              )  //!SHIFT
  6765:             )  //!CAPS
  6766:            )  //!OPT.1&&ROMA
  6767:           )  //!OPT.1&&KANA
  6768:          )  //CODE
  6769:         )  //CTRL
  6770:        :  //+NUM
  6771:        (ctrlOn
  6772:         ?  //+NUM+CTRL
  6773:         KBD_NUM_CTRL_CHR
  6774:         :  //+NUM-CTRL
  6775:         (codeOn
  6776:          ?  //+NUM-CTRL+CODE
  6777:          KBD_NUM_CODE_CHR
  6778:          :  //+NUM-CTRL-CODE
  6779:          (opt1Off && kanaOn
  6780:           ?  //+NUM-CTRL-CODE+KANA
  6781:           (MainMemory.mmrM8[0x00ed002b] == 0
  6782:            ?  //+NUM-CTRL-CODE+KANA-AIU
  6783:            (shiftOff
  6784:             ?  //+NUM-CTRL-CODE+KANA-AIU-SHIFT
  6785:             KBD_NUM_KANA_CHR
  6786:             :  //+NUM-CTRL-CODE+KANA-AIU+SHIFT
  6787:             KBD_NUM_KANA_SHIFT_CHR
  6788:             )  //!SHIFT
  6789:            :  //+NUM-CTRL-CODE+KANA+AIU
  6790:            (shiftOff
  6791:             ?  //+NUM-CTRL-CODE+KANA+AIU-SHIFT
  6792:             KBD_NUM_KANA_AIU_CHR
  6793:             :  //+NUM-CTRL-CODE+KANA+AIU+SHIFT
  6794:             KBD_NUM_KANA_AIU_SHIFT_CHR
  6795:             )  //!SHIFT
  6796:            )  //!AIU
  6797:           :  //+NUM-CTRL-CODE-KANA
  6798:           (opt1Off && romaOn
  6799:            ?  //+NUM-CTRL-CODE-KANA+ROMA
  6800:            (shiftOff
  6801:             ?  //+NUM-CTRL-CODE-KANA+ROMA-SHIFT
  6802:             KBD_NUM_ROMA_CHR
  6803:             :  //+NUM-CTRL-CODE-KANA+ROMA+SHIFT
  6804:             KBD_NUM_ROMA_SHIFT_CHR
  6805:             )  //!SHIFT
  6806:            :  //+NUM-CTRL-CODE-KANA-ROMA
  6807:            (capsOff
  6808:             ?  //+NUM-CTRL-CODE-KANA-ROMA-CAPS
  6809:             (shiftOff
  6810:              ?  //+NUM-CTRL-CODE-KANA-ROMA-CAPS-SHIFT
  6811:              KBD_NUM_CHR
  6812:              :  //+NUM-CTRL-CODE-KANA-ROMA-CAPS+SHIFT
  6813:              KBD_NUM_SHIFT_CHR
  6814:              )  //!SHIFT
  6815:             :  //+NUM-CTRL-CODE-KANA-ROMA+CAPS
  6816:             (shiftOff
  6817:              ?  //+NUM-CTRL-CODE-KANA-ROMA+CAPS-SHIFT
  6818:              KBD_NUM_CAPS_CHR
  6819:              :  //+NUM-CTRL-CODE-KANA-ROMA+CAPS+SHIFT
  6820:              KBD_NUM_CAPS_SHIFT_CHR
  6821:              )  //!SHIFT
  6822:             )  //!CAPS
  6823:            )  //!OPT.1&&ROMA
  6824:           )  //!OPT.1&&KANA
  6825:          )  //CODE
  6826:         )  //CTRL
  6827:        );  //!NUM
  6828:     for (int i = 0; i < KBD_ALL_KEYS; i++) {
  6829:       int chr = 0;  //可変キーの文字。固定キーの文字は変化しないので0のままでよい
  6830:       if (i < KBD_VAR_KEYS) {  //可変キー
  6831:         chr = varChr[i] & 255;
  6832:         if (0xa6 <= chr && chr <= 0xdd && chr != 0xb0 &&  //記号を除くカタカナで
  6833:             zenOn && hiraOn) {  //全角とひらがなが両方点灯しているとき
  6834:           chr ^= 0x20;  //ひらがなにする
  6835:         } else if (chr == 0x5c && (MainMemory.mmrM8[0x00ed0059] & 0b00000001) != 0) {
  6836:           chr = 0x80;
  6837:         } else if (chr == 0x7e && (MainMemory.mmrM8[0x00ed0059] & 0b00000010) != 0) {
  6838:           chr = 0x81;
  6839:         } else if (chr == 0x7c && (MainMemory.mmrM8[0x00ed0059] & 0b00000100) != 0) {
  6840:           chr = 0x82;
  6841:         }
  6842:       }
  6843:       int stat = kbdStat[i] & (KBD_LIGHTED_MASK | KBD_PRESSED_MASK | KBD_POINTED_MASK);
  6844:       int characterStat = chr << 8 | stat;
  6845:       if (indexCharacterStat[i] != characterStat) {  //最後に描画した状態から変化した
  6846:         indexCharacterStat[i] = characterStat;
  6847:         int[] rect = indexRect[i];
  6848:         if (i < KBD_VAR_KEYS) {  //可変キー
  6849:           int[] bitmap = kbdVarStatBitmap[chr][stat];
  6850:           int p = rect[0] + width * rect[1];
  6851:           int w = rect[2];
  6852:           int h = rect[3];
  6853:           int q = 0;
  6854:           for (int dy = 0; dy < h; dy++) {
  6855:             for (int dx = 0; dx < w; dx++) {
  6856:               kbdBitmap[p++] = bitmap[q++];
  6857:             }
  6858:             p += width - w;
  6859:           }
  6860:         } else if (i < KBD_VAR_KEYS + KBD_LED_KEYS) {  //LEDキー
  6861:           int[] bitmap = kbdLedStatBitmap[i - KBD_VAR_KEYS][stat];
  6862:           if (rect.length >= 4) {  //Standard KeyboardはNUMキーがない
  6863:             int p = rect[0] + width * rect[1];
  6864:             int w = rect[2];
  6865:             int h = rect[3];
  6866:             int q = 0;
  6867:             for (int dy = 0; dy < h; dy++) {
  6868:               for (int dx = 0; dx < w; dx++) {
  6869:                 kbdBitmap[p++] = bitmap[q++];
  6870:               }
  6871:               p += width - w;
  6872:             }
  6873:           }
  6874:         } else {  //固定キー
  6875:           int[] bitmap = statFixBitmap[stat];
  6876:           if (rect.length >= 4) {  //Compact Keyboardはテンキーがない
  6877:             int p = rect[0] + width * rect[1];
  6878:             int w = rect[2];
  6879:             int h = rect[3];
  6880:             for (int dy = 0; dy < h; dy++) {
  6881:               for (int dx = 0; dx < w; dx++) {
  6882:                 kbdBitmap[p] = bitmap[p];
  6883:                 p++;
  6884:               }
  6885:               p += width - w;
  6886:             }
  6887:             if (rect.length >= 8) {  //RETURNキーとSHIFTキー
  6888:               p = rect[4] + width * rect[5];
  6889:               w = rect[6];
  6890:               h = rect[7];
  6891:               for (int dy = 0; dy < h; dy++) {
  6892:                 for (int dx = 0; dx < w; dx++) {
  6893:                   kbdBitmap[p] = bitmap[p];
  6894:                   p++;
  6895:                 }
  6896:                 p += width - w;
  6897:               }
  6898:             }
  6899:           }
  6900:         }
  6901:       }
  6902:     }
  6903:   }  //kbdFlush()
  6904: 
  6905:   //kbdHover (x, y)
  6906:   //  ポイントされているキーを変更する
  6907:   //  座標はキーボードのローカル座標で範囲内であること
  6908:   public static void kbdHover (int x, int y) {
  6909:     boolean flag = false;
  6910:     int i = kbdIndexMap[x + kbdWidth * y];  //今回ポイントされたキー。-1=キーがポイントされていない
  6911:     if (kbdPointedIndex != i) {  //ポイントされているキーが変わった
  6912:       if (kbdPointedIndex >= 0) {  //前回ポイントされていたキーがあった
  6913:         int stat = kbdStat[kbdPointedIndex];
  6914:         kbdStat[kbdPointedIndex] = stat &= ~KBD_POINTED_MASK;  //ポイントを外す
  6915:         if ((stat & KBD_MOUSEDOWN_MASK) != 0) {  //マウスで押されていた
  6916:           kbdStat[kbdPointedIndex] = stat &= ~KBD_MOUSEDOWN_MASK;  //マウスを離す
  6917:           if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {  //ロックされておらずキーもマウスも押されていない
  6918:             kbdStat[kbdPointedIndex] = stat &= ~KBD_PRESSED_MASK;  //離す
  6919:             kbdRelease (kbdPointedIndex);
  6920:           }
  6921:         }
  6922:       }
  6923:       kbdPointedIndex = i;
  6924:       flag = true;
  6925:     }
  6926:     if (kbdPointedIndex >= 0) {  //ポイントされているキーがある
  6927:       int stat = kbdStat[kbdPointedIndex];
  6928:       kbdStat[kbdPointedIndex] = stat |= KBD_POINTED_MASK;  //ポイントする。前回もポイントされていた場合もある
  6929:       if (((stat & KBD_MOUSEDOWN_MASK) != 0) != (XEiJ.musButtonLeft || XEiJ.musButtonRight)) {  //マウスの押し下げ状態が変わった
  6930:         if (XEiJ.musButtonLeft && (kbdPointedIndex == KBD_SHIFT_INDEX ||  //マウスで押されていなかったSHIFTキーが左ボタンで押された
  6931:                                    kbdPointedIndex == KBD_CTRL_INDEX) ||  //マウスで押されていなかったCTRLキーが左ボタンで押された
  6932:             XEiJ.musButtonRight) {  //マウスで押されていなかったキーが右ボタンで押された
  6933:           stat ^= KBD_LOCKED_MASK;  //ロックを反転する
  6934:           kbdStat[kbdPointedIndex] = stat |= KBD_MOUSEDOWN_MASK;  //マウスで押す
  6935:           if ((stat & KBD_PRESSED_MASK) == 0) {  //押されていなかった
  6936:             kbdStat[kbdPointedIndex] = stat |= KBD_PRESSED_MASK;  //押す
  6937:             kbdPress (kbdPointedIndex);
  6938:           }
  6939:         } else if (XEiJ.musButtonLeft) {  //マウスで押されていなかったキーが左ボタンで押された
  6940:           stat &= ~KBD_LOCKED_MASK;  //ロックを解除する
  6941:           kbdStat[kbdPointedIndex] = stat |= KBD_MOUSEDOWN_MASK;  //マウスで押す
  6942:           if ((stat & KBD_PRESSED_MASK) == 0) {  //押されていなかった
  6943:             kbdStat[kbdPointedIndex] = stat |= KBD_PRESSED_MASK;  //押す
  6944:             kbdPress (kbdPointedIndex);
  6945:           }
  6946:         } else {  //マウスで押されていたキーが離された
  6947:           kbdStat[kbdPointedIndex] = stat &= ~KBD_MOUSEDOWN_MASK;  //マウスを離す
  6948:           if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {  //ロックされておらずキーもマウスも押されていない
  6949:             kbdStat[kbdPointedIndex] = stat &= ~KBD_PRESSED_MASK;  //離す
  6950:             kbdRelease (kbdPointedIndex);
  6951:           }
  6952:         }
  6953:         flag = true;
  6954:       }
  6955:     }
  6956:     if (flag) {
  6957:       kbdRepaint ();
  6958:     }
  6959:   }  //kbdHover(int,int)
  6960: 
  6961:   //kbdInput (ke, pressed)
  6962:   //  リアルキーボードから入力する
  6963:   public static void kbdInput (KeyEvent ke, boolean pressed) {
  6964:     int keyCode = ke.getKeyCode ();
  6965:     if (pressed) {
  6966:       if (keyCode == KeyEvent.VK_F11) {  //F11
  6967:         //if ((ke.getModifiersEx () & InputEvent.SHIFT_DOWN_MASK) == InputEvent.SHIFT_DOWN_MASK) {  //Shift+F11
  6968:         //}
  6969:         if (kbdF11Mode == KBD_F11_FULLSCREEN) {
  6970:           //全画面表示の切り替え
  6971:           if (XEiJ.mnbFullscreenMenuItem.isEnabled ()) {  //全画面表示に移行できて全画面表示の切り替えがJavaScriptに渡っていない
  6972:             if (!XEiJ.mnbFullscreenMenuItem.isSelected ()) {  //全画面表示になっていない
  6973:               XEiJ.mnbFullscreenMenuItem.doClick ();
  6974:             } else if (XEiJ.pnlPrevFitInWindowOn) {  //全画面表示になっていて全画面表示に移行する前にウインドウに合わせていた
  6975:               XEiJ.mnbFitInWindowMenuItem.doClick ();
  6976:             } else {  //全画面表示になっていて全画面表示に移行する前にウインドウに合わせていなかった
  6977:               XEiJ.mnbFixedSizeMenuItem.doClick ();
  6978:             }
  6979:           }
  6980:         } else if (kbdF11Mode == KBD_F11_SCREENSHOT) {
  6981:           kbdDoCapture ();
  6982:         } else if (kbdF11Mode == KBD_F11_STOPSTART) {
  6983:           if (XEiJ.mpuTask == null) {  //Run
  6984:             XEiJ.mpuStart ();
  6985:           } else {  //Stop
  6986:             if (RootPointerList.RTL_ON) {
  6987:               if (RootPointerList.rtlCurrentSupervisorTaskIsStoppable ||
  6988:                   RootPointerList.rtlCurrentUserTaskIsStoppable) {
  6989:                 XEiJ.mpuStop (null);
  6990:               }
  6991:             } else {
  6992:               XEiJ.mpuStop (null);
  6993:             }
  6994:           }
  6995:         }
  6996:         return;
  6997:       } else if (keyCode == KeyEvent.VK_F12) {  //F12
  6998:         XEiJ.musSetSeamlessOn (!XEiJ.musSeamlessOn);  //シームレス/エクスクルーシブを切り替える
  6999:         return;
  7000:       } else if ((ke.getModifiersEx () & XEiJ.MNB_MODIFIERS) == XEiJ.MNB_MODIFIERS) {  //Alt+Shift
  7001:         switch (keyCode) {
  7002:         case KeyEvent.VK_C:  //Alt+Shift-C
  7003:           XEiJ.mnbConfigMenu.doClick ();
  7004:           return;
  7005:         case KeyEvent.VK_D:  //Alt+Shift-D
  7006:           XEiJ.mnbDisplayMenu.doClick ();
  7007:           return;
  7008:         case KeyEvent.VK_F:  //Alt+Shift-F
  7009:           XEiJ.mnbFileMenu.doClick ();
  7010:           return;
  7011:         case KeyEvent.VK_I:  //Alt+Shift-I
  7012:           XEiJ.mnbInputMenu.doClick ();
  7013:           return;
  7014:         case KeyEvent.VK_K:  //Alt+Shift-K
  7015:           if (kbdOn) {
  7016:             XEiJ.mnbNoKeyboardMenuItem.doClick ();
  7017:           } else if (kbdType == KBD_COMPACT_TYPE) {
  7018:             XEiJ.mnbCompactKeyboardMenuItem.doClick ();
  7019:           } else {
  7020:             XEiJ.mnbStandardKeyboardMenuItem.doClick ();
  7021:           }
  7022:           return;
  7023:         case KeyEvent.VK_L:  //Alt+Shift-L
  7024:           XEiJ.mnbLanguageMenu.doClick ();
  7025:           return;
  7026:         case KeyEvent.VK_M:  //Alt+Shift-M
  7027:           XEiJ.mpuMenu.doClick ();
  7028:           return;
  7029:         case KeyEvent.VK_O:  //Alt+Shift-O
  7030:           XEiJ.mpuOpt1ResetMenuItem.doClick ();
  7031:           return;
  7032:         case KeyEvent.VK_P:  //Alt+Shift-P
  7033:           if (XEiJ.mnbPlayMenuItem.isEnabled ()) {
  7034:             XEiJ.mnbPlayMenuItem.doClick ();
  7035:           }
  7036:           return;
  7037:         case KeyEvent.VK_Q:  //Alt+Shift-Q
  7038:           if (XEiJ.mnbQuitMenuItem.isEnabled ()) {
  7039:             XEiJ.mnbQuitMenuItem.doClick ();
  7040:           }
  7041:           return;
  7042:         case KeyEvent.VK_R:  //Alt+Shift-R
  7043:           XEiJ.mpuResetMenuItem.doClick ();
  7044:           return;
  7045:         case KeyEvent.VK_S:  //Alt+Shift-S
  7046:           if (XEiJ.mnbSoundMenu.isEnabled ()) {
  7047:             XEiJ.mnbSoundMenu.doClick ();
  7048:           }
  7049:           return;
  7050:         case KeyEvent.VK_V:  //Alt+Shift-V
  7051:           if (XEiJ.mnbPasteMenuItem.isEnabled ()) {
  7052:             XEiJ.mnbPasteMenuItem.doClick ();
  7053:           }
  7054:           return;
  7055:         case KeyEvent.VK_W:  //Alt+Shift-W
  7056:           if (XEiJ.mnbFitInWindowMenuItem.isEnabled ()) {  //ウインドウに合わせられるとき
  7057:             XEiJ.mnbFitInWindowMenuItem.doClick ();
  7058:           }
  7059:           return;
  7060:         case KeyEvent.VK_X:  //Alt+Shift-X
  7061:           XEiJ.mnbFixedSizeMenuItem.doClick ();
  7062:           return;
  7063:         }
  7064:       }
  7065:     }
  7066:     if (XEiJ.ppiInput (ke, pressed)) {  //JOYKEY
  7067:       return;
  7068:     }
  7069:     int l = 0;
  7070:     int r = KBD_KEY_MAP_LENGTH / 5;
  7071:     while (l < r) {
  7072:       int m = (l + r) >> 1;
  7073:       if (KBD_KEY_MAP[m * 5] < keyCode) {
  7074:         l = m + 1;
  7075:       } else {
  7076:         r = m;
  7077:       }
  7078:     }
  7079:     for (l *= 5; l < KBD_KEY_MAP_LENGTH && KBD_KEY_MAP[l] == keyCode; l += 5) {
  7080:       int t;
  7081:       if (((t = KBD_KEY_MAP[l + 1]) == 0 || t == ke.getKeyLocation ()) &&
  7082:           ((t = KBD_KEY_MAP[l + 2]) == 0 ||
  7083:            (t == ke.getKeyChar () &&
  7084:             KBD_KEY_MAP[l + 3] == (ke.getModifiersEx () & (InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK))))) {
  7085:         int i = KBD_KEY_MAP[l + 4];
  7086:         int stat = kbdStat[i];
  7087:         if (pressed) {  //キーが押された
  7088:           if ((stat & KBD_KEYDOWN_MASK) == 0) {  //キーで押されていなかった
  7089:             kbdStat[i] = stat |= KBD_KEYDOWN_MASK;  //キーで押す
  7090:             if ((stat & KBD_PRESSED_MASK) == 0) {  //押されていなかった
  7091:               kbdStat[i] = stat |= KBD_PRESSED_MASK;  //押す
  7092:               kbdPress (i);
  7093:               kbdRepaint ();
  7094:             }
  7095:           }
  7096:         } else {  //キーが離された
  7097:           if ((stat & KBD_KEYDOWN_MASK) != 0) {  //キーで押されていた
  7098:             kbdStat[i] = stat &= ~KBD_KEYDOWN_MASK;  //キーを離す
  7099:             if ((stat & (KBD_LOCKED_MASK | KBD_KEYDOWN_MASK | KBD_MOUSEDOWN_MASK)) == 0) {  //ロックされておらずキーもマウスも押されていない
  7100:               kbdStat[i] = stat &= ~KBD_PRESSED_MASK;  //離す
  7101:               kbdRelease (i);
  7102:               kbdRepaint ();
  7103:             }
  7104:           }
  7105:         }
  7106:         return;
  7107:       }
  7108:     }
  7109:   }  //kbdInput(KeyEvent,boolean)
  7110: 
  7111:   //kbdRePress()
  7112:   //  押されているキーを再入力する
  7113:   //  リセット後キー入力割り込みが許可されたら直ちに押されているキーを入力しないとOPT.2キーをロックしていてもROMデバッガが起動しない
  7114:   public static void kbdRePress () {
  7115:     for (int i = 0; i < KBD_ALL_KEYS; i++) {
  7116:       if (i != KBD_NUM_INDEX &&  //NUMキーは除く
  7117:           (kbdStat[i] & KBD_PRESSED_MASK) != 0) {  //押されている
  7118:         //キーコードを求める
  7119:         int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f;
  7120:         //MFPに転送する
  7121:         if (MC68901.MFP_KBD_ON) {
  7122:           MC68901.mfpKbdInput (code, true);
  7123:         } else {
  7124:           kbdTransfer (code, true);
  7125:         }
  7126:       }
  7127:     }
  7128:   }  //kbdRePress()
  7129: 
  7130:   //kbdPress (i)
  7131:   //  番号iのキーが押された
  7132:   public static void kbdPress (int i) {
  7133:     //キーコードを求める
  7134:     int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f;
  7135:     //NUMキーが押されたらLEDを反転する
  7136:     if (KBD_DEBUG_LED ? KBD_KANA_INDEX <= i && i <= KBD_NUM_INDEX : i == KBD_NUM_INDEX) {
  7137:       kbdStat[i] ^= KBD_LIGHTED_MASK;
  7138:       kbdRepaint ();
  7139:     }
  7140:     //MFPに転送する
  7141:     if (MC68901.MFP_KBD_ON) {
  7142:       MC68901.mfpKbdInput (code, true);
  7143:     } else {
  7144:       kbdTransfer (code, true);
  7145:     }
  7146:   }  //kbdPress(int)
  7147: 
  7148:   //kbdRelease (i)
  7149:   //  番号iのキーが離された
  7150:   public static void kbdRelease (int i) {
  7151:     //キーコードを求める
  7152:     int code = ((kbdStat[KBD_NUM_INDEX] & KBD_LIGHTED_MASK) != 0 ? KBD_NUM_CODE : KBD_NORMAL_CODE)[i] & 0x7f | 0x80;
  7153:     //MFPに転送する
  7154:     if (MC68901.MFP_KBD_ON) {
  7155:       MC68901.mfpKbdInput (code, false);
  7156:     } else {
  7157:       kbdTransfer (code, false);
  7158:     }
  7159:   }  //kbdRelease(int)
  7160: 
  7161:   //kbdTransfer (code, repeat)
  7162:   //  キーコードをMFPに転送する
  7163:   //  割り込み要求が競合しないようにコアのスレッドで行う
  7164:   public static void kbdTransfer (int code, boolean repeat) {
  7165:     XEiJ.tmrTimer.schedule (new KBDTask (code, repeat), 0L);
  7166:   }  //kbdTransfer(int)
  7167: 
  7168:   //kbdSetRepeatDelay (n)
  7169:   //  リピートディレイ
  7170:   //  200+100*n(ms)
  7171:   public static void kbdSetRepeatDelay (int n) {
  7172:     n &= 15;
  7173:     kbdRepeatDelay = 200 + 100 * n;
  7174:   }  //kbdSetRepeatDelay(int)
  7175: 
  7176:   //kbdSetRepeatInterval (n)
  7177:   //  リピートインターバル
  7178:   //  30+5*n^2(ms)
  7179:   public static void kbdSetRepeatInterval (int n) {
  7180:     n &= 15;
  7181:     kbdRepeatInterval = 30 + 5 * n * n;
  7182:   }  //kbdSetRepeatInterval(int)
  7183: 
  7184:   //kbdSetLedStatus (n)
  7185:   //  LEDキーのLEDの状態をまとめて設定する。各ビット0=点灯,1=消灯
  7186:   //  bit0  かな
  7187:   //  bit1  ローマ字
  7188:   //  bit2  コード入力
  7189:   //  bit3  CAPS
  7190:   //  bit4  INS
  7191:   //  bit5  ひらがな
  7192:   //  bit6  全角
  7193:   public static void kbdSetLedStatus (int n) {
  7194:     boolean flag = false;
  7195:     n = ~n;
  7196:     for (int i = KBD_KANA_INDEX; i <= KBD_ZEN_INDEX; i++) {
  7197:       int mask = (n & 1) << KBD_LIGHTED_BIT;
  7198:       int stat = kbdStat[i];
  7199:       if ((stat & KBD_LIGHTED_MASK) != mask) {
  7200:         kbdStat[i] = stat ^ KBD_LIGHTED_MASK;
  7201:         flag = true;
  7202:       }
  7203:       n >>= 1;
  7204:     }
  7205:     if (flag) {
  7206:       kbdRepaint ();
  7207:     }
  7208:   }  //kbdSetLedStatus(int)
  7209: 
  7210:   //kbdDoCapture ()
  7211:   //  キャプチャ実行
  7212:   //  カレントディレクトリのcaptureというサブディレクトリの中に1.png,2.png,...を作るだけ
  7213:   public static void kbdDoCapture () {
  7214:     if (!XEiJ.prgIsLocal) {
  7215:       return;
  7216:     }
  7217:     try {
  7218:       File dir = new File ("capture");
  7219:       if (dir.exists ()) {  //captureがある
  7220:         if (!dir.isDirectory ()) {  //captureがあるがディレクトリでない
  7221:           return;
  7222:         }
  7223:       } else {  //captureがない
  7224:         if (!dir.mkdir ()) {  //captureがなくてディレクトリが作れない
  7225:           return;
  7226:         }
  7227:       }
  7228:       HashSet<String> nameSet = new HashSet<String> ();
  7229:       for (String name : dir.list ()) {
  7230:         nameSet.add (name);
  7231:       }
  7232:       int number = 0;
  7233:       for (String key : Settings.SGS_FRAME_KEYS) {
  7234:         BufferedImage image = RestorableFrame.rfmCapture (key);
  7235:         if (image != null) {  //ウインドウが開いていてキャプチャできた
  7236:           String name;
  7237:           do {
  7238:             number++;
  7239:             name = number + ".png";
  7240:           } while (!nameSet.add (name));  //セットに追加できるまで繰り返す
  7241:           name = "capture/" + name;
  7242:           if (XEiJ.saveImage (image, name)) {  //成功
  7243:             XEiJ.prgMessage (Multilingual.mlnJapanese ? name + " を更新しました" : name + " was updated");
  7244:           }
  7245:         }
  7246:       }
  7247:     } catch (Exception e) {
  7248:     }
  7249:   }  //kbdDoCapture()
  7250: 
  7251: 
  7252: 
  7253:   //$$KBT キー入力タスク
  7254:   public static class KBDTask extends TimerTask {
  7255:     public int code;
  7256:     public boolean repeat;
  7257:     public KBDTask (int c, boolean r) {
  7258:       code = c;
  7259:       repeat = r;
  7260:     }  //KBDTask(int,boolean)
  7261:     @Override public void run () {
  7262:       if (kbdRepeatTask != null) {
  7263:         //リピートを終了する
  7264:         //  開始と終了は同じスレッドで行わなければならない
  7265:         kbdRepeatTask.cancel ();
  7266:         kbdRepeatTask = null;
  7267:       }
  7268:       //MFPに転送する
  7269:       MC68901.mfpKeyboardInput (code);
  7270:       if (repeat) {
  7271:         //リピートを開始する
  7272:         XEiJ.tmrTimer.schedule (kbdRepeatTask = new KBDRepeatTask (code), (long) kbdRepeatDelay, (long) kbdRepeatInterval);
  7273:       }
  7274:     }  //run()
  7275:   }  //class KBDTask
  7276: 
  7277: 
  7278: 
  7279:   //$$KBR キーリピートタスク
  7280:   public static class KBDRepeatTask extends TimerTask {
  7281:     public int code;
  7282:     public KBDRepeatTask (int c) {
  7283:       code = c;
  7284:     }  //KBDRepeatTask(int)
  7285:     @Override public void run () {
  7286:       //MFPに転送する
  7287:       MC68901.mfpKeyboardInput (code);
  7288:     }  //run()
  7289:   }  //class KBDRepeatTask
  7290: 
  7291: 
  7292: 
  7293: }  //class Keyboard
  7294: 
  7295: 
  7296: