| version 1.2, 2003/10/17 03:52:24 | version 1.4, 2003/10/20 10:14:27 | 
| Line 6 | Line 6 | 
 | #include        "pccore.h" | #include        "pccore.h" | 
 | #include        "iocore.h" | #include        "iocore.h" | 
 |  |  | 
 |  | #if defined(NP2GCC) | 
 |  | #include        "mousemng.h" | 
 |  | #include        "menu.h" | 
 |  | #include        "sysmng.h" | 
 |  | #endif | 
 |  |  | 
 | #define         NC              0xff | #define         NC              0xff | 
 |  |  | 
| Line 25  static const BYTE keymac[128] = { | Line 30  static const BYTE keymac[128] = { | 
 | //       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, ctl, alt, cps,    ,    ,    ,             ; 0x38 | 
| NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 0x70,0x74,0x73,0x79,  NC,  NC,  NC,  NC, | 
 | //          , [.],    , [*],    ,    , [+],             ; 0x40 | //          , [.],    , [*],    ,    , [+],             ; 0x40 | 
 | NC,0x50,  NC,0x45,  NC,  NC,0x49,  NC, | NC,0x50,  NC,0x45,  NC,  NC,0x49,  NC, | 
 | //          ,    ,    ,    , ret,    , [-], clr         ; 0x48 | //          ,    ,    ,    , ret,    , [-], clr         ; 0x48 | 
| Line 37  static const BYTE keymac[128] = { | Line 42  static const BYTE keymac[128] = { | 
 | //        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,0x72, | 
 | //          , F13,    , F14,    , F10,    , F12         ; 0x68 | //          , F13,    , F14,    , F10,    , F12         ; 0x68 | 
| NC,  NC,  NC,  NC,  NC,0x6b,  NC,0x80, | NC,  NC,  NC,  NC,  NC,0x6b,  NC,  NC, | 
 | //          , F15, hlp, hom,  ru, del,  F4, end         ; 0x70 | //          , F15, hlp, hom,  ru, del,  F4, end         ; 0x70 | 
 | NC,  NC,0x3f,0x3e,0x37,0x39,0x65,0x3f, | NC,  NC,0x3f,0x3e,0x37,0x39,0x65,0x3f, | 
 | //        F2,  rd,  F1,  ¢«,  ¢ª,  ¢,  ¢¬,             ; 0x78 | //        F2,  rd,  F1,  ¢«,  ¢ª,  ¢,  ¢¬,             ; 0x78 | 
 | 0x63,0x36,0x62,0x3b,0x3c,0x3d,0x3a,  NC}; | 0x63,0x36,0x62,0x3b,0x3c,0x3d,0x3a,  NC}; | 
 |  |  | 
 |  |  | 
 | // ÎӸ饡¼²¡²¼ | // ÎӸ饡¼²¡²¼ | 
 | static const BYTE keymac2[128] = { | static const BYTE keymac2[128] = { | 
 | //        £Á,  £Ó,  £Ä,  £Æ,  £È,  £Ç,  £Ú,  £Ø         ; 0x00 | //        £Á,  £Ó,  £Ä,  £Æ,  £È,  £Ç,  £Ú,  £Ø         ; 0x00 | 
| Line 80  static const BYTE keymac2[128] = { | Line 84  static const BYTE keymac2[128] = { | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC}; | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC}; | 
 |  |  | 
 |  |  | 
| enum { | static  BYTE    keymap[16]; | 
| kMac_base               = 0x01, |  | 
|  |  | 
| kMac_kana               = 0x37, |  | 
| kMac_shift              = 0x38, |  | 
| kMac_caps               = 0x39, |  | 
| kMac_alt                = 0x3a, |  | 
| kMac_ctrl               = 0x3b |  | 
| }; |  | 
|  |  | 
| #define kMac_Basebit(a)         (1 << ((a) & 15)) |  | 
|  |  | 
| static  UINT16  shiftback = 0; |  | 
 | static  UINT32  shiftchktick = 0; | static  UINT32  shiftchktick = 0; | 
 |  |  | 
| typedef struct { | void mackbd_initialize(void) { | 
| UINT16  bit; |  | 
| BYTE    code; |  | 
| } KEYSEA; |  | 
|  |  | 
| static const KEYSEA keysea[] = { |  | 
| {kMac_Basebit(kMac_shift),      0x70}, |  | 
| {kMac_Basebit(kMac_caps),       0x79}, |  | 
| //                                      {kMac_Basebit(kMac_kana),       0x72}, |  | 
| {kMac_Basebit(kMac_alt),        0x73}, |  | 
| {kMac_Basebit(kMac_ctrl),       0x74}}; |  | 
|  |  | 
 |  |  | 
| void mackbd_init(void) { | shiftchktick = GETTICK(); | 
|  | ZeroMemory(&keymap, sizeof(keymap)); | 
| shiftback = 0; |  | 
| shiftchktick = 0; |  | 
 | } | } | 
 |  |  | 
 | void mackbd_callback(void) { | void mackbd_callback(void) { | 
 |  |  | 
 | UINT32  tick; | UINT32  tick; | 
| BYTE    mackeymap[16]; | BYTE    key[16]; | 
| UINT16  tmp; |  | 
| UINT16  keyxor; |  | 
 | UINT    i; | UINT    i; | 
 |  | BYTE    update; | 
 |  | UINT    j; | 
 |  | BYTE    keycode; | 
 |  |  | 
 | tick = GETTICK(); | tick = GETTICK(); | 
| if (shiftchktick != tick) { | if (shiftchktick == tick) { | 
| shiftchktick = tick; | return; | 
|  | } | 
|  | shiftchktick = tick; | 
 | #if TARGET_API_MAC_CARBON | #if TARGET_API_MAC_CARBON | 
| GetKeys((long *)mackeymap); | GetKeys((long *)key); | 
 | #else | #else | 
| GetKeys((unsigned long *)mackeymap); | GetKeys((unsigned long *)key); | 
 | #endif | #endif | 
| tmp = (mackeymap[7] << 8) + mackeymap[6]; | for (i=0; i<16; i++) { | 
| keyxor = shiftback ^ tmp; | update = keymap[i] ^ key[i]; | 
| shiftback = tmp; | if (update) { | 
| for (i=0; i<(sizeof(keysea) / sizeof(KEYSEA)); i++) { | keymap[i] = key[i]; | 
| if (keyxor & keysea[i].bit) { | for (j=0; j<8; j++) { | 
| if (shiftback & keysea[i].bit) { | if (update & (1 << j)) { | 
| keystat_senddata(keysea[i].code); | keycode = keymac[i * 8 + j]; | 
| } | if (keycode != NC) { | 
| else { | if (key[i] & (1 << j)) { | 
| keystat_senddata(keysea[i].code | 0x80); | keystat_senddata(keycode); | 
|  | } | 
|  | else { | 
|  | keystat_senddata(keycode + 0x80); | 
|  | } | 
|  | } | 
 | } | } | 
 | } | } | 
 | } | } | 
 | } | } | 
 | } | } | 
 |  |  | 
| BOOL mackbd_down(int cmd, int keycode) { | void mackbd_f12down(int keycode) { | 
|  |  | 
| BYTE    data; |  | 
 |  |  | 
| if (keycode >= 0x80) { | if (keycode == 0x6f) { | 
| return(FALSE); | if (np2oscfg.F12COPY == 1) { | 
| } | keystat_senddata(0x61); | 
| if (!cmd) { |  | 
| data = keymac[keycode]; |  | 
| } |  | 
| else { |  | 
| data = keymac2[keycode]; |  | 
| } |  | 
| if (data != NC) { |  | 
| if (data == 0x80) { |  | 
| if (np2oscfg.F12COPY == 1) { |  | 
| data = 0x61; |  | 
| } |  | 
| else { |  | 
| data = 0x60; |  | 
| } |  | 
 | } | } | 
| keystat_senddata(data); | else if (np2oscfg.F12COPY == 2) { | 
| return(TRUE); | keystat_senddata(0x60); | 
|  | } | 
|  | #if defined(NP2GCC) | 
|  | else if(!np2oscfg.F12COPY) { | 
|  | mouse_running(MOUSE_XOR); | 
|  | menu_setmouse(np2oscfg.MOUSE_SW ^ 1); | 
|  | sysmng_update(SYS_UPDATECFG); | 
|  | } | 
|  | #endif | 
 | } | } | 
 | return(FALSE); |  | 
 | } | } | 
 |  |  | 
| void mackbd_up(int keycode) { | void mackbd_f12up(int keycode) { | 
|  |  | 
| BYTE    data, data2; |  | 
 |  |  | 
| if (keycode >= 0x80) { | if (keycode == 0x6f) { | 
| return; | if (np2oscfg.F12COPY == 1) { | 
| } | keystat_senddata(0x61 | 0x80); | 
| data = keymac[keycode]; | } | 
| if (data != NC) { | else if (np2oscfg.F12COPY == 2) { | 
| if (data == 0x80) { | keystat_senddata(0x60 | 0x80); | 
| if (np2oscfg.F12COPY == 1) { |  | 
| data = 0x61; |  | 
| } |  | 
| else { |  | 
| data = 0x60; |  | 
| } |  | 
 | } | } | 
 | keystat_senddata(data | 0x80); |  | 
 | } |  | 
 | data2 = keymac2[keycode]; |  | 
 | if (data2 != NC) { |  | 
 | keystat_senddata(data2 | 0x80); |  | 
 | } | } | 
 | } | } | 
 |  |  |