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