Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
166 lines (131 loc) · 3.59 KB

SDL_ataridevmouse.c

File metadata and controls

166 lines (131 loc) · 3.59 KB
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997-2006 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Sam Lantinga
slouken@libsdl.org
*/
#include "SDL_config.h"
/*
MiNT /dev/mouse driver
Patrice Mandin
*/
#include <fcntl.h>
#include <unistd.h>
#include "../../events/SDL_events_c.h"
#include "SDL_ataridevmouse_c.h"
/* Defines */
#define DEVICE_NAME "/dev/mouse"
/* Local variables */
static int handle = -1;
static int mouseb, prev_mouseb;
/* Functions */
May 28, 2006
May 28, 2006
47
int
May 29, 2006
May 29, 2006
48
SDL_AtariDevMouse_Open(void)
May 28, 2006
May 28, 2006
50
51
52
53
54
55
56
57
58
59
int r;
const char *mousedev;
/*
TODO: Fix the MiNT device driver, that locks mouse for other
applications, so this is disabled till fixed
*/
return 0;
/* First, try SDL_MOUSEDEV device */
May 29, 2006
May 29, 2006
60
mousedev = SDL_getenv("SDL_MOUSEDEV");
May 28, 2006
May 28, 2006
61
if (!mousedev) {
May 29, 2006
May 29, 2006
62
handle = open(mousedev, 0);
May 28, 2006
May 28, 2006
63
64
65
66
}
/* Failed, try default device */
if (handle < 0) {
May 29, 2006
May 29, 2006
67
handle = open(DEVICE_NAME, 0);
May 28, 2006
May 28, 2006
68
69
70
71
72
73
74
75
}
if (handle < 0) {
handle = -1;
return 0;
}
/* Set non blocking mode */
May 29, 2006
May 29, 2006
76
r = fcntl(handle, F_GETFL, 0);
May 28, 2006
May 28, 2006
77
if (r < 0) {
May 29, 2006
May 29, 2006
78
close(handle);
May 28, 2006
May 28, 2006
79
80
81
82
83
84
handle = -1;
return 0;
}
r |= O_NDELAY;
May 29, 2006
May 29, 2006
85
r = fcntl(handle, F_SETFL, r);
May 28, 2006
May 28, 2006
86
if (r < 0) {
May 29, 2006
May 29, 2006
87
close(handle);
May 28, 2006
May 28, 2006
88
89
90
91
92
93
handle = -1;
return 0;
}
prev_mouseb = 7;
return 1;
May 28, 2006
May 28, 2006
96
void
May 29, 2006
May 29, 2006
97
SDL_AtariDevMouse_Close(void)
May 28, 2006
May 28, 2006
99
if (handle > 0) {
May 29, 2006
May 29, 2006
100
close(handle);
May 28, 2006
May 28, 2006
101
102
handle = -1;
}
May 28, 2006
May 28, 2006
105
static int
May 29, 2006
May 29, 2006
106
atari_GetButton(int button)
May 28, 2006
May 28, 2006
108
109
110
111
112
113
114
115
116
117
switch (button) {
case 0:
return SDL_BUTTON_RIGHT;
case 1:
return SDL_BUTTON_MIDDLE;
default:
break;
}
return SDL_BUTTON_LEFT;
May 28, 2006
May 28, 2006
120
void
May 29, 2006
May 29, 2006
121
SDL_AtariDevMouse_PostMouseEvents(_THIS, SDL_bool buttonEvents)
May 28, 2006
May 28, 2006
123
124
125
126
127
128
129
130
unsigned char buffer[3];
int mousex, mousey;
if (handle < 0) {
return;
}
mousex = mousey = 0;
May 29, 2006
May 29, 2006
131
while (read(handle, buffer, sizeof(buffer)) == sizeof(buffer)) {
May 28, 2006
May 28, 2006
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
mouseb = buffer[0] & 7;
mousex += (char) buffer[1];
mousey += (char) buffer[2];
/* Mouse button events */
if (buttonEvents && (mouseb != prev_mouseb)) {
int i;
for (i = 0; i < 3; i++) {
int curbutton, prevbutton;
curbutton = mouseb & (1 << i);
prevbutton = prev_mouseb & (1 << i);
if (curbutton && !prevbutton) {
May 29, 2006
May 29, 2006
147
148
SDL_PrivateMouseButton(SDL_RELEASED,
atari_GetButton(i), 0, 0);
May 28, 2006
May 28, 2006
149
150
}
if (!curbutton && prevbutton) {
May 29, 2006
May 29, 2006
151
152
SDL_PrivateMouseButton(SDL_PRESSED,
atari_GetButton(i), 0, 0);
May 28, 2006
May 28, 2006
153
154
155
156
157
158
159
160
161
}
}
prev_mouseb = mouseb;
}
}
/* Mouse motion event */
if (mousex || mousey) {
May 29, 2006
May 29, 2006
162
SDL_PrivateMouseMotion(0, 1, mousex, -mousey);
May 28, 2006
May 28, 2006
163
}
May 28, 2006
May 28, 2006
165
166
/* vi: set ts=4 sw=4 expandtab: */