Removed some code because of MS EULA concerns.
Rewrote stubs.
diff --git a/dlls/imm32/Makefile.in b/dlls/imm32/Makefile.in
index 43e1925..a2cb261 100644
--- a/dlls/imm32/Makefile.in
+++ b/dlls/imm32/Makefile.in
@@ -9,13 +9,7 @@
SYMBOLFILE = $(MODULE).tmp.o
C_SRCS = \
- imc.c \
- imekl.c \
- imewnd.c \
- imm.c \
- main.c \
- memory.c \
- string.c
+ imm.c
@MAKE_DLL_RULES@
diff --git a/dlls/imm32/imc.c b/dlls/imm32/imc.c
deleted file mode 100644
index 07715bf..0000000
--- a/dlls/imm32/imc.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Input Method Context
- *
- * Copyright 2000 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
- */
-
-#include "config.h"
-
-#include "winbase.h"
-#include "windef.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "immddk.h"
-
-#include "wine/debug.h"
-WINE_DEFAULT_DEBUG_CHANNEL(imm);
-
-#include "imm_private.h"
-
-static HIMC IMM32_CreateIMC( HKL hkl );
-static BOOL IMM32_DestroyIMC( HIMC hIMC );
-
-IMM32_IMC* IMM32_LockIMC( HIMC hIMC )
-{
- IMM32_IMC* pIMC;
-
- if ( hIMC == NULLIMC )
- {
- SetLastError( ERROR_INVALID_HANDLE );
- return NULL;
- }
-
- pIMC = (IMM32_IMC*)IMM32_MoveableLock( (IMM32_MOVEABLEMEM*)hIMC );
- if ( !pIMC->fSelected )
- {
- (void)IMM32_MoveableUnlock( (IMM32_MOVEABLEMEM*)hIMC );
- SetLastError( ERROR_ACCESS_DENIED );
- return NULL;
- }
-
- return pIMC;
-}
-
-BOOL IMM32_UnlockIMC( HIMC hIMC )
-{
- if ( hIMC == NULLIMC )
- {
- SetLastError( ERROR_INVALID_HANDLE );
- return FALSE;
- }
-
- return IMM32_MoveableUnlock( (IMM32_MOVEABLEMEM*)hIMC );
-}
-
-static HIMC IMM32_CreateIMC( HKL hkl )
-{
- IMM32_MOVEABLEMEM* hIMC;
- IMM32_IMC* pIMC;
- LPCOMPOSITIONSTRING lpCompStr;
- LPCANDIDATEINFO lpCandInfo;
- LPGUIDELINE lpGuideLine;
-
- hIMC = IMM32_MoveableAlloc( 0, sizeof( IMM32_IMC ) );
- if ( hIMC == NULL )
- {
- SetLastError( ERROR_OUTOFMEMORY );
- return NULLIMC;
- }
-
- pIMC = (IMM32_IMC*)IMM32_MoveableLock( hIMC );
-
- /* Initialize some members of IMC. */
- pIMC->context.hWnd = (HWND)NULL;
- pIMC->context.fOpen = FALSE;
- pIMC->context.hCompStr = (HIMCC)NULL;
- pIMC->context.hCandInfo = (HIMCC)NULL;
- pIMC->context.hGuideLine = (HIMCC)NULL;
- pIMC->context.hPrivate = (HIMCC)NULL;
- pIMC->context.dwNumMsgBuf = 0;
- pIMC->context.hMsgBuf = (HIMCC)NULL;
- pIMC->context.fdwInit = 0;
- pIMC->pkl = NULL;
- pIMC->fSelected = FALSE;
-
- /* hCompStr, hCandInfo, hGuideLine, hMsgBuf must be allocated. */
- pIMC->context.hCompStr = ImmCreateIMCC( sizeof(COMPOSITIONSTRING) );
- if ( pIMC->context.hCompStr == (HIMCC)NULL )
- goto out_of_memory;
- lpCompStr = (LPCOMPOSITIONSTRING)ImmLockIMCC( pIMC->context.hCompStr );
- if ( lpCompStr == NULL )
- goto out_of_memory;
- lpCompStr->dwSize = sizeof(COMPOSITIONSTRING);
- (void)ImmUnlockIMCC( pIMC->context.hCompStr );
-
- pIMC->context.hCandInfo = ImmCreateIMCC( sizeof(CANDIDATEINFO) );
- if ( pIMC->context.hCandInfo == (HIMCC)NULL )
- goto out_of_memory;
- lpCandInfo = (LPCANDIDATEINFO)ImmLockIMCC( pIMC->context.hCandInfo );
- if ( lpCandInfo == NULL )
- goto out_of_memory;
- lpCandInfo->dwSize = sizeof(CANDIDATEINFO);
- (void)ImmUnlockIMCC( pIMC->context.hCandInfo );
-
- pIMC->context.hGuideLine = ImmCreateIMCC( sizeof(GUIDELINE) );
- if ( pIMC->context.hGuideLine == (HIMCC)NULL )
- goto out_of_memory;
- lpGuideLine = (LPGUIDELINE)ImmLockIMCC( pIMC->context.hGuideLine );
- if ( lpGuideLine == NULL )
- goto out_of_memory;
- lpGuideLine->dwSize = sizeof(GUIDELINE);
- (void)ImmUnlockIMCC( pIMC->context.hGuideLine );
-
- pIMC->context.hMsgBuf = ImmCreateIMCC( 0 );
- if ( pIMC->context.hMsgBuf == (HIMCC)NULL )
- goto out_of_memory;
-
- pIMC->pkl = IMM32_GetIME( hkl );
- if ( pIMC->pkl != NULL )
- {
- /* The current HKL is IME.
- * Initialize IME's private context.
- */
- if ( pIMC->pkl->imeinfo.dwPrivateDataSize > 0 )
- {
- pIMC->context.hPrivate = ImmCreateIMCC(
- pIMC->pkl->imeinfo.dwPrivateDataSize );
- if ( pIMC->context.hPrivate == (HIMCC)NULL )
- goto out_of_memory;
- }
-
- pIMC->fSelected = TRUE;
- if ( !pIMC->pkl->handlers.pImeSelect( (HIMC)hIMC, TRUE ) )
- {
- pIMC->fSelected = FALSE;
- goto out_of_memory;
- }
- }
-
- (void)IMM32_MoveableUnlock( hIMC );
-
- return (HIMC)hIMC;
-
-out_of_memory:
- (void)IMM32_DestroyIMC( (HIMC)hIMC );
- SetLastError( ERROR_OUTOFMEMORY );
- return NULLIMC;
-}
-
-static BOOL IMM32_DestroyIMC( HIMC hIMC )
-{
- IMM32_IMC* pIMC;
-
- if ( hIMC == NULLIMC )
- {
- SetLastError( ERROR_INVALID_HANDLE );
- return FALSE;
- }
-
- pIMC = (IMM32_IMC*)IMM32_MoveableLock( (IMM32_MOVEABLEMEM*)hIMC );
-
- if ( pIMC->context.hWnd != (HWND)NULL )
- {
- FIXME( "please release lock of the context.hWnd!\n" );
- }
-
- if ( pIMC->fSelected )
- {
- (void)pIMC->pkl->handlers.pImeSelect( hIMC, FALSE );
- pIMC->fSelected = FALSE;
- }
-
- if ( pIMC->context.hCompStr != (HIMCC)NULL )
- (void)ImmDestroyIMCC(pIMC->context.hCompStr);
- if ( pIMC->context.hCandInfo != (HIMCC)NULL )
- (void)ImmDestroyIMCC(pIMC->context.hCandInfo);
- if ( pIMC->context.hGuideLine != (HIMCC)NULL )
- (void)ImmDestroyIMCC(pIMC->context.hGuideLine);
- if ( pIMC->context.hPrivate != (HIMCC)NULL )
- (void)ImmDestroyIMCC(pIMC->context.hPrivate);
- if ( pIMC->context.hMsgBuf != (HIMCC)NULL )
- (void)ImmDestroyIMCC(pIMC->context.hMsgBuf);
-
- IMM32_MoveableFree( (IMM32_MOVEABLEMEM*)hIMC );
-
- return TRUE;
-}
-
-
-
-
-
-/***********************************************************************
- * ImmCreateContext (IMM32.@)
- */
-HIMC WINAPI ImmCreateContext( void )
-{
- TRACE("()\n");
-
- return IMM32_CreateIMC( GetKeyboardLayout(0) );
-}
-
-/***********************************************************************
- * ImmDestroyContext (IMM32.@)
- */
-BOOL WINAPI ImmDestroyContext( HIMC hIMC )
-{
- TRACE("(0x%08x)\n",hIMC);
-
- return IMM32_DestroyIMC( hIMC );
-}
-
-/***********************************************************************
- * ImmLockIMC (IMM32.@)
- */
-LPINPUTCONTEXT WINAPI ImmLockIMC(HIMC hIMC)
-{
- IMM32_IMC* pIMC;
-
- TRACE("(0x%08x)\n", (unsigned)hIMC);
-
- pIMC = IMM32_LockIMC( hIMC );
- if ( pIMC == NULL )
- return NULL;
- return &(pIMC->context);
-}
-
-/***********************************************************************
- * ImmUnlockIMC (IMM32.@)
- */
-BOOL WINAPI ImmUnlockIMC(HIMC hIMC)
-{
- TRACE("(0x%08x)\n", (unsigned)hIMC);
-
- return IMM32_UnlockIMC( hIMC );
-}
-
-/***********************************************************************
- * ImmGetIMCLockCount (IMM32.@)
- */
-DWORD WINAPI ImmGetIMCLockCount(HIMC hIMC)
-{
- TRACE("(0x%08x)\n", (unsigned)hIMC);
-
- if ( hIMC == NULLIMC )
- {
- SetLastError( ERROR_INVALID_HANDLE );
- return 0;
- }
-
- return IMM32_MoveableGetLockCount( (IMM32_MOVEABLEMEM*)hIMC );
-}
-
-
diff --git a/dlls/imm32/imekl.c b/dlls/imm32/imekl.c
deleted file mode 100644
index c21ce2c..0000000
--- a/dlls/imm32/imekl.c
+++ /dev/null
@@ -1,692 +0,0 @@
-/*
- * IME Keyboard Layout
- *
- * Copyright 2000 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
- */
-
-#include "config.h"
-
-#include <string.h>
-#include "winbase.h"
-#include "windef.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "winnls.h"
-#include "winreg.h"
-#include "immddk.h"
-
-#include "wine/debug.h"
-WINE_DEFAULT_DEBUG_CHANNEL(imm);
-
-#include "imm_private.h"
-
-static const char IMM32_szRegKL[] =
- "System\\CurrentControlSet\\Control\\keyboard layouts";
-static const char IMM32_szIME_File[] = "IME file";
-static const char IMM32_szLayout_File[] = "layout file";
-
-static IMM32_IMEKL* IMM32_pklFirst = NULL;
-
-
-static LONG IMM32_RegOpenKey( HKL hkl, PHKEY phkRet )
-{
- CHAR szRegPath[ sizeof(IMM32_szRegKL)+16 ];
-
- wsprintfA( szRegPath, "%s\\%08x", IMM32_szRegKL, (unsigned)hkl );
- return RegOpenKeyExA( HKEY_LOCAL_MACHINE, szRegPath,
- 0, KEY_READ, phkRet );
-}
-
-static LONG IMM32_RegCreateKey( HKL hkl, PHKEY phkRet,
- LPDWORD lpdwDisposition )
-{
- CHAR szRegPath[ sizeof(IMM32_szRegKL)+16 ];
-
- wsprintfA( szRegPath, "%s\\%08x", IMM32_szRegKL, (unsigned)hkl );
- return RegCreateKeyExA( HKEY_LOCAL_MACHINE, szRegPath,
- 0, "REG_SZ",
- REG_OPTION_NON_VOLATILE,
- KEY_ALL_ACCESS, NULL,
- phkRet, lpdwDisposition );
-}
-
-static DWORD IMM32_GetIMEFileName( HKL hkl, LPSTR lpBuf, INT nBufLen )
-{
- HKEY hkey;
- LONG nError;
- DWORD dwType;
- DWORD cbData;
- CHAR szValueName[ sizeof(IMM32_szIME_File) ];
-
- TRACE( "hkl = %08x\n", (unsigned)hkl );
-
- nError = IMM32_RegOpenKey( hkl, &hkey );
- if ( nError != ERROR_SUCCESS )
- {
- SetLastError( nError );
- return 0;
- }
- memcpy( szValueName, IMM32_szIME_File, sizeof(IMM32_szIME_File) );
-
- nError = RegQueryValueExA( hkey, szValueName, NULL,
- &dwType, NULL, &cbData );
- if ( nError == ERROR_SUCCESS && dwType != REG_SZ )
- nError = ERROR_FILE_NOT_FOUND; /* FIXME? */
- if ( nError == ERROR_SUCCESS && lpBuf != NULL && nBufLen != 0 )
- {
- if ( nBufLen < (INT)cbData )
- nError = ERROR_INSUFFICIENT_BUFFER;
- else
- nError = RegQueryValueExA( hkey, szValueName, NULL,
- &dwType, lpBuf, &cbData );
- }
-
- RegCloseKey( hkey );
-
- if ( nError != ERROR_SUCCESS )
- {
- SetLastError( nError );
- return 0;
- }
-
- return cbData;
-}
-
-
-static
-BOOL IMM32_GetIMEHandlersA( HINSTANCE hInstIME,
- struct IMM32_IME_EXPORTED_HANDLERS* phandlers )
-{
- BOOL fError;
-
- #define FE(name) \
- phandlers->p##name = (IMM32_p##name) \
- GetProcAddress(hInstIME,#name); \
- if ( phandlers->p##name == NULL ) fError = TRUE;
- #define FE_(name) \
- phandlers->p##name.A = (IMM32_p##name##A) \
- GetProcAddress(hInstIME,#name); \
- if ( phandlers->p##name.A == NULL ) fError = TRUE;
-
- fError = FALSE;
-
- FE_(ImeInquire)
- FE_(ImeConfigure)
- FE_(ImeConversionList)
- FE(ImeDestroy)
- FE_(ImeEnumRegisterWord)
- FE_(ImeGetRegisterWordStyle)
- FE_(ImeEscape)
- FE(ImeProcessKey)
- FE_(ImeRegisterWord)
- FE(ImeSelect)
- FE(ImeSetActiveContext)
- FE_(ImeSetCompositionString)
- FE(ImeToAsciiEx)
- FE_(ImeUnregisterWord)
- FE(NotifyIME)
-
- if ( fError )
- return FALSE;
-
- FE_(ImeGetImeMenuItems)
-
- #undef FE
- #undef FE_
-
- return TRUE;
-}
-
-static
-BOOL IMM32_GetIMEHandlersW( HINSTANCE hInstIME,
- struct IMM32_IME_EXPORTED_HANDLERS* phandlers )
-{
- BOOL fError;
-
- #define FE(name) \
- phandlers->p##name = (IMM32_p##name) \
- GetProcAddress(hInstIME,#name); \
- if ( phandlers->p##name == NULL ) fError = TRUE;
- #define FE_(name) \
- phandlers->p##name.W = (IMM32_p##name##W) \
- GetProcAddress(hInstIME,#name); \
- if ( phandlers->p##name.W == NULL ) fError = TRUE;
-
- fError = FALSE;
-
- FE_(ImeInquire)
- FE_(ImeConfigure)
- FE_(ImeConversionList)
- FE(ImeDestroy)
- FE_(ImeEnumRegisterWord)
- FE_(ImeGetRegisterWordStyle)
- FE_(ImeEscape)
- FE(ImeProcessKey)
- FE_(ImeRegisterWord)
- FE(ImeSelect)
- FE(ImeSetActiveContext)
- FE_(ImeSetCompositionString)
- FE(ImeToAsciiEx)
- FE_(ImeUnregisterWord)
- FE(NotifyIME)
-
- if ( fError )
- return FALSE;
-
- FE_(ImeGetImeMenuItems)
-
- #undef FE
- #undef FE_
-
- return TRUE;
-}
-
-
-static IMM32_IMEKL* IMM32_LoadIME( HKL hkl )
-{
- IMM32_IMEKL* pkl = NULL;
- BOOL fInitialized = FALSE;
- CHAR* pszFileName = NULL;
- DWORD dwBufLen;
- IMM32_pImeInquireA pImeInquire;
- IMM32_pImeDestroy pImeDestroy = NULL;
- CHAR szUIClassName[ (IMM32_UICLASSNAME_MAX+1)*sizeof(WCHAR) ];
-
- dwBufLen = IMM32_GetIMEFileName( hkl, NULL, 0 );
- if ( dwBufLen == 0 )
- goto err;
- pszFileName = (CHAR*)IMM32_HeapAlloc( 0, sizeof(CHAR)*(dwBufLen+1) );
- if ( pszFileName == NULL )
- {
- SetLastError( ERROR_OUTOFMEMORY );
- goto err;
- }
- if ( !IMM32_GetIMEFileName( hkl, pszFileName, dwBufLen + 1 ) )
- goto err;
-
- pkl = (IMM32_IMEKL*)
- IMM32_HeapAlloc( HEAP_ZERO_MEMORY, sizeof(IMM32_IMEKL) );
- if ( pkl == NULL )
- {
- SetLastError( ERROR_OUTOFMEMORY );
- goto err;
- }
-
- pkl->pNext = NULL;
- pkl->hkl = hkl;
- pkl->hInstIME = LoadLibraryA( pszFileName );
- if ( pkl->hInstIME == (HINSTANCE)NULL )
- goto err;
-
- pImeInquire = (IMM32_pImeInquireA)GetProcAddress
- ( pkl->hInstIME, "ImeInquire" );
- pImeDestroy = (IMM32_pImeDestroy)GetProcAddress
- ( pkl->hInstIME, "ImeDestroy" );
- if ( pImeInquire == NULL || pImeDestroy == NULL )
- goto err;
-
- if ( !pImeInquire( &(pkl->imeinfo), szUIClassName, NULL ) )
- {
- SetLastError( ERROR_DLL_INIT_FAILED ); /* FIXME? */
- goto err;
- }
- fInitialized = TRUE;
-
- /* FIXME: Is this correct??? */
- if ( pkl->imeinfo.fdwProperty & IME_PROP_UNICODE )
- pkl->fUnicode = TRUE;
- else
- pkl->fUnicode = FALSE;
-
- if ( pkl->fUnicode )
- {
- if ( !IMM32_GetIMEHandlersW( pkl->hInstIME, &pkl->handlers ) )
- goto err;
- memcpy( pkl->UIClassName.W, szUIClassName,
- IMM32_UICLASSNAME_MAX*sizeof(WCHAR) );
- TRACE( "UI class name(Unicode): %s\n",
- debugstr_w(pkl->UIClassName.W) );
- }
- else
- {
- if ( !IMM32_GetIMEHandlersA( pkl->hInstIME, &pkl->handlers ) )
- goto err;
- memcpy( pkl->UIClassName.A, szUIClassName,
- IMM32_UICLASSNAME_MAX*sizeof(CHAR) );
- TRACE( "UI class name(ASCII): %s\n",
- debugstr_a(pkl->UIClassName.A) );
- }
-
- /* The IME is loaded successfully. */
- pkl->pszIMEFileName = pszFileName; pszFileName = NULL;
- return pkl;
-
-err:
- IMM32_HeapFree( pszFileName );
- if ( pkl != NULL )
- {
- if ( pkl->hInstIME != (HINSTANCE)NULL )
- {
- if ( fInitialized )
- (void)pImeDestroy(0);
- FreeLibrary( pkl->hInstIME );
- }
- IMM32_HeapFree( pkl );
- }
-
- return NULL;
-}
-
-
-const IMM32_IMEKL* IMM32_GetIME( HKL hkl )
-{
- IMM32_IMEKL* pkl;
-
- IMM32_Lock();
-
- pkl = IMM32_pklFirst;
- while ( pkl != NULL )
- {
- if ( pkl->hkl == hkl )
- goto end;
- pkl = pkl->pNext;
- }
-
- pkl = IMM32_LoadIME( hkl );
- if ( pkl != NULL )
- {
- pkl->pNext = IMM32_pklFirst;
- IMM32_pklFirst = pkl;
- }
-
-end:
- IMM32_Unlock();
-
- return pkl;
-}
-
-void IMM32_UnloadAllIMEs( void )
-{
- IMM32_IMEKL* pkl;
- IMM32_IMEKL* pklNext;
-
- IMM32_Lock();
-
- pkl = IMM32_pklFirst;
- while ( pkl != NULL )
- {
- TRACE( "hkl = %08x\n", (unsigned)pkl->hkl );
-
- pklNext = pkl->pNext;
- (void)pkl->handlers.pImeDestroy(0);
- FreeLibrary( pkl->hInstIME );
- IMM32_HeapFree( pkl->pszIMEFileName );
- IMM32_HeapFree( pkl );
- pkl = pklNext;
- }
- IMM32_pklFirst = NULL;
-
- IMM32_Unlock();
-}
-
-
-
-/***********************************************************************
- * ImmInstallIMEA (IMM32.@)
- */
-HKL WINAPI ImmInstallIMEA(
- LPCSTR lpszIMEFileName, LPCSTR lpszLayoutText)
-{
- HKL hkl;
- DWORD dwLCID;
- DWORD dwTryCount;
- LONG nError;
- HKEY hkey;
- DWORD dwDisposition;
- DWORD cbData;
- CHAR szValueName[ sizeof(IMM32_szIME_File) ];
-
- TRACE("(%s, %s)\n",
- debugstr_a(lpszIMEFileName), debugstr_a(lpszLayoutText) );
-
- dwLCID = (DWORD)GetThreadLocale();
- dwTryCount = 0;
-
- FIXME( "IMEs don't work correctly now since\n"
- "wine/windows/input.c doesn't handle HKL correctly.\n" );
-
- while ( 1 )
- {
- hkl = (HKL)(((0xe000|dwTryCount)<<16) | (dwLCID));
-
- nError = IMM32_RegCreateKey( hkl, &hkey, &dwDisposition );
- if ( nError != ERROR_SUCCESS )
- break;
-
- memcpy( szValueName, IMM32_szIME_File,
- sizeof(IMM32_szIME_File) );
-
- nError = RegQueryValueExA( hkey, szValueName, NULL,
- NULL, NULL, &cbData );
- if ( nError == ERROR_SUCCESS && cbData > 0 )
- {
- RegCloseKey( hkey );
-
- /* try to assign an other HKL. */
- dwTryCount ++;
- if ( dwTryCount >= 0x100 )
- {
- nError = ERROR_ACCESS_DENIED; /* FIXME */
- break;
- }
- continue;
- }
-
- nError = RegSetValueExA( hkey, IMM32_szIME_File, 0,
- REG_SZ, lpszIMEFileName,
- strlen(lpszIMEFileName)+1 );
- if ( nError == ERROR_SUCCESS )
- nError = RegSetValueExA( hkey, IMM32_szLayout_File, 0,
- REG_SZ, lpszLayoutText,
- strlen(lpszLayoutText)+1 );
- RegCloseKey( hkey );
- break;
- }
-
- if ( nError != ERROR_SUCCESS )
- {
- SetLastError( nError );
- return (HKL)NULL;
- }
-
- return hkl;
-}
-
-/***********************************************************************
- * ImmInstallIMEW (IMM32.@)
- */
-HKL WINAPI ImmInstallIMEW(
- LPCWSTR lpszIMEFileName, LPCWSTR lpszLayoutText)
-{
- LPSTR lpszParam1;
- LPSTR lpszParam2;
- HKL hkl;
-
- TRACE("(%s, %s)\n",
- debugstr_w(lpszIMEFileName), debugstr_w(lpszLayoutText) );
-
- lpszParam1 = IMM32_strdupWtoA( lpszIMEFileName );
- lpszParam2 = IMM32_strdupWtoA( lpszLayoutText );
- if ( ( lpszParam1 == NULL ) || ( lpszParam2 == NULL ) )
- {
- SetLastError( ERROR_OUTOFMEMORY );
- hkl = (HKL)NULL;
- }
- else
- {
- hkl = ImmInstallIMEA( lpszParam1, lpszParam2 );
- }
- IMM32_HeapFree( lpszParam1 );
- IMM32_HeapFree( lpszParam2 );
-
- return hkl;
-}
-
-
-/***********************************************************************
- * ImmIsIME (IMM32.@)
- */
-BOOL WINAPI ImmIsIME(HKL hkl)
-{
- const IMM32_IMEKL* pkl;
-
- TRACE("(0x%08x)\n", hkl);
-
- pkl = IMM32_GetIME( hkl );
- if ( pkl == NULL )
- return FALSE;
-
- return TRUE;
-}
-
-
-/***********************************************************************
- * ImmGetIMEFileNameA (IMM32.@)
- */
-UINT WINAPI ImmGetIMEFileNameA(HKL hkl, LPSTR lpszFileName, UINT uBufLen)
-{
- const IMM32_IMEKL* pkl;
- UINT uIMEFileNameLen;
-
- TRACE("(%08x,%p,%u)\n",hkl,lpszFileName,uBufLen);
-
- pkl = IMM32_GetIME( hkl );
- if ( pkl == NULL )
- return 0;
-
- uIMEFileNameLen = strlen(pkl->pszIMEFileName);
- if ( uBufLen == 0 )
- return uIMEFileNameLen;
- if ( uBufLen <= uIMEFileNameLen )
- {
- SetLastError(ERROR_INSUFFICIENT_BUFFER);
- return 0;
- }
- memcpy( lpszFileName, pkl->pszIMEFileName,
- sizeof(CHAR)*(uIMEFileNameLen+1) );
-
- return uIMEFileNameLen;
-}
-
-/***********************************************************************
- * ImmGetIMEFileNameW (IMM32.@)
- */
-UINT WINAPI ImmGetIMEFileNameW(HKL hkl, LPWSTR lpszFileName, UINT uBufLen)
-{
- const IMM32_IMEKL* pkl;
- UINT uIMEFileNameLen;
-
- TRACE("(%08x,%p,%u)\n",hkl,lpszFileName,uBufLen);
-
- pkl = IMM32_GetIME( hkl );
- if ( pkl == NULL )
- return 0;
-
- uIMEFileNameLen = IMM32_strlenAtoW(pkl->pszIMEFileName);
- if ( uBufLen == 0 )
- return uIMEFileNameLen;
- if ( uBufLen <= uIMEFileNameLen )
- {
- SetLastError(ERROR_INSUFFICIENT_BUFFER);
- return 0;
- }
- IMM32_strncpyAtoW( lpszFileName, pkl->pszIMEFileName, uBufLen );
-
- return uIMEFileNameLen;
-}
-
-/***********************************************************************
- * ImmGetProperty (IMM32.@)
- */
-DWORD WINAPI ImmGetProperty(HKL hkl, DWORD fdwIndex)
-{
- const IMM32_IMEKL* pkl;
- DWORD dwRet;
-
- TRACE("(0x%08x, %ld)\n", hkl, fdwIndex);
-
- pkl = IMM32_GetIME( hkl );
- if ( pkl == NULL )
- return 0;
-
- switch ( fdwIndex )
- {
- case IGP_GETIMEVERSION:
- dwRet = IMEVER_0400;
- break;
- case IGP_PROPERTY:
- dwRet = pkl->imeinfo.fdwProperty;
- break;
- case IGP_CONVERSION:
- dwRet = pkl->imeinfo.fdwConversionCaps;
- break;
- case IGP_SENTENCE:
- dwRet = pkl->imeinfo.fdwSentenceCaps;
- break;
- case IGP_UI:
- dwRet = pkl->imeinfo.fdwUICaps;
- break;
- case IGP_SETCOMPSTR:
- dwRet = pkl->imeinfo.fdwSCSCaps;
- break;
- case IGP_SELECT:
- dwRet = pkl->imeinfo.fdwSelectCaps;
- break;
- default:
- FIXME("(0x%08x, %ld): invalid/unknown property.\n",
- hkl, fdwIndex);
- SetLastError( ERROR_INVALID_PARAMETER );
- dwRet = 0;
- }
-
- return dwRet;
-}
-
-
-/***********************************************************************
- * ImmEnumRegisterWordA (IMM32.@)
- */
-UINT WINAPI ImmEnumRegisterWordA(
- HKL hkl, REGISTERWORDENUMPROCA lpfnEnumProc,
- LPCSTR lpszReading, DWORD dwStyle,
- LPCSTR lpszRegister, LPVOID lpData)
-{
- const IMM32_IMEKL* pkl;
-
- TRACE("(0x%08x, %p, %s, %ld, %s, %p)\n",
- hkl, lpfnEnumProc,
- debugstr_a(lpszReading), dwStyle,
- debugstr_a(lpszRegister), lpData);
-
- pkl = IMM32_GetIME( hkl );
- if ( pkl == NULL )
- return 0;
-
- if ( pkl->fUnicode )
- {
- FIXME( "please implement UNICODE->ANSI\n" );
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
- }
- else
- {
- return pkl->handlers.pImeEnumRegisterWord.A
- ( lpfnEnumProc, lpszReading, dwStyle,
- lpszRegister, lpData );
- }
-}
-
-/***********************************************************************
- * ImmEnumRegisterWordW (IMM32.@)
- */
-UINT WINAPI ImmEnumRegisterWordW(
- HKL hkl, REGISTERWORDENUMPROCW lpfnEnumProc,
- LPCWSTR lpszReading, DWORD dwStyle,
- LPCWSTR lpszRegister, LPVOID lpData)
-{
- const IMM32_IMEKL* pkl;
-
- TRACE("(0x%08x, %p, %s, %ld, %s, %p): stub\n",
- hkl, lpfnEnumProc,
- debugstr_w(lpszReading), dwStyle,
- debugstr_w(lpszRegister), lpData);
-
- pkl = IMM32_GetIME( hkl );
- if ( pkl == NULL )
- return 0;
-
- if ( pkl->fUnicode )
- {
- return pkl->handlers.pImeEnumRegisterWord.W
- ( lpfnEnumProc, lpszReading, dwStyle,
- lpszRegister, lpData );
- }
- else
- {
- FIXME( "please implement ANSI->UNICODE\n" );
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
- }
-}
-
-
-/***********************************************************************
- * ImmGetRegisterWordStyleA (IMM32.@)
- */
-UINT WINAPI ImmGetRegisterWordStyleA(
- HKL hkl, UINT nItem, LPSTYLEBUFA lpStyleBuf)
-{
- const IMM32_IMEKL* pkl;
-
- TRACE("(0x%08x, %d, %p)\n", hkl, nItem, lpStyleBuf);
-
- pkl = IMM32_GetIME( hkl );
- if ( pkl == NULL )
- return 0;
-
- if ( pkl->fUnicode )
- {
- FIXME( "please implement UNICODE->ANSI\n" );
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
- }
- else
- {
- return pkl->handlers.pImeGetRegisterWordStyle.A
- ( nItem, lpStyleBuf );
- }
-}
-
-/***********************************************************************
- * ImmGetRegisterWordStyleW (IMM32.@)
- */
-UINT WINAPI ImmGetRegisterWordStyleW(
- HKL hkl, UINT nItem, LPSTYLEBUFW lpStyleBuf)
-{
- const IMM32_IMEKL* pkl;
-
- TRACE("(0x%08x, %d, %p)\n", hkl, nItem, lpStyleBuf);
-
- pkl = IMM32_GetIME( hkl );
- if ( pkl == NULL )
- return 0;
-
- if ( pkl->fUnicode )
- {
- return pkl->handlers.pImeGetRegisterWordStyle.W
- ( nItem, lpStyleBuf );
- }
- else
- {
- FIXME( "please implement ANSI->UNICODE\n" );
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
- }
-}
-
-
diff --git a/dlls/imm32/imewnd.c b/dlls/imm32/imewnd.c
deleted file mode 100644
index 07ab5d0..0000000
--- a/dlls/imm32/imewnd.c
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Implementation of the 'IME window' class
- *
- * Copyright 2000 Hidenori Takeshima
- *
- *
- * FIXME:
- * - handle all messages.
- * - handle all notifications.
- *
- * 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
- */
-
-#include "config.h"
-
-#include "winbase.h"
-#include "windef.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "immddk.h"
-
-#include "wine/debug.h"
-WINE_DEFAULT_DEBUG_CHANNEL(imm);
-
-#include "imm_private.h"
-
-#define IMM32_CONVERSION_BUFSIZE 200
-
-static CHAR IMM32_szIMEClass[] = "IME";
-static CHAR IMM32_szIMEWindowName[] = "Default IME";
-
-typedef struct
-{
- HWND hwndSelf;
- HWND hwndActive;
- DWORD dwBufUsed;
- union
- {
- CHAR A[IMM32_CONVERSION_BUFSIZE];
- WCHAR W[IMM32_CONVERSION_BUFSIZE];
- } buf;
-} IMM32_IMEWNDPARAM;
-
-
-static BOOL IMM32_IsUIMessage( UINT nMsg );
-
-static
-LRESULT IMM32_IMEWnd_WM_KEYDOWN( IMM32_IMEWNDPARAM* pParam,
- WPARAM wParam, LPARAM lParam )
-{
- BYTE bKeyState[ 256 ];
- DWORD dwTransBufSize;
- UINT nNumOfMsg;
- LRESULT lr;
- HIMC hIMC;
- IMM32_IMC* pIMC;
- const IMM32_IMEKL* pkl;
-
- if ( pParam->hwndActive == (HWND)NULL )
- return 0;
-
- /* get context -> get pkl. */
- hIMC = ImmGetContext( pParam->hwndActive );
- if ( hIMC == NULLIMC )
- return 0;
- pIMC = IMM32_LockIMC( hIMC );
- if ( pIMC == NULL )
- {
- ImmReleaseContext( pParam->hwndActive, hIMC );
- return 0;
- }
- pkl = pIMC->pkl;
-
- GetKeyboardState( bKeyState );
- if ( !pkl->handlers.pImeProcessKey
- ( hIMC, wParam, lParam, bKeyState ) )
- {
- lr = SendMessageA( pParam->hwndActive, WM_IME_KEYDOWN,
- wParam, lParam );
- goto end;
- }
-
- dwTransBufSize = 0;
- nNumOfMsg = pkl->handlers.pImeToAsciiEx
- ( wParam, (lParam>>16)&0xff,
- bKeyState, &dwTransBufSize,
- 0, /* FIXME!!! - 1 if a menu is active */
- hIMC );
-
- /* FIXME - process generated messages */
- /* I cannot use ImmGenerateMessage() since
- * the IME window must handle generated messages. */
-
- /* NOTE - I must check pkl->fUnicode. */
- FIXME( "%d messages generated.\n", nNumOfMsg );
-
- lr = 0;
-end:
- IMM32_UnlockIMC( hIMC );
- ImmReleaseContext( pParam->hwndActive, hIMC );
-
- return lr;
-}
-
-static
-LRESULT IMM32_IMEWnd_WM_KEYUP( IMM32_IMEWNDPARAM* pParam,
- WPARAM wParam, LPARAM lParam )
-{
- BYTE bKeyState[ 256 ];
- LRESULT lr;
- HIMC hIMC;
- IMM32_IMC* pIMC;
- const IMM32_IMEKL* pkl;
-
- if ( pParam->hwndActive == (HWND)NULL )
- return 0;
-
- /* get context -> get pkl. */
- hIMC = ImmGetContext( pParam->hwndActive );
- if ( hIMC == NULLIMC )
- return 0;
- pIMC = IMM32_LockIMC( hIMC );
- if ( pIMC == NULL )
- {
- ImmReleaseContext( pParam->hwndActive, hIMC );
- return 0;
- }
- pkl = pIMC->pkl;
-
- GetKeyboardState( bKeyState );
- if ( !pkl->handlers.pImeProcessKey
- ( hIMC, wParam, lParam, bKeyState ) )
- {
- lr = SendMessageA( pParam->hwndActive, WM_IME_KEYUP,
- wParam, lParam );
- goto end;
- }
-
- lr = 0;
-end:
- IMM32_UnlockIMC( hIMC );
- ImmReleaseContext( pParam->hwndActive, hIMC );
-
- return lr;
-}
-
-
-static
-LRESULT CALLBACK IMM32_IMEWndProc( HWND hwnd, UINT nMsg,
- WPARAM wParam, LPARAM lParam )
-{
- IMM32_IMEWNDPARAM* pParam =
- (IMM32_IMEWNDPARAM*)GetWindowLongA( hwnd, 0L );
-
- if ( nMsg == WM_CREATE )
- {
- pParam = (IMM32_IMEWNDPARAM*)IMM32_HeapAlloc(
- HEAP_ZERO_MEMORY, sizeof(IMM32_IMEWNDPARAM) );
- if ( pParam == NULL )
- return -1L;
- SetWindowLongA( hwnd, 0L, (LONG)pParam );
-
- /* Initialize pParam. */
- pParam->hwndSelf = hwnd;
- pParam->hwndActive = (HWND)NULL;
- pParam->dwBufUsed = 0;
-
- return 0;
- }
- else if ( nMsg == WM_DESTROY )
- {
- /* Uninitialize pParam. */
-
- IMM32_HeapFree( pParam );
- SetWindowLongA( hwnd, 0L, (LONG)NULL );
- return 0;
- }
-
- if ( pParam == NULL )
- {
- if ( IMM32_IsUIMessage( nMsg ) )
- return 0;
- return DefWindowProcA( hwnd, nMsg, wParam, lParam );
- }
-
- /* FIXME - handle all messages. */
- /* FIXME - handle all notifications. */
- switch ( nMsg )
- {
- case WM_KEYDOWN:
- return IMM32_IMEWnd_WM_KEYDOWN( pParam, wParam, lParam );
- case WM_KEYUP:
- return IMM32_IMEWnd_WM_KEYUP( pParam, wParam, lParam );
- case WM_IME_KEYDOWN:
- ERR( "Why WM_IME_KEYDOWN is generated?\n" );
- return 0;
- case WM_IME_KEYUP:
- ERR( "Why WM_IME_KEYUP is generated?\n" );
- return 0;
- case WM_IME_CHAR:
- FIXME( "ignore WM_IME_CHAR - wParam %08x, lParam %08lx.\n",
- wParam, lParam );
- return 0;
- case WM_CHAR:
- /* TranslateMessage don't support IME HKL. - FIXME? */
- FIXME( "ignore WM_CHAR - wParam %08x, lParam %08lx.\n",
- wParam, lParam );
- return 0;
- case WM_IME_CONTROL:
- case WM_IME_REQUEST:
- 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. */
- FIXME( "handle message %08x\n", nMsg );
- return 0;
- }
-
- return DefWindowProcA( hwnd, nMsg, wParam, lParam );
-}
-
-
-/***********************************************************************
- * IMM32_RegisterClass (internal)
- */
-BOOL IMM32_RegisterIMEWndClass( HINSTANCE hInstDLL )
-{
- WNDCLASSA wc;
-
- /* SDK says the "IME" window class is a system global class. */
- wc.style = CS_GLOBALCLASS;
- wc.lpfnWndProc = IMM32_IMEWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = sizeof(LONG);
- wc.hInstance = hInstDLL;
- wc.hIcon = (HICON)NULL;
- wc.hCursor = LoadCursorA((HINSTANCE)NULL,IDC_ARROWA);
- wc.hbrBackground = (HBRUSH)NULL;
- wc.lpszMenuName = NULL;
- wc.lpszClassName = IMM32_szIMEClass;
- if ( !RegisterClassA( &wc ) )
- return FALSE;
-
- return TRUE;
-}
-
-/***********************************************************************
- * IMM32_UnregisterClass (internal)
- */
-void IMM32_UnregisterIMEWndClass( HINSTANCE hInstDLL )
-{
- (void)UnregisterClassA( IMM32_szIMEClass, hInstDLL );
-}
-
-/***********************************************************************
- * IMM32_CreateDefaultIMEWnd (internal)
- */
-
-HWND IMM32_CreateDefaultIMEWnd( void )
-{
- return CreateWindowExA( 0L,
- IMM32_szIMEClass,
- IMM32_szIMEWindowName,
- WS_POPUP | WS_CLIPSIBLINGS | WS_OVERLAPPED,
- 0, 0, 0, 0,
- (HWND)NULL,
- (HMENU)NULL,
- (HINSTANCE)GetModuleHandleA(NULL),
- NULL );
-}
-
-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;
-}
diff --git a/dlls/imm32/imm.c b/dlls/imm32/imm.c
index 0e5dbaf..a1f3b0a 100644
--- a/dlls/imm32/imm.c
+++ b/dlls/imm32/imm.c
@@ -1,7 +1,8 @@
/*
- * IMM32 stubs - please implement!
+ * IMM32 - Input Method contexts Manager ???
*
- * Copyright 1998 Patrik Stridvall
+ * 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
@@ -16,18 +17,25 @@
* 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.@)
*/
@@ -35,6 +43,9 @@
{
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;
}
@@ -44,6 +55,8 @@
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
);
@@ -57,6 +70,8 @@
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
);
@@ -82,6 +97,7 @@
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
);
@@ -96,6 +112,7 @@
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
);
@@ -110,6 +127,7 @@
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
@@ -124,6 +142,7 @@
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;
@@ -135,6 +154,7 @@
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;
@@ -147,6 +167,7 @@
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
@@ -161,6 +182,8 @@
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;
@@ -171,6 +194,7 @@
*/
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;
@@ -181,6 +205,7 @@
*/
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;
@@ -192,6 +217,7 @@
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
@@ -216,6 +242,7 @@
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
@@ -238,6 +265,8 @@
*/
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;
@@ -248,6 +277,8 @@
*/
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;
@@ -261,6 +292,7 @@
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
);
@@ -276,6 +308,7 @@
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
);
@@ -289,6 +322,8 @@
BOOL WINAPI ImmGetConversionStatus(
HIMC hIMC, LPDWORD lpfdwConversion, LPDWORD lpfdwSentence)
{
+ /* hard -> pretend? */
+
FIXME("(0x%08x, %p, %p): stub\n",
hIMC, lpfdwConversion, lpfdwSentence
);
@@ -301,6 +336,7 @@
*/
HWND WINAPI ImmGetDefaultIMEWnd(HWND hWnd)
{
+ /* hard to implement with XIM */
FIXME("(0x%08x): stub\n", hWnd);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return (HWND)NULL;
@@ -337,6 +373,8 @@
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
);
@@ -349,6 +387,8 @@
*/
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
);
@@ -361,6 +401,8 @@
*/
BOOL WINAPI ImmGetOpenStatus(HIMC hIMC)
{
+ /* return whether XIC is activated */
+
FIXME("(0x%08x): stub\n", hIMC);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
@@ -371,6 +413,8 @@
*/
BOOL WINAPI ImmGetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos)
{
+ /* hard??? */
+
FIXME("(0x%08x, %p): stub\n", hIMC, lpptPos);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
@@ -381,6 +425,7 @@
*/
UINT WINAPI ImmGetVirtualKey(HWND hWnd)
{
+ /* hard??? */
OSVERSIONINFOA version;
FIXME("(0x%08x): stub\n", hWnd);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
@@ -404,6 +449,7 @@
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
);
@@ -417,6 +463,7 @@
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)
);
@@ -430,6 +477,7 @@
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)
);
@@ -442,6 +490,8 @@
*/
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;
@@ -453,6 +503,8 @@
BOOL WINAPI ImmSetCandidateWindow(
HIMC hIMC, LPCANDIDATEFORM lpCandidate)
{
+ /* hard??? */
+
FIXME("(0x%08x, %p): stub\n", hIMC, lpCandidate);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
@@ -463,6 +515,7 @@
*/
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;
@@ -473,6 +526,7 @@
*/
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;
@@ -486,6 +540,8 @@
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
);
@@ -501,6 +557,8 @@
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
);
@@ -514,6 +572,8 @@
BOOL WINAPI ImmSetCompositionWindow(
HIMC hIMC, LPCOMPOSITIONFORM lpCompForm)
{
+ /* hard??? */
+
FIXME("(0x%08x, %p): stub\n", hIMC, lpCompForm);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
@@ -525,6 +585,7 @@
BOOL WINAPI ImmSetConversionStatus(
HIMC hIMC, DWORD fdwConversion, DWORD fdwSentence)
{
+ /* hard to implement with XIM? */
FIXME("(0x%08x, %ld, %ld): stub\n",
hIMC, fdwConversion, fdwSentence
);
@@ -537,6 +598,8 @@
*/
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;
@@ -547,6 +610,8 @@
*/
BOOL WINAPI ImmSetStatusWindowPos(HIMC hIMC, LPPOINT lpptPos)
{
+ /* hard??? */
+
FIXME("(0x%08x, %p): stub\n", hIMC, lpptPos);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
@@ -557,6 +622,8 @@
*/
BOOL WINAPI ImmSimulateHotKey(HWND hWnd, DWORD dwHotKeyID)
{
+ /* hard??? */
+
FIXME("(0x%08x, %ld): stub\n", hWnd, dwHotKeyID);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
@@ -568,6 +635,7 @@
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)
);
@@ -581,6 +649,7 @@
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)
);
@@ -593,6 +662,7 @@
*/
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;
@@ -603,6 +673,7 @@
*/
BOOL WINAPI ImmDestroySoftKeyboard(HWND hwndSoftKeyboard)
{
+ /* hard to implement with XIM */
FIXME("(0x%08x): stub\n", (unsigned)hwndSoftKeyboard);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
@@ -613,6 +684,7 @@
*/
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;
@@ -624,6 +696,8 @@
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);
@@ -636,6 +710,8 @@
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);
@@ -647,10 +723,638 @@
*/
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;
+}
diff --git a/dlls/imm32/imm_private.h b/dlls/imm32/imm_private.h
deleted file mode 100644
index 7603fcf..0000000
--- a/dlls/imm32/imm_private.h
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * private header for implementing IMM.
- *
- * Copyright 2000 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
- */
-
-typedef struct IMM32_tagTHREADDATA IMM32_THREADDATA;
-
-struct IMM32_tagTHREADDATA
-{
- HWND hwndIME;
- HIMC hIMC;
-};
-
-typedef struct IMM32_tagMOVEABLEMEM IMM32_MOVEABLEMEM;
-
-/* IME APIs */
-
-typedef BOOL (WINAPI *IMM32_pImeInquireA)(LPIMEINFO, LPSTR, LPCSTR);
-typedef BOOL (WINAPI *IMM32_pImeInquireW)(LPIMEINFO, LPWSTR, LPCWSTR);
-
-typedef BOOL (WINAPI *IMM32_pImeConfigureA)(HKL, HWND, DWORD, LPVOID);
-typedef BOOL (WINAPI *IMM32_pImeConfigureW)(HKL, HWND, DWORD, LPVOID);
-typedef DWORD (WINAPI *IMM32_pImeConversionListA)
- (HIMC, LPCSTR, LPCANDIDATELIST, DWORD, UINT);
-typedef DWORD (WINAPI *IMM32_pImeConversionListW)
- (HIMC, LPCWSTR, LPCANDIDATELIST, DWORD, UINT);
-typedef BOOL (WINAPI *IMM32_pImeDestroy)(UINT);
-typedef UINT (WINAPI *IMM32_pImeEnumRegisterWordA)
- (REGISTERWORDENUMPROCA, LPCSTR, DWORD, LPCSTR, LPVOID);
-typedef UINT (WINAPI *IMM32_pImeEnumRegisterWordW)
- (REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, LPVOID);
-typedef UINT (WINAPI *IMM32_pImeGetRegisterWordStyleA)(UINT, LPSTYLEBUFA);
-typedef UINT (WINAPI *IMM32_pImeGetRegisterWordStyleW)(UINT, LPSTYLEBUFW);
-typedef LRESULT (WINAPI *IMM32_pImeEscapeA)(HIMC, UINT, LPVOID);
-typedef LRESULT (WINAPI *IMM32_pImeEscapeW)(HIMC, UINT, LPVOID);
-typedef BOOL (WINAPI *IMM32_pImeProcessKey)(HIMC, UINT, LPARAM, CONST LPBYTE);
-typedef BOOL (WINAPI *IMM32_pImeRegisterWordA)(LPCSTR, DWORD, LPCSTR);
-typedef BOOL (WINAPI *IMM32_pImeRegisterWordW)(LPCWSTR, DWORD, LPCWSTR);
-typedef BOOL (WINAPI *IMM32_pImeSelect)(HIMC, BOOL);
-typedef BOOL (WINAPI *IMM32_pImeSetActiveContext)(HIMC, BOOL);
-typedef BOOL (WINAPI *IMM32_pImeSetCompositionStringA)
- (HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
-typedef BOOL (WINAPI *IMM32_pImeSetCompositionStringW)
- (HIMC, DWORD, LPCVOID, DWORD, LPCVOID, DWORD);
-typedef UINT (WINAPI *IMM32_pImeToAsciiEx)
- (UINT, UINT, CONST LPBYTE, LPDWORD, UINT, HIMC);
-typedef BOOL (WINAPI *IMM32_pImeUnregisterWordA)(LPCSTR, DWORD, LPCSTR);
-typedef BOOL (WINAPI *IMM32_pImeUnregisterWordW)(LPCWSTR, DWORD, LPCWSTR);
-typedef BOOL (WINAPI *IMM32_pNotifyIME)(HIMC, DWORD, DWORD, DWORD);
-
-/* for Win98 and later */
-typedef DWORD (WINAPI *IMM32_pImeGetImeMenuItemsA)
- (HIMC, DWORD, DWORD, LPIMEMENUITEMINFOA, LPIMEMENUITEMINFOA, DWORD);
-typedef DWORD (WINAPI *IMM32_pImeGetImeMenuItemsW)
- (HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD);
-
-struct IMM32_IME_EXPORTED_HANDLERS
-{
- union
- {
- IMM32_pImeInquireA A;
- IMM32_pImeInquireW W;
- } pImeInquire;
-
- union
- {
- IMM32_pImeConfigureA A;
- IMM32_pImeConfigureW W;
- } pImeConfigure;
- union
- {
- IMM32_pImeConversionListA A;
- IMM32_pImeConversionListW W;
- } pImeConversionList;
- IMM32_pImeDestroy pImeDestroy;
- union
- {
- IMM32_pImeEnumRegisterWordA A;
- IMM32_pImeEnumRegisterWordW W;
- } pImeEnumRegisterWord;
- union
- {
- IMM32_pImeGetRegisterWordStyleA A;
- IMM32_pImeGetRegisterWordStyleW W;
- } pImeGetRegisterWordStyle;
- union
- {
- IMM32_pImeEscapeA A;
- IMM32_pImeEscapeW W;
- } pImeEscape;
- IMM32_pImeProcessKey pImeProcessKey;
- union
- {
- IMM32_pImeRegisterWordA A;
- IMM32_pImeRegisterWordW W;
- } pImeRegisterWord;
- IMM32_pImeSelect pImeSelect;
- IMM32_pImeSetActiveContext pImeSetActiveContext;
- union
- {
- IMM32_pImeSetCompositionStringA A;
- IMM32_pImeSetCompositionStringW W;
- } pImeSetCompositionString;
- IMM32_pImeToAsciiEx pImeToAsciiEx;
- union
- {
- IMM32_pImeUnregisterWordA A;
- IMM32_pImeUnregisterWordW W;
- } pImeUnregisterWord;
- IMM32_pNotifyIME pNotifyIME;
-
- /* for Win98 and later */
- union
- {
- IMM32_pImeGetImeMenuItemsA A;
- IMM32_pImeGetImeMenuItemsW W;
- } pImeGetImeMenuItems;
-};
-
-typedef struct IMM32_tagIMEKL IMM32_IMEKL;
-typedef struct IMM32_tagIMC IMM32_IMC;
-
-/* Win9x DDK says the UI class name can be up to 16 TCHARs. */
-#define IMM32_UICLASSNAME_MAX 16
-
-struct IMM32_tagIMEKL
-{
- IMM32_IMEKL* pNext;
- HKL hkl;
- BOOL fUnicode;
- HINSTANCE hInstIME;
- LPSTR pszIMEFileName;
- IMEINFO imeinfo;
- struct IMM32_IME_EXPORTED_HANDLERS handlers;
- union
- {
- CHAR A[IMM32_UICLASSNAME_MAX];
- WCHAR W[IMM32_UICLASSNAME_MAX];
- } UIClassName;
-};
-
-struct IMM32_tagIMC
-{
- INPUTCONTEXT context;
- const IMM32_IMEKL* pkl;
- BOOL fSelected;
-};
-
-
-
-
-
-/* main.c */
-LPVOID IMM32_HeapAlloc( DWORD dwFlags, DWORD dwSize );
-LPVOID IMM32_HeapReAlloc( DWORD dwFlags, LPVOID lpv, DWORD dwSize );
-void IMM32_HeapFree( LPVOID lpv );
-IMM32_THREADDATA* IMM32_GetThreadData( void );
-HIMC IMM32_GetDefaultContext( void );
-HWND IMM32_GetDefaultIMEWnd( void );
-void IMM32_Lock( void );
-void IMM32_Unlock( void );
-
-/* memory.c */
-IMM32_MOVEABLEMEM* IMM32_MoveableAlloc( DWORD dwHeapFlags, DWORD dwHeapSize );
-void IMM32_MoveableFree( IMM32_MOVEABLEMEM* lpMoveable );
-BOOL IMM32_MoveableReAlloc( IMM32_MOVEABLEMEM* lpMoveable,
- DWORD dwHeapFlags, DWORD dwHeapSize );
-LPVOID IMM32_MoveableLock( IMM32_MOVEABLEMEM* lpMoveable );
-BOOL IMM32_MoveableUnlock( IMM32_MOVEABLEMEM* lpMoveable );
-DWORD IMM32_MoveableGetLockCount( IMM32_MOVEABLEMEM* lpMoveable );
-DWORD IMM32_MoveableGetSize( IMM32_MOVEABLEMEM* lpMoveable );
-
-/* string.c */
-INT IMM32_strlenAtoW( LPCSTR lpstr );
-INT IMM32_strlenWtoA( LPCWSTR lpwstr );
-LPWSTR IMM32_strncpyAtoW( LPWSTR lpwstr, LPCSTR lpstr, INT wbuflen );
-LPSTR IMM32_strncpyWtoA( LPSTR lpstr, LPCWSTR lpwstr, INT abuflen );
-LPWSTR IMM32_strdupAtoW( LPCSTR lpstr );
-LPSTR IMM32_strdupWtoA( LPCWSTR lpwstr );
-
-/* imewnd.c */
-BOOL IMM32_RegisterIMEWndClass( HINSTANCE hInstDLL );
-void IMM32_UnregisterIMEWndClass( HINSTANCE hInstDLL );
-HWND IMM32_CreateDefaultIMEWnd( void );
-
-/* imekl.c */
-const IMM32_IMEKL* IMM32_GetIME( HKL hkl );
-void IMM32_UnloadAllIMEs( void );
-
-/* imc.c */
-IMM32_IMC* IMM32_LockIMC( HIMC hIMC );
-BOOL IMM32_UnlockIMC( HIMC hIMC );
-
-
diff --git a/dlls/imm32/immddk.h b/dlls/imm32/immddk.h
index 662a8c2..e2f1780 100644
--- a/dlls/imm32/immddk.h
+++ b/dlls/imm32/immddk.h
@@ -23,34 +23,6 @@
#include "imm.h"
-#define NULLIMC ((HIMC)0)
-
-/* offsets for WndExtra */
-#define IMMGWL_IMC 0
-#define IMMGWL_PRIVATE (sizeof(LONG))
-
-/* INPUTCONTEXT.fdwInit */
-#define INIT_STATUSWNDPOS 0x00000001
-#define INIT_CONVERSION 0x00000002
-#define INIT_SENTENCE 0x00000004
-#define INIT_LOGFONT 0x00000008
-#define INIT_COMPFORM 0x00000010
-#define INIT_SOFTKBDPOS 0x00000020
-
-/* IMEINFO.fdwProperty (low-order word) */
-#define IME_PROP_END_UNLOAD 0x00000001
-#define IME_PROP_KBD_CHAR_FIRST 0x00000002
-#define IME_PROP_IGNORE_UPKEYS 0x00000004
-#define IME_PROP_NEED_ALTKEY 0x00000008
-#define IME_PROP_NO_KEYS_ON_CLOSE 0x00000010
-/* IMEINFO.fdwProperty (high-order word) */
-#define IME_PROP_AT_CARET 0x00010000
-#define IME_PROP_SPECIAL_UI 0x00020000
-#define IME_PROP_CANDLIST_START_FROM_1 0x00040000
-#define IME_PROP_UNICODE 0x00080000
-#define IME_PROP_COMPLETE_ON_UNSELECT 0x00100000
-
-
/*** IMM and IME Structures ***/
typedef struct tagINPUTCONTEXT {
diff --git a/dlls/imm32/main.c b/dlls/imm32/main.c
deleted file mode 100644
index 0fa8f0a..0000000
--- a/dlls/imm32/main.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * The entry point of IMM32.DLL.
- *
- * Copyright 2000 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
- */
-
-#include "config.h"
-
-#include "winbase.h"
-#include "windef.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "immddk.h"
-
-#include "wine/debug.h"
-WINE_DEFAULT_DEBUG_CHANNEL(imm);
-
-#include "imm_private.h"
-
-static HANDLE IMM32_hHeap;
-static DWORD IMM32_dwTLSIndex;
-static CRITICAL_SECTION IMM32_csIMM;
-
-static BOOL IMM32_InitProcessMem( void );
-static void IMM32_CleanupProcessMem( void );
-static void IMM32_InitThreadData( void );
-static void IMM32_CleanupThreadData( void );
-
-
-/***********************************************************************
- * IMM32_DllMain
- */
-BOOL WINAPI IMM32_DllMain(
- HINSTANCE hInstDLL,
- DWORD fdwReason,
- LPVOID lpvReserved )
-{
- switch ( fdwReason )
- {
- case DLL_PROCESS_ATTACH:
- IMM32_InitProcessMem();
- IMM32_RegisterIMEWndClass( hInstDLL );
- break;
- case DLL_PROCESS_DETACH:
- IMM32_UnloadAllIMEs();
- IMM32_UnregisterIMEWndClass( hInstDLL );
- IMM32_CleanupProcessMem();
- break;
- case DLL_THREAD_ATTACH:
- IMM32_InitThreadData();
- break;
- case DLL_THREAD_DETACH:
- IMM32_CleanupThreadData();
- break;
- }
-
- return TRUE;
-}
-
-static BOOL IMM32_InitProcessMem( void )
-{
- IMM32_hHeap = (HANDLE)NULL;
- IMM32_dwTLSIndex = (DWORD)0xffffffff;
-
- IMM32_hHeap = HeapCreate( 0, 0x10000, 0 );
- if ( IMM32_hHeap == (HANDLE)NULL )
- {
- ERR( "cannot allocate heap for IMM32.\n" );
- return FALSE;
- }
-
- IMM32_dwTLSIndex = TlsAlloc();
- if ( IMM32_dwTLSIndex == (DWORD)0xffffffff )
- {
- ERR( "cannot allocate a TLS for IMM.\n" );
- return FALSE;
- }
-
- InitializeCriticalSection( &IMM32_csIMM );
-
- return TRUE;
-}
-
-static void IMM32_CleanupProcessMem( void )
-{
- DeleteCriticalSection( &IMM32_csIMM );
-
- if ( IMM32_dwTLSIndex != (DWORD)0xffffffff )
- {
- TlsFree( IMM32_dwTLSIndex );
- IMM32_dwTLSIndex = (DWORD)0xffffffff;
- }
-
- if ( IMM32_hHeap != (HANDLE)NULL )
- {
- (void)HeapDestroy( IMM32_hHeap );
- IMM32_hHeap = (HANDLE)NULL;
- }
-}
-
-LPVOID IMM32_HeapAlloc( DWORD dwFlags, DWORD dwSize )
-{
- return HeapAlloc( IMM32_hHeap, dwFlags, dwSize );
-}
-
-LPVOID IMM32_HeapReAlloc( DWORD dwFlags, LPVOID lpv, DWORD dwSize )
-{
- return HeapReAlloc( IMM32_hHeap, dwFlags, lpv, dwSize );
-}
-
-void IMM32_HeapFree( LPVOID lpv )
-{
- if ( lpv != NULL )
- HeapFree( IMM32_hHeap, 0, lpv );
-}
-
-
-static void IMM32_InitThreadData( void )
-{
- TlsSetValue( IMM32_dwTLSIndex, NULL );
-}
-
-static void IMM32_CleanupThreadData( void )
-{
- IMM32_THREADDATA* pData;
-
- pData = (IMM32_THREADDATA*)TlsGetValue( IMM32_dwTLSIndex );
- if ( pData != NULL )
- {
- /* Destroy Thread-local Data. */
- if ( pData->hwndIME != (HWND)NULL )
- DestroyWindow( pData->hwndIME );
- if ( pData->hIMC != NULLIMC )
- ImmDestroyContext( pData->hIMC );
-
- IMM32_HeapFree( pData );
- TlsSetValue( IMM32_dwTLSIndex, NULL );
- }
-}
-
-IMM32_THREADDATA* IMM32_GetThreadData( void )
-{
- IMM32_THREADDATA* pData;
-
- pData = (IMM32_THREADDATA*)TlsGetValue( IMM32_dwTLSIndex );
- if ( pData != NULL )
- return pData;
-
- pData = (IMM32_THREADDATA*)
- IMM32_HeapAlloc( 0, sizeof(IMM32_THREADDATA) );
- if ( pData == NULL )
- return NULL;
-
- /* Initialize Thread-local Data. */
- pData->hwndIME = (HWND)NULL;
- pData->hIMC = NULLIMC;
-
- TlsSetValue( IMM32_dwTLSIndex, pData );
-
- return pData;
-}
-
-HIMC IMM32_GetDefaultContext( void )
-{
- IMM32_THREADDATA* pData;
-
- pData = IMM32_GetThreadData();
- if ( pData == NULL )
- return NULLIMC;
- if ( pData->hIMC == NULLIMC )
- pData->hIMC = ImmCreateContext();
-
- return pData->hIMC;
-}
-
-HWND IMM32_GetDefaultIMEWnd( void )
-{
- IMM32_THREADDATA* pData;
-
- pData = IMM32_GetThreadData();
- if ( pData == NULL )
- return NULLIMC;
- if ( pData->hwndIME == (HWND)NULL )
- pData->hwndIME = IMM32_CreateDefaultIMEWnd();
-
- return pData->hwndIME;
-}
-
-
-void IMM32_Lock( void )
-{
- EnterCriticalSection( &IMM32_csIMM );
-}
-
-void IMM32_Unlock( void )
-{
- LeaveCriticalSection( &IMM32_csIMM );
-}
diff --git a/dlls/imm32/memory.c b/dlls/imm32/memory.c
deleted file mode 100644
index 375caae..0000000
--- a/dlls/imm32/memory.c
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * This file implements 'moveable' memory block.
- *
- * Copyright 2000 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
- */
-
-#include "config.h"
-
-#include "winbase.h"
-#include "windef.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "immddk.h"
-#include "wine/debug.h"
-WINE_DEFAULT_DEBUG_CHANNEL(imm);
-
-#include "imm_private.h"
-
-#define IMM32_MOVEABLEMEM_LOCK_MAX ((DWORD)0xffffffff)
-
-struct IMM32_tagMOVEABLEMEM
-{
- DWORD dwLockCount;
- DWORD dwSize;
- LPVOID lpvMem;
-};
-
-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;
-}
-
-void IMM32_MoveableFree( IMM32_MOVEABLEMEM* lpMoveable )
-{
- IMM32_HeapFree( lpMoveable->lpvMem );
- IMM32_HeapFree( lpMoveable );
-}
-
-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;
-}
-
-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;
-}
-
-BOOL IMM32_MoveableUnlock( IMM32_MOVEABLEMEM* lpMoveable )
-{
- if ( lpMoveable->dwLockCount == 0 )
- return FALSE;
-
- if ( --lpMoveable->dwLockCount > 0 )
- return TRUE;
-
- return FALSE;
-}
-
-DWORD IMM32_MoveableGetLockCount( IMM32_MOVEABLEMEM* lpMoveable )
-{
- return lpMoveable->dwLockCount;
-}
-
-DWORD IMM32_MoveableGetSize( IMM32_MOVEABLEMEM* lpMoveable )
-{
- return lpMoveable->dwSize;
-}
-
-
-
-/***********************************************************************
- * ImmCreateIMCC (IMM32.@)
- *
- * Create IMCC(IMC Component).
- */
-HIMCC WINAPI ImmCreateIMCC(DWORD dwSize)
-{
- IMM32_MOVEABLEMEM* lpMoveable;
-
- TRACE("(%lu)\n", dwSize);
-
- lpMoveable = IMM32_MoveableAlloc( HEAP_ZERO_MEMORY, dwSize );
- if ( lpMoveable == NULL )
- {
- SetLastError(ERROR_OUTOFMEMORY);
- return (HIMCC)NULL;
- }
-
- return (HIMCC)lpMoveable;
-}
-
-/***********************************************************************
- * ImmDestroyIMCC (IMM32.@)
- *
- * Destroy IMCC(IMC Component).
- */
-HIMCC WINAPI ImmDestroyIMCC(HIMCC hIMCC)
-{
- TRACE("(0x%08x)\n", (unsigned)hIMCC);
-
- IMM32_MoveableFree( (IMM32_MOVEABLEMEM*)hIMCC );
- return (HIMCC)NULL;
-}
-
-/***********************************************************************
- * ImmLockIMCC (IMM32.@)
- */
-LPVOID WINAPI ImmLockIMCC(HIMCC hIMCC)
-{
- TRACE("(0x%08x)\n", (unsigned)hIMCC);
-
- return IMM32_MoveableLock( (IMM32_MOVEABLEMEM*)hIMCC );
-}
-
-/***********************************************************************
- * ImmUnlockIMCC (IMM32.@)
- */
-BOOL WINAPI ImmUnlockIMCC(HIMCC hIMCC)
-{
- TRACE("(0x%08x)\n", (unsigned)hIMCC);
-
- return IMM32_MoveableUnlock( (IMM32_MOVEABLEMEM*)hIMCC );
-}
-
-/***********************************************************************
- * ImmGetIMCCLockCount (IMM32.@)
- */
-DWORD WINAPI ImmGetIMCCLockCount(HIMCC hIMCC)
-{
- TRACE("(0x%08x)\n", (unsigned)hIMCC);
-
- return IMM32_MoveableGetLockCount( (IMM32_MOVEABLEMEM*)hIMCC );
-}
-
-/***********************************************************************
- * ImmReSizeIMCC (IMM32.@)
- */
-HIMCC WINAPI ImmReSizeIMCC(HIMCC hIMCC, DWORD dwSize)
-{
- TRACE("(0x%08x,%lu)\n", (unsigned)hIMCC, dwSize);
-
- 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);
-
- return IMM32_MoveableGetSize( (IMM32_MOVEABLEMEM*)hIMCC );
-}
-
-
diff --git a/dlls/imm32/string.c b/dlls/imm32/string.c
deleted file mode 100644
index a1ae297..0000000
--- a/dlls/imm32/string.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Helper functions for ANSI<->UNICODE string conversion
- *
- * Copyright 2000 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
- */
-
-#include "config.h"
-
-#include "winbase.h"
-#include "windef.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winerror.h"
-#include "winnls.h"
-#include "immddk.h"
-#include "wine/debug.h"
-WINE_DEFAULT_DEBUG_CHANNEL(imm);
-
-#include "imm_private.h"
-
-
-INT IMM32_strlenAtoW( LPCSTR lpstr )
-{
- INT len;
-
- len = MultiByteToWideChar( CP_ACP, 0, lpstr, -1, NULL, 0 );
- return ( len > 0 ) ? (len-1) : 0;
-}
-
-INT IMM32_strlenWtoA( LPCWSTR lpwstr )
-{
- INT len;
-
- len = WideCharToMultiByte( CP_ACP, 0, lpwstr, -1,
- NULL, 0, NULL, NULL );
- return ( len > 0 ) ? (len-1) : 0;
-}
-
-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;
-}
-
-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;
-}
-
-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;
-}
-
-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;
-}