void update_input(void) { int i; // RETRO B Y SLT STA UP DWN LEFT RGT A X L R L2 R2 L3 R3 // INDEX 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 static int vbt[16]={0x1C,0x39,0x01,0x3B,0x01,0x02,0x04,0x08,0x80,0x6D,0x15,0x31,0x24,0x1F,0x6E,0x6F}; static int oldi=-1; static int vkx=0,vky=0; MXjoy0=0; if(oldi!=-1) { IKBD_PressSTKey(oldi,0); oldi=-1; } input_poll_cb(); Process_key(); if (Key_Sate[RETROK_F11] || input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y) ) pauseg=1; i=10;//show vkey toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; SHOWKEY=-SHOWKEY; Screen_SetFullUpdate(); } i=2;//mouse/joy toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; MOUSEMODE=-MOUSEMODE; } i=3;//num joy toggle if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; NUMJOY++;if(NUMJOY>1)NUMJOY=0; NUMjoy=-NUMjoy; } i=11;//mouse gui speed if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; PAS++;if(PAS>MAXPAS)PAS=1; } i=9;//switch shift On/Off if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; SHIFTON=-SHIFTON; Screen_SetFullUpdate(); } i=12;//show/hide statut if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; STATUTON=-STATUTON; Screen_SetFullUpdate(); } i=13;//swap kbd pages if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && mbt[i]==0 ) mbt[i]=1; else if ( mbt[i]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) ) { mbt[i]=0; if(SHOWKEY==1) { NPAGE=-NPAGE; Screen_SetFullUpdate(); } } if(SHOWKEY==1) { static int vkflag[5]={0,0,0,0,0}; if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP) && vkflag[0]==0 ) vkflag[0]=1; else if (vkflag[0]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP) ) { vkflag[0]=0; vky -= 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN) && vkflag[1]==0 ) vkflag[1]=1; else if (vkflag[1]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN) ) { vkflag[1]=0; vky += 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT) && vkflag[2]==0 ) vkflag[2]=1; else if (vkflag[2]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT) ) { vkflag[2]=0; vkx -= 1; } if ( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT) && vkflag[3]==0 ) vkflag[3]=1; else if (vkflag[3]==1 && ! input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT) ) { vkflag[3]=0; vkx += 1; } if(vkx<0)vkx=9; if(vkx>9)vkx=0; if(vky<0)vky=4; if(vky>4)vky=0; virtual_kdb(bmp,vkx,vky); i=8; if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && vkflag[4]==0) vkflag[4]=1; else if( !input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) && vkflag[4]==1) { vkflag[4]=0; i=check_vkey2(vkx,vky); if(i==-2) { NPAGE=-NPAGE;oldi=-1; //Clear interface zone Screen_SetFullUpdate(); } else if(i==-1) oldi=-1; else if(i==-3) { //KDB bgcolor Screen_SetFullUpdate(); KCOL=-KCOL; oldi=-1; } else if(i==-4) { //VKbd show/hide oldi=-1; Screen_SetFullUpdate(); SHOWKEY=-SHOWKEY; } else if(i==-5) { //Change Joy number NUMjoy=-NUMjoy; oldi=-1; } else { if(i==0x2a) { IKBD_PressSTKey(i,(SHIFTON == 1)?0:1); SHIFTON=-SHIFTON; Screen_SetFullUpdate(); oldi=-1; } else { oldi=i; IKBD_PressSTKey(i,1); } } } if(STATUTON==1) Print_Statut(); return; } static int mbL=0,mbR=0; int mouse_l; int mouse_r; int16_t mouse_x; int16_t mouse_y; if(MOUSEMODE==-1) { //Joy mode //emulate Joy0 with joy analog left al[0] =(input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X));///2; al[1] =(input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_Y));///2; /* Directions */ if (al[1] <= JOYRANGE_UP_VALUE) MXjoy0 |= ATARIJOY_BITMASK_UP; else if (al[1] >= JOYRANGE_DOWN_VALUE) MXjoy0 |= ATARIJOY_BITMASK_DOWN; if (al[0] <= JOYRANGE_LEFT_VALUE) MXjoy0 |= ATARIJOY_BITMASK_LEFT; else if (al[0] >= JOYRANGE_RIGHT_VALUE) MXjoy0 |= ATARIJOY_BITMASK_RIGHT; for(i=4;i<9;i++)if( input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i) )MXjoy0 |= vbt[i]; // Joy press mouse_x = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X); mouse_y = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_Y); mouse_l = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT); mouse_r = input_state_cb(0, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT); fmousex=mouse_x; fmousey=mouse_y; } else { //Mouse mode fmousex=fmousey=0; //emulate mouse with joy analog right ar[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X)); ar[1] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y)); if(ar[0]<=-1024) fmousex -=(-ar[0])/1024; if(ar[0]>= 1024) fmousex +=( ar[0])/1024; if(ar[1]<=-1024) fmousey -=(-ar[1])/1024; if(ar[1]>= 1024) fmousey +=( ar[1])/1024; //emulate mouse with dpad if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_RIGHT)) fmousex += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_LEFT)) fmousex -= PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_DOWN)) fmousey += PAS; if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_UP)) fmousey -= PAS; mouse_l=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A); mouse_r=input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B); } if(mbL==0 && mouse_l) { mbL=1; Keyboard.bLButtonDown |= BUTTON_MOUSE; } else if(mbL==1 && !mouse_l) { Keyboard.bLButtonDown &= ~BUTTON_MOUSE; mbL=0; } if(mbR==0 && mouse_r) { mbR=1; Keyboard.bRButtonDown |= BUTTON_MOUSE; } else if(mbR==1 && !mouse_r) { Keyboard.bRButtonDown &= ~BUTTON_MOUSE; mbR=0; } Main_HandleMouseMotion(); if(STATUTON==1) Print_Statut(); }
/** * SDL message handler. * Here we process the SDL events (keyboard, mouse, ...) and map it to * Atari IKBD events. */ void Main_EventHandler(void) { bool bContinueProcessing; SDL_Event event; int events; int remotepause; do { bContinueProcessing = false; /* check remote process control */ remotepause = Control_CheckUpdates(); if ( bEmulationActive || remotepause ) { events = SDL_PollEvent(&event); } else { ShortCut_ActKey(); /* last (shortcut) event activated emulation? */ if ( bEmulationActive ) break; events = SDL_WaitEvent(&event); } if (!events) { /* no events -> if emulation is active or * user is quitting -> return from function. */ continue; } switch (event.type) { case SDL_QUIT: Main_RequestQuit(); break; case SDL_MOUSEMOTION: /* Read/Update internal mouse position */ Main_HandleMouseMotion(&event); bContinueProcessing = false; break; case SDL_MOUSEBUTTONDOWN: if (event.button.button == SDL_BUTTON_LEFT) { if (ConfigureParams.Mouse.bEnableAutoGrab && !bGrabMouse) { bGrabMouse = true; /* Toggle flag */ /* If we are in windowed mode, toggle the mouse cursor mode now: */ if (!bInFullScreen) { SDL_SetRelativeMouseMode(SDL_TRUE); SDL_SetWindowGrab(sdlWindow, SDL_TRUE); Main_SetTitle(MOUSE_LOCK_MSG); } } Keymap_MouseDown(true); } else if (event.button.button == SDL_BUTTON_RIGHT) { Keymap_MouseDown(false); // Keyboard.bRButtonDown |= BUTTON_MOUSE; } else if (event.button.button == SDL_BUTTON_MIDDLE) { /* Start double-click sequence in emulation time */ // Keyboard.LButtonDblClk = 1; } break; case SDL_MOUSEBUTTONUP: if (event.button.button == SDL_BUTTON_LEFT) { Keymap_MouseUp(true); // Keyboard.bLButtonDown &= ~BUTTON_MOUSE; } else if (event.button.button == SDL_BUTTON_RIGHT) { Keymap_MouseUp(false); // Keyboard.bRButtonDown &= ~BUTTON_MOUSE; } break; case SDL_KEYDOWN: if (ConfigureParams.Keyboard.bDisableKeyRepeat && event.key.repeat) break; Keymap_KeyDown(&event.key.keysym); break; case SDL_KEYUP: Keymap_KeyUp(&event.key.keysym); break; default: /* don't let unknown events delay event processing */ bContinueProcessing = true; break; } } while (bContinueProcessing || !(bEmulationActive || bQuitProgram)); }