|
|
| version 1.2, 2003/10/21 11:22:05 | version 1.5, 2003/11/13 07:47:17 |
|---|---|
| Line 96 void keystat_reset(void) { | Line 96 void keystat_reset(void) { |
| ZeroMemory(keystat, sizeof(keystat)); | ZeroMemory(keystat, sizeof(keystat)); |
| } | } |
| void keystat_senddata(BYTE data) { | void keystat_senddata(BYTE data) { |
| BYTE key = data & 0x7f; | BYTE key; |
| BOOL keynochange = FALSE; | BOOL keynochange; |
| key = data & 0x7f; | |
| keynochange = FALSE; | |
| // CTRL:カナ 0x71,0x72 bit7==0でトルグ処理 (標準処理) | |
| if ((key == 0x71) || (key == 0x72)) { | if ((key == 0x71) || (key == 0x72)) { |
| if (data & 0x80) { | if (data & 0x80) { |
| return; | return; |
| Line 120 void keystat_senddata(BYTE data) { | Line 125 void keystat_senddata(BYTE data) { |
| keystat[key] ^= 0x80; | keystat[key] ^= 0x80; |
| } | } |
| else { | else { |
| // CTRL:カナ 0x79,0x7a bit7をそのまま通知 | |
| // (ハードウェアでメカニカル処理してる場合) | |
| if ((key == 0x79) || (key == 0x7a)) { | |
| key -= 0x08; | |
| data -= 0x08; | |
| } | |
| if (!((keystat[key] ^ data) & 0x80)) { | if (!((keystat[key] ^ data) & 0x80)) { |
| keystat[key] ^= 0x80; | keystat[key] ^= 0x80; |
| } | } |
| Line 154 void keystat_resetcopyhelp(void) { | Line 165 void keystat_resetcopyhelp(void) { |
| } | } |
| } | } |
| void keystat_allrelease(void) { | |
| UINT i; | |
| for (i=0; i<0x80; i++) { | |
| if (keystat[i] & 0x80) { | |
| keystat[i] &= ~0x80; | |
| keyb_out((BYTE)(i + 0x80)); | |
| } | |
| } | |
| } | |
| void keystat_forcerelease(BYTE value) { | void keystat_forcerelease(BYTE value) { |
| if (keystat[value & 0x7f] & 0x80) { | if (keystat[value & 0x7f] & 0x80) { |
| Line 176 void keystat_resetjoykey(void) { | Line 199 void keystat_resetjoykey(void) { |
| } | } |
| } | } |
| BYTE keystat_getjoy(void) { | |
| BYTE ret = 0xff; | // ---- |
| BYTE *p = (BYTE *)joykeytable; | |
| typedef struct { | |
| BYTE joysync; | |
| BYTE joylast; | |
| BYTE mouselast; | |
| BYTE padding; | |
| BYTE d_up; | |
| BYTE d_dn; | |
| BYTE d_lt; | |
| BYTE d_rt; | |
| } KEYEXT; | |
| static KEYEXT keyext; | |
| static const BYTE mousedelta[] = {1, 1, 1, 1, | |
| 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4}; | |
| #define MOUSESTEPMAX ((sizeof(mousedelta) / sizeof(BYTE)) - 1) | |
| void keyext_flash(void) { | |
| keyext.joysync = 0; | |
| } | |
| BYTE keyext_getjoy(void) { | |
| BYTE flg; | |
| const BYTE *p; | |
| BYTE bit; | BYTE bit; |
| for (bit=0x20; bit; bit>>=1, p+=2) { | if (!keyext.joysync) { |
| if ((keystat[*p] & 0x80) || (keystat[*(p+1)] & 0x80)) { | keyext.joysync = 1; |
| ret &= ~bit; | flg = 0xff; |
| p = joykeytable; | |
| for (bit=0x20; bit; bit>>=1) { | |
| if ((keystat[p[0]] & 0x80) || (keystat[p[1]] & 0x80)) { | |
| flg ^= bit; | |
| } | |
| p += 2; | |
| } | } |
| keyext.joylast = flg; | |
| } | } |
| return(keyext.joylast); | |
| } | |
| BYTE keyext_getmouse(SINT16 *x, SINT16 *y) { | |
| BYTE btn; | |
| BYTE acc; | |
| SINT16 tmp; | |
| BYTE ret; | |
| btn = keyext_getjoy(); | |
| acc = btn | keyext.mouselast; | |
| keyext.mouselast = btn; | |
| tmp = 0; | |
| if (!(btn & 1)) { | |
| tmp -= mousedelta[keyext.d_up]; | |
| } | |
| if (!(acc & 1)) { | |
| if (keyext.d_up < MOUSESTEPMAX) { | |
| keyext.d_up++; | |
| } | |
| } | |
| else { | |
| keyext.d_up = 0; | |
| } | |
| if (!(btn & 2)) { | |
| tmp += mousedelta[keyext.d_dn]; | |
| } | |
| if (!(acc & 2)) { | |
| if (keyext.d_dn < MOUSESTEPMAX) { | |
| keyext.d_dn++; | |
| } | |
| } | |
| else { | |
| keyext.d_dn = 0; | |
| } | |
| *y += tmp; | |
| tmp = 0; | |
| if (!(btn & 4)) { | |
| tmp -= mousedelta[keyext.d_lt]; | |
| } | |
| if (!(acc & 4)) { | |
| if (keyext.d_lt < MOUSESTEPMAX) { | |
| keyext.d_lt++; | |
| } | |
| } | |
| else { | |
| keyext.d_lt = 0; | |
| } | |
| if (!(btn & 8)) { | |
| tmp += mousedelta[keyext.d_rt]; | |
| } | |
| if (!(acc & 8)) { | |
| if (keyext.d_rt < MOUSESTEPMAX) { | |
| keyext.d_rt++; | |
| } | |
| } | |
| else { | |
| keyext.d_rt = 0; | |
| } | |
| *x += tmp; | |
| ret = 0x5f; | |
| ret += (btn & 0x10) << 3; | |
| ret += (btn & 0x20); | |
| return(ret); | return(ret); |
| } | } |