/*++ Copyright (c) 1990-1998 Microsoft Corporation, All Rights Reserved Module Name: FAKEIME.H ++*/ #include /**********************************************************************/ /* */ /* 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 #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 #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 #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