263 lines
9.3 KiB
C
263 lines
9.3 KiB
C
|
|
/*************************************************
|
|
* imeattr.h *
|
|
* *
|
|
* Copyright (C) 1995-1999 Microsoft Inc. *
|
|
* *
|
|
*************************************************/
|
|
|
|
#if !defined(ROMANIME)
|
|
// the mode configuration for an IME
|
|
#define MODE_CONFIG_QUICK_KEY 0x0001
|
|
#define MODE_CONFIG_PREDICT 0x0004
|
|
|
|
#endif
|
|
|
|
#define MODE_CONFIG_OFF_CARET_UI 0x0008
|
|
|
|
#if defined(PHON)
|
|
// the different layout for Phonetic reading
|
|
#define READ_LAYOUT_DEFAULT 0
|
|
#define READ_LAYOUT_ETEN 1
|
|
#define READ_LAYOUT_IBM 2
|
|
#define READ_LAYOUT_CHINGYEAH 3
|
|
#if defined(ETEN)
|
|
// ETen told us 26 Keys is ETen's Copy Right.
|
|
// So we can not implement it, even though we already finish it
|
|
// without reference any code of ETen.
|
|
// My implementation could compose single po, cur, yeah, & ay.
|
|
// It is different from ETen's user manual.
|
|
#define READ_LAYOUT_ETEN26 4
|
|
#define READ_LAYOUTS 5
|
|
#else
|
|
#define READ_LAYOUTS 4
|
|
#endif
|
|
#endif
|
|
|
|
|
|
// the bit of fwProperties1
|
|
#define IMEPROP_CAND_NOBEEP_GUIDELINE 0x0001
|
|
#define IMEPROP_UNICODE 0x0002
|
|
|
|
|
|
#if !defined(WINIME) && !defined(ROMANIME)
|
|
#define USR_DIC_SIZE 160
|
|
|
|
typedef struct tagUsrDic {
|
|
TCHAR szUsrDic[USR_DIC_SIZE/sizeof(TCHAR)];
|
|
} USRDIC;
|
|
|
|
typedef USRDIC *PUSRDIC;
|
|
typedef USRDIC NEAR *NPUSRDIC;
|
|
typedef USRDIC FAR *LPUSRDIC;
|
|
#endif
|
|
|
|
#define MAX_NAME_LENGTH 32
|
|
|
|
#if !defined(ROMANIME)
|
|
|
|
#if defined(UNIIME) || defined(MINIIME)
|
|
#define MAX_IME_TABLES 6
|
|
#else
|
|
#define MAX_IME_TABLES 4
|
|
#endif
|
|
|
|
typedef struct tagTableFiles { // match with the IMEL
|
|
TCHAR szTblFile[MAX_IME_TABLES][MAX_NAME_LENGTH / sizeof(TCHAR)];
|
|
} TABLEFILES;
|
|
|
|
typedef TABLEFILES *PTABLEFILES;
|
|
typedef TABLEFILES NEAR *NPTABLEFILES;
|
|
typedef TABLEFILES FAR *LPTABLEFILES;
|
|
|
|
|
|
typedef struct tagValidChar { // match with the IMEL
|
|
DWORD dwVersion;
|
|
WORD fwProperties1;
|
|
WORD fwProperties2;
|
|
WORD nMaxKey;
|
|
WORD nSeqCode;
|
|
WORD fChooseChar[6];
|
|
WORD wReserved1[2];
|
|
#if defined(DAYI) || defined(UNIIME) || defined(MINIIME)
|
|
BYTE cChooseTrans[0x60];
|
|
#endif
|
|
WORD fCompChar[6];
|
|
WORD wReserved2[2];
|
|
WORD wCandPerPage;
|
|
WORD wCandStart;
|
|
WORD wCandRangeStart;
|
|
WORD wReserved3[1];
|
|
WORD wSeq2CompTbl[64];
|
|
WORD wChar2SeqTbl[0x42];
|
|
WORD wReserved4[2];
|
|
#if defined(WINAR30)
|
|
WORD wSymbol[10][4];
|
|
#elif defined(DAYI)
|
|
WORD wSymbol[340];
|
|
#elif defined(UNIIME) || defined(MINIME)
|
|
DWORD dwReserved5[32];
|
|
#endif
|
|
} VALIDCHAR;
|
|
|
|
typedef VALIDCHAR *PVALIDCHAR;
|
|
typedef VALIDCHAR NEAR *NPVALIDCHAR;
|
|
typedef VALIDCHAR FAR *LPVALIDCHAR;
|
|
#endif // !defined(ROMANIME)
|
|
|
|
|
|
typedef struct tagImeL { // local structure, per IME structure
|
|
// interlock protection variables
|
|
LONG lConfigGeneral;
|
|
LONG lConfigRegWord;
|
|
LONG lConfigSelectDic;
|
|
TCHAR szIMEName[MAX_NAME_LENGTH / sizeof(TCHAR)];
|
|
TCHAR szUIClassName[MAX_NAME_LENGTH / sizeof(TCHAR)];
|
|
TCHAR szStatusClassName[MAX_NAME_LENGTH / sizeof(TCHAR)];
|
|
TCHAR szOffCaretClassName[MAX_NAME_LENGTH / sizeof(TCHAR)];
|
|
TCHAR szCMenuClassName[MAX_NAME_LENGTH / sizeof(TCHAR)];
|
|
// Configuration of the IME
|
|
DWORD fdwModeConfig; // quick key/prediction mode
|
|
// status window
|
|
int xStatusWi; // width of status window
|
|
int yStatusHi; // high of status window
|
|
int cxStatusBorder; // border width of status window
|
|
int cyStatusBorder; // border height of status window
|
|
RECT rcStatusText; // text position relative to status window
|
|
RECT rcInputText; // input text relateive to status window
|
|
RECT rcShapeText; // shape text relative to status window
|
|
#if defined(ROMANIME)
|
|
WORD nMaxKey; // max key of a Chinese word
|
|
WORD wDummy; // DWORD bounary
|
|
#else
|
|
int xCompWi; // width
|
|
int yCompHi; // height
|
|
int cxCompBorder; // border width of composition window
|
|
int cyCompBorder; // border height of composition window
|
|
RECT rcCompText; // text position relative to composition window
|
|
// candidate list of composition
|
|
int xCandWi; // width of candidate list
|
|
int yCandHi; // high of candidate list
|
|
int cxCandBorder; // border width of candidate list
|
|
int cyCandBorder; // border height of candidate list
|
|
int cxCandMargin; // interior border width of candidate list
|
|
int cyCandMargin; // interior border height of candidate list
|
|
RECT rcCandText; // text position relative to candidate window
|
|
RECT rcCandPrompt; // candidate prompt bitmap
|
|
RECT rcCandPageText; // candidate page controls - up / home / down
|
|
RECT rcCandPageUp; // candidate page up
|
|
RECT rcCandHome; // candidate home page
|
|
RECT rcCandPageDn; // candidate page down
|
|
TCHAR szCompClassName[MAX_NAME_LENGTH / sizeof(TCHAR)];
|
|
TCHAR szCandClassName[MAX_NAME_LENGTH / sizeof(TCHAR)];
|
|
DWORD fdwErrMsg; // error message flag
|
|
#if !defined(WINIME)
|
|
// standard table related data
|
|
// size of standard table
|
|
UINT uTblSize[MAX_IME_TABLES];
|
|
// filename of tables
|
|
TCHAR szTblFile[MAX_IME_TABLES][MAX_NAME_LENGTH / sizeof(TCHAR)];
|
|
// the IME tables
|
|
// user create word related data
|
|
// user dictionary file name of IME
|
|
TCHAR szUsrDic[USR_DIC_SIZE / sizeof(TCHAR)];
|
|
// user dictionary map file name
|
|
TCHAR szUsrDicMap[USR_DIC_SIZE / sizeof(TCHAR)];
|
|
UINT uUsrDicSize; // memory size of user create words table
|
|
|
|
UINT uUsrDicReserved1;
|
|
UINT uUsrDicReserved2;
|
|
// user create phrase box // not implemented
|
|
TCHAR szUsrBox[USR_DIC_SIZE / sizeof(TCHAR)];
|
|
TCHAR szUsrBoxMap[USR_DIC_SIZE / sizeof(TCHAR)];
|
|
UINT uUsrBoxSize;
|
|
UINT uUsrBoxReserved1;
|
|
UINT uUsrBoxReserved2;
|
|
#endif
|
|
// the calculated sequence mask bits
|
|
DWORD dwSeqMask; // the sequence bits for one stoke
|
|
DWORD dwPatternMask; // the pattern bits for one result string
|
|
int nSeqBytes; // how many bytes for nMaxKey sequence chars
|
|
// reverse conversion
|
|
HKL hRevKL; // the HKL of reverse mapping IME
|
|
WORD nRevMaxKey;
|
|
// key related data
|
|
#if defined(PHON)
|
|
WORD nReadLayout; // ACER, ETen, IBM, or other - phonetic only
|
|
#else
|
|
WORD wDummy; // DWORD boundary
|
|
#endif
|
|
WORD nSeqBits; // no. of sequence bits
|
|
// must match with .RC file and VALIDCHAR
|
|
DWORD dwVersion;
|
|
WORD fwProperties1;
|
|
WORD fwProperties2;
|
|
WORD nMaxKey; // max key of a Chinese word
|
|
WORD nSeqCode; // no. of sequence code
|
|
WORD fChooseChar[6]; // valid char in choose state
|
|
// translate the char code to
|
|
// choose constants
|
|
WORD wReserved1[2];
|
|
#if defined(DAYI) || defined(UNIIME) || defined(MINIIME)
|
|
BYTE cChooseTrans[0x60];
|
|
#endif
|
|
WORD fCompChar[6]; // valid char in input state
|
|
WORD wReserved2[2];
|
|
WORD wCandPerPage; // number of candidate strings per page
|
|
WORD wCandStart; // 1. 2. 3. ... 0. start from 1
|
|
// 1. 2. 3. ... 0. range start from 0
|
|
WORD wCandRangeStart;
|
|
WORD wReserved3[1];
|
|
// convert sequence code to composition char
|
|
WORD wSeq2CompTbl[64];
|
|
// convert char to sequence code
|
|
WORD wChar2SeqTbl[0x42];
|
|
WORD wReserved4[2];
|
|
#if defined(WINAR30)
|
|
WORD wSymbol[10][4];
|
|
#elif defined(DAYI)
|
|
WORD wSymbol[340];
|
|
#elif defined(UNIIME) || defined(MINIIME)
|
|
DWORD fdwReserved5[32];
|
|
#endif
|
|
#endif // defined(ROMANIME)
|
|
} IMEL;
|
|
|
|
typedef IMEL *PIMEL;
|
|
typedef IMEL NEAR *NPIMEL;
|
|
typedef IMEL FAR *LPIMEL;
|
|
|
|
|
|
typedef struct tagInstL { // local instance structure, per IME instance
|
|
HINSTANCE hInst; // IME DLL instance handle
|
|
LPIMEL lpImeL;
|
|
#if !defined(ROMANIME)
|
|
DWORD fdwTblLoad; // the *.TBL load status
|
|
int cRefCount; // reference count
|
|
#if !defined(WINIME)
|
|
HANDLE hMapTbl[MAX_IME_TABLES];
|
|
HANDLE hUsrDicMem; // memory handle for user dictionary
|
|
TCHAR szUsrDicReserved[USR_DIC_SIZE / sizeof(TCHAR)];
|
|
UINT uUsrDicReserved1;
|
|
UINT uUsrDicReserved2;
|
|
HANDLE hUsrBoxMem;
|
|
TCHAR szUsrBoxReserved[USR_DIC_SIZE / sizeof(TCHAR)];
|
|
UINT uUsrBoxReserved1;
|
|
UINT uUsrBoxReserved2;
|
|
#endif
|
|
#endif
|
|
DWORD dwReserved1[32];
|
|
} INSTDATAL;
|
|
|
|
typedef INSTDATAL *PINSTDATAL;
|
|
typedef INSTDATAL NEAR *NPINSTDATAL;
|
|
typedef INSTDATAL FAR *LPINSTDATAL;
|
|
|
|
|
|
#if !defined(UNIIME)
|
|
extern IMEL sImeL;
|
|
extern LPIMEL lpImeL;
|
|
extern INSTDATAL sInstL;
|
|
extern LPINSTDATAL lpInstL;
|
|
#endif
|