]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Internal "AKS" event support in custom event strings.
authorToni Wilen <twilen@winuae.net>
Sun, 2 Jul 2017 07:45:11 +0000 (10:45 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 2 Jul 2017 07:45:11 +0000 (10:45 +0300)
aks.def [new file with mode: 0644]
include/inputdevice.h
include/keyboard.h
inputdevice.cpp
od-win32/dinput.cpp
od-win32/keyboard_win32.cpp

diff --git a/aks.def b/aks.def
new file mode 100644 (file)
index 0000000..8b0f841
--- /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)
+
index 7b1143f63745b114644f0f403f0dbc394cee66eb..1a9a9ba3abbf1fa1fcafa0debf746810a1533085 100644 (file)
@@ -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,
index ff031ce15c55faaa39888f05e16a9e1563eb5be1..0d3ae80649fb26b7fd77d11646b9ae4dcbd6e80f 100644 (file)
 #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
 
index 62650154d4d7b8cabbfc23284208dccc0e0fe15b..c09ad0f64696375fea293511214e951b42d62dcb 100644 (file)
@@ -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);
 }
 
 
index 64f19cb6ed7f011e8c8470bd633eda8cf64aac5b..d557ea2c2e7ad1f920672068bb3e68a466476015 100644 (file)
@@ -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;
                        }
                }
index 136595ebfd50fda055827232ab547f3f39e9615e..8d469cbae81dec99db0fece2d108b1f0a95e4beb 100644 (file)
@@ -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;
        }