1  /*
2   * UAE - The Un*x Amiga Emulator
3   *
4   * Joystick, mouse and keyboard emulation prototypes and definitions
5   *
6   * Copyright 1995 Bernd Schmidt
7   * Copyright 2001-2002 Toni Wilen
8   */
9 
10 
11 #define IDTYPE_JOYSTICK 0
12 #define IDTYPE_MOUSE 1
13 #define IDTYPE_KEYBOARD 2
14 
15 struct inputdevice_functions {
16     int (*init)(void);
17     void (*close)(void);
18     int (*acquire)(unsigned int,int);
19     void (*unacquire)(unsigned int);
20     void (*read)(void);
21     int (*get_num)(void);
22     const char *(*get_name)(unsigned int);
23     int (*get_widget_num)(unsigned int);
24     int (*get_widget_type)(unsigned int,unsigned int,char*,uae_u32*);
25     int (*get_widget_first)(unsigned int,int);
26 };
27 extern struct inputdevice_functions inputdevicefunc_joystick;
28 extern struct inputdevice_functions inputdevicefunc_mouse;
29 extern struct inputdevice_functions inputdevicefunc_keyboard;
30 extern int pause_emulation;
31 
32 struct uae_input_device_kbr_default {
33     int scancode;
34     int event;
35 };
36 
37 #define IDEV_WIDGET_NONE 0
38 #define IDEV_WIDGET_BUTTON 1
39 #define IDEV_WIDGET_AXIS 2
40 #define IDEV_WIDGET_KEY 3
41 
42 #define IDEV_MAPPED_AUTOFIRE_POSSIBLE 1
43 #define IDEV_MAPPED_AUTOFIRE_SET 2
44 
45 #define ID_BUTTON_OFFSET 0
46 #define ID_BUTTON_TOTAL 32
47 #define ID_AXIS_OFFSET 32
48 #define ID_AXIS_TOTAL 32
49 
50 extern int inputdevice_iterate (int devnum, int num, char *name, int *af);
51 extern int inputdevice_set_mapping (int devnum, int num, char *name, char *custom, int af, int sub);
52 extern int inputdevice_get_mapped_name (int devnum, int num, int *pflags, char *name, char *custom, int sub);
53 extern void inputdevice_copyconfig (struct uae_prefs *src, struct uae_prefs *dst);
54 extern void inputdevice_copy_single_config (struct uae_prefs *p, int src, int dst, int devnum);
55 extern void inputdevice_swap_ports (struct uae_prefs *p, int devnum);
56 extern void inputdevice_config_change (void);
57 extern int inputdevice_config_change_test (void);
58 extern int inputdevice_get_device_index (int devnum);
59 extern char *inputdevice_get_device_name (int type, int devnum);
60 extern int inputdevice_get_device_status (int devnum);
61 extern void inputdevice_set_device_status (int devnum, int enabled);
62 extern int inputdevice_get_device_total (int type);
63 extern int inputdevice_get_widget_num (int devnum);
64 extern int inputdevice_get_widget_type (int devnum, int num, char *name);
65 
66 extern void input_get_default_mouse (struct uae_input_device *uid);
67 extern void input_get_default_joystick (struct uae_input_device *uid);
68 
69 #define DEFEVENT(A, B, C, D, E, F) INPUTEVENT_ ## A,
70 enum inputevents {
71 INPUTEVENT_ZERO,
72 #include "inputevents.def"
73 INPUTEVENT_END
74 };
75 #undef DEFEVENT
76 
77 extern void handle_cd32_joystick_cia (uae_u8, uae_u8);
78 extern uae_u8 handle_parport_joystick (int port, uae_u8 pra, uae_u8 dra);
79 extern uae_u8 handle_joystick_buttons (uae_u8);
80 extern int getbuttonstate (int joy, int button);
81 extern int getjoystate (int joy);
82 
83 extern int needmousehack (void);
84 extern int mousehack_alive (void);
85 extern int mousehack_allowed (void);
86 
87 extern void toggle_fullscreen (void);
88 
89 extern void setmousebuttonstateall (int mouse, uae_u32 buttonbits, uae_u32 buttonmask);
90 extern void setjoybuttonstateall (int joy, uae_u32 buttonbits, uae_u32 buttonmask);
91 extern void setjoybuttonstate (int joy, int button, int state);
92 extern void setmousebuttonstate (int mouse, int button, int state);
93 extern void setjoystickstate (int joy, int axle, int state, int max);
94 void setmousestate (int mouse, int axis, int data, int isabs);
95 extern void inputdevice_updateconfig (struct uae_prefs *prefs);
96 
97 extern int inputdevice_translatekeycode (int keyboard, int scancode, int state);
98 extern void inputdevice_setkeytranslation (struct uae_input_device_kbr_default *trans);
99 extern void handle_input_event (int nr, int state, int max, int autofire);
100 extern void inputdevice_do_keyboard (int code, int state);
101 extern void inputdevice_release_all_keys (void);
102 
103 extern uae_u16 potgo_value;
104 extern uae_u16 POTGOR (void);
105 extern void POTGO (uae_u16 v);
106 extern uae_u16 POT0DAT (void);
107 extern uae_u16 POT1DAT (void);
108 extern void JOYTEST (uae_u16 v);
109 extern uae_u16 JOY0DAT (void);
110 extern uae_u16 JOY1DAT (void);
111 
112 extern void inputdevice_vsync (void);
113 extern void inputdevice_hsync (void);
114 extern void inputdevice_reset (void);
115 
116 extern void write_inputdevice_config (struct uae_prefs *p, FILE *f);
117 extern void read_inputdevice_config (struct uae_prefs *p, char *option, char *value);
118 extern void reset_inputdevice_config (struct uae_prefs *pr);
119 
120 extern void inputdevice_init (void);
121 extern void inputdevice_close (void);
122 extern void inputdevice_default_prefs (struct uae_prefs *p);
123 
124 extern void inputdevice_acquire (void);
125 extern void inputdevice_unacquire (void);
126 
127 extern void indicator_leds (int num, int state);
128 
129 extern void warpmode (int mode);
130 extern void pausemode (int mode);
131 
132 extern void inputdevice_add_inputcode (int code, int state);
133 extern void inputdevice_handle_inputcode (void);
134 
135 #define JSEM_KBDLAYOUT 0
136 #define JSEM_JOYS 100
137 #define JSEM_MICE 200
138 #define JSEM_END 300
139 #define JSEM_DECODEVAL(port,p) ((port) == 0 ? (p)->jport0 : (p)->jport1)
140 #define JSEM_ISNUMPAD(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT)
141 #define JSEM_ISCURSOR(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 1)
142 #define JSEM_ISSOMEWHEREELSE(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 2)
143 #define JSEM_ISXARCADE1(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 3)
144 #define JSEM_ISXARCADE2(port,p) (jsem_iskbdjoy(port,p) == JSEM_KBDLAYOUT + 4)
145 #define JSEM_LASTKBD 5
146 #define JSEM_ISANYKBD(port,p) (jsem_iskbdjoy(port,p) >= JSEM_KBDLAYOUT && jsem_iskbdjoy(port,p) < JSEM_KBDLAYOUT + JSEM_LASTKBD)
147 extern int compatibility_device[2];
148 
149 extern int jsem_isjoy (int port, struct uae_prefs *p);
150 extern int jsem_ismouse (int port, struct uae_prefs *p);
151 extern int jsem_iskbdjoy (int port, struct uae_prefs *p);
152 
153 extern int inputdevice_uaelib (char*, char*);
154