/* * _w32sys.h * * Purpose: * Isolate various Win 32 system dependencies. * * Copyright (c) 1995-1997, Microsoft Corporation. All rights reserved. */ #ifndef _W32SYS_H #define _W32SYS_H #if defined(PEGASUS) #if !defined(WINNT) #include "memory.h" // for memmove #endif struct IMESTYLE; struct IMECOLORSTY; struct CIMEShare; #define NOACCESSIBILITY // No Accessibility support on Win CE #define NOMAGELLAN // No Magellan on Win CE #define NODROPFILES // No drop files support on Win CE #define NOMETAFILES // No metafiles on Win CE #define NOPEDDUMP // No support for ped debug dump on CE #define NOFONTSUBINFO // Avoid reading fontsubinfo profile on CE #define CONVERT2BPP #define NODUMPFORMATRUNS #define NOMLKEYBOARD #define dxCaret 2 // caret width #define FONTCACHESIZE 8 #define CCSHASHSEARCHSIZE 15 #define DEFAULT_UNDO_SIZE 20 #define NUMPASTECHARSWAITCURSOR 1024 #else //!PEGASUS #define dxCaret 1 // caret width #define FONTCACHESIZE 24 #define CCSHASHSEARCHSIZE 31 #define DEFAULT_UNDO_SIZE 100 #define NUMPASTECHARSWAITCURSOR (1024*32) #define OBSOLETE // need this to get old IMEShare defines #include "imeshare.h" #endif // defined(PEGASUS) #ifndef NOLINESERVICES #define LINESERVICES #endif #define RSHIFT 1 #define LSHIFT 2 #define RCTRL 0x10 #define LCTRL 0x20 #define RALT 0x40 #define LALT 0x80 #define SHIFT (RSHIFT + LSHIFT) #define ALT (RALT + LALT) #define CTRL (RCTRL + LCTRL) #define HOTEURO 0x1000 #define ALT0 0x2000 #define ALTNUMPAD 0x4000 #define LETAFTERSHIFT 0x8000 // special virtual keys copied from Japan MSVC ime.h #define VK_KANA 0x15 #define VK_KANJI 0x19 // Initialization flags that can be used in system.ini for testing purposes #define SYSINI_USELS 0x1 #define SYSINI_BIDI 0x2 #define SYSINI_USEAIMM 0x4 #define SYSINI_DEBUGFONT 0x8 #define SYSINI_DEBUGGCF125X 0x10 /* * GetCaretDelta () * * @func Get size of caret to add to current caret position to get the * maximum extent needed to display caret. * * @rdesc Size of caret over 1 pixel * * @devnote This exists solely to abstract this calculation * to handle a variable size caret. */ inline int GetCaretDelta() { return dxCaret - 1; } // Used in rtfread.cpp to keep track of lossy rtf. #ifdef PWORD_CONVERTER_V2 #define REPORT_LOSSAGE #endif // Defines for some Codepages #define CP_JAPAN 932 #define CP_KOREAN 949 #define CP_CHINESE_TRAD 950 #define CP_CHINESE_SIM 936 #define CP_HEBREW 1255 #define CP_ARABIC 1256 #define CP_THAI 874 #define CP_VIETNAMESE 1258 // Indic codepages from NT50 #define CP_DEVANAGARI 57002 #define CP_BENGALI 57003 #define CP_TAMIL 57004 #define CP_TELUGU 57005 #define CP_ASSAMESE 57006 #define CP_ORIYA 57007 #define CP_KANNADA 57008 #define CP_MALAYALAM 57009 #define CP_GUJARATI 57010 #define CP_PUNJABI 57011 // Ad hoc codepages to keep rgCpgCharSet unique #define CP_GEORGIAN 58000 #define CP_ARMENIAN 58001 // Newly introduced Indic language ID #if(WINVER < 0x500) #define LANG_HINDI 0x39 #define LANG_KONKANI 0x57 #define LANG_NEPALI 0x61 #define LANG_BENGALI 0x45 #define LANG_PUNJABI 0x46 #define LANG_GUJARATHI 0x47 #define LANG_ORIYA 0x48 #define LANG_TAMIL 0x49 #define LANG_TELUGU 0x4a #define LANG_KANNADA 0x4b #define LANG_MALAYALAM 0x4c #define LANG_ASSAMESE 0x4d #define LANG_MARATHI 0x4e #define LANG_SANSKRIT 0x4f #endif // Index returned by CharSetIndexFromChar() #define FE_FLAG 0x10000 #define MULTIPLE_FLAG 0x80000000 // Sign bit #define FE_INDEX FE_FLAG + MULTIPLE_FLAG #define ANSI_INDEX 0 #define ARABIC_INDEX 7 #define GREEK_INDEX 14 #define HAN_INDEX FE_INDEX + 1 #define HANGUL_INDEX FE_FLAG + 11 #define HEBREW_INDEX 6 #define RUSSIAN_INDEX 9 #define SHIFTJIS_INDEX FE_FLAG + 8 #define VIET_INDEX 17 #define THAI_INDEX 18 #define DEVANAGARI_INDEX 19 #define TAMIL_INDEX 20 #define GEORGIAN_INDEX 21 #define ARMENIAN_INDEX 22 #define INDIC_FIRSTINDEX DEVANAGARI_INDEX #define INDIC_LASTINDEX ARMENIAN_INDEX #define UNKNOWN_INDEX MULTIPLE_FLAG + 1 #define PC437_CHARSET 254 #define DEVANAGARI_CHARSET 127 #define TAMIL_CHARSET 126 #define GEORGIAN_CHARSET 125 #define ARMENIAN_CHARSET 124 #define ADHOC_CHARSET 120 // controls the size of two charset tables. #define NCHARSETS 24 #define IsSymbolOrOEM(x) (x == SYMBOL_CHARSET || x == OEM_CHARSET) enum CC { CC_ARABIC, CC_HEBREW, CC_RTL, CC_LTR, CC_EOP, CC_ASCIIDIGIT, CC_NEUTRAL }; #define IsRTL(cc) (cc <= CC_RTL) const SHORT sLanguageEnglishUS = 0x0409; const SHORT sLanguageMask = 0x03ff; const SHORT sLanguageArabic = 0x0401; const SHORT sLanguageHebrew = 0x040d; // FUTURE: currently this const == sLanguageEnglishUS // for no reason except that it was this way // in RE1.0 BiDi. Consider changing, or sticking // the real language in, and changing the logic // of handling wLang a bit. const SHORT sLanguageNonBiDi = 0x0409; // Logical unit definition const int LX_PER_INCH = 1440; const int LY_PER_INCH = 1440; // HIMETRIC units per inch (used for conversion) const int HIMETRIC_PER_INCH = 2540; #ifdef DEBUG void* __cdecl operator new(size_t nSize, char *szFile, int nLine); #define NEW_DEBUG new(__FILE__, __LINE__) #define new NEW_DEBUG void UpdateMst(void); struct MST { char *szFile; int cbAlloc; }; //Memory Statistics; extern MST vrgmst[]; #endif //DEBUG #ifdef CopyMemory #undef CopyMemory #endif #ifdef MoveMemory #undef MoveMemory #endif #ifdef FillMemory #undef FillMemory #endif #ifdef ZeroMemory #undef ZeroMemory #endif #ifdef CompareMemory #undef CompareMemory #endif #ifndef KF_ALTDOWN #define KF_ALTDOWN 0x2000 #endif // Use for our version of ExtTextOut enum CONVERTMODE { CVT_NONE, // Use Unicode (W) CharWidth/TextOut APIs CVT_WCTMB, // Convert to MBCS using WCTMB and _wCodePage CVT_LOWBYTE // Use low byte of 16-bit chars (for SYMBOL_CHARSET }; // and when code page isn't installed) // Opaque Type class CTxtSelection; class CTxtEdit; class CCharFormat; class CCcs; enum UN_FLAGS { UN_NOOBJECTS = 1, UN_CONVERT_WCH_EMBEDDING = 2 }; #undef GetStringTypeEx #undef CharLower #undef CharLowerBuff #undef CharUpperBuff #undef CreateIC #undef CreateFile #undef CreateFontIndirect #undef CompareString #undef DefWindowProc #undef GetKeyboardLayout #undef GetProfileSection #undef GetTextMetrics #undef GetTextExtentPoint32 #undef GetTextFace #undef GetWindowLong #undef GetWindowLongPtr #undef GetClassLong #undef LoadBitmap #undef LoadCursor #undef LoadLibrary #undef SendMessage #undef SetWindowLong #undef SetWindowLongPtr #undef PostMessage #undef lstrcmp #undef lstrcmpi #undef PeekMessage #undef GetModuleFileName #undef GetLayout #undef SetLayout // Bits used in _fFEFontInfo: #define JPN_FONT_AVAILABLE 0x0001 // True if Jpn font is available #define KOR_FONT_AVAILABLE 0x0002 // True if Kor font is available #define BIG5_FONT_AVAILABLE 0x0004 // True if Trad. Chinese font is available #define GB_FONT_AVAILABLE 0x0008 // True if Simplified Chinese font is available #define FEUSER_LCID 0x0010 // True if User LCID is FE LCID #define FEUSER_CODEPAGE 0x0060 // indicate which User FE codepage its #define FEUSER_CP_JPN 0x0000 // =00 for JPN #define FEUSER_CP_KOR 0x0020 // =20 for KOR #define FEUSER_CP_BIG5 0x0040 // =40 for BIG5 #define FEUSER_CP_GB 0x0060 // =60 for GB #define FEDATA_NOT_INIT 0xFFFF // No data yet class CConvertStrW { public: operator WCHAR *(); protected: CConvertStrW(); ~CConvertStrW(); void Free(); LPWSTR _pwstr; WCHAR _awch[MAX_PATH * 2]; }; inline CConvertStrW::CConvertStrW() { _pwstr = NULL; } inline CConvertStrW::~CConvertStrW() { Free(); } inline CConvertStrW::operator WCHAR *() { return _pwstr; } class CStrInW : public CConvertStrW { public: CStrInW(LPCSTR pstr); CStrInW(LPCSTR pstr, UINT uiCodePage); CStrInW(LPCSTR pstr, int cch, UINT uiCodePage); int strlen(); protected: CStrInW(); void Init(LPCSTR pstr, int cch, UINT uiCodePage); int _cwchLen; UINT _uiCodePage; }; inline CStrInW::CStrInW() { } inline int CStrInW::strlen() { return _cwchLen; } typedef DWORD (WINAPI* PFN_GETLAYOUT)(HDC); typedef DWORD (WINAPI* PFN_SETLAYOUT)(HDC, DWORD); class CW32System { private : static DWORD _dwPlatformId; // platform GetVersionEx(); static LCID _syslcid; public : static BOOL _fHaveIMMProcs; static CIMEShare *_pIMEShare; static BOOL _fHaveAIMM; static BOOL _fHaveIMMEShare; static UINT _fRegisteredXBox; // flag indicating if listbox and combobox were registered static DWORD _dwMajorVersion; // major version from GetVersionEx() static DWORD _dwMinorVersion; // minor version from GetVersionEx() static INT _icr3DDarkShadow; // value to use for COLOR_3DDKSHADOW static UINT _MSIMEMouseMsg; // private msg for support mouse operation static UINT _MSIMEReconvertMsg; // private msg for reconversion static UINT _MSIMEReconvertRequestMsg; // private msg for reconversion request static UINT _MSIMEDocFeedMsg; // private msg for document feed static UINT _MSIMEQueryPositionMsg; // private msg for query position static UINT _MSIMEServiceMsg; // private msg for checking MSIME98 or later static UINT _MSMouseRoller; // private msg for mouse scrolling // Misc flags used for more precise character classification static WORD _fFEFontInfo; static BOOL _fLRMorRLM; CW32System(); ~CW32System(); static DWORD AddRef(); static DWORD Release(); // Platform testing static bool OnWinNTFE() { return _dwPlatformId == VER_PLATFORM_WIN32_NT && IsFELCID(_syslcid ); } static bool OnWinNTNonFE() { return _dwPlatformId == VER_PLATFORM_WIN32_NT && !IsFELCID(_syslcid ); } static bool OnWinNT5() { return _dwPlatformId == VER_PLATFORM_WIN32_NT && 5 == _dwMajorVersion; } static bool OnWinNT4() { return _dwPlatformId == VER_PLATFORM_WIN32_NT && 4 == _dwMajorVersion; } static bool OnWin9xFE() { return _dwPlatformId == VER_PLATFORM_WIN32_WINDOWS && IsFELCID(_syslcid ); } static bool OnWin9x() { return _dwPlatformId == VER_PLATFORM_WIN32_WINDOWS; } static bool OnWin95() { return OnWin9x() && (4 == _dwMajorVersion) && (0 == _dwMinorVersion); } static bool OnWin95FE() { return OnWin95() && IsFELCID(_syslcid ); } static bool OnWin9xThai() { return _dwPlatformId == VER_PLATFORM_WIN32_WINDOWS && PRIMARYLANGID(_syslcid) == LANG_THAI; } static bool OnWin9xBiDi() { return _dwPlatformId == VER_PLATFORM_WIN32_WINDOWS && IsBiDiLcid(_syslcid); } static bool OnBiDiOS() { return IsBiDiLcid(_syslcid) != 0; } struct WM_CHAR_INFO { bool _fAccumulate; bool _fLeadByte; bool _fTrailByte; bool _fIMEChar; }; static UINT GetACP() {return _ACP;} static LRESULT ANSIWndProc( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL fIs10Mode ); static void AnsiFilter( UINT &msg, WPARAM &wparam, LPARAM lparam, void *pvoid, BOOL fIs10Mode = FALSE ); static HGLOBAL WINAPI GlobalAlloc( UINT uFlags, DWORD dwBytes ); static HGLOBAL WINAPI GlobalFree( HGLOBAL hMem ); static UINT WINAPI GlobalFlags( HGLOBAL hMem ); static HGLOBAL WINAPI GlobalReAlloc( HGLOBAL hMem, DWORD dwBytes, UINT uFlags ); static DWORD WINAPI GlobalSize( HGLOBAL hMem ); static PVOID WINAPI GlobalLock( HGLOBAL hMem ); static HGLOBAL WINAPI GlobalHandle( LPCVOID pMem ); static BOOL WINAPI GlobalUnlock( HGLOBAL hMem ); static void WINAPI REGetCharWidth( HDC hdc, TCHAR iChar, SHORT * pWidth, UINT uiCodePage, SHORT xOverhang, //@parm Equivalent to GetTextMetrics() tmOverhang. INT iDefWidth); //@parm Default width to use if font calc's zero //width. (Handles Win95 problem). static void WINAPI REExtTextOut( CONVERTMODE cm, UINT uiCodePage, HDC hdc, int x, int y, UINT fuOptions, CONST RECT *lprc, const WCHAR *lpString, UINT cch, CONST INT *lpDx, BOOL FEFontOnNonFEWin95); static CONVERTMODE WINAPI DetermineConvertMode( HDC hdc, BYTE tmCharSet ); static void WINAPI CalcUnderlineInfo(HDC hdc, CCcs *pccs, TEXTMETRIC *ptm ); static BOOL WINAPI EnableScrollBar( HWND hWnd, UINT wSBflags, UINT wArrows ); static BOOL WINAPI ShowScrollBar( HWND hWnd, int wBar, BOOL bShow, LONG nMax ); static BOOL WINAPI IsEnhancedMetafileDC( HDC hdc ); static HPALETTE WINAPI ManagePalette( HDC hdc, CONST LOGPALETTE *plogpal, HPALETTE &hpalOld, HPALETTE &hpalNew ); static void GetFacePriCharSet(HDC hdc, LOGFONT* plf); static int WINAPI GetMapMode(HDC hdc); static BOOL WINAPI WinLPtoDP(HDC hdc, LPPOINT lppoints, int nCount); static long WINAPI WvsprintfA(LONG cb, LPSTR szBuf, LPCSTR szFmt, va_list arglist); static int WINAPI MulDiv(int nNumber, int nNumerator, int nDenominator); // Convert Himetric along the X axis to X pixels static inline LONG HimetricXtoDX(LONG xHimetric, LONG xPerInch) { // This formula is rearranged to get rid of the need for floating point // arithmetic. The real way to understand the formula is to use // (xHimetric / HIMETRIC_PER_INCH) to get the inches and then multiply // the inches by the number of x pixels per inch to get the pixels. return (LONG) MulDiv(xHimetric, xPerInch, HIMETRIC_PER_INCH); } // Convert Himetric along the Y axis to Y pixels static inline LONG HimetricYtoDY(LONG yHimetric, LONG yPerInch) { // This formula is rearranged to get rid of the need for floating point // arithmetic. The real way to understand the formula is to use // (xHimetric / HIMETRIC_PER_INCH) to get the inches and then multiply // the inches by the number of y pixels per inch to get the pixels. return (LONG) MulDiv(yHimetric, yPerInch, HIMETRIC_PER_INCH); } // Convert Pixels on the X axis to Himetric static inline LONG DXtoHimetricX(LONG dx, LONG xPerInch) { // This formula is rearranged to get rid of the need for floating point // arithmetic. The real way to understand the formula is to use // (dx / x pixels per inch) to get the inches and then multiply // the inches by the number of himetric units per inch to get the // count of himetric units. return (LONG) MulDiv(dx, HIMETRIC_PER_INCH, xPerInch); } // Convert Pixels on the Y axis to Himetric static inline LONG DYtoHimetricY(LONG dy, LONG yPerInch) { // This formula is rearranged to get rid of the need for floating point // arithmetic. The real way to understand the formula is to use // (dy / y pixels per inch) to get the inches and then multiply // the inches by the number of himetric units per inch to get the // count of himetric units. return (LONG) MulDiv(dy, HIMETRIC_PER_INCH, yPerInch); } // // Case insensitive ASCII compare // static BOOL ASCIICompareI( const BYTE *pstr1, const BYTE *pstr2, int iCount ) { int i; for (i = 0; i < iCount && !((pstr1[i] ^ pstr2[i]) & ~0x20); i++) ; return i == iCount; } // // Allocate and convert a MultiByte string to a wide character string // Allocated strings must be freed with delete // static WCHAR *ConvertToWideChar( const char *pstr ) { int istrlen = 0; if(pstr) for (istrlen; pstr[istrlen]; istrlen++); WCHAR *pnew = new WCHAR[istrlen + 1]; if(pnew && (!pstr || 0 != ::MultiByteToWideChar( CP_ACP, 0, pstr, -1, pnew, istrlen + 1))) { return pnew; } return NULL; } // // functions for memory and string management // #ifdef DEBUG static void PvSet(void *pv, char *szFile, int line); static PVOID PvAllocDebug(ULONG cbBuf, UINT uiMemFlags, char *szFile, int line); static PVOID PvReAllocDebug(PVOID pvBuf, DWORD cbBuf, char *szFile, int line); static void FreePvDebug(PVOID pvBuf); #endif static PVOID PvAlloc(ULONG cbBuf, UINT uiMemFlags); static PVOID PvReAlloc(PVOID pvBuf, DWORD cbBuf); static void FreePv(PVOID pvBuf); static inline void *MoveMemory(void *dst, const void *src, size_t cb) { Assert(cb >= 0); return memmove(dst, src, cb); } static inline void *CopyMemory(void *dst, const void *src, size_t cb) { // Will work for overlapping regions Assert(cb >= 0); return MoveMemory(dst, src, cb); } static inline void *FillMemory(void *dst, int fill, size_t cb) { return memset(dst, fill, cb); } static inline void *ZeroMemory(void *dst, size_t cb) { Assert(cb >= 0); return memset(dst, 0, cb); } static inline int CompareMemory(const void *s1, const void *s2, size_t cb) { return memcmp(s1, s2, cb); } static size_t wcslen(const wchar_t *wcs); static wchar_t * wcscpy(wchar_t * dst, const wchar_t * src); static int wcscmp(const wchar_t * src, const wchar_t * dst); static int wcsicmp(const wchar_t * src, const wchar_t * dst); static wchar_t * wcsncpy (wchar_t * dest, const wchar_t * source, size_t count); static int wcsnicmp(const wchar_t *first, const wchar_t *last, size_t count); static unsigned long strtoul(const char *); // ---------------------------------- // IME Support // ---------------------------------- static BOOL ImmInitialize( void ); static void ImmTerminate( void ); static LONG ImmGetCompositionStringA ( HIMC, DWORD, PVOID, DWORD, BOOL ); static LONG ImmGetCompositionStringW ( HIMC, DWORD, PVOID, DWORD, BOOL ); static HIMC ImmGetContext ( HWND ); static BOOL ImmSetCompositionFontA ( HIMC, LPLOGFONTA, BOOL ); static BOOL ImmSetCompositionWindow ( HIMC, LPCOMPOSITIONFORM, BOOL ); static BOOL ImmReleaseContext ( HWND, HIMC ); static DWORD ImmGetProperty ( HKL, DWORD, BOOL ); static BOOL ImmGetCandidateWindow ( HIMC, DWORD, LPCANDIDATEFORM, BOOL ); static BOOL ImmSetCandidateWindow ( HIMC, LPCANDIDATEFORM, BOOL ); static BOOL ImmNotifyIME ( HIMC, DWORD, DWORD, DWORD, BOOL ); static HIMC ImmAssociateContext ( HWND, HIMC, BOOL ); static UINT ImmGetVirtualKey ( HWND, BOOL ); static HIMC ImmEscape ( HKL, HIMC, UINT, PVOID, BOOL ); static BOOL ImmGetOpenStatus ( HIMC, BOOL ); static BOOL ImmSetOpenStatus ( HIMC, BOOL, BOOL ); static BOOL ImmGetConversionStatus ( HIMC, LPDWORD, LPDWORD, BOOL ); static BOOL ImmSetConversionStatus ( HIMC, DWORD, DWORD, BOOL ); static HWND ImmGetDefaultIMEWnd ( HWND , BOOL); static BOOL ImmSetCompositionStringW (HIMC, DWORD, PVOID, DWORD, PVOID, DWORD); static BOOL FSupportSty ( UINT, UINT ); static const IMESTYLE * PIMEStyleFromAttr ( const UINT ); static const IMECOLORSTY * PColorStyleTextFromIMEStyle ( const IMESTYLE * ); static const IMECOLORSTY * PColorStyleBackFromIMEStyle ( const IMESTYLE * ); static BOOL FBoldIMEStyle ( const IMESTYLE * ); static BOOL FItalicIMEStyle ( const IMESTYLE * ); static BOOL FUlIMEStyle ( const IMESTYLE * ); static UINT IdUlIMEStyle ( const IMESTYLE * ); static COLORREF RGBFromIMEColorStyle ( const IMECOLORSTY * ); // ---------------------------------- // National Language Keyboard support // ---------------------------------- static HKL CheckChangeKeyboardLayout (BYTE bCharSet); static HKL ActivateKeyboard (LONG index); static DWORD GetCharFlags125x(WCHAR ch); static BOOL GetKeyboardFlag (WORD dwKeyMask, WORD wKey); static WORD GetKeyboardFlags () {return _wKeyboardFlags;} static HKL GetKeyboardLayout (DWORD dwThreadID); static WORD GetKeyPadNumber () {return _wNumKeyPad;} static WORD GetDeadKey () {return _wDeadKey;} static void InitKeyboardFlags (); static void RefreshKeyboardLayout (); static void ResetKeyboardFlag (WORD wFlag) {_wKeyboardFlags &= ~wFlag;} static void SetDeadKey (WORD wDeadKey) {_wDeadKey = wDeadKey;} static void SetKeyboardFlag (WORD wFlag) {_wKeyboardFlags |= wFlag;} static void SetKeyPadNumber (WORD wNum) {_wNumKeyPad = wNum;} static bool UsingHebrewKeyboard () {return PRIMARYLANGID(_hklCurrent) == LANG_HEBREW;} static void InitPreferredFontInfo(); static bool SetPreferredFontInfo( int cpg, bool fUIFont, SHORT iFont, BYTE yHeight, BYTE bPitchAndFamily ); static bool GetPreferredFontInfo( int cpg, bool fUIFont, SHORT& iFont, BYTE& yHeight, BYTE& bPitchAndFamily ); static SHORT GetPreferredFontHeight( bool fUIFont, BYTE bOrgCharSet, BYTE bNewCharSet, SHORT yOrgHeight ); static void CheckInstalledFEFonts(); static void CheckInstalledKeyboards(); static bool IsFontAvail( HDC hDC, int cpg, bool fUIFont = false, short *piFontIndex = NULL); static bool IsFEFontInSystem( int cpg ); static UINT GetFEFontInfo( void ); static int IsFESystem() { return IsFELCID( _syslcid ); } #ifndef NOACCESSIBILITY // ---------------------------------- // Accessability Support // ---------------------------------- static HRESULT VariantCopy(VARIANTARG FAR* pvargDest, VARIANTARG FAR* pvargSrc); static LRESULT LResultFromObject(REFIID riid, WPARAM wParam, LPUNKNOWN punk); static HRESULT AccessibleObjectFromWindow(HWND hWnd, DWORD dwID, REFIID riidInterface, void ** ppvObject); static BOOL BlockInput(BOOL fBlock); static UINT SendInput(UINT nInputs, LPINPUT pInputs, int cbSize); static VOID NotifyWinEvent(DWORD dwEvent, HWND hWnd, LONG lObjectType, LONG lObjectId); #endif // ---------------------------------- // OLE Support // ---------------------------------- static HRESULT LoadRegTypeLib ( REFGUID, WORD, WORD, LCID, ITypeLib ** ); static HRESULT LoadTypeLib ( const OLECHAR *, ITypeLib ** ); static HRESULT LoadTypeLibEx( LPCOLESTR szFile, REGKIND regkind, ITypeLib ** pptlib ); static BSTR SysAllocString ( const OLECHAR * ); static BSTR SysAllocStringLen ( const OLECHAR *, UINT ); static void SysFreeString ( BSTR ); static UINT SysStringLen ( BSTR ); static void VariantInit ( VARIANTARG * ); static HRESULT OleCreateFromData ( LPDATAOBJECT, REFIID, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, void ** ); static void CoTaskMemFree ( PVOID ); static HRESULT CreateBindCtx ( DWORD, LPBC * ); static HANDLE OleDuplicateData ( HANDLE, CLIPFORMAT, UINT ); static HRESULT CoTreatAsClass ( REFCLSID, REFCLSID ); static HRESULT ProgIDFromCLSID ( REFCLSID, LPOLESTR * ); static HRESULT OleConvertIStorageToOLESTREAM ( LPSTORAGE, LPOLESTREAM ); static HRESULT OleConvertIStorageToOLESTREAMEx ( LPSTORAGE, CLIPFORMAT, LONG, LONG, DWORD, LPSTGMEDIUM, LPOLESTREAM ); static HRESULT OleSave ( LPPERSISTSTORAGE, LPSTORAGE, BOOL ); static HRESULT StgCreateDocfileOnILockBytes ( ILockBytes *, DWORD, DWORD, IStorage ** ); static HRESULT CreateILockBytesOnHGlobal ( HGLOBAL, BOOL, ILockBytes ** ); static HRESULT OleCreateLinkToFile ( LPCOLESTR, REFIID, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, void ** ); static PVOID CoTaskMemAlloc ( ULONG ); static PVOID CoTaskMemRealloc ( PVOID, ULONG ); static HRESULT OleInitialize ( PVOID ); static void OleUninitialize ( ); static HRESULT OleSetClipboard ( IDataObject * ); static HRESULT OleFlushClipboard ( ); static HRESULT OleIsCurrentClipboard ( IDataObject * ); static HRESULT DoDragDrop ( IDataObject *, IDropSource *, DWORD, DWORD * ); static HRESULT OleGetClipboard ( IDataObject ** ); static HRESULT RegisterDragDrop ( HWND, IDropTarget * ); static HRESULT OleCreateLinkFromData ( IDataObject *, REFIID, DWORD, LPFORMATETC, IOleClientSite *, IStorage *, void ** ); static HRESULT OleCreateStaticFromData ( IDataObject *, REFIID, DWORD, LPFORMATETC, IOleClientSite *, IStorage *, void ** ); static HRESULT OleDraw ( IUnknown *, DWORD, HDC, LPCRECT ); static HRESULT OleSetContainedObject ( IUnknown *, BOOL ); static HRESULT CoDisconnectObject ( IUnknown *, DWORD ); static HRESULT WriteFmtUserTypeStg ( IStorage *, CLIPFORMAT, LPOLESTR ); static HRESULT WriteClassStg ( IStorage *, REFCLSID ); static HRESULT SetConvertStg ( IStorage *, BOOL ); static HRESULT ReadFmtUserTypeStg ( IStorage *, CLIPFORMAT *, LPOLESTR * ); static HRESULT ReadClassStg ( IStorage *pstg, CLSID * ); static HRESULT OleRun ( IUnknown * ); static HRESULT RevokeDragDrop ( HWND ); static HRESULT CreateStreamOnHGlobal ( HGLOBAL, BOOL, IStream ** ); static HRESULT GetHGlobalFromStream ( IStream *pstm, HGLOBAL * ); static HRESULT OleCreateDefaultHandler ( REFCLSID, IUnknown *, REFIID, void ** ); static HRESULT CLSIDFromProgID ( LPCOLESTR, LPCLSID ); static HRESULT OleConvertOLESTREAMToIStorage ( LPOLESTREAM, IStorage *, const DVTARGETDEVICE * ); static HRESULT OleLoad ( IStorage *, REFIID, IOleClientSite *, void ** ); static HRESULT ReleaseStgMedium ( LPSTGMEDIUM ); static HRESULT CoCreateInstance (REFCLSID rclsid, LPUNKNOWN pUnknown, DWORD dwClsContext, REFIID riid, PVOID *ppv); static void FreeOle(); static void FreeIME(); static BOOL HaveIMEShare(); static BOOL getIMEShareObject(CIMEShare **ppIMEShare); static BOOL IsAIMMLoaded() { return _fHaveAIMM; } static BOOL GetAimmObject(IUnknown **ppAimm); static BOOL LoadAIMM(); static HRESULT AIMMDefWndProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam, LRESULT *plres); static HRESULT AIMMGetCodePage (HKL hKL, UINT *uCodePage); static HRESULT AIMMActivate (BOOL fRestoreLayout); static HRESULT AIMMDeactivate (void); static HRESULT AIMMFilterClientWindows(ATOM *aaClassList, UINT uSize); int __cdecl sprintf(char * buff, char *fmt, ...); // ---------------------------------- // Useful ANSI<-->Unicode conversion // and language id routines // ---------------------------------- static int MbcsFromUnicode(LPSTR pstr, int cch, LPCWSTR pwstr, int cwch = -1, UINT codepage = CP_ACP, UN_FLAGS flags = UN_CONVERT_WCH_EMBEDDING); static int UnicodeFromMbcs(LPWSTR pwstr, int cwch, LPCSTR pstr, int cch = -1, UINT uiCodePage = CP_ACP); static int MBTWC(INT CodePage, DWORD dwFlags, LPCSTR pstrMB, int cchMB, LPWSTR pstrWC, int cchWC, LPBOOL pfNoCodePage); static int WCTMB(INT CodePage, DWORD dwFlags, LPCWSTR pstrWC, int cchWC, LPSTR pstrMB, int cchMB, LPCSTR pchDefault, LPBOOL pfUsedDef, LPBOOL pfNoCodePage, BOOL fTestCodePage = FALSE); static int VerifyFEString(INT cpg, LPCWSTR pstrWC, int cchWC, BOOL fTestInputCpg); static HGLOBAL TextHGlobalAtoW( HGLOBAL hglobal ); static HGLOBAL TextHGlobalWtoA( HGLOBAL hglobal ); static UINT ConvertLanguageIDtoCodePage(WORD lid); static HKL FindDirectionalKeyboard(BOOL fRTL); static BYTE GetCharSet(INT cpg, int *pcharsetIndex = NULL); static BYTE MatchFECharSet(DWORD dwCharInfo, DWORD dwFontSig); static INT GetCodePage(BYTE bCharSet); static DWORD GetFontSig(WORD wCharSet); static DWORD GetFontSigFromScript(int iScript); static BYTE GetFirstAvailCharSet(DWORD dwFontSig); static UINT GetKeyboardCodePage(DWORD dwMakeAPICall = 0); static LCID GetKeyboardLCID(DWORD dwMakeAPICall = 0); static UINT GetLocaleCodePage(); static LCID GetLocaleLCID(); static HKL GetPreferredKbd(LONG iScript) {return _hkl[iScript];} static void SetPreferredKbd(LONG iScript, HKL hkl) {_hkl[iScript] = hkl;} static UINT GetSystemDefaultCodePage() {return ConvertLanguageIDtoCodePage(GetSystemDefaultLangID());} static int GetTrailBytesCount(BYTE ach, UINT cpg); static BYTE GetGdiCharSet(BYTE bCharSet); static INT In125x(WCHAR ch, BYTE bCharSet); static BOOL Is8BitCodePage(unsigned CodePage); static BOOL IsAlef(TCHAR ch); static BOOL IsBiDiCharSet(unsigned CharSet) {return IN_RANGE(HEBREW_CHARSET, CharSet, ARABIC_CHARSET);} static bool IsBiDiCodePage(int cpg) {return IN_RANGE(CP_HEBREW, cpg, CP_ARABIC);} static bool IsBiDiKbdInstalled() {return _hkl[HEBREW_INDEX] || _hkl[ARABIC_INDEX];} static bool IsThaiKbdInstalled() {return _hkl[THAI_INDEX] != 0;} static bool IsIndicKbdInstalled(); static bool IsComplexKbdInstalled() {return IsBiDiKbdInstalled() || IsThaiKbdInstalled() || IsIndicKbdInstalled();} static BOOL IsPrivateCharSet(unsigned CharSet) {return IN_RANGE(ADHOC_CHARSET, CharSet, DEVANAGARI_CHARSET);} static bool IsVietnameseCodePage(int cpg) {return cpg == CP_VIETNAMESE;} static BOOL IsDiacritic(WCHAR ch); static BOOL IsBiDiDiacritic(TCHAR ch); static BOOL IsBiDiKashida(WCHAR ch) {return ch == 0x0640;} static BOOL IsBiDiLcid(LCID lcid); static BOOL IsIndicLcid(LCID lcid); static BOOL IsComplexScriptLcid(LCID lcid); static BOOL IsCharSetValid(BYTE bCharSet); static BOOL IsDiacriticOrKashida(WCHAR ch, WORD wC3Type); static bool IsFELCID(LCID lcid); static BOOL IsFECharSet (BYTE bCharSet); static bool IsFECodePage(int cpg) {return IN_RANGE(CP_JAPAN, cpg, CP_CHINESE_TRAD);} static BOOL IsFECodePageFont (DWORD dwFontSig); static BOOL IsRTLCharSet(BYTE bCharSet); BOOL IsStrongDirectional(CC cc) {return cc <= CC_LTR;} static BOOL IsVietCdmSequenceValid(WCHAR ch1, WCHAR ch2); static BOOL IsZWG(char ch, BYTE bCharSet); //@cmember Is char a 0-width glyph? static BOOL IsUTF8BOM(BYTE *pstr); static LONG ScriptIndexFromCharSet(BYTE bCharSet); static LONG ScriptIndexFromChar (WCHAR ch); static LONG ScriptIndexFromFontSig(DWORD dwFontSig); static WPARAM ValidateStreamWparam(WPARAM wparam); static CC MECharClass(TCHAR ch); static HDC GetScreenDC(); // ---------------------------------- // Unicode Wrapped Functions // ---------------------------------- // We could use inline and a function pointer table to improve efficiency and code size. static ATOM WINAPI RegisterREClass( const WNDCLASSW *lpWndClass, const char *szAnsiClassName, WNDPROC AnsiWndProc ); static BOOL GetVersion( DWORD *pdwPlatformId, DWORD *pdwMajorVersion, DWORD *pdwMinorVersion ); static BOOL GetStringTypes( LCID lcid, LPCTSTR lpSrcStr, int cchSrc, LPWORD lpCharType1, LPWORD lpCharType3 ); static BOOL WINAPI GetStringTypeEx( LCID Locale, DWORD dwInfoType, LPCWSTR lpSrcStr, int cchSrc, LPWORD lpCharType ); static LPWSTR WINAPI CharLower(LPWSTR pwstr); static DWORD WINAPI CharLowerBuff(LPWSTR pwstr, DWORD cchLength); static DWORD WINAPI CharUpperBuff(LPWSTR pwstr, DWORD cchLength); static HDC WINAPI CreateIC( LPCWSTR lpszDriver, LPCWSTR lpszDevice, LPCWSTR lpszOutput, CONST DEVMODEW * lpInitData ); static HANDLE WINAPI CreateFile( LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ); static HFONT WINAPI CreateFontIndirect(CONST LOGFONTW * plfw); static int WINAPI CompareString ( LCID Locale, // locale identifier DWORD dwCmpFlags, // comparison-style options LPCWSTR lpString1, // pointer to first string int cch1, // size, in bytes or characters, of first string LPCWSTR lpString2, // pointer to second string int cch2 // size, in bytes or characters, of second string ); static LRESULT WINAPI DefWindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); static int WINAPI GetObject(HGDIOBJ hgdiObj, int cbBuffer, PVOID lpvObj); static DWORD APIENTRY GetProfileSection( LPCWSTR lpAppName, LPWSTR lpReturnedString, DWORD nSize ); static BOOL APIENTRY GetTextExtentPoint32( HDC hdc, LPCWSTR pwsz, int cb, LPSIZE pSize ); static int WINAPI GetTextFace( HDC hdc, int cch, LPWSTR lpFaceName ); static BOOL WINAPI GetTextMetrics(HDC hdc, LPTEXTMETRICW lptm); static BOOL WINAPI GetTextMetrics(HDC hdc, LOGFONTW &lf, TEXTMETRICW &tm); static LONG WINAPI GetWindowLong(HWND hWnd, int nIndex); static LONG_PTR WINAPI GetWindowLongPtr(HWND hWnd, int nIndex); static DWORD WINAPI GetClassLong(HWND hWnd, int nIndex); static HBITMAP WINAPI LoadBitmap(HINSTANCE hInstance, LPCWSTR lpBitmapName); static HCURSOR WINAPI LoadCursor(HINSTANCE hInstance, LPCWSTR lpCursorName); static HINSTANCE WINAPI LoadLibrary(LPCWSTR lpLibFileName); static LRESULT WINAPI SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); static LONG WINAPI SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong); static LONG WINAPI SetWindowLongPtr(HWND hWnd, int nIndex, LONG_PTR dwNew); static BOOL WINAPI PostMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); static BOOL WINAPI UnregisterClass(LPCWSTR lpClassName, HINSTANCE hInstance); static int WINAPI lstrcmp(LPCWSTR lpString1, LPCWSTR lpString2); static int WINAPI lstrcmpi(LPCWSTR lpString1, LPCWSTR lpString2); static BOOL WINAPI PeekMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg ); static DWORD WINAPI GetModuleFileName( HMODULE hModule, LPWSTR lpFilename, DWORD nSize ); static DWORD GetCurrentThreadId(void); private: // System Parameters static BOOL _fSysParamsOk; // System Parameters have been Initialized static INT _xWidthSys; // average char width of system font static INT _yHeightSys; // height of system font static INT _ySysFontLeading; // System font internal leading static BOOL _fUsePalette; static LONG _xPerInchScreenDC; // Pixels per inch used for conversions ... static LONG _yPerInchScreenDC; // ... and determining whether screen or ... static INT _cxBorder; // GetSystemMetricx(SM_CXBORDER)... static INT _cyBorder; // GetSystemMetricx(SM_CYBORDER)... static INT _cxVScroll; // Width/height of scrlbar arw bitmap static INT _cyHScroll; // Width of scrlbar arw bitmap static LONG _dxSelBar; static INT _sysiniflags; // Start using line services from the start static UINT _ACP; // Current Ansi code page identifier static HDC _hdcScreen; // Double click distances static INT _cxDoubleClk; static INT _cyDoubleClk; // Double Click Time in milliseconds static INT _DCT; //Width of hot zone (in pixels) for auto-scrolling static WORD _nScrollInset; //Delay (in ms) before scrolling static WORD _nScrollDelay; //Interval (in ms) at which we scroll static WORD _nScrollInterval; //Amount of horizontal scroll at each interval (pixels) static WORD _nScrollHAmount; //Amount of vertical scroll at each interval (pixels) static WORD _nScrollVAmount; //Amount of time to wait for determining start of drag operation static WORD _nDragDelay; //Minimun distance that must be traversed within drag delay time interval static WORD _nDragMinDist; //Keyboard deadkey static WORD _wDeadKey; //Keyboard shift/ctrl/alt/lock status static WORD _wKeyboardFlags; //North/South sizing cursor (double arrow) static HCURSOR _hcurSizeNS; //West/East sizing cursor (double arrow) static HCURSOR _hcurSizeWE; //Northwest/Southeast sizing cursor (double arrow) static HCURSOR _hcurSizeNWSE; //Northeast/Southwest sizing cursor (double arrow) static HCURSOR _hcurSizeNESW; //Number of Lines to scroll with a mouse roller wheel, -1 for pages static LONG _cLineScroll; //System Font Handle. This one need only be done once. static HFONT _hSystemFont; //System Keyboard Layout static HKL _hklCurrent; static HKL _hkl[NCHARSETS]; // Ref Count static DWORD _cRefs; //AltNumericKeyboard number static WORD _wNumKeyPad; //Digit substitution mode (context, none, national) static BYTE _bDigitSubstMode; //SYSTEM_FONT charset static BYTE _bSysCharSet; public: static INT GetXWidthSys() {return _xWidthSys; } static INT GetYHeightSys() {return _yHeightSys; } static INT GetSysFontLeading() {return _ySysFontLeading; } static LONG GetXPerInchScreenDC(){return _xPerInchScreenDC; } static LONG GetYPerInchScreenDC(){return _yPerInchScreenDC; } static INT GetCxBorder() {return _cxBorder; } static INT GetCyBorder() {return _cyBorder; } static INT GetCyHScroll() {return _cyHScroll; } static INT GetCxVScroll() {return _cxVScroll; } static LONG GetDxSelBar() {return _dxSelBar; } static WORD GetScrollInset() {return _nScrollInset; } static WORD GetScrollDelay() {return _nScrollDelay; } static WORD GetScrollInterval() {return _nScrollInterval; } static WORD GetScrollHAmount() {return _nScrollHAmount; } static WORD GetScrollVAmount() {return _nScrollVAmount; } static INT GetCxDoubleClk() {return _cxDoubleClk; } static INT GetCyDoubleClk() {return _cyDoubleClk; } static INT GetDCT() {return _DCT; } static WORD GetDragDelay() {return _nDragDelay; } static WORD GetDragMinDist() {return _nDragMinDist; } static LONG GetRollerLineScrollCount(); static HCURSOR GetSizeCursor(LPTSTR idcur); static HFONT GetSystemFont() {return _hSystemFont; } static BYTE ReadRegDigitSubstitutionMode(); static BYTE GetDigitSubstitutionMode() {return _bDigitSubstMode;} static bool fUseAimm() {return (_sysiniflags & SYSINI_USEAIMM) != 0;} static bool fUseBiDi() {return (_sysiniflags & SYSINI_BIDI) != 0;} static bool fUseLs() {return (_sysiniflags & SYSINI_USELS) != 0;} static bool fDebugFont() {return (_sysiniflags & SYSINI_DEBUGFONT) != 0;} static int DebugDefaultCpg() {return HIWORD(_sysiniflags);} static BOOL FUsePalette() {return _fUsePalette; } static void InitSysParams(BOOL fUpdate = FALSE); static DWORD GetRefs() {return _cRefs;} static BYTE GetSysCharSet() {return _bSysCharSet;} // Should also be wrapped but aren't. Used for debugging. // MessageBox // OutputDebugString // lstrcmpiA should also be wrapped for Win CE's sake but the code // that uses it is ifdeffed out for WINCE. // Mirroring API entry points static PFN_GETLAYOUT _pfnGetLayout; static PFN_SETLAYOUT _pfnSetLayout; }; extern CW32System *W32; HKL g_hkl[]; #if !defined(W32SYS_CPP) #define OnWinNTFE W32->OnWinNTFE #define OnWin95FE W32->OnWin95FE #ifdef DEBUG #define PvAlloc(cbBuf, uiMemFlags) W32->PvAllocDebug(cbBuf, uiMemFlags, __FILE__, __LINE__) #define PvReAlloc(pv, cbBuf) W32->PvReAllocDebug(pv, cbBuf, __FILE__, __LINE__) #define PvSet(pv) W32->PvSet(pv, __FILE__, __LINE__) #define FreePv W32->FreePvDebug #else #define PvAlloc W32->PvAlloc #define PvReAlloc W32->PvReAlloc #define FreePv W32->FreePv #endif #define CopyMemory W32->CopyMemory #define MoveMemory W32->MoveMemory #define FillMemory W32->FillMemory #define ZeroMemory W32->ZeroMemory #define CompareMemory W32->CompareMemory #define GlobalAlloc W32->GlobalAlloc #define GlobalFree W32->GlobalFree #define GlobalFlags W32->GlobalFlags #define GlobalReAlloc W32->GlobalReAlloc #define GlobalSize W32->GlobalSize #define GlobalLock W32->GlobalLock #define GlobalHandle W32->GlobalHandle #define GlobalUnlock W32->GlobalUnlock #define ImmInitialize W32->ImmInitialize #define ImmTerminate W32->ImmTerminate #define ImmGetCompositionStringA W32->ImmGetCompositionStringA #define ImmGetCompositionStringW W32->ImmGetCompositionStringW #define ImmGetContext W32->ImmGetContext #define ImmSetCompositionFontA W32->ImmSetCompositionFontA #define ImmSetCompositionWindow W32->ImmSetCompositionWindow #define ImmReleaseContext W32->ImmReleaseContext #define ImmGetProperty W32->ImmGetProperty #define ImmGetCandidateWindow W32->ImmGetCandidateWindow #define ImmSetCandidateWindow W32->ImmSetCandidateWindow #define ImmNotifyIME W32->ImmNotifyIME #define ImmAssociateContext W32->ImmAssociateContext #define ImmGetVirtualKey W32->ImmGetVirtualKey #define ImmEscape W32->ImmEscape #define ImmGetOpenStatus W32->ImmGetOpenStatus #define ImmSetOpenStatus W32->ImmSetOpenStatus #define ImmGetConversionStatus W32->ImmGetConversionStatus #define ImmSetConversionStatus W32->ImmSetConversionStatus #define ImmGetDefaultIMEWnd W32->ImmGetDefaultIMEWnd #define ImmSetCompositionStringW W32->ImmSetCompositionStringW #define LoadRegTypeLib W32->LoadRegTypeLib #define LoadTypeLib W32->LoadTypeLib #define SysAllocString W32->SysAllocString #define SysAllocStringLen W32->SysAllocStringLen #define SysFreeString W32->SysFreeString #define SysStringLen W32->SysStringLen #define VariantInit W32->VariantInit #define OleCreateFromData W32->OleCreateFromData #define CoTaskMemFree W32->CoTaskMemFree #define CreateBindCtx W32->CreateBindCtx #define OleDuplicateData W32->OleDuplicateData #define CoTreatAsClass W32->CoTreatAsClass #define ProgIDFromCLSID W32->ProgIDFromCLSID #define OleConvertIStorageToOLESTREAM W32->OleConvertIStorageToOLESTREAM #define OleConvertIStorageToOLESTREAMEx W32->OleConvertIStorageToOLESTREAMEx #define OleSave W32->OleSave #define StgCreateDocfileOnILockBytes W32->StgCreateDocfileOnILockBytes #define CreateILockBytesOnHGlobal W32->CreateILockBytesOnHGlobal #define OleCreateLinkToFile W32->OleCreateLinkToFile #define CoTaskMemAlloc W32->CoTaskMemAlloc #define CoTaskMemRealloc W32->CoTaskMemRealloc #define OleInitialize W32->OleInitialize #define OleUninitialize W32->OleUninitialize #define OleSetClipboard W32->OleSetClipboard #define OleFlushClipboard W32->OleFlushClipboard #define OleIsCurrentClipboard W32->OleIsCurrentClipboard #define DoDragDrop W32->DoDragDrop #define OleGetClipboard W32->OleGetClipboard #define RegisterDragDrop W32->RegisterDragDrop #define OleCreateLinkFromData W32->OleCreateLinkFromData #define OleCreateStaticFromData W32->OleCreateStaticFromData #define OleDraw W32->OleDraw #define OleSetContainedObject W32->OleSetContainedObject #define CoDisconnectObject W32->CoDisconnectObject #define WriteFmtUserTypeStg W32->WriteFmtUserTypeStg #define WriteClassStg W32->WriteClassStg #define SetConvertStg W32->SetConvertStg #define ReadFmtUserTypeStg W32->ReadFmtUserTypeStg #define ReadClassStg W32->ReadClassStg #define OleRun W32->OleRun #define RevokeDragDrop W32->RevokeDragDrop #define CreateStreamOnHGlobal W32->CreateStreamOnHGlobal #define GetHGlobalFromStream W32->GetHGlobalFromStream #define OleCreateDefaultHandler W32->OleCreateDefaultHandler #define CLSIDFromProgID W32->CLSIDFromProgID #define OleConvertOLESTREAMToIStorage W32->OleConvertOLESTREAMToIStorage #define OleLoad W32->OleLoad #define ReleaseStgMedium W32->ReleaseStgMedium #define CoCreateInstance W32->CoCreateInstance #define FSupportSty W32->FSupportSty #define PIMEStyleFromAttr W32->PIMEStyleFromAttr #define PColorStyleTextFromIMEStyle W32->PColorStyleTextFromIMEStyle #define PColorStyleBackFromIMEStyle W32->PColorStyleBackFromIMEStyle #define FBoldIMEStyle W32->FBoldIMEStyle #define FItalicIMEStyle W32->FItalicIMEStyle #define FUlIMEStyle W32->FUlIMEStyle #define IdUlIMEStyle W32->IdUlIMEStyle #define RGBFromIMEColorStyle W32->RGBFromIMEColorStyle #define fHaveIMMProcs W32->_fHaveIMMProcs #define fHaveAIMM W32->_fHaveAIMM #define dwPlatformId W32->_dwPlatformId #define dwMajorVersion W32->_dwMajorVersion #define icr3DDarkShadow W32->_icr3DDarkShadow #define MSIMEMouseMsg W32->_MSIMEMouseMsg #define MSIMEReconvertMsg W32->_MSIMEReconvertMsg #define MSIMEReconvertRequestMsg W32->_MSIMEReconvertRequestMsg #define MSIMEDocFeedMsg W32->_MSIMEDocFeedMsg #define MSIMEQueryPositionMsg W32->_MSIMEQueryPositionMsg #define MSIMEServiceMsg W32->_MSIMEServiceMsg #define ScriptIndexFromChar W32->ScriptIndexFromChar #define ScriptIndexFromCharSet W32->ScriptIndexFromCharSet #define MECharClass W32->MECharClass #define MbcsFromUnicode W32->MbcsFromUnicode #define UnicodeFromMbcs W32->UnicodeFromMbcs #define TextHGlobalAtoW W32->TextHGlobalAtoW #define TextHGlobalWtoA W32->TextHGlobalWtoA #define ConvertLanguageIDtoCodePage W32->ConvertLanguageIDtoCodePage #define In125x W32->In125x #define Is8BitCodePage W32->Is8BitCodePage #define IsAlef W32->IsAlef #define IsAmbiguous W32->IsAmbiguous #define IsBiDiCharSet W32->IsBiDiCharSet #define IsBiDiDiacritic W32->IsBiDiDiacritic #define IsBiDiKashida W32->IsBiDiKashida #define IsBiDiKbdInstalled W32->IsBiDiKbdInstalled #define IsDiacritic W32->IsDiacritic #define IsCharSetValid W32->IsCharSetValid #define IsDiacriticOrKashida W32->IsDiacriticOrKashida #define IsFECharSet W32->IsFECharSet #define IsFELCID W32->IsFELCID #define IsPrivateCharSet W32->IsPrivateCharSet #define IsRTLCharSet W32->IsRTLCharSet #define IsStrongDirectional W32->IsStrongDirectional #define IsThaiKbdInstalled W32->IsThaiKbdInstalled #define IsIndicKbdInstalled W32->IsIndicKbdInstalled #define IsComplexKbdInstalled W32->IsComplexKbdInstalled #define IsTrailByte W32->IsTrailByte #define IsVietCdmSequenceValid W32->IsVietCdmSequenceValid #define GetCharSet W32->GetCharSet #define GetGdiCharSet W32->GetGdiCharSet #define GetCodePage W32->GetCodePage #define GetFontSig W32->GetFontSig #define GetFirstAvailCharSet W32->GetFirstAvailCharSet #define MatchFECharSet W32->MatchFECharSet #define GetKeyboardCodePage W32->GetKeyboardCodePage #define GetKeyboardLCID W32->GetKeyboardLCID #define GetLocaleCodePage W32->GetLocaleCodePage #define GetLocaleLCID W32->GetLocaleLCID #define GetSystemDefaultCodePage W32->GetSystemDefaultCodePage #define GetTrailBytesCount W32->GetTrailBytesCount #define MBTWC W32->MBTWC #define WCTMB W32->WCTMB #define VerifyFEString W32->VerifyFEString #define CharLower W32->CharLower #define CharLowerBuff W32->CharLowerBuff #define CharUpperBuff W32->CharUpperBuff #define CreateIC W32->CreateIC #define CreateFile W32->CreateFile #define CreateFontIndirect W32->CreateFontIndirect #define CompareString W32->CompareString #define DefWindowProc W32->DefWindowProc #define GetDeadKey W32->GetDeadKey #define GetKeyboardFlag W32->GetKeyboardFlag #define GetKeyboardFlags W32->GetKeyboardFlags #define GetKeyboardLayout W32->GetKeyboardLayout #define GetKeyPadNumber W32->GetKeyPadNumber #define GetProfileSection W32->GetProfileSection #define GetTextExtentPoint32 W32->GetTextExtentPoint32 #define GetTextMetrics W32->GetTextMetrics #define GetTextFace W32->GetTextFace #define GetWindowLong W32->GetWindowLong #define GetWindowLongPtr W32->GetWindowLongPtr #define GetClassLong W32->GetClassLong #define InitKeyboardFlags W32->InitKeyboardFlags #define IsEnhancedMetafileDC W32->IsEnhancedMetafileDC #define LoadBitmap W32->LoadBitmap #define LoadCursor W32->LoadCursor #define LoadLibrary W32->LoadLibrary #define ResetKeyboardFlag W32->ResetKeyboardFlag #define SendMessage W32->SendMessage #define SetDeadKey W32->SetDeadKey #define SetKeyboardFlag W32->SetKeyboardFlag #define SetKeyPadNumber W32->SetKeyPadNumber #define SetWindowLong W32->SetWindowLong #define SetWindowLongPtr W32->SetWindowLongPtr #define PostMessage W32->PostMessage #define lstrcmp W32->lstrcmp #define lstrcmpi W32->lstrcmpi #define PeekMessage W32->PeekMessage #define GetMapMode W32->GetMapMode #define WinLPtoDP W32->WinLPtoDP #define MulDiv W32->MulDiv // AIMM wrapper #define IsAIMMLoaded W32->IsAIMMLoaded #define LoadAIMM W32->LoadAIMM #define CallAIMMDefaultWndProc W32->AIMMDefWndProc #define GetAIMMKeyboardCP W32->AIMMGetCodePage #define ActivateAIMM W32->AIMMActivate #define DeactivateAIMM W32->AIMMDeactivate #define FilterClientWindowsAIMM W32->AIMMFilterClientWindows #define sprintf W32->sprintf #define wcslen W32->wcslen #define wcscpy W32->wcscpy #define wcscmp W32->wcscmp #define wcsicmp W32->wcsicmp #define wcsncpy W32->wcsncpy #define GetLayout (*W32->_pfnGetLayout) #define SetLayout (*W32->_pfnSetLayout) #define GetACP W32->GetACP #endif // !defined(W32SYS_CPP) #define VER_PLATFORM_WIN32_MACINTOSH 0x8001 #if defined PEGASUS && !defined(WINNT) // The follwing definitions do not exist in the Windows CE environment but we emulate them. // The values have been copied from the appropriate win32 header files. #pragma message(REVIEW "Using NT definitions not in Windows CE") // Memory allocation flag. Win CE uses Local mem instead of Global mem #define GMEM_ZEROINIT LMEM_ZEROINIT #define GMEM_MOVEABLE LMEM_MOVEABLE #define GMEM_FIXED LMEM_FIXED // Scroll Bars #define ESB_ENABLE_BOTH 0x0000 #define ESB_DISABLE_BOTH 0x0003 // Text alignment values #define TA_TOP 0 #define TA_BOTTOM 8 #define TA_BASELINE 24 #define TA_CENTER 6 #define TA_LEFT 0 // Device Technology. This one is mostly used for exclusion #define DT_METAFILE 5 // Metafile, VDM // Resources for LoadCursor. #define IDC_ARROW MAKEINTRESOURCE(32512) #define IDC_IBEAM MAKEINTRESOURCE(32513) // FInd/Replace options #define FR_DOWN 0x00000001 #define FR_WHOLEWORD 0x00000002 #define FR_MATCHCASE 0x00000004 // Window messages #define WM_NCMOUSEMOVE 0x00A0 #define WM_NCMBUTTONDBLCLK 0x00A9 #define WM_DROPFILES 0x0233 // Code Pages #define CP_UTF8 65001 /* UTF-8 translation */ // Clipboard formats #define CF_METAFILEPICT 3 // Special cursor shapes #define IDC_SIZENWSE MAKEINTRESOURCE(32642) #define IDC_SIZENESW MAKEINTRESOURCE(32643) #define IDC_SIZENS MAKEINTRESOURCE(32645) #define IDC_SIZEWE MAKEINTRESOURCE(32644) /* Mapping Modes */ #define MM_TEXT 1 #define SetMapMode(hdc, mapmode) #define SetWindowOrgEx(hdc, xOrg, yOrg, pt) #define SetViewportExtEx(hdc, nX, nY, lpSize) #define SetWindowExtEx(hdc, x, y, lpSize) /* Pen Styles : Windows CE only supports PS_DASH */ #define PS_DOT PS_DASH #define PS_DASHDOT PS_DASH #define PS_DASHDOTDOT PS_DASH /* Missing APIs */ #define GetMessageTime() 0 #define IsIconic(hwnd) 0 #pragma message (REVIEW "JMO. This is temporary to try to get the Pegasus Build untracked" ) #ifdef DEBUG #define MoveToEx(a, b, c, d) 0 #else #define MoveToEx(a, b, c, d) #endif #ifdef DEBUG #define LineTo(a, b, c) 0 #else #define LineTo(a, b, c) #endif #define GetProfileIntA(a, b, c) 0 class METARECORD { }; #define GetDesktopWindow() NULL #define WS_EX_TRANSPARENT 0x00000020L #define WM_MOUSEACTIVATE 0x0021 #define IsDBCSLeadByte(x) 0 #define WM_SYSCOLORCHANGE 0x0015 #define WM_STYLECHANGING 0x007C #define WM_WINDOWPOSCHANGING 0x0046 #define WM_SETCURSOR 0x0020 #define WM_NCPAINT 0x0085 #define OEM_CHARSET 255 #define SHIFTJIS_CHARSET 128 #define THAI_CHARSET 222 #define WM_IME_CHAR 0x0286 #define IME_CMODE_NATIVE 0x0001 #define IME_CMODE_HANGEUL IME_CMODE_NATIVE #define IME_ESC_HANJA_MODE 0x1008 #define SM_SWAPBUTTON 23 class CHARSETINFO { }; class HDROP { }; #define TCI_SRCCODEPAGE 2 #define TPM_RIGHTBUTTON 0x0002L #define RegisterClipboardFormatA(s) RegisterClipboardFormatW(TEXT(s)) #define GetThreadLocale() 0 #define EASTEUROPE_CHARSET 238 #define HEBREW_CHARSET 177 #define RUSSIAN_CHARSET 204 #define GB2312_CHARSET 134 #define HANGEUL_CHARSET 129 #define JOHAB_CHARSET 130 #define CHINESEBIG5_CHARSET 136 #define GREEK_CHARSET 161 #define TURKISH_CHARSET 162 #define BALTIC_CHARSET 186 #define ARABIC_CHARSET 178 #define MAC_CHARSET 77 #define ENUMLOGFONTA ENUMLOGFONT #define ENUMLOGFONTW ENUMLOGFONT #define FONTENUMPROCA FONTENUMPROC typedef int *LPOPENFILENAMEA; typedef int *LPOPENFILENAMEW; #endif #ifndef WS_EX_LAYOUTRTL #define WS_EX_LAYOUTRTL 0x00400000L // Right to left mirroring #endif #ifndef LAYOUT_RTL #define LAYOUT_RTL 0x00000001 #endif #endif