|
|
| version 1.3, 2003/10/23 06:26:16 | version 1.4, 2003/10/23 18:33:13 |
|---|---|
| Line 188 void keystat_resetjoykey(void) { | Line 188 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); |
| } | } |