|
|
1.1 root 1:
2: #include <SDL_endian.h>
3: #include <SDL_mouse.h>
4:
5: #include "main.h"
6: #include "input.h"
7: #include "../m68000.h"
8: #include "shortcut.h"
9: #include "screen.h"
10:
11: INPUT input;
12:
13: void Call_GetMouseInput ()
14: {
15: short *mouse_mov, *mouse_abs;
16: unsigned long params;
17:
18: params = GetReg (REG_A7);
19: params -= SIZE_WORD;
20: /* Pointer passed to struct:
21: * word mouse_motion_x
22: * word mouse_motion_y
23: * word mouse_buttons
24: */
25:
26: mouse_mov = (short*)(STRam + STMemory_ReadLong (params+SIZE_WORD));
27: mouse_abs = (short*)(STRam + STMemory_ReadLong (params+SIZE_WORD+SIZE_LONG));
28:
29: /* lazy lazy lazy lazy */
30: if ((abs (input.motion_x) > 100) || (abs (input.motion_y) > 100)) {
31: //printf ("That fucking input bug! %d,%d\n", input.motion_x, input.motion_y);
32: input.motion_x = input.motion_y = 0;
33: }
34:
35: mouse_mov[0] = SDL_SwapBE16 (SDL_SwapBE16 (mouse_mov[0]) + input.motion_x);
36: mouse_mov[1] = SDL_SwapBE16 (SDL_SwapBE16 (mouse_mov[1]) + input.motion_y);
37:
38: mouse_abs[0] = SDL_SwapBE16 (320*input.abs_x/screen_w);
39: mouse_abs[1] = SDL_SwapBE16 (200*input.abs_y/screen_h);
40:
41: //if (input.mbuf_head != input.mbuf_tail) {
42: // mouse_mov[2] = SDL_SwapBE16 (0xf8 | input.mousebut_buf [input.mbuf_head++]);
43: // input.mbuf_head %= SIZE_KEYBUF;
44: //} else {
45: mouse_mov[2] = SDL_SwapBE16 (0xf8 | input.cur_mousebut_state);
46: //}
47:
48: input.motion_x = input.motion_y = 0;
49: }
50:
51: void Call_GetKeyboardEvent ()
52: {
53: if ((input.buf_head) != (input.buf_tail)) {
54: SetReg (REG_D0, input.key_buf [input.buf_head++]);
55: input.buf_head %= SIZE_KEYBUF;
56: } else {
57: SetReg (REG_D0, 0);
58: }
59: }
60:
61:
62:
63:
64: /* Interrupt as required */
65: void Input_Update ()
66: {
67: if ((input.buf_head != input.buf_tail) ||
68: (input.motion_x) ||
69: (input.motion_y) ||
70: (input.mbuf_head != input.mbuf_tail)) {
71: //FlagException (1);
72: }
73: }
74:
75: void Input_PressSTKey (unsigned char ScanCode, BOOL bPress)
76: {
77: if (!bPress) ScanCode |= 0x80;
78: input.key_buf [input.buf_tail++] = ScanCode;
79: input.buf_tail %= SIZE_KEYBUF;
80: }
81:
82: static void do_mouse_grab ()
83: {
84: /* grab mouse on right-button hold for correct controls */
85: if (input.cur_mousebut_state & 0x1) {
86: SDL_WM_GrabInput (SDL_GRAB_ON);
87: } else {
88: SDL_WM_GrabInput (SDL_GRAB_OFF);
89: }
90: }
91:
92: void Input_MousePress (int button)
93: {
94: if (button == SDL_BUTTON_RIGHT) input.cur_mousebut_state |= 0x1;
95: else if (button == SDL_BUTTON_LEFT) input.cur_mousebut_state |= 0x2;
96: else {
97: return;
98: }
99: do_mouse_grab ();
100:
101: input.mousebut_buf [input.mbuf_tail++] = input.cur_mousebut_state;
102: input.mbuf_tail %= SIZE_MOUSEBUF;
103: }
104:
105: void Input_MouseRelease (int button)
106: {
107: if (button == SDL_BUTTON_RIGHT) input.cur_mousebut_state &= ~0x1;
108: else if (button == SDL_BUTTON_LEFT) input.cur_mousebut_state &= ~0x2;
109: else return;
110: input.mousebut_buf [input.mbuf_tail++] = input.cur_mousebut_state;
111: input.mbuf_tail %= SIZE_MOUSEBUF;
112:
113: do_mouse_grab ();
114: }
115:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.