- More keyboard input handling centralization.
- Added save/load joystick configuration support to gtk and gtk-glade UIs.
This commit is contained in:
parent
3a42f10cae
commit
abe99a1e16
|
@ -25,21 +25,22 @@ SoundInterface_struct *SNDCoreList[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
const u16 Default_Joypad_Config[NB_KEYS] =
|
/* Our keyboard config is different because of the directional keys */
|
||||||
{ 1, // A
|
const u16 cli_kb_cfg[NB_KEYS] =
|
||||||
0, // B
|
{ SDLK_c, // A
|
||||||
5, // select
|
SDLK_x, // B
|
||||||
8, // start
|
SDLK_BACKSPACE, // select
|
||||||
20, // Right -- Start cheating abit...
|
SDLK_RETURN, // start
|
||||||
21, // Left
|
SDLK_RIGHT, // Right
|
||||||
22, // Up
|
SDLK_LEFT, // Left
|
||||||
23, // Down -- End of cheating.
|
SDLK_UP, // Up
|
||||||
7, // R
|
SDLK_DOWN, // Down
|
||||||
6, // L
|
SDLK_e, // R
|
||||||
4, // X
|
SDLK_w, // L
|
||||||
3, // Y
|
SDLK_d, // X
|
||||||
-1, // BOOST
|
SDLK_s, // Y
|
||||||
-1 // DEBUG
|
SDLK_p, // DEBUG
|
||||||
|
SDLK_o // BOOST
|
||||||
};
|
};
|
||||||
|
|
||||||
int Draw() {
|
int Draw() {
|
||||||
|
@ -92,7 +93,9 @@ int main(int argc, char ** argv) {
|
||||||
SDL_WM_SetCaption("Desmume SDL", NULL);
|
SDL_WM_SetCaption("Desmume SDL", NULL);
|
||||||
|
|
||||||
/* Initialize joysticks */
|
/* Initialize joysticks */
|
||||||
if(!init_joy(Default_Joypad_Config)) return 1;
|
if(!init_joy()) return 1;
|
||||||
|
/* Load our own keyboard configuration */
|
||||||
|
set_kb_keys(cli_kb_cfg);
|
||||||
|
|
||||||
surface = SDL_SetVideoMode(256, 384, 32, SDL_SWSURFACE);
|
surface = SDL_SetVideoMode(256, 384, 32, SDL_SWSURFACE);
|
||||||
|
|
||||||
|
|
|
@ -22,12 +22,73 @@
|
||||||
|
|
||||||
#include "ctrlssdl.h"
|
#include "ctrlssdl.h"
|
||||||
|
|
||||||
|
/* Keypad key names */
|
||||||
|
const char *key_names[NB_KEYS] =
|
||||||
|
{
|
||||||
|
"A",
|
||||||
|
"B",
|
||||||
|
"Select",
|
||||||
|
"Start",
|
||||||
|
"Right",
|
||||||
|
"Left",
|
||||||
|
"Up",
|
||||||
|
"Down",
|
||||||
|
"R",
|
||||||
|
"L",
|
||||||
|
"X",
|
||||||
|
"Y",
|
||||||
|
"Debug",
|
||||||
|
"Boost"
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Default joypad configuration */
|
||||||
|
const u16 default_joypad_cfg[NB_KEYS] =
|
||||||
|
{ 1, // A
|
||||||
|
0, // B
|
||||||
|
5, // select
|
||||||
|
8, // start
|
||||||
|
-1, // Right -- Start cheating abit...
|
||||||
|
-1, // Left
|
||||||
|
-1, // Up
|
||||||
|
-1, // Down -- End of cheating.
|
||||||
|
7, // R
|
||||||
|
6, // L
|
||||||
|
4, // X
|
||||||
|
3, // Y
|
||||||
|
-1, // DEBUG
|
||||||
|
-1 // BOOST
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 default_keyboard_cfg[NB_KEYS] =
|
||||||
|
{
|
||||||
|
97, // a
|
||||||
|
98, // b
|
||||||
|
65288, // backspace
|
||||||
|
65293, // enter
|
||||||
|
65363, // directional arrows
|
||||||
|
65361,
|
||||||
|
65362,
|
||||||
|
65364,
|
||||||
|
65454, // numeric .
|
||||||
|
65456, // numeric 0
|
||||||
|
120, // x
|
||||||
|
121, // y
|
||||||
|
112,
|
||||||
|
113
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Load default joystick and keyboard configurations */
|
||||||
|
void load_default_config()
|
||||||
|
{
|
||||||
|
memcpy(keyboard_cfg, default_keyboard_cfg, sizeof(keyboard_cfg));
|
||||||
|
memcpy(joypad_cfg, default_joypad_cfg, sizeof(joypad_cfg));
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize joysticks */
|
/* Initialize joysticks */
|
||||||
BOOL init_joy(u16 joyCfg[]) {
|
BOOL init_joy(u16 joyCfg[]) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* Joystick configuration */
|
set_joy_keys(default_joypad_cfg);
|
||||||
memcpy(joypadCfg, joyCfg, sizeof(joypadCfg));
|
|
||||||
|
|
||||||
if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1)
|
if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) == -1)
|
||||||
{
|
{
|
||||||
|
@ -48,6 +109,20 @@ BOOL init_joy(u16 joyCfg[]) {
|
||||||
printf("Trackballs: %d\n", SDL_JoystickNumBalls(joy));
|
printf("Trackballs: %d\n", SDL_JoystickNumBalls(joy));
|
||||||
printf("Hats: %d\n\n", SDL_JoystickNumHats(joy));
|
printf("Hats: %d\n\n", SDL_JoystickNumHats(joy));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set all buttons at once */
|
||||||
|
void set_joy_keys(u16 joyCfg[])
|
||||||
|
{
|
||||||
|
memcpy(joypad_cfg, joyCfg, sizeof(joypad_cfg));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set all buttons at once */
|
||||||
|
void set_kb_keys(u16 kbCfg[])
|
||||||
|
{
|
||||||
|
memcpy(keyboard_cfg, kbCfg, sizeof(keyboard_cfg));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unload joysticks */
|
/* Unload joysticks */
|
||||||
|
@ -59,11 +134,22 @@ void uninit_joy()
|
||||||
SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
|
SDL_QuitSubSystem(SDL_INIT_JOYSTICK);
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 inline lookup_joykey (u16 keyval) {
|
/* Return keypad vector with given key set to 1 */
|
||||||
|
u16 inline lookup_joy_key (u16 keyval) {
|
||||||
int i;
|
int i;
|
||||||
u16 Key = 0;
|
u16 Key = 0;
|
||||||
for(i = 0; i < NB_KEYS; i++)
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
if(keyval == joypadCfg[i]) break;
|
if(keyval == joypad_cfg[i]) break;
|
||||||
|
if(i < NB_KEYS) Key = KEYMASK_(i);
|
||||||
|
return Key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return keypad vector with given key set to 1 */
|
||||||
|
u16 inline lookup_key (u16 keyval) {
|
||||||
|
int i;
|
||||||
|
u16 Key = 0;
|
||||||
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
|
if(keyval == keyboard_cfg[i]) break;
|
||||||
if(i < NB_KEYS) Key = KEYMASK_(i);
|
if(i < NB_KEYS) Key = KEYMASK_(i);
|
||||||
return Key;
|
return Key;
|
||||||
}
|
}
|
||||||
|
@ -72,7 +158,7 @@ u16 inline lookup_joykey (u16 keyval) {
|
||||||
u16 get_set_joy_key(int index) {
|
u16 get_set_joy_key(int index) {
|
||||||
BOOL done = FALSE;
|
BOOL done = FALSE;
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
u16 key = joypadCfg[index];
|
u16 key = joypad_cfg[index];
|
||||||
|
|
||||||
/* Enable joystick events if needed */
|
/* Enable joystick events if needed */
|
||||||
if( SDL_JoystickEventState(SDL_QUERY) == SDL_IGNORE )
|
if( SDL_JoystickEventState(SDL_QUERY) == SDL_IGNORE )
|
||||||
|
@ -90,7 +176,7 @@ u16 get_set_joy_key(int index) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SDL_JoystickEventState(SDL_IGNORE);
|
SDL_JoystickEventState(SDL_IGNORE);
|
||||||
joypadCfg[index] = key;
|
joypad_cfg[index] = key;
|
||||||
|
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
@ -151,26 +237,26 @@ u16 process_ctrls_events(u16 keypad)
|
||||||
if (event.jaxis.axis == 0)
|
if (event.jaxis.axis == 0)
|
||||||
if( event.jaxis.value == 0 )
|
if( event.jaxis.value == 0 )
|
||||||
{
|
{
|
||||||
key = lookup_joykey( 20 ) | lookup_joykey( 21 );
|
key = KEYMASK_( 4 ) | KEYMASK_( 5 );
|
||||||
RM_KEY( keypad, key );
|
RM_KEY( keypad, key );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( event.jaxis.value > 0 ) key = lookup_joykey( 20 );
|
if( event.jaxis.value > 0 ) key = KEYMASK_( 4 );
|
||||||
else key = lookup_joykey( 21 );
|
else key = KEYMASK_( 5 );
|
||||||
ADD_KEY( keypad, key );
|
ADD_KEY( keypad, key );
|
||||||
}
|
}
|
||||||
/* Vertical */
|
/* Vertical */
|
||||||
else if (event.jaxis.axis == 1)
|
else if (event.jaxis.axis == 1)
|
||||||
if( event.jaxis.value == 0 )
|
if( event.jaxis.value == 0 )
|
||||||
{
|
{
|
||||||
key = lookup_joykey( 22 ) | lookup_joykey( 23 );
|
key = KEYMASK_( 6 ) | KEYMASK_( 7 );
|
||||||
RM_KEY( keypad, key );
|
RM_KEY( keypad, key );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( event.jaxis.value > 0 ) key = lookup_joykey( 23 );
|
if( event.jaxis.value > 0 ) key = KEYMASK_( 7 );
|
||||||
else key = lookup_joykey( 22 );
|
else key = KEYMASK_( 6 );
|
||||||
ADD_KEY( keypad, key );
|
ADD_KEY( keypad, key );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -178,13 +264,13 @@ u16 process_ctrls_events(u16 keypad)
|
||||||
/* Joystick button pressed */
|
/* Joystick button pressed */
|
||||||
/* FIXME: Add support for BOOST */
|
/* FIXME: Add support for BOOST */
|
||||||
case SDL_JOYBUTTONDOWN:
|
case SDL_JOYBUTTONDOWN:
|
||||||
key = lookup_joykey( event.jbutton.button );
|
key = lookup_joy_key( event.jbutton.button );
|
||||||
ADD_KEY( keypad, key );
|
ADD_KEY( keypad, key );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Joystick button released */
|
/* Joystick button released */
|
||||||
case SDL_JOYBUTTONUP:
|
case SDL_JOYBUTTONUP:
|
||||||
key = lookup_joykey(event.jbutton.button);
|
key = lookup_joy_key(event.jbutton.button);
|
||||||
RM_KEY( keypad, key );
|
RM_KEY( keypad, key );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -192,39 +278,13 @@ u16 process_ctrls_events(u16 keypad)
|
||||||
mouse, keyboard and quit events. */
|
mouse, keyboard and quit events. */
|
||||||
#ifndef GTK_UI
|
#ifndef GTK_UI
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
switch (event.key.keysym.sym)
|
key = lookup_key(event.key.keysym.sym);
|
||||||
{
|
ADD_KEY( keypad, key );
|
||||||
case SDLK_UP: ADD_KEY( keypad, 0x40); break;
|
|
||||||
case SDLK_DOWN: ADD_KEY( keypad, 0x80); break;
|
|
||||||
case SDLK_RIGHT: ADD_KEY( keypad, 0x10); break;
|
|
||||||
case SDLK_LEFT: ADD_KEY( keypad, 0x20); break;
|
|
||||||
case SDLK_c: ADD_KEY( keypad, 0x1); break;
|
|
||||||
case SDLK_x: ADD_KEY( keypad, 0x2); break;
|
|
||||||
case SDLK_BACKSPACE:ADD_KEY( keypad, 0x4); break;
|
|
||||||
case SDLK_RETURN: ADD_KEY( keypad, 0x8); break;
|
|
||||||
case SDLK_e: ADD_KEY( keypad, 0x100); break; // R
|
|
||||||
case SDLK_w: ADD_KEY( keypad, 0x200); break; // L
|
|
||||||
case SDLK_d: ADD_KEY( keypad, 0x400); break; // X
|
|
||||||
case SDLK_s: ADD_KEY( keypad, 0x800); break; // Y
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
switch (event.key.keysym.sym)
|
key = lookup_key(event.key.keysym.sym);
|
||||||
{
|
RM_KEY( keypad, key );
|
||||||
case SDLK_UP: RM_KEY( keypad, 0x40); break;
|
|
||||||
case SDLK_DOWN: RM_KEY( keypad, 0x80); break;
|
|
||||||
case SDLK_RIGHT: RM_KEY( keypad, 0x10); break;
|
|
||||||
case SDLK_LEFT: RM_KEY( keypad, 0x20); break;
|
|
||||||
case SDLK_c: RM_KEY( keypad, 0x1); break;
|
|
||||||
case SDLK_x: RM_KEY( keypad, 0x2); break;
|
|
||||||
case SDLK_BACKSPACE:RM_KEY( keypad, 0x4); break;
|
|
||||||
case SDLK_RETURN: RM_KEY( keypad, 0x8); break;
|
|
||||||
case SDLK_e: RM_KEY( keypad, 0x100); break; // R
|
|
||||||
case SDLK_w: RM_KEY( keypad, 0x200); break; // L
|
|
||||||
case SDLK_d: RM_KEY( keypad, 0x400); break; // X
|
|
||||||
case SDLK_s: RM_KEY( keypad, 0x800); break; // Y
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
|
|
|
@ -32,13 +32,34 @@
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
#define NB_KEYS 14
|
|
||||||
|
|
||||||
#define ADD_KEY(keypad,key) ( (keypad) |= (key) )
|
#define ADD_KEY(keypad,key) ( (keypad) |= (key) )
|
||||||
#define RM_KEY(keypad,key) ( (keypad) &= ~(key) )
|
#define RM_KEY(keypad,key) ( (keypad) &= ~(key) )
|
||||||
#define KEYMASK_(k) (1 << k)
|
#define KEYMASK_(k) (1 << k)
|
||||||
|
|
||||||
u16 joypadCfg[NB_KEYS];
|
#define NB_KEYS 14
|
||||||
|
#define KEY_NONE 0
|
||||||
|
#define KEY_A 1
|
||||||
|
#define KEY_B 2
|
||||||
|
#define KEY_SELECT 3
|
||||||
|
#define KEY_START 4
|
||||||
|
#define KEY_RIGHT 5
|
||||||
|
#define KEY_LEFT 6
|
||||||
|
#define KEY_UP 7
|
||||||
|
#define KEY_DOWN 8
|
||||||
|
#define KEY_R 9
|
||||||
|
#define KEY_L 10
|
||||||
|
#define KEY_X 11
|
||||||
|
#define KEY_Y 12
|
||||||
|
#define KEY_DEBUG 13
|
||||||
|
#define KEY_BOOST 14
|
||||||
|
|
||||||
|
/* Keypad key names */
|
||||||
|
const char *key_names[NB_KEYS];
|
||||||
|
/* Current keyboard configuration */
|
||||||
|
u16 keyboard_cfg[NB_KEYS];
|
||||||
|
/* Current joypad configuration */
|
||||||
|
u16 joypad_cfg[NB_KEYS];
|
||||||
|
/* Number of detected joypads */
|
||||||
u16 nbr_joy;
|
u16 nbr_joy;
|
||||||
|
|
||||||
#ifndef GTK_UI
|
#ifndef GTK_UI
|
||||||
|
@ -57,11 +78,16 @@ BOOL sdl_quit;
|
||||||
void set_mouse_coord(signed long x,signed long y);
|
void set_mouse_coord(signed long x,signed long y);
|
||||||
#endif // !GTK_UI
|
#endif // !GTK_UI
|
||||||
|
|
||||||
BOOL init_joy(u16 joyCfg[]);
|
void load_default_config();
|
||||||
|
BOOL init_joy();
|
||||||
void uninit_joy();
|
void uninit_joy();
|
||||||
|
void set_joy_keys(u16 joyCfg[]);
|
||||||
|
void set_kb_keys(u16 kbCfg[]);
|
||||||
u16 get_set_joy_key(int index);
|
u16 get_set_joy_key(int index);
|
||||||
void update_keypad(u16 keys);
|
void update_keypad(u16 keys);
|
||||||
u16 get_keypad();
|
u16 get_keypad();
|
||||||
|
u16 inline lookup_key (u16 keyval);
|
||||||
|
u16 inline lookup_joy_key (u16 keyval);
|
||||||
u16 process_ctrls_events(u16 oldkeypad);
|
u16 process_ctrls_events(u16 oldkeypad);
|
||||||
|
|
||||||
#endif /* CTRLSSDL_H */
|
#endif /* CTRLSSDL_H */
|
||||||
|
|
|
@ -182,7 +182,7 @@ void on_size3x_activate (GtkMenuItem *menuitem, gpointer user_data) { resize(3)
|
||||||
|
|
||||||
|
|
||||||
/* MENU CONFIG ***** ***** ***** ***** */
|
/* MENU CONFIG ***** ***** ***** ***** */
|
||||||
gint Keypad_Temp[DESMUME_NB_KEYS];
|
u16 Keypad_Temp[NB_KEYS];
|
||||||
|
|
||||||
void on_menu_controls_activate (GtkMenuItem *menuitem, gpointer user_data) {
|
void on_menu_controls_activate (GtkMenuItem *menuitem, gpointer user_data) {
|
||||||
edit_controls();
|
edit_controls();
|
||||||
|
|
|
@ -29,41 +29,23 @@ int BoostFS=20;
|
||||||
int saveFS;
|
int saveFS;
|
||||||
|
|
||||||
/* ***** ***** INPUT BUTTONS / KEYBOARD ***** ***** */
|
/* ***** ***** INPUT BUTTONS / KEYBOARD ***** ***** */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
u16 inline lookup_key (guint keyval) {
|
|
||||||
int i;
|
|
||||||
u16 Key = 0;
|
|
||||||
for(i = 0; i < DESMUME_NB_KEYS; i++)
|
|
||||||
if(keyval == Keypad_Config[i]) break;
|
|
||||||
if(i < DESMUME_NB_KEYS)
|
|
||||||
Key = DESMUME_KEYMASK_(i);
|
|
||||||
//fprintf(stderr,"K:%d(%d)->%X => [%X]\n", e->keyval, e->hardware_keycode, Key, Cur_Keypad);
|
|
||||||
return Key;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean on_wMainW_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) {
|
gboolean on_wMainW_key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) {
|
||||||
u16 Key = lookup_key(event->keyval);
|
u16 Key = lookup_key(event->keyval);
|
||||||
if (event->keyval == Keypad_Config[DESMUME_KEY_BOOST-1]) {
|
if (event->keyval == keyboard_cfg[KEY_BOOST-1]) {
|
||||||
Boost != Boost;
|
Boost != Boost;
|
||||||
saveFS=Frameskip;
|
saveFS=Frameskip;
|
||||||
if (Boost) Frameskip = BoostFS;
|
if (Boost) Frameskip = BoostFS;
|
||||||
else Frameskip = saveFS;
|
else Frameskip = saveFS;
|
||||||
}
|
}
|
||||||
else if (Key != 0) {
|
ADD_KEY( Cur_Keypad, Key );
|
||||||
Cur_Keypad |= Key;
|
if(desmume_running()) update_keypad(Cur_Keypad);
|
||||||
if(desmume_running()) update_keypad(Cur_Keypad);
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean on_wMainW_key_release_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) {
|
gboolean on_wMainW_key_release_event (GtkWidget *widget, GdkEventKey *event, gpointer user_data) {
|
||||||
u16 Key = lookup_key(event->keyval);
|
u16 Key = lookup_key(event->keyval);
|
||||||
if (Key != 0) {
|
RM_KEY( Cur_Keypad, Key );
|
||||||
Cur_Keypad &= ~Key;
|
if(desmume_running()) update_keypad(Cur_Keypad);
|
||||||
if(desmume_running()) update_keypad(Cur_Keypad);
|
|
||||||
}
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,24 +231,16 @@ gboolean on_wDraw_Sub_motion_notify_event (GtkWidget *widget, GdkEventMotion
|
||||||
|
|
||||||
|
|
||||||
/* ***** ***** KEYBOARD CONFIG / KEY DEFINITION ***** ***** */
|
/* ***** ***** KEYBOARD CONFIG / KEY DEFINITION ***** ***** */
|
||||||
|
u16 Keypad_Temp[NB_KEYS];
|
||||||
|
|
||||||
const char * DESMUME_KEY_NAMES[DESMUME_NB_KEYS]={
|
|
||||||
"A", "B",
|
|
||||||
"Select", "Start",
|
|
||||||
"Right", "Left", "Up", "Down",
|
|
||||||
"R", "L", "X", "Y", "DEBUG", "Boost"
|
|
||||||
};
|
|
||||||
gint Keypad_Temp[DESMUME_NB_KEYS];
|
|
||||||
guint temp_Key=0;
|
guint temp_Key=0;
|
||||||
|
|
||||||
void init_labels() {
|
void init_labels() {
|
||||||
int i;
|
int i;
|
||||||
char text[50], bname[20];
|
char text[50], bname[20];
|
||||||
GtkButton *b;
|
GtkButton *b;
|
||||||
for (i=0; i<DESMUME_NB_KEYS; i++) {
|
for (i=0; i<NB_KEYS; i++) {
|
||||||
sprintf(text,"%s : %s\0\0",DESMUME_KEY_NAMES[i],KEYNAME(Keypad_Config[i]));
|
sprintf(text,"%s : %s\0\0",key_names[i],KEYNAME(keyboard_cfg[i]));
|
||||||
sprintf(bname,"button_%s\0\0",DESMUME_KEY_NAMES[i]);
|
sprintf(bname,"button_%s\0\0",key_names[i]);
|
||||||
b = (GtkButton*)glade_xml_get_widget(xml, bname);
|
b = (GtkButton*)glade_xml_get_widget(xml, bname);
|
||||||
gtk_button_set_label(b,text);
|
gtk_button_set_label(b,text);
|
||||||
}
|
}
|
||||||
|
@ -279,20 +253,20 @@ void init_joy_labels() {
|
||||||
GtkButton *b;
|
GtkButton *b;
|
||||||
for (i=0; i<4; i++) {
|
for (i=0; i<4; i++) {
|
||||||
/* Key not configured */
|
/* Key not configured */
|
||||||
if( joypadCfg[i] == (u16)(-1) ) continue;
|
if( joypad_cfg[i] == (u16)(-1) ) continue;
|
||||||
|
|
||||||
sprintf(text,"%s : %d\0\0",DESMUME_KEY_NAMES[i],joypadCfg[i]);
|
sprintf(text,"%s : %d\0\0",key_names[i],joypad_cfg[i]);
|
||||||
sprintf(bname,"button_joy_%s\0\0",DESMUME_KEY_NAMES[i]);
|
sprintf(bname,"button_joy_%s\0\0",key_names[i]);
|
||||||
b = (GtkButton*)glade_xml_get_widget(xml, bname);
|
b = (GtkButton*)glade_xml_get_widget(xml, bname);
|
||||||
gtk_button_set_label(b,text);
|
gtk_button_set_label(b,text);
|
||||||
}
|
}
|
||||||
/* Skipping Axis */
|
/* Skipping Axis */
|
||||||
for (i=8; i<DESMUME_NB_KEYS; i++) {
|
for (i=8; i<NB_KEYS; i++) {
|
||||||
/* Key not configured */
|
/* Key not configured */
|
||||||
if( joypadCfg[i] == (u16)(-1) ) continue;
|
if( joypad_cfg[i] == (u16)(-1) ) continue;
|
||||||
|
|
||||||
sprintf(text,"%s : %d\0\0",DESMUME_KEY_NAMES[i],joypadCfg[i]);
|
sprintf(text,"%s : %d\0\0",key_names[i],joypad_cfg[i]);
|
||||||
sprintf(bname,"button_joy_%s\0\0",DESMUME_KEY_NAMES[i]);
|
sprintf(bname,"button_joy_%s\0\0",key_names[i]);
|
||||||
b = (GtkButton*)glade_xml_get_widget(xml, bname);
|
b = (GtkButton*)glade_xml_get_widget(xml, bname);
|
||||||
gtk_button_set_label(b,text);
|
gtk_button_set_label(b,text);
|
||||||
}
|
}
|
||||||
|
@ -300,7 +274,7 @@ void init_joy_labels() {
|
||||||
|
|
||||||
void edit_controls() {
|
void edit_controls() {
|
||||||
GtkDialog * dlg = (GtkDialog*)glade_xml_get_widget(xml, "wKeybConfDlg");
|
GtkDialog * dlg = (GtkDialog*)glade_xml_get_widget(xml, "wKeybConfDlg");
|
||||||
memcpy(&Keypad_Temp, &Keypad_Config, sizeof(Keypad_Config));
|
memcpy(&Keypad_Temp, &keyboard_cfg, sizeof(keyboard_cfg));
|
||||||
/* we change the labels so we know keyb def */
|
/* we change the labels so we know keyb def */
|
||||||
init_labels();
|
init_labels();
|
||||||
gtk_widget_show((GtkWidget*)dlg);
|
gtk_widget_show((GtkWidget*)dlg);
|
||||||
|
@ -309,7 +283,7 @@ void edit_controls() {
|
||||||
void on_wKeybConfDlg_response (GtkDialog *dialog, gint arg1, gpointer user_data) {
|
void on_wKeybConfDlg_response (GtkDialog *dialog, gint arg1, gpointer user_data) {
|
||||||
/* overwrite keyb def if user selected ok */
|
/* overwrite keyb def if user selected ok */
|
||||||
if (arg1 == GTK_RESPONSE_OK)
|
if (arg1 == GTK_RESPONSE_OK)
|
||||||
memcpy(&Keypad_Config, &Keypad_Temp, sizeof(Keypad_Config));
|
memcpy(&keyboard_cfg, &Keypad_Temp, sizeof(keyboard_cfg));
|
||||||
gtk_widget_hide((GtkWidget*)dialog);
|
gtk_widget_hide((GtkWidget*)dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,7 +308,7 @@ void ask(GtkButton*b, int key) {
|
||||||
{
|
{
|
||||||
case GTK_RESPONSE_OK:
|
case GTK_RESPONSE_OK:
|
||||||
Keypad_Temp[key]=temp_Key;
|
Keypad_Temp[key]=temp_Key;
|
||||||
sprintf(text,"%s : %s\0\0",DESMUME_KEY_NAMES[key],KEYNAME(temp_Key));
|
sprintf(text,"%s : %s\0\0",key_names[key],KEYNAME(temp_Key));
|
||||||
gtk_button_set_label(b,text);
|
gtk_button_set_label(b,text);
|
||||||
break;
|
break;
|
||||||
case GTK_RESPONSE_CANCEL:
|
case GTK_RESPONSE_CANCEL:
|
||||||
|
@ -344,23 +318,23 @@ void ask(GtkButton*b, int key) {
|
||||||
gtk_widget_hide((GtkWidget*)dlg);
|
gtk_widget_hide((GtkWidget*)dlg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_button_Left_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_Left); }
|
void on_button_Left_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_LEFT); }
|
||||||
void on_button_Up_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_Up); }
|
void on_button_Up_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_UP); }
|
||||||
void on_button_Right_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_Right); }
|
void on_button_Right_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_RIGHT); }
|
||||||
void on_button_Down_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_Down); }
|
void on_button_Down_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_DOWN); }
|
||||||
|
|
||||||
void on_button_L_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_L); }
|
void on_button_L_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_L); }
|
||||||
void on_button_R_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_R); }
|
void on_button_R_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_R); }
|
||||||
|
|
||||||
void on_button_Y_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_Y); }
|
void on_button_Y_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_Y); }
|
||||||
void on_button_X_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_X); }
|
void on_button_X_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_X); }
|
||||||
void on_button_A_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_A); }
|
void on_button_A_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_A); }
|
||||||
void on_button_B_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_B); }
|
void on_button_B_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_B); }
|
||||||
|
|
||||||
void on_button_Start_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_Start); }
|
void on_button_Start_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_START); }
|
||||||
void on_button_Select_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_Select); }
|
void on_button_Select_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_SELECT); }
|
||||||
void on_button_Debug_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_DEBUG); }
|
void on_button_Debug_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_DEBUG); }
|
||||||
void on_button_Boost_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_BOOST); }
|
void on_button_Boost_clicked (GtkButton *b, gpointer user_data) { ask(b,KEY_BOOST); }
|
||||||
|
|
||||||
/* Joystick configuration / Key definition */
|
/* Joystick configuration / Key definition */
|
||||||
void ask_joy_key(GtkButton*b, int key)
|
void ask_joy_key(GtkButton*b, int key)
|
||||||
|
@ -374,28 +348,28 @@ void ask_joy_key(GtkButton*b, int key)
|
||||||
/* Need to force event processing. Otherwise, popup won't show up. */
|
/* Need to force event processing. Otherwise, popup won't show up. */
|
||||||
while ( gtk_events_pending() ) gtk_main_iteration();
|
while ( gtk_events_pending() ) gtk_main_iteration();
|
||||||
joykey = get_set_joy_key(key);
|
joykey = get_set_joy_key(key);
|
||||||
sprintf(text,"%s : %d\0\0",DESMUME_KEY_NAMES[key],joykey);
|
sprintf(text,"%s : %d\0\0",key_names[key],joykey);
|
||||||
gtk_button_set_label(b,text);
|
gtk_button_set_label(b,text);
|
||||||
gtk_widget_hide((GtkWidget*)dlg);
|
gtk_widget_hide((GtkWidget*)dlg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_joy_button_A_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_A_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_A); }
|
{ ask_joy_key(b,KEY_A); }
|
||||||
void on_joy_button_B_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_B_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_B); }
|
{ ask_joy_key(b,KEY_B); }
|
||||||
void on_joy_button_X_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_X_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_X); }
|
{ ask_joy_key(b,KEY_X); }
|
||||||
void on_joy_button_Y_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_Y_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_Y); }
|
{ ask_joy_key(b,KEY_Y); }
|
||||||
void on_joy_button_L_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_L_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_L); }
|
{ ask_joy_key(b,KEY_L); }
|
||||||
void on_joy_button_R_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_R_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_R); }
|
{ ask_joy_key(b,KEY_R); }
|
||||||
void on_joy_button_Select_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_Select_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_Select); }
|
{ ask_joy_key(b,KEY_SELECT); }
|
||||||
void on_joy_button_Start_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_Start_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_Start); }
|
{ ask_joy_key(b,KEY_START); }
|
||||||
void on_joy_button_Boost_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_Boost_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_BOOST); }
|
{ ask_joy_key(b,KEY_BOOST); }
|
||||||
void on_joy_button_Debug_clicked (GtkButton *b, gpointer user_data)
|
void on_joy_button_Debug_clicked (GtkButton *b, gpointer user_data)
|
||||||
{ ask_joy_key(b,DESMUME_KEY_DEBUG); }
|
{ ask_joy_key(b,KEY_DEBUG); }
|
||||||
|
|
|
@ -20,26 +20,6 @@
|
||||||
#ifndef __DESMUME_H__
|
#ifndef __DESMUME_H__
|
||||||
#define __DESMUME_H__
|
#define __DESMUME_H__
|
||||||
|
|
||||||
#define DESMUME_NB_KEYS 14
|
|
||||||
|
|
||||||
#define DESMUME_KEYMASK_(k) (1 << k)
|
|
||||||
|
|
||||||
#define DESMUME_KEY_NONE 0
|
|
||||||
#define DESMUME_KEY_A 1
|
|
||||||
#define DESMUME_KEY_B 2
|
|
||||||
#define DESMUME_KEY_Select 3
|
|
||||||
#define DESMUME_KEY_Start 4
|
|
||||||
#define DESMUME_KEY_Right 5
|
|
||||||
#define DESMUME_KEY_Left 6
|
|
||||||
#define DESMUME_KEY_Up 7
|
|
||||||
#define DESMUME_KEY_Down 8
|
|
||||||
#define DESMUME_KEY_R 9
|
|
||||||
#define DESMUME_KEY_L 10
|
|
||||||
#define DESMUME_KEY_X 11
|
|
||||||
#define DESMUME_KEY_Y 12
|
|
||||||
#define DESMUME_KEY_DEBUG 13
|
|
||||||
#define DESMUME_KEY_BOOST 14
|
|
||||||
|
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
extern void desmume_init();
|
extern void desmume_init();
|
||||||
|
|
|
@ -48,8 +48,7 @@
|
||||||
#include "desmume.h"
|
#include "desmume.h"
|
||||||
|
|
||||||
uint Frameskip;
|
uint Frameskip;
|
||||||
gint Keypad_Config[DESMUME_NB_KEYS];
|
u16 Keypad_Temp[NB_KEYS];
|
||||||
gint Keypad_Temp[DESMUME_NB_KEYS];
|
|
||||||
|
|
||||||
/* main.c */
|
/* main.c */
|
||||||
GtkWidget * pWindow;
|
GtkWidget * pWindow;
|
||||||
|
|
|
@ -60,92 +60,44 @@ void notify_Tools() {
|
||||||
|
|
||||||
|
|
||||||
/* ***** ***** CONFIG FILE ***** ***** */
|
/* ***** ***** CONFIG FILE ***** ***** */
|
||||||
|
|
||||||
gint Keypad_Config[DESMUME_NB_KEYS];
|
|
||||||
|
|
||||||
const u16 Default_Joypad_Config[DESMUME_NB_KEYS] =
|
|
||||||
{ 1, // A
|
|
||||||
0, // B
|
|
||||||
5, // select
|
|
||||||
8, // start
|
|
||||||
20, // Right -- Start cheating abit...
|
|
||||||
21, // Left
|
|
||||||
22, // Up
|
|
||||||
23, // Down -- End of cheating.
|
|
||||||
7, // R
|
|
||||||
6, // L
|
|
||||||
4, // X
|
|
||||||
3, // Y
|
|
||||||
-1, // DEBUG
|
|
||||||
-1 // BOOST
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *Ini_Keypad_Values[DESMUME_NB_KEYS] =
|
|
||||||
{
|
|
||||||
"KEY_A",
|
|
||||||
"KEY_B",
|
|
||||||
"KEY_SELECT",
|
|
||||||
"KEY_START",
|
|
||||||
"KEY_RIGHT",
|
|
||||||
"KEY_LEFT",
|
|
||||||
"KEY_UP",
|
|
||||||
"KEY_DOWN",
|
|
||||||
"KEY_R",
|
|
||||||
"KEY_L",
|
|
||||||
"KEY_X",
|
|
||||||
"KEY_Y",
|
|
||||||
"KEY_DEBUG",
|
|
||||||
"KEY_BOOST"
|
|
||||||
};
|
|
||||||
|
|
||||||
const gint Default_Keypad_Config[DESMUME_NB_KEYS] =
|
|
||||||
{
|
|
||||||
GDK_b,
|
|
||||||
GDK_a,
|
|
||||||
GDK_BackSpace,
|
|
||||||
GDK_Return,
|
|
||||||
GDK_Right,
|
|
||||||
GDK_Left,
|
|
||||||
GDK_Up,
|
|
||||||
GDK_Down,
|
|
||||||
GDK_KP_Decimal,
|
|
||||||
GDK_KP_0,
|
|
||||||
GDK_x,
|
|
||||||
GDK_y,
|
|
||||||
GDK_p,
|
|
||||||
GDK_o
|
|
||||||
};
|
|
||||||
|
|
||||||
char * CONFIG_FILE;
|
char * CONFIG_FILE;
|
||||||
|
|
||||||
void inline Load_DefaultConfig()
|
|
||||||
{
|
|
||||||
memcpy(Keypad_Config, Default_Keypad_Config, sizeof(Keypad_Config));
|
|
||||||
}
|
|
||||||
|
|
||||||
int Read_ConfigFile()
|
int Read_ConfigFile()
|
||||||
{
|
{
|
||||||
int i, tmp;
|
int i, tmp;
|
||||||
GKeyFile * keyfile = g_key_file_new();
|
GKeyFile * keyfile = g_key_file_new();
|
||||||
GError * error = NULL;
|
GError * error = NULL;
|
||||||
|
|
||||||
Load_DefaultConfig();
|
load_default_config();
|
||||||
|
|
||||||
g_key_file_load_from_file(keyfile, CONFIG_FILE, G_KEY_FILE_NONE, 0);
|
g_key_file_load_from_file(keyfile, CONFIG_FILE, G_KEY_FILE_NONE, 0);
|
||||||
|
|
||||||
const char *c;
|
const char *c;
|
||||||
|
|
||||||
for(i = 0; i < DESMUME_NB_KEYS; i++)
|
/* Load keypad keys */
|
||||||
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
{
|
{
|
||||||
tmp = g_key_file_get_integer(keyfile, "KEYS", Ini_Keypad_Values[i], &error);
|
tmp = g_key_file_get_integer(keyfile, "KEYS", key_names[i], &error);
|
||||||
if (error != NULL) {
|
if (error != NULL) {
|
||||||
g_error_free(error);
|
g_error_free(error);
|
||||||
error = NULL;
|
error = NULL;
|
||||||
} else {
|
} else {
|
||||||
Keypad_Config[i] = g_key_file_get_integer(keyfile, "KEYS", Ini_Keypad_Values[i], &error);
|
keyboard_cfg[i] = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Load joypad keys */
|
||||||
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
|
{
|
||||||
|
tmp = g_key_file_get_integer(keyfile, "JOYKEYS", key_names[i], &error);
|
||||||
|
if (error != NULL) {
|
||||||
|
g_error_free(error);
|
||||||
|
error = NULL;
|
||||||
|
} else {
|
||||||
|
joypad_cfg[i] = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
g_key_file_free(keyfile);
|
g_key_file_free(keyfile);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -158,9 +110,10 @@ int Write_ConfigFile()
|
||||||
|
|
||||||
keyfile = g_key_file_new();
|
keyfile = g_key_file_new();
|
||||||
|
|
||||||
for(i = 0; i < DESMUME_NB_KEYS; i++)
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
{
|
{
|
||||||
g_key_file_set_integer(keyfile, "KEYS", Ini_Keypad_Values[i], Keypad_Config[i]);
|
g_key_file_set_integer(keyfile, "KEYS", key_names[i], keyboard_cfg[i]);
|
||||||
|
g_key_file_set_integer(keyfile, "JOYKEYS", key_names[i], joypad_cfg[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_file_set_contents(CONFIG_FILE, g_key_file_to_data(keyfile, 0, 0), -1, 0);
|
g_file_set_contents(CONFIG_FILE, g_key_file_to_data(keyfile, 0, 0), -1, 0);
|
||||||
|
@ -204,7 +157,7 @@ int main(int argc, char *argv[]) {
|
||||||
}
|
}
|
||||||
desmume_init();
|
desmume_init();
|
||||||
/* Initialize joysticks */
|
/* Initialize joysticks */
|
||||||
if(!init_joy(Default_Joypad_Config)) return 1;
|
if(!init_joy()) return 1;
|
||||||
|
|
||||||
CONFIG_FILE = g_build_filename(g_get_home_dir(), ".desmume.ini", NULL);
|
CONFIG_FILE = g_build_filename(g_get_home_dir(), ".desmume.ini", NULL);
|
||||||
Read_ConfigFile();
|
Read_ConfigFile();
|
||||||
|
|
|
@ -1,25 +1,6 @@
|
||||||
#ifndef __DESMUME_H__
|
#ifndef __DESMUME_H__
|
||||||
#define __DESMUME_H__
|
#define __DESMUME_H__
|
||||||
|
|
||||||
#define DESMUME_NB_KEYS 13
|
|
||||||
|
|
||||||
#define DESMUME_KEYMASK_(k) (1 << k)
|
|
||||||
|
|
||||||
#define DESMUME_KEY_A 1
|
|
||||||
#define DESMUME_KEY_B 2
|
|
||||||
#define DESMUME_KEY_Select 3
|
|
||||||
#define DESMUME_KEY_Start 4
|
|
||||||
#define DESMUME_KEY_Right 5
|
|
||||||
#define DESMUME_KEY_Left 6
|
|
||||||
#define DESMUME_KEY_Up 7
|
|
||||||
#define DESMUME_KEY_Down 8
|
|
||||||
#define DESMUME_KEY_R 9
|
|
||||||
#define DESMUME_KEY_L 10
|
|
||||||
|
|
||||||
#define DESMUME_KEY_X 11
|
|
||||||
#define DESMUME_KEY_Y 12
|
|
||||||
#define DESMUME_KEY_DEBUG 13
|
|
||||||
|
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
extern void desmume_init();
|
extern void desmume_init();
|
||||||
|
|
|
@ -27,25 +27,6 @@ static GtkActionEntry action_entries[] = {
|
||||||
|
|
||||||
GtkActionGroup * action_group;
|
GtkActionGroup * action_group;
|
||||||
|
|
||||||
static gint Keypad_Config[DESMUME_NB_KEYS];
|
|
||||||
|
|
||||||
const char *Ini_Keypad_Values[DESMUME_NB_KEYS] =
|
|
||||||
{
|
|
||||||
"KEY_A",
|
|
||||||
"KEY_B",
|
|
||||||
"KEY_SELECT",
|
|
||||||
"KEY_START",
|
|
||||||
"KEY_RIGHT",
|
|
||||||
"KEY_LEFT",
|
|
||||||
"KEY_UP",
|
|
||||||
"KEY_DOWN",
|
|
||||||
"KEY_R",
|
|
||||||
"KEY_L",
|
|
||||||
"KEY_X",
|
|
||||||
"KEY_Y",
|
|
||||||
"KEY_DEBUG",
|
|
||||||
};
|
|
||||||
|
|
||||||
char * CONFIG_FILE;
|
char * CONFIG_FILE;
|
||||||
|
|
||||||
SoundInterface_struct *SNDCoreList[] = {
|
SoundInterface_struct *SNDCoreList[] = {
|
||||||
|
@ -55,6 +36,8 @@ SoundInterface_struct *SNDCoreList[] = {
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
u16 Keypad_Temp[NB_KEYS];
|
||||||
|
|
||||||
int Write_ConfigFile()
|
int Write_ConfigFile()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -62,9 +45,10 @@ int Write_ConfigFile()
|
||||||
|
|
||||||
keyfile = g_key_file_new();
|
keyfile = g_key_file_new();
|
||||||
|
|
||||||
for(i = 0; i < DESMUME_NB_KEYS; i++)
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
{
|
{
|
||||||
g_key_file_set_integer(keyfile, "KEYS", Ini_Keypad_Values[i], Keypad_Config[i]);
|
g_key_file_set_integer(keyfile, "KEYS", key_names[i], keyboard_cfg[i]);
|
||||||
|
g_key_file_set_integer(keyfile, "JOYKEYS", key_names[i], joypad_cfg[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if(FirmwareFile[0])
|
// if(FirmwareFile[0])
|
||||||
|
@ -80,74 +64,47 @@ int Write_ConfigFile()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Load_DefaultConfig();
|
|
||||||
int Read_ConfigFile()
|
int Read_ConfigFile()
|
||||||
{
|
{
|
||||||
int i, tmp;
|
int i, tmp;
|
||||||
GKeyFile * keyfile = g_key_file_new();
|
GKeyFile * keyfile = g_key_file_new();
|
||||||
GError * error = NULL;
|
GError * error = NULL;
|
||||||
|
|
||||||
Load_DefaultConfig();
|
load_default_config();
|
||||||
|
|
||||||
g_key_file_load_from_file(keyfile, CONFIG_FILE, G_KEY_FILE_NONE, 0);
|
g_key_file_load_from_file(keyfile, CONFIG_FILE, G_KEY_FILE_NONE, 0);
|
||||||
|
|
||||||
const char *c;
|
const char *c;
|
||||||
|
|
||||||
for(i = 0; i < DESMUME_NB_KEYS; i++)
|
/* Load keyboard keys */
|
||||||
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
{
|
{
|
||||||
tmp = g_key_file_get_integer(keyfile, "KEYS", Ini_Keypad_Values[i], &error);
|
tmp = g_key_file_get_integer(keyfile, "KEYS", key_names[i], &error);
|
||||||
if (error != NULL) {
|
if (error != NULL) {
|
||||||
g_error_free(error);
|
g_error_free(error);
|
||||||
error = NULL;
|
error = NULL;
|
||||||
} else {
|
} else {
|
||||||
Keypad_Config[i] = g_key_file_get_integer(keyfile, "KEYS", Ini_Keypad_Values[i], &error);
|
keyboard_cfg[i] = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Load joystick keys */
|
||||||
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
|
{
|
||||||
|
tmp = g_key_file_get_integer(keyfile, "JOYKEYS", key_names[i], &error);
|
||||||
|
if (error != NULL) {
|
||||||
|
g_error_free(error);
|
||||||
|
error = NULL;
|
||||||
|
} else {
|
||||||
|
joypad_cfg[i] = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
g_key_file_free(keyfile);
|
g_key_file_free(keyfile);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const gint Default_Keypad_Config[DESMUME_NB_KEYS] =
|
|
||||||
{
|
|
||||||
97, // a
|
|
||||||
98, // b
|
|
||||||
65288, // backspace
|
|
||||||
65293, // enter
|
|
||||||
65363, // directional arrows
|
|
||||||
65361,
|
|
||||||
65362,
|
|
||||||
65364,
|
|
||||||
65454, // numeric .
|
|
||||||
65456, // numeric 0
|
|
||||||
120, // x
|
|
||||||
121, // y
|
|
||||||
112
|
|
||||||
};
|
|
||||||
|
|
||||||
const u16 Default_Joypad_Config[DESMUME_NB_KEYS] =
|
|
||||||
{ 1, // A
|
|
||||||
0, // B
|
|
||||||
5, // select
|
|
||||||
8, // start
|
|
||||||
20, // Right -- Start cheating abit...
|
|
||||||
21, // Left
|
|
||||||
22, // Up
|
|
||||||
23, // Down -- End of cheating.
|
|
||||||
7, // R
|
|
||||||
6, // L
|
|
||||||
4, // X
|
|
||||||
3, // Y
|
|
||||||
-1 // DEBUG
|
|
||||||
};
|
|
||||||
|
|
||||||
void Load_DefaultConfig()
|
|
||||||
{
|
|
||||||
memcpy(Keypad_Config, Default_Keypad_Config, sizeof(Keypad_Config));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************ GTK *******************************/
|
/************************ GTK *******************************/
|
||||||
|
|
||||||
uint Frameskip = 0;
|
uint Frameskip = 0;
|
||||||
|
@ -407,24 +364,22 @@ static gboolean Stylus_Release(GtkWidget *w, GdkEventButton *e, gpointer data)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u16 Cur_Keypad = 0x00FFF;
|
static u16 Cur_Keypad = 0;
|
||||||
|
|
||||||
static gint Key_Press(GtkWidget *w, GdkEventKey *e)
|
static gint Key_Press(GtkWidget *w, GdkEventKey *e)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
u16 Key = 0;
|
u16 Key = 0;
|
||||||
|
|
||||||
for(i = 0; i < DESMUME_NB_KEYS; i++)
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
if(e->keyval == Keypad_Config[i]) break;
|
if(e->keyval == keyboard_cfg[i]) break;
|
||||||
|
|
||||||
if(i < DESMUME_NB_KEYS)
|
if(i < NB_KEYS)
|
||||||
{
|
{
|
||||||
Key = DESMUME_KEYMASK_(i);
|
ADD_KEY( Cur_Keypad, KEYMASK_(i) );
|
||||||
Cur_Keypad &= ~Key;
|
if(desmume_running()) update_keypad(Cur_Keypad);
|
||||||
if(desmume_running()) update_keypad(~Cur_Keypad);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//fprintf(stderr,"P:%d(%d)->%X => [%X]\n", e->keyval, e->hardware_keycode, Key, Cur_Keypad);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
static gint Key_Release(GtkWidget *w, GdkEventKey *e)
|
static gint Key_Release(GtkWidget *w, GdkEventKey *e)
|
||||||
|
@ -432,39 +387,20 @@ static gint Key_Release(GtkWidget *w, GdkEventKey *e)
|
||||||
int i;
|
int i;
|
||||||
u16 Key = 0;
|
u16 Key = 0;
|
||||||
|
|
||||||
for(i = 0; i < DESMUME_NB_KEYS; i++)
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
if(e->keyval == Keypad_Config[i]) break;
|
if(e->keyval == keyboard_cfg[i]) break;
|
||||||
|
|
||||||
if(i < DESMUME_NB_KEYS)
|
if(i < NB_KEYS)
|
||||||
{
|
{
|
||||||
Key = DESMUME_KEYMASK_(i);
|
RM_KEY( Cur_Keypad, KEYMASK_(i) );
|
||||||
Cur_Keypad |= Key;
|
if(desmume_running()) update_keypad(Cur_Keypad);
|
||||||
if(desmume_running()) update_keypad(~Cur_Keypad);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//fprintf(stderr,"R:%d(%d)->%X => [%X]\n", e->keyval, e->hardware_keycode, Key, Cur_Keypad);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////// CONTROLS EDIT //////////////////////////////////////
|
/////////////////////////////// CONTROLS EDIT //////////////////////////////////////
|
||||||
|
|
||||||
const char *Keys_Name[DESMUME_NB_KEYS] =
|
|
||||||
{
|
|
||||||
"A",
|
|
||||||
"B",
|
|
||||||
"Select",
|
|
||||||
"Start",
|
|
||||||
"Right",
|
|
||||||
"Left",
|
|
||||||
"Up",
|
|
||||||
"Down",
|
|
||||||
"R",
|
|
||||||
"L",
|
|
||||||
"X",
|
|
||||||
"Y",
|
|
||||||
"Debug"
|
|
||||||
};
|
|
||||||
|
|
||||||
GtkWidget *mkLabel;
|
GtkWidget *mkLabel;
|
||||||
gint Modify_Key_Chosen = 0;
|
gint Modify_Key_Chosen = 0;
|
||||||
|
|
||||||
|
@ -476,8 +412,6 @@ void Modify_Key_Press(GtkWidget *w, GdkEventKey *e)
|
||||||
gtk_label_set(GTK_LABEL(mkLabel), YouPressed);
|
gtk_label_set(GTK_LABEL(mkLabel), YouPressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
gint Keypad_Temp[DESMUME_NB_KEYS];
|
|
||||||
|
|
||||||
void Modify_Key(GtkWidget* widget, gpointer data)
|
void Modify_Key(GtkWidget* widget, gpointer data)
|
||||||
{
|
{
|
||||||
gint Key = GPOINTER_TO_INT(data);
|
gint Key = GPOINTER_TO_INT(data);
|
||||||
|
@ -486,7 +420,7 @@ void Modify_Key(GtkWidget* widget, gpointer data)
|
||||||
|
|
||||||
GtkWidget *mkDialog;
|
GtkWidget *mkDialog;
|
||||||
|
|
||||||
sprintf(Title, "Press \"%s\" key ...\n", Keys_Name[Key]);
|
sprintf(Title, "Press \"%s\" key ...\n", key_names[Key]);
|
||||||
mkDialog = gtk_dialog_new_with_buttons(Title,
|
mkDialog = gtk_dialog_new_with_buttons(Title,
|
||||||
GTK_WINDOW(pWindow),
|
GTK_WINDOW(pWindow),
|
||||||
GTK_DIALOG_MODAL,
|
GTK_DIALOG_MODAL,
|
||||||
|
@ -506,7 +440,7 @@ void Modify_Key(GtkWidget* widget, gpointer data)
|
||||||
case GTK_RESPONSE_OK:
|
case GTK_RESPONSE_OK:
|
||||||
|
|
||||||
Keypad_Temp[Key] = Modify_Key_Chosen;
|
Keypad_Temp[Key] = Modify_Key_Chosen;
|
||||||
sprintf(Key_Label, "%s (%d)", Keys_Name[Key], Keypad_Temp[Key]);
|
sprintf(Key_Label, "%s (%d)", key_names[Key], Keypad_Temp[Key]);
|
||||||
gtk_button_set_label(GTK_BUTTON(widget), Key_Label);
|
gtk_button_set_label(GTK_BUTTON(widget), Key_Label);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -527,7 +461,7 @@ void Edit_Controls(GtkWidget* widget, gpointer data)
|
||||||
GtkWidget *ecDialog;
|
GtkWidget *ecDialog;
|
||||||
GtkWidget *ecKey;
|
GtkWidget *ecKey;
|
||||||
|
|
||||||
memcpy(&Keypad_Temp, &Keypad_Config, sizeof(Keypad_Config));
|
memcpy(&Keypad_Temp, &keyboard_cfg, sizeof(keyboard_cfg));
|
||||||
|
|
||||||
ecDialog = gtk_dialog_new_with_buttons("Edit controls",
|
ecDialog = gtk_dialog_new_with_buttons("Edit controls",
|
||||||
GTK_WINDOW(pWindow),
|
GTK_WINDOW(pWindow),
|
||||||
|
@ -537,9 +471,9 @@ void Edit_Controls(GtkWidget* widget, gpointer data)
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
|
||||||
for(i = 0; i < DESMUME_NB_KEYS; i++)
|
for(i = 0; i < NB_KEYS; i++)
|
||||||
{
|
{
|
||||||
sprintf(Key_Label, "%s (%d)", Keys_Name[i], Keypad_Temp[i]);
|
sprintf(Key_Label, "%s (%d)", key_names[i], Keypad_Temp[i]);
|
||||||
ecKey = gtk_button_new_with_label(Key_Label);
|
ecKey = gtk_button_new_with_label(Key_Label);
|
||||||
g_signal_connect(G_OBJECT(ecKey), "clicked", G_CALLBACK(Modify_Key), GINT_TO_POINTER(i));
|
g_signal_connect(G_OBJECT(ecKey), "clicked", G_CALLBACK(Modify_Key), GINT_TO_POINTER(i));
|
||||||
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ecDialog)->vbox), ecKey,TRUE, FALSE, 0);
|
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(ecDialog)->vbox), ecKey,TRUE, FALSE, 0);
|
||||||
|
@ -550,7 +484,7 @@ void Edit_Controls(GtkWidget* widget, gpointer data)
|
||||||
switch (gtk_dialog_run(GTK_DIALOG(ecDialog)))
|
switch (gtk_dialog_run(GTK_DIALOG(ecDialog)))
|
||||||
{
|
{
|
||||||
case GTK_RESPONSE_OK:
|
case GTK_RESPONSE_OK:
|
||||||
memcpy(&Keypad_Config, &Keypad_Temp, sizeof(Keypad_Config));
|
memcpy(&keyboard_cfg, &Keypad_Temp, sizeof(keyboard_cfg));
|
||||||
case GTK_RESPONSE_CANCEL:
|
case GTK_RESPONSE_CANCEL:
|
||||||
case GTK_RESPONSE_NONE:
|
case GTK_RESPONSE_NONE:
|
||||||
break;
|
break;
|
||||||
|
@ -1017,7 +951,7 @@ int main (int argc, char *argv[])
|
||||||
}
|
}
|
||||||
desmume_init();
|
desmume_init();
|
||||||
/* Initialize joysticks */
|
/* Initialize joysticks */
|
||||||
if(!init_joy(Default_Joypad_Config)) return 1;
|
if(!init_joy()) return 1;
|
||||||
|
|
||||||
dTools_running = (BOOL*)malloc(sizeof(BOOL) * dTools_list_size);
|
dTools_running = (BOOL*)malloc(sizeof(BOOL) * dTools_list_size);
|
||||||
for(i=0; i<dTools_list_size; i++) dTools_running[i]=FALSE;
|
for(i=0; i<dTools_list_size; i++) dTools_running[i]=FALSE;
|
||||||
|
|
Loading…
Reference in New Issue