Last active
November 22, 2025 14:25
-
-
Save iwadon/b861e398e53f05fc4a63f710f9145ee7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <x68k/dos.h> | |
| #include <x68k/iocs.h> | |
| static int count = 0; | |
| static void print_key_info(unsigned int keysns, unsigned int mod, unsigned char *buf, int len) | |
| { | |
| ++count; | |
| printf("%4u: %05X %04X", count, keysns, mod); | |
| for (int i = 0; i < len; ++i) { | |
| printf(" %02X", (unsigned char)buf[i]); | |
| } | |
| for (int i = len; i < 2; ++i) { | |
| printf(" .."); | |
| } | |
| if (len == 0) { | |
| printf(" '^@' "); | |
| } else if (len == 1) { | |
| if (buf[0] < 0x20 || buf[0] == 0x7f) { | |
| printf(" '^%c' ", buf[0] ^ 0x40); | |
| } else if (buf[0] >= 0xa1 && buf[0] <= 0xdf) { | |
| printf(" '%c' ", buf[0]); | |
| } else { | |
| printf(" '%s' ", (char *)buf); | |
| } | |
| } else { | |
| printf(" '%s' ", (char *)buf); | |
| } | |
| switch ((keysns >> 8) & 0x7f) { | |
| case 0x01: | |
| printf("| ESC"); /* Escape */ | |
| break; | |
| case 0x0f: | |
| printf("| BS"); /* Backspace */ | |
| break; | |
| case 0x10: | |
| printf("| TAB"); /* Tab */ | |
| break; | |
| case 0x1d: | |
| printf("| CR"); /* Enter (full) */ | |
| break; | |
| case 0x35: | |
| printf("| SPACE"); /* Space */ | |
| break; | |
| case 0x36: | |
| printf("| HOME"); /* Home */ | |
| break; | |
| case 0x37: | |
| printf("| DEL"); /* Delete */ | |
| break; | |
| case 0x38: | |
| printf("| R_UP"); /* Roll Up */ | |
| break; | |
| case 0x39: | |
| printf("| R_DOWN"); /* Roll Down */ | |
| break; | |
| case 0x3a: | |
| printf("| UNDO"); /* Undo */ | |
| break; | |
| case 0x3b: | |
| printf("| ←"); /* Left Arrow */ | |
| break; | |
| case 0x3c: | |
| printf("| ↑"); /* Up Arrow */ | |
| break; | |
| case 0x3d: | |
| printf("| →"); /* Right Arrow */ | |
| break; | |
| case 0x3e: | |
| printf("| ↓"); /* Down Arrow */ | |
| break; | |
| case 0x3f: | |
| printf("| CLR"); /* Clear */ | |
| break; | |
| case 0x4e: | |
| printf("| ENTER"); /* Enter (numeric) */ | |
| break; | |
| case 0x52: | |
| printf("| 記号"); /* Symbol key */ | |
| break; | |
| case 0x53: | |
| printf("| 登録"); /* Register key */ | |
| break; | |
| case 0x54: | |
| printf("| HELP"); /* Help key */ | |
| break; | |
| case 0x55: | |
| printf("| XF1"); /* Extra Function 1 */ | |
| break; | |
| case 0x56: | |
| printf("| XF2"); /* Extra Function 2 */ | |
| break; | |
| case 0x57: | |
| printf("| XF3"); /* Extra Function 3 */ | |
| break; | |
| case 0x58: | |
| printf("| XF4"); /* Extra Function 4 */ | |
| break; | |
| case 0x59: | |
| printf("| XF5"); /* Extra Function 5 */ | |
| break; | |
| case 0x5a: | |
| printf("| かな"); /* Kana key */ | |
| break; | |
| case 0x5b: | |
| printf("| ローマ字"); /* Romaji key */ | |
| break; | |
| case 0x5c: | |
| printf("| コード入力"); /* Code Input key */ | |
| break; | |
| case 0x5d: | |
| printf("| CAPS"); /* Caps Lock */ | |
| break; | |
| case 0x5e: | |
| printf("| INS"); /* Insert */ | |
| break; | |
| case 0x5f: | |
| printf("| ひらがな"); /* Hiragana key */ | |
| break; | |
| case 0x60: | |
| printf("| 全角"); /* Zenkaku key */ | |
| break; | |
| case 0x61: | |
| printf("| BREAK"); /* Break */ | |
| break; | |
| case 0x62: | |
| printf("| COPY"); /* Copy */ | |
| break; | |
| case 0x63: | |
| printf("| F1"); /* Function 1 */ | |
| break; | |
| case 0x64: | |
| printf("| F2"); /* Function 2 */ | |
| break; | |
| case 0x65: | |
| printf("| F3"); /* Function 3 */ | |
| break; | |
| case 0x66: | |
| printf("| F4"); /* Function 4 */ | |
| break; | |
| case 0x67: | |
| printf("| F5"); /* Function 5 */ | |
| break; | |
| case 0x68: | |
| printf("| F6"); /* Function 6 */ | |
| break; | |
| case 0x69: | |
| printf("| F7"); /* Function 7 */ | |
| break; | |
| case 0x6a: | |
| printf("| F8"); /* Function 8 */ | |
| break; | |
| case 0x6b: | |
| printf("| F9"); /* Function 9 */ | |
| break; | |
| case 0x6c: | |
| printf("| F10"); /* Function 10 */ | |
| break; | |
| case 0x70: | |
| printf("| SHIFT"); /* Shift */ | |
| break; | |
| case 0x71: | |
| printf("| CTRL"); /* Control */ | |
| break; | |
| case 0x72: | |
| printf("| OPT.1"); /* Option 1 (Alt) */ | |
| break; | |
| case 0x73: | |
| printf("| OPT.2"); /* Option 2 (AltGr) */ | |
| break; | |
| case 0x74: | |
| printf("| NUM"); /* Num Lock */ | |
| break; | |
| } | |
| if (mod & 0x01) { | |
| printf(" [SHIFT]"); | |
| } | |
| if (mod & 0x02) { | |
| printf(" [CTRL]"); | |
| } | |
| if (mod & 0x04) { | |
| printf(" [OPT.1]"); | |
| } | |
| if (mod & 0x08) { | |
| printf(" [OPT.2]"); | |
| } | |
| printf("\n"); | |
| } | |
| static int is_shift_jis_lead_byte(unsigned char ch) | |
| { | |
| return (ch >= 0x81 && ch <= 0x9f) || (ch >= 0xe0 && ch <= 0xfc); | |
| } | |
| static int is_modifier_key(unsigned int keysns) | |
| { | |
| unsigned int scancode = (keysns >> 8) & 0x7f; | |
| return scancode == 0x70 /* SHIFT */ | |
| || scancode == 0x71 /* CTRL */ | |
| || scancode == 0x72 /* OPT.1 (Alt) */ | |
| || scancode == 0x73 /* OPT.2 (AltGr) */ | |
| || scancode == 0x5a /* かな */ | |
| || scancode == 0x5b /* ローマ字 */ | |
| || scancode == 0x5c /* コード入力 */ | |
| || scancode == 0x5d /* CAPS */ | |
| || scancode == 0x5e /* INS */ | |
| || scancode == 0x5f /* ひらがな */ | |
| || scancode == 0x60 /* 全角 */ | |
| ; | |
| } | |
| int main(void) | |
| { | |
| while (1) { | |
| /* キーの入力状態を調べる */ | |
| int keysns = _iocs_b_keysns(); | |
| if (keysns == 0) { | |
| /* 入力なし */ | |
| continue; | |
| } | |
| int len = 0; | |
| if ((keysns & 0x00ff) == 0) { | |
| _iocs_b_keyinp(); /* ダミー読み取り */ | |
| if (!is_modifier_key(keysns)) { | |
| unsigned int mod = _iocs_b_sftsns(); | |
| print_key_info(keysns, mod, NULL, len); | |
| } | |
| continue; | |
| } | |
| unsigned char buf[3] = { 0 }; | |
| buf[0] = _dos_inkey(); | |
| len = 1; | |
| if (is_shift_jis_lead_byte((unsigned char)buf[0])) { | |
| /* 先頭バイトなら次のバイトも読む */ | |
| unsigned int ch2 = _dos_inkey(); | |
| buf[1] = ch2; | |
| len = 2; | |
| } | |
| unsigned int mod = _iocs_b_sftsns(); | |
| print_key_info(keysns, mod, buf, len); | |
| if (buf[0] == 'q' || buf[0] == 'Q') { | |
| printf("Quitting...\r\n"); | |
| break; | |
| } | |
| } | |
| return 0; | |
| } |
Author
Author
Author
macOS上のXEiJでのキーイベントのログ。Enter、Shift+Enter、Ctrl+Enterの順に入力。
when=1763782380451 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=⏎,keyChar=⏎,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00a1, pressed=true
when=1763782380451 toString="java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=不明 keyCode: 0x0,keyChar=⏎,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0xa] on canvas0"
when=1763782380563 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=10,keyText=⏎,keyChar=⏎,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00a1, pressed=false
when=1763782381405 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyText=⇧,keyChar=未定義 keyChar,modifiers=⇧,extModifiers=⇧,keyLocation=KEY_LOCATION_LEFT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x10] on canvas0"
intCode=0x00100102, pressed=true
when=1763782381876 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=⏎,keyChar='
',modifiers=⇧,extModifiers=⇧,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
intCode=0x000a0001, pressed=true
when=1763782381876 toString="java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=不明 keyCode: 0x0,keyChar='
',modifiers=⇧,extModifiers=⇧,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
when=1763782381970 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=10,keyText=⏎,keyChar='
',modifiers=⇧,extModifiers=⇧,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
intCode=0x000a0001, pressed=false
when=1763782382483 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=16,keyText=⇧,keyChar=未定義 keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x10] on canvas0"
intCode=0x00100102, pressed=false
when=1763782383034 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=17,keyText=⌃,keyChar=未定義 keyChar,modifiers=⌃,extModifiers=⌃,keyLocation=KEY_LOCATION_LEFT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x11] on canvas0"
intCode=0x00110112, pressed=true
when=1763782383481 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=⏎,keyChar='
',modifiers=⌃,extModifiers=⌃,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
intCode=0x000a0001, pressed=true
when=1763782383481 toString="java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=不明 keyCode: 0x0,keyChar='
',modifiers=⌃,extModifiers=⌃,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
when=1763782383564 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=10,keyText=⏎,keyChar='
',modifiers=⌃,extModifiers=⌃,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
intCode=0x000a0001, pressed=false
when=1763782384033 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=17,keyText=⌃,keyChar=未定義 keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x11] on canvas0"
intCode=0x00110112, pressed=false
Author
Windows上でのキーイベントのログです。
when=1763784785533 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=Enter,keyChar=Enter,keyLocation=KEY_LOCATION_STANDARD,rawCode=13,primaryLevelUnicode=13,scancode=28,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00d1, pressed=true
when=1763784785533 toString="java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=不明 keyCode: 0x0,keyChar=Enter,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
when=1763784785608 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=10,keyText=Enter,keyChar=Enter,keyLocation=KEY_LOCATION_STANDARD,rawCode=13,primaryLevelUnicode=13,scancode=28,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00d1, pressed=false
when=1763784787343 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyText=Shift,keyChar=未定義 keyChar,modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_LEFT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on canvas0"
intCode=0x00100102, pressed=true
when=1763784787964 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=Enter,keyChar=Enter,modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_STANDARD,rawCode=13,primaryLevelUnicode=13,scancode=28,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00d1, pressed=true
when=1763784787964 toString="java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=不明 keyCode: 0x0,keyChar=Enter,modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
when=1763784788050 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=10,keyText=Enter,keyChar=Enter,modifiers=Shift,extModifiers=Shift,keyLocation=KEY_LOCATION_STANDARD,rawCode=13,primaryLevelUnicode=13,scancode=28,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00d1, pressed=false
when=1763784789661 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=16,keyText=Shift,keyChar=未定義 keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=16,primaryLevelUnicode=0,scancode=42,extendedKeyCode=0x10] on canvas0"
intCode=0x00100102, pressed=false
when=1763784790028 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=17,keyText=Ctrl,keyChar=未定義 keyChar,modifiers=Ctrl,extModifiers=Ctrl,keyLocation=KEY_LOCATION_LEFT,rawCode=17,primaryLevelUnicode=0,scancode=29,extendedKeyCode=0x11] on canvas0"
intCode=0x00110112, pressed=true
when=1763784791300 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=Enter,keyChar=Enter,modifiers=Ctrl,extModifiers=Ctrl,keyLocation=KEY_LOCATION_STANDARD,rawCode=13,primaryLevelUnicode=13,scancode=28,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00d1, pressed=true
when=1763784791300 toString="java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=不明 keyCode: 0x0,keyChar=Enter,modifiers=Ctrl,extModifiers=Ctrl,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
when=1763784791379 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=10,keyText=Enter,keyChar=Enter,modifiers=Ctrl,extModifiers=Ctrl,keyLocation=KEY_LOCATION_STANDARD,rawCode=13,primaryLevelUnicode=13,scancode=28,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00d1, pressed=false
when=1763784793194 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=17,keyText=Ctrl,keyChar=未定義 keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=17,primaryLevelUnicode=0,scancode=29,extendedKeyCode=0x11] on canvas0"
intCode=0x00110112, pressed=false
Author
macOS XEiJ 0.25.11.22 TEST
ShiftキーやCtrlキーを押しながらのReturnキー(macOSのEnterキー)の入力が効くようになった。対応感謝。
when=1763808045866 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=⏎,keyChar=⏎,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00a1, pressed=true
when=1763808045866 toString="java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=不明 keyCode: 0x0,keyChar=⏎,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0xa] on canvas0"
when=1763808045936 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=10,keyText=⏎,keyChar=⏎,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0xa] on canvas0"
intCode=0x000a00a1, pressed=false
when=1763808047208 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=16,keyText=⇧,keyChar=未定義 keyChar,modifiers=⇧,extModifiers=⇧,keyLocation=KEY_LOCATION_LEFT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x10] on canvas0"
intCode=0x00100102, pressed=true
when=1763808047825 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=⏎,keyChar='
',modifiers=⇧,extModifiers=⇧,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
intCode=0x000a0001, pressed=true
when=1763808047825 toString="java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=不明 keyCode: 0x0,keyChar='
',modifiers=⇧,extModifiers=⇧,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
when=1763808047932 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=10,keyText=⏎,keyChar='
',modifiers=⇧,extModifiers=⇧,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
intCode=0x000a0001, pressed=false
when=1763808048417 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=16,keyText=⇧,keyChar=未定義 keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x10] on canvas0"
intCode=0x00100102, pressed=false
when=1763808049052 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=17,keyText=⌃,keyChar=未定義 keyChar,modifiers=⌃,extModifiers=⌃,keyLocation=KEY_LOCATION_LEFT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x11] on canvas0"
intCode=0x00110112, pressed=true
when=1763808049733 toString="java.awt.event.KeyEvent[KEY_PRESSED,keyCode=10,keyText=⏎,keyChar='
',modifiers=⌃,extModifiers=⌃,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
intCode=0x000a0001, pressed=true
when=1763808049733 toString="java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=不明 keyCode: 0x0,keyChar='
',modifiers=⌃,extModifiers=⌃,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
when=1763808049855 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=10,keyText=⏎,keyChar='
',modifiers=⌃,extModifiers=⌃,keyLocation=KEY_LOCATION_STANDARD,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on canvas0"
intCode=0x000a0001, pressed=false
when=1763808050389 toString="java.awt.event.KeyEvent[KEY_RELEASED,keyCode=17,keyText=⌃,keyChar=未定義 keyChar,keyLocation=KEY_LOCATION_LEFT,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x11] on canvas0"
intCode=0x00110112, pressed=false
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment



macOS上のXEiJでの動作例
