|
|
| version 1.2, 2003/11/09 23:42:06 | version 1.12, 2004/02/18 06:19:01 |
|---|---|
| Line 2 | Line 2 |
| #include "np2.h" | #include "np2.h" |
| #include "dosio.h" | #include "dosio.h" |
| #include "mackbd.h" | #include "mackbd.h" |
| #include "memory.h" | #include "keystat.h" |
| #include "pccore.h" | |
| #include "iocore.h" | |
| #define NC 0xff | #define NC 0xff |
| typedef struct { | |
| UINT8 f11[5]; | |
| UINT8 f12[5]; | |
| } BINDTBL; | |
| static const BINDTBL bindtbl = { | |
| // ¥«¥Ê Stop [¡á] NFER USER | |
| {0x72, 0x60, 0x4d, 0x51, 0x76}, | |
| // Copy [¡¤] XFER | |
| {NC, 0x61, 0x4f, 0x35, 0x77}}; | |
| void mackbd_resetf11(void) { | |
| UINT i; | |
| for (i=1; i<(sizeof(bindtbl.f11)/sizeof(UINT8)); i++) { | |
| keystat_forcerelease(bindtbl.f11[i]); | |
| } | |
| } | |
| void mackbd_resetf12(void) { | |
| UINT i; | |
| for (i=1; i<(sizeof(bindtbl.f12)/sizeof(UINT8)); i++) { | |
| keystat_forcerelease(bindtbl.f12[i]); | |
| } | |
| } | |
| #if TARGET_API_MAC_CARBON | |
| typedef struct { | |
| UINT32 tick; | |
| BYTE keymap[16]; | |
| BOOL active; | |
| UINT32 repbase; | |
| UINT32 reptick; | |
| BYTE repkey; | |
| } MACKBD; | |
| static MACKBD mackbd; | |
| static const BYTE keymac[128] = { | static const BYTE keymac[128] = { |
| // £Á, £Ó, £Ä, £Æ, £È, £Ç, £Ú, £Ø ; 0x00 | // £Á, £Ó, £Ä, £Æ, £È, £Ç, £Ú, £Ø ; 0x00 |
| 0x1d,0x1e,0x1f,0x20,0x22,0x21,0x29,0x2a, | 0x1d,0x1e,0x1f,0x20,0x22,0x21,0x29,0x2a, |
| Line 24 static const BYTE keymac[128] = { | Line 65 static const BYTE keymac[128] = { |
| 0x24,0x26,0x28,0x30,0x32,0x2e,0x2f,0x31, | 0x24,0x26,0x28,0x30,0x32,0x2e,0x2f,0x31, |
| // TAB, SPC, , BS, , ESC, , apl ; 0x30 | // TAB, SPC, , BS, , ESC, , apl ; 0x30 |
| 0x0f,0x34, NC,0x0e, NC,0x00, NC, NC, | 0x0f,0x34, NC,0x0e, NC,0x00, NC, NC, |
| // sft, ctl, alt, cps, , , , ; 0x38 | // sft, cps, alt, ctl, , , , ; 0x38 |
| 0x70,0x74,0x73,0x79, NC, NC, NC, NC, | 0x70,0x79,0x73,0x74, NC, NC, NC, NC, |
| // , [.], , [*], , , [+], ; 0x40 | // , [.], , [*], , [+], , ; 0x40 |
| NC,0x50, NC,0x45, NC, NC,0x49, NC, | NC,0x50, NC,0x45, NC,0x49, NC, NC, |
| // , , , , ret, , [-], clr ; 0x48 | // , , , [/], ret, , [-], clr ; 0x48 |
| NC, NC, NC, NC,0x1c, NC,0x40,0x3e, | NC, NC, NC,0x41,0x1c, NC,0x40,0x3e, |
| // , [=], [0], [1], [2], [3], [4], [5] ; 0x50 | // , [=], [0], [1], [2], [3], [4], [5] ; 0x50 |
| NC,0x4d,0x4e,0x4a,0x4b,0x4c,0x46,0x47, | NC,0x4d,0x4e,0x4a,0x4b,0x4c,0x46,0x47, |
| // [6], [7], , [8], [9], ¡ï, ¡², [,] ; 0x58 | // [6], [7], , [8], [9], ¡ï, ¡², [,] ; 0x58 |
| 0x48,0x42, NC,0x43,0x44,0x0d,0x33,0x4f, | 0x48,0x42, NC,0x43,0x44,0x0d,0x33,0x4f, |
| // F5, F6, F7, F3, F8, F9, , F11 ; 0x60 | // F5, F6, F7, F3, F8, F9, , F11 ; 0x60 |
| 0x66,0x67,0x68,0x64,0x69,0x6a, NC,0x72, | 0x66,0x67,0x68,0x64,0x69,0x6a, NC, NC, |
| // , F13, , F14, , F10, , F12 ; 0x68 | // , F13, , F14, , F10, , F12 ; 0x68 |
| NC, NC, NC, NC, NC,0x6b, NC, NC, | NC, NC, NC, NC, NC,0x6b, NC, NC, |
| // , F15, hlp, hom, ru, del, F4, end ; 0x70 | // , F15, hlp, hom, ru, del, F4, end ; 0x70 |
| Line 43 static const BYTE keymac[128] = { | Line 84 static const BYTE keymac[128] = { |
| // F2, rd, F1, ¢«, ¢ª, ¢, ¢¬, ; 0x78 | // F2, rd, F1, ¢«, ¢ª, ¢, ¢¬, ; 0x78 |
| 0x63,0x36,0x62,0x3b,0x3c,0x3d,0x3a, NC}; | 0x63,0x36,0x62,0x3b,0x3c,0x3d,0x3a, NC}; |
| #if 0 | static const BYTE repkey[16] = { |
| // ÎӸ饡¼²¡²¼ | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, |
| static const BYTE keymac2[128] = { | 0xff, 0xff, 0xc1, 0xff, 0xc0, 0x0f, 0x07, 0x07}; |
| // £Á, £Ó, £Ä, £Æ, £È, £Ç, £Ú, £Ø ; 0x00 | |
| NC, NC, NC, NC,0x3f, NC, NC, NC, | |
| // £Ã, £Ö, , £Â, £Ñ, £×, £Å, £Ò ; 0x08 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // £Ù, £Ô, £±, £², £³, £´, £¶, £µ ; 0x10 | |
| NC, NC,0x62,0x63, 0x64,0x65,0x67,0x66, | |
| // ¡°, £¹, £·, ¡Ý, £¸, £°, ¡Î, £Ï ; 0x18 | |
| NC,0x6a,0x68, NC,0x69,0x6b, NC, NC, | |
| // £Õ, ¡÷, £É, £Ð, ret, £Ì, £Ê, ¡§ ; 0x20 | |
| NC, NC, NC, NC, NC,0x3e, NC, NC, | |
| // £Ë, ¡¨, ¡Ï, ¡¤, ¡¿, £Î, £Í, ¡¥ ; 0x28 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // TAB, SPC, , BS, , ESC, , apl ; 0x30 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // sft, ctl, alt, cps, , , , ; 0x38 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , [.], , [*], , , [+], ; 0x40 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , , , , ret, , [-], clr ; 0x48 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , [=], [0], [1], [2], [3], [4], [5] ; 0x50 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // [6], [7], , [8], [9], ¡ï, ¡², [,] ; 0x58 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // F5, F6, F7, F3, F8, F9, , F11 ; 0x60 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , F13, , F14, , F10, , F12 ; 0x68 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , F15, hlp, hom, ru, del, F4, end ; 0x70 | |
| NC, NC, NC, NC, NC,0x38, NC, NC, | |
| // F2, rd, F1, ¢«, ¢ª, ¢, ¢¬, ; 0x78 | |
| NC, NC, NC, NC, NC, NC, NC, NC}; | |
| #endif | |
| #if TARGET_API_MAC_CARBON | |
| static BYTE keymap[16]; | |
| static UINT32 shiftchktick = 0; | |
| void mackbd_initialize(void) { | void mackbd_initialize(void) { |
| shiftchktick = GETTICK(); | mackbd.tick = GETTICK(); |
| ZeroMemory(&keymap, sizeof(keymap)); | ZeroMemory(&mackbd.keymap, sizeof(mackbd.keymap)); |
| mackbd.active = TRUE; | |
| mackbd.repkey = NC; | |
| } | } |
| void mackbd_callback(void) { | void mackbd_callback(void) { |
| Line 101 void mackbd_callback(void) { | Line 106 void mackbd_callback(void) { |
| UINT j; | UINT j; |
| BYTE keycode; | BYTE keycode; |
| if (!mackbd.active) { | |
| return; | |
| } | |
| tick = GETTICK(); | tick = GETTICK(); |
| if (shiftchktick == tick) { | if (mackbd.tick == tick) { |
| return; | return; |
| } | } |
| shiftchktick = tick; | mackbd.tick = tick; |
| #if TARGET_API_MAC_CARBON | #if TARGET_API_MAC_CARBON |
| GetKeys((long *)key); | GetKeys((long *)key); |
| #else | #else |
| GetKeys((unsigned long *)key); | GetKeys((unsigned long *)key); |
| #endif | #endif |
| for (i=0; i<16; i++) { | for (i=0; i<16; i++) { |
| update = keymap[i] ^ key[i]; | update = mackbd.keymap[i] ^ key[i]; |
| if (update) { | if (update) { |
| keymap[i] = key[i]; | mackbd.keymap[i] = key[i]; |
| for (j=0; j<8; j++) { | for (j=0; j<8; j++) { |
| if (update & (1 << j)) { | if (update & (1 << j)) { |
| keycode = keymac[i * 8 + j]; | keycode = keymac[i * 8 + j]; |
| if (keycode != NC) { | if (keycode != NC) { |
| if (key[i] & (1 << j)) { | if (key[i] & (1 << j)) { |
| keystat_senddata(keycode); | keystat_senddata(keycode); |
| if ((repkey[keycode >> 3] << (keycode & 7)) | |
| & 0x80) { | |
| mackbd.repkey = keycode; | |
| mackbd.repbase = tick; | |
| mackbd.reptick = 500; | |
| } | |
| } | } |
| else { | else { |
| if (mackbd.repkey == keycode) { | |
| mackbd.repkey = NC; | |
| } | |
| keystat_senddata(keycode + 0x80); | keystat_senddata(keycode + 0x80); |
| } | } |
| } | } |
| Line 130 void mackbd_callback(void) { | Line 148 void mackbd_callback(void) { |
| } | } |
| } | } |
| } | } |
| // ¥¡¼¥ê¥Ô¡¼¥È½èÍý | |
| if (mackbd.repkey != NC) { | |
| if ((tick - mackbd.repbase) >= mackbd.reptick) { | |
| keystat_senddata(mackbd.repkey); // keystat¦¤Çbreak¤¹¤ë | |
| mackbd.repbase = tick; | |
| mackbd.reptick = 40; | |
| } | |
| } | |
| } | } |
| BOOL mackbd_keydown(int keycode) { | BOOL mackbd_keydown(int keycode, BOOL cmd) { |
| if (keycode == 0x6f) { | BYTE data; |
| if (np2oscfg.F12COPY == 1) { | |
| keystat_senddata(0x61); | data = NC; |
| return(TRUE); | if (keycode == 0x67) { |
| } | if (np2oscfg.F11KEY < (sizeof(bindtbl.f11)/sizeof(UINT8))) { |
| else if (np2oscfg.F12COPY == 2) { | data = bindtbl.f11[np2oscfg.F11KEY]; |
| keystat_senddata(0x60); | } |
| return(TRUE); | } |
| } | else if (keycode == 0x6f) { |
| if (np2oscfg.F12KEY < (sizeof(bindtbl.f12)/sizeof(UINT8))) { | |
| data = bindtbl.f12[np2oscfg.F12KEY]; | |
| } | |
| } | } |
| if (data != NC) { | |
| keystat_senddata(data); | |
| return(TRUE); | |
| } | |
| (void)cmd; | |
| return(FALSE); | return(FALSE); |
| } | } |
| BOOL mackbd_keyup(int keycode) { | BOOL mackbd_keyup(int keycode) { |
| if (keycode == 0x6f) { | BYTE data; |
| if (np2oscfg.F12COPY == 1) { | |
| keystat_senddata(0x61 | 0x80); | data = NC; |
| return(TRUE); | if (keycode == 0x67) { |
| } | if (np2oscfg.F11KEY < (sizeof(bindtbl.f11)/sizeof(UINT8))) { |
| else if (np2oscfg.F12COPY == 2) { | data = bindtbl.f11[np2oscfg.F11KEY]; |
| keystat_senddata(0x60 | 0x80); | |
| return(TRUE); | |
| } | } |
| } | } |
| else if (keycode == 0x6f) { | |
| if (np2oscfg.F12KEY < (sizeof(bindtbl.f12)/sizeof(UINT8))) { | |
| data = bindtbl.f12[np2oscfg.F12KEY]; | |
| } | |
| } | |
| if (data != NC) { | |
| keystat_senddata(data | 0x80); | |
| return(TRUE); | |
| } | |
| return(FALSE); | return(FALSE); |
| } | } |
| void mackbd_activate(BOOL active) { | |
| if (mackbd.active != active) { | |
| mackbd.active = active; | |
| if (!active) { | |
| ZeroMemory(&mackbd.keymap, sizeof(mackbd.keymap)); | |
| keystat_allrelease(); | |
| } | |
| } | |
| } | |
| #else | #else |
| enum { | enum { |
| Line 186 static const KEYSEA keysea[] = { | Line 239 static const KEYSEA keysea[] = { |
| {kMac_Basebit(kMac_alt), 0x73}, | {kMac_Basebit(kMac_alt), 0x73}, |
| {kMac_Basebit(kMac_ctrl), 0x74}}; | {kMac_Basebit(kMac_ctrl), 0x74}}; |
| static const BYTE keymac[128] = { | |
| // £Á, £Ó, £Ä, £Æ, £È, £Ç, £Ú, £Ø ; 0x00 | |
| 0x1d,0x1e,0x1f,0x20,0x22,0x21,0x29,0x2a, | |
| // £Ã, £Ö, , £Â, £Ñ, £×, £Å, £Ò ; 0x08 | |
| 0x2b,0x2c, NC,0x2d,0x10,0x11,0x12,0x13, | |
| // £Ù, £Ô, £±, £², £³, £´, £¶, £µ ; 0x10 | |
| 0x15,0x14,0x01,0x02,0x03,0x04,0x06,0x05, | |
| // ¡°, £¹, £·, ¡Ý, £¸, £°, ¡Î, £Ï ; 0x18 | |
| 0x0c,0x09,0x07,0x0b,0x08,0x0a,0x1b,0x18, | |
| // £Õ, ¡÷, £É, £Ð, ret, £Ì, £Ê, ¡§ ; 0x20 | |
| 0x16,0x1a,0x17,0x19,0x1c,0x25,0x23,0x27, | |
| // £Ë, ¡¨, ¡Ï, ¡¤, ¡¿, £Î, £Í, ¡¥ ; 0x28 | |
| 0x24,0x26,0x28,0x30,0x32,0x2e,0x2f,0x31, | |
| // TAB, SPC, , BS, , ESC, , apl ; 0x30 | |
| 0x0f,0x34, NC,0x0e, NC,0x00, NC, NC, | |
| // sft, cps, alt, ctl, , , , ; 0x38 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , [.], , [*], , [+], , ; 0x40 | |
| NC,0x50, NC,0x45, NC,0x49, NC, NC, | |
| // , , , [/], ret, , [-], clr ; 0x48 | |
| NC, NC, NC,0x41,0x1c, NC,0x40,0x3e, | |
| // , [=], [0], [1], [2], [3], [4], [5] ; 0x50 | |
| NC,0x4d,0x4e,0x4a,0x4b,0x4c,0x46,0x47, | |
| // [6], [7], , [8], [9], ¡ï, ¡², [,] ; 0x58 | |
| 0x48,0x42, NC,0x43,0x44,0x0d,0x33,0x4f, | |
| // F5, F6, F7, F3, F8, F9, , F11 ; 0x60 | |
| 0x66,0x67,0x68,0x64,0x69,0x6a, NC, NC, | |
| // , F13, , F14, , F10, , F12 ; 0x68 | |
| NC, NC, NC, NC, NC,0x6b, NC, NC, | |
| // , F15, hlp, hom, ru, del, F4, end ; 0x70 | |
| NC, NC,0x3f,0x3e,0x37,0x39,0x65,0x3f, | |
| // F2, rd, F1, ¢«, ¢ª, ¢, ¢¬, ; 0x78 | |
| 0x63,0x36,0x62,0x3b,0x3c,0x3d,0x3a, NC}; | |
| // ÎӸ饡¼²¡²¼ | |
| static const BYTE keymac2[128] = { | |
| // £Á, £Ó, £Ä, £Æ, £È, £Ç, £Ú, £Ø ; 0x00 | |
| NC, NC, NC, NC,0x3f, NC, NC, NC, | |
| // £Ã, £Ö, , £Â, £Ñ, £×, £Å, £Ò ; 0x08 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // £Ù, £Ô, £±, £², £³, £´, £¶, £µ ; 0x10 | |
| NC, NC,0x62,0x63, 0x64,0x65,0x67,0x66, | |
| // ¡°, £¹, £·, ¡Ý, £¸, £°, ¡Î, £Ï ; 0x18 | |
| NC,0x6a,0x68, NC,0x69,0x6b, NC, NC, | |
| // £Õ, ¡÷, £É, £Ð, ret, £Ì, £Ê, ¡§ ; 0x20 | |
| NC, NC, NC, NC, NC,0x3e, NC, NC, | |
| // £Ë, ¡¨, ¡Ï, ¡¤, ¡¿, £Î, £Í, ¡¥ ; 0x28 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // TAB, SPC, , BS, , ESC, , apl ; 0x30 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // sft, cps, alt, ctl, , , , ; 0x38 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , [.], , [*], , [+], , ; 0x40 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , , , , ret, , [-], clr ; 0x48 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , [=], [0], [1], [2], [3], [4], [5] ; 0x50 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // [6], [7], , [8], [9], ¡ï, ¡², [,] ; 0x58 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // F5, F6, F7, F3, F8, F9, , F11 ; 0x60 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , F13, , F14, , F10, , F12 ; 0x68 | |
| NC, NC, NC, NC, NC, NC, NC, NC, | |
| // , F15, hlp, hom, ru, del, F4, end ; 0x70 | |
| NC, NC, NC, NC, NC,0x38, NC, NC, | |
| // F2, rd, F1, ¢«, ¢ª, ¢, ¢¬, ; 0x78 | |
| NC, NC, NC, NC, NC, NC, NC, NC}; | |
| typedef struct { | typedef struct { |
| UINT32 tick; | UINT32 tick; |
| UINT16 shift; | UINT16 shift; |
| BOOL active; | |
| } MACKBD; | } MACKBD; |
| static MACKBD mackbd; | static MACKBD mackbd; |
| Line 196 static MACKBD mackbd; | Line 319 static MACKBD mackbd; |
| void mackbd_initialize(void) { | void mackbd_initialize(void) { |
| ZeroMemory(&mackbd, sizeof(mackbd)); | ZeroMemory(&mackbd, sizeof(mackbd)); |
| mackbd.active = TRUE; | |
| } | } |
| void mackbd_callback(void) { | void mackbd_callback(void) { |
| Line 206 void mackbd_callback(void) { | Line 330 void mackbd_callback(void) { |
| UINT16 shiftchg; | UINT16 shiftchg; |
| UINT i; | UINT i; |
| if (!mackbd.active) { | |
| return; | |
| } | |
| tick = GETTICK(); | tick = GETTICK(); |
| if (mackbd.tick != tick) { | if (mackbd.tick != tick) { |
| mackbd.tick = tick; | mackbd.tick = tick; |
| Line 226 void mackbd_callback(void) { | Line 354 void mackbd_callback(void) { |
| } | } |
| } | } |
| BOOL mackbd_keydown(int keycode) { | BOOL mackbd_keydown(int keycode, BOOL cmd) { |
| BYTE data; | BYTE data; |
| data = NC; | data = NC; |
| if (keycode == 0x6f) { | if (keycode == 0x67) { |
| if (np2oscfg.F12COPY == 1) { | if (np2oscfg.F11KEY < (sizeof(bindtbl.f11)/sizeof(UINT8))) { |
| data = 0x61; | data = bindtbl.f11[np2oscfg.F11KEY]; |
| } | } |
| else if (np2oscfg.F12COPY == 2) { | } |
| data = 0x60; | else if (keycode == 0x6f) { |
| if (np2oscfg.F12KEY < (sizeof(bindtbl.f12)/sizeof(UINT8))) { | |
| data = bindtbl.f12[np2oscfg.F12KEY]; | |
| } | } |
| } | } |
| else if (keycode < 0x80) { | else if (keycode < 0x80) { |
| data = keymac[keycode]; | if (!cmd) { |
| data = keymac[keycode]; | |
| } | |
| else { | |
| data = keymac2[keycode]; | |
| } | |
| } | } |
| if (data != NC) { | if (data != NC) { |
| keystat_senddata(data); | keystat_senddata(data); |
| Line 254 BOOL mackbd_keydown(int keycode) { | Line 389 BOOL mackbd_keydown(int keycode) { |
| BOOL mackbd_keyup(int keycode) { | BOOL mackbd_keyup(int keycode) { |
| BYTE data; | BYTE data; |
| BOOL ret; | |
| data = NC; | data = NC; |
| if (keycode == 0x6f) { | ret = FALSE; |
| if (np2oscfg.F12COPY == 1) { | if (keycode == 0x67) { |
| data = 0x61; | if (np2oscfg.F11KEY < (sizeof(bindtbl.f11)/sizeof(UINT8))) { |
| data = bindtbl.f11[np2oscfg.F11KEY]; | |
| } | } |
| else if (np2oscfg.F12COPY == 2) { | } |
| data = 0x60; | else if (keycode == 0x6f) { |
| if (np2oscfg.F12KEY < (sizeof(bindtbl.f12)/sizeof(UINT8))) { | |
| data = bindtbl.f12[np2oscfg.F12KEY]; | |
| } | } |
| } | } |
| else if (keycode < 0x80) { | else if (keycode < 0x80) { |
| data = keymac[keycode]; | data = keymac[keycode]; |
| if (data != NC) { | |
| keystat_senddata(data | 0x80); | |
| ret = TRUE; | |
| } | |
| data = keymac2[keycode]; | |
| } | } |
| if (data != NC) { | if (data != NC) { |
| keystat_senddata(data | 0x80); | keystat_senddata(data | 0x80); |
| return(TRUE); | ret = TRUE; |
| } | } |
| else { | return(ret); |
| return(FALSE); | } |
| void mackbd_activate(BOOL active) { | |
| if (mackbd.active != active) { | |
| mackbd.active = active; | |
| if (!active) { | |
| keystat_allrelease(); | |
| } | |
| } | } |
| } | } |