Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

851 lines
15 KiB

// Copyright (c) 1985 - 1999, Microsoft Corporation
/*--------------------------------------------------------------------------*/
/* Constants */
/*--------------------------------------------------------------------------*/
#if DBG==1
//#define DEBUG_MODE
//#define DEBUG_PRINT
//#define DEBUG_INFO
#endif
/*
* Resource defines
*/
#define WINDOWMENU 1
#define ID_CONSOLEIME_ICON 2
/*
* Menu ID's
*/
#define MM_ABOUT 8001
#define MM_EXIT 8002
#define MM_ACCESS_VIOLATION 8003
/* String Table Defines */
#define errTitle 0
#define IDS_MENUNAME 12
#define IDS_APPNAME 13
#define IDS_CLASSNAME 14
#define IDS_TITLE 15
#define IDS_LAST 15 // Put New Strings Before this one
#ifdef DEBUG_PRINT
#define DBGPRINT(_params_) DbgPrint _params_
#else
#define DBGPRINT(_params_)
#endif
#define CONSOLE_INITIAL_TABLE 10
#define CONSOLE_CONSOLE_TABLE_INCREMENT 5
#define HKL_INITIAL_TABLE 1
#define HKL_TABLE_INCREMENT 1
#define CVMAX 2048
#define NUMMAX 100
#define CMAX 160
#define MAXROW 1
#define MAXCOL 80
#define FIRSTROW 0
#define FIRSTCOL 0
#define LASTROW (MAXROW-1)
#define LASTCOL (MAXCOL-1)
#define TABSTOP 8
#define MAX_LISTCAND 32
#define MAX_CHARS_PER_LINE 10
#define MAX_COMP_STRING_LEN 10
#define DEFAULT_CAND_NUM_PER_PAGE 5
#define X_INDENT 10
#define Y_INDENT 10
#define DELIMITERWIDTH 3 // 1:xxx 2:xxx
#define DEFAULTCANDTABLE 100
#define DISPCHANGELIMIT 188
#define CODEDISPLEN 7 // '[F040] '
#define DEFAULT_TEMP_WIDTH 80
#define KEY_TOGGLED 0x01
#define MaxBufSize 256
#define KBDLAYOUT TEXT("SYSTEM\\CurrentControlSet\\Control\\Keyboard Layouts")
#define KBDLAYOUTTEXT TEXT("layout text")
#define KBDSEPALATER TEXT("\\")
#define LANG_ID_TAIWAN MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_TRADITIONAL) // 0x0404
#define LANG_ID_JAPAN MAKELANGID(LANG_JAPANESE,SUBLANG_DEFAULT) // 0x0411
#define LANG_ID_KOREA MAKELANGID(LANG_KOREAN,SUBLANG_DEFAULT) // 0x0412
#define LANG_ID_PRC MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED) // 0x0804
typedef struct _HKL_TABLE {
HKL hkl;
DWORD dwConversion;
} HKL_TABLE, *LPHKL_TABLE;
typedef struct _CONSOLE_TABLE {
/*
* Console Information
*/
HANDLE hConsole; // Handle of Console
HWND hWndCon; // Window handle of Console
COORD ScreenBufferSize; // Screen Buffer Size of Console
/*
* IMM/IME Basic Information
*/
HKL hklActive;
HIMC hIMC_Current; // Handle of Input Context for current
HIMC hIMC_Original; // Handle of Input Context for original
BOOL fOpen; // Open flag
DWORD dwConversion; // Conversion mode
DWORD dwSentence; // Sentence mode
WORD ConsoleCP;
WORD ConsoleOutputCP;
WCHAR LayoutName[MaxBufSize];
WCHAR GuideLine[10];
/*
* IMM/IME Composition String Information
*/
BOOL fInComposition; // Flag of in compositionning.
LPCONIME_UICOMPMESSAGE lpCompStrMem;
WORD CompAttrColor[8];
/*
* IMM/IME Candidate Information
*/
BOOL fInCandidate; // Flag of in candidating
LPCANDIDATELIST lpCandListMem[ MAX_LISTCAND ];
LPCONIME_CANDMESSAGE SystemLine;
DWORD SystemLineSize;
DWORD CandListMemAllocSize[ MAX_LISTCAND ];
DWORD CandOff;
DWORD CandMax;
LPDWORD CandSep;
DWORD CandSepAllocSize;
BOOL fNestCandidate;
DWORD ImmGetProperty;
/*
* misc
*/
BOOL Enable;
BOOL LateRemove;
INT hklListMax;
LPHKL_TABLE lphklList;
#ifdef DEBUG_MODE
DWORD ImeCandNum;
DWORD CandidateCount;
HWND hListCand[ MAX_LISTCAND ];
WCHAR DispBuf[CMAX];
#endif
} CONSOLE_TABLE, *PCONSOLE_TABLE;
#define IPHK_HOTKEY 0x0001 //
#define IPHK_PROCESSBYIME 0x0002 //
#define IPHK_CHECKCTRL 0x0004 //
#define IS_IME_KBDLAYOUT(hkl) ((HIWORD(HandleToUlong(hkl)) & 0xf000) == 0xe000)
#define HKL_TO_LANGID(hkl) (LOWORD(HandleToUlong(hkl)))
DWORD
ImmCallImeConsoleIME(
HWND hWnd,
UINT Message,
WPARAM wParam,
LPARAM lParam,
PUINT puVKey
);
BOOL
ImmTranslateMessage(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
);
BOOL
ImmSetActiveContextConsoleIME(
HWND hWnd,
BOOL fFlag
);
#define UNICODE_BACKSPACE ((WCHAR)0x08)
#define UNICODE_BACKSPACE2 ((WCHAR)0x25d8)
#define UNICODE_CARRIAGERETURN ((WCHAR)0x0d)
#define UNICODE_LINEFEED ((WCHAR)0x0a)
#define UNICODE_BELL ((WCHAR)0x07)
#define UNICODE_TAB ((WCHAR)0x09)
#define UNICODE_SPACE ((WCHAR)0x20)
#define UNICODE_ZERO ((WCHAR)'0')
#define UNICODE_SLASH ((WCHAR)'/')
#define UNICODE_COLON ((WCHAR)':')
#define UNICODE_LEFT ((WCHAR)'[')
#define UNICODE_RIGHT ((WCHAR)']')
#define UNICODE_HEXBASE ((WCHAR)'7')
#define JAPAN_CODEPAGE 932
#define PRC_CODEPAGE 936
#define KOREA_CODEPAGE 949
#define TAIWAN_CODEPAGE 950
#define PRCCOMPWIDTH 10
#define MODEDISP_NONE 0
#define MODEDISP_PLAURAL 1
#define MODEDISP_SINGLE 2
#define MODEDISP_AUTO 3
#define MODEDISP_PHRASE 4
// for Japanese
#define IMECModeRomanLen 4
#define IMECModeKanaLen 4
#define IMECModeAHANLen 3
#define IMECModeAZENLen 2
#define IMECModeHHANLen 3
#define IMECModeHZENLen 2
#define IMECModeKHANLen 3
#define IMECModeKZENLen 2
// for CHT /Taiwan
#define IMECModeFullShapeLen 1
#define IMECModeHalfShapeLen 1
#define IMECModeKeyboardLen 2
#define IMECModeSymbolLen 2
#define IMECGuideLen 5
#define IMECNameLength 4
/*****************************************************
* Function definition
*****************************************************/
//
// CONIME.C
//
BOOL
InitConsoleIME(
HINSTANCE hInstance
);
LRESULT FAR PASCAL
WndProc(
HWND hWnd,
UINT Message,
WPARAM wParam,
LPARAM lParam
);
VOID
ExitList(
HWND hWnd
);
BOOL
InsertConsole(
HWND hWnd,
HANDLE hConsole,
HWND hWndConsole
);
BOOL
GrowConsoleTable(
VOID
);
PCONSOLE_TABLE
SearchConsole(
HANDLE hConsole
);
BOOL
RemoveConsole(
HWND hwnd,
HANDLE hConsole
);
BOOL
RemoveConsoleWorker(
HWND hwnd,
PCONSOLE_TABLE ConTbl
);
BOOL
InsertNewConsole(
HWND hWnd,
HANDLE hConsole,
HWND hWndConsole
);
BOOL
ConsoleSetFocus(
HWND hWnd,
HANDLE hConsole,
HKL hKL
);
BOOL
ConsoleKillFocus(
HWND hWnd,
HANDLE hConsole
);
BOOL
ConsoleScreenBufferSize(
HWND hWnd,
HANDLE hConsolewParam,
COORD ScreenBufferSize
);
BOOL
ConImeInputLangchangeRequest(
HWND hWnd,
HANDLE hConsole,
HKL hkl,
int Direction
);
BOOL
ConImeInputLangchange(
HWND hWnd,
HANDLE hConsole,
HKL hkl
);
LRESULT
ConsoleImeSendMessage(
HWND hWndConsoleIME,
WPARAM wParam,
LPARAM lParam
);
BOOL
InputLangchange(
HWND hWnd,
DWORD CharSet,
HKL hkl );
#ifdef DEBUG_MODE
VOID
DisplayConvInformation(
HWND hWnd
);
VOID
DisplayInformation(
HWND hWnd,
HANDLE hConsole
);
VOID
RealReDraw(
HDC r_hdc
);
VOID
ReDraw(
HWND hWnd
);
#endif
//
// CONSUBS.C
//
INT
Create(
HWND hWnd
);
void
ImeUIStartComposition(
HWND hwnd
);
void
ImeUIEndComposition(
HWND hwnd
);
void
ImeUIComposition(
HWND hwnd,
WPARAM wParam,
LPARAM CompFlag
);
void
DisplayCompString(
HWND hwnd,
int Length,
PWCHAR CharBuf,
PUCHAR AttrBuf
);
void
DisplayResultString(
HWND hwnd,
LPWSTR lpStr
);
BOOL
ImeUINotify(
HWND hwnd,
WPARAM wParam,
LPARAM lParam
);
BOOL
IsUnicodeFullWidth(
IN WCHAR wch
);
BOOL
ImeUIOpenStatusWindow(
HWND hwnd
);
BOOL
ImeUIChangeCandidate(
HWND hwnd,
DWORD lParam
);
BOOL
ImeUISetOpenStatus(
HWND hwnd
);
BOOL
ImeUISetConversionMode(
HWND hwnd
);
BOOL
ImeUIGuideLine(
HWND hwnd
);
DWORD
GetNLSMode(
HWND hWnd,
HANDLE hConsole
);
BOOL
SetNLSMode(
HWND hWnd,
HANDLE hConsole,
DWORD fdwConversion
);
VOID
CopyDataProcess(
HWND hWnd,
PCOPYDATASTRUCT CopyData
);
BOOL
ImeSysPropertyWindow(
HWND hWnd,
WPARAM wParam,
LPARAM lParam
);
//
// IMEFULL.C
//
VOID
ImeOpenClose(
HWND hWnd,
BOOL fFlag
);
VOID
VirtualKeyHandler(
HWND hWnd,
UINT wParam,
UINT lParam
);
VOID
CharHandlerFromConsole(
HWND hWnd,
UINT Message,
ULONG wParam,
ULONG lParam
);
VOID
CharHandlerToConsole(
HWND hWnd,
UINT Message,
ULONG wParam,
ULONG lParam
);
#ifdef DEBUG_MODE
VOID
ImeUIMoveCandWin(
HWND hwnd
);
#endif
BOOL
IsDBCSTrailByte(
char *base,
char *p
);
#ifdef DEBUG_MODE
VOID
ResetCaret(
HWND hWnd
);
BOOL
MoveCaret(
HWND hwnd
);
#endif
#ifdef DEBUG_MODE
VOID
StoreChar(
HWND hWnd,
WORD ch,
UCHAR atr
);
#endif
BOOL
ConsoleCodepageChange(
HWND hWnd,
HANDLE hConsole,
BOOL Output,
WORD CodePage
);
//LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
//L L
//L COUNTRY.C L
//L L
//LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
BOOL
ConimeHotkey(
HWND hWnd,
HANDLE hConsole,
DWORD HotkeyID
);
BOOL
GetIMEName(
PCONSOLE_TABLE ConTbl
);
BOOL
GetOpenStatusByCodepage(
HIMC hIMC,
PCONSOLE_TABLE ConTbl
);
BOOL
ImeUIMakeInfoString(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo
);
BOOL
MakeInfoStringJapan(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo
);
BOOL
MakeInfoStringTaiwan(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo
);
DWORD
MakeStatusStrTaiwan1(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo,
DWORD ModeInfoPtr
);
DWORD
MakeStatusStrTaiwan2(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo,
DWORD ModeInfoPtr
);
DWORD
IncludeCompositionT(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo,
DWORD ModeInfoPtr
);
DWORD
IncludeCandidateT(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo,
DWORD ModeInfoPtr
);
DWORD
DispLenStructedUnicode(
PCHAR_INFO lpString,
DWORD SrcLength
);
BOOL
MakeInfoStringPRC(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo
);
DWORD
MakeStatusStrPRC1(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo,
DWORD ModeInfoPtr
);
DWORD
MakeStatusStrPRC2(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo,
DWORD ModeInfoPtr
);
DWORD
IncludeCompositionP(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo,
DWORD ModeInfoPtr
);
DWORD
IncludeCandidateP(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo,
DWORD ModeInfoPtr
);
BOOL
MakeInfoStringKorea(
PCONSOLE_TABLE ConTbl,
LPCONIME_UIMODEINFO lpModeInfo
);
//LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
//L L
//L COUNTRY2.C L
//L L
//LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
BOOL
ImeUIOpenCandidate(
HWND hwnd,
DWORD lParam,
BOOL OpenFlag
);
BOOL
OpenCandidateJapan(
HWND hwnd,
HIMC hIMC,
PCONSOLE_TABLE ConTbl,
DWORD CandList,
BOOL OpenFlag
);
BOOL
OpenCandidateTaiwan(
HWND hwnd,
HIMC hIMC ,
PCONSOLE_TABLE ConTbl,
DWORD CandList,
BOOL OpenFlag
);
BOOL
OpenCandidatePRC(
HWND hwnd,
HIMC hIMC ,
PCONSOLE_TABLE ConTbl,
DWORD CandList,
BOOL OpenFlag
);
BOOL
OpenCandidateKorea(
HWND hwnd,
HIMC hIMC ,
PCONSOLE_TABLE ConTbl,
DWORD CandList,
BOOL OpenFlag
);
DWORD
DispLenUnicode(
LPWSTR lpString
);
DWORD
GetSystemLineJ(
LPCANDIDATELIST lpCandList ,
LPWSTR String,
LPSTR Attr,
DWORD dwLength,
DWORD CountDispWidth,
PCONSOLE_TABLE FocusedConsole,
BOOL EnableCodePoint
);
DWORD
GetSystemLineT(
LPCANDIDATELIST lpCandList ,
LPWSTR String,
LPSTR Attr,
DWORD dwLength,
DWORD CountDispWidth,
PCONSOLE_TABLE FocusedConsole
);
DWORD
GetSystemLineP(
LPCANDIDATELIST lpCandList ,
LPWSTR String,
LPSTR Attr,
DWORD dwLength,
DWORD CountDispWidth,
PCONSOLE_TABLE FocusedConsole
);
VOID
NumString(
LPWSTR StrToWrite,
DWORD NumToDisp,
DWORD CountDispWidth
);
BOOL
ImeUICloseCandidate(
HWND hwnd,
DWORD lParam
);
BOOL
CloseCandidateJapan(
HWND hwnd,
HIMC hIMC,
PCONSOLE_TABLE ConTbl,
DWORD CandList
);
BOOL
CloseCandidateTaiwan(
HWND hwnd,
HIMC hIMC,
PCONSOLE_TABLE ConTbl,
DWORD CandList
);
BOOL
CloseCandidatePRC(
HWND hwnd,
HIMC hIMC,
PCONSOLE_TABLE ConTbl,
DWORD CandList
);
BOOL
CloseCandidateKorea(
HWND hwnd,
HIMC hIMC,
PCONSOLE_TABLE ConTbl,
DWORD CandList
);
//LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
//L L
//L COUNTRY3.C L
//L L
//LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
void
GetCompositionStr(
HWND hwnd,
LPARAM CompFlag,
WPARAM CompChar
);
void
GetCompStrJapan(
HWND hwnd,
PCONSOLE_TABLE ConTbl,
LPARAM CompFlag
);
void
GetCompStrTaiwan(
HWND hwnd,
PCONSOLE_TABLE ConTbl,
LPARAM CompFlag
);
void
GetCompStrPRC(
HWND hwnd,
PCONSOLE_TABLE ConTbl,
LPARAM CompFlag
);
void
GetCompStrKorea(
HWND hwnd,
PCONSOLE_TABLE ConTbl,
LPARAM CompFlag,
WPARAM CompChar
);
VOID
ReDisplayCompositionStr (
HWND hwnd
);
VOID
ReDisplayCompStrJapan(
HWND hwnd,
PCONSOLE_TABLE ConTbl
);
VOID
ReDisplayCompStrTaiwan(
HWND hwnd,
PCONSOLE_TABLE ConTbl
);
VOID
ReDisplayCompStrPRC(
HWND hwnd,
PCONSOLE_TABLE ConTbl
);
VOID
ReDisplayCompStrKorea(
HWND hwnd,
PCONSOLE_TABLE ConTbl
);