Browse Source

+ Added extapi and imm wince api units by Vasil Maximov.
* Updated some existing wince api units by Vasil Maximov.

git-svn-id: trunk@12839 -

yury 16 years ago
parent
commit
08b551b504

+ 2 - 0
.gitattributes

@@ -4684,9 +4684,11 @@ packages/winceunits/src/connmgr.pp svneol=native#text/plain
 packages/winceunits/src/cpl.pp svneol=native#text/plain
 packages/winceunits/src/cpl.pp svneol=native#text/plain
 packages/winceunits/src/devload.pp svneol=native#text/plain
 packages/winceunits/src/devload.pp svneol=native#text/plain
 packages/winceunits/src/devmgmt.pp svneol=native#text/plain
 packages/winceunits/src/devmgmt.pp svneol=native#text/plain
+packages/winceunits/src/extapi.pp svneol=native#text/plain
 packages/winceunits/src/gpsapi.pp svneol=native#text/plain
 packages/winceunits/src/gpsapi.pp svneol=native#text/plain
 packages/winceunits/src/gx.pp svneol=native#text/plain
 packages/winceunits/src/gx.pp svneol=native#text/plain
 packages/winceunits/src/htmlctrl.pp svneol=native#text/plain
 packages/winceunits/src/htmlctrl.pp svneol=native#text/plain
+packages/winceunits/src/imm.pp svneol=native#text/plain
 packages/winceunits/src/iphlpapi.pp svneol=native#text/plain
 packages/winceunits/src/iphlpapi.pp svneol=native#text/plain
 packages/winceunits/src/keybd.pp svneol=native#text/plain
 packages/winceunits/src/keybd.pp svneol=native#text/plain
 packages/winceunits/src/mmreg.pp svneol=native#text/plain
 packages/winceunits/src/mmreg.pp svneol=native#text/plain

+ 17 - 3
packages/winceunits/Makefile

@@ -1,5 +1,5 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/01/10]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/03/01]
 #
 #
 default: all
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded
@@ -275,10 +275,10 @@ ifeq ($(FULL_TARGET),arm-wince)
 override TARGET_UNITS+=comobj buildwinceunits
 override TARGET_UNITS+=comobj buildwinceunits
 endif
 endif
 ifeq ($(FULL_TARGET),i386-wince)
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_IMPLICITUNITS+=aygshell commctrl commdlg iphlpapi notify oleauto power shellapi simmgr tapi gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror sip projects wap tsp activex ole2 comconst
+override TARGET_IMPLICITUNITS+=aygshell commctrl commdlg iphlpapi notify oleauto power shellapi simmgr tapi gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror sip projects wap tsp extapi imm activex ole2 comconst
 endif
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_IMPLICITUNITS+=aygshell commctrl commdlg iphlpapi notify oleauto power shellapi simmgr tapi gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror sip projects wap tsp activex ole2 comconst
+override TARGET_IMPLICITUNITS+=aygshell commctrl commdlg iphlpapi notify oleauto power shellapi simmgr tapi gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror sip projects wap tsp extapi imm activex ole2 comconst
 endif
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_RSTS+=comconst
 override TARGET_RSTS+=comconst
@@ -1022,6 +1022,7 @@ endif
 ifeq ($(OS_TARGET),go32v2)
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
 SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
 endif
 endif
 ifeq ($(OS_TARGET),watcom)
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
@@ -1029,6 +1030,7 @@ OEXT=.obj
 ASMEXT=.asm
 ASMEXT=.asm
 SHAREDLIBEXT=.dll
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=wat
 SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
 endif
 endif
 ifeq ($(OS_TARGET),linux)
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
 BATCHEXT=.sh
@@ -1065,6 +1067,7 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 SHORTSUFFIX=os2
 ECHO=echo
 ECHO=echo
+IMPORTLIBPREFIX=
 endif
 endif
 ifeq ($(OS_TARGET),emx)
 ifeq ($(OS_TARGET),emx)
 BATCHEXT=.cmd
 BATCHEXT=.cmd
@@ -1073,6 +1076,7 @@ STATICLIBPREFIX=
 SHAREDLIBEXT=.dll
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=emx
 SHORTSUFFIX=emx
 ECHO=echo
 ECHO=echo
+IMPORTLIBPREFIX=
 endif
 endif
 ifeq ($(OS_TARGET),amiga)
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
 EXEEXT=
@@ -1112,17 +1116,20 @@ ifeq ($(OS_TARGET),netware)
 EXEEXT=.nlm
 EXEEXT=.nlm
 STATICLIBPREFIX=
 STATICLIBPREFIX=
 SHORTSUFFIX=nw
 SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
 endif
 endif
 ifeq ($(OS_TARGET),netwlibc)
 ifeq ($(OS_TARGET),netwlibc)
 EXEEXT=.nlm
 EXEEXT=.nlm
 STATICLIBPREFIX=
 STATICLIBPREFIX=
 SHORTSUFFIX=nwl
 SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
 endif
 endif
 ifeq ($(OS_TARGET),macos)
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 BATCHEXT=
 EXEEXT=
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
 SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
 endif
 endif
 ifeq ($(OS_TARGET),darwin)
 ifeq ($(OS_TARGET),darwin)
 BATCHEXT=.sh
 BATCHEXT=.sh
@@ -1149,14 +1156,17 @@ STATICLIBEXT=.a1
 SHAREDLIBEXT=.so1
 SHAREDLIBEXT=.so1
 STATICLIBPREFIX=
 STATICLIBPREFIX=
 SHORTSUFFIX=v1
 SHORTSUFFIX=v1
+IMPORTLIBPREFIX=
 endif
 endif
 ifeq ($(OS_TARGET),go32v2)
 ifeq ($(OS_TARGET),go32v2)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
 SHORTSUFFIX=dos
 SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
 endif
 endif
 ifeq ($(OS_TARGET),watcom)
 ifeq ($(OS_TARGET),watcom)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
 SHORTSUFFIX=wat
 SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
 endif
 endif
 ifeq ($(OS_TARGET),linux)
 ifeq ($(OS_TARGET),linux)
 BATCHEXT=.sh
 BATCHEXT=.sh
@@ -1203,6 +1213,7 @@ STATICLIBEXT=.ao2
 SHAREDLIBEXT=.dll
 SHAREDLIBEXT=.dll
 SHORTSUFFIX=os2
 SHORTSUFFIX=os2
 ECHO=echo
 ECHO=echo
+IMPORTLIBPREFIX=
 endif
 endif
 ifeq ($(OS_TARGET),amiga)
 ifeq ($(OS_TARGET),amiga)
 EXEEXT=
 EXEEXT=
@@ -1263,6 +1274,7 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nw
 SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
 endif
 endif
 ifeq ($(OS_TARGET),netwlibc)
 ifeq ($(OS_TARGET),netwlibc)
 STATICLIBPREFIX=
 STATICLIBPREFIX=
@@ -1274,6 +1286,7 @@ STATICLIBEXT=.a
 SHAREDLIBEXT=.nlm
 SHAREDLIBEXT=.nlm
 EXEEXT=.nlm
 EXEEXT=.nlm
 SHORTSUFFIX=nwl
 SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
 endif
 endif
 ifeq ($(OS_TARGET),macos)
 ifeq ($(OS_TARGET),macos)
 BATCHEXT=
 BATCHEXT=
@@ -1285,6 +1298,7 @@ STATICLIBEXT=.a
 EXEEXT=
 EXEEXT=
 DEBUGSYMEXT=.xcoff
 DEBUGSYMEXT=.xcoff
 SHORTSUFFIX=mac
 SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
 endif
 endif
 endif
 endif
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
 ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)

+ 1 - 1
packages/winceunits/Makefile.fpc

@@ -12,7 +12,7 @@ implicitunits_wince=aygshell commctrl commdlg iphlpapi notify oleauto power shel
                     gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl \
                     gpsapi todaycmn windbase cesync gx winioctl msgqueue pm service htmlctrl \
                     sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled \
                     sipapi cpl bt_api bt_sdp bthapi bthutil pimstore ril sms ws2bth keybd nled \
                     phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror \
                     phone connmgr devload devmgmt mmreg mmsystem msacm wininet ras raserror \
-                    sip projects wap tsp \
+                    sip projects wap tsp extapi imm \
                     activex ole2 comconst
                     activex ole2 comconst
 
 
 units_win32=rapi cesync
 units_win32=rapi cesync

+ 3 - 2
packages/winceunits/src/aygshell.pp

@@ -62,8 +62,6 @@
            302    LoadHTML
            302    LoadHTML
            241    LoadStringEtcOver
            241    LoadStringEtcOver
            180    NotifyAppsOnEvent
            180    NotifyAppsOnEvent
-            24    PathAddBackslash
-            26    PathCombine
             23    PathFindExtension
             23    PathFindExtension
             27    PathFindFileName
             27    PathFindFileName
            160    PathFindNextComponent
            160    PathFindNextComponent
@@ -487,6 +485,9 @@ type
 // functions
 // functions
 //*****************************************************************************
 //*****************************************************************************
 
 
+function PathAddBackslash(lpszPath:LPTSTR):LPTSTR; external UserDLLAyg name 'PathAddBackslash'; // index 24
+function PathCombine(lpszDest:LPTSTR; lpszDir:LPCTSTR; lpszFile:LPCTSTR):LPTSTR; external UserDLLAyg name 'PathCombine'; // index 26
+
 function ExitWindowsEx(uFlags:UINT; dwReserved:DWORD):WINBOOL; external UserDLLAyg name 'ExitWindowsEx';
 function ExitWindowsEx(uFlags:UINT; dwReserved:DWORD):WINBOOL; external UserDLLAyg name 'ExitWindowsEx';
 function SHCloseApps( dwMemSought : DWORD ): WINBOOL; external UserDLLAyg name 'SHCloseApps';
 function SHCloseApps( dwMemSought : DWORD ): WINBOOL; external UserDLLAyg name 'SHCloseApps';
 function SHCreateMenuBar(pmbi : PSHMENUBARINFO ): WINBOOL; external UserDLLAyg name 'SHCreateMenuBar';
 function SHCreateMenuBar(pmbi : PSHMENUBARINFO ): WINBOOL; external UserDLLAyg name 'SHCreateMenuBar';

+ 1 - 1
packages/winceunits/src/buildwinceunits.pp

@@ -25,7 +25,7 @@ uses
   gpsapi,todaycmn,windbase,cesync,gx,winioctl,msgqueue,pm,service,htmlctrl,
   gpsapi,todaycmn,windbase,cesync,gx,winioctl,msgqueue,pm,service,htmlctrl,
   sipapi, cpl, bt_api, bt_sdp, bthapi, bthutil, pimstore, ril, sms, ws2bth,
   sipapi, cpl, bt_api, bt_sdp, bthapi, bthutil, pimstore, ril, sms, ws2bth,
   keybd, nled, phone, connmgr, devload, devmgmt, mmreg, mmsystem, msacm,
   keybd, nled, phone, connmgr, devload, devmgmt, mmreg, mmsystem, msacm,
-  wininet, ras, raserror, sip, projects, wap, tsp;
+  wininet, ras, raserror, sip, projects, wap, tsp, extapi, imm;
 
 
 implementation
 implementation
 
 

+ 433 - 0
packages/winceunits/src/extapi.pp

@@ -0,0 +1,433 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2009 Free Pascal development team.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program 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.
+
+********************************************************************* }
+
+//**********************************************************************/
+//*                                                                    */
+//* EXTAPI.H - Extended TAPI header file.                              */
+//* Extended TAPI extends wireless functionality to include such       */
+//* things as asking for signal strength, choosing the cellular        */
+//* network, and more. ExTAPI works with Telephony API (TAPI) and uses */
+//* all of the TAPI line devices. ExTAPI operations are available only */
+//* if the application has successfully negotiated a device-specific   */
+//* extension version with lineNegotiateExtVersion and successfully    */
+//* obtained a line device handle with lineOpen.                       */
+//*                                                                    */
+//**********************************************************************/
+
+//
+//  Microsoft Windows Mobile 6.0 for PocketPC SDK.
+//
+
+
+unit extapi;
+
+{$CALLING cdecl}
+
+interface
+
+uses Windows, TAPI;
+
+const
+// ExTAPI LINEERR_ constants
+      LINEERR_INCORRECTPASSWORD               = $80010001;
+
+// Line barring modes
+      LINEBARRMODE_OUT                        = $00000001;
+      LINEBARRMODE_OUT_INT                    = $00000002;
+      LINEBARRMODE_OUT_INTEXTOHOME            = $00000004;
+      LINEBARRMODE_IN                         = $00000008;
+      LINEBARRMODE_IN_ROAM                    = $00000010;
+      LINEBARRMODE_IN_NOTINSIM                = $00000020;
+      LINEBARRMODE_ALL                        = $00000040;
+      LINEBARRMODE_ALL_OUT                    = $00000080;
+      LINEBARRMODE_ALL_IN                     = $00000100;
+
+// Line call-waiting states
+      LINECALLWAITING_ENABLED                 = $00000001;
+      LINECALLWAITING_DISABLED                = $00000002;
+
+// Line capability classes
+      LINECAPSCLASS_VOICE                     = $00000001;
+      LINECAPSCLASS_DATA                      = $00000002;
+      LINECAPSCLASS_FAX                       = $00000004;
+      LINECAPSCLASS_SMS                       = $00000008;
+      LINECAPSCLASS_SYNCDATA                  = $00000010;
+      LINECAPSCLASS_ASYNCDATA                 = $00000020;
+      LINECAPSCLASS_PACKET                    = $00000040;
+      LINECAPSCLASS_PAD                       = $00000080;
+      LINECAPSCLASS_ALL                       = $000000ff;
+
+// Line equipment states
+      LINEEQUIPSTATE_MINIMUM                  = $00000001;
+      LINEEQUIPSTATE_RXONLY                   = $00000002;
+      LINEEQUIPSTATE_TXONLY                   = $00000003;
+      LINEEQUIPSTATE_NOTXRX                   = $00000004;
+      LINEEQUIPSTATE_FULL                     = $00000005;
+
+// Line GPRS class types
+      LINEGPRSCLASS_GSMANDGPRS                = $00000001;
+      LINEGPRSCLASS_GSMORGPRS                 = $00000002;
+      LINEGPRSCLASS_GSMORGPRS_EXCLUSIVE       = $00000003;
+      LINEGPRSCLASS_GPRSONLY                  = $00000004;
+      LINEGPRSCLASS_GSMONLY                   = $00000005;
+
+// Line GPRS class changed types
+      LINEGPRSCLASSCHANGED_NETWORK            = $00000001;
+      LINEGPRSCLASSCHANGED_RADIO              = $00000002;
+
+// Line HSCSD air-rates
+      LINEHSCSDAIRRATE_9600                   = $00000001;
+      LINEHSCSDAIRRATE_14400                  = $00000002;
+      LINEHSCSDAIRRATE_19200                  = $00000003;
+      LINEHSCSDAIRRATE_28800                  = $00000004;
+      LINEHSCSDAIRRATE_38400                  = $00000005;
+      LINEHSCSDAIRRATE_43200                  = $00000006;
+      LINEHSCSDAIRRATE_57600                  = $00000007;
+
+// Line HSCSD codings
+      LINEHSCSDCODING_4800                    = $00000001;
+      LINEHSCSDCODING_9600                    = $00000002;
+      LINEHSCSDCODING_14400                   = $00000004;
+
+// Line mute states
+      LINEMUTESTATE_MUTEENABLED               = $00000001;
+      LINEMUTESTATE_MUTEDISABLED              = $00000002;
+
+// Line operator formats
+      LINEOPFORMAT_NONE                       = $00000000;
+      LINEOPFORMAT_ALPHASHORT                 = $00000001;
+      LINEOPFORMAT_ALPHALONG                  = $00000002;
+      LINEOPFORMAT_NUMERIC                    = $00000004;
+      LINEOPFORMAT_ACCESS_TYPE                = $00000008;
+
+// Line operator statuses
+      LINEOPSTATUS_UNKNOWN                    = $00000000;
+      LINEOPSTATUS_AVAILABLE                  = $00000001;
+      LINEOPSTATUS_CURRENT                    = $00000002;
+      LINEOPSTATUS_FORBIDDEN                  = $00000003;
+
+// Line radio presence states
+      LINERADIOPRESENCE_PRESENT               = $00000001;
+      LINERADIOPRESENCE_NOTPRESENT            = $00000002;
+
+// Line radio support states
+      LINERADIOSUPPORT_OFF                    = $00000001;
+      LINERADIOSUPPORT_ON                     = $00000002;
+      LINERADIOSUPPORT_UNKNOWN                = $00000003;
+
+// Line register modes
+      LINEREGMODE_AUTOMATIC                   = $00000001;
+      LINEREGMODE_MANUAL                      = $00000002;
+      LINEREGMODE_MANAUTO                     = $00000003;
+
+// Line register status
+      LINEREGSTATUS_UNKNOWN                   = $00000001;
+      LINEREGSTATUS_DENIED                    = $00000002;
+      LINEREGSTATUS_UNREGISTERED              = $00000003;
+      LINEREGSTATUS_ATTEMPTING                = $00000004;
+      LINEREGSTATUS_HOME                      = $00000005;
+      LINEREGSTATUS_ROAM                      = $00000006;
+      LINEREGSTATUS_DIGITAL                   = $00000007;
+      LINEREGSTATUS_ANALOG                    = $00000008;
+
+// Line send caller-ID states
+      LINESENDCALLERID_ENABLED                = $00000001;
+      LINESENDCALLERID_DISABLED               = $00000002;
+
+// Line system types, CDMA
+      LINESYSTEMTYPE_NONE                     = $00000000;
+      LINESYSTEMTYPE_IS95A                    = $00000001;
+      LINESYSTEMTYPE_IS95B                    = $00000002;
+      LINESYSTEMTYPE_1XRTTPACKET              = $00000004;
+// Line system types, GSM
+      LINESYSTEMTYPE_GSM                      = $00000008;
+      LINESYSTEMTYPE_GPRS                     = $00000010;
+// Line system types, GSM, CDMA, UMTS, HSDPA
+      LINESYSTEMTYPE_EDGE                     = $00000020;
+      LINESYSTEMTYPE_1XEVDOPACKET             = $00000040;
+      LINESYSTEMTYPE_1XEVDVPACKET             = $00000080;
+      LINESYSTEMTYPE_UMTS                     = $00000100;
+      LINESYSTEMTYPE_HSDPA                    = $00000200;
+
+// Line USSD flags
+      LINEUSSDFLAG_ACTIONREQUIRED             = $00000001;
+      LINEUSSDFLAG_ACTIONNOTNEEDED            = $00000002;
+      LINEUSSDFLAG_TERMINATED                 = $00000004;
+      LINEUSSDFLAG_OTHERCLIENTRESPONDED       = $00000008;
+      LINEUSSDFLAG_UNSUPPORTED                = $00000010;
+      LINEUSSDFLAG_TIMEOUT                    = $00000020;
+      LINEUSSDFLAG_ENDSESSION                 = $00000040;
+
+// Special LINEOPERATOR index values
+      LINEOPERATOR_USEFIRSTAVAILABLEINDEX     = -1;
+
+// Line operator statuses
+      LINEACCESSTYPE_UNKNOWN                  = $00000000;
+      LINEACCESSTYPE_UMTS                     = $00000001;
+      LINEACCESSTYPE_GSM                      = $00000002;
+      LINEACCESSTYPE_GSM_COMPACT              = $00000003;
+
+// Maximum string lengths
+      MAX_LENGTH_OPERATOR_LONG                = 32;
+      MAX_LENGTH_OPERATOR_SHORT               = 16;
+      MAX_LENGTH_OPERATOR_NUMERIC             = 16;
+
+
+// LINE_DEVSPECIFIC message types
+      LINE_EQUIPSTATECHANGE                   = $00000100;
+    // dwParam1 = LINE_EQUIPSTATECHANGE
+    // dwParam2 = One of the LINEEQUIPSTATE_* constants
+    // dwParam3 = One of the LINERADIOSUPPORT_* constants
+
+      LINE_GPRSCLASS                          = $00000101;
+    // dwParam1 = LINE_GPRSCLASS
+    // dwParam2 = One of the LINEGPRSCLASS_* constants
+    // dwParam3 = One of the LINEGPRSCLASSCHANGED_* constants
+
+      LINE_GPRSREGISTERSTATE                  = $00000102;
+    // dwParam1 = LINE_GPRSREGISTERSTATE
+    // dwParam2 = One of the LINEREGSTATUS_* constants
+    // dwParam3 Unused
+
+      LINE_RADIOPRESENCE                      = $00000103;
+    // dwParam1 = LINE_RADIOPRESENCE
+    // dwParam2 = One of the LINERADIOPRESENCE_* constants
+    // dwParam3 Unused
+
+      LINE_REGISTERSTATE                      = $00000104;
+    // dwParam1 = LINE_REGISTERSTATE
+    // dwParam2 = One of the LINEREGSTATUS_* constants
+    // dwParam3 Unused
+
+      LINE_USSD                               = $00000105;
+    // dwParam1 = LINE_USSD
+    // dwParam2 = Message identifier
+    // dwParam3 = Size in bytes of message
+
+      LINE_CURRENTLINECHANGE                  = $00000106;
+    // dwParam1 = LINE_CURRENTLINECHANGE
+    // dwParam2 = New line identifier
+    // dwParam3 = New address ID
+
+      LINE_CURRENTSYSTEMCHANGE                = $00000107;
+    // dwParam1 = LINE_CURRENTSYSTEMCHANGE
+    // dwParam2 = New system coverage (LINESYSTEMTYPE_*)
+    // dwParam3 = unused
+
+// Structures
+type
+     lineoperator_tag = record
+       dwIndex:DWORD;
+       dwValidFields:DWORD;
+       dwStatus:DWORD;
+       lpszLongName:array[0..MAX_LENGTH_OPERATOR_LONG-1] of TCHAR;
+       lpszShortName:array[0..MAX_LENGTH_OPERATOR_SHORT-1] of TCHAR;
+       lpszNumName:array[0..MAX_LENGTH_OPERATOR_NUMERIC-1] of TCHAR;
+     end;
+     LINEOPERATOR = lineoperator_tag;
+     LPLINEOPERATOR = ^lineoperator_tag;
+
+     lineoperatorex_tag = record
+       cbSize:DWORD;
+       dwIndex:DWORD;
+       dwValidFields:DWORD;
+       dwStatus:DWORD;
+       lpszLongName:array[0..MAX_LENGTH_OPERATOR_LONG-1] of TCHAR;
+       lpszShortName:array[0..MAX_LENGTH_OPERATOR_SHORT-1] of TCHAR;
+       lpszNumName:array[0..MAX_LENGTH_OPERATOR_NUMERIC-1] of TCHAR;
+       dwAccessType:DWORD;
+     end;
+     LINEOPERATOREX = lineoperatorex_tag;
+     LPLINEOPERATOREX = ^lineoperatorex_tag;
+
+     lineoperatorstatus_tag = record
+       dwTotalSize:DWORD;
+       dwNeededSize:DWORD;
+       dwUsedSize:DWORD;
+       dwPreferredCount:DWORD;
+       dwPreferredSize:DWORD;
+       dwPreferredOffset:DWORD;
+       dwAvailableCount:DWORD;
+       dwAvailableSize:DWORD;
+       dwAvailableOffset:DWORD;
+     end;
+     LINEOPERATORSTATUS = lineoperatorstatus_tag;
+     LPLINEOPERATORSTATUS = ^lineoperatorstatus_tag;
+
+     linegeneralinfo_tag = record
+       dwTotalSize:DWORD;
+       dwNeededSize:DWORD;
+       dwUsedSize:DWORD;
+       dwManufacturerSize:DWORD;
+       dwManufacturerOffset:DWORD;
+       dwModelSize:DWORD;
+       dwModelOffset:DWORD;
+       dwRevisionSize:DWORD;
+       dwRevisionOffset:DWORD;
+       dwSerialNumberSize:DWORD;
+       dwSerialNumberOffset:DWORD;
+       dwSubscriberNumberSize:DWORD;
+       dwSubscriberNumberOffset:DWORD;
+     end;
+     LINEGENERALINFO = linegeneralinfo_tag;
+     LPLINEGENERALINFO = ^linegeneralinfo_tag;
+
+// Functions
+const
+      ExTapiDLL = 'cellcore.dll';
+
+function lineGetCallBarringCaps(hLine:HLINE;
+                                lpdwModes:LPDWORD;
+                                lpdwClasses:LPDWORD):LONG; external ExTapiDLL name 'lineGetCallBarringCaps';
+
+function lineGetCallBarringState(hLine:HLINE;
+                                 dwMode:DWORD;
+                                 lpdwClasses:LPDWORD;
+                                 lpszPassword:LPCTSTR):LONG; external ExTapiDLL name 'lineGetCallBarringState';
+
+function lineGetCallWaitingCaps(hLine:HLINE;
+                                lpdwClasses:LPDWORD):LONG; external ExTapiDLL name 'lineGetCallWaitingCaps';
+
+function lineGetCallWaitingState(hLine:HLINE;
+                                 lpdwClasses:LPDWORD):LONG; external ExTapiDLL name 'lineGetCallWaitingState';
+
+function lineGetCurrentAddressID(hLine:HLINE;
+                                 lpdwAddressID:LPDWORD):LONG; external ExTapiDLL name 'lineGetCurrentAddressID';
+
+function lineGetCurrentHSCSDStatus(hLine:HLINE;
+                                   lpdwChannelsIn:LPDWORD;
+                                   lpdwChannelsOut:LPDWORD;
+                                   lpdwChannelCoding:LPDWORD;
+                                   lpdwAirInterfaceRate:LPDWORD):LONG; external ExTapiDLL name 'lineGetCurrentHSCSDStatus';
+
+function lineGetCurrentOperator(hLine:HLINE;
+                                lpCurrentOperator:LPLINEOPERATOR):LONG; external ExTapiDLL name 'lineGetCurrentOperator';
+
+function lineGetCurrentOperatorEx(hLine:HLINE;
+                                  lpCurrentOperatorEx:LPLINEOPERATOREX):LONG; external ExTapiDLL name 'lineGetCurrentOperatorEx';
+
+function lineGetCurrentSystemType(hLine:HLINE;
+                                  lpdwCurrentSystemType:LPDWORD):LONG; external ExTapiDLL name 'lineGetCurrentSystemType';
+
+function lineGetEquipmentState(hLine:HLINE;
+                               lpdwState:LPDWORD;
+                               lpdwRadioSupport:LPDWORD):LONG; external ExTapiDLL name 'lineGetEquipmentState';
+
+function lineGetGeneralInfo(hLine:HLINE;
+                            lpLineGeneralInfo:LPLINEGENERALINFO):LONG; external ExTapiDLL name 'lineGetGeneralInfo';
+
+function lineGetGPRSClass(hLine:HLINE;
+                          lpdwClass:LPDWORD):LONG; external ExTapiDLL name 'lineGetGPRSClass';
+
+function lineGetHSCSDCaps(hLine:HLINE;
+                          lpdwClass:LPDWORD;
+                          lpdwChannelsIn:LPDWORD;
+                          lpdwChannelsOut:LPDWORD;
+                          lpdwChannelsSum:LPDWORD;
+                          lpdwChannelCodings:LPDWORD):LONG; external ExTapiDLL name 'lineGetHSCSDCaps';
+
+function lineGetHSCSDState(hLine:HLINE;
+                           lpdwChannelsIn:LPDWORD;
+                           lpdwMaxChannelsIn:LPDWORD;
+                           lpdwChannelCodings:LPDWORD;
+                           lpdwAirInterfaceRate:LPDWORD):LONG; external ExTapiDLL name 'lineGetHSCSDState';
+
+function lineGetMuteState(hLine:HLINE;
+                          lpdwState:LPDWORD):LONG; external ExTapiDLL name 'lineGetMuteState';
+
+function lineGetNumberCalls(hLine:HLINE;
+                            lpdwNumActiveCalls:LPDWORD;
+                            lpdwNumOnHoldCalls:LPDWORD;
+                            lpdwNumOnHoldPendCalls:LPDWORD):LONG; external ExTapiDLL name 'lineGetNumberCalls';
+
+function lineGetOperatorStatus(hLine:HLINE;
+                               lpOperatorStatus:LPLINEOPERATORSTATUS):LONG; external ExTapiDLL name 'lineGetOperatorStatus';
+
+function lineGetOperatorStatusEx(hLine:HLINE;
+                                 lpOperatorStatus:LPLINEOPERATORSTATUS):LONG; external ExTapiDLL name 'lineGetOperatorStatusEx';
+
+function lineGetRadioPresence(hLine:HLINE;
+                              lpdwRadioPresence:LPDWORD):LONG; external ExTapiDLL name 'lineGetRadioPresence';
+
+function lineGetRegisterStatus(hLine:HLINE;
+                               lpdwRegisterStatus:LPDWORD):LONG; external ExTapiDLL name 'lineGetRegisterStatus';
+
+function lineGetSendCallerIDState(hLine:HLINE;
+                                  lpdwState:LPDWORD):LONG; external ExTapiDLL name 'lineGetSendCallerIDState';
+
+function lineGetUSSD(hLine:HLINE;
+                     dwID:DWORD;
+                     lpbUSSD:LPBYTE;
+                     dwUSSDSize:DWORD;
+                     lpdwFlags:LPDWORD):LONG; external ExTapiDLL name 'lineGetUSSD';
+
+function lineRegister(hLine:HLINE;
+                      dwRegisterMode:DWORD;
+                      lpszOperator:LPCTSTR;
+                      dwOperatorFormat:DWORD):LONG; external ExTapiDLL name 'lineRegister';
+
+function lineRegisterEx(hLine:HLINE;
+                        dwRegisterMode:DWORD;
+                        lpOperatorEx:LPLINEOPERATOREX):LONG; external ExTapiDLL name 'lineRegisterEx';
+
+function lineSendUSSD(hLine:HLINE;
+                      lpbUSSD:LPBYTE;
+                      dwUSSDSize:DWORD;
+                      dwFlags:DWORD):LONG; external ExTapiDLL name 'lineSendUSSD';
+
+function lineSetCallBarringPassword(hLine:HLINE;
+                                    dwMode:DWORD;
+                                    lpszOldPassword:LPCTSTR;
+                                    lpszNewPassword:LPCTSTR):LONG; external ExTapiDLL name 'lineSetCallBarringPassword';
+
+function lineSetCallBarringState(hLine:HLINE;
+                                 dwMode:DWORD;
+                                 dwClasses:DWORD;
+                                 lpszPassword:LPCTSTR):LONG; external ExTapiDLL name 'lineSetCallBarringState';
+
+function lineSetCallWaitingState(hLine:HLINE;
+                                 dwClasses:DWORD;
+                                 dwState:DWORD):LONG; external ExTapiDLL name 'lineSetCallWaitingState';
+
+function lineSetCurrentAddressID(hLine:HLINE;
+                                 dwAddressID:DWORD):LONG; external ExTapiDLL name 'lineSetCurrentAddressID';
+
+function lineSetEquipmentState(hLine:HLINE;
+                               dwState:DWORD):LONG; external ExTapiDLL name 'lineSetEquipmentState';
+
+function lineSetGPRSClass(hLine:HLINE;
+                          dwClass:DWORD):LONG; external ExTapiDLL name 'lineSetGPRSClass';
+
+function lineSetHSCSDState(hLine:HLINE;
+                           dwChannelsIn:DWORD;
+                           dwMaxChannelsIn:DWORD;
+                           dwChannelCodings:DWORD;
+                           dwAirInterfaceRate:DWORD):LONG; external ExTapiDLL name 'lineSetHSCSDState';
+
+function lineSetMuteState(hLine:HLINE;
+                          dwState:DWORD):LONG; external ExTapiDLL name 'lineSetMuteState';
+
+function lineSetSendCallerIDState(hLine:HLINE;
+                                  dwState:DWORD):LONG; external ExTapiDLL name 'lineSetSendCallerIDState';
+
+function lineSetPreferredOperator(hLine:HLINE;
+                                  lpOperator:LPLINEOPERATOR):LONG; external ExTapiDLL name 'lineSetPreferredOperator';
+
+function lineSetPreferredOperatorEx(hLine:HLINE;
+                                    lpOperatorEx:LPLINEOPERATOREX):LONG; external ExTapiDLL name 'lineSetPreferredOperatorEx';
+
+function lineUnregister(hLine:HLINE):LONG; external ExTapiDLL name 'lineUnregister';
+
+implementation
+
+end.

+ 1384 - 0
packages/winceunits/src/imm.pp

@@ -0,0 +1,1384 @@
+{
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2009 Free Pascal development team.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program 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.
+
+********************************************************************* }
+
+//**********************************************************************/
+//*                                                                    */
+//*      IMM.H - Input Method Manager definitions                      */
+//*                                                                    */
+//**********************************************************************/
+
+//
+//  Microsoft Windows Mobile 6.0 for PocketPC SDK.
+//
+
+unit imm;
+
+{$CALLING cdecl}
+
+interface
+
+uses Windows;
+
+type
+     HIMC  = DWORD;
+     HIMCC = DWORD;
+
+const
+      NULLIMC	= HIMC(0);
+
+type
+     LPHKL = ^HKL;
+     LPUINT = ^UINT;
+
+
+type
+     tagCOMPOSITIONFORM = record
+       dwStyle:DWORD;
+       ptCurrentPos:POINT;
+       rcArea:RECT;
+     end;
+     COMPOSITIONFORM = tagCOMPOSITIONFORM;
+     PCOMPOSITIONFORM = ^COMPOSITIONFORM;
+     NPCOMPOSITIONFORM = ^COMPOSITIONFORM;
+     LPCOMPOSITIONFORM = ^COMPOSITIONFORM;
+
+type
+     tagCANDIDATEFORM  = record
+       dwIndex:DWORD;
+       dwStyle:DWORD;
+       ptCurrentPos:POINT;
+       rcArea:RECT;
+     end;
+     CANDIDATEFORM = tagCANDIDATEFORM;
+     PCANDIDATEFORM = ^CANDIDATEFORM;
+     NPCANDIDATEFORM = ^CANDIDATEFORM;
+     LPCANDIDATEFORM = ^CANDIDATEFORM;
+
+
+type
+     tagCANDIDATELIST = record
+       dwSize:DWORD;
+       dwStyle:DWORD;
+       dwCount:DWORD;
+       dwSelection:DWORD;
+       dwPageStart:DWORD;
+       dwPageSize:DWORD;
+       dwOffset:array[0..0] of DWORD;
+     end;
+     CANDIDATELIST = tagCANDIDATELIST;
+     PCANDIDATELIST = ^CANDIDATELIST;
+     NPCANDIDATELIST = ^CANDIDATELIST;
+     LPCANDIDATELIST = ^CANDIDATELIST;
+
+type
+     tagREGISTERWORDA = record
+       lpReading:LPSTR;
+       lpWord:LPSTR;
+     end;
+     REGISTERWORDA = tagREGISTERWORDA;
+     PREGISTERWORDA = ^REGISTERWORDA;
+     NPREGISTERWORDA = ^REGISTERWORDA;
+     LPREGISTERWORDA = ^REGISTERWORDA;
+
+type
+     tagREGISTERWORDW = record
+       lpReading:LPWSTR;
+       lpWord:LPWSTR;
+     end;
+     REGISTERWORDW = tagREGISTERWORDW;
+     PREGISTERWORDW = ^REGISTERWORDW;
+     NPREGISTERWORDW = ^REGISTERWORDW;
+     LPREGISTERWORDW = ^REGISTERWORDW;
+
+{$IFDEF UNICODE}
+type
+     REGISTERWORD = REGISTERWORDW;
+     PREGISTERWORD = PREGISTERWORDW;
+     NPREGISTERWORD = NPREGISTERWORDW;
+     LPREGISTERWORD = LPREGISTERWORDW;
+{$ELSE UNICODE}
+type
+     REGISTERWORD = REGISTERWORDA;
+     PREGISTERWORD = PREGISTERWORDA;
+     NPREGISTERWORD = NPREGISTERWORDA;
+     LPREGISTERWORD = LPREGISTERWORDA;
+{$ENDIF UNICODE}
+
+const
+      STYLE_DESCRIPTION_SIZE  = 32;
+
+type
+     tagSTYLEBUFA = record
+       dwStyle:DWORD;
+       szDescription:array[0..STYLE_DESCRIPTION_SIZE-1] of char;
+     end;
+     STYLEBUFA = tagSTYLEBUFA;
+     PSTYLEBUFA = ^STYLEBUFA;
+     NPSTYLEBUFA = ^STYLEBUFA;
+     LPSTYLEBUFA = ^STYLEBUFA;
+
+type
+     tagSTYLEBUFW = record
+       dwStyle:DWORD;
+       szDescription:array[0..STYLE_DESCRIPTION_SIZE-1] of WCHAR;
+     end;
+     STYLEBUFW = tagSTYLEBUFW;
+     PSTYLEBUFW = ^STYLEBUFW;
+     NPSTYLEBUFW = ^STYLEBUFW;
+     LPSTYLEBUFW = ^STYLEBUFW;
+
+{$IFDEF UNICODE}
+type
+     STYLEBUF = STYLEBUFW;
+     PSTYLEBUF = PSTYLEBUFW;
+     NPSTYLEBUF = NPSTYLEBUFW;
+     LPSTYLEBUF = LPSTYLEBUFW;
+{$ELSE UNICODE}
+type
+     STYLEBUF = STYLEBUFA;
+     PSTYLEBUF = PSTYLEBUFA;
+     NPSTYLEBUF = NPSTYLEBUFA;
+     LPSTYLEBUF = LPSTYLEBUFA;
+{$ENDIF UNICODE}
+
+const
+      IMEMENUITEM_STRING_SIZE = 80;
+
+type
+     tagIMEMENUITEMINFOA = record
+       cbSize:UINT;
+       fType:UINT;
+       fState:UINT;
+       wID:UINT;
+       hbmpChecked:HBITMAP;
+       hbmpUnchecked:HBITMAP;
+       dwItemData:DWORD;
+       szString:array[0..IMEMENUITEM_STRING_SIZE-1] of char;
+       hbmpItem:HBITMAP;
+     end;
+     IMEMENUITEMINFOA = tagIMEMENUITEMINFOA;
+     PIMEMENUITEMINFOA = ^IMEMENUITEMINFOA;
+     NPIMEMENUITEMINFOA = ^IMEMENUITEMINFOA;
+     LPIMEMENUITEMINFOA = ^IMEMENUITEMINFOA;
+
+type
+     tagIMEMENUITEMINFOW = record
+       cbSize:UINT;
+       fType:UINT;
+       fState:UINT;
+       wID:UINT;
+       hbmpChecked:HBITMAP;
+       hbmpUnchecked:HBITMAP;
+       dwItemData:DWORD;
+       szString:array[0..IMEMENUITEM_STRING_SIZE-1] of WCHAR;
+       hbmpItem:HBITMAP;
+     end;
+     IMEMENUITEMINFOW = tagIMEMENUITEMINFOW;
+     PIMEMENUITEMINFOW = ^IMEMENUITEMINFOW;
+     NPIMEMENUITEMINFOW = ^IMEMENUITEMINFOW;
+     LPIMEMENUITEMINFOW = ^IMEMENUITEMINFOW;
+
+{$IFDEF UNICODE}
+type
+     IMEMENUITEMINFO = IMEMENUITEMINFOW;
+     PIMEMENUITEMINFO = PIMEMENUITEMINFOW;
+     NPIMEMENUITEMINFO = NPIMEMENUITEMINFOW;
+     LPIMEMENUITEMINFO = LPIMEMENUITEMINFOW;
+{$ELSE UNICODE}
+type
+     IMEMENUITEMINFO = IMEMENUITEMINFOA;
+     PIMEMENUITEMINFO = PIMEMENUITEMINFOA;
+     NPIMEMENUITEMINFO = NPIMEMENUITEMINFOA;
+     LPIMEMENUITEMINFO = LPIMEMENUITEMINFOA;
+{$ENDIF UNICODE}
+
+type
+     tagIMECHARPOSITION = record
+       dwSize:DWORD;
+       dwCharPos:DWORD;
+       pt:POINT;
+       cLineHeight:UINT;
+       rcDocument:RECT;
+     end;
+     IMECHARPOSITION = tagIMECHARPOSITION;
+     PIMECHARPOSITION = ^IMECHARPOSITION;
+     NPIMECHARPOSITION = ^IMECHARPOSITION;
+     LPIMECHARPOSITION = ^IMECHARPOSITION;
+
+
+// prototype of IMM API
+
+const
+      ImmDLL = 'coredll.dll';
+
+{$IFNDEF WINCE}
+function ImmInstallIMEW(lpszIMEFileName:LPCWSTR; lpszLayoutText:LPCWSTR):HKL; external ImmDLL name 'ImmInstallIMEW';
+
+{$IFDEF UNICODE}
+function ImmInstallIME(lpszIMEFileName:LPCWSTR; lpszLayoutText:LPCWSTR):HKL; external ImmDLL name 'ImmInstallIMEW';
+{$ELSE UNICODE}
+function ImmInstallIME(lpszIMEFileName:LPCWSTR; lpszLayoutText:LPCWSTR):HKL; external ImmDLL name 'ImmInstallIMEA';
+{$ENDIF UNICODE}
+
+{$ENDIF WINCE}
+
+function ImmGetDefaultIMEWnd(_hwnd:HWND):HWND; external ImmDLL name 'ImmGetDefaultIMEWnd'; // 459
+
+function ImmGetDescriptionW(_hkl:HKL; lpszDescription:LPWSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetDescriptionW'; // 45A
+{$IFDEF UNICODE}
+function ImmGetDescription(_hkl:HKL; lpszDescription:LPWSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetDescriptionW';
+{$ELSE UNICODE}
+function ImmGetDescription(_hkl:HKL; lpszDescription:LPSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetDescriptionA';
+{$ENDIF UNICODE}
+
+function ImmGetIMEFileNameW(_hkl:HKL; lpszFileName:LPWSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetIMEFileNameW'; // 477
+{$IFDEF UNICODE}
+function ImmGetIMEFileName(_hkl:HKL; lpszFileName:LPWSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetIMEFileNameW';
+{$ELSE UNICODE}
+function ImmGetIMEFileName(_hkl:HKL; lpszFileName:LPSTR; uBufLen:UINT):UINT; external ImmDLL name 'ImmGetIMEFileNameA';
+{$ENDIF UNICODE}
+
+function ImmGetProperty(_hkl:HKL; fdwIndex:DWORD):DWORD; external ImmDLL name 'ImmGetProperty'; // 460
+
+function ImmIsIME(_hkl:HKL):BOOL; external ImmDLL name 'ImmIsIME'; // 448 
+
+function ImmSimulateHotKey(_hwnd:HWND; dwHotKeyID:DWORD):BOOL; external ImmDLL name 'ImmSimulateHotKey'; // 472
+
+function ImmCreateContext:HIMC; external ImmDLL name 'ImmCreateContext'; // 44A
+function ImmDestroyContext(_himc:HIMC):BOOL; external ImmDLL name 'ImmDestroyContext'; // 44B
+function ImmGetContext(_hwnd:HWND):HIMC; external ImmDLL name 'ImmGetContext'; // 440
+function ImmReleaseContext(_hwnd:HWND; _himc:HIMC):BOOL; external ImmDLL name 'ImmReleaseContext'; // 445
+function ImmAssociateContext(_hwnd:HWND; _himc:HIMC):HIMC; external ImmDLL name 'ImmAssociateContext'; // 44C
+function ImmAssociateContextEx(_hwnd:HWND; _himc:HIMC; dwFlags:DWORD):BOOL; external ImmDLL name 'ImmAssociateContextEx'; // 476
+
+function ImmGetCompositionStringW(_himc:HIMC; dwIndex:DWORD; lpBuf:LPVOID; dwBufLen:DWORD):LONG; external ImmDLL name 'ImmGetCompositionStringW'; // 447
+{$IFDEF UNICODE}
+function ImmGetCompositionString(_himc:HIMC; dwIndex:DWORD; lpBuf:LPVOID; dwBufLen:DWORD):LONG; external ImmDLL name 'ImmGetCompositionStringW';
+{$ELSE UNICODE}
+function ImmGetCompositionString(_himc:HIMC; dwIndex:DWORD; lpBuf:LPVOID; dwBufLen:DWORD):LONG; external ImmDLL name 'ImmGetCompositionStringA';
+{$ENDIF UNICODE}
+
+function ImmSetCompositionStringW(_himc:HIMC;
+                                  dwIndex:DWORD;
+                                  lpComp:LPCVOID;
+                                  dwCompLen:DWORD;
+                                  lpRead:LPCVOID;
+                                  dwReadLen:DWORD):BOOL; external ImmDLL name 'ImmSetCompositionStringW'; // 46B
+{$IFDEF UNICODE}
+function ImmSetCompositionString(_himc:HIMC;
+                                 dwIndex:DWORD;
+                                 lpComp:LPCVOID;
+                                 dwCompLen:DWORD;
+                                 lpRead:LPCVOID;
+                                 dwReadLen:DWORD):BOOL; external ImmDLL name 'ImmSetCompositionStringW';
+{$ELSE UNICODE}
+function ImmSetCompositionString(_himc:HIMC;
+                                 dwIndex:DWORD;
+                                 lpComp:LPCVOID;
+                                 dwCompLen:DWORD;
+                                 lpRead:LPCVOID;
+                                 dwReadLen:DWORD):BOOL; external ImmDLL name 'ImmSetCompositionStringA';
+{$ENDIF UNICODE}
+
+function ImmGetCandidateListCountW(_himc:HIMC; lpdwListCount:LPDWORD):DWORD; external ImmDLL name 'ImmGetCandidateListCountW'; // 454
+{$IFDEF UNICODE}
+function ImmGetCandidateListCount(_himc:HIMC; lpdwListCount:LPDWORD):DWORD; external ImmDLL name 'ImmGetCandidateListCountW';
+{$ELSE UNICODE}
+function ImmGetCandidateListCount(_himc:HIMC; lpdwListCount:LPDWORD):DWORD; external ImmDLL name 'ImmGetCandidateListCountA';
+{$ENDIF UNICODE}
+
+function ImmGetCandidateListW(_himc:HIMC; deIndex:DWORD; lpCandList:LPCANDIDATELIST; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetCandidateListW'; // 453
+{$IFDEF UNICODE}
+function ImmGetCandidateList(_himc:HIMC; deIndex:DWORD; lpCandList:LPCANDIDATELIST; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetCandidateListW'; 
+{$ELSE UNICODE}
+function ImmGetCandidateList(_himc:HIMC; deIndex:DWORD; lpCandList:LPCANDIDATELIST; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetCandidateListA';
+{$ENDIF UNICODE}
+
+function ImmGetGuideLineW(_himc:HIMC; deIndex:DWORD; lpBuf:LPWSTR; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetGuideLineW'; // 45B
+{$IFDEF UNICODE}
+function ImmGetGuideLine(_himc:HIMC; deIndex:DWORD; lpBuf:LPWSTR; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetGuideLineW';
+{$ELSE UNICODE}
+function ImmGetGuideLine(_himc:HIMC; deIndex:DWORD; lpBuf:LPSTR; dwBufLen:DWORD):DWORD; external ImmDLL name 'ImmGetGuideLineA';
+{$ENDIF UNICODE}
+
+function ImmGetConversionStatus(_himc:HIMC; lpfdwConversion:LPDWORD; lpfdwSentence:LPDWORD):BOOL; external ImmDLL name 'ImmGetConversionStatus'; // 441 ImmGetConversionStatus
+function ImmSetConversionStatus(_himc:HIMC; fdwConversion:DWORD; fdwSentence:DWORD):BOOL; external ImmDLL name 'ImmSetConversionStatus'; // 446
+function ImmGetOpenStatus(_himc:HIMC):BOOL; external ImmDLL name 'ImmGetOpenStatus'; // 45F
+function ImmSetOpenStatus(_himc:HIMC; fOpen:BOOL):BOOL; external ImmDLL name 'ImmSetOpenStatus'; // 46F
+
+function ImmGetCompositionFontW(_himc:HIMC; lplf:LPLOGFONTW):BOOL; external ImmDLL name 'ImmGetCompositionFontW'; // 456
+{$IFDEF UNICODE}
+function ImmGetCompositionFont(_himc:HIMC; lplf:LPLOGFONTW):BOOL; external ImmDLL name 'ImmGetCompositionFontW';
+{$ELSE UNICODE}
+function ImmGetCompositionFont(_himc:HIMC; lplf:LPLOGFONTA):BOOL; external ImmDLL name 'ImmGetCompositionFontA';
+{$ENDIF UNICODE}
+
+function ImmSetCompositionFontW(_himc:HIMC; lplf:LPLOGFONTW):BOOL; external ImmDLL name 'ImmSetCompositionFontW'; // 46A
+{$IFDEF UNICODE}
+function ImmSetCompositionFont(_himc:HIMC; lplf:LPLOGFONTW):BOOL; external ImmDLL name 'ImmSetCompositionFontW';
+{$ELSE UNICODE}
+function ImmSetCompositionFont(_himc:HIMC; lplf:LPLOGFONT):BOOL; external ImmDLL name 'ImmSetCompositionFontA';
+{$ENDIF UNICODE}
+
+function ImmConfigureIMEW(_hkl:HKL; _hwnd:HWND; dwMode:DWORD; lpData:LPVOID):BOOL; external ImmDLL name 'ImmConfigureIMEW'; // 44D
+{$IFDEF UNICODE}
+function ImmConfigureIME(_hkl:HKL; _hwnd:HWND; dwMode:DWORD; lpData:LPVOID):BOOL; external ImmDLL name 'ImmConfigureIMEW';
+{$ELSE UNICODE}
+function ImmConfigureIME(_hkl:HKL; _hwnd:HWND; dwMode:DWORD; lpData:LPVOID):BOOL; external ImmDLL name 'ImmConfigureIMEA';
+{$ENDIF UNICODE}
+
+function ImmEscapeW(_hkl:HKL; _himc:HIMC; uEscape:UINT; lpData:LPVOID):LRESULT; external ImmDLL name 'ImmEscapeW'; // 451
+{$IFDEF UNICODE}
+function ImmEscape(_hkl:HKL; _himc:HIMC; uEscape:UINT; lpData:LPVOID):LRESULT; external ImmDLL name 'ImmEscapeW';
+{$ELSE UNICODE}
+function ImmEscape(_hkl:HKL; _himc:HIMC; uEscape:UINT; lpData:LPVOID):LRESULT; external ImmDLL name 'ImmEscapeA';
+{$ENDIF UNICODE}
+
+function ImmGetConversionListW(_hkl:HKL;
+                               _himc:HIMC;
+                               lpSrc:LPCWSTR;
+                               lpDest:LPCANDIDATELIST;
+                               dwBufLen:DWORD;
+                               uFlag:UINT):DWORD; external ImmDLL name 'ImmGetConversionListW'; // 458
+{$IFDEF UNICODE}
+function ImmGetConversionList(_hkl:HKL;
+                              _himc:HIMC;
+                              lpSrc:LPCWSTR;
+                              lpDest:LPCANDIDATELIST;
+                              dwBufLen:DWORD;
+                              uFlag:UINT):DWORD; external ImmDLL name 'ImmGetConversionListW';
+{$ELSE UNICODE}
+function ImmGetConversionList(_hkl:HKL;
+                              _himc:HIMC;
+                              lpSrc:LPCSTR;
+                              lpDest:LPCANDIDATELIST;
+                              dwBufLen:DWORD;
+                              uFlag:UINT):DWORD; external ImmDLL name 'ImmGetConversionListA';
+{$ENDIF UNICODE}
+
+function ImmNotifyIME(_himc:HIMC; dwAction:DWORD; dwIndex:DWORD; dwValue:DWORD):BOOL; external ImmDLL name 'ImmNotifyIME'; // 442
+
+function ImmActivateLayout(hSelKL:HKL):BOOL; external ImmDLL name 'ImmActivateLayout'; // ?7BB
+
+function ImmSendNotification:BOOL; external ImmDLL name 'ImmSendNotification'; // ?7BC
+
+function ImmGetStatusWindowPos(_himc:HIMC; lpptPos:LPPOINT):BOOL; external ImmDLL name 'ImmGetStatusWindowPos'; // 471
+function ImmSetStatusWindowPos(_himc:HIMC; lpptPos:LPPOINT):BOOL; external ImmDLL name 'ImmSetStatusWindowPos'; // 470
+function ImmGetCompositionWindow(_himc:HIMC; lpCompForm:LPCOMPOSITIONFORM):BOOL; external ImmDLL name 'ImmGetCompositionWindow'; // 457
+function ImmSetCompositionWindow(_himc:HIMC; lpCompForm:LPCOMPOSITIONFORM):BOOL; external ImmDLL name 'ImmSetCompositionWindow'; // 46C
+function ImmGetCandidateWindow(_himc:HIMC; dwIndex:DWORD; lpCandidate:LPCANDIDATEFORM):BOOL; external ImmDLL name 'ImmGetCandidateWindow'; // 455
+function ImmSetCandidateWindow(_himc:HIMC; lpCandidate:LPCANDIDATEFORM):BOOL; external ImmDLL name 'ImmSetCandidateWindow'; // 469 
+
+function ImmIsUIMessageW(hWndIME:HWND; msg:UINT; wParam:WPARAM; lParam:LPARAM):BOOL; external ImmDLL name 'ImmIsUIMessageW'; // 462
+{$IFDEF UNICODE}
+function ImmIsUIMessage(hWndIME:HWND; msg:UINT; wParam:WPARAM; lParam:LPARAM):BOOL; external ImmDLL name 'ImmIsUIMessageW';
+{$ELSE UNICODE}
+function ImmIsUIMessage(hWndIME:HWND; msg:UINT; wParam:WPARAM; lParam:LPARAM):BOOL; external ImmDLL name 'ImmIsUIMessageA';
+{$ENDIF UNICODE}
+
+function ImmGetVirtualKey(_hwnd:HWND):UINT; external ImmDLL name 'ImmGetVirtualKey'; // 478
+
+type
+     REGISTERWORDENUMPROCA = function(lpszReading:LPCSTR; dwStyle:DWORD; lpszString:LPCSTR; lpData:LPVOID):longint; cdecl;
+     REGISTERWORDENUMPROCW = function(lpszReading:LPCWSTR; dwStyle:DWORD; lpszString:LPCWSTR; lpData:LPVOID):longint; cdecl;
+{$IFDEF UNICODE}
+     REGISTERWORDENUMPROC = REGISTERWORDENUMPROCW;
+{$ELSE UNICODE}
+     REGISTERWORDENUMPROC = REGISTERWORDENUMPROCA;
+{$ENDIF UNICODE}
+
+function ImmRegisterWordW(_hkl:HKL; lpszReading:LPCWSTR; dwStyle:DWORD; lpszRegister:LPCWSTR):BOOL; external ImmDLL name 'ImmRegisterWordW'; // 466
+{$IFDEF UNICODE}
+function ImmRegisterWord(_hkl:HKL; lpszReading:LPCWSTR; dwStyle:DWORD; lpszRegister:LPCWSTR):BOOL; external ImmDLL name 'ImmRegisterWordW';
+{$ELSE UNICODE}
+function ImmRegisterWord(_hkl:HKL; lpszReading:LPCSTR; dwStyle:DWORD; lpszRegister:LPCSTR):BOOL; external ImmDLL name 'ImmRegisterWordA';
+{$ENDIF UNICODE}
+
+function ImmUnregisterWordW(_hkl:HKL; lpszReading:LPCWSTR; dwStyle:DWORD; lpszUnregister:LPCWSTR):BOOL; external ImmDLL name 'ImmUnregisterWordW'; // 475 ImmUnregisterWordW
+{$IFDEF UNICODE}
+function ImmUnregisterWord(_hkl:HKL; lpszReading:LPCWSTR; dwStyle:DWORD; lpszUnregister:LPCWSTR):BOOL; external ImmDLL name 'ImmUnregisterWordW';
+{$ELSE UNICODE}
+function ImmUnregisterWord(_hkl:HKL; lpszReading:LPCSTR; dwStyle:DWORD; lpszUnregister:LPCSTR):BOOL; external ImmDLL name 'ImmUnregisterWordA';
+{$ENDIF UNICODE}
+
+function ImmGetRegisterWordStyleW(_hkl:HKL; nItem:UINT; _lpStyleBuf:LPSTYLEBUFW):UINT; external ImmDLL name 'ImmGetRegisterWordStyleW'; // 461
+{$IFDEF UNICODE}
+function ImmGetRegisterWordStyle(_hkl:HKL; nItem:UINT; _lpStyleBuf:LPSTYLEBUFW):UINT; external ImmDLL name 'ImmGetRegisterWordStyleW';
+{$ELSE UNICODE}
+function ImmGetRegisterWordStyle(_hkl:HKL; nItem:UINT; _lpStyleBuf:LPSTYLEBUFA):UINT; external ImmDLL name 'ImmGetRegisterWordStyleA';
+{$ENDIF UNICODE}
+
+function ImmEnumRegisterWordW(_hkl:HKL;
+                              lpfnEnumProc:REGISTERWORDENUMPROCW;
+                              lpszReading:LPCWSTR;
+                              dwStyle:DWORD;
+                              lpszRegister:LPCWSTR;
+                              lpData:LPVOID):UINT; external ImmDLL name 'ImmEnumRegisterWordW'; // 450
+{$IFDEF UNICODE}
+function ImmEnumRegisterWord(_hkl:HKL;
+                             lpfnEnumProc:REGISTERWORDENUMPROCW;
+                             lpszReading:LPCWSTR;
+                             dwStyle:DWORD;
+                             lpszRegister:LPCWSTR;
+                             lpData:LPVOID):UINT; external ImmDLL name 'ImmEnumRegisterWordW';
+{$ELSE UNICODE}
+function ImmEnumRegisterWord(_hkl:HKL;
+                             lpfnEnumProc:REGISTERWORDENUMPROCA;
+                             lpszReading:LPCSTR;
+                             dwStyle:DWORD;
+                             lpszRegister:LPCSTR;
+                             lpData:LPVOID):UINT; external ImmDLL name 'ImmEnumRegisterWordA';
+{$ENDIF UNICODE}
+
+function ImmDisableIME(idThread:DWORD):BOOL; external ImmDLL name 'ImmDisableIME'; // 443
+
+{$IFNDEF WINCE}
+function ImmGetImeMenuItemsA(_himc:HIMC;
+                             dwFlags:DWORD;
+                             dwType:DWORD;
+                             lpImeParentMenu:LPIMEMENUITEMINFOA;
+                             lpImeMenu:LPIMEMENUITEMINFOA;
+                             dwSize:DWORD):DWORD; external ImmDLL name 'ImmGetImeMenuItemsA';
+{$ENDIF WINCE}
+
+function ImmGetImeMenuItemsW(_himc:HIMC;
+                             dwFlags:DWORD;
+                             dwType:DWORD;
+                             lpImeParentMenu:LPIMEMENUITEMINFOW;
+                             lpImeMenu:LPIMEMENUITEMINFOW;
+                             dwSize:DWORD):DWORD; external ImmDLL name 'ImmGetImeMenuItemsW'; // 479
+{$IFDEF UNICODE}
+function ImmGetImeMenuItems(_himc:HIMC;
+                            dwFlags:DWORD;
+                            dwType:DWORD;
+                            lpImeParentMenu:LPIMEMENUITEMINFO;
+                            lpImeMenu:LPIMEMENUITEMINFO;
+                            dwSize:DWORD):DWORD; external ImmDLL name 'ImmGetImeMenuItemsW';
+{$ELSE UNICODE}
+function ImmGetImeMenuItems(_himc:HIMC;
+                            dwFlags:DWORD;
+                            dwType:DWORD;
+                            lpImeParentMenu:LPIMEMENUITEMINFO;
+                            lpImeMenu:LPIMEMENUITEMINFO;
+                            dwSize:DWORD):DWORD; external ImmDLL name 'ImmGetImeMenuItemsA';
+{$ENDIF UNICODE}
+
+
+// wParam for WM_IME_CONTROL
+const
+      IMC_GETCANDIDATEPOS             = $0007;
+      IMC_SETCANDIDATEPOS             = $0008;
+      IMC_GETCOMPOSITIONFONT          = $0009;
+      IMC_SETCOMPOSITIONFONT          = $000A;
+      IMC_GETCOMPOSITIONWINDOW        = $000B;
+      IMC_SETCOMPOSITIONWINDOW        = $000C;
+      IMC_GETSTATUSWINDOWPOS          = $000F;
+      IMC_SETSTATUSWINDOWPOS          = $0010;
+      IMC_CLOSESTATUSWINDOW           = $0021;
+      IMC_OPENSTATUSWINDOW            = $0022;
+
+
+
+// dwAction for ImmNotifyIME
+const
+      NI_OPENCANDIDATE                = $0010;
+      NI_CLOSECANDIDATE               = $0011;
+      NI_SELECTCANDIDATESTR           = $0012;
+      NI_CHANGECANDIDATELIST          = $0013;
+      NI_FINALIZECONVERSIONRESULT     = $0014;
+      NI_COMPOSITIONSTR               = $0015;
+      NI_SETCANDIDATE_PAGESTART       = $0016;
+      NI_SETCANDIDATE_PAGESIZE        = $0017;
+
+
+// lParam for WM_IME_SETCONTEXT
+      ISC_SHOWUICANDIDATEWINDOW       = $00000001;
+      ISC_SHOWUICOMPOSITIONWINDOW     = $80000000;
+      ISC_SHOWUIGUIDELINE             = $40000000;
+      ISC_SHOWUIALLCANDIDATEWINDOW    = $0000000F;
+      ISC_SHOWUIALL                   = $C000000F;
+
+
+// dwIndex for ImmNotifyIME/NI_COMPOSITIONSTR
+      CPS_COMPLETE                    = $0001;
+      CPS_CONVERT                     = $0002;
+      CPS_REVERT                      = $0003;
+      CPS_CANCEL                      = $0004;
+
+
+// the modifiers of hot key
+      MOD_ALT                         = $0001;
+      MOD_CONTROL                     = $0002;
+      MOD_SHIFT                       = $0004;
+
+
+      MOD_LEFT                        = $8000;
+      MOD_RIGHT                       = $4000;
+
+      MOD_ON_KEYUP                    = $0800;
+      MOD_IGNORE_ALL_MODIFIER         = $0400;
+
+
+// Windows for Simplified Chinese Edition hot key ID from 0x10 - 0x2F
+      IME_CHOTKEY_FIRST						                 = $10;
+      IME_CHOTKEY_IME_NONIME_TOGGLE           = $10;
+      IME_CHOTKEY_SHAPE_TOGGLE                = $11;
+      IME_CHOTKEY_SYMBOL_TOGGLE               = $12;
+      IME_CHOTKEY_LAST						                  = $2f;
+
+// Windows for Japanese Edition hot key ID from 0x30 - 0x4F
+      IME_JHOTKEY_FIRST						                 = $30;
+      IME_JHOTKEY_CLOSE_OPEN                  = $30;
+      IME_JHOTKEY_LAST						                  = $4f;
+
+// Windows for Korean Edition hot key ID from 0x50 - 0x6F
+      IME_KHOTKEY_FIRST						                 = $50;
+      IME_KHOTKEY_SHAPE_TOGGLE                = $50;
+      IME_KHOTKEY_HANJACONVERT                = $51;
+      IME_KHOTKEY_ENGLISH                     = $52;
+      IME_KHOTKEY_LAST						                  = $6f;
+
+// Windows for Traditional Chinese Edition hot key ID from 0x70 - 0x8F
+      IME_THOTKEY_FIRST						                 = $70;
+      IME_THOTKEY_IME_NONIME_TOGGLE           = $70;
+      IME_THOTKEY_SHAPE_TOGGLE                = $71;
+      IME_THOTKEY_SYMBOL_TOGGLE               = $72;
+      IME_THOTKEY_LAST						                  = $8f;
+
+// direct switch hot key ID from 0x100 - 0x11F
+      IME_HOTKEY_DSWITCH_FIRST                = $100;
+      IME_HOTKEY_DSWITCH_LAST                 = $11F;
+
+// IME private hot key from 0x200 - 0x21F
+      IME_HOTKEY_PRIVATE_FIRST                = $200;
+      IME_ITHOTKEY_RESEND_RESULTSTR           = $200;
+      IME_ITHOTKEY_PREVIOUS_COMPOSITION       = $201;
+      IME_ITHOTKEY_UISTYLE_TOGGLE             = $202;
+      IME_HOTKEY_PRIVATE_LAST                 = $21F;
+
+
+// dwSystemInfoFlags bits
+
+// parameter of ImmGetCompositionString
+      GCS_COMPREADSTR                 = $0001;
+      GCS_COMPREADATTR                = $0002;
+      GCS_COMPREADCLAUSE              = $0004;
+      GCS_COMPSTR                     = $0008;
+      GCS_COMPATTR                    = $0010;
+      GCS_COMPCLAUSE                  = $0020;
+      GCS_CURSORPOS                   = $0080;
+      GCS_DELTASTART                  = $0100;
+      GCS_RESULTREADSTR               = $0200;
+      GCS_RESULTREADCLAUSE            = $0400;
+      GCS_RESULTSTR                   = $0800;
+      GCS_RESULTCLAUSE                = $1000;
+
+// style bit flags for WM_IME_COMPOSITION
+      CS_INSERTCHAR                   = $2000;
+      CS_NOMOVECARET                  = $4000;
+
+
+
+// bits of fdwInit of INPUTCONTEXT
+// IME version constants
+      IMEVER_0310                     = $0003000A;
+      IMEVER_0400                     = $00040000;
+
+
+// IME property bits
+      IME_PROP_END_UNLOAD             = $00000001;
+      IME_PROP_KBD_CHAR_FIRST         = $00000002;
+      IME_PROP_IGNORE_UPKEYS          = $00000004;
+      IME_PROP_NEED_ALTKEY            = $00000008;
+      IME_PROP_NO_KEYS_ON_CLOSE       = $00000010;
+      IME_PROP_AT_CARET               = $00010000;
+      IME_PROP_SPECIAL_UI             = $00020000;
+      IME_PROP_CANDLIST_START_FROM_1  = $00040000;
+      IME_PROP_UNICODE                = $00080000;
+      IME_PROP_COMPLETE_ON_UNSELECT   = $00100000;
+// IME property bits, anyone adding a new bit must update this
+      IME_PROP_ALL                    = $001F001F;
+
+
+// IME UICapability bits
+      UI_CAP_2700                     = $00000001;
+      UI_CAP_ROT90                    = $00000002;
+      UI_CAP_ROTANY                   = $00000004;
+
+
+// ImmSetCompositionString Capability bits
+      SCS_CAP_COMPSTR                 = $00000001;
+      SCS_CAP_MAKEREAD                = $00000002;
+      SCS_CAP_SETRECONVERTSTRING      = $00000004;
+
+
+// IME WM_IME_SELECT inheritance Capability bits
+      SELECT_CAP_CONVERSION           = $00000001;
+      SELECT_CAP_SENTENCE             = $00000002;
+
+
+// ID for deIndex of ImmGetGuideLine
+      GGL_LEVEL                       = $00000001;
+      GGL_INDEX                       = $00000002;
+      GGL_STRING                      = $00000003;
+      GGL_PRIVATE                     = $00000004;
+
+
+// ID for dwLevel of GUIDELINE Structure
+      GL_LEVEL_NOGUIDELINE            = $00000000;
+      GL_LEVEL_FATAL                  = $00000001;
+      GL_LEVEL_ERROR                  = $00000002;
+      GL_LEVEL_WARNING                = $00000003;
+      GL_LEVEL_INFORMATION            = $00000004;
+
+
+// ID for dwIndex of GUIDELINE Structure
+      GL_ID_UNKNOWN                   = $00000000;
+      GL_ID_NOMODULE                  = $00000001;
+      GL_ID_NODICTIONARY              = $00000010;
+      GL_ID_CANNOTSAVE                = $00000011;
+      GL_ID_NOCONVERT                 = $00000020;
+      GL_ID_TYPINGERROR               = $00000021;
+      GL_ID_TOOMANYSTROKE             = $00000022;
+      GL_ID_READINGCONFLICT           = $00000023;
+      GL_ID_INPUTREADING              = $00000024;
+      GL_ID_INPUTRADICAL              = $00000025;
+      GL_ID_INPUTCODE                 = $00000026;
+      GL_ID_INPUTSYMBOL               = $00000027;
+      GL_ID_CHOOSECANDIDATE           = $00000028;
+      GL_ID_REVERSECONVERSION         = $00000029;
+      GL_ID_PRIVATE_FIRST             = $00008000;
+      GL_ID_PRIVATE_LAST              = $0000FFFF;
+
+
+// ID for dwIndex of ImmGetProperty
+      IGP_GETIMEVERSION               = DWORD(-4);
+      IGP_PROPERTY                    = $00000004;
+      IGP_CONVERSION                  = $00000008;
+      IGP_SENTENCE                    = $0000000c;
+      IGP_UI                          = $00000010;
+      IGP_SETCOMPSTR                  = $00000014;
+      IGP_SELECT                      = $00000018;
+      IGP_PRIVATEDATASIZE				         = $0000001c;
+// last property index, anyone adding a new property index must update this
+      IGP_LAST                        = IGP_PRIVATEDATASIZE;
+
+
+// dwIndex for ImmSetCompositionString API
+      SCS_SETSTR                      = GCS_COMPREADSTR or GCS_COMPSTR;
+      SCS_CHANGEATTR                  = GCS_COMPREADATTR or GCS_COMPATTR;
+      SCS_CHANGECLAUSE                = GCS_COMPREADCLAUSE or GCS_COMPCLAUSE;
+      SCS_SETRECONVERTSTRING          = $00010000;
+      SCS_QUERYRECONVERTSTRING        = $00020000;
+
+
+// attribute for COMPOSITIONSTRING Structure
+      ATTR_INPUT                      = $00;
+      ATTR_TARGET_CONVERTED           = $01;
+      ATTR_CONVERTED                  = $02;
+      ATTR_TARGET_NOTCONVERTED        = $03;
+      ATTR_INPUT_ERROR                = $04;
+
+
+// bit field for IMC_SETCOMPOSITIONWINDOW, IMC_SETCANDIDATEWINDOW
+      CFS_DEFAULT                     = $0000;
+      CFS_RECT                        = $0001;
+      CFS_POINT                       = $0002;
+      CFS_FORCE_POSITION              = $0020;
+      CFS_CANDIDATEPOS                = $0040;
+      CFS_EXCLUDE                     = $0080;
+
+
+// conversion direction for ImmGetConversionList
+      GCL_CONVERSION                  = $0001;
+      GCL_REVERSECONVERSION           = $0002;
+      GCL_REVERSE_LENGTH              = $0003;
+
+
+// bit field for conversion mode
+      IME_CMODE_ALPHANUMERIC          = $0000;
+      IME_CMODE_NATIVE                = $0001;
+      IME_CMODE_CHINESE               = IME_CMODE_NATIVE;
+// IME_CMODE_HANGEUL is old name of IME_CMODE_HANGUL. It will be gone eventually.
+      IME_CMODE_HANGEUL               = IME_CMODE_NATIVE;
+      IME_CMODE_HANGUL                = IME_CMODE_NATIVE;
+      IME_CMODE_JAPANESE              = IME_CMODE_NATIVE;
+      IME_CMODE_KATAKANA              = $0002;  // only effect under IME_CMODE_NATIVE
+      IME_CMODE_LANGUAGE              = $0003;
+      IME_CMODE_FULLSHAPE             = $0008;
+      IME_CMODE_ROMAN                 = $0010;
+      IME_CMODE_CHARCODE              = $0020;
+      IME_CMODE_HANJACONVERT          = $0040;
+      IME_CMODE_SOFTKBD               = $0080;
+      IME_CMODE_NOCONVERSION          = $0100;
+      IME_CMODE_EUDC                  = $0200;
+      IME_CMODE_SYMBOL                = $0400;
+      IME_CMODE_PASSWORD				          = $80000000;
+
+
+      IME_SMODE_NONE                  = $0000;
+      IME_SMODE_PLAURALCLAUSE         = $0001;
+      IME_SMODE_SINGLECONVERT         = $0002;
+      IME_SMODE_AUTOMATIC             = $0004;
+      IME_SMODE_PHRASEPREDICT         = $0008;
+
+
+// style of candidate
+      IME_CAND_UNKNOWN                = $0000;
+      IME_CAND_READ                   = $0001;
+      IME_CAND_CODE                   = $0002;
+      IME_CAND_MEANING                = $0003;
+      IME_CAND_RADICAL                = $0004;
+      IME_CAND_STROKE                 = $0005;
+
+
+// wParam of report message WM_IME_NOTIFY
+      IMN_CLOSESTATUSWINDOW           = $0001;
+      IMN_OPENSTATUSWINDOW            = $0002;
+      IMN_CHANGECANDIDATE             = $0003;
+      IMN_CLOSECANDIDATE              = $0004;
+      IMN_OPENCANDIDATE               = $0005;
+      IMN_SETCONVERSIONMODE           = $0006;
+      IMN_SETSENTENCEMODE             = $0007;
+      IMN_SETOPENSTATUS               = $0008;
+      IMN_SETCANDIDATEPOS             = $0009;
+      IMN_SETCOMPOSITIONFONT          = $000A;
+      IMN_SETCOMPOSITIONWINDOW        = $000B;
+      IMN_SETSTATUSWINDOWPOS          = $000C;
+      IMN_GUIDELINE                   = $000D;
+      IMN_PRIVATE                     = $000E;
+
+
+// error code of ImmGetCompositionString
+      IMM_ERROR_NODATA                = -1;
+      IMM_ERROR_GENERAL               = -2;
+
+
+// dialog mode of ImmConfigureIME
+      IME_CONFIG_GENERAL              = 1;
+      IME_CONFIG_REGISTERWORD         = 2;
+      IME_CONFIG_SELECTDICTIONARY     = 3;
+
+
+// dialog mode of ImmEscape
+      IME_ESC_QUERY_SUPPORT           = $0003;
+      IME_ESC_RESERVED_FIRST          = $0004;
+      IME_ESC_RESERVED_LAST           = $07FF;
+      IME_ESC_PRIVATE_FIRST           = $0800;
+      IME_ESC_PRIVATE_LAST            = $0FFF;
+      IME_ESC_SEQUENCE_TO_INTERNAL    = $1001;
+      IME_ESC_GET_EUDC_DICTIONARY     = $1003;
+      IME_ESC_SET_EUDC_DICTIONARY     = $1004;
+      IME_ESC_MAX_KEY                 = $1005;
+      IME_ESC_IME_NAME                = $1006;
+      IME_ESC_SYNC_HOTKEY             = $1007;
+      IME_ESC_HANJA_MODE              = $1008;
+      IME_ESC_AUTOMATA                = $1009;
+      IME_ESC_PRIVATE_HOTKEY          = $100a;
+
+
+// style of word registration
+      IME_REGWORD_STYLE_EUDC          = $00000001;
+      IME_REGWORD_STYLE_USER_FIRST    = $80000000;
+      IME_REGWORD_STYLE_USER_LAST     = $FFFFFFFF;
+
+// dwFlags for ImmAssociateContextEx
+      IACE_CHILDREN                   = $0001;
+      IACE_DEFAULT                    = $0010;
+      IACE_IGNORENOCONTEXT            = $0020;
+
+// dwFlags for ImmGetImeMenuItems
+      IGIMIF_RIGHTMENU                = $0001;
+
+// dwType for ImmGetImeMenuItems
+      IGIMII_CMODE                    = $0001;
+      IGIMII_SMODE                    = $0002;
+      IGIMII_CONFIGURE                = $0004;
+      IGIMII_TOOLS                    = $0008;
+      IGIMII_HELP                     = $0010;
+      IGIMII_OTHER                    = $0020;
+      IGIMII_INPUTTOOLS               = $0040;
+
+// fType of IMEMENUITEMINFO structure
+      IMFT_RADIOCHECK = $00001;
+      IMFT_SEPARATOR  = $00002;
+      IMFT_SUBMENU    = $00004;
+
+// fState of IMEMENUITEMINFO structure
+      IMFS_GRAYED          = MF_GRAYED;
+      IMFS_DISABLED        = MFS_DISABLED;
+      IMFS_CHECKED         = MFS_CHECKED;
+      IMFS_HILITE          = MFS_HILITE;
+      IMFS_ENABLED         = MFS_ENABLED;
+      IMFS_UNCHECKED       = MFS_UNCHECKED;
+      IMFS_UNHILITE        = MFS_UNHILITE;
+      IMFS_DEFAULT         = MFS_DEFAULT;
+
+
+
+// type of soft keyboard
+// for Windows Traditional Chinese Edition
+      SOFTKEYBOARD_TYPE_T1            = $0001;
+// for Windows Simplified Chinese Edition
+      SOFTKEYBOARD_TYPE_C1            = $0002;
+
+
+
+//	Windows CE immp.h merged into imm.h
+
+type
+     tagCOMPOSITIONSTRING = record
+       dwSize:DWORD;
+       dwCompReadAttrLen:DWORD;
+       dwCompReadAttrOffset:DWORD;
+       dwCompReadClauseLen:DWORD;
+       dwCompReadClauseOffset:DWORD;
+       dwCompReadStrLen:DWORD;
+       dwCompReadStrOffset:DWORD;
+       dwCompAttrLen:DWORD;
+       dwCompAttrOffset:DWORD;
+       dwCompClauseLen:DWORD;
+       dwCompClauseOffset:DWORD;
+       dwCompStrLen:DWORD;
+       dwCompStrOffset:DWORD;
+       dwCursorPos:DWORD;
+       dwDeltaStart:DWORD;
+       dwResultReadClauseLen:DWORD;
+       dwResultReadClauseOffset:DWORD;
+       dwResultReadStrLen:DWORD;
+       dwResultReadStrOffset:DWORD;
+       dwResultClauseLen:DWORD;
+       dwResultClauseOffset:DWORD;
+       dwResultStrLen:DWORD;
+       dwResultStrOffset:DWORD;
+       dwPrivateSize:DWORD;
+       dwPrivateOffset:DWORD;
+     end;
+     COMPOSITIONSTRING = tagCOMPOSITIONSTRING;
+     PCOMPOSITIONSTRING = ^tagCOMPOSITIONSTRING;
+     NPCOMPOSITIONSTRING = ^tagCOMPOSITIONSTRING;
+     LPCOMPOSITIONSTRING = ^tagCOMPOSITIONSTRING;
+
+
+type
+     tagGUIDELINE = record
+       dwSize:DWORD;
+       dwLevel:DWORD;
+       dwIndex:DWORD;
+       dwStrLen:DWORD;
+       dwStrOffset:DWORD;
+       dwPrivateSize:DWORD;
+       dwPrivateOffset:DWORD;
+     end;
+     GUIDELINE = tagGUIDELINE;
+     PGUIDELINE = ^tagGUIDELINE;
+     NPGUIDELINE = ^tagGUIDELINE;
+     LPGUIDELINE = ^tagGUIDELINE;
+
+type
+     tagRECONVERTSTRING = record
+       dwSize:DWORD;
+       dwVersion:DWORD;
+       dwStrLen:DWORD;
+       dwStrOffset:DWORD;
+       dwCompStrLen:DWORD;
+       dwCompStrOffset:DWORD;
+       dwTargetStrLen:DWORD;
+       dwTargetStrOffset:DWORD;
+     end;
+     RECONVERTSTRING = tagRECONVERTSTRING;
+     PRECONVERTSTRING = ^tagRECONVERTSTRING;
+     NPRECONVERTSTRING = ^tagRECONVERTSTRING;
+     LPRECONVERTSTRING = ^tagRECONVERTSTRING;
+
+type
+     tagCANDIDATEINFO = record
+       dwSize:DWORD;
+       dwCount:DWORD;
+       dwOffset:array[0..31] of DWORD;
+       dwPrivateSize:DWORD;
+       dwPrivateOffset:DWORD;
+     end;
+     CANDIDATEINFO = tagCANDIDATEINFO;
+     PCANDIDATEINFO = ^tagCANDIDATEINFO;
+     NPCANDIDATEINFO = ^tagCANDIDATEINFO;
+     LPCANDIDATEINFO = ^tagCANDIDATEINFO;
+
+
+type
+     INPUTCONTEXTLOGFONT = record
+       case longint of
+         0: (A:LOGFONTA);
+         1: (W:LOGFONTW);
+     end;
+     tagINPUTCONTEXT = record
+       _hwnd:HWND;
+       fOpen:BOOL;
+					  fdwClient:DWORD;		//	Windows CE addition.
+	      hwndImeInUse:HWND;	//	Windows CE addition.
+       ptStatusWndPos:POINT;
+       ptSoftKbdPos:POINT;
+       fdwConversion:DWORD;
+       fdwSentence:DWORD;
+       lfFont:INPUTCONTEXTLOGFONT;
+(*
+    union   {
+        LOGFONTA        A;
+        LOGFONTW        W;
+    } lfFont;
+*)
+       cfCompForm:COMPOSITIONFORM;
+       cfCandForm:array[0..3] of CANDIDATEFORM;
+       hCompStr:HIMCC;
+       hCandInfo:HIMCC;
+       hGuideLine:HIMCC;
+       hPrivate:HIMCC;
+       dwNumMsgBuf:DWORD;
+       hMsgBuf:HIMCC;
+       fdwInit:DWORD;
+       dwReserve:array[0..2] of DWORD;
+       uSavedVKey:UINT;
+       fChgMsg:BOOL;
+       fdwFlags:DWORD;
+       fdw31Compat:DWORD;
+       dwRefCount:DWORD;
+
+       pImeModeSaver:PVOID;
+       fdwDirty:DWORD;
+     end;
+     INPUTCONTEXT = tagINPUTCONTEXT;
+     PINPUTCONTEXT = ^tagINPUTCONTEXT;
+     NPINPUTCONTEXT = ^tagINPUTCONTEXT;
+     LPINPUTCONTEXT = ^tagINPUTCONTEXT;
+
+
+type
+     tagIMEINFO = record
+       dwPrivateDataSize:DWORD;
+       fdwProperty:DWORD;
+       fdwConversionCaps:DWORD;
+       fdwSentenceCaps:DWORD;
+       fdwUICaps:DWORD;
+       fdwSCSCaps:DWORD;
+       fdwSelectCaps:DWORD;
+     end;
+     IMEINFO = tagIMEINFO;
+     PIMEINFO = ^tagIMEINFO;
+     NPIMEINFO = ^tagIMEINFO;
+     LPIMEINFO = ^tagIMEINFO;
+
+
+type
+     tagSOFTKBDDATA = record
+       uCount:UINT;
+       wCode:array[0..0,0..255] of word;
+     end;
+     SOFTKBDDATA = tagSOFTKBDDATA;
+     PSOFTKBDDATA = ^tagSOFTKBDDATA;
+     NPSOFTKBDDATA = ^tagSOFTKBDDATA;
+     LPSOFTKBDDATA = ^tagSOFTKBDDATA;
+
+
+function ImmGetHotKey(dwHotKeyID:DWORD; lpuModifiers:LPUINT; lpuVKey:LPUINT; _lphkl:LPHKL):BOOL; external ImmDLL name 'ImmGetHotKey'; // 46E
+function ImmSetHotKey(dwHotKeyID:DWORD; uModifiers:UINT; uVKey:UINT; _hkl:HKL):BOOL; external ImmDLL name 'ImmSetHotKey'; // 46D 
+function ImmGenerateMessage(_himc:HIMC):BOOL; external ImmDLL name 'ImmGenerateMessage'; // 452 
+
+{$IFNDEF WINCE}
+function ImmRequestMessageA(HIMC, WPARAM, LPARAM):LRESULT; external ImmDLL name 'ImmRequestMessageA';
+{$ENDIF WINCE}
+function ImmRequestMessageW(_himc:HIMC; wParam:WPARAM; lParam:LPARAM):LRESULT; external ImmDLL name 'ImmRequestMessageW'; // 480
+{$IFDEF UNICODE}
+function ImmRequestMessage(_himc:HIMC; wParam:WPARAM; lParam:LPARAM):LRESULT; external ImmDLL name 'ImmRequestMessageW';
+{$ELSE UNICODE}
+function ImmRequestMessage(_himc:HIMC; wParam:WPARAM; lParam:LPARAM):LRESULT; external ImmDLL name 'ImmRequestMessageA';
+{$ENDIF UNICODE}
+
+//
+// Prototype of soft keyboard APIs
+//
+
+{$IFNDEF WINCE}
+function ImmCreateSoftKeyboard(param1:UINT; _hwnd:HWND; paran3:longint; param4:longint):HWND; external ImmDLL name 'ImmCreateSoftKeyboard';
+function ImmDestroySoftKeyboard(_hwnd:HWND):BOOL; external ImmDLL name 'ImmDestroySoftKeyboard';
+function ImmShowSoftKeyboard(_hwnd:HWND; param2:longint):BOOL; external ImmDLL name 'ImmShowSoftKeyboard';
+{$ENDIF WINCE}
+
+function ImmLockIMC(_himc:HIMC):LPINPUTCONTEXT; external ImmDLL name 'ImmLockIMC'; // 463
+function ImmUnlockIMC(_himc:HIMC):BOOL; external ImmDLL name 'ImmUnlockIMC'; // 473 
+function ImmGetIMCLockCount(_himc:HIMC):DWORD; external ImmDLL name 'ImmGetIMCLockCount'; // 45E 
+
+function ImmCreateIMCC(dwSize:DWORD):HIMCC; external ImmDLL name 'ImmCreateIMCC'; // 44E 
+function ImmDestroyIMCC(_himcc:HIMCC):HIMCC; external ImmDLL name 'ImmDestroyIMCC'; // 44F
+function ImmLockIMCC(_himcc:HIMCC):LPVOID; external ImmDLL name 'ImmLockIMCC'; // 464
+function ImmUnlockIMCC(_himcc:HIMCC):BOOL; external ImmDLL name 'ImmUnlockIMCC'; // 474
+function ImmGetIMCCLockCount(_himcc:HIMCC):DWORD; external ImmDLL name 'ImmGetIMCCLockCount'; // 45C
+function ImmReSizeIMCC(_himcc:HIMCC; dwSize:DWORD):HIMCC; external ImmDLL name 'ImmReSizeIMCC'; // 465
+function ImmGetIMCCSize(_himcc:HIMCC):DWORD; external ImmDLL name 'ImmGetIMCCSize'; // 45D
+
+
+const
+// the window extra offset
+      IMMGWL_IMC                      = 0;
+      IMMGWL_PRIVATE                  = SizeOf(LONG);
+
+
+// 0x11 - 0x20 is reserved for soft keyboard
+// wParam for WM_IME_SYSTEM
+      IMS_DESTROYWINDOW               = $0001;
+      IMS_IME31COMPATIBLE             = $0002;
+      IMS_SETOPENSTATUS               = $0003;
+      IMS_SETACTIVECONTEXT            = $0004;
+      IMS_CHANGE_SHOWSTAT             = $0005;
+      IMS_WINDOWPOS                   = $0006;
+
+      IMS_SENDIMEMSG                  = $0007;
+      IMS_SENDIMEMSGEX                = $0008;
+      IMS_SETCANDIDATEPOS             = $0009;
+      IMS_SETCOMPOSITIONFONT          = $000A;
+      IMS_SETCOMPOSITIONWINDOW        = $000B;
+      IMS_CHECKENABLE                 = $000C;
+      IMS_CONFIGUREIME                = $000D;
+      IMS_CONTROLIMEMSG               = $000E;
+      IMS_SETOPENCLOSE                = $000F;
+      IMS_ISACTIVATED                 = $0010;
+      IMS_UNLOADTHREADLAYOUT          = $0011;
+      IMS_LCHGREQUEST                 = $0012;
+      IMS_SETSOFTKBDONOFF             = $0013;
+      IMS_GETCONVERSIONMODE           = $0014;
+      IMS_IMEHELP                     = $0015;
+
+      IMS_IMENT35SENDAPPMSG           = $0016;
+      IMS_ACTIVATECONTEXT             = $0017;
+      IMS_DEACTIVATECONTEXT           = $0018;
+      IMS_ACTIVATETHREADLAYOUT        = $0019;
+      IMS_CLOSEPROPERTYWINDOW         = $001a;
+      IMS_OPENPROPERTYWINDOW          = $001b;
+
+      IMS_GETIMEMENU                  = $001c;
+      IMS_ENDIMEMENU                  = $001d;
+
+      IMS_SENDNOTIFICATION            = $001f;
+// IMS_SENDNOTIFICATION dirty bits for INPUTCONTEXT
+      IMSS_UPDATE_OPEN               	= $0001;
+      IMSS_UPDATE_CONVERSION         	= $0002;
+      IMSS_UPDATE_SENTENCE           	= $0004;
+      IMSS_INIT_OPEN                 	= $0100;
+
+// These two msgs are CE only & on desktop IMS_XXX msgs range till
+// 0x0024 - so these two msgs are defined from 0x0030.
+      IMS_SETCONVERSIONSTATUS         = $0030;
+      IMS_SETSENTENCEMODE             = $0031;
+
+// for NI_CONTEXTUPDATED
+      IMC_GETCONVERSIONMODE           = $0001;
+      IMC_SETCONVERSIONMODE           = $0002;
+      IMC_GETSENTENCEMODE             = $0003;
+      IMC_SETSENTENCEMODE             = $0004;
+      IMC_GETOPENSTATUS               = $0005;
+      IMC_SETOPENSTATUS               = $0006;
+// wParam for WM_IME_CONTROL to the soft keyboard
+      IMC_GETSOFTKBDFONT              = $0011;
+      IMC_SETSOFTKBDFONT              = $0012;
+      IMC_GETSOFTKBDPOS               = $0013;
+      IMC_SETSOFTKBDPOS               = $0014;
+      IMC_GETSOFTKBDSUBTYPE           = $0015;
+      IMC_SETSOFTKBDSUBTYPE           = $0016;
+      IMC_SETSOFTKBDDATA              = $0018;
+
+
+      NI_CONTEXTUPDATED               = $0003;
+// the return bits of ImmProcessHotKey
+      IPHK_HOTKEY                     = $0001;
+      IPHK_PROCESSBYIME               = $0002;
+      IPHK_CHECKCTRL                  = $0004;
+// NT only
+      IPHK_SKIPTHISKEY                = $0010;
+
+
+      MOD_WIN                         = $0008;
+      IME_INVALID_HOTKEY              = $ffffffff;
+      IME_SYSINFO_WINLOGON            = $0001;
+      IME_SYSINFO_WOW16               = $0002;
+      GCS_COMP                        = GCS_COMPSTR or GCS_COMPATTR or GCS_COMPCLAUSE;
+      GCS_COMPREAD                    = GCS_COMPREADSTR or GCS_COMPREADATTR or GCS_COMPREADCLAUSE;
+      GCS_RESULT                      = GCS_RESULTSTR or GCS_RESULTCLAUSE;
+      GCS_RESULTREAD                  = GCS_RESULTREADSTR or GCS_RESULTREADCLAUSE;
+      INIT_STATUSWNDPOS               = $00000001;
+      INIT_CONVERSION                 = $00000002;
+      INIT_SENTENCE                   = $00000004;
+      INIT_LOGFONT                    = $00000008;
+      INIT_COMPFORM                   = $00000010;
+      INIT_SOFTKBDPOS                 = $00000020;
+
+
+// fdw31Compat of INPUTCONTEXT
+      F31COMPAT_NOKEYTOIME     = $00000001;
+      F31COMPAT_MCWHIDDEN      = $00000002;
+      F31COMPAT_MCWVERTICAL    = $00000004;
+      F31COMPAT_CALLFROMWINNLS = $00000008;
+      F31COMPAT_SAVECTRL       = $00010000;
+      F31COMPAT_PROCESSEVENT   = $00020000;
+      F31COMPAT_ECSETCFS       = $00040000;
+
+
+// the return value of ImmGetAppIMECompatFlags
+      IMECOMPAT_UNSYNC31IMEMSG = $00000001;
+// the meaning of this bit depend on the same bit in
+// IMELinkHdr.ctCountry.fdFlags
+      IMECOMPAT_DUMMYTASK      = $00000002;
+// For Japanese and Hangeul versions, this bit on
+// indicates no dummy task is needed
+      IMECOMPAT_NODUMMYTASK    = IMECOMPAT_DUMMYTASK;
+// For Chinese and PRC versions, this bit on indicates
+// a dummy tasked is needed
+      IMECOMPAT_NEEDDUMMYTASK         = IMECOMPAT_DUMMYTASK;
+      IMECOMPAT_POSTDUMMY             = $00000004;
+      IMECOMPAT_ECNOFLUSH             = $00000008;
+      IMECOMPAT_NOINPUTLANGCHGTODLG   = $00000010;
+      IMECOMPAT_ECREDRAWPARENT        = $00000020;
+      IMECOMPAT_SENDOLDSBM            = $00000040;
+      IMECOMPAT_UNSYNC31IMEMSG2       = $00000080;
+      IMECOMPAT_NOIMEMSGINTERTASK     = $00000100;
+      IMECOMPAT_USEXWANSUNG           = $00000200;
+      IMECOMPAT_JXWFORATOK            = $00000400;
+      IMECOMPAT_NOIME                 = $00000800;
+      IMECOMPAT_NOKBDHOOK             = $00001000;
+      IMECOMPAT_APPWNDREMOVEIMEMSGS   = $00002000;
+      IMECOMPAT_LSTRCMP31COMPATIBLE   = $00004000;
+      IMECOMPAT_USEALTSTKFORSHLEXEC   = $00008000;
+      IMECOMPAT_NOVKPROCESSKEY        = $00010000;
+      IMECOMPAT_NOYIELDWMCHAR         = $00020000;
+      IMECOMPAT_SENDSC_RESTORE        = $00040000;
+      IMECOMPAT_NOSENDLANGCHG         = $00080000;
+      IMECOMPAT_FORCEUNSYNC31IMEMSG   = $00100000;
+      IMECOMPAT_CONSOLEIMEPROCESS     = $00200000;
+
+      IMGTF_CANT_SWITCH_LAYOUT        = $00000001;
+      IMGTF_CANT_UNLOAD_IME           = $00000002;
+
+      UI_CAP_SOFTKBD                  = $00010000;
+// all IME UICapability bits, anyone adding a new bit must update this mask
+      UI_CAP_ALL                      = $00010007;
+// all ImmSetCompositionString Capability bits, anyone adding a new bit must update this mask
+      SCS_CAP_ALL                     = $00000007;
+// all IME WM_IME_SELECT inheritance Capability bits, anyone adding a new bit must update this mask
+      SELECT_CAP_ALL                  = $00000003;
+      CFS_SCREEN                      = $0004;
+      CFS_VERTICAL                    = $0008;
+      CFS_HIDDEN                      = $0010;
+// all conversion mode bits, anyone adding a new bit must update this mask
+      IME_CMODE_ALL                   = $0FFF;
+// all sentence mode bits, anyone adding a new bit must update this mask
+      IME_SMODE_ALL                   = $001F;
+      IMN_SOFTKBDDESTROYED            = $0011;
+
+
+
+{$IFNDEF WINCE}
+// protype of IME APIs
+function ImeInquire(param1:LPIMEINFO; lpszUIClass:LPWSTR; dwSystemInfoFlags:DWORD):BOOL;
+function ImeConfigure(param1:HKL; param2:HWND; param3:DWORD; param4:LPVOID):BOOL;
+function ImeConversionListW(param1:HIMC; param2:LPCWSTR; param3:LPCANDIDATELIST; dwBufLen:DWORD; uFlag:UINT):DWORD;
+function ImeDestroy(param1:UINT):BOOL;
+function ImeEscape(param1:HIMC; param2:UINT; param3:LPVOID):LRESULT;
+function ImeProcessKey(param1:HIMC; param2:UINT; param3:LPARAM; param4:LPBYTE):BOOL;
+function ImeSelect(param1:HIMC; param2:BOOL):BOOL;
+function ImeSetActiveContext(param1:HIMC; param2:BOOL):BOOL;
+function ImeToAsciiEx(uVirtKey:UINT; uScaCode:UINT; lpbKeyState:LPBYTE; lpdwTransBuf:LPDWORD; fuState:UINT; _himc:HIMC):UINT;
+function NotifyIME(_himc:HIMC; param2:DWORD; param3:DWORD; param4:DWORD):BOOL;
+function ImeRegisterWord(param1:LPCWSTR; param2:DWORD; param3:LPCWSTR):BOOL;
+function ImeUnregisterWord(param1:LPCWSTR; param2:DWORD; param3:LPCWSTR):BOOL;
+function ImeGetRegisterWordStyle(nItem:UINT; param2:LPSTYLEBUF):UINT;
+function ImeEnumRegisterWord(param1:REGISTERWORDENUMPROC; param2:LPCWSTR; param3:DWORD; param4:LPCWSTR; param2:LPVOID):UINT;
+function ImeSetCompositionString(_himc:HIMC; dwIndex:DWORD; lpComp:LPCVOID; param4:DWORD; lpRead:LPCVOID; param6:DWORD):BOOL;
+function ImeGetImeMenuItems(_himc:HIMC; dwFlags:DWORD; dwType:DWORD; lpParentMenu:LPIMEMENUITEMINFO; lpMenu:LPIMEMENUITEMINFO; dwSize:DWORD):DWORD;
+{$ENDIF WINCE}
+
+
+
+//	Windows CE additions
+
+
+function ImmIsValidIMC(_himc:HIMC):BOOL; external ImmDLL name 'ImmIsValidIMC'; // ?
+
+//*****************************************
+// Messages From Parent window
+//  wParam : 0
+//  lParam : appropriate value for Message
+//*****************************************
+const
+      CLM_START       = $00001000;
+
+      CLM_SETCANDLIST    = CLM_START + 0; // lParam : LPCANDIDATELIST
+      CLM_SETWNDPOS      = CLM_START + 1; // lParam : MAKELONG(POINT)
+      CLM_GETCURSEL      = CLM_START + 2; // lParam : 0 ; return : current selection
+      CLM_GETPAGESTART   = CLM_START + 3; // lParam : 0 ; return : current page start
+
+// Internal for CANDLIST window
+//*****************************************
+// Special window styles for candidate list
+//*****************************************
+const
+      CLS_BUTTONS     = $00000001;
+      CLS_FRACTION    = $00000002;
+      CLS_ACTIVATE    = $00000004;
+      WS_NOTIFY       = $00000008;
+
+
+//*****************************************
+// Notification from Candidate list window
+//  wParam for WM_CAND_NOTIFY message
+//*****************************************
+const
+      CLN_NOTIFYCODE  = $0100;
+      CLN_DETERMINE   = CLN_NOTIFYCODE + 0;
+      CLN_SELECTION   = CLN_NOTIFYCODE + 1;
+      CLN_PAGESTART   = CLN_NOTIFYCODE + 2;
+
+
+//*****************************************
+// Structure for Globaled candidate proc
+//*****************************************
+type
+     _MYCANDLIST = record
+       ParentWnd:HWND;  // Parent window handle.
+       CandList:LPCANDIDATELIST;   // Candidate list structure.
+     end;
+     MYCANDLIST = _MYCANDLIST;
+
+
+{/*
+ * Handwriting pad specific structures
+ */}
+type
+     _tagHWXRESULT = record
+       cbCount:word;          // Number of candidates in the list
+       iSelection:word;      // Current selection
+       iPosition:word;       // cursor position
+       chCandidate:array[0..0] of TCHAR;   // The array of candidates
+     end;
+     HWXRESULT = _tagHWXRESULT;
+     PHWXRESULT = ^_tagHWXRESULT;
+
+// Internal window style
+const
+      ES_COMPWND                  = $00004000;
+
+// Internal defines and API
+const
+      WM_IME_CONTROL_EDIT         = $00001000;
+      IMC_EDIT_CONVERT            = $00000001;
+      IMC_EDIT_DETERMINE          = $00000002;
+      IMC_EDIT_CANCELCONVERT      = $00000003;
+      IMC_EDIT_GETSTATUS          = $00000004;
+      IMC_EDIT_UNDO               = $00000005;
+      IMC_EDIT_CANUNDO            = $00000006;
+      IMC_EDIT_EMPTYUNDOBUFFER    = $00000007;
+      IMC_EDIT_REPLACESEL         = $00000008;
+      IMC_EDIT_CLEARALL           = $00000009;
+      IMC_EDIT_SETIMC             = $0000000A;
+      IMC_EDIT_GETCANDIDATEPOS    = $0000000B;
+      IMC_EDIT_UPDATEPROP         = $0000000C;
+      IMC_EDIT_HALFWIDTH          = $0000000D;
+      IMC_EDIT_UPDATECLIST        = $0000000E;
+
+// Edit control is in input mode, no IME is involved
+      IMCR_INPUT                  = $0001;
+// Edit control is in conversion mode.
+      IMCR_CONVERT                = $0002;
+// Edit control is in conversion mode, the current clauses is un-converted
+// and the cursor is within current clause
+      IMCR_UNCONVERT              = $0003;
+// Edit control is in composition mode, but not in conversion mode.
+      IMCR_COMPOSITION            = $0004;
+
+// For set cursor posision on composition string ( Internal )
+      IME_ESC_SETCURSOR           = $100A;
+
+
+      SIP_QUERY_STATE             = $2000;
+      SIP_SET_STATE               = $2001;
+      SIP_STATE_HDKB              = $0001;
+      SIP_STATE_NOHDKB			         = $0002;
+
+      SIP_QUERY_RCMASK            = $3000;
+      SIP_SET_RCMASK              = $3001;
+
+      SIP_SET_OPENCANDWND			      = $5000;
+      SIP_SET_CLOSECANDWND		      = $5001;
+
+      SIP_QUERY_HALFWIDTH			      = $6000;
+      SIP_SET_HALFWIDTH			        = $6001;
+      SIP_WIDTHSETTING_HALF       = $01;
+
+      SIP_QUERY_MODE				          = $8000;
+      SIP_SET_MODE				            = $8001;
+      SIP_MODE_MINIMAL		          = $0000;
+      SIP_MODE_REDUCED		          = $0001;
+      SIP_MODE_FULL				           = $0002;
+      SIP_MODE_FULL_HIDDEN		      = $0003;
+
+      SIP_NOTIFY_FOCUS_CHANGE     = $FFFB;
+      SIP_RELEASE_STICKY_KEYS     = $FFFC;
+      SIP_CONFIG_CHANGED          = $FFFD;
+      SIP_SHOW_WARNING			         = $FFFE;
+      SIP_KILL_MENU				           = $FFFF;
+
+
+
+
+// wIndex value of ImmSIPanelState
+      SIP_QUERY_LOCATION          = $1000;
+      SIP_SET_LOCATION            = $1001;
+      SIP_INPUT_ATTRIBUTES		      = $7000;
+      SIP_INPUT_NUMERIC 			       = $00000004;
+      SIP_INPUT_ALPHANUMERIC		    = $00000008;
+      SIP_INPUT_HIRAGANA			       = $00000010;
+      SIP_INPUT_KATAKANA			       = $00000100;
+      SIP_INPUT_EVERYTHING		      = $00000000;
+      SIP_INPUT_PASSWORD          = $00000020;
+      SIP_INPUT_HALFWIDTH			      = $00000001;
+      SIP_INPUT_FULLWIDTH			      = $00000002;
+
+function ImmSIPanelState(dwCmd:UINT; pValue:LPVOID):BOOL; external ImmDLL name 'ImmSIPanelState'; // 467
+
+
+const
+// wParam of report message WM_IME_REQUEST
+      IMR_COMPOSITIONWINDOW           = $0001;
+      IMR_CANDIDATEWINDOW             = $0002;
+      IMR_COMPOSITIONFONT             = $0003;
+      IMR_RECONVERTSTRING             = $0004;
+      IMR_CONFIRMRECONVERTSTRING      = $0005;
+      IMR_QUERYCHARPOSITION           = $0006;
+      IMR_DOCUMENTFEED                = $0007;
+// reserved value
+      IMR_RESERVED0x1000              = $1000;
+
+{
+#ifdef WINCEOEM
+#include <pimm.h>	// internal defines
+#endif
+}
+
+
+
+// Additional function declared in pwinuser.h from WM 6.0 Platform Builder.
+
+function ImmEnableIME(param1:DWORD):BOOL; external ImmDLL name 'ImmEnableIME'; // 444
+
+function ImmGetKeyboardLayout(dwThreadId:DWORD):HKL; external ImmDLL name 'ImmGetKeyboardLayout'; // 449
+
+implementation
+
+end.

+ 1 - 59
rtl/wince/wininc/coredll.inc

@@ -267,65 +267,7 @@
       43D ImageList_Copy
       43D ImageList_Copy
       423 ImageList_CopyDitherImage
       423 ImageList_CopyDitherImage
       43E ImageList_Duplicate
       43E ImageList_Duplicate
-      44C ImmAssociateContext
-      476 ImmAssociateContextEx
-      44D ImmConfigureIMEW
-      44A ImmCreateContext
-      44E ImmCreateIMCC
-      44B ImmDestroyContext
-      44F ImmDestroyIMCC
-      443 ImmDisableIME
-      444 ImmEnableIME
-      450 ImmEnumRegisterWordW
-      451 ImmEscapeW
-      452 ImmGenerateMessage
-      454 ImmGetCandidateListCountW
-      453 ImmGetCandidateListW
-      455 ImmGetCandidateWindow
-      456 ImmGetCompositionFontW
-      447 ImmGetCompositionStringW
-      457 ImmGetCompositionWindow
-      440 ImmGetContext
-      458 ImmGetConversionListW
-      441 ImmGetConversionStatus
-      459 ImmGetDefaultIMEWnd
-      45A ImmGetDescriptionW
-      45B ImmGetGuideLineW
-      46E ImmGetHotKey
-      45C ImmGetIMCCLockCount
-      45D ImmGetIMCCSize
-      45E ImmGetIMCLockCount
-      477 ImmGetIMEFileNameW
-      479 ImmGetImeMenuItemsW
-      449 ImmGetKeyboardLayout
-      45F ImmGetOpenStatus
-      460 ImmGetProperty
-      461 ImmGetRegisterWordStyleW
-      471 ImmGetStatusWindowPos
-      478 ImmGetVirtualKey
-      448 ImmIsIME
-      462 ImmIsUIMessageW
-      463 ImmLockIMC
-      464 ImmLockIMCC
-      442 ImmNotifyIME
-      465 ImmReSizeIMCC
-      466 ImmRegisterWordW
-      445 ImmReleaseContext
-      480 ImmRequestMessageW
-      467 ImmSIPanelState
-      469 ImmSetCandidateWindow
-      46A ImmSetCompositionFontW
-      46B ImmSetCompositionStringW
-      46C ImmSetCompositionWindow
-      446 ImmSetConversionStatus
-      46D ImmSetHotKey
       47E ImmSetImeWndIMC
       47E ImmSetImeWndIMC
-      46F ImmSetOpenStatus
-      470 ImmSetStatusWindowPos
-      472 ImmSimulateHotKey
-      473 ImmUnlockIMC
-      474 ImmUnlockIMCC
-      475 ImmUnregisterWordW
         D InitLocale
         D InitLocale
       38C InputDebugCharW
       38C InputDebugCharW
       2F8 Int_CreateEventW
       2F8 Int_CreateEventW
@@ -524,7 +466,6 @@
        87 StringCchVPrintfW
        87 StringCchVPrintfW
       387 StringCompress
       387 StringCompress
       388 StringDecompress
       388 StringDecompress
-      49D SystemIdleTimerReset
         5 SystemMemoryLow
         5 SystemMemoryLow
         4 SystemStarted
         4 SystemStarted
       30D THCreateSnapshot
       30D THCreateSnapshot
@@ -2805,6 +2746,7 @@ function StretchDIBits(_para1:HDC; _para2:longint; _para3:longint; _para4:longin
   external KernelDLL name 'StretchDIBits';
   external KernelDLL name 'StretchDIBits';
 function SubtractRect(lprcDst:LPRECT; const lprcSrc1:RECT; const lprcSrc2:RECT):WINBOOL; external KernelDLL name 'SubtractRect';
 function SubtractRect(lprcDst:LPRECT; const lprcSrc1:RECT; const lprcSrc2:RECT):WINBOOL; external KernelDLL name 'SubtractRect';
 function SuspendThread(hThread:HANDLE):DWORD; external KernelDLL name 'SuspendThread';
 function SuspendThread(hThread:HANDLE):DWORD; external KernelDLL name 'SuspendThread';
+procedure SystemIdleTimerReset; external KernelDLL name 'SystemIdleTimerReset'; // 49D
 function SystemParametersInfo(uiAction:UINT; uiParam:UINT; pvParam:PVOID; fWinIni:UINT):WINBOOL; external KernelDLL name 'SystemParametersInfoW';
 function SystemParametersInfo(uiAction:UINT; uiParam:UINT; pvParam:PVOID; fWinIni:UINT):WINBOOL; external KernelDLL name 'SystemParametersInfoW';
 function SystemParametersInfoW(uiAction:UINT; uiParam:UINT; pvParam:PVOID; fWinIni:UINT):WINBOOL; external KernelDLL name 'SystemParametersInfoW';
 function SystemParametersInfoW(uiAction:UINT; uiParam:UINT; pvParam:PVOID; fWinIni:UINT):WINBOOL; external KernelDLL name 'SystemParametersInfoW';
 function SystemTimeToFileTime(lpSystemTime:LPSYSTEMTIME; lpFileTime:LPFILETIME):WINBOOL; external KernelDLL name 'SystemTimeToFileTime';
 function SystemTimeToFileTime(lpSystemTime:LPSYSTEMTIME; lpFileTime:LPFILETIME):WINBOOL; external KernelDLL name 'SystemTimeToFileTime';