void inputdevice_draco_key(int kc);
-extern int key_swap_hack, key_swap_hack2;
+extern int key_swap_hack, key_swap_hack2, key_swap_end_pgup;
#endif /* UAE_INPUTDEVICE_H */
int no_windowsmouse = 0;
int winekeyboard = 0;
int key_swap_hack = 0;
+int key_swap_end_pgup = 0;
#define _WIN32_WINNT 0x501 /* enable RAWINPUT support */
static uae_u8 rawkeystate[256];
static int rawprevkey;
-static int key_lshift, key_lwin;
+static int key_lshift, key_lwin, key_pgup;
static void sendscancode(int num, int scancode, int pressed)
{
}
}
+static int key_swap_end(int num, int scancode, int pressed, bool *repress)
+{
+ if (key_pgup) {
+ int sc = scancode;
+ switch (scancode) {
+ case DIK_PRIOR:
+ scancode = DIK_END;
+ key_pgup = pressed;
+ return scancode;
+ case DIK_NEXT: // PGUP -> PGDN (Freeze button)
+ scancode = DIK_PRIOR;
+ break;
+ // numpad emulation
+ case DIK_7:
+ scancode = DIK_F14;
+ break;
+ case DIK_8:
+ scancode = DIK_F15;
+ break;
+ case DIK_9:
+ scancode = DIK_DIVIDE;
+ break;
+ case DIK_0:
+ scancode = DIK_MULTIPLY;
+ break;
+ case DIK_U:
+ scancode = DIK_NUMPAD7;
+ break;
+ case DIK_I:
+ scancode = DIK_NUMPAD8;
+ break;
+ case DIK_O:
+ scancode = DIK_NUMPAD9;
+ break;
+ case DIK_P:
+ scancode = DIK_SUBTRACT;
+ break;
+ case DIK_J:
+ scancode = DIK_NUMPAD1;
+ break;
+ case DIK_K:
+ scancode = DIK_NUMPAD2;
+ break;
+ case DIK_L:
+ scancode = DIK_NUMPAD3;
+ break;
+ case DIK_SEMICOLON:
+ scancode = DIK_NUMPADENTER;
+ break;
+ case DIK_M:
+ scancode = DIK_NUMPAD0;
+ break;
+ case DIK_COMMA:
+ scancode = DIK_DECIMAL;
+ break;
+ case DIK_PERIOD:
+ scancode = DIK_NUMPADENTER;
+ break;
+ }
+ if (sc != scancode) {
+ sendscancode(num, DIK_END, 0);
+ *repress = true;
+ }
+ } else {
+ if (scancode == DIK_END) {
+ scancode = DIK_PRIOR;
+ } else if (scancode == DIK_PRIOR) {
+ scancode = DIK_END;
+ key_pgup = pressed;
+ }
+ }
+ return scancode;
+}
+
static void handle_rawinput_2 (RAWINPUT *raw, LPARAM lParam)
{
int i, num;
if (!pressed)
return;
#endif
+ bool key_endswap_repress = false;
+ if (key_swap_end_pgup) {
+ scancode = key_swap_end(num, scancode, pressed, &key_endswap_repress);
+ }
// quick hack to support copilot+ key as right amiga key
bool key_lx_repress = false;
if (scancode == DIK_LWIN) {
sendscancode(num, DIK_LSHIFT, 1);
}
}
+ if (key_endswap_repress) {
+ sendscancode(num, DIK_END, 1);
+ }
}
}
}
memset (rawkeystate, 0, sizeof rawkeystate);
rawprevkey = -1;
key_lwin = key_lshift = 0;
+ key_pgup = 0;
}
static void flushmsgpump (void)
{ DIK_UP, INPUTEVENT_KEY_CURSOR_UP },
{ DIK_DOWN, INPUTEVENT_KEY_CURSOR_DOWN },
- { DIK_LEFT, INPUTEVENT_KEY_CURSOR_LEFT },
- { DIK_RIGHT, INPUTEVENT_KEY_CURSOR_RIGHT },
+ { DIK_LEFT, INPUTEVENT_KEY_CURSOR_LEFT, 0, INPUTEVENT_SPC_PAUSE, ID_FLAG_QUALIFIER_SPECIAL },
+ { DIK_RIGHT, INPUTEVENT_KEY_CURSOR_RIGHT, 0, INPUTEVENT_SPC_WARP, ID_FLAG_QUALIFIER_SPECIAL },
{ DIK_INSERT, INPUTEVENT_KEY_AMIGA_LEFT, 0, INPUTEVENT_SPC_PASTE, ID_FLAG_QUALIFIER_SPECIAL },
{ DIK_DELETE, INPUTEVENT_KEY_DEL },
#define IDC_KEYBOARD_SWAPHACK 1865
#define IDC_SCSIROM24BITDMA 1866
#define IDC_CUSTOMDATAPATH 1866
+#define IDC_KEYBOARD_ENDHACK 1866
#define IDC_SER_RTSCTSDTRDTECD 1867
#define IDC_SER_RI 1868
#define ID__FLOPPYDRIVES 40004
COMBOBOX IDC_INPUTCOPYFROM,324,285,70,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Swap 1<>2",IDC_INPUTSWAP,324,302,70,14
CONTROL "Swap Backslash/F11",IDC_KEYBOARD_SWAPHACK,"Button",BS_AUTO3STATE | WS_TABSTOP,209,302,87,10
+ CONTROL "Page Up = End",IDC_KEYBOARD_ENDHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,111,302,87,10
END
IDD_FILTER DIALOGEX 0, 0, 396, 316
quickstart = 1;
regqueryint(NULL, _T("KeySwapBackslashF11"), &key_swap_hack);
+ regqueryint(NULL, _T("KeyEndPageUp"), &key_swap_end_pgup);
tmp[0] = 0;
size = sizeof(tmp) / sizeof(TCHAR);
regdelete(NULL, _T("ArtImageCount"));
regdelete(NULL, _T("ArtImageWidth"));
regdelete(NULL, _T("KeySwapBackslashF11"));
+ regdelete(NULL, _T("KeyEndPageUp"));
}
#include "zip.h"
SetDlgItemInt (hDlg, IDC_INPUTAUTOFIRERATE, workprefs.input_autofire_linecnt, FALSE);
SetDlgItemInt (hDlg, IDC_INPUTSPEEDD, workprefs.input_joymouse_speed, FALSE);
SetDlgItemInt (hDlg, IDC_INPUTSPEEDA, workprefs.input_joymouse_multiplier, FALSE);
- CheckDlgButton (hDlg, IDC_INPUTDEVICEDISABLE, (!input_total_devices || inputdevice_get_device_status (input_selected_device)) ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hDlg, IDC_INPUTDEVICEDISABLE, (!input_total_devices || inputdevice_get_device_status(input_selected_device)) ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hDlg, IDC_KEYBOARD_ENDHACK, key_swap_end_pgup ? BST_CHECKED : BST_UNCHECKED);
if (key_swap_hack == 2) {
CheckDlgButton(hDlg, IDC_KEYBOARD_SWAPHACK, BST_INDETERMINATE);
} else {
case IDC_INPUTDEVICEDISABLE:
inputdevice_set_device_status (input_selected_device, ischecked (hDlg, IDC_INPUTDEVICEDISABLE));
break;
+ case IDC_KEYBOARD_ENDHACK:
+ {
+ key_swap_end_pgup = IsDlgButtonChecked(hDlg, IDC_KEYBOARD_ENDHACK);
+ regsetint(NULL, _T("KeyEndPageUp"), key_swap_end_pgup);
+ values_to_inputdlg(hDlg);
+ }
+ break;
case IDC_KEYBOARD_SWAPHACK:
{
int v = IsDlgButtonChecked(hDlg, IDC_KEYBOARD_SWAPHACK);