windows-nt/Source/XPSP1/NT/windows/feime/ddk/jpn/fakeime.h
2020-09-26 16:20:57 +08:00

483 lines
17 KiB
C

/*++
Copyright (c) 1990-1998 Microsoft Corporation, All Rights Reserved
Module Name:
FAKEIME.H
++*/
#include <indicml.h>
/**********************************************************************/
/* */
/* DebugOptions */
/* */
/**********************************************************************/
#define DEBF_THREADID 0x00000001
#define DEBF_GUIDELINE 0x00000002
#define LOGF_ENTRY 0x00000001
#define LOGF_API 0x00000002
#define LOGF_APIOUT 0x00000004
#define LOGF_KEY 0x00000008
/**********************************************************************/
/* */
/* Define */
/* */
/**********************************************************************/
/* for Unicode FAKEIME */
#ifdef FAKEIMEM
typedef LPWSTR LPMYSTR;
typedef WCHAR MYCHAR;
#define MYTEXT(x) L ## x
#define Mylstrlen(x) lstrlenW(x)
#define Mylstrcpy(x, y) MylstrcpyW((x), (y))
#define Mylstrcmp(x, y) MylstrcmpW((x), (y))
#define MyCharPrev(x, y) MyCharPrevW((x), (y))
#define MyCharNext(x) MyCharNextW(x)
#include <string.h>
#define Mystrtok wcstok
#define Mylstrcpyn MylstrcpynW
#define Mystrchr wcschr
#define MyTextOut TextOutW
#define MyGetTextExtentPoint GetTextExtentPointW
#define LPMYIMEMENUITEMINFO LPIMEMENUITEMINFOW
#define MyImmRequestMessage ImmRequestMessageW
#define MyOutputDebugString MyOutputDebugStringW
#define MyFileName "fakeimem.ime"
#else
typedef LPTSTR LPMYSTR;
typedef TCHAR MYCHAR;
#define MYTEXT(x) TEXT(x)
#define Mylstrlen(x) lstrlen(x)
#ifdef UNICODE
#define Mylstrcpy(x, y) MylstrcpyW((x), (y))
#define Mylstrcmp(x, y) MylstrcmpW((x), (y))
#define MyCharPrev(x, y) MyCharPrevW((x), (y))
#define MyCharPrev(x, y) MyCharPrevW((x), (y))
#define MyCharNext(x) MyCharNextW(x)
#include <string.h>
#define Mystrtok wcstok
#define Mystrchr wcschr
#else
#define Mylstrcpy(x, y) lstrcpy((x), (y))
#define Mylstrcmp(x, y) lstrcmp((x), (y))
#define MyCharPrev(x, y) AnsiPrev((x), (y))
#define MyCharNext(x) AnsiNext(x)
#include <mbstring.h>
#define Mystrtok _mbstrtok
#define Mystrchr _mbschr
#endif
#define Mylstrcpyn lstrcpyn
#define MyTextOut TextOut
#define MyGetTextExtentPoint GetTextExtentPoint
#define LPMYIMEMENUITEMINFO LPIMEMENUITEMINFO
#define MyImmRequestMessage ImmRequestMessage
#define MyOutputDebugString OutputDebugString
#ifdef UNICODE
#define MyFileName TEXT("fakeimeu.ime")
#else
#define MyFileName TEXT("fakeime.ime")
#endif
#endif
/* for limit of FAKEIME */
#define MAXCOMPWND 10
#define MAXCOMPSIZE 128
#define MAXCLAUSESIZE 16
#define MAXCANDPAGESIZE 9
#define MAXCANDSTRSIZE 16
#define MAXGLCHAR 32
#define MAXCANDSTRNUM 32
/* for GlobalAlloc */
#define GHIME (GHND | GMEM_SHARE)
/* special messages */
#define WM_UI_UPDATE (WM_USER+500)
#define WM_UI_HIDE (WM_USER+501)
#define WM_UI_STATEMOVE (WM_USER+601)
#define WM_UI_DEFCOMPMOVE (WM_USER+602)
#define WM_UI_CANDMOVE (WM_USER+603)
#define WM_UI_GUIDEMOVE (WM_USER+604)
/* Escape Functions */
#define IME_ESC_PRI_GETDWORDTEST (IME_ESC_PRIVATE_FIRST + 0)
/* special style */
#define WS_COMPDEFAULT (WS_DISABLED | WS_POPUP)
#define WS_COMPNODEFAULT (WS_DISABLED | WS_POPUP)
/* macro for me! */
#define IsCTLPushed(x) ((x)[VK_CONTROL] & 0x80)
#define IsSHFTPushed(x) ((x)[VK_SHIFT] & 0x80)
#define IsALTPushed(x) ((x)[VK_ALT] & 0x80)
/* update context */
#define UPDATE_MODE 0x01
#define UPDATE_SYSTEM 0x02
#define UPDATE_TEXT 0x04
#define UPDATE_FORCE 0x08
#define UPDATE_ALL ( UPDATE_MODE | UPDATE_SYSTEM | UPDATE_TEXT )
/* advise context */
#define ADVISE_MODE 0x0001 /* advise about Mode requested */
#define ADVISE_ISOPEN 0x0002 /* advise about IsOpen requested */
/* key state context */
#define KS_SHIFT 0x01
#define KS_CONTROL 0x02
/* ID of guideline table */
#define MYGL_NODICTIONARY 0
#define MYGL_TYPINGERROR 1
#define MYGL_TESTGUIDELINE 2
/* Change Mode index */
#define TO_CMODE_ALPHANUMERIC 0x0001
#define TO_CMODE_KATAKANA 0x0002
#define TO_CMODE_HIRAGANA 0x0003
#define TO_CMODE_FULLSHAPE 0x0008
#define TO_CMODE_ROMAN 0x0010
#define TO_CMODE_CHARCODE 0x0020
#define TO_CMODE_TOOLBAR 0x0100
/* WndExtra of child UI windows */
#define FIGWL_MOUSE 0
#define FIGWL_SVRWND (FIGWL_MOUSE+sizeof(LONG))
#define FIGWL_FONT (FIGWL_SVRWND+sizeof(LONG_PTR))
#define FIGWL_COMPSTARTSTR (FIGWL_FONT+sizeof(LONG_PTR))
#define FIGWL_COMPSTARTNUM (FIGWL_COMPSTARTSTR+sizeof(LONG))
#define FIGWL_STATUSBMP (FIGWL_COMPSTARTNUM+sizeof(LONG))
#define FIGWL_CLOSEBMP (FIGWL_STATUSBMP+sizeof(LONG_PTR))
#define FIGWL_PUSHSTATUS (FIGWL_CLOSEBMP+sizeof(LONG_PTR))
#define FIGWL_CHILDWND (FIGWL_PUSHSTATUS+sizeof(LONG))
#define UIEXTRASIZE (FIGWL_CHILDWND+sizeof(LONG_PTR))
/* The flags of FIGWL_MOUSE */
#define FIM_CAPUTURED 0x01
#define FIM_MOVED 0x02
/* The flags of the button of Status Window */
#define PUSHED_STATUS_HDR 0x01
#define PUSHED_STATUS_MODE 0x02
#define PUSHED_STATUS_ROMAN 0x04
#define PUSHED_STATUS_CLOSE 0x08
/* Status Button Pos */
#define BTX 20
#define BTY 20
#define BTFHIRA 20
#define BTFKATA 40
#define BTFALPH 60
#define BTHKATA 80
#define BTHALPH 100
#define BTROMA 120
#define BTEMPT 140
/* Statue Close Button */
#define STCLBT_X (BTX*2+3)
#define STCLBT_Y 1
#define STCLBT_DX 12
#define STCLBT_DY 12
/* define Shift Arrow right-left */
#define ARR_RIGHT 1
#define ARR_LEFT 2
/* Init or Clear Structure Flag */
#define CLR_RESULT 1
#define CLR_UNDET 2
#define CLR_RESULT_AND_UNDET 3
/* define GET LP for COMPOSITIONSTRING members. */
#define GETLPCOMPREADATTR(lpcs) (LPBYTE)((LPBYTE)(lpcs) + (lpcs)->dwCompReadAttrOffset)
#define GETLPCOMPREADCLAUSE(lpcs) (LPDWORD)((LPBYTE)(lpcs) + (lpcs)->dwCompReadClauseOffset)
#define GETLPCOMPREADSTR(lpcs) (LPMYSTR)((LPBYTE)(lpcs) + (lpcs)->dwCompReadStrOffset)
#define GETLPCOMPATTR(lpcs) (LPBYTE)((LPBYTE)(lpcs) + (lpcs)->dwCompAttrOffset)
#define GETLPCOMPCLAUSE(lpcs) (LPDWORD)((LPBYTE)(lpcs) + (lpcs)->dwCompClauseOffset)
#define GETLPCOMPSTR(lpcs) (LPMYSTR)((LPBYTE)(lpcs) + (lpcs)->dwCompStrOffset)
#define GETLPRESULTREADCLAUSE(lpcs) (LPDWORD)((LPBYTE)(lpcs) + (lpcs)->dwResultReadClauseOffset)
#define GETLPRESULTREADSTR(lpcs) (LPMYSTR)((LPBYTE)(lpcs) + (lpcs)->dwResultReadStrOffset)
#define GETLPRESULTCLAUSE(lpcs) (LPDWORD)((LPBYTE)(lpcs) + (lpcs)->dwResultClauseOffset)
#define GETLPRESULTSTR(lpcs) (LPMYSTR)((LPBYTE)(lpcs) + (lpcs)->dwResultStrOffset)
#define SetClause(lpdw,num) {*((LPDWORD)(lpdw)) = 0;*((LPDWORD)(lpdw)+1) = num;}
#define GCS_COMPALL ( GCS_COMPSTR | GCS_COMPATTR | GCS_COMPREADSTR | GCS_COMPREADATTR | GCS_COMPCLAUSE | GCS_COMPREADCLAUSE)
#define GCS_RESULTALL ( GCS_RESULTSTR | GCS_RESULTREADSTR | GCS_RESULTCLAUSE | GCS_RESULTREADCLAUSE)
// ImeMenu Define
#define NUM_ROOT_MENU_L 3
#define NUM_ROOT_MENU_R 3
#define NUM_SUB_MENU_L 2
#define NUM_SUB_MENU_R 2
#define IDIM_ROOT_ML_1 0x10
#define IDIM_ROOT_ML_2 0x11
#define IDIM_ROOT_ML_3 0x12
#define IDIM_SUB_ML_1 0x20
#define IDIM_SUB_ML_2 0x21
#define IDIM_ROOT_MR_1 0x30
#define IDIM_ROOT_MR_2 0x31
#define IDIM_ROOT_MR_3 0x32
#define IDIM_SUB_MR_1 0x40
#define IDIM_SUB_MR_2 0x41
#define NATIVE_CHARSET SHIFTJIS_CHARSET
/**********************************************************************/
/* */
/* Structures */
/* */
/**********************************************************************/
typedef struct _tagMYCOMPSTR{
COMPOSITIONSTRING cs;
MYCHAR szCompReadStr[MAXCOMPSIZE];
BYTE bCompReadAttr[MAXCOMPSIZE];
DWORD dwCompReadClause[MAXCLAUSESIZE];
MYCHAR szCompStr[MAXCOMPSIZE];
BYTE bCompAttr[MAXCOMPSIZE];
DWORD dwCompClause[MAXCLAUSESIZE];
char szTypeInfo[MAXCOMPSIZE];
MYCHAR szResultReadStr[MAXCOMPSIZE];
DWORD dwResultReadClause[MAXCOMPSIZE];
MYCHAR szResultStr[MAXCOMPSIZE];
DWORD dwResultClause[MAXCOMPSIZE];
} MYCOMPSTR, NEAR *PMYCOMPSTR, FAR *LPMYCOMPSTR;
typedef struct _tagMYCAND{
CANDIDATEINFO ci;
CANDIDATELIST cl;
DWORD offset[MAXCANDSTRNUM];
TCHAR szCand[MAXCANDSTRNUM][MAXCANDSTRSIZE];
} MYCAND, NEAR *PMYCAND, FAR *LPMYCAND;
typedef struct _tagUICHILD{
HWND hWnd;
BOOL bShow;
POINT pt;
} UICHILD, NEAR *PUICHILD, FAR *LPUICHILD;
typedef struct _tagUICHILD2{
HWND hWnd;
BOOL bShow;
RECT rc;
} UICHILD2, NEAR *PUICHILD2, FAR *LPUICHILD2;
typedef struct _tagUIEXTRA{
HIMC hIMC;
UICHILD uiStatus;
UICHILD uiCand;
DWORD dwCompStyle;
HFONT hFont;
BOOL bVertical;
UICHILD uiDefComp;
UICHILD2 uiComp[MAXCOMPWND];
UICHILD uiGuide;
} UIEXTRA, NEAR *PUIEXTRA, FAR *LPUIEXTRA;
typedef struct _tagMYGUIDELINE{
DWORD dwLevel;
DWORD dwIndex;
DWORD dwStrID;
DWORD dwPrivateID;
} MYGUIDELINE, NEAR *PMYGUIDELINE, FAR *LPMYGUIDELINE;
/**********************************************************************/
/* */
/* Externs */
/* */
/**********************************************************************/
#ifndef _NO_EXTERN_
extern HINSTANCE hInst;
extern HKL hMyKL;
extern LPTRANSMSGLIST lpCurTransKey;
extern UINT uNumTransKey;
extern BOOL fOverTransKey;
#ifdef FAKEIMEM
extern WCHAR wszUIClassName[];
#endif
extern TCHAR szUIClassName[];
extern TCHAR szCompStrClassName[];
extern TCHAR szCandClassName[];
extern TCHAR szStatusClassName[];
extern TCHAR szGuideClassName[];
extern MYGUIDELINE glTable[];
extern TCHAR szDicFileName[];
extern BYTE bComp[];
extern BYTE bCompCtl[];
extern BYTE bCompSht[];
extern BYTE bCompAlt[];
extern BYTE bNoComp[];
extern BYTE bNoCompCtl[];
extern BYTE bNoCompSht[];
extern BYTE bNoCompAlt[];
extern DWORD dwLogFlag;
extern DWORD dwDebugFlag;
#endif //_NO_EXTERN_
/**********************************************************************/
/* */
/* Functions */
/* */
/**********************************************************************/
/* fakeime.c */
int PASCAL Init(void);
/* subs.c */
void PASCAL InitCompStr(LPCOMPOSITIONSTRING lpCompStr,DWORD dwClrFlag);
void PASCAL ClearCompStr(LPCOMPOSITIONSTRING lpCompStr,DWORD dwClrFlag);
void PASCAL ClearCandidate(LPCANDIDATEINFO lpCandInfo);
void PASCAL ChangeMode(HIMC hIMC,DWORD dwToMode);
void PASCAL ChangeCompStr(HIMC hIMC,DWORD dwToMode);
BOOL PASCAL IsCompStr(HIMC hIMC);
BOOL PASCAL IsConvertedCompStr(HIMC hIMC);
BOOL PASCAL IsCandidate(LPINPUTCONTEXT lpIMC);
void PASCAL UpdateIndicIcon(HIMC hIMC);
void PASCAL lmemset(LPBYTE,BYTE,UINT);
#if defined(FAKEIMEM) || defined(UNICODE)
int PASCAL MylstrcmpW(LPWSTR lp0, LPWSTR lp1);
int PASCAL MylstrcpyW(LPWSTR lp0, LPWSTR lp1);
LPWSTR PASCAL MyCharPrevW(LPWSTR lpStart, LPWSTR lpCur);
LPWSTR PASCAL MyCharNextW(LPWSTR lp);
LPWSTR PASCAL MylstrcpynW(LPWSTR lp0, LPWSTR lp1, int nCount);
#endif
HFONT CheckNativeCharset(HDC hDC);
/* toascii.c */
BOOL PASCAL GenerateMessageToTransKey(LPTRANSMSGLIST lpTrabsKey,LPTRANSMSG lpGeneMsg);
BOOL PASCAL GenerateOverFlowMessage(LPTRANSMSGLIST lpTransKey);
/* notify.c */
BOOL PASCAL NotifyUCSetOpen(HIMC hIMC);
BOOL PASCAL NotifyUCConversionMode(HIMC hIMC);
BOOL PASCAL NotifyUCSetCompositionWindow(HIMC hIMC);
/* input.c */
BOOL PASCAL IMEKeydownHandler(HIMC,WPARAM,LPARAM,LPBYTE);
BOOL PASCAL IMEKeyupHandler(HIMC,WPARAM,LPARAM,LPBYTE);
/* ui.c */
BOOL IMERegisterClass(HANDLE hInstance);
LRESULT CALLBACK FAKEIMEWndProc(HWND,UINT,WPARAM,LPARAM);
LONG PASCAL NotifyCommand(HIMC hUICurIMC, HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
LONG PASCAL ControlCommand(HIMC hUICurIMC, HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
void PASCAL DrawUIBorder( LPRECT lprc );
void PASCAL DragUI(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
/* uistate.c */
LRESULT CALLBACK StatusWndProc(HWND,UINT,WPARAM,LPARAM);
void PASCAL PaintStatus(HWND hStatusWnd , HDC hDC, LPPOINT lppt,DWORD dwPushedStatus);
void PASCAL ButtonStatus(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam);
BOOL PASCAL MyIsIMEMessage(UINT message);
void PASCAL UpdateStatusWindow(LPUIEXTRA lpUIExtra);
/* uicand.c */
LRESULT CALLBACK CandWndProc(HWND,UINT,WPARAM,LPARAM);
void PASCAL PaintCandWindow(HWND hCandWnd);
BOOL PASCAL GetCandPosFromComp(LPINPUTCONTEXT lpIMC, LPUIEXTRA lpUIExtra,LPPOINT lppt);
void PASCAL CreateCandWindow(HWND hUIWnd,LPUIEXTRA lpUIExtra, LPINPUTCONTEXT lpIMC);
void PASCAL ResizeCandWindow(LPUIEXTRA lpUIExtra,LPINPUTCONTEXT lpIMC);
void PASCAL HideCandWindow( LPUIEXTRA lpUIExtra);
void PASCAL MoveCandWindow(HWND hUIWnd, LPINPUTCONTEXT lpIMC, LPUIEXTRA lpUIExtra, BOOL fForceComp);
/* uicomp.c */
LRESULT CALLBACK CompStrWndProc(HWND,UINT,WPARAM,LPARAM);
void PASCAL PaintCompWindow(HWND hCompWnd);
void PASCAL CreateCompWindow(HWND hUIWnd, LPUIEXTRA lpUIExtra,LPINPUTCONTEXT lpIMC);
void PASCAL MoveCompWindow(LPUIEXTRA lpUIExtra,LPINPUTCONTEXT lpIMC);
void PASCAL HideCompWindow(LPUIEXTRA lpUIExtra);
void PASCAL SetFontCompWindow(LPUIEXTRA lpUIExtra);
/* uiguide.c */
LRESULT CALLBACK GuideWndProc(HWND,UINT,WPARAM,LPARAM);
void PASCAL PaintGuide(HWND hGuideWnd , HDC hDC, LPPOINT lppt,DWORD dwPushedGuide);
void PASCAL ButtonGuide(HWND hWnd, UINT message,WPARAM wParam,LPARAM lParam);
void PASCAL UpdateGuideWindow(LPUIEXTRA lpUIExtra);
LRESULT CALLBACK LineWndProc(HWND,UINT,WPARAM,LPARAM);
/* config.c */
INT_PTR CALLBACK RegWordDlgProc(HWND hDlg, UINT message , WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK SelectDictionaryDlgProc(HWND hDlg, UINT message , WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK AboutDlgProc(HWND hDlg, UINT message , WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK GeneralDlgProc(HWND hDlg, UINT message , WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK DebugOptionDlgProc(HWND hDlg, UINT message , WPARAM wParam, LPARAM lParam);
/* DIC.C */
BOOL PASCAL IsEat(WORD);
BOOL PASCAL DicKeydownHandler(HIMC,UINT,LPARAM,LPBYTE);
void PASCAL DeleteChar( HIMC hIMC ,UINT uVKey);
void PASCAL FlushText();
void PASCAL RevertText(HIMC hIMC);
void PASCAL AddChar(HIMC,WORD);
BOOL PASCAL ConvKanji(HIMC);
BOOL WINAPI MakeResultString(HIMC,BOOL);
BOOL PASCAL MakeGuideLine(HIMC, DWORD);
BOOL PASCAL GenerateMessage(HIMC,LPINPUTCONTEXT,LPTRANSMSGLIST,LPTRANSMSG);
BOOL PASCAL CheckAttr( LPCOMPOSITIONSTRING lpCompStr);
void PASCAL MakeAttrClause( LPCOMPOSITIONSTRING lpCompStr);
void PASCAL HandleShiftArrow( HIMC hIMC, BOOL fArrow);
/* DIC2.C */
#if defined(FAKEIMEM) || defined(UNICODE)
BOOL OneCharZenToHan(WCHAR ,WCHAR* ,WCHAR* );
WORD PASCAL HanToZen(WORD,WORD,DWORD);
#else
WORD PASCAL HanToZen(WORD,DWORD);
#endif
WORD PASCAL ZenToHan(WORD);
int PASCAL IsFirst(WORD);
int PASCAL IsSecond(WORD);
WORD PASCAL ConvChar(HIMC,WORD,WORD);
BOOL PASCAL IsTenten(WORD);
WORD PASCAL ConvTenten(WORD);
BOOL PASCAL IsMaru(WORD);
WORD PASCAL ConvMaru(WORD);
WORD PASCAL HiraToKata(WORD);
WORD PASCAL KataToHira(WORD);
void PASCAL lZenToHan(LPMYSTR,LPMYSTR);
void PASCAL lHanToZen(LPMYSTR,LPMYSTR,DWORD);
/* DIC3.C */
WORD PASCAL AddWord(LPSTR,LPSTR);
WORD PASCAL GetWord(LPSTR,LPSTR,WORD,WORD);
WORD PASCAL GetWordCount(LPSTR);
WORD PASCAL GetWordNum(LPSTR);
WORD PASCAL DeleteWord(LPSTR,LPSTR);
/* FDEBUG.C */
#ifdef DEBUG
#define MyDebugPrint(x) DebugPrint x
int DebugPrint(LPCTSTR lpszFormat, ...);
void SetDwordToSetting(LPCTSTR lpszFlag, DWORD dwFlag);
void PASCAL SetGlobalFlags();
void PASCAL ImeLog(DWORD dwFlag, LPTSTR lpStr);
#ifdef FAKEIMEM
void PASCAL MyOutputDebugStringW(LPWSTR lpw);
#endif
#else
#define MyDebugPrint(x)
#define SetDwordToSetting() FALSE
//#define SetDwordToSetting(lpszFlag, dwFlag) FALSE
#define SetGlobalFlags() FALSE
//#define ImeLog() FALSE
#define ImeLog(dwFlag, lpStr) FALSE
#ifdef FAKEIMEM
#define MyOutputDebugStringW() FALSE
//#define MyOutputDebugStringW(lpw) FALSE
#endif
#endif