All cli UI controls centralized in src/ctrlssdl.{h,c} just like the gtk and gtk-glade UIs.

This commit is contained in:
evilynux 2007-01-10 06:37:55 +00:00
parent cd0f5ea781
commit 016cd09ed5
2 changed files with 28 additions and 137 deletions

View File

@ -1,4 +1,4 @@
bin_PROGRAMS = desmume-cli
desmume_cli_SOURCES = main.c ../sndsdl.c
desmume_cli_SOURCES = main.c ../sndsdl.c ../ctrlssdl.h ../ctrlssdl.c
desmume_cli_LDADD = ../libdesmume.a $(SDL_LIBS)
desmume_cli_CFLAGS = $(SDL_CFLAGS)

View File

@ -12,6 +12,7 @@
#include "../cflash.h"
#include "../debug.h"
#include "../sndsdl.h"
#include "../ctrlssdl.h"
#define DESMUME_NB_KEYS 13
#define DESMUME_KEYMASK_(k) (1 << k)
@ -27,7 +28,7 @@ SoundInterface_struct *SNDCoreList[] = {
NULL
};
const u16 Joypad_Config[DESMUME_NB_KEYS] =
const u16 Default_Joypad_Config[DESMUME_NB_KEYS] =
{ 1, // A
0, // B
5, // select
@ -56,24 +57,9 @@ int Draw() {
return 1;
}
u16 inline lookup_joykey (u16 keyval) {
int i;
u16 Key = 0;
for(i = 0; i < DESMUME_NB_KEYS; i++)
if(keyval == Joypad_Config[i]) break;
if(i < DESMUME_NB_KEYS)
Key = DESMUME_KEYMASK_(i);
printf("Lookup key %d from joypad...%x\n", keyval, Key);
return Key;
}
int main(int argc, char ** argv) {
BOOL click;
static unsigned short keypad;
SDL_Event event;
int end = 0;
int nbJoysticks;
int i;
static unsigned short keypad = 0;
u32 last_cycle;
#ifdef DEBUG
LogStart();
@ -96,10 +82,10 @@ int main(int argc, char ** argv) {
cflash_close();
cflash_init();
*/
execute = TRUE;
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) == -1)
if(SDL_Init(SDL_INIT_VIDEO) == -1)
{
fprintf(stderr, "Error trying to initialize SDL: %s\n",
SDL_GetError());
@ -107,130 +93,35 @@ int main(int argc, char ** argv) {
}
SDL_WM_SetCaption("Desmume SDL", NULL);
/* Initialize joysticks */
if(!init_joy(Default_Joypad_Config)) return 1;
surface = SDL_SetVideoMode(256, 384, 32, SDL_SWSURFACE);
/* Initialize joysticks */
nbJoysticks = SDL_NumJoysticks();
printf("Nbr of joysticks: %d\n\n", nbJoysticks);
for (i = 0; i < nbJoysticks; i++)
{
SDL_Joystick * joy = SDL_JoystickOpen(i);
printf("Joystick %s\n", i, SDL_JoystickName(i));
printf("Axes: %d\n", SDL_JoystickNumAxes(joy));
printf("Buttons: %d\n", SDL_JoystickNumButtons(joy));
printf("Trackballs: %d\n", SDL_JoystickNumBalls(joy));
printf("Hats: %d\n\n", SDL_JoystickNumHats(joy));
}
keypad=0x0000;
while(!end) {
if (SDL_PollEvent(&event)) {
switch(event.type) {
case SDL_QUIT:
end = 1;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_UP: keypad |= 0x40; break;
case SDLK_DOWN: keypad |= 0x80; break;
case SDLK_RIGHT: keypad |= 0x10; break;
case SDLK_LEFT: keypad |= 0x20; break;
case SDLK_SPACE: keypad |= 0x1; break;
case 'b': keypad |= 0x2; break;
case SDLK_BACKSPACE: keypad |= 0x4; break;
case SDLK_RETURN: keypad |= 0x8; break;
case '0': keypad |= 0x200; break;
case '.': keypad |= 0x100; break;
}
break;
case SDL_KEYUP:
switch (event.key.keysym.sym)
{
case SDLK_UP: keypad &= ~0x40; break;
case SDLK_DOWN: keypad &= ~0x80; break;
case SDLK_RIGHT: keypad &= ~0x10; break;
case SDLK_LEFT: keypad &= ~0x20; break;
case SDLK_SPACE: keypad &= ~0x1; break;
case 'b': keypad &= ~0x2; break;
case SDLK_BACKSPACE: keypad &= ~0x4; break;
case SDLK_RETURN: keypad &= ~0x8; break;
case '0': keypad &= ~0x200; break;
case '.': keypad &= ~0x100; break;
}
break;
case SDL_MOUSEBUTTONDOWN: // Un bouton fut appuyé
if(event.button.button==1) click=TRUE;
case SDL_MOUSEMOTION: // La souris a été déplacée sur l?écran
if(!click) break;
if(event.button.y>=192)
{
signed long x = event.button.x;
signed long y = event.button.y - 192;
if(x<0) x = 0; else if(x>255) x = 255;
if(y<0) y = 0; else if(y>192) y = 192;
NDS_setTouchPos(x, y);
}
break;
case SDL_MOUSEBUTTONUP: // Le bouton de la souris a été relaché
if(click)NDS_releasTouch();
click=FALSE;
break;
/* Joystick axis motion */
case SDL_JOYAXISMOTION:
/* Horizontal */
if (event.jaxis.axis == 0)
if( event.jaxis.value == 0 )
keypad &= ~(lookup_joykey( 20 ) | lookup_joykey( 21 ));
else
{
if( event.jaxis.value > 0 ) keypad |= lookup_joykey( 20 );
else keypad |= lookup_joykey( 21 );
}
/* Vertical */
else if (event.jaxis.axis == 1)
if( event.jaxis.value == 0 )
keypad &= ~(lookup_joykey( 22 ) | lookup_joykey( 23 ));
else
{
if( event.jaxis.value > 0 ) keypad |= lookup_joykey( 23 );
else keypad |= lookup_joykey( 22 );
}
break;
/* Joystick button pressed */
case SDL_JOYBUTTONDOWN:
keypad |= lookup_joykey(event.jbutton.button);
break;
/* Joystick button released */
case SDL_JOYBUTTONUP:
keypad &= ~lookup_joykey(event.jbutton.button);
break;
default:
break;
while(!sdl_quit) {
/* Look for queued events and update keypad status */
keypad = process_ctrls_events(keypad);
/* Update mouse position and click */
if(mouse_down) NDS_setTouchPos(mouse_pos.x, mouse_pos.y);
if(mouse_click)
{
NDS_releasTouch();
mouse_click = FALSE;
}
}
/* Update keypad */
((unsigned short *)ARM9Mem.ARM9_REG)[0x130>>1] = ~keypad;
((unsigned short *)MMU.ARM7_REG)[0x130>>1] = ~keypad;
NDS_exec(1120380, FALSE);
/* Update keypad */
((unsigned short *)ARM9Mem.ARM9_REG)[0x130>>1] = ~(keypad & 0x3FF);
((unsigned short *)MMU.ARM7_REG)[0x130>>1] = ~((keypad >> 10) & 0x3);
/* NDS_exec(1120380, FALSE); */
last_cycle = NDS_exec((560190 << 1) - last_cycle, FALSE);
SPU_Emulate();
Draw();
}
/* Unload joystick */
uninit_joy();
SDL_Quit();
NDS_DeInit();
#ifdef DEBUG