| version 1.3, 2003/10/23 06:26:16 | version 1.6, 2003/12/04 16:48:15 | 
| 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 188  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); | 
 | } | } | 
 |  |  |