Mercurial > sdl-ios-xcode
annotate src/video/fbcon/SDL_fbelo.c @ 1371:e2641c13bf33
Added a reminder on where to put libSDL.so
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sat, 18 Feb 2006 07:21:42 +0000 |
parents | c71e05b4dc2e |
children | d910939febfa |
rev | line source |
---|---|
0 | 1 /* |
2 SDL - Simple DirectMedia Layer | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1259
diff
changeset
|
3 Copyright (C) 1997-2006 Sam Lantinga |
0 | 4 |
5 This library is free software; you can redistribute it and/or | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1259
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
0 | 7 License as published by the Free Software Foundation; either |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1259
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
0 | 9 |
10 This library is distributed in the hope that it will be useful, | |
11 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1259
diff
changeset
|
13 Lesser General Public License for more details. |
0 | 14 |
1312
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1259
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1259
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
c9b51268668f
Updated copyright information and removed rcs id lines (problematic in branch merges)
Sam Lantinga <slouken@libsdl.org>
parents:
1259
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 18 |
19 Sam Lantinga | |
252
e8157fcb3114
Updated the source with the correct e-mail address
Sam Lantinga <slouken@libsdl.org>
parents:
152
diff
changeset
|
20 slouken@libsdl.org |
0 | 21 */ |
22 | |
23 #include <unistd.h> | |
24 #include <sys/time.h> | |
25 #include <ctype.h> | |
26 | |
1358
c71e05b4dc2e
More header massaging... works great on Windows. ;-)
Sam Lantinga <slouken@libsdl.org>
parents:
1341
diff
changeset
|
27 #include "SDL_stdinc.h" |
0 | 28 #include "SDL_fbvideo.h" |
29 #include "SDL_fbelo.h" | |
30 | |
31 /* | |
32 calibration default values | |
33 values are read from the following environment variables: | |
34 | |
35 SDL_ELO_MIN_X | |
36 SDL_ELO_MAX_X | |
37 SDL_ELO_MIN_Y | |
38 SDL_ELO_MAX_Y | |
39 */ | |
40 | |
41 static int ELO_MIN_X = 400; | |
42 static int ELO_MAX_X = 3670; | |
43 static int ELO_MIN_Y = 500; | |
44 static int ELO_MAX_Y = 3540; | |
45 | |
46 #define ELO_SNAP_SIZE 6 | |
47 #define ELO_TOUCH_BYTE 'T' | |
48 #define ELO_ID 'I' | |
49 #define ELO_MODE 'M' | |
50 #define ELO_PARAMETER 'P' | |
51 #define ELO_REPORT 'B' | |
52 #define ELO_ACK 'A' | |
53 | |
54 #define ELO_INIT_CHECKSUM 0xAA | |
55 | |
56 #define ELO_BTN_PRESS 0x01 | |
57 #define ELO_STREAM 0x02 | |
58 #define ELO_BTN_RELEASE 0x04 | |
59 | |
60 #define ELO_TOUCH_MODE 0x01 | |
61 #define ELO_STREAM_MODE 0x02 | |
62 #define ELO_UNTOUCH_MODE 0x04 | |
63 #define ELO_RANGE_CHECK_MODE 0x40 | |
64 #define ELO_TRIM_MODE 0x02 | |
65 #define ELO_CALIB_MODE 0x04 | |
66 #define ELO_SCALING_MODE 0x08 | |
67 #define ELO_TRACKING_MODE 0x40 | |
68 | |
69 #define ELO_SERIAL_MASK 0xF8 | |
70 | |
71 #define ELO_SERIAL_IO '0' | |
72 | |
73 #define ELO_MAX_TRIALS 3 | |
74 #define ELO_MAX_WAIT 100000 | |
75 #define ELO_UNTOUCH_DELAY 5 | |
76 #define ELO_REPORT_DELAY 1 | |
77 | |
78 /* eloParsePacket | |
79 */ | |
80 int eloParsePacket(unsigned char* mousebuf, int* dx, int* dy, int* button_state) { | |
81 static int elo_button = 0; | |
82 static int last_x = 0; | |
83 static int last_y = 0; | |
84 int x,y; | |
85 | |
86 /* Check if we have a touch packet */ | |
87 if (mousebuf[1] != ELO_TOUCH_BYTE) { | |
88 return 0; | |
89 } | |
90 | |
91 x = ((mousebuf[4] << 8) | mousebuf[3]); | |
92 y = ((mousebuf[6] << 8) | mousebuf[5]); | |
93 | |
1341
d02b552e5304
Configure dynamically generates SDL_config.h
Sam Lantinga <slouken@libsdl.org>
parents:
1338
diff
changeset
|
94 if((SDL_abs(x - last_x) > ELO_SNAP_SIZE) || (SDL_abs(y - last_y) > ELO_SNAP_SIZE)) { |
0 | 95 *dx = ((mousebuf[4] << 8) | mousebuf[3]); |
96 *dy = ((mousebuf[6] << 8) | mousebuf[5]); | |
97 } | |
98 else { | |
99 *dx = last_x; | |
100 *dy = last_y; | |
101 } | |
102 | |
103 last_x = *dx; | |
104 last_y = *dy; | |
105 | |
106 if ( (mousebuf[2] & 0x07) == ELO_BTN_PRESS ) { | |
107 elo_button = 1; | |
108 } | |
109 if ( (mousebuf[2] & 0x07) == ELO_BTN_RELEASE ) { | |
110 elo_button = 0; | |
111 } | |
112 | |
113 *button_state = elo_button; | |
114 return 1; | |
115 } | |
116 | |
117 /* Convert the raw coordinates from the ELO controller | |
118 to a screen position. | |
119 */ | |
120 void eloConvertXY(_THIS, int *dx, int *dy) { | |
121 int input_x = *dx; | |
122 int input_y = *dy; | |
123 int width = ELO_MAX_X - ELO_MIN_X; | |
124 int height = ELO_MAX_Y - ELO_MIN_Y; | |
125 | |
1259
36f24cdfcda7
te: Thu, 17 Apr 2003 11:25:26 -0700
Sam Lantinga <slouken@libsdl.org>
parents:
769
diff
changeset
|
126 *dx = ((int)cache_vinfo.xres - ((int)cache_vinfo.xres * (input_x - ELO_MIN_X)) / width); |
0 | 127 *dy = (cache_vinfo.yres * (input_y - ELO_MIN_Y)) / height; |
128 } | |
129 | |
130 | |
131 /* eloGetPacket | |
132 */ | |
133 int eloGetPacket(unsigned char* buffer, int* buffer_p, int* checksum, int fd) { | |
134 int num_bytes; | |
135 int ok; | |
136 | |
137 if(fd == 0) { | |
138 num_bytes = ELO_PACKET_SIZE; | |
139 } | |
140 else { | |
141 num_bytes = read(fd, | |
142 (char *) (buffer + *buffer_p), | |
143 ELO_PACKET_SIZE - *buffer_p); | |
144 } | |
145 | |
146 if (num_bytes < 0) { | |
147 #ifdef DEBUG_MOUSE | |
148 fprintf(stderr, "System error while reading from Elographics touchscreen.\n"); | |
149 #endif | |
150 return 0; | |
151 } | |
152 | |
153 while (num_bytes) { | |
154 if ((*buffer_p == 0) && (buffer[0] != ELO_START_BYTE)) { | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
155 SDL_memcpy(&buffer[0], &buffer[1], num_bytes-1); |
0 | 156 } |
157 else { | |
158 if (*buffer_p < ELO_PACKET_SIZE-1) { | |
159 *checksum = *checksum + buffer[*buffer_p]; | |
160 *checksum = *checksum % 256; | |
161 } | |
162 (*buffer_p)++; | |
163 } | |
164 num_bytes--; | |
165 } | |
166 | |
167 if (*buffer_p == ELO_PACKET_SIZE) { | |
168 ok = (*checksum == buffer[ELO_PACKET_SIZE-1]); | |
169 *checksum = ELO_INIT_CHECKSUM; | |
170 *buffer_p = 0; | |
171 | |
172 if (!ok) { | |
173 return 0; | |
174 } | |
175 | |
176 return 1; | |
177 } | |
178 else { | |
179 return 0; | |
180 } | |
181 } | |
182 | |
183 /* eloSendPacket | |
184 */ | |
185 | |
186 int eloSendPacket(unsigned char* packet, int fd) | |
187 { | |
188 int i, result; | |
189 int sum = ELO_INIT_CHECKSUM; | |
190 | |
191 packet[0] = ELO_START_BYTE; | |
192 for (i = 0; i < ELO_PACKET_SIZE-1; i++) { | |
193 sum += packet[i]; | |
194 sum &= 0xFF; | |
195 } | |
196 packet[ELO_PACKET_SIZE-1] = sum; | |
197 | |
198 result = write(fd, packet, ELO_PACKET_SIZE); | |
199 | |
200 if (result != ELO_PACKET_SIZE) { | |
201 #ifdef DEBUG_MOUSE | |
202 printf("System error while sending to Elographics touchscreen.\n"); | |
203 #endif | |
204 return 0; | |
205 } | |
206 else { | |
207 return 1; | |
208 } | |
209 } | |
210 | |
211 | |
212 /* eloWaitForInput | |
213 */ | |
214 int eloWaitForInput(int fd, int timeout) | |
215 { | |
216 fd_set readfds; | |
217 struct timeval to; | |
218 int r; | |
219 | |
220 FD_ZERO(&readfds); | |
221 FD_SET(fd, &readfds); | |
222 to.tv_sec = 0; | |
223 to.tv_usec = timeout; | |
224 | |
225 r = select(FD_SETSIZE, &readfds, NULL, NULL, &to); | |
226 return r; | |
227 } | |
228 | |
229 /* eloWaitReply | |
230 */ | |
231 int eloWaitReply(unsigned char type, unsigned char *reply, int fd) { | |
232 int ok; | |
233 int i, result; | |
234 int reply_p = 0; | |
235 int sum = ELO_INIT_CHECKSUM; | |
236 | |
237 i = ELO_MAX_TRIALS; | |
238 do { | |
239 ok = 0; | |
240 | |
241 result = eloWaitForInput(fd, ELO_MAX_WAIT); | |
242 | |
243 if (result > 0) { | |
244 ok = eloGetPacket(reply, &reply_p, &sum, fd); | |
245 | |
246 if (ok && reply[1] != type && type != ELO_PARAMETER) { | |
247 #ifdef DEBUG_MOUSE | |
248 fprintf(stderr, "Wrong reply received\n"); | |
249 #endif | |
250 ok = 0; | |
251 } | |
252 } | |
253 else { | |
254 #ifdef DEBUG_MOUSE | |
255 fprintf(stderr, "No input!\n"); | |
256 #endif | |
257 } | |
258 | |
259 if (result == 0) { | |
260 i--; | |
261 } | |
262 } while(!ok && (i>0)); | |
263 | |
264 return ok; | |
265 } | |
266 | |
267 | |
268 /* eloWaitAck | |
269 */ | |
270 | |
271 int eloWaitAck(int fd) { | |
272 unsigned char packet[ELO_PACKET_SIZE]; | |
273 int i, nb_errors; | |
274 | |
275 if (eloWaitReply(ELO_ACK, packet, fd)) { | |
276 for (i = 0, nb_errors = 0; i < 4; i++) { | |
277 if (packet[2 + i] != '0') { | |
278 nb_errors++; | |
279 } | |
280 } | |
281 | |
282 if (nb_errors != 0) { | |
283 #ifdef DEBUG_MOUSE | |
284 fprintf(stderr, "Elographics acknowledge packet reports %d errors\n", nb_errors); | |
285 #endif | |
286 } | |
287 return 1; | |
288 } | |
289 else { | |
290 return 0; | |
291 } | |
292 } | |
293 | |
294 | |
295 /* eloSendQuery -- | |
296 */ | |
297 int eloSendQuery(unsigned char *request, unsigned char* reply, int fd) { | |
298 int ok; | |
299 | |
300 if (eloSendPacket(request, fd)) { | |
301 ok = eloWaitReply(toupper(request[1]), reply, fd); | |
302 if (ok) { | |
303 ok = eloWaitAck(fd); | |
304 } | |
305 return ok; | |
306 } | |
307 else { | |
308 return 0; | |
309 } | |
310 } | |
311 | |
312 | |
313 /* eloSendControl | |
314 */ | |
315 int eloSendControl(unsigned char* control, int fd) { | |
316 if (eloSendPacket(control, fd)) { | |
317 return eloWaitAck(fd); | |
318 } | |
319 else { | |
320 return 0; | |
321 } | |
322 } | |
323 | |
324 /* eloInitController | |
325 */ | |
326 int eloInitController(int fd) { | |
327 unsigned char req[ELO_PACKET_SIZE]; | |
328 unsigned char reply[ELO_PACKET_SIZE]; | |
329 const char *buffer = NULL; | |
330 int result = 0; | |
331 | |
332 struct termios mouse_termios; | |
333 | |
334 /* try to read the calibration values */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
335 buffer = SDL_getenv("SDL_ELO_MIN_X"); |
0 | 336 if(buffer) { |
1341
d02b552e5304
Configure dynamically generates SDL_config.h
Sam Lantinga <slouken@libsdl.org>
parents:
1338
diff
changeset
|
337 ELO_MIN_X = SDL_atoi(buffer); |
0 | 338 } |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
339 buffer = SDL_getenv("SDL_ELO_MAX_X"); |
0 | 340 if(buffer) { |
1341
d02b552e5304
Configure dynamically generates SDL_config.h
Sam Lantinga <slouken@libsdl.org>
parents:
1338
diff
changeset
|
341 ELO_MAX_X = SDL_atoi(buffer); |
0 | 342 } |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
343 buffer = SDL_getenv("SDL_ELO_MIN_Y"); |
0 | 344 if(buffer) { |
1341
d02b552e5304
Configure dynamically generates SDL_config.h
Sam Lantinga <slouken@libsdl.org>
parents:
1338
diff
changeset
|
345 ELO_MIN_Y = SDL_atoi(buffer); |
0 | 346 } |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
347 buffer = SDL_getenv("SDL_ELO_MAX_Y"); |
0 | 348 if(buffer) { |
1341
d02b552e5304
Configure dynamically generates SDL_config.h
Sam Lantinga <slouken@libsdl.org>
parents:
1338
diff
changeset
|
349 ELO_MAX_Y = SDL_atoi(buffer); |
0 | 350 } |
351 | |
352 #ifdef DEBUG_MOUSE | |
353 fprintf( stderr, "ELO calibration values:\nmin_x: %i\nmax_x: %i\nmin_y: %i\nmax_y: %i\n", | |
354 ELO_MIN_X, | |
355 ELO_MAX_X, | |
356 ELO_MIN_Y, | |
357 ELO_MAX_Y); | |
358 #endif | |
359 | |
360 /* set comm params */ | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
361 SDL_memset(&mouse_termios, 0, sizeof(mouse_termios)); |
0 | 362 mouse_termios.c_cflag = B9600 | CS8 | CREAD | CLOCAL; |
363 mouse_termios.c_cc[VMIN] = 1; | |
364 result = tcsetattr(fd, TCSANOW, &mouse_termios); | |
365 | |
366 if (result < 0) { | |
367 #ifdef DEBUG_MOUSE | |
368 fprintf( stderr, "Unable to configure Elographics touchscreen port\n"); | |
369 #endif | |
370 return 0; | |
371 } | |
372 | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
373 SDL_memset(req, 0, ELO_PACKET_SIZE); |
0 | 374 req[1] = tolower(ELO_PARAMETER); |
375 if (!eloSendQuery(req, reply, fd)) { | |
376 #ifdef DEBUG_MOUSE | |
377 fprintf( stderr, "Not at the specified rate or model 2310, will continue\n"); | |
378 #endif | |
379 } | |
380 | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
381 SDL_memset(req, 0, ELO_PACKET_SIZE); |
0 | 382 req[1] = tolower(ELO_ID); |
383 if (eloSendQuery(req, reply, fd)) { | |
384 #ifdef DEBUG_MOUSE | |
385 fprintf(stderr, "Ok, controller configured!\n"); | |
386 #endif | |
387 } | |
388 else { | |
389 #ifdef DEBUG_MOUSE | |
390 fprintf( stderr, "Unable to ask Elographics touchscreen identification\n"); | |
391 #endif | |
392 return 0; | |
393 } | |
394 | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
395 SDL_memset(req, 0, ELO_PACKET_SIZE); |
0 | 396 req[1] = ELO_MODE; |
397 req[3] = ELO_TOUCH_MODE | ELO_STREAM_MODE | ELO_UNTOUCH_MODE; | |
398 req[4] = ELO_TRACKING_MODE; | |
399 if (!eloSendControl(req, fd)) { | |
400 #ifdef DEBUG_MOUSE | |
401 fprintf( stderr, "Unable to change Elographics touchscreen operating mode\n"); | |
402 #endif | |
403 return 0; | |
404 } | |
405 | |
1336
3692456e7b0f
Use SDL_ prefixed versions of C library functions.
Sam Lantinga <slouken@libsdl.org>
parents:
1312
diff
changeset
|
406 SDL_memset(req, 0, ELO_PACKET_SIZE); |
0 | 407 req[1] = ELO_REPORT; |
408 req[2] = ELO_UNTOUCH_DELAY; | |
409 req[3] = ELO_REPORT_DELAY; | |
410 if (!eloSendControl(req, fd)) { | |
411 #ifdef DEBUG_MOUSE | |
412 fprintf( stderr, "Unable to change Elographics touchscreen reports timings\n"); | |
413 #endif | |
414 return 0; | |
415 } | |
416 | |
417 return 1; | |
418 } | |
4
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
419 |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
420 int eloReadPosition(_THIS, int fd, int* x, int* y, int* button_state, int* realx, int* realy) { |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
421 unsigned char buffer[ELO_PACKET_SIZE]; |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
422 int pointer = 0; |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
423 int checksum = ELO_INIT_CHECKSUM; |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
424 |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
425 while(pointer < ELO_PACKET_SIZE) { |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
426 if(eloGetPacket(buffer, &pointer, &checksum, fd)) { |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
427 break; |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
428 } |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
429 } |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
430 |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
431 if(!eloParsePacket(buffer, realx, realy, button_state)) { |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
432 return 0; |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
433 } |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
434 |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
435 *x = *realx; |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
436 *y = *realy; |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
437 |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
438 eloConvertXY(this, x, y); |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
439 |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
440 return 1; |
4f6c5f021323
Date: Thu, 26 Apr 2001 10:46:23 +0200
Sam Lantinga <slouken@lokigames.com>
parents:
0
diff
changeset
|
441 } |