OSDN Git Service

Make minor modifications in ipc.h and related files.
[xkeymacs/xkeymacs.git] / xkeymacsdll / xkeymacsdll.cpp
index 0e49144..006a49f 100644 (file)
@@ -1,11 +1,10 @@
 // xkeymacsdll.cpp : Defines the initialization routines for the DLL.\r
 //\r
 \r
-#include "stdafx.h"\r
-#include "resource.h"\r
+#include "xkeymacsdll.h"\r
 #include "Utils.h"\r
 #include "Commands.h"\r
-#include <afxdllx.h>\r
+#include "../xkeymacs/resource.h"\r
 #include <math.h>\r
 #include <Imm.h>\r
 #include <vector>\r
@@ -203,23 +202,23 @@ DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 // CXkeymacsDll Class\r
 //////////////////////////////////////////////////////////////////////\r
 \r
-#include "xkeymacsDll.h"\r
 #pragma data_seg(".xkmcs")\r
-       bool    CXkeymacsDll::m_bEnableKeyboardHook = false;\r
-       DWORD   CXkeymacsDll::m_nHookAltRelease = 0;\r
-       BOOL    CXkeymacsDll::m_bRightControl   = FALSE;\r
-       BOOL    CXkeymacsDll::m_bRightAlt               = FALSE;\r
-       BOOL    CXkeymacsDll::m_bRightShift             = FALSE;\r
-       BOOL    CXkeymacsDll::m_bHook                   = TRUE;\r
-       BYTE    CXkeymacsDll::m_nOriginal[MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
-       int             CXkeymacsDll::m_nAccelerate = 0;\r
-       int             CXkeymacsDll::m_nKeyboardSpeed = 31;\r
-       HCURSOR CXkeymacsDll::m_hCursor[MAX_STATUS] = {'\0'};\r
-       HCURSOR CXkeymacsDll::m_hCurrentCursor = NULL;\r
-       BOOL    CXkeymacsDll::m_bCursor = FALSE;\r
-       TCHAR   CXkeymacsDll::m_M_xTip[128] = "";\r
-       CONFIG  CXkeymacsDll::m_Config = {0};\r
+Config CXkeymacsDll::m_Config = {0};\r
+bool CXkeymacsDll::m_bEnableKeyboardHook = false;\r
+BOOL CXkeymacsDll::m_bHook = TRUE;\r
+DWORD CXkeymacsDll::m_nHookAltRelease = 0;\r
+BOOL CXkeymacsDll::m_bRightShift = FALSE;\r
+BOOL CXkeymacsDll::m_bRightControl = FALSE;\r
+BOOL CXkeymacsDll::m_bRightAlt = FALSE;\r
+TCHAR CXkeymacsDll::m_M_xTip[128] = "";\r
+BYTE CXkeymacsDll::m_nOriginal[MAX_COMMAND_TYPE][MAX_KEY] = {'\0'};\r
+int CXkeymacsDll::m_nAccelerate = 0;\r
+int CXkeymacsDll::m_nKeyboardSpeed = 31;\r
+HCURSOR CXkeymacsDll::m_hCurrentCursor = NULL;\r
+BOOL CXkeymacsDll::m_bCursor = FALSE;\r
+HCURSOR CXkeymacsDll::m_hCursor[MAX_STATUS] = {'\0'};\r
 #pragma data_seg()\r
+\r
 HHOOK CXkeymacsDll::m_hHookCallWnd = NULL;\r
 HHOOK CXkeymacsDll::m_hHookCallWndRet = NULL;\r
 HHOOK CXkeymacsDll::m_hHookGetMessage = NULL;\r
@@ -227,9 +226,7 @@ HHOOK CXkeymacsDll::m_hHookShell = NULL;
 int CXkeymacsDll::m_nAppID = 0;\r
 CList<CClipboardSnap *, CClipboardSnap *> CXkeymacsDll::m_oKillRing;\r
 int CXkeymacsDll::m_nKillRing = 0;\r
-BOOL CXkeymacsDll::m_bRecordingMacro = FALSE;\r
-BOOL CXkeymacsDll::m_bDown[MAX_KEY] = {0};\r
-std::list<KbdMacro> CXkeymacsDll::m_Macro;\r
+KbdMacro* CXkeymacsDll::m_kbdMacro = NULL;\r
 \r
 BOOL CXkeymacsDll::SaveConfig()\r
 {\r
@@ -263,7 +260,7 @@ BOOL CXkeymacsDll::LoadConfig()
        return res;\r
 }\r
 \r
-void CXkeymacsDll::SetConfig(const CONFIG& config)\r
+void CXkeymacsDll::SetConfig(const Config& config)\r
 {\r
        m_Config = config;\r
 }\r
@@ -327,9 +324,14 @@ void CXkeymacsDll::ToggleKeyboardHookState()
        ShowKeyboardHookState();\r
 }\r
 \r
+BOOL CXkeymacsDll::IsKeyboardHook()\r
+{\r
+       return m_bHook;\r
+}\r
+\r
 void CXkeymacsDll::ShowKeyboardHookState()\r
 {\r
-       ICONMSG msg = {MAIN_ICON,};\r
+       IconMsg msg = {MAIN_ICON,};\r
        if (m_bHook) {\r
                if (CCommands::IsTemporarilyDisableXKeymacs()) {\r
                        msg.nState = STATUS_DISABLE_TMP;\r
@@ -351,11 +353,6 @@ void CXkeymacsDll::ShowKeyboardHookState()
        DoSetCursor();\r
 }\r
 \r
-BOOL CXkeymacsDll::IsKeyboardHook()\r
-{\r
-       return m_bHook;\r
-}\r
-\r
 LRESULT CALLBACK CXkeymacsDll::CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)\r
 {\r
        SetKeyboardHook();\r
@@ -433,130 +430,6 @@ LRESULT CALLBACK CXkeymacsDll::ShellProc(int nCode, WPARAM wParam, LPARAM lParam
        return CallNextHookEx(NULL, nCode, wParam, lParam);\r
 }\r
 \r
-UINT CXkeymacsDll::GetModifierState(BOOL bPhysicalKey)\r
-{\r
-       UINT result = 0;\r
-       if (IsDown(VK_SHIFT, bPhysicalKey))\r
-               result |= SHIFT;\r
-       if (IsDown(VK_CONTROL, bPhysicalKey))\r
-               result |= CONTROL;\r
-       if (IsDown(VK_MENU, bPhysicalKey))\r
-               result |= META;\r
-       return result;\r
-}\r
-\r
-void CXkeymacsDll::SetModifierState(UINT after, UINT before)\r
-{\r
-       if (after & SHIFT && !(before & SHIFT))\r
-               DepressKey(VK_SHIFT);\r
-       else if (!(after & SHIFT) && before & SHIFT)\r
-               ReleaseKey(VK_SHIFT);\r
-\r
-       if (after & CONTROL && !(before & CONTROL)) {\r
-               UpdateKeyboardState(VK_CONTROL, 1);\r
-               DepressKey(VK_CONTROL);\r
-       } else if (!(after & CONTROL) && before & CONTROL) {\r
-               ReleaseKey(VK_CONTROL);\r
-               UpdateKeyboardState(VK_CONTROL, 0);\r
-       }\r
-\r
-       const BOOL bHookApp =\r
-               CUtils::IsVisualCpp() ||  CUtils::IsVisualStudio() ||\r
-               CUtils::IsInternetExplorer() || CUtils::IsFirefox() || CUtils::IsChrome();\r
-       if (after & META && !(before & META)) {\r
-               if (bHookApp)\r
-                       m_nHookAltRelease |= HOOK_ALT_LATER;\r
-               DepressKey(VK_MENU);\r
-       } else if (!(after & META) && before & META) {\r
-               if (bHookApp)\r
-                       ++m_nHookAltRelease;\r
-               ReleaseKey(VK_MENU);\r
-       }\r
-}\r
-\r
-BOOL CXkeymacsDll::UpdateKeyboardState(BYTE bVk, BYTE bState)\r
-{\r
-       BYTE ks[256] = {'\0'};\r
-       if (!GetKeyboardState(ks))\r
-               return FALSE;\r
-       ks[bVk] = bState;\r
-       return SetKeyboardState(ks);\r
-}\r
-\r
-BOOL CXkeymacsDll::IsDown(BYTE bVk, BOOL bPhysicalKey)\r
-{\r
-       return bPhysicalKey ? GetAsyncKeyState(bVk) < 0 : GetKeyState(bVk) < 0;\r
-}\r
-\r
-void CXkeymacsDll::DoKeybd_event(BYTE bVk, DWORD dwFlags)\r
-{\r
-       switch (bVk) {\r
-       case VK_CONTROL:\r
-               if (m_bRightControl)\r
-                       dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
-               break;\r
-\r
-       case VK_MENU:\r
-               if (m_bRightAlt)\r
-                       dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
-               break;\r
-\r
-       case VK_SHIFT:\r
-               if (m_bRightShift) {\r
-                       if (CUtils::IsXPorLater())\r
-                               bVk = VK_RSHIFT;\r
-                       else\r
-                               dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
-               }\r
-               break;\r
-       case VK_PAUSE:\r
-               if (IsDown(VK_CONTROL, FALSE)) // Break\r
-                       dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
-               break;\r
-       case VK_INSERT:\r
-       case VK_DELETE:\r
-       case VK_HOME:\r
-       case VK_END:\r
-       case VK_NEXT:\r
-       case VK_PRIOR:\r
-       case VK_UP:\r
-       case VK_DOWN:\r
-       case VK_RIGHT:\r
-       case VK_LEFT:\r
-       case VK_NUMLOCK:\r
-       case VK_PRINT:\r
-               dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
-               break;\r
-       }\r
-//     CUtils::Log(_T("b: %x, %x, %x, %#hx, %#hx"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
-       keybd_event(bVk, 0, dwFlags, GetMessageExtraInfo());\r
-//     CUtils::Log(_T("a: %x, %x, %x, %#hx, %#hx"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
-}\r
-\r
-void CXkeymacsDll::DepressKey(BYTE bVk, BOOL bOriginal)        // bVk is virtual-key code, MSDN said\r
-{\r
-       if (bOriginal) {\r
-//             CUtils::Log(_T("i: %x, %d, %d, %d, %d, %d, %d, %d, %d"), bVk,\r
-//                     IsDown(VK_CONTROL), IsDown(VK_CONTROL, FALSE), IsDepressedModifier(CCommands::C_), IsDepressedModifier(CCommands::C_, FALSE),\r
-//                     IsDown(VK_MENU), IsDown(VK_MENU, FALSE), IsDepressedModifier(CCommands::MetaAlt), IsDepressedModifier(CCommands::MetaAlt, FALSE));\r
-               SetOriginal(GetModifierState(), bVk);\r
-       }\r
-       DoKeybd_event(bVk, 0);\r
-}\r
-\r
-void CXkeymacsDll::ReleaseKey(BYTE bVk)        // bVk is virtual-key code, MSDN said\r
-{\r
-       DoKeybd_event(bVk, KEYEVENTF_KEYUP);\r
-}\r
-\r
-void CXkeymacsDll::Kdu(BYTE bVk, DWORD n, BOOL bOriginal)\r
-{\r
-       while (n--) {\r
-               DepressKey(bVk, bOriginal);\r
-               ReleaseKey(bVk);\r
-       }\r
-}\r
-\r
 void CXkeymacsDll::InitKeyboardProc(BOOL bImeComposition)\r
 {\r
        CUtils::SetApplicationName(bImeComposition);\r
@@ -585,7 +458,7 @@ void CXkeymacsDll::InitKeyboardProc(BOOL bImeComposition)
                // Use Dialog Setting\r
                m_nAppID = GetAppID(_T("Dialog"), m_nAppID);\r
 \r
-       ICONMSG msg[3] = {\r
+       IconMsg msg[3] = {\r
                {CX_ICON, OFF_ICON, ""},\r
                {MX_ICON, OFF_ICON, ""},\r
                {META_ICON, OFF_ICON, ""}\r
@@ -901,11 +774,8 @@ RECURSIVE_COMMAND:
 \r
 DO_NOTHING:\r
        SetModifierIcons();\r
-       if (m_bRecordingMacro && (!bRelease || m_bDown[wParam])) {\r
-               KbdMacro m = { nCode, wParam, lParam, TRUE };\r
-               m_Macro.push_back(m);\r
-               m_bDown[wParam] |= !bRelease;\r
-       }\r
+       if (m_kbdMacro)\r
+               m_kbdMacro->Record(nKey, bRelease);\r
        return CallNextHookEx(NULL, nCode, wParam, lParam);\r
 \r
 RECURSIVE:\r
@@ -920,9 +790,64 @@ HOOK_RECURSIVE_KEY:
        return TRUE;\r
 }\r
 \r
+void CXkeymacsDll::CancelMarkWithShift(BYTE nKey, bool bRelease)\r
+{\r
+       static bool bShift;\r
+       if (nKey != VK_SHIFT)\r
+               goto exit;\r
+       BYTE bVk = 0;\r
+       do {\r
+               if (bVk == VK_SHIFT || VK_LSHIFT || VK_RSHIFT)\r
+                       continue;\r
+               if (IsDown(bVk, FALSE))\r
+                       goto exit;\r
+       } while (++bVk);\r
+       if (!bRelease) {\r
+               bShift = true;\r
+               return;\r
+       }\r
+       if (bShift)\r
+               CCommands::SetMark(FALSE);\r
+exit:\r
+       bShift = false;\r
+       return;\r
+}\r
+\r
+int CXkeymacsDll::IsPassThrough(BYTE nKey)\r
+{\r
+       BYTE bVk = 0;\r
+       const BYTE *pnID = m_Config.nCommandID[m_nAppID][NONE]; \r
+       do {\r
+               if (IsDown(bVk) && Commands[pnID[bVk]].fCommand == CCommands::PassThrough) {\r
+                       if (bVk == nKey)\r
+                               return GOTO_HOOK;\r
+                       return GOTO_DO_NOTHING;\r
+               }\r
+       } while (++bVk);\r
+       return CONTINUE;\r
+}\r
+\r
+void CXkeymacsDll::InvokeM_x(LPCTSTR szPath)\r
+{\r
+//     CUtils::Log("M-x: szPath=_%s_", szPath);\r
+       int (*fCommand)() = NULL;\r
+       for (int i = 0; i < MAX_COMMAND; ++i)\r
+               if (_tcsicmp(szPath, Commands[i].szCommandName) == 0) {\r
+                       fCommand = Commands[i].fCommand;\r
+                       break;\r
+               }\r
+       if (fCommand) {\r
+//             CUtils::Log("M-x: Command: _%s_", Commands[i].szCommandName);\r
+               fCommand();\r
+       } else {\r
+//             CUtils::Log("M-x: Path: _%s_", szPath);\r
+               ShellExecute(NULL, NULL, szPath, NULL, NULL, SW_SHOWNORMAL);\r
+       }\r
+}\r
+\r
 void CXkeymacsDll::SetModifierIcons()\r
 {\r
-       ICONMSG msg[6] = {\r
+       IconMsg msg[6] = {\r
                {MX_ICON, CCommands::bM_x(), ""},\r
                {CX_ICON, CCommands::bC_x(), ""},\r
                {META_ICON, CCommands::bM_(), ""},\r
@@ -934,19 +859,157 @@ void CXkeymacsDll::SetModifierIcons()
        SendIconMessage(msg, 6);\r
 }\r
 \r
-void CXkeymacsDll::Clear(int nAppID)\r
+void CXkeymacsDll::SetM_xTip(LPCTSTR szPath)\r
 {\r
-       if (0 <= nAppID && nAppID < MAX_APP) {\r
-               ZeroMemory(m_Config.szSpecialApp[nAppID], sizeof(m_Config.szSpecialApp[nAppID]));\r
-               ZeroMemory(m_Config.nCommandID[nAppID], sizeof(m_Config.nCommandID[nAppID]));\r
-               m_Config.nKillRingMax[nAppID] = 0;\r
-               m_Config.bUseDialogSetting[nAppID] = FALSE;\r
-               m_Config.nSettingStyle[nAppID] = 0;\r
-       } else {\r
-               ASSERT(0);\r
+       _tcscpy_s(m_M_xTip, "M-x LED");\r
+       if (szPath && _tcslen(szPath) < 128 - 5)\r
+               _stprintf_s(m_M_xTip, "M-x %s", szPath);\r
+}\r
+\r
+BOOL CXkeymacsDll::SendIconMessage(IconMsg *pMsg, DWORD num)\r
+{\r
+       DWORD ack, read;\r
+       return CallNamedPipe(ICON_PIPE, pMsg, sizeof(IconMsg) * num, &ack, sizeof(DWORD), &read, NMPWAIT_NOWAIT) && read == sizeof(DWORD);\r
+}\r
+\r
+void CXkeymacsDll::Kdu(BYTE bVk, DWORD n, BOOL bOriginal)\r
+{\r
+       while (n--) {\r
+               DepressKey(bVk, bOriginal);\r
+               ReleaseKey(bVk);\r
        }\r
 }\r
 \r
+void CXkeymacsDll::DepressKey(BYTE bVk, BOOL bOriginal)        // bVk is virtual-key code, MSDN said\r
+{\r
+       if (bOriginal) {\r
+//             CUtils::Log(_T("i: %x, %d, %d, %d, %d, %d, %d, %d, %d"), bVk,\r
+//                     IsDown(VK_CONTROL), IsDown(VK_CONTROL, FALSE), IsDepressedModifier(CCommands::C_), IsDepressedModifier(CCommands::C_, FALSE),\r
+//                     IsDown(VK_MENU), IsDown(VK_MENU, FALSE), IsDepressedModifier(CCommands::MetaAlt), IsDepressedModifier(CCommands::MetaAlt, FALSE));\r
+               SetOriginal(GetModifierState(), bVk);\r
+       }\r
+       DoKeybd_event(bVk, 0);\r
+}\r
+\r
+void CXkeymacsDll::ReleaseKey(BYTE bVk)        // bVk is virtual-key code, MSDN said\r
+{\r
+       DoKeybd_event(bVk, KEYEVENTF_KEYUP);\r
+}\r
+\r
+void CXkeymacsDll::DoKeybd_event(BYTE bVk, DWORD dwFlags)\r
+{\r
+       switch (bVk) {\r
+       case VK_CONTROL:\r
+               if (m_bRightControl)\r
+                       dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+               break;\r
+\r
+       case VK_MENU:\r
+               if (m_bRightAlt)\r
+                       dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+               break;\r
+\r
+       case VK_SHIFT:\r
+               if (m_bRightShift)\r
+                       bVk = VK_RSHIFT;\r
+               break;\r
+       case VK_PAUSE:\r
+               if (IsDown(VK_CONTROL, FALSE)) // Break\r
+                       dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+               break;\r
+       case VK_INSERT:\r
+       case VK_DELETE:\r
+       case VK_HOME:\r
+       case VK_END:\r
+       case VK_NEXT:\r
+       case VK_PRIOR:\r
+       case VK_UP:\r
+       case VK_DOWN:\r
+       case VK_RIGHT:\r
+       case VK_LEFT:\r
+       case VK_NUMLOCK:\r
+       case VK_PRINT:\r
+               dwFlags |= KEYEVENTF_EXTENDEDKEY;\r
+               break;\r
+       }\r
+//     CUtils::Log(_T("b: %x, %x, %x, %#hx, %#hx"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
+       keybd_event(bVk, 0, dwFlags, GetMessageExtraInfo());\r
+//     CUtils::Log(_T("a: %x, %x, %x, %#hx, %#hx"), bVk, dwFlags, GetMessageExtraInfo(), GetKeyState(bVk), GetAsyncKeyState(bVk));\r
+}\r
+\r
+void CXkeymacsDll::SetOriginal(UINT nType, BYTE bVk)\r
+{\r
+       m_nOriginal[nType & ~SHIFT][bVk]++;\r
+}\r
+\r
+int CXkeymacsDll::CheckOriginal(UINT nType, BYTE bVk)\r
+{\r
+       nType &= ~SHIFT;\r
+       if (m_nOriginal[nType][bVk])\r
+               return m_nOriginal[nType][bVk]--;\r
+       return 0;\r
+}\r
+\r
+UINT CXkeymacsDll::GetModifierState(BOOL bPhysicalKey)\r
+{\r
+       UINT result = 0;\r
+       if (IsDown(VK_SHIFT, bPhysicalKey))\r
+               result |= SHIFT;\r
+       if (IsDown(VK_CONTROL, bPhysicalKey))\r
+               result |= CONTROL;\r
+       if (IsDown(VK_MENU, bPhysicalKey))\r
+               result |= META;\r
+       return result;\r
+}\r
+\r
+void CXkeymacsDll::SetModifierState(UINT after, UINT before)\r
+{\r
+       if (after & SHIFT && !(before & SHIFT))\r
+               DepressKey(VK_SHIFT);\r
+       else if (!(after & SHIFT) && before & SHIFT)\r
+               ReleaseKey(VK_SHIFT);\r
+\r
+       if (after & CONTROL && !(before & CONTROL)) {\r
+               UpdateKeyboardState(VK_CONTROL, 1);\r
+               DepressKey(VK_CONTROL);\r
+       } else if (!(after & CONTROL) && before & CONTROL) {\r
+               ReleaseKey(VK_CONTROL);\r
+               UpdateKeyboardState(VK_CONTROL, 0);\r
+       }\r
+\r
+       const BOOL bHookApp =\r
+               CUtils::IsVisualCpp() ||  CUtils::IsVisualStudio() ||\r
+               CUtils::IsInternetExplorer() || CUtils::IsFirefox() || CUtils::IsChrome();\r
+       if (after & META && !(before & META)) {\r
+               if (bHookApp)\r
+                       m_nHookAltRelease |= HOOK_ALT_LATER;\r
+               DepressKey(VK_MENU);\r
+       } else if (!(after & META) && before & META) {\r
+               if (bHookApp)\r
+                       ++m_nHookAltRelease;\r
+               ReleaseKey(VK_MENU);\r
+       }\r
+}\r
+\r
+BOOL CXkeymacsDll::UpdateKeyboardState(BYTE bVk, BYTE bState)\r
+{\r
+       BYTE ks[256] = {'\0'};\r
+       if (!GetKeyboardState(ks))\r
+               return FALSE;\r
+       ks[bVk] = bState;\r
+       return SetKeyboardState(ks);\r
+}\r
+\r
+BOOL CXkeymacsDll::IsControl()\r
+{\r
+       return CCommands::bC_() || IsDepressedModifier(CCommands::C_);\r
+}\r
+\r
+BOOL CXkeymacsDll::IsMeta()\r
+{\r
+       return CCommands::bM_() || IsDepressedModifier(CCommands::MetaAlt);\r
+}\r
+\r
 BOOL CXkeymacsDll::IsDepressedModifier(int (__cdecl *Modifier)(void), BOOL bPhysicalKey)\r
 {\r
        BYTE bVk = 0;\r
@@ -965,37 +1028,9 @@ BOOL CXkeymacsDll::IsDepressedModifier(int (__cdecl *Modifier)(void), BOOL bPhys
        return FALSE;\r
 }\r
 \r
-void CXkeymacsDll::CancelMarkWithShift(BYTE nKey, bool bRelease)\r
-{\r
-       static bool bShift;\r
-       if (nKey != VK_SHIFT)\r
-               goto exit;\r
-       BYTE bVk = 0;\r
-       do {\r
-               if (bVk == VK_SHIFT || VK_LSHIFT || VK_RSHIFT)\r
-                       continue;\r
-               if (IsDown(bVk, FALSE))\r
-                       goto exit;\r
-       } while (++bVk);\r
-       if (!bRelease) {\r
-               bShift = true;\r
-               return;\r
-       }\r
-       if (bShift)\r
-               CCommands::SetMark(FALSE);\r
-exit:\r
-       bShift = false;\r
-       return;\r
-}\r
-\r
-BOOL CXkeymacsDll::IsControl()\r
-{\r
-       return CCommands::bC_() || IsDepressedModifier(CCommands::C_);\r
-}\r
-\r
-BOOL CXkeymacsDll::IsMeta()\r
+BOOL CXkeymacsDll::IsDown(BYTE bVk, BOOL bPhysicalKey)\r
 {\r
-       return CCommands::bM_() || IsDepressedModifier(CCommands::MetaAlt);\r
+       return bPhysicalKey ? GetAsyncKeyState(bVk) < 0 : GetKeyState(bVk) < 0;\r
 }\r
 \r
 void CXkeymacsDll::AddKillRing(BOOL bNewData)\r
@@ -1077,19 +1112,6 @@ CClipboardSnap* CXkeymacsDll::GetKillRing(CClipboardSnap* pSnap, BOOL bForce)
        return pSnap->GetNext();\r
 }\r
 \r
-void CXkeymacsDll::SetOriginal(UINT nType, BYTE bVk)\r
-{\r
-       m_nOriginal[nType & ~SHIFT][bVk]++;\r
-}\r
-\r
-int CXkeymacsDll::CheckOriginal(UINT nType, BYTE bVk)\r
-{\r
-       nType &= ~SHIFT;\r
-       if (m_nOriginal[nType][bVk])\r
-               return m_nOriginal[nType][bVk]--;\r
-       return 0;\r
-}\r
-\r
 void CXkeymacsDll::IncreaseKillRingIndex(int nKillRing)\r
 {\r
        m_nKillRing += nKillRing;\r
@@ -1100,38 +1122,9 @@ BOOL CXkeymacsDll::GetEnableCUA()
        return m_Config.bEnableCUA[m_nAppID];\r
 }\r
 \r
-void CXkeymacsDll::StartRecordMacro()\r
-{\r
-       if (CCommands::bC_u())\r
-               CallMacro();\r
-       m_bRecordingMacro = TRUE;\r
-       m_Macro.erase(m_Macro.begin(), m_Macro.end());\r
-       ZeroMemory(m_bDown, MAX_KEY);\r
-}\r
-\r
-void CXkeymacsDll::EndRecordMacro()\r
-{\r
-       m_bRecordingMacro = FALSE;\r
-       while (!m_Macro.empty()) { // remove not released push\r
-               const KbdMacro& m = m_Macro.back();\r
-               if (HIWORD(m.lParam) & KF_UP)\r
-                       break;\r
-               m_Macro.pop_back();\r
-       }\r
-}\r
-\r
-void CXkeymacsDll::CallMacro()\r
+BOOL CXkeymacsDll::Get326Compatible()\r
 {\r
-       if (m_bRecordingMacro)\r
-               m_bRecordingMacro = FALSE;\r
-       UINT before = GetModifierState(FALSE);\r
-       SetModifierState(0, before);\r
-       for (std::list<KbdMacro>::const_iterator m = m_Macro.begin(); m != m_Macro.end(); ++m)\r
-               if (HIWORD(m->lParam) & KF_UP)\r
-                       ReleaseKey(static_cast<BYTE>(m->wParam));\r
-               else\r
-                       DepressKey(static_cast<BYTE>(m->wParam), m->bOriginal);\r
-       SetModifierState(before, 0);\r
+       return m_Config.b326Compatible[m_nAppID];\r
 }\r
 \r
 BOOL CXkeymacsDll::Is106Keyboard()\r
@@ -1139,20 +1132,9 @@ BOOL CXkeymacsDll::Is106Keyboard()
        return m_Config.b106Keyboard;\r
 }\r
 \r
-int CXkeymacsDll::IsPassThrough(BYTE nKey)\r
+void CXkeymacsDll::SetKbMacro(KbdMacro* kbdMacro)\r
 {\r
-       BYTE bVk = 0;\r
-       do {\r
-               if (IsDown(bVk)\r
-                && (Commands[m_Config.nCommandID[m_nAppID][NONE][bVk]].fCommand == CCommands::PassThrough)) {\r
-                       if (bVk == nKey) {\r
-                               return GOTO_HOOK;\r
-                       }\r
-\r
-                       return GOTO_DO_NOTHING;\r
-               }\r
-       } while (++bVk);\r
-       return CONTINUE;\r
+       m_kbdMacro = kbdMacro;\r
 }\r
 \r
 // call an original command which is defined in dot.xkeymacs\r
@@ -1462,11 +1444,7 @@ BOOL CXkeymacsDll::IsMatchWindowText(CString szWindowText)
        case IDS_WINDOW_TEXT_IGNORE:                                                    // *\r
                bIsMatchWindowText = TRUE;\r
                break;\r
-       default:\r
-               ASSERT(0);\r
-               break;\r
        }\r
-\r
 //     CUtils::Log(_T("IsMatchWindowText: %d, _%s_, _%s_"), bIsMatchWindowText, szCurrentWindowText, szWindowText);\r
        return bIsMatchWindowText;\r
 }\r
@@ -1507,46 +1485,6 @@ void CXkeymacsDll::SetCursorData(HCURSOR hEnable, HCURSOR hDisableTMP, HCURSOR h
 \r
 void CXkeymacsDll::DoSetCursor()\r
 {\r
-       if (m_bCursor && m_hCurrentCursor) {\r
+       if (m_bCursor && m_hCurrentCursor)\r
                ::SetCursor(m_hCurrentCursor);\r
-       }\r
-}\r
-\r
-BOOL CXkeymacsDll::Get326Compatible()\r
-{\r
-       return m_Config.b326Compatible[m_nAppID];\r
-}\r
-\r
-void CXkeymacsDll::InvokeM_x(LPCTSTR szPath)\r
-{\r
-//     CUtils::Log("M-x: szPath=_%s_", szPath);\r
-       int (*fCommand)() = NULL;\r
-\r
-       for (int i = 0; i < MAX_COMMAND; ++i) {\r
-               if (_tcsicmp(szPath, Commands[i].szCommandName) == 0) {\r
-                       fCommand = Commands[i].fCommand;\r
-                       break;\r
-               }\r
-       }\r
-\r
-       if (fCommand) {\r
-//             CUtils::Log("M-x: Command: _%s_", Commands[i].szCommandName);\r
-               fCommand();\r
-       } else {\r
-//             CUtils::Log("M-x: Path: _%s_", szPath);\r
-               ShellExecute(NULL, NULL, szPath, NULL, NULL, SW_SHOWNORMAL);\r
-       }\r
-}\r
-\r
-void CXkeymacsDll::SetM_xTip(LPCTSTR szPath)\r
-{\r
-       _tcscpy_s(m_M_xTip, "M-x LED");\r
-       if (szPath && _tcslen(szPath) < 128 - 5)\r
-               _stprintf_s(m_M_xTip, "M-x %s", szPath);\r
-}\r
-\r
-BOOL CXkeymacsDll::SendIconMessage(ICONMSG *pMsg, DWORD num)\r
-{\r
-       DWORD ack, read;\r
-       return CallNamedPipe(ICON_PIPE, pMsg, sizeof(ICONMSG) * num, &ack, sizeof(DWORD), &read, NMPWAIT_NOWAIT);\r
 }\r