| /* |
| * IMM32 - Input Method contexts Manager ??? |
| * |
| * Copyright 1998 Patrik Stridvall |
| * Copyright 2002 Hidenori Takeshima |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| * NOTE for implementors of forwarding to XIM/XIC: |
| * Implementing low-level APIs with XIM is too hard since |
| * XIM is a high-level interface. |
| * some comments are added for implementor with XIM. |
| */ |
| |
| #include "winbase.h" |
| #include "windef.h" |
| #include "wingdi.h" |
| #include "winuser.h" |
| #include "winnls.h" |
| #include "winerror.h" |
| #include "immddk.h" |
| |
| #include "wine/debug.h" |
| WINE_DEFAULT_DEBUG_CHANNEL(imm); |
| |
| |
| /*********************************************************************** |
| * ImmAssociateContext (IMM32.@) |
| */ |
| HIMC WINAPI ImmAssociateContext(HWND hWnd, HIMC hIMC) |
| { |
| FIXME("(0x%08x, 0x%08x): stub\n",hWnd,hIMC); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| |
| /* changing contexts is hard -> return default dummy imc */ |
| |
| return (HIMC)NULL; |
| } |
| |
| /*********************************************************************** |
| * ImmConfigureIMEA (IMM32.@) |
| */ |
| BOOL WINAPI ImmConfigureIMEA( |
| HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData) |
| { |
| /* are any configurations needed? */ |
| |
| FIXME("(0x%08x, 0x%08x, %ld, %p): stub\n", |
| hKL, hWnd, dwMode, lpData |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmConfigureIMEW (IMM32.@) |
| */ |
| BOOL WINAPI ImmConfigureIMEW( |
| HKL hKL, HWND hWnd, DWORD dwMode, LPVOID lpData) |
| { |
| /* are any configurations needed? */ |
| |
| FIXME("(0x%08x, 0x%08x, %ld, %p): stub\n", |
| hKL, hWnd, dwMode, lpData |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmDisableIME (IMM32.@) |
| */ |
| BOOL WINAPI ImmDisableIME( |
| DWORD idThread) |
| { |
| FIXME("(idThread %lu): stub\n", idThread); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmEscapeA (IMM32.@) |
| */ |
| LRESULT WINAPI ImmEscapeA( |
| HKL hKL, HIMC hIMC, |
| UINT uEscape, LPVOID lpData) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, 0x%08x, %d, %p): stub\n", |
| hKL, hIMC, uEscape, lpData |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmEscapeW (IMM32.@) |
| */ |
| LRESULT WINAPI ImmEscapeW( |
| HKL hKL, HIMC hIMC, |
| UINT uEscape, LPVOID lpData) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, 0x%08x, %d, %p): stub\n", |
| hKL, hIMC, uEscape, lpData |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetCandidateListA (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetCandidateListA( |
| HIMC hIMC, DWORD deIndex, |
| LPCANDIDATELIST lpCandList, DWORD dwBufLen) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %ld, %p, %ld): stub\n", |
| hIMC, deIndex, |
| lpCandList, dwBufLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetCandidateListCountA (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetCandidateListCountA( |
| HIMC hIMC, LPDWORD lpdwListCount) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %p): stub\n", hIMC, lpdwListCount); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetCandidateListCountW (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetCandidateListCountW( |
| HIMC hIMC, LPDWORD lpdwListCount) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %p): stub\n", hIMC, lpdwListCount); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetCandidateListW (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetCandidateListW( |
| HIMC hIMC, DWORD deIndex, |
| LPCANDIDATELIST lpCandList, DWORD dwBufLen) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %ld, %p, %ld): stub\n", |
| hIMC, deIndex, |
| lpCandList, dwBufLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetCandidateWindow (IMM32.@) |
| */ |
| BOOL WINAPI ImmGetCandidateWindow( |
| HIMC hIMC, DWORD dwBufLen, LPCANDIDATEFORM lpCandidate) |
| { |
| /* return positions of 'candidate window' -> hard? */ |
| |
| FIXME("(0x%08x, %ld, %p): stub\n", hIMC, dwBufLen, lpCandidate); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGetCompositionFontA (IMM32.@) |
| */ |
| BOOL WINAPI ImmGetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %p): stub\n", hIMC, lplf); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGetCompositionFontW (IMM32.@) |
| */ |
| BOOL WINAPI ImmGetCompositionFontW(HIMC hIMC, LPLOGFONTW lplf) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %p): stub\n", hIMC, lplf); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGetCompositionStringA (IMM32.@) |
| */ |
| LONG WINAPI ImmGetCompositionStringA( |
| HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen) |
| { |
| /* hard to implement with XIM */ |
| OSVERSIONINFOA version; |
| FIXME("(0x%08x, %ld, %p, %ld): stub\n", |
| hIMC, dwIndex, lpBuf, dwBufLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); |
| GetVersionExA( &version ); |
| switch(version.dwPlatformId) |
| { |
| case VER_PLATFORM_WIN32_WINDOWS: return -1; |
| case VER_PLATFORM_WIN32_NT: return 0; |
| default: |
| FIXME("%ld not supported\n",version.dwPlatformId); |
| return -1; |
| } |
| } |
| |
| /*********************************************************************** |
| * ImmGetCompositionStringW (IMM32.@) |
| */ |
| LONG WINAPI ImmGetCompositionStringW( |
| HIMC hIMC, DWORD dwIndex, |
| LPVOID lpBuf, DWORD dwBufLen) |
| { |
| /* hard to implement with XIM */ |
| OSVERSIONINFOA version; |
| FIXME("(0x%08x, %ld, %p, %ld): stub\n", |
| hIMC, dwIndex, lpBuf, dwBufLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); |
| GetVersionExA( &version ); |
| switch(version.dwPlatformId) |
| { |
| case VER_PLATFORM_WIN32_WINDOWS: return -1; |
| case VER_PLATFORM_WIN32_NT: return 0; |
| default: |
| FIXME("%ld not supported\n",version.dwPlatformId); |
| return -1; |
| } |
| } |
| |
| /*********************************************************************** |
| * ImmGetCompositionWindow (IMM32.@) |
| */ |
| BOOL WINAPI ImmGetCompositionWindow(HIMC hIMC, LPCOMPOSITIONFORM lpCompForm) |
| { |
| /* return positions of 'composition window' -> hard? */ |
| |
| FIXME("(0x%08x, %p): stub\n", hIMC, lpCompForm); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetContext (IMM32.@) |
| */ |
| HIMC WINAPI ImmGetContext(HWND hWnd) |
| { |
| /* enter critical section of default context and return it */ |
| |
| FIXME("(0x%08x): stub\n", hWnd); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return (HIMC)NULL; |
| } |
| |
| /*********************************************************************** |
| * ImmGetConversionListA (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetConversionListA( |
| HKL hKL, HIMC hIMC, |
| LPCSTR pSrc, LPCANDIDATELIST lpDst, |
| DWORD dwBufLen, UINT uFlag) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, 0x%08x, %s, %p, %ld, %d): stub\n", |
| hKL, hIMC, debugstr_a(pSrc), lpDst, dwBufLen, uFlag |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetConversionListW (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetConversionListW( |
| HKL hKL, HIMC hIMC, |
| LPCWSTR pSrc, LPCANDIDATELIST lpDst, |
| DWORD dwBufLen, UINT uFlag) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, 0x%08x, %s, %p, %ld, %d): stub\n", |
| hKL, hIMC, debugstr_w(pSrc), lpDst, dwBufLen, uFlag |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetConversionStatus (IMM32.@) |
| */ |
| BOOL WINAPI ImmGetConversionStatus( |
| HIMC hIMC, LPDWORD lpfdwConversion, LPDWORD lpfdwSentence) |
| { |
| /* hard -> pretend? */ |
| |
| FIXME("(0x%08x, %p, %p): stub\n", |
| hIMC, lpfdwConversion, lpfdwSentence |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGetDefaultIMEWnd (IMM32.@) |
| */ |
| HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x): stub\n", hWnd); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return (HWND)NULL; |
| } |
| |
| /*********************************************************************** |
| * ImmGetDescriptionA (IMM32.@) |
| */ |
| UINT WINAPI ImmGetDescriptionA( |
| HKL hKL, LPSTR lpszDescription, UINT uBufLen) |
| { |
| FIXME("(0x%08x, %s, %d): stub\n", |
| hKL, debugstr_a(lpszDescription), uBufLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetDescriptionW (IMM32.@) |
| */ |
| UINT WINAPI ImmGetDescriptionW(HKL hKL, LPWSTR lpszDescription, UINT uBufLen) |
| { |
| FIXME("(0x%08x, %s, %d): stub\n", |
| hKL, debugstr_w(lpszDescription), uBufLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetGuideLineA (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetGuideLineA( |
| HIMC hIMC, DWORD dwIndex, LPSTR lpBuf, DWORD dwBufLen) |
| { |
| /* ??? hard?? */ |
| |
| FIXME("(0x%08x, %ld, %s, %ld): stub\n", |
| hIMC, dwIndex, debugstr_a(lpBuf), dwBufLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetGuideLineW (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetGuideLineW(HIMC hIMC, DWORD dwIndex, LPWSTR lpBuf, DWORD dwBufLen) |
| { |
| /* ??? hard?? */ |
| |
| FIXME("(0x%08x, %ld, %s, %ld): stub\n", |
| hIMC, dwIndex, debugstr_w(lpBuf), dwBufLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetOpenStatus (IMM32.@) |
| */ |
| BOOL WINAPI ImmGetOpenStatus(HIMC hIMC) |
| { |
| /* return whether XIC is activated */ |
| |
| FIXME("(0x%08x): stub\n", hIMC); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGetStatusWindowPos (IMM32.@) |
| */ |
| BOOL WINAPI ImmGetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos) |
| { |
| /* hard??? */ |
| |
| FIXME("(0x%08x, %p): stub\n", hIMC, lpptPos); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGetVirtualKey (IMM32.@) |
| */ |
| UINT WINAPI ImmGetVirtualKey(HWND hWnd) |
| { |
| /* hard??? */ |
| OSVERSIONINFOA version; |
| FIXME("(0x%08x): stub\n", hWnd); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| version.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA); |
| GetVersionExA( &version ); |
| switch(version.dwPlatformId) |
| { |
| case VER_PLATFORM_WIN32_WINDOWS: |
| return VK_PROCESSKEY; |
| case VER_PLATFORM_WIN32_NT: |
| return 0; |
| default: |
| FIXME("%ld not supported\n",version.dwPlatformId); |
| return VK_PROCESSKEY; |
| } |
| } |
| |
| /*********************************************************************** |
| * ImmNotifyIME (IMM32.@) |
| */ |
| BOOL WINAPI ImmNotifyIME( |
| HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %ld, %ld, %ld): stub\n", |
| hIMC, dwAction, dwIndex, dwValue |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmRegisterWordA (IMM32.@) |
| */ |
| BOOL WINAPI ImmRegisterWordA( |
| HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszRegister) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %s, %ld, %s): stub\n", |
| hKL, debugstr_a(lpszReading), dwStyle, debugstr_a(lpszRegister) |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmRegisterWordW (IMM32.@) |
| */ |
| BOOL WINAPI ImmRegisterWordW( |
| HKL hKL, LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszRegister) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %s, %ld, %s): stub\n", |
| hKL, debugstr_w(lpszReading), dwStyle, debugstr_w(lpszRegister) |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmReleaseContext (IMM32.@) |
| */ |
| BOOL WINAPI ImmReleaseContext(HWND hWnd, HIMC hIMC) |
| { |
| /* release critical section of default context and return */ |
| |
| FIXME("(0x%08x, 0x%08x): stub\n", hWnd, hIMC); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetCandidateWindow (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetCandidateWindow( |
| HIMC hIMC, LPCANDIDATEFORM lpCandidate) |
| { |
| /* hard??? */ |
| |
| FIXME("(0x%08x, %p): stub\n", hIMC, lpCandidate); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetCompositionFontA (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetCompositionFontA(HIMC hIMC, LPLOGFONTA lplf) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %p): stub\n", hIMC, lplf); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetCompositionFontW (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetCompositionFontW(HIMC hIMC, LPLOGFONTW lplf) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %p): stub\n", hIMC, lplf); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetCompositionStringA (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetCompositionStringA( |
| HIMC hIMC, DWORD dwIndex, |
| LPCVOID lpComp, DWORD dwCompLen, |
| LPCVOID lpRead, DWORD dwReadLen) |
| { |
| /* hard??? */ |
| |
| FIXME("(0x%08x, %ld, %p, %ld, %p, %ld): stub\n", |
| hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetCompositionStringW (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetCompositionStringW( |
| HIMC hIMC, DWORD dwIndex, |
| LPCVOID lpComp, DWORD dwCompLen, |
| LPCVOID lpRead, DWORD dwReadLen) |
| { |
| /* hard??? */ |
| |
| FIXME("(0x%08x, %ld, %p, %ld, %p, %ld): stub\n", |
| hIMC, dwIndex, lpComp, dwCompLen, lpRead, dwReadLen |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetCompositionWindow (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetCompositionWindow( |
| HIMC hIMC, LPCOMPOSITIONFORM lpCompForm) |
| { |
| /* hard??? */ |
| |
| FIXME("(0x%08x, %p): stub\n", hIMC, lpCompForm); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetConversionStatus (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetConversionStatus( |
| HIMC hIMC, DWORD fdwConversion, DWORD fdwSentence) |
| { |
| /* hard to implement with XIM? */ |
| FIXME("(0x%08x, %ld, %ld): stub\n", |
| hIMC, fdwConversion, fdwSentence |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetOpenStatus (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetOpenStatus(HIMC hIMC, BOOL fOpen) |
| { |
| /* activate/inactivate XIC */ |
| |
| FIXME("(0x%08x, %d): stub\n", hIMC, fOpen); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetStatusWindowPos (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos) |
| { |
| /* hard??? */ |
| |
| FIXME("(0x%08x, %p): stub\n", hIMC, lpptPos); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSimulateHotKey (IMM32.@) |
| */ |
| BOOL WINAPI ImmSimulateHotKey(HWND hWnd, DWORD dwHotKeyID) |
| { |
| /* hard??? */ |
| |
| FIXME("(0x%08x, %ld): stub\n", hWnd, dwHotKeyID); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmUnregisterWordA (IMM32.@) |
| */ |
| BOOL WINAPI ImmUnregisterWordA( |
| HKL hKL, LPCSTR lpszReading, DWORD dwStyle, LPCSTR lpszUnregister) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %s, %ld, %s): stub\n", |
| hKL, debugstr_a(lpszReading), dwStyle, debugstr_a(lpszUnregister) |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmUnregisterWordW (IMM32.@) |
| */ |
| BOOL WINAPI ImmUnregisterWordW( |
| HKL hKL, LPCWSTR lpszReading, DWORD dwStyle, LPCWSTR lpszUnregister) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %s, %ld, %s): stub\n", |
| hKL, debugstr_w(lpszReading), dwStyle, debugstr_w(lpszUnregister) |
| ); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmCreateSoftKeyboard (IMM32.@) |
| */ |
| HWND WINAPI ImmCreateSoftKeyboard(UINT uType, HWND hOwner, int x, int y) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, 0x%08x, %d, %d): stub\n", uType, (unsigned)hOwner, x, y); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return (HWND)NULL; |
| } |
| |
| /*********************************************************************** |
| * ImmDestroySoftKeyboard (IMM32.@) |
| */ |
| BOOL WINAPI ImmDestroySoftKeyboard(HWND hwndSoftKeyboard) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x): stub\n", (unsigned)hwndSoftKeyboard); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmShowSoftKeyboard (IMM32.@) |
| */ |
| BOOL WINAPI ImmShowSoftKeyboard(HWND hwndSoftKeyboard, int nCmdShow) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x, %d): stub\n", (unsigned)hwndSoftKeyboard, nCmdShow); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGetHotKey (IMM32.@) |
| */ |
| BOOL WINAPI ImmGetHotKey(DWORD dwHotKeyID, LPUINT lpuModifiers, |
| LPUINT lpuVKey, LPHKL lphKL) |
| { |
| /* hard??? */ |
| |
| FIXME("(0x%08lx, %p, %p, %p): stub\n", |
| dwHotKeyID, lpuModifiers, lpuVKey, lphKL); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmSetHotKey (IMM32.@) |
| */ |
| BOOL WINAPI ImmSetHotKey(DWORD dwHotKeyID, UINT uModifiers, |
| UINT uVKey, HKL hKL) |
| { |
| /* hard??? */ |
| |
| FIXME("(0x%08lx, 0x%08x, 0x%08x, 0x%08x): stub\n", |
| dwHotKeyID, uModifiers, uVKey, (unsigned)hKL); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGenerateMessage (IMM32.@) |
| */ |
| BOOL WINAPI ImmGenerateMessage(HIMC hIMC) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(0x%08x): stub\n", (unsigned)hIMC); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmCreateContext (IMM32.@) |
| */ |
| HIMC WINAPI ImmCreateContext( void ) |
| { |
| /* hard to implement with XIM??? */ |
| FIXME("(): stub\n"); |
| return (HIMC)NULL; |
| } |
| |
| /*********************************************************************** |
| * ImmDestroyContext (IMM32.@) |
| */ |
| BOOL WINAPI ImmDestroyContext( HIMC hIMC ) |
| { |
| /* hard to implement with XIM??? */ |
| FIXME("(): stub\n"); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmLockIMC (IMM32.@) |
| */ |
| LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC hIMC) |
| { |
| /* don't need to implement unless use native drivers */ |
| FIXME("(): stub\n"); |
| return NULL; |
| } |
| |
| /*********************************************************************** |
| * ImmUnlockIMC (IMM32.@) |
| */ |
| BOOL WINAPI ImmUnlockIMC(HIMC hIMC) |
| { |
| /* don't need to implement unless use native drivers */ |
| FIXME("(): stub\n"); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGetIMCLockCount (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetIMCLockCount(HIMC hIMC) |
| { |
| /* don't need to implement unless use native drivers */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * IMM32_IsUIMessage (internal) |
| */ |
| static BOOL IMM32_IsUIMessage( UINT nMsg ) |
| { |
| switch ( nMsg ) |
| { |
| case WM_IME_STARTCOMPOSITION: |
| case WM_IME_ENDCOMPOSITION: |
| case WM_IME_COMPOSITION: |
| case WM_IME_SETCONTEXT: |
| case WM_IME_NOTIFY: |
| case WM_IME_COMPOSITIONFULL: |
| case WM_IME_SELECT: |
| case 0x287: /* What is this message? IMM32.DLL returns TRUE. */ |
| return TRUE; |
| } |
| |
| return FALSE; |
| } |
| |
| |
| /*********************************************************************** |
| * ImmIsUIMessageA (IMM32.@) |
| */ |
| BOOL WINAPI ImmIsUIMessageA( |
| HWND hwndIME, UINT msg, WPARAM wParam, LPARAM lParam) |
| { |
| TRACE("(0x%08x, %d, %d, %ld)\n", |
| hwndIME, msg, wParam, lParam); |
| |
| if ( !IMM32_IsUIMessage( msg ) ) |
| return FALSE; |
| if ( hwndIME == (HWND)NULL ) |
| return TRUE; |
| |
| switch ( msg ) |
| { |
| case WM_IME_STARTCOMPOSITION: |
| case WM_IME_ENDCOMPOSITION: |
| case WM_IME_COMPOSITION: |
| case WM_IME_SETCONTEXT: |
| case WM_IME_NOTIFY: |
| case WM_IME_COMPOSITIONFULL: |
| case WM_IME_SELECT: |
| SendMessageA( hwndIME, msg, wParam, lParam ); |
| break; |
| case 0x287: /* What is this message? */ |
| FIXME("(0x%08x, %d, %d, %ld) - unknown message 0x287.\n", |
| hwndIME, msg, wParam, lParam); |
| SendMessageA( hwndIME, msg, wParam, lParam ); |
| break; |
| } |
| |
| return TRUE; |
| } |
| |
| /*********************************************************************** |
| * ImmIsUIMessageW (IMM32.@) |
| */ |
| BOOL WINAPI ImmIsUIMessageW( |
| HWND hwndIME, UINT msg, WPARAM wParam, LPARAM lParam) |
| { |
| TRACE("(0x%08x, %d, %d, %ld)\n", |
| hwndIME, msg, wParam, lParam); |
| |
| if ( !IMM32_IsUIMessage( msg ) ) |
| return FALSE; |
| if ( hwndIME == (HWND)NULL ) |
| return TRUE; |
| |
| switch ( msg ) |
| { |
| case WM_IME_STARTCOMPOSITION: |
| case WM_IME_ENDCOMPOSITION: |
| case WM_IME_COMPOSITION: |
| case WM_IME_SETCONTEXT: |
| case WM_IME_NOTIFY: |
| case WM_IME_COMPOSITIONFULL: |
| case WM_IME_SELECT: |
| SendMessageW( hwndIME, msg, wParam, lParam ); |
| break; |
| case 0x287: /* What is this message? */ |
| FIXME("(0x%08x, %d, %d, %ld) - unknown message 0x287.\n", |
| hwndIME, msg, wParam, lParam); |
| SendMessageW( hwndIME, msg, wParam, lParam ); |
| break; |
| } |
| |
| return TRUE; |
| } |
| |
| |
| /*********************************************************************** |
| * ImmInstallIMEA (IMM32.@) |
| */ |
| HKL WINAPI ImmInstallIMEA( |
| LPCSTR lpszIMEFileName, LPCSTR lpszLayoutText) |
| { |
| /* don't need to implement unless use native drivers */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return (HKL)NULL; |
| } |
| |
| /*********************************************************************** |
| * ImmInstallIMEW (IMM32.@) |
| */ |
| HKL WINAPI ImmInstallIMEW( |
| LPCWSTR lpszIMEFileName, LPCWSTR lpszLayoutText) |
| { |
| /* don't need to implement unless use native drivers */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return (HKL)NULL; |
| } |
| |
| /*********************************************************************** |
| * ImmIsIME (IMM32.@) |
| */ |
| BOOL WINAPI ImmIsIME(HKL hkl) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * ImmGetIMEFileNameA (IMM32.@) |
| */ |
| UINT WINAPI ImmGetIMEFileNameA(HKL hkl, LPSTR lpszFileName, UINT uBufLen) |
| { |
| /* don't need to implement unless use native drivers */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetIMEFileNameW (IMM32.@) |
| */ |
| UINT WINAPI ImmGetIMEFileNameW(HKL hkl, LPWSTR lpszFileName, UINT uBufLen) |
| { |
| /* don't need to implement unless use native drivers */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetProperty (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetProperty(HKL hkl, DWORD fdwIndex) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmEnumRegisterWordA (IMM32.@) |
| */ |
| UINT WINAPI ImmEnumRegisterWordA( |
| HKL hkl, REGISTERWORDENUMPROCA lpfnEnumProc, |
| LPCSTR lpszReading, DWORD dwStyle, |
| LPCSTR lpszRegister, LPVOID lpData) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmEnumRegisterWordW (IMM32.@) |
| */ |
| UINT WINAPI ImmEnumRegisterWordW( |
| HKL hkl, REGISTERWORDENUMPROCW lpfnEnumProc, |
| LPCWSTR lpszReading, DWORD dwStyle, |
| LPCWSTR lpszRegister, LPVOID lpData) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetRegisterWordStyleA (IMM32.@) |
| */ |
| UINT WINAPI ImmGetRegisterWordStyleA( |
| HKL hkl, UINT nItem, LPSTYLEBUFA lpStyleBuf) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * ImmGetRegisterWordStyleW (IMM32.@) |
| */ |
| UINT WINAPI ImmGetRegisterWordStyleW( |
| HKL hkl, UINT nItem, LPSTYLEBUFW lpStyleBuf) |
| { |
| /* hard to implement with XIM */ |
| FIXME("(): stub\n"); |
| SetLastError(ERROR_CALL_NOT_IMPLEMENTED); |
| return 0; |
| } |
| |
| /*********************************************************************** |
| * IMM32_HeapAlloc (internal) |
| */ |
| LPVOID IMM32_HeapAlloc( DWORD dwFlags, DWORD dwSize ) |
| { |
| return HeapAlloc( GetProcessHeap(), dwFlags, dwSize ); |
| } |
| |
| /*********************************************************************** |
| * IMM32_HeapReAlloc (internal) |
| */ |
| LPVOID IMM32_HeapReAlloc( DWORD dwFlags, LPVOID lpv, DWORD dwSize ) |
| { |
| if ( lpv == NULL ) |
| return IMM32_HeapAlloc( dwFlags, dwSize ); |
| return HeapReAlloc( GetProcessHeap(), dwFlags, lpv, dwSize ); |
| } |
| |
| /*********************************************************************** |
| * IMM32_HeapFree (internal) |
| */ |
| void IMM32_HeapFree( LPVOID lpv ) |
| { |
| if ( lpv != NULL ) |
| HeapFree( GetProcessHeap(), 0, lpv ); |
| } |
| |
| |
| /*********************************************************************** |
| * IMM32_strlenAtoW (internal) |
| */ |
| INT IMM32_strlenAtoW( LPCSTR lpstr ) |
| { |
| INT len; |
| |
| len = MultiByteToWideChar( CP_ACP, 0, lpstr, -1, NULL, 0 ); |
| return ( len > 0 ) ? (len-1) : 0; |
| } |
| |
| /*********************************************************************** |
| * IMM32_strlenWtoA (internal) |
| */ |
| INT IMM32_strlenWtoA( LPCWSTR lpwstr ) |
| { |
| INT len; |
| |
| len = WideCharToMultiByte( CP_ACP, 0, lpwstr, -1, |
| NULL, 0, NULL, NULL ); |
| return ( len > 0 ) ? (len-1) : 0; |
| } |
| |
| /*********************************************************************** |
| * IMM32_strncpyAtoW (internal) |
| */ |
| LPWSTR IMM32_strncpyAtoW( LPWSTR lpwstr, LPCSTR lpstr, INT wbuflen ) |
| { |
| INT len; |
| |
| len = MultiByteToWideChar( CP_ACP, 0, lpstr, -1, lpwstr, wbuflen ); |
| if ( len == 0 ) |
| *lpwstr = 0; |
| return lpwstr; |
| } |
| |
| /*********************************************************************** |
| * IMM32_strncpyWtoA (internal) |
| */ |
| LPSTR IMM32_strncpyWtoA( LPSTR lpstr, LPCWSTR lpwstr, INT abuflen ) |
| { |
| INT len; |
| |
| len = WideCharToMultiByte( CP_ACP, 0, lpwstr, -1, |
| lpstr, abuflen, NULL, NULL ); |
| if ( len == 0 ) |
| *lpstr = 0; |
| return lpstr; |
| } |
| |
| /*********************************************************************** |
| * IMM32_strdupAtoW (internal) |
| */ |
| LPWSTR IMM32_strdupAtoW( LPCSTR lpstr ) |
| { |
| INT len; |
| LPWSTR lpwstr = NULL; |
| |
| len = IMM32_strlenAtoW( lpstr ); |
| if ( len > 0 ) |
| { |
| lpwstr = (LPWSTR)IMM32_HeapAlloc( 0, sizeof(WCHAR)*(len+1) ); |
| if ( lpwstr != NULL ) |
| (void)IMM32_strncpyAtoW( lpwstr, lpstr, len+1 ); |
| } |
| |
| return lpwstr; |
| } |
| |
| /*********************************************************************** |
| * IMM32_strdupWtoA (internal) |
| */ |
| LPSTR IMM32_strdupWtoA( LPCWSTR lpwstr ) |
| { |
| INT len; |
| LPSTR lpstr = NULL; |
| |
| len = IMM32_strlenWtoA( lpwstr ); |
| if ( len > 0 ) |
| { |
| lpstr = (LPSTR)IMM32_HeapAlloc( 0, sizeof(CHAR)*(len+1) ); |
| if ( lpstr != NULL ) |
| (void)IMM32_strncpyWtoA( lpstr, lpwstr, len+1 ); |
| } |
| |
| return lpstr; |
| } |
| |
| |
| #define IMM32_MOVEABLEMEM_LOCK_MAX ((DWORD)0xffffffff) |
| |
| typedef struct IMM32_tagMOVEABLEMEM |
| { |
| DWORD dwLockCount; |
| DWORD dwSize; |
| LPVOID lpvMem; |
| } IMM32_MOVEABLEMEM; |
| |
| /*********************************************************************** |
| * IMM32_MoveableAlloc (internal) |
| */ |
| IMM32_MOVEABLEMEM* IMM32_MoveableAlloc( DWORD dwHeapFlags, DWORD dwHeapSize ) |
| { |
| IMM32_MOVEABLEMEM* lpMoveable; |
| |
| lpMoveable = (IMM32_MOVEABLEMEM*) |
| IMM32_HeapAlloc( 0, sizeof( IMM32_MOVEABLEMEM ) ); |
| if ( lpMoveable != NULL ) |
| { |
| lpMoveable->dwLockCount = 0; |
| lpMoveable->dwSize = dwHeapSize; |
| lpMoveable->lpvMem = NULL; |
| |
| if ( dwHeapSize > 0 ) |
| { |
| lpMoveable->lpvMem = |
| IMM32_HeapAlloc( dwHeapFlags, dwHeapSize ); |
| if ( lpMoveable->lpvMem == NULL ) |
| { |
| IMM32_HeapFree( lpMoveable ); |
| lpMoveable = NULL; |
| } |
| } |
| } |
| |
| return lpMoveable; |
| } |
| |
| /*********************************************************************** |
| * IMM32_MoveableFree (internal) |
| */ |
| void IMM32_MoveableFree( IMM32_MOVEABLEMEM* lpMoveable ) |
| { |
| IMM32_HeapFree( lpMoveable->lpvMem ); |
| IMM32_HeapFree( lpMoveable ); |
| } |
| |
| /*********************************************************************** |
| * IMM32_MoveableReAlloc (internal) |
| */ |
| BOOL IMM32_MoveableReAlloc( IMM32_MOVEABLEMEM* lpMoveable, |
| DWORD dwHeapFlags, DWORD dwHeapSize ) |
| { |
| LPVOID lpv; |
| |
| if ( dwHeapSize > 0 ) |
| { |
| if ( lpMoveable->dwLockCount > 0 ) |
| dwHeapFlags |= HEAP_REALLOC_IN_PLACE_ONLY; |
| lpv = IMM32_HeapReAlloc( dwHeapFlags, |
| lpMoveable->lpvMem, dwHeapSize ); |
| if ( lpv == NULL ) |
| return FALSE; |
| } |
| else |
| { |
| IMM32_HeapFree( lpMoveable->lpvMem ); |
| lpv = NULL; |
| } |
| |
| lpMoveable->dwSize = dwHeapSize; |
| lpMoveable->lpvMem = lpv; |
| |
| return TRUE; |
| } |
| |
| /*********************************************************************** |
| * IMM32_MoveableLock (internal) |
| */ |
| LPVOID IMM32_MoveableLock( IMM32_MOVEABLEMEM* lpMoveable ) |
| { |
| if ( lpMoveable->dwLockCount == IMM32_MOVEABLEMEM_LOCK_MAX ) |
| { |
| ERR( "lock count is 0xffffffff\n" ); |
| } |
| else |
| { |
| lpMoveable->dwLockCount ++; |
| } |
| |
| return lpMoveable->lpvMem; |
| } |
| |
| /*********************************************************************** |
| * IMM32_MoveableUnlock (internal) |
| */ |
| BOOL IMM32_MoveableUnlock( IMM32_MOVEABLEMEM* lpMoveable ) |
| { |
| if ( lpMoveable->dwLockCount == 0 ) |
| return FALSE; |
| |
| if ( --lpMoveable->dwLockCount > 0 ) |
| return TRUE; |
| |
| return FALSE; |
| } |
| |
| /*********************************************************************** |
| * IMM32_MoveableGetLockCount (internal) |
| */ |
| DWORD IMM32_MoveableGetLockCount( IMM32_MOVEABLEMEM* lpMoveable ) |
| { |
| return lpMoveable->dwLockCount; |
| } |
| |
| /*********************************************************************** |
| * IMM32_MoveableGetSize (internal) |
| */ |
| DWORD IMM32_MoveableGetSize( IMM32_MOVEABLEMEM* lpMoveable ) |
| { |
| return lpMoveable->dwSize; |
| } |
| |
| /*********************************************************************** |
| * ImmCreateIMCC (IMM32.@) |
| */ |
| HIMCC WINAPI ImmCreateIMCC(DWORD dwSize) |
| { |
| IMM32_MOVEABLEMEM* lpMoveable; |
| |
| TRACE("(%lu)\n", dwSize); |
| |
| /* implemented but don't need to implement unless use native drivers */ |
| |
| lpMoveable = IMM32_MoveableAlloc( HEAP_ZERO_MEMORY, dwSize ); |
| if ( lpMoveable == NULL ) |
| { |
| SetLastError(ERROR_OUTOFMEMORY); |
| return (HIMCC)NULL; |
| } |
| |
| return (HIMCC)lpMoveable; |
| } |
| |
| /*********************************************************************** |
| * ImmDestroyIMCC (IMM32.@) |
| */ |
| HIMCC WINAPI ImmDestroyIMCC(HIMCC hIMCC) |
| { |
| TRACE("(0x%08x)\n", (unsigned)hIMCC); |
| |
| /* implemented but don't need to implement unless use native drivers */ |
| |
| IMM32_MoveableFree( (IMM32_MOVEABLEMEM*)hIMCC ); |
| return (HIMCC)NULL; |
| } |
| |
| /*********************************************************************** |
| * ImmLockIMCC (IMM32.@) |
| */ |
| LPVOID WINAPI ImmLockIMCC(HIMCC hIMCC) |
| { |
| TRACE("(0x%08x)\n", (unsigned)hIMCC); |
| |
| /* implemented but don't need to implement unless use native drivers */ |
| |
| return IMM32_MoveableLock( (IMM32_MOVEABLEMEM*)hIMCC ); |
| } |
| |
| /*********************************************************************** |
| * ImmUnlockIMCC (IMM32.@) |
| */ |
| BOOL WINAPI ImmUnlockIMCC(HIMCC hIMCC) |
| { |
| TRACE("(0x%08x)\n", (unsigned)hIMCC); |
| |
| /* implemented but don't need to implement unless use native drivers */ |
| |
| return IMM32_MoveableUnlock( (IMM32_MOVEABLEMEM*)hIMCC ); |
| } |
| |
| /*********************************************************************** |
| * ImmGetIMCCLockCount (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetIMCCLockCount(HIMCC hIMCC) |
| { |
| TRACE("(0x%08x)\n", (unsigned)hIMCC); |
| |
| /* implemented but don't need to implement unless use native drivers */ |
| |
| return IMM32_MoveableGetLockCount( (IMM32_MOVEABLEMEM*)hIMCC ); |
| } |
| |
| /*********************************************************************** |
| * ImmReSizeIMCC (IMM32.@) |
| */ |
| HIMCC WINAPI ImmReSizeIMCC(HIMCC hIMCC, DWORD dwSize) |
| { |
| TRACE("(0x%08x,%lu)\n", (unsigned)hIMCC, dwSize); |
| |
| /* implemented but don't need to implement unless use native drivers */ |
| |
| if ( !IMM32_MoveableReAlloc( (IMM32_MOVEABLEMEM*)hIMCC, |
| HEAP_ZERO_MEMORY, dwSize ) ) |
| { |
| SetLastError(ERROR_OUTOFMEMORY); |
| return (HIMCC)NULL; |
| } |
| |
| return hIMCC; |
| } |
| |
| /*********************************************************************** |
| * ImmGetIMCCSize (IMM32.@) |
| */ |
| DWORD WINAPI ImmGetIMCCSize(HIMCC hIMCC) |
| { |
| TRACE("(0x%08x)\n", (unsigned)hIMCC); |
| |
| /* implemented but don't need to implement unless use native drivers */ |
| |
| return IMM32_MoveableGetSize( (IMM32_MOVEABLEMEM*)hIMCC ); |
| } |
| |
| |
| /*********************************************************************** |
| * IMM32_DllMain |
| */ |
| BOOL WINAPI IMM32_DllMain( |
| HINSTANCE hInstDLL, |
| DWORD fdwReason, |
| LPVOID lpvReserved ) |
| { |
| switch ( fdwReason ) |
| { |
| case DLL_PROCESS_ATTACH: |
| break; |
| case DLL_PROCESS_DETACH: |
| break; |
| case DLL_THREAD_ATTACH: |
| break; |
| case DLL_THREAD_DETACH: |
| break; |
| } |
| |
| return TRUE; |
| } |