From: Toni Wilen Date: Sun, 2 Jul 2017 07:45:11 +0000 (+0300) Subject: Internal "AKS" event support in custom event strings. X-Git-Tag: 3600~179 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=977811d51aab312725bbb7e8213d61f22a500d8c;p=francis%2Fwinuae.git Internal "AKS" event support in custom event strings. --- diff --git a/aks.def b/aks.def new file mode 100644 index 00000000..8b0f8414 --- /dev/null +++ b/aks.def @@ -0,0 +1,127 @@ + +AKS(ENTERGUI) +AKS(SCREENSHOT_FILE) +AKS(SCREENSHOT_CLIPBOARD) +AKS(FREEZEBUTTON) +AKS(FLOPPY0) +AKS(FLOPPY1) +AKS(FLOPPY2) +AKS(FLOPPY3) +AKS(EFLOPPY0) +AKS(EFLOPPY1) +AKS(EFLOPPY2) +AKS(EFLOPPY3) +AKS(TOGGLEDEFAULTSCREEN) +AKS(TOGGLEWINDOWEDFULLSCREEN) +AKS(TOGGLEFULLWINDOWFULLSCREEN) +AKS(TOGGLEWINDOWFULLWINDOW) +AKS(ENTERDEBUGGER) +AKS(IRQ7) +AKS(PAUSE) +AKS(SINGLESTEP) +AKS(WARP) +AKS(INHIBITSCREEN) +AKS(STATEREWIND) +AKS(STATECURRENT) +AKS(STATECAPTURE) +AKS(VIDEORECORD) +AKS(VOLDOWN) +AKS(VOLUP) +AKS(VOLMUTE) +AKS(MVOLDOWN) +AKS(MVOLUP) +AKS(MVOLMUTE) +AKS(QUIT) +AKS(HARDRESET) +AKS(SOFTRESET) +AKS(STATESAVEQUICK) +AKS(STATERESTOREQUICK) +AKS(STATESAVEQUICK1) +AKS(STATERESTOREQUICK1) +AKS(STATESAVEQUICK2) +AKS(STATERESTOREQUICK2) +AKS(STATESAVEQUICK3) +AKS(STATERESTOREQUICK3) +AKS(STATESAVEQUICK4) +AKS(STATERESTOREQUICK4) +AKS(STATESAVEQUICK5) +AKS(STATERESTOREQUICK5) +AKS(STATESAVEQUICK6) +AKS(STATERESTOREQUICK6) +AKS(STATESAVEQUICK7) +AKS(STATERESTOREQUICK7) +AKS(STATESAVEQUICK8) +AKS(STATERESTOREQUICK8) +AKS(STATESAVEQUICK9) +AKS(STATERESTOREQUICK9) +AKS(STATESAVEDIALOG) +AKS(STATERESTOREDIALOG) +AKS(DECREASEREFRESHRATE) +AKS(INCREASEREFRESHRATE) +AKS(ARCADIADIAGNOSTICS) +AKS(ARCADIAPLY1) +AKS(ARCADIAPLY2) +AKS(ARCADIACOIN1) +AKS(ARCADIACOIN2) +AKS(ALGSERVICE) +AKS(ALGLSTART) +AKS(ALGRSTART) +AKS(ALGLCOIN) +AKS(ALGRCOIN) +AKS(ALGLTRIGGER) +AKS(ALGRTRIGGER) +AKS(ALGLHOLSTER) +AKS(ALGRHOLSTER) +AKS(TOGGLEMOUSEGRAB) +AKS(SWITCHINTERPOL) +AKS(INPUT_CONFIG_1) +AKS(INPUT_CONFIG_2) +AKS(INPUT_CONFIG_3) +AKS(INPUT_CONFIG_4) +AKS(SWAPJOYPORTS) +AKS(PASTE) +AKS(DISKSWAPPER_NEXT) +AKS(DISKSWAPPER_PREV) +AKS(DISKSWAPPER_INSERT0) +AKS(DISKSWAPPER_INSERT1) +AKS(DISKSWAPPER_INSERT2) +AKS(DISKSWAPPER_INSERT3) +AKS(DISK_PREV0) +AKS(DISK_PREV1) +AKS(DISK_PREV2) +AKS(DISK_PREV3) +AKS(DISK_NEXT0) +AKS(DISK_NEXT1) +AKS(DISK_NEXT2) +AKS(DISK_NEXT3) +AKS(RTG_PREV) +AKS(RTG_NEXT) +AKS(RTG_C) +AKS(RTG_0) +AKS(RTG_1) +AKS(RTG_2) +AKS(RTG_3) +AKS(CDTV_FRONT_PANEL_STOP) +AKS(CDTV_FRONT_PANEL_PLAYPAUSE) +AKS(CDTV_FRONT_PANEL_PREV) +AKS(CDTV_FRONT_PANEL_NEXT) +AKS(CDTV_FRONT_PANEL_REW) +AKS(CDTV_FRONT_PANEL_FF) +AKS(VIDEOGRAB_RESTART) +AKS(VIDEOGRAB_PAUSE) +AKS(VIDEOGRAB_PREV) +AKS(VIDEOGRAB_NEXT) +AKS(QUALIFIER1) +AKS(QUALIFIER2) +AKS(QUALIFIER3) +AKS(QUALIFIER4) +AKS(QUALIFIER5) +AKS(QUALIFIER6) +AKS(QUALIFIER7) +AKS(QUALIFIER8) +AKS(QUALIFIER_SPECIAL) +AKS(QUALIFIER_SHIFT) +AKS(QUALIFIER_CONTROL) +AKS(QUALIFIER_ALT) +AKS(QUALIFIER_WIN) + diff --git a/include/inputdevice.h b/include/inputdevice.h index 7b1143f6..1a9a9ba3 100644 --- a/include/inputdevice.h +++ b/include/inputdevice.h @@ -311,7 +311,7 @@ extern void indicator_leds (int num, int state); extern void warpmode (int mode); extern void pausemode (int mode); -extern void inputdevice_add_inputcode (int code, int state); +extern void inputdevice_add_inputcode (int code, int state, const TCHAR *); extern void inputdevice_handle_inputcode (void); extern void inputdevice_tablet (int x, int y, int z, diff --git a/include/keyboard.h b/include/keyboard.h index ff031ce1..0d3ae806 100644 --- a/include/keyboard.h +++ b/include/keyboard.h @@ -135,58 +135,12 @@ #define KBLED_CAPSLOCKM (1 << KBLED_CAPSLOCKB) #define KBLED_SCROLLLOCKM (1 << KBLED_SCROLLLOCKB) -enum aks { AKS_ENTERGUI = 0x200, - AKS_SCREENSHOT_FILE, - AKS_SCREENSHOT_CLIPBOARD, - AKS_FREEZEBUTTON, - AKS_FLOPPY0, AKS_FLOPPY1, AKS_FLOPPY2, AKS_FLOPPY3, - AKS_EFLOPPY0, AKS_EFLOPPY1, AKS_EFLOPPY2, AKS_EFLOPPY3, - AKS_TOGGLEDEFAULTSCREEN, - AKS_TOGGLEWINDOWEDFULLSCREEN, AKS_TOGGLEFULLWINDOWFULLSCREEN, AKS_TOGGLEWINDOWFULLWINDOW, - AKS_ENTERDEBUGGER, AKS_IRQ7, - AKS_PAUSE, AKS_SINGLESTEP, - AKS_WARP, AKS_INHIBITSCREEN, - AKS_STATEREWIND, AKS_STATECURRENT, AKS_STATECAPTURE, - AKS_VIDEORECORD, - AKS_VOLDOWN, AKS_VOLUP, AKS_VOLMUTE, - AKS_MVOLDOWN, AKS_MVOLUP, AKS_MVOLMUTE, - AKS_QUIT, AKS_HARDRESET, AKS_SOFTRESET, - AKS_STATESAVEQUICK, AKS_STATERESTOREQUICK, - AKS_STATESAVEQUICK1, AKS_STATERESTOREQUICK1, - AKS_STATESAVEQUICK2, AKS_STATERESTOREQUICK2, - AKS_STATESAVEQUICK3, AKS_STATERESTOREQUICK3, - AKS_STATESAVEQUICK4, AKS_STATERESTOREQUICK4, - AKS_STATESAVEQUICK5, AKS_STATERESTOREQUICK5, - AKS_STATESAVEQUICK6, AKS_STATERESTOREQUICK6, - AKS_STATESAVEQUICK7, AKS_STATERESTOREQUICK7, - AKS_STATESAVEQUICK8, AKS_STATERESTOREQUICK8, - AKS_STATESAVEQUICK9, AKS_STATERESTOREQUICK9, - AKS_STATESAVEDIALOG, AKS_STATERESTOREDIALOG, - AKS_DECREASEREFRESHRATE, - AKS_INCREASEREFRESHRATE, - - AKS_ARCADIADIAGNOSTICS, AKS_ARCADIAPLY1, AKS_ARCADIAPLY2, AKS_ARCADIACOIN1, AKS_ARCADIACOIN2, - AKS_ALGSERVICE, AKS_ALGLSTART, AKS_ALGRSTART, AKS_ALGLCOIN, AKS_ALGRCOIN, - AKS_ALGLTRIGGER, AKS_ALGRTRIGGER, AKS_ALGLHOLSTER, AKS_ALGRHOLSTER, - - AKS_TOGGLEMOUSEGRAB, AKS_SWITCHINTERPOL, - AKS_INPUT_CONFIG_1,AKS_INPUT_CONFIG_2,AKS_INPUT_CONFIG_3,AKS_INPUT_CONFIG_4, - AKS_SWAPJOYPORTS, - AKS_PASTE, - AKS_DISKSWAPPER_NEXT,AKS_DISKSWAPPER_PREV, - AKS_DISKSWAPPER_INSERT0,AKS_DISKSWAPPER_INSERT1,AKS_DISKSWAPPER_INSERT2,AKS_DISKSWAPPER_INSERT3, - AKS_DISK_PREV0, AKS_DISK_PREV1, AKS_DISK_PREV2, AKS_DISK_PREV3, - AKS_DISK_NEXT0, AKS_DISK_NEXT1, AKS_DISK_NEXT2, AKS_DISK_NEXT3, - AKS_RTG_PREV, AKS_RTG_NEXT, - AKS_RTG_C, AKS_RTG_0, AKS_RTG_1, AKS_RTG_2, AKS_RTG_3, - AKS_CDTV_FRONT_PANEL_STOP, AKS_CDTV_FRONT_PANEL_PLAYPAUSE, AKS_CDTV_FRONT_PANEL_PREV, - AKS_CDTV_FRONT_PANEL_NEXT, AKS_CDTV_FRONT_PANEL_REW, AKS_CDTV_FRONT_PANEL_FF, - AKS_VIDEOGRAB_RESTART, AKS_VIDEOGRAB_PAUSE, AKS_VIDEOGRAB_PREV, AKS_VIDEOGRAB_NEXT, - AKS_QUALIFIER1, AKS_QUALIFIER2, AKS_QUALIFIER3, AKS_QUALIFIER4, - AKS_QUALIFIER5, AKS_QUALIFIER6, AKS_QUALIFIER7, AKS_QUALIFIER8, - AKS_QUALIFIER_SPECIAL, AKS_QUALIFIER_SHIFT, AKS_QUALIFIER_CONTROL, - AKS_QUALIFIER_ALT, AKS_QUALIFIER_WIN +#define AKS(A) AKS_ ## A, +enum aks { + AKS_START = 0x1ff, +#include "../aks.def" }; +#undef AKS #define AKS_FIRST AKS_ENTERGUI diff --git a/inputdevice.cpp b/inputdevice.cpp index 62650154..c09ad0f6 100644 --- a/inputdevice.cpp +++ b/inputdevice.cpp @@ -102,6 +102,16 @@ static const struct inputevent events[] = { }; #undef DEFEVENT #undef DEFEVENT2 +struct aksevent +{ + int aks; + const TCHAR *name; +}; +#define AKS(A) { AKS_ ## A, _T("AKS_") _T(#A) }, +static const struct aksevent akss[] = { +#include "aks.def" + { 0, NULL } +}; static int sublevdir[2][MAX_INPUT_SUB_EVENT]; @@ -194,8 +204,6 @@ static void check_enable(int ei); int inputdevice_uaelib (const TCHAR *s, const TCHAR *parm) { - int i; - //write_log(_T("%s: %s\n"), s, parm); if (!_tcsncmp(s, _T("KEY_RAW_"), 8)) { @@ -209,7 +217,7 @@ int inputdevice_uaelib (const TCHAR *s, const TCHAR *parm) if (value[0] == '0' && _totupper(value[1]) == 'X') value += 2, base = 16; v = _tcstol(value, &endptr, base); - for (i = 1; events[i].name; i++) { + for (int i = 1; events[i].name; i++) { const struct inputevent *ie = &events[i]; if (_tcsncmp(ie->confname, _T("KEY_"), 4)) continue; @@ -221,7 +229,21 @@ int inputdevice_uaelib (const TCHAR *s, const TCHAR *parm) return 0; } - for (i = 1; events[i].name; i++) { + if (!_tcsncmp(s, _T("AKS_"), 4)) { + for (int i = 0; akss[i].name; i++) { + if (!_tcscmp(s, akss[i].name)) { + int v = _tstol(parm); + if (!_tcscmp(parm, _T("0")) || !_tcscmp(parm, _T("1"))) + parm = NULL; + else + v = 1; + inputdevice_add_inputcode(akss[i].aks, v, parm); + return 1; + } + } + } + + for (int i = 1; events[i].name; i++) { if (!_tcscmp (s, events[i].confname)) { check_enable(i); handle_input_event (i, parm ? _tstol (parm) : 0, 1, 0); @@ -3955,7 +3977,13 @@ static void queue_input_event (int evt, const TCHAR *custom, int state, int max, static uae_u8 keybuf[256]; #define MAX_PENDING_EVENTS 20 -static int inputcode_pending[MAX_PENDING_EVENTS], inputcode_pending_state[MAX_PENDING_EVENTS]; +struct inputcode +{ + int code; + int state; + TCHAR *s; +}; +static struct inputcode inputcode_pending[MAX_PENDING_EVENTS]; static bool inputdevice_handle_inputcode_immediate(int code, int state) { @@ -3969,17 +3997,18 @@ static bool inputdevice_handle_inputcode_immediate(int code, int state) } -void inputdevice_add_inputcode (int code, int state) +void inputdevice_add_inputcode (int code, int state, const TCHAR *s) { for (int i = 0; i < MAX_PENDING_EVENTS; i++) { - if (inputcode_pending[i] == code && inputcode_pending_state[i] == state) + if (inputcode_pending[i].code == code && inputcode_pending[i].state == state) return; } for (int i = 0; i < MAX_PENDING_EVENTS; i++) { - if (inputcode_pending[i] == 0) { + if (inputcode_pending[i].code == 0) { if (!inputdevice_handle_inputcode_immediate(code, state)) { - inputcode_pending[i] = code; - inputcode_pending_state[i] = state; + inputcode_pending[i].code = code; + inputcode_pending[i].state = state; + inputcode_pending[i].s = my_strdup(s); } return; } @@ -4019,7 +4048,7 @@ void inputdevice_do_keyboard (int code, int state) } return; } - inputdevice_add_inputcode (code, state); + inputdevice_add_inputcode (code, state, NULL); } // these need cpu trace data @@ -4047,12 +4076,15 @@ static bool needcputrace (int code) void target_paste_to_keyboard(void); -static bool inputdevice_handle_inputcode2 (int code, int state) +static bool inputdevice_handle_inputcode2 (int code, int state, const TCHAR *s) { static int swapperslot; static int tracer_enable; int newstate; + if (s != NULL && s[0] == 0) + s = NULL; + if (code == 0) goto end; if (needcputrace (code) && can_cpu_tracer () == true && is_cpu_tracer () == false && !input_play && !input_record && !debugging) { @@ -4180,20 +4212,44 @@ static bool inputdevice_handle_inputcode2 (int code, int state) break; #endif case AKS_FLOPPY0: - gui_display (0); - setsystime (); + if (s) { + _tcsncpy(changed_prefs.floppyslots[0].df, s, MAX_PATH); + changed_prefs.floppyslots[0].df[MAX_PATH - 1] = 0; + set_config_changed(); + } else { + gui_display (0); + setsystime (); + } break; case AKS_FLOPPY1: - gui_display (1); - setsystime (); + if (s) { + _tcsncpy(changed_prefs.floppyslots[1].df, s, MAX_PATH); + changed_prefs.floppyslots[1].df[MAX_PATH - 1] = 0; + set_config_changed(); + } else { + gui_display (1); + setsystime (); + } break; case AKS_FLOPPY2: - gui_display (2); - setsystime (); + if (s) { + _tcsncpy(changed_prefs.floppyslots[2].df, s, MAX_PATH); + changed_prefs.floppyslots[2].df[MAX_PATH - 1] = 0; + set_config_changed(); + } else { + gui_display (2); + setsystime (); + } break; case AKS_FLOPPY3: - gui_display (3); - setsystime (); + if (s) { + _tcsncpy(changed_prefs.floppyslots[3].df, s, MAX_PATH); + changed_prefs.floppyslots[3].df[MAX_PATH - 1] = 0; + set_config_changed(); + } else { + gui_display (3); + setsystime (); + } break; case AKS_EFLOPPY0: disk_eject (0); @@ -4318,10 +4374,20 @@ static bool inputdevice_handle_inputcode2 (int code, int state) activate_debugger (); break; case AKS_STATESAVEDIALOG: - gui_display (5); + if (s) { + savestate_initsave (s, 1, true, true); + save_state (savestate_fname, _T("Description!")); + } else { + gui_display (5); + } break; case AKS_STATERESTOREDIALOG: - gui_display (4); + if (s) { + savestate_initsave (s, 1, true, false); + savestate_state = STATE_DORESTORE; + } else { + gui_display (4); + } break; case AKS_DECREASEREFRESHRATE: case AKS_INCREASEREFRESHRATE: @@ -4441,16 +4507,19 @@ void inputdevice_handle_inputcode (void) { bool got = false; for (int i = 0; i < MAX_PENDING_EVENTS; i++) { - int code = inputcode_pending[i]; - int state = inputcode_pending_state[i]; + int code = inputcode_pending[i].code; + int state = inputcode_pending[i].state; + const TCHAR *s = inputcode_pending[i].s; if (code) { - if (!inputdevice_handle_inputcode2 (code, state)) - inputcode_pending[i] = 0; + if (!inputdevice_handle_inputcode2 (code, state, s)) { + xfree(inputcode_pending[i].s); + inputcode_pending[i].code = 0; + } got = true; } } if (!got) - inputdevice_handle_inputcode2 (0, 0); + inputdevice_handle_inputcode2 (0, 0, NULL); } diff --git a/od-win32/dinput.cpp b/od-win32/dinput.cpp index 64f19cb6..d557ea2c 100644 --- a/od-win32/dinput.cpp +++ b/od-win32/dinput.cpp @@ -2494,7 +2494,7 @@ static void handle_rawinput_2 (RAWINPUT *raw) } if (num == num_keyboard) { if (!istest && scancode == DIK_F12 && pressed && isfocus ()) - inputdevice_add_inputcode (AKS_ENTERGUI, 1); + inputdevice_add_inputcode (AKS_ENTERGUI, 1, NULL); return; } } diff --git a/od-win32/keyboard_win32.cpp b/od-win32/keyboard_win32.cpp index 136595eb..8d469cba 100644 --- a/od-win32/keyboard_win32.cpp +++ b/od-win32/keyboard_win32.cpp @@ -449,13 +449,13 @@ bool my_kbd_handler (int keyboard, int scancode, int newstate, bool alwaysreleas if (scancode_new == defaultguikey && currprefs.win32_guikey != scancode_new) { scancode = 0; if (specialpressed () && ctrlpressed() && shiftpressed() && altpressed ()) - inputdevice_add_inputcode (AKS_ENTERGUI, 1); + inputdevice_add_inputcode (AKS_ENTERGUI, 1, NULL); } else if (scancode_new == currprefs.win32_guikey ) { - inputdevice_add_inputcode (AKS_ENTERGUI, 1); + inputdevice_add_inputcode (AKS_ENTERGUI, 1, NULL); scancode = 0; } } else if (!specialpressed () && !ctrlpressed() && !shiftpressed() && !altpressed () && scancode_new == defaultguikey) { - inputdevice_add_inputcode (AKS_ENTERGUI, 1); + inputdevice_add_inputcode (AKS_ENTERGUI, 1, NULL); scancode = 0; } } @@ -613,7 +613,7 @@ bool my_kbd_handler (int keyboard, int scancode, int newstate, bool alwaysreleas } if (code) { - inputdevice_add_inputcode (code, 1); + inputdevice_add_inputcode (code, 1, NULL); return true; }