Annotation of nono/vm/lunakbd.cpp, revision 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.