1 /********************************************
2
3 RETRO GLUE
4
5 *********************************************/
6
7 #include "sysconfig.h"
8 #include "sysdeps.h"
9
10 #include "options.h"
11
12 #include "uae.h"
13 #include "memory.h"
14 #include "xwin.h"
15 #include "custom.h"
16
17 #include "hrtimer.h"
18
19 #include "inputdevice.h"
20 void inputdevice_release_all_keys (void);
21 extern int mouse_port[NORMAL_JPORTS];
22
23 #include "drawing.h"
24 #include "hotkeys.h"
25
26 #include "libretro.h"
27 #include "libretro-glue.h"
28 #include "libretro-mapper.h"
29 extern unsigned int uae_devices[4];
30 extern unsigned int inputdevice_finalized;
31 extern int pix_bytes;
32
33 #define LOG_MSG(...)
34 #define LOG_MSG2(...)
35
36 extern int defaultw;
37 extern int defaulth;
38
39 unsigned short int clut[] = {
40 0x0000, /* full background transparency */
41 0x0200, /* background semi transparent */
42 0x06FF, /* opaque + light orange */
43 0x06AA, /* opaque + dark orange */
44 } ;
45
46 unsigned short int* pixbuf = NULL;
47
48 extern unsigned short int bmp[1024*1024];
49 void retro_audio_cb(short l, short r);
50
51 int prefs_changed = 0;
52 int vsync_enabled = 0;
53 int opt_scrw = 0;
54 int opt_scrh = 0;
55 unsigned long stat_value = 0;
56
gui_init(void)57 int gui_init (void)
58 {
59 return 0;
60 }
61
62 /*
63 * Handle target-specific cfgfile options
64 */
target_save_options(struct zfile * f,struct uae_prefs * p)65 void target_save_options (struct zfile* f, struct uae_prefs *p)
66 {
67 }
68
target_parse_option(struct uae_prefs * p,const char * option,const char * value)69 int target_parse_option (struct uae_prefs *p, const char *option, const char *value)
70 {
71 return 0;
72 }
73
target_default_options(struct uae_prefs * p,int type)74 void target_default_options (struct uae_prefs *p, int type)
75 {
76 }
77
78 /* --- mouse input --- */
retro_mouse(int port,int dx,int dy)79 void retro_mouse(int port, int dx, int dy)
80 {
81 mouse_port[port] = 1;
82 setmousestate(port, 0, dx, 0);
83 setmousestate(port, 1, dy, 0);
84 }
85
retro_mouse_button(int port,int button,int state)86 void retro_mouse_button(int port, int button, int state)
87 {
88 mouse_port[port] = 1;
89 setmousebuttonstate(port, button, state);
90 }
91
92 /* --- joystick input --- */
retro_joystick(int port,int axis,int state)93 void retro_joystick(int port, int axis, int state)
94 {
95 // disable mouse in normal ports, joystick/mouse inverted
96 if(port < 2)
97 {
98 int m_port = (port == 0) ? 1 : 0;
99 mouse_port[m_port] = 0;
100 }
101 setjoystickstate(port, axis, state, 1);
102 }
103
retro_joystick_button(int port,int button,int state)104 void retro_joystick_button(int port, int button, int state)
105 {
106 // disable mouse in normal ports, joystick/mouse inverted
107 if(port < 2)
108 {
109 int m_port = (port == 0) ? 1 : 0;
110 mouse_port[m_port] = 0;
111 }
112 setjoybuttonstate(port, button, state);
113 }
114
115 /* --- keyboard input --- */
retro_key_down(int key)116 void retro_key_down(int key)
117 {
118 inputdevice_do_keyboard (key, 1);
119 }
120
retro_key_up(int key)121 void retro_key_up(int key)
122 {
123 inputdevice_do_keyboard (key, 0);
124 }
125
126
127
retro_renderSound(short * samples,int sampleCount)128 int retro_renderSound(short* samples, int sampleCount)
129 {
130 int i;
131
132 if (sampleCount < 1)
133 return 0;
134
135 for(i=0; i<sampleCount; i+=2)
136 {
137 retro_audio_cb(samples[i], samples[i+1]);
138 }
139 }
140
retro_flush_screen(struct vidbuf_description * gfxinfo,int ystart,int yend)141 void retro_flush_screen (struct vidbuf_description *gfxinfo, int ystart, int yend)
142 {
143 co_switch(mainThread);
144 }
145
146
retro_flush_block(struct vidbuf_description * gfxinfo,int ystart,int yend)147 void retro_flush_block (struct vidbuf_description *gfxinfo, int ystart, int yend)
148 {
149 }
150
retro_flush_line(struct vidbuf_description * gfxinfo,int y)151 void retro_flush_line (struct vidbuf_description *gfxinfo, int y)
152 {
153 }
154
retro_flush_clear_screen(struct vidbuf_description * gfxinfo)155 void retro_flush_clear_screen(struct vidbuf_description *gfxinfo)
156 {
157 }
158
retro_lockscr(struct vidbuf_description * gfxinfo)159 int retro_lockscr(struct vidbuf_description *gfxinfo)
160 {
161 return 1;
162 }
163
retro_unlockscr(struct vidbuf_description * gfxinfo)164 void retro_unlockscr(struct vidbuf_description *gfxinfo)
165 {
166 }
167
168
169
graphics_init(void)170 int graphics_init(void) {
171
172 if (pixbuf != NULL) {
173 return 1;
174 }
175 currprefs.gfx_size_win.width = defaultw;
176
177 #ifdef ENABLE_LOG_SCREEN
178 currprefs.gfx_height = 256;
179 currprefs.gfx_linedbl = 0; //disable line doubling
180 #else
181 currprefs.gfx_size_win.height = defaulth;
182 #endif
183 opt_scrw = currprefs.gfx_size_win.width;
184 opt_scrh = currprefs.gfx_size_win.height;
185
186 //if (currprefs.gfx_size_win.width>= 640) {
187 //currprefs.gfx_lores = 0;
188 //} else {
189 // currprefs.gfx_lores = 1;
190 //}
191 //vsync_enabled = currprefs.gfx_vsync;
192 LOG_MSG2("screen w=%i", currprefs.gfx_size_win.width);
193 LOG_MSG2("screen h=%i", currprefs.gfx_size_win.height);
194
195 #ifdef ENABLE_LOG_SCREEN
196 pixbuf = (unsigned int*) malloc(currprefs.gfx_size_win.width * 576 * pix_bytes);
197 #else
198 pixbuf = (unsigned short int*) &bmp[0];
199 #endif
200 //printf("graphics init: pixbuf=%p color_mode=%d width=%d height=%d\n", pixbuf, currprefs.color_mode, currprefs.gfx_size_win.width, currprefs.gfx_size_win.height);
201 if (pixbuf == NULL) {
202 printf("Error: not enough memory to initialize screen buffer!\n");
203 return -1;
204 }
205 //memset(pixbuf, 0x80, currprefs.gfx_size_win.width * currprefs.gfx_size_win.height * pix_bytes);
206
207 gfxvidinfo.width_allocated = currprefs.gfx_size_win.width;
208 gfxvidinfo.height_allocated = currprefs.gfx_size_win.height;
209 gfxvidinfo.maxblocklines = 1000;
210 gfxvidinfo.pixbytes = pix_bytes;
211 gfxvidinfo.rowbytes = gfxvidinfo.width_allocated * gfxvidinfo.pixbytes ;
212 gfxvidinfo.bufmem = (unsigned char*)pixbuf;
213 gfxvidinfo.emergmem = 0;
214 gfxvidinfo.linemem = 0;
215
216 gfxvidinfo.lockscr = retro_lockscr;
217 gfxvidinfo.unlockscr = retro_unlockscr;
218 gfxvidinfo.flush_block = retro_flush_block;
219 gfxvidinfo.flush_clear_screen = retro_flush_clear_screen;
220 gfxvidinfo.flush_screen = retro_flush_screen;
221 gfxvidinfo.flush_line = retro_flush_line;
222
223 prefs_changed = 1;
224 inputdevice_release_all_keys ();
225 reset_hotkeys ();
226 reset_drawing ();
227 return 1;
228 }
229
is_fullscreen(void)230 int is_fullscreen (void)
231 {
232 return 1;
233 }
234
is_vsync(void)235 int is_vsync (void)
236 {
237 return vsync_enabled;
238 }
239
240
mousehack_allowed(void)241 int mousehack_allowed (void)
242 {
243 return 0;
244 }
245
graphics_setup(void)246 int graphics_setup(void)
247 {
248 //32bit mode
249 //Rw, Gw, Bw, Rs, Gs, Bs, Aw, As, Avalue, swap
250 if (pix_bytes == 2)
251 alloc_colors64k (5, 6, 5, 11, 5, 0, 0, 0, 0, 0);
252 else
253 alloc_colors64k (8, 8, 8, 16, 8, 0, 0, 0, 0, 0);
254
255 return 1;
256 }
257
graphics_leave(void)258 void graphics_leave(void)
259 {
260 }
261
graphics_notify_state(int state)262 void graphics_notify_state (int state)
263 {
264 }
265
gfx_save_options(FILE * f,const struct uae_prefs * p)266 void gfx_save_options (FILE * f, const struct uae_prefs * p)
267 {
268 }
269
gfx_parse_option(struct uae_prefs * p,const char * option,const char * value)270 int gfx_parse_option (struct uae_prefs *p, const char *option, const char *value)
271 {
272 return 0;
273 }
274
gfx_default_options(struct uae_prefs * p)275 void gfx_default_options(struct uae_prefs *p)
276 {
277 }
278
screenshot(int type,int f)279 void screenshot (int type, int f)
280 {
281 }
282
toggle_fullscreen(int mode)283 void toggle_fullscreen(int mode)
284 {
285 }
286
check_prefs_changed_gfx(void)287 int check_prefs_changed_gfx (void)
288 {
289 if (prefs_changed)
290 prefs_changed = 0;
291 else
292 return 0;
293
294 changed_prefs.gfx_size_win.width = defaultw;
295 changed_prefs.gfx_size_win.height = defaulth;
296
297 currprefs.gfx_size_win.width = changed_prefs.gfx_size_win.width;
298 currprefs.gfx_size_win.height = changed_prefs.gfx_size_win.height;
299 currprefs.gfx_xcenter = changed_prefs.gfx_xcenter;
300 currprefs.gfx_ycenter = changed_prefs.gfx_ycenter;
301
302 gfxvidinfo.width_allocated = currprefs.gfx_size_win.width;
303 gfxvidinfo.height_allocated = currprefs.gfx_size_win.height;
304
305 reset_drawing();
306 //printf("check_prefs_changed_gfx: %d:%d, xcenter:%d ycenter:%d\n", changed_prefs.gfx_size_win.width, changed_prefs.gfx_size_win.height, changed_prefs.gfx_xcenter, changed_prefs.gfx_ycenter);
307 return 0;
308 }
309
310
311 /***************************************************************
312 Joystick functions
313 ****************************************************************/
314
init_joysticks(void)315 static int init_joysticks (void)
316 {
317 return 1;
318 }
319
close_joysticks(void)320 static void close_joysticks (void)
321 {
322 }
323
acquire_joystick(int num,int flags)324 static int acquire_joystick (int num, int flags)
325 {
326 return 1;
327 }
328
get_joystick_flags(int num)329 static int get_joystick_flags (int num)
330 {
331 return 0;
332 }
unacquire_joystick(int num)333 static void unacquire_joystick (int num)
334 {
335 }
336
read_joysticks(void)337 static void read_joysticks (void)
338 {
339 }
340
get_joystick_num(void)341 static int get_joystick_num (void)
342 {
343 return 4;
344 }
345
get_joystick_uniquename(int joy)346 static char *get_joystick_uniquename (int joy)
347 {
348 switch (joy)
349 {
350 case 0:
351 return "RetroPad0";
352 break;
353 case 1:
354 return "RetroPad1";
355 break;
356 case 2:
357 return "RetroPad2";
358 break;
359 case 3:
360 return "RetroPad3";
361 break;
362 default:
363 return "RetroPad1";
364 break;
365 }
366 }
367
get_joystick_widget_num(int joy)368 static int get_joystick_widget_num (int joy)
369 {
370 return 0;
371 }
372
get_joystick_widget_type(int joy,int num,char * name,uae_u32 * code)373 static int get_joystick_widget_type (int joy, int num, char *name, uae_u32 *code)
374 {
375 return IDEV_WIDGET_BUTTON;
376 }
377
get_joystick_widget_first(int joy,int type)378 static int get_joystick_widget_first (int joy, int type)
379 {
380 return -1;
381 }
382
get_joystick_friendlyname(int joy)383 static TCHAR *get_joystick_friendlyname (int joy)
384 {
385 switch (joy)
386 {
387 case 0:
388 return "RetroPad0";
389 break;
390 case 1:
391 return "RetroPad1";
392 break;
393 case 2:
394 return "RetroPad2";
395 break;
396 case 3:
397 return "RetroPad3";
398 break;
399 default:
400 return "RetroPad1";
401 break;
402 }
403 }
404
405 struct inputdevice_functions inputdevicefunc_joystick = {
406 init_joysticks,
407 close_joysticks,
408 acquire_joystick,
409 unacquire_joystick,
410 read_joysticks,
411 get_joystick_num,
412 get_joystick_friendlyname,
413 get_joystick_uniquename,
414 get_joystick_widget_num,
415 get_joystick_widget_type,
416 get_joystick_widget_first,
417 get_joystick_flags
418 };
419
input_get_default_joystick(struct uae_input_device * uid,int num,int port,int af,int mode,bool gp)420 int input_get_default_joystick (struct uae_input_device *uid, int num, int port, int af, int mode, bool gp)
421 {
422 if(uae_devices[0] == RETRO_DEVICE_UAE_CD32PAD)
423 {
424 uid[0].eventid[ID_AXIS_OFFSET + 0][0] = INPUTEVENT_JOY2_HORIZ;
425 uid[0].eventid[ID_AXIS_OFFSET + 1][0] = INPUTEVENT_JOY2_VERT;
426 uid[0].eventid[ID_BUTTON_OFFSET + 0][0] = INPUTEVENT_JOY2_CD32_RED;
427 uid[0].eventid[ID_BUTTON_OFFSET + 1][0] = INPUTEVENT_JOY2_CD32_BLUE;
428 uid[0].eventid[ID_BUTTON_OFFSET + 2][0] = INPUTEVENT_JOY2_CD32_GREEN;
429 uid[0].eventid[ID_BUTTON_OFFSET + 3][0] = INPUTEVENT_JOY2_CD32_YELLOW;
430 uid[0].eventid[ID_BUTTON_OFFSET + 4][0] = INPUTEVENT_JOY2_CD32_RWD;
431 uid[0].eventid[ID_BUTTON_OFFSET + 5][0] = INPUTEVENT_JOY2_CD32_FFW;
432 uid[0].eventid[ID_BUTTON_OFFSET + 6][0] = INPUTEVENT_JOY2_CD32_PLAY;
433 }
434 else
435 {
436 uid[0].eventid[ID_AXIS_OFFSET + 0][0] = INPUTEVENT_JOY2_HORIZ;
437 uid[0].eventid[ID_AXIS_OFFSET + 1][0] = INPUTEVENT_JOY2_VERT;
438 uid[0].eventid[ID_BUTTON_OFFSET + 0][0] = INPUTEVENT_JOY2_FIRE_BUTTON;
439 uid[0].eventid[ID_BUTTON_OFFSET + 1][0] = INPUTEVENT_JOY2_2ND_BUTTON;
440 }
441
442 if(uae_devices[1] == RETRO_DEVICE_UAE_CD32PAD)
443 {
444 uid[1].eventid[ID_AXIS_OFFSET + 0][0] = INPUTEVENT_JOY1_HORIZ;
445 uid[1].eventid[ID_AXIS_OFFSET + 1][0] = INPUTEVENT_JOY1_VERT;
446 uid[1].eventid[ID_BUTTON_OFFSET + 0][0] = INPUTEVENT_JOY1_CD32_RED;
447 uid[1].eventid[ID_BUTTON_OFFSET + 1][0] = INPUTEVENT_JOY1_CD32_BLUE;
448 uid[1].eventid[ID_BUTTON_OFFSET + 2][0] = INPUTEVENT_JOY1_CD32_GREEN;
449 uid[1].eventid[ID_BUTTON_OFFSET + 3][0] = INPUTEVENT_JOY1_CD32_YELLOW;
450 uid[1].eventid[ID_BUTTON_OFFSET + 4][0] = INPUTEVENT_JOY1_CD32_RWD;
451 uid[1].eventid[ID_BUTTON_OFFSET + 5][0] = INPUTEVENT_JOY1_CD32_FFW;
452 uid[1].eventid[ID_BUTTON_OFFSET + 6][0] = INPUTEVENT_JOY1_CD32_PLAY;
453 }
454 else
455 {
456 uid[1].eventid[ID_AXIS_OFFSET + 0][0] = INPUTEVENT_JOY1_HORIZ;
457 uid[1].eventid[ID_AXIS_OFFSET + 1][0] = INPUTEVENT_JOY1_VERT;
458 uid[1].eventid[ID_BUTTON_OFFSET + 0][0] = INPUTEVENT_JOY1_FIRE_BUTTON;
459 uid[1].eventid[ID_BUTTON_OFFSET + 1][0] = INPUTEVENT_JOY1_2ND_BUTTON;
460 }
461
462 uid[2].eventid[ID_AXIS_OFFSET + 0][0] = INPUTEVENT_PAR_JOY1_HORIZ;
463 uid[2].eventid[ID_AXIS_OFFSET + 1][0] = INPUTEVENT_PAR_JOY1_VERT;
464 uid[2].eventid[ID_BUTTON_OFFSET + 0][0] = INPUTEVENT_PAR_JOY1_FIRE_BUTTON;
465 uid[2].eventid[ID_BUTTON_OFFSET + 1][0] = INPUTEVENT_PAR_JOY1_2ND_BUTTON;
466
467 uid[3].eventid[ID_AXIS_OFFSET + 0][0] = INPUTEVENT_PAR_JOY2_HORIZ;
468 uid[3].eventid[ID_AXIS_OFFSET + 1][0] = INPUTEVENT_PAR_JOY2_VERT;
469 uid[3].eventid[ID_BUTTON_OFFSET + 0][0] = INPUTEVENT_PAR_JOY2_FIRE_BUTTON;
470 uid[3].eventid[ID_BUTTON_OFFSET + 1][0] = INPUTEVENT_PAR_JOY2_2ND_BUTTON;
471
472 uid[0].enabled = 1;
473 uid[1].enabled = 1;
474 uid[2].enabled = 1;
475 uid[3].enabled = 1;
476
477 inputdevice_finalized = 1;
478 return 1;
479 }
480
481
482 /***************************************************************
483 Mouse functions
484 ****************************************************************/
485 /*
486 * Mouse inputdevice functions
487 */
488
489 /* Hardwire for 3 axes and 3 buttons
490 * There is no 3rd axis as such - mousewheel events are
491 * supplied by X on buttons 4 and 5.
492 */
493 #define MAX_BUTTONS 3
494 #define MAX_AXES 2
495 #define FIRST_AXIS 0
496 #define FIRST_BUTTON MAX_AXES
497
init_mouse(void)498 static int init_mouse (void)
499 {
500 return 1;
501 }
502
close_mouse(void)503 static void close_mouse (void)
504 {
505 return;
506 }
507
acquire_mouse(int num,int flags)508 static int acquire_mouse (int num, int flags)
509 {
510 return 1;
511 }
512
unacquire_mouse(int num)513 static void unacquire_mouse (int num)
514 {
515 return;
516 }
517
get_mouse_num(void)518 static int get_mouse_num (void)
519 {
520 return 1;
521 }
522
get_mouse_friendlyname(int mouse)523 static TCHAR *get_mouse_friendlyname (int mouse)
524 {
525 return "Default mouse";
526 }
527
get_mouse_uniquename(int mouse)528 static TCHAR *get_mouse_uniquename (int mouse)
529 {
530 return "RetroMouse";
531 }
532
get_mouse_widget_num(int mouse)533 static int get_mouse_widget_num (int mouse)
534 {
535 return MAX_AXES + MAX_BUTTONS;
536 }
537
get_mouse_widget_first(int mouse,int type)538 static int get_mouse_widget_first (int mouse, int type)
539 {
540 switch (type) {
541 case IDEV_WIDGET_BUTTON:
542 return FIRST_BUTTON;
543 case IDEV_WIDGET_AXIS:
544 return FIRST_AXIS;
545 }
546 return -1;
547 }
548
get_mouse_widget_type(int mouse,int num,TCHAR * name,uae_u32 * code)549 static int get_mouse_widget_type (int mouse, int num, TCHAR *name, uae_u32 *code)
550 {
551 if (num >= MAX_AXES && num < MAX_AXES + MAX_BUTTONS) {
552 if (name)
553 sprintf (name, "Button %d", num + 1 + MAX_AXES);
554 return IDEV_WIDGET_BUTTON;
555 } else if (num < MAX_AXES) {
556 if (name)
557 sprintf (name, "Axis %d", num + 1);
558 return IDEV_WIDGET_AXIS;
559 }
560 return IDEV_WIDGET_NONE;
561 }
562
read_mouse(void)563 static void read_mouse (void)
564 {
565 /* We handle mouse input in handle_events() */
566 }
567
get_mouse_flags(int num)568 static int get_mouse_flags (int num)
569 {
570 return 0;
571 }
572
573 struct inputdevice_functions inputdevicefunc_mouse = {
574 init_mouse,
575 close_mouse,
576 acquire_mouse,
577 unacquire_mouse,
578 read_mouse,
579 get_mouse_num,
580 get_mouse_friendlyname,
581 get_mouse_uniquename,
582 get_mouse_widget_num,
583 get_mouse_widget_type,
584 get_mouse_widget_first,
585 get_mouse_flags
586 };
587
input_get_default_mouse(struct uae_input_device * uid,int num,int port,int af,bool gp,bool wheel)588 int input_get_default_mouse (struct uae_input_device *uid, int num, int port, int af, bool gp, bool wheel)
589 {
590 uid[0].eventid[ID_AXIS_OFFSET + 0][0] = INPUTEVENT_MOUSE1_HORIZ;
591 uid[0].eventid[ID_AXIS_OFFSET + 1][0] = INPUTEVENT_MOUSE1_VERT;
592 uid[0].eventid[ID_AXIS_OFFSET + 2][0] = INPUTEVENT_MOUSE1_WHEEL;
593 uid[0].eventid[ID_BUTTON_OFFSET + 0][0] = INPUTEVENT_JOY1_FIRE_BUTTON;
594 uid[0].eventid[ID_BUTTON_OFFSET + 1][0] = INPUTEVENT_JOY1_2ND_BUTTON;
595 uid[0].eventid[ID_BUTTON_OFFSET + 2][0] = INPUTEVENT_JOY1_3RD_BUTTON;
596
597 uid[1].eventid[ID_AXIS_OFFSET + 0][0] = INPUTEVENT_MOUSE2_HORIZ;
598 uid[1].eventid[ID_AXIS_OFFSET + 1][0] = INPUTEVENT_MOUSE2_VERT;
599 uid[1].eventid[ID_BUTTON_OFFSET + 0][0] = INPUTEVENT_JOY2_FIRE_BUTTON;
600 uid[1].eventid[ID_BUTTON_OFFSET + 1][0] = INPUTEVENT_JOY2_2ND_BUTTON;
601 uid[1].eventid[ID_BUTTON_OFFSET + 2][0] = INPUTEVENT_JOY2_3RD_BUTTON;
602
603 uid[0].enabled = 1;
604 uid[1].enabled = 1;
605 return 0;
606 }
607
608 /***************************************************************
609 Keyboard functions
610 ****************************************************************/
611
612
init_kb(void)613 static int init_kb (void)
614 {
615 return 1;
616 }
617
close_kb(void)618 static void close_kb (void)
619 {
620 }
621
acquire_kb(int num,int flags)622 static int acquire_kb (int num, int flags)
623 {
624 return 1;
625 }
626
unacquire_kb(int num)627 static void unacquire_kb (int num)
628 {
629 }
630
read_kb(void)631 static void read_kb (void)
632 {
633 }
634
get_kb_num(void)635 static int get_kb_num (void)
636 {
637 return 1;
638 }
639
get_kb_uniquename(int mouse)640 static char *get_kb_uniquename (int mouse)
641 {
642 return "Default keyboard";
643 }
644
get_kb_friendlyname(int mouse)645 static char *get_kb_friendlyname (int mouse)
646 {
647 return "Default keyboard";
648 }
649
get_kb_widget_num(int mouse)650 static int get_kb_widget_num (int mouse)
651 {
652 return 255; //fix me
653 }
654
get_kb_widget_type(int mouse,int num,char * name,uae_u32 * code)655 static int get_kb_widget_type (int mouse, int num, char *name, uae_u32 *code)
656 {
657 if (code) *code = ~0;
658 return IDEV_WIDGET_NONE;
659 }
660
get_kb_widget_first(int mouse,int type)661 static int get_kb_widget_first (int mouse, int type)
662 {
663 return 0;
664 }
665
get_kb_flags(int num)666 static int get_kb_flags (int num)
667 {
668 return 0;
669 }
670
671 struct inputdevice_functions inputdevicefunc_keyboard = {
672 init_kb,
673 close_kb,
674 acquire_kb,
675 unacquire_kb,
676 read_kb,
677 get_kb_num,
678 get_kb_friendlyname,
679 get_kb_uniquename,
680 get_kb_widget_num,
681 get_kb_widget_type,
682 get_kb_widget_first,
683 get_kb_flags
684 };
685
686
getcapslockstate(void)687 int getcapslockstate (void)
688 {
689 return 0;
690 }
691
setcapslockstate(int state)692 void setcapslockstate (int state)
693 {
694 }
695
696 /********************************************************************
697 Misc fuctions
698 *********************************************************************/
699
needmousehack(void)700 int needmousehack(void)
701 {
702 return 0;
703 }
704
toggle_mousegrab(void)705 void toggle_mousegrab(void)
706 {
707 }
708
709 /* handle pads in the "options" dialog */
handle_options_events()710 int handle_options_events()
711 {
712 return 0;
713 }
714
handle_events()715 bool handle_events()
716 {
717 return 0;
718 }
719
uae_pause(void)720 void uae_pause (void)
721 {
722 }
723
uae_resume(void)724 void uae_resume (void)
725 {
726 }
727