Annotation of nono/vm/lunakbd.cpp, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2018 [email protected]
                      4: //
                      5: 
                      6: #include "lunakbd.h"
                      7: #include "sio.h"
                      8: 
                      9: // コンストラクタ
                     10: LunaKeyboard::LunaKeyboard()
                     11: {
                     12:        memset(reptable, 0, sizeof(reptable));
                     13: 
                     14:        // SIO へキー入力を通知するイベント
                     15:        event.dev = gSIO;
                     16:        event.func = (DeviceCallback_t)&SIODevice::RxCh1;
                     17:        event.time = 0;
                     18:        event.name = "KeyInput";
                     19: }
                     20: 
                     21: // デストラクタ
                     22: LunaKeyboard::~LunaKeyboard()
                     23: {
                     24: }
                     25: 
                     26: // キーを押した
                     27: void
                     28: LunaKeyboard::MakeKey(uint keycode)
                     29: {
                     30:        uint lunakey;
                     31: 
                     32:        // 共通キーコードから LUNA キーコードに
                     33:        lunakey = keycode2lunakey(keycode);
                     34: 
                     35:        // LUNA にないキーは無視
                     36:        if (lunakey == NoKey) {
                     37:                return;
                     38:        }
                     39: 
                     40:        // すでにこのキーが押されていれば送らない
                     41:        if (reptable[lunakey]) {
                     42:                return;
                     43:        }
                     44: 
                     45:        // キーが押された
                     46:        putlog(1, "MakeKey  %d(%s)", lunakey, keyname[lunakey]);
                     47:        reptable[lunakey] = 1;
                     48: 
                     49:        // SIO に通知
                     50:        event.code = lunakey;
                     51:        gScheduler->AddEvent(&event);
                     52: }
                     53: 
                     54: // キーを離した
                     55: void
                     56: LunaKeyboard::BreakKey(uint keycode)
                     57: {
                     58:        uint lunakey;
                     59: 
                     60:        // 共通キーコードから LUNA キーコードに
                     61:        lunakey = keycode2lunakey(keycode);
                     62: 
                     63:        // LUNA にないキーは無視
                     64:        if (lunakey == NoKey) {
                     65:                return;
                     66:        }
                     67: 
                     68:        // キーが離された
                     69:        putlog(2, "BreakKey %d(%s)", lunakey, keyname[lunakey]);
                     70:        reptable[lunakey] = 0;
                     71: 
                     72:        // SIO に通知
                     73:        event.code = lunakey | 0x80;
                     74:        gScheduler->AddEvent(&event);
                     75: }
                     76: 
                     77: // 共通キーコードを LUNA キーコードに変換して返す。
                     78: // LUNA キーがなければ NoKey を返す。
                     79: uint
                     80: LunaKeyboard::keycode2lunakey(uint keycode)
                     81: {
                     82:        if (keycode >= countof(keycode2lunakey_table)) {
                     83:                return NoKey;
                     84:        }
                     85: 
                     86:        return keycode2lunakey_table[keycode];
                     87: }
                     88: 
                     89: // キーコード変換表
                     90: // 共通キーコードから LUNA キーコードに変換する。
                     91: // ぶっちゃけた話共通キーコードは LUNA キーコードをベースにしているので、
                     92: // 穴がある以外は全部透過。
                     93: /*static*/ const uint
                     94: LunaKeyboard::keycode2lunakey_table[128] = {
                     95:        NoKey,                                  // [00]
                     96:        NoKey,                                  // [01]
                     97:        NoKey,                                  // [02]
                     98:        NoKey,                                  // [03]
                     99:        NoKey,                                  // [04]
                    100:        NoKey,                                  // [05]
                    101:        NoKey,                                  // [06]
                    102:        NoKey,                                  // [07]
                    103:        NoKey,                                  // [08]
                    104:        LunaKey_TAB,                    // [09]
                    105:        LunaKey_CTRL,                   // [0a]
                    106:        LunaKey_kana,                   // [0b]
                    107:        LunaKey_SHIFT_L,                // [0c]
                    108:        LunaKey_SHIFT_R,                // [0d]
                    109:        LunaKey_CAPS,                   // [0e]
                    110:        LunaKey_SF,                             // [0f]
                    111: 
                    112:        LunaKey_ESC,                    // [10]
                    113:        LunaKey_BS,                             // [11]
                    114:        LunaKey_enter,                  // [12]
                    115:        NoKey,                                  // [13]
                    116:        LunaKey_space,                  // [14]
                    117:        LunaKey_DEL,                    // [15]
                    118:        LunaKey_XFER,                   // [16]
                    119:        LunaKey_VALID,                  // [17]
                    120:        LunaKey_PF11,                   // [18]
                    121:        LunaKey_PF12,                   // [19]
                    122:        LunaKey_PF13,                   // [1a]
                    123:        LunaKey_PF14,                   // [1b]
                    124:        LunaKey_up,                             // [1c]
                    125:        LunaKey_left,                   // [1d]
                    126:        LunaKey_right,                  // [1e]
                    127:        LunaKey_down,                   // [1f]
                    128: 
                    129:        NoKey,                                  // [20]
                    130:        NoKey,                                  // [21]
                    131:        LunaKey_1,                              // [22]
                    132:        LunaKey_2,                              // [23]
                    133:        LunaKey_3,                              // [24]
                    134:        LunaKey_4,                              // [25]
                    135:        LunaKey_5,                              // [26]
                    136:        LunaKey_6,                              // [27]
                    137:        LunaKey_7,                              // [28]
                    138:        LunaKey_8,                              // [29]
                    139:        LunaKey_9,                              // [2a]
                    140:        LunaKey_0,                              // [2b]
                    141:        LunaKey_minus,                  // [2c]
                    142:        LunaKey_circum,                 // [2d]
                    143:        LunaKey_backslash,              // [2e]
                    144:        NoKey,                                  // [2f]
                    145: 
                    146:        NoKey,                                  // [30]
                    147:        NoKey,                                  // [31]
                    148:        LunaKey_Q,                              // [32]
                    149:        LunaKey_W,                              // [33]
                    150:        LunaKey_E,                              // [34]
                    151:        LunaKey_R,                              // [35]
                    152:        LunaKey_T,                              // [36]
                    153:        LunaKey_Y,                              // [37]
                    154:        LunaKey_U,                              // [38]
                    155:        LunaKey_I,                              // [39]
                    156:        LunaKey_O,                              // [3a]
                    157:        LunaKey_P,                              // [3b]
                    158:        LunaKey_at,                             // [3c]
                    159:        LunaKey_bracketleft,    // [3d]
                    160:        NoKey,                                  // [3e]
                    161:        NoKey,                                  // [3f]
                    162: 
                    163:        NoKey,                                  // [40]
                    164:        NoKey,                                  // [41]
                    165:        LunaKey_A,                              // [42]
                    166:        LunaKey_S,                              // [43]
                    167:        LunaKey_D,                              // [44]
                    168:        LunaKey_F,                              // [45]
                    169:        LunaKey_G,                              // [46]
                    170:        LunaKey_H,                              // [47]
                    171:        LunaKey_J,                              // [48]
                    172:        LunaKey_K,                              // [49]
                    173:        LunaKey_L,                              // [4a]
                    174:        LunaKey_semicolon,              // [4b]
                    175:        LunaKey_colon,                  // [4c]
                    176:        LunaKey_bracketright,   // [4d]
                    177:        NoKey,                                  // [4e]
                    178:        NoKey,                                  // [4f]
                    179: 
                    180:        NoKey,                                  // [50]
                    181:        NoKey,                                  // [51]
                    182:        LunaKey_Z,                              // [52]
                    183:        LunaKey_X,                              // [53]
                    184:        LunaKey_C,                              // [54]
                    185:        LunaKey_V,                              // [55]
                    186:        LunaKey_B,                              // [56]
                    187:        LunaKey_N,                              // [57]
                    188:        LunaKey_M,                              // [58]
                    189:        LunaKey_comma,                  // [59]
                    190:        LunaKey_period,                 // [5a]
                    191:        LunaKey_slash,                  // [5b]
                    192:        LunaKey_underscore,             // [5c]
                    193:        NoKey,                                  // [5d]
                    194:        NoKey,                                  // [5e]
                    195:        NoKey,                                  // [5f]
                    196: 
                    197:        NoKey,                                  // [60]
                    198:        LunaKey_PAD_plus,               // [61]
                    199:        LunaKey_PAD_minus,              // [62]
                    200:        LunaKey_PAD_7,                  // [63]
                    201:        LunaKey_PAD_8,                  // [64]
                    202:        LunaKey_PAD_9,                  // [65]
                    203:        LunaKey_PAD_4,                  // [66]
                    204:        LunaKey_PAD_5,                  // [67]
                    205:        LunaKey_PAD_6,                  // [68]
                    206:        LunaKey_PAD_1,                  // [69]
                    207:        LunaKey_PAD_2,                  // [6a]
                    208:        LunaKey_PAD_3,                  // [6b]
                    209:        LunaKey_PAD_0,                  // [6c]
                    210:        LunaKey_PAD_decimal,    // [6d]
                    211:        LunaKey_PAD_enter,              // [6e]
                    212:        NoKey,                                  // [6f]
                    213: 
                    214:        NoKey,                                  // [70]
                    215:        NoKey,                                  // [71]
                    216:        LunaKey_F1,                             // [72]
                    217:        LunaKey_F2,                             // [73]
                    218:        LunaKey_F3,                             // [74]
                    219:        LunaKey_F4,                             // [75]
                    220:        LunaKey_F5,                             // [76]
                    221:        LunaKey_F6,                             // [77]
                    222:        LunaKey_F7,                             // [78]
                    223:        LunaKey_F8,                             // [79]
                    224:        LunaKey_F9,                             // [7a]
                    225:        LunaKey_F10,                    // [7b]
                    226:        LunaKey_PAD_multiply,   // [7c]
                    227:        LunaKey_PAD_divide,             // [7d]
                    228:        LunaKey_PAD_equal,              // [7e]
                    229:        LunaKey_PAD_comma,              // [7f]
                    230: };
                    231: 
                    232: /*static*/ const char * const
                    233: LunaKeyboard::keyname[] =
                    234: {
                    235:        "",                     // 00
                    236:        "",                     // 01
                    237:        "",                     // 02
                    238:        "",                     // 03
                    239:        "",                     // 04
                    240:        "",                     // 05
                    241:        "",                     // 06
                    242:        "",                     // 07
                    243:        "",                     // 08
                    244:        "TAB",          // 09
                    245:        "CTRL",         // 0a
                    246:        "かな",               // 0b
                    247:        "SHIFT",        // 0c
                    248:        "SHIFT",        // 0d
                    249:        "CAPS",         // 0e
                    250:        "S.F",          // 0f
                    251: 
                    252:        "ESC",          // 10
                    253:        "BS",           // 11
                    254:        "Enter",        // 12
                    255:        "",                     // 13
                    256:        "Space",        // 14
                    257:        "DEL",          // 15
                    258:        "XFER",         // 16
                    259:        "VALID",        // 17
                    260:        "PF11",         // 18
                    261:        "PF12",         // 19
                    262:        "PF13",         // 1a
                    263:        "PF14",         // 1b
                    264:        "↑",          // 1c
                    265:        "←",          // 1d
                    266:        "→",          // 1e
                    267:        "↓",          // 1f
                    268: 
                    269:        "",                     // 20
                    270:        "",                     // 21
                    271:        "1!",           // 22
                    272:        "2\"",          // 23
                    273:        "3#",           // 24
                    274:        "4$",           // 25
                    275:        "5%",           // 26
                    276:        "6&",           // 27
                    277:        "7'",           // 28
                    278:        "8(",           // 29
                    279:        "9)",           // 2a
                    280:        "0",            // 2b
                    281:        "-=",           // 2c
                    282:        "^~",           // 2d
                    283:        "\\|",          // 2e
                    284:        "",                     // 2f
                    285: 
                    286:        "",                     // 30
                    287:        "",                     // 31
                    288:        "Q",            // 32
                    289:        "W",            // 33
                    290:        "E",            // 34
                    291:        "R",            // 35
                    292:        "T",            // 36
                    293:        "Y",            // 37
                    294:        "U",            // 38
                    295:        "I",            // 39
                    296:        "O",            // 3a
                    297:        "P",            // 3b
                    298:        "@`",           // 3c
                    299:        "[{",           // 3d
                    300:        "",                     // 3e
                    301:        "",                     // 3f
                    302: 
                    303:        "",                     // 40
                    304:        "",                     // 41
                    305:        "A",            // 42
                    306:        "S",            // 43
                    307:        "D",            // 44
                    308:        "F",            // 45
                    309:        "G",            // 46
                    310:        "H",            // 47
                    311:        "J",            // 48
                    312:        "K",            // 49
                    313:        "L",            // 4a
                    314:        ";+",           // 4b
                    315:        ":*",           // 4c
                    316:        "]}",           // 4d
                    317:        "",                     // 4e
                    318:        "",                     // 4f
                    319: 
                    320:        "",                     // 50
                    321:        "",                     // 51
                    322:        "Z",            // 52
                    323:        "X",            // 53
                    324:        "C",            // 54
                    325:        "V",            // 55
                    326:        "B",            // 56
                    327:        "N",            // 57
                    328:        "M",            // 58
                    329:        ",<",           // 59
                    330:        ".>",           // 5a
                    331:        "/?",           // 5b
                    332:        " _",           // 5c
                    333:        "",                     // 5d
                    334:        "",                     // 5e
                    335:        "",                     // 5f
                    336: 
                    337:        "",                     // 60
                    338:        "PAD+",         // 61
                    339:        "PAD-",         // 62
                    340:        "PAD7",         // 63
                    341:        "PAD8",         // 64
                    342:        "PAD9",         // 65
                    343:        "PAD4",         // 66
                    344:        "PAD5",         // 67
                    345:        "PAD6",         // 68
                    346:        "PAD1",         // 69
                    347:        "PAD2",         // 6a
                    348:        "PAD3",         // 6b
                    349:        "PAD0",         // 6c
                    350:        "PAD.",         // 6d
                    351:        "PADEn",        // 6e
                    352:        "",                     // 6f
                    353: 
                    354:        "",                     // 70
                    355:        "",                     // 71
                    356:        "F1",           // 72
                    357:        "F2",           // 73
                    358:        "F3",           // 74
                    359:        "F4",           // 75
                    360:        "F5",           // 76
                    361:        "F6",           // 77
                    362:        "F7",           // 78
                    363:        "F8",           // 79
                    364:        "F9",           // 7a
                    365:        "F10",          // 7b
                    366:        "PAD*",         // 7c
                    367:        "PAD/",         // 7d
                    368:        "PAD=",         // 7e
                    369:        "PAD,",         // 7f
                    370: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.