|
|
1.1 ! root 1: ! 2: #include <SDL/SDL_endian.h> ! 3: #include <SDL/SDL_mouse.h> ! 4: ! 5: #include "main.h" ! 6: #include "decode.h" ! 7: #include "input.h" ! 8: #include "m68000.h" ! 9: #include "stMemory.h" ! 10: #include "hatari-glue.h" ! 11: #include "shortcut.h" ! 12: ! 13: INPUT input; ! 14: ! 15: void Call_GetMouseInput (unsigned long params) ! 16: { ! 17: short *mouse_poop; ! 18: /* Pointer passed to struct: ! 19: * word mouse_motion_x ! 20: * word mouse_motion_y ! 21: * word mouse_buttons ! 22: */ ! 23: ! 24: mouse_poop = (short*)(STRam + STMemory_ReadLong (params+SIZE_WORD)); ! 25: ! 26: mouse_poop[0] = SDL_SwapBE16 (SDL_SwapBE16 (mouse_poop[0]) + input.motion_x); ! 27: mouse_poop[1] = SDL_SwapBE16 (SDL_SwapBE16 (mouse_poop[1]) + input.motion_y); ! 28: ! 29: if (input.mbuf_head != input.mbuf_tail) { ! 30: mouse_poop[2] = SDL_SwapBE16 (0xf8 | input.mousebut_buf [input.mbuf_head++]); ! 31: input.mbuf_head %= SIZE_KEYBUF; ! 32: } else { ! 33: mouse_poop[2] = SDL_SwapBE16 (0xf8 | input.cur_mousebut_state); ! 34: } ! 35: ! 36: input.motion_x = input.motion_y = 0; ! 37: } ! 38: ! 39: void Call_GetKeyboardEvent (unsigned long params) ! 40: { ! 41: if ((input.buf_head) != (input.buf_tail)) { ! 42: Regs[REG_D0] = input.key_buf [input.buf_head++]; ! 43: input.buf_head %= SIZE_KEYBUF; ! 44: } else { ! 45: Regs[REG_D0] = 0; ! 46: } ! 47: } ! 48: ! 49: ! 50: ! 51: ! 52: /* Interrupt as required */ ! 53: void Input_Update () ! 54: { ! 55: if ((input.buf_head != input.buf_tail) || ! 56: (input.motion_x) || ! 57: (input.motion_y) || ! 58: (input.mbuf_head != input.mbuf_tail)) { ! 59: MakeSR (); ! 60: ! 61: if ((5 > FIND_IPL) && (5 > intlev ())) { ! 62: ExceptionVector = EXCEPTION_INPUT; ! 63: M68000_Exception (); ! 64: } ! 65: } ! 66: } ! 67: ! 68: void Input_PressSTKey (unsigned char ScanCode, BOOL bPress) ! 69: { ! 70: if (!bPress) ScanCode |= 0x80; ! 71: input.key_buf [input.buf_tail++] = ScanCode; ! 72: input.buf_tail %= SIZE_KEYBUF; ! 73: } ! 74: ! 75: void Input_MousePress (int button) ! 76: { ! 77: if (button == SDL_BUTTON_RIGHT) input.cur_mousebut_state |= 0x1; ! 78: else if (button == SDL_BUTTON_LEFT) input.cur_mousebut_state |= 0x2; ! 79: else if (button == SDL_BUTTON_MIDDLE) { ! 80: /* middle mouse button toggles mouse grab */ ! 81: ShortCut_MouseMode(); ! 82: return; ! 83: } else { ! 84: return; ! 85: } ! 86: input.mousebut_buf [input.mbuf_tail++] = input.cur_mousebut_state; ! 87: input.mbuf_tail %= SIZE_MOUSEBUF; ! 88: } ! 89: ! 90: void Input_MouseRelease (int button) ! 91: { ! 92: if (button == SDL_BUTTON_RIGHT) input.cur_mousebut_state &= ~0x1; ! 93: else if (button == SDL_BUTTON_LEFT) input.cur_mousebut_state &= ~0x2; ! 94: else return; ! 95: input.mousebut_buf [input.mbuf_tail++] = input.cur_mousebut_state; ! 96: input.mbuf_tail %= SIZE_MOUSEBUF; ! 97: } ! 98:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.