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.
 
 
 
 
 
 

219 lines
6.0 KiB

/****************************************************************************
GDATA.H
Owner: cslim
Copyright (c) 1997-1999 Microsoft Corporation
Instance data and Shared memory data management functions
History:
14-JUL-1999 cslim Copied from IME98 source tree
*****************************************************************************/
#if !defined (_GDATA_H__INCLUDED_)
#define _GDATA_H__INCLUDED_
class CIMEData;
extern BOOL InitSharedData();
VOID InitImeData(CIMEData& ImeData);
extern BOOL CloseSharedMemory();
#define IMEDATA_MAGIC_NUMBER 0x12345678 // This will repesent whether IMEDATA initialized or not
// Type of IME Hangul keyboard layout
enum _KeyBoardType
{
KL_2BEOLSIK = 0, KL_3BEOLSIK_390 = 1, KL_3BEOLSIK_FINAL = 2
};
#define NUM_OF_IME_KL 3
///////////////////////////////////////////////////////////////////////////////
// UI Decls
enum StatusButtonTypes
{
HAN_ENG_TOGGLE_BUTTON,
JUNJA_BANJA_TOGGLE_BUTTON,
HANJA_CONV_BUTTON,
IME_PAD_BUTTON,
NULL_BUTTON = 0xFF
};
#define MAX_NUM_OF_STATUS_BUTTONS 4
// Button status
#define BTNSTATE_NORMAL 0 // normal
#define BTNSTATE_ONMOUSE 1 // mouse cursor on the button
#define BTNSTATE_PUSHED 2 // pushed
#define BTNSTATE_DOWN 4 // pushed
#define BTNSTATE_HANJACONV 8 // If hanja conv mode, button always pushed
// Button size
#define BTN_SMALL 0
#define BTN_MIDDLE 1
#define BTN_LARGE 2
struct StatusButton
{
StatusButtonTypes m_ButtonType;
WORD m_BmpNormalID, m_BmpOnMouseID, m_BmpPushedID, m_BmpDownOnMouseID;
WORD m_ToolTipStrID;
INT m_uiButtonState;
BOOL m_fEnable;
};
///////////////////////////////////////////////////////////////////////////////
// Global data S H A R E D to all IME instance
struct IMEDATA
{
ULONG ulMagic;
// Workarea
RECT rcWorkArea;
// Configuration of the IME: TIP uses following data to share user setting.
UINT uiCurrentKeylayout;
BOOL fJasoDel; // Backspace : delete per jaso or char
// which means All ISO-10646 hangul.
BOOL fKSC5657Hanja; // K1(KSC-5657) Hanja enable
BOOL fCandUnicodeTT;
// Status window data: Not used by TIP
UINT uNumOfButtons;
INT iCurButtonSize;
INT xStatusWi; // width of status window
INT yStatusHi; // high of status window
LONG xStatusRel, yStatusRel;
INT xButtonWi;
INT yButtonHi;
INT cxStatLeftMargin, cxStatRightMargin,
cyStatMargin, cyStatButton;
RECT rcButtonArea;
POINT ptStatusPos;
// Candidate window
INT xCandWi;
INT yCandHi;
// Comp window pos
POINT ptCompPos;
// This should be last - ia64 alignment issue
StatusButton StatusButtons[MAX_NUM_OF_STATUS_BUTTONS];
};
typedef IMEDATA *LPIMEDATA;
/////////////////////////////////////////////////////////////////////////////
// Class CIMEData
//
// Purpose : Shared memory handling across process boundary.
// This use MapViewOfFile() to mapping local process memory and Unlock
// automatically when reference count become zero
// Note : Currently Read only flag behaves same as R/W flag.
class CIMEData
{
public:
enum LockType { SMReadOnly, SMReadWrite };
CIMEData(LockType lockType=SMReadWrite);
~CIMEData() { UnlockSharedMemory(); }
static BOOL InitSharedData();
static BOOL CloseSharedMemory();
void InitImeData();
LPIMEDATA LockROSharedData();
LPIMEDATA LockRWSharedData();
BOOL UnlockSharedMemory();
LPIMEDATA operator->() { Assert(m_pImedata != 0); return m_pImedata; }
LPIMEDATA GetGDataRaw() { Assert(m_pImedata != 0); return m_pImedata; }
UINT GetCurrentBeolsik() { return m_pImedata->uiCurrentKeylayout; }
VOID SetCurrentBeolsik(UINT icurBeolsik);
BOOL GetJasoDel() { return m_pImedata->fJasoDel; }
VOID SetJasoDel(BOOL fJasoDel) { m_pImedata->fJasoDel = fJasoDel; }
BOOL GetKSC5657Hanja() { return m_pImedata->fKSC5657Hanja; }
VOID SetKSC5657Hanja(BOOL f5657) { m_pImedata->fKSC5657Hanja = f5657; }
private:
LPIMEDATA m_pImedata;
static IMEDATA m_ImeDataDef;
static HANDLE m_vhSharedData;
};
inline
CIMEData::CIMEData(LockType lockType)
{
Assert(m_vhSharedData != 0);
DebugMsg(DM_TRACE, TEXT("CIMEData(): Const"));
m_pImedata = 0;
LockRWSharedData();
ZeroMemory(&m_ImeDataDef, sizeof(IMEDATA));
// If failed to allocate or map shared memory, use static default data instead.
if (m_pImedata == NULL)
{
m_pImedata = &m_ImeDataDef;
return;
}
}
inline
LPIMEDATA CIMEData::LockROSharedData()
{
Assert(m_vhSharedData != 0);
DebugMsg(DM_TRACE, TEXT("CIMEData::LockROSharedData()"));
if (m_vhSharedData)
m_pImedata = (LPIMEDATA)MapViewOfFile(m_vhSharedData, FILE_MAP_READ, 0, 0, 0);
Assert(m_pImedata != 0);
return m_pImedata;
}
inline
LPIMEDATA CIMEData::LockRWSharedData()
{
Assert(m_vhSharedData != 0);
DebugMsg(DM_TRACE, TEXT("CIMEData::LockRWSharedData()"));
if (m_vhSharedData)
{
DebugMsg(DM_TRACE, TEXT("CIMEData::LockRWSharedData(): m_vhSharedData is null call MapViewOfFile"));
m_pImedata = (LPIMEDATA)MapViewOfFile(m_vhSharedData, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0);
}
Assert(m_pImedata != 0);
return m_pImedata;
}
// For unlocking shared memory
inline
BOOL CIMEData::UnlockSharedMemory()
{
DebugMsg(DM_TRACE, TEXT("CIMEData::UnlockSharedMemory(): Lock count zero UnmapViewOfFile"));
if (m_pImedata != &m_ImeDataDef)
{
UnmapViewOfFile(m_pImedata);
}
m_pImedata = 0;
return fTrue;
}
inline
VOID CIMEData::SetCurrentBeolsik(UINT uicurBeolsik)
{
Assert(uicurBeolsik<=KL_3BEOLSIK_FINAL);
if (uicurBeolsik <= KL_3BEOLSIK_FINAL)
m_pImedata->uiCurrentKeylayout = uicurBeolsik;
}
#endif // _GDATA_H__INCLUDED_