|
|
//
// globals.cpp
//
// Global variables.
//
#include "globals.h"
HINSTANCE g_hInst;
LONG g_cRefDll = -1; // -1 /w no refs, for win95 InterlockedIncrement/Decrement compat
CRITICAL_SECTION g_cs;
/* 23e97bc9-f2d3-4b25-8ef3-d78391bf2150 */ const CLSID c_clsidMarkTextService = { 0x23e97bc9, 0xf2d3, 0x4b25, {0x8e, 0xf3, 0xd7, 0x83, 0x91, 0xbf, 0x21, 0x50} };
/* a2767f97-e735-461a-84ba-7a7ecad24827 */ const GUID c_guidMarkProfile = { 0xa2767f97, 0xe735, 0x461a, {0x84, 0xba, 0x7a, 0x7e, 0xca, 0xd2, 0x48, 0x27} };
/* c74a88d5-6614-439b-8880-2dd8e6cd91a7 */ const GUID c_guidLangBarItemButton = { 0xc74a88d5, 0x6614, 0x439b, {0x88, 0x80, 0x2d, 0xd8, 0xe6, 0xcd, 0x91, 0xa7} };
/* d81face6-845c-45e7-a2af-1c5fc7adf667 */ const GUID c_guidMarkDisplayAttribute = { 0xd81face6, 0x845c, 0x45e7, {0xa2, 0xaf, 0x1c, 0x5f, 0xc7, 0xad, 0xf6, 0x67} };
/* eadc084c-6130-4222-82e5-c528c1f4abbb */ const GUID c_guidMarkContextCompartment = { 0xeadc084c, 0x6130, 0x4222, {0x82, 0xe5, 0xc5, 0x28, 0xc1, 0xf4, 0xab, 0xbb} };
/* 947d9d1c-7a4c-4392-b37c-34017c6c7fe1 */ const GUID c_guidMarkGlobalCompartment = { 0x947d9d1c, 0x7a4c, 0x4392, {0xb3, 0x7c, 0x34, 0x01, 0x7c, 0x6c, 0x7f, 0xe1} };
/* 3042ae6a-4697-4f7d-acdf-20a972fee027 */ const GUID c_guidCaseProperty = { 0x3042ae6a, 0x4697, 0x4f7d, {0xac, 0xdf, 0x20, 0xa9, 0x72, 0xfe, 0xe0, 0x27} };
/* d05a182a-7782-4e61-a2ea-6a4794ab7aaa */ const GUID c_guidCustomProperty = { 0xd05a182a, 0x7782, 0x4e61, {0xa2, 0xea, 0x6a, 0x47, 0x94, 0xab, 0x7a, 0xaa} };
//+---------------------------------------------------------------------------
//
// AdviseSink
//
//----------------------------------------------------------------------------
BOOL AdviseSink(IUnknown *pSourceIn, IUnknown *pSink, REFIID riid, DWORD *pdwCookie) { ITfSource *pSource; HRESULT hr;
if (pSourceIn->QueryInterface(IID_ITfSource, (void **)&pSource) != S_OK) return FALSE;
hr = pSource->AdviseSink(riid, pSink, pdwCookie);
pSource->Release();
if (hr != S_OK) { // make sure we don't try to Unadvise pdwCookie later
*pdwCookie = TF_INVALID_COOKIE; return FALSE; }
return TRUE; }
//+---------------------------------------------------------------------------
//
// UnadviseSink
//
//----------------------------------------------------------------------------
void UnadviseSink(IUnknown *pSourceIn, DWORD *pdwCookie) { ITfSource *pSource;
if (*pdwCookie == TF_INVALID_COOKIE) return; // never Advised
if (pSourceIn->QueryInterface(IID_ITfSource, (void **)&pSource) == S_OK) { pSource->UnadviseSink(*pdwCookie); pSource->Release(); }
*pdwCookie = TF_INVALID_COOKIE; }
//+---------------------------------------------------------------------------
//
// AdviseSingleSink
//
//----------------------------------------------------------------------------
BOOL AdviseSingleSink(TfClientId tfClientId, IUnknown *pSourceIn, IUnknown *pSink, REFIID riid) { ITfSourceSingle *pSource; HRESULT hr;
if (pSourceIn->QueryInterface(IID_ITfSourceSingle, (void **)&pSource) != S_OK) return FALSE;
hr = pSource->AdviseSingleSink(tfClientId, riid, pSink);
pSource->Release();
return (hr == S_OK); }
//+---------------------------------------------------------------------------
//
// UnadviseSingleSink
//
//----------------------------------------------------------------------------
void UnadviseSingleSink(TfClientId tfClientId, IUnknown *pSourceIn, REFIID riid) { ITfSourceSingle *pSource;
if (pSourceIn->QueryInterface(IID_ITfSourceSingle, (void **)&pSource) == S_OK) { pSource->UnadviseSingleSink(tfClientId, riid); pSource->Release(); } }
//+---------------------------------------------------------------------------
//
// IsRangeCovered
//
// Returns TRUE if pRangeTest is entirely contained within pRangeCover.
//----------------------------------------------------------------------------
BOOL IsRangeCovered(TfEditCookie ec, ITfRange *pRangeTest, ITfRange *pRangeCover) { LONG lResult;
if (pRangeCover->CompareStart(ec, pRangeTest, TF_ANCHOR_START, &lResult) != S_OK || lResult > 0) { return FALSE; }
if (pRangeCover->CompareEnd(ec, pRangeTest, TF_ANCHOR_END, &lResult) != S_OK || lResult < 0) { return FALSE; }
return TRUE; }
//+---------------------------------------------------------------------------
//
// IsEqualUnknown
//
// Returns TRUE if punk1 and punk2 refer to the same object. We must QI for
// IUnknown to be guarenteed a reliable test, per the COM rules.
//----------------------------------------------------------------------------
BOOL IsEqualUnknown(IUnknown *interface1, IUnknown *interface2) { IUnknown *punk1; IUnknown *punk2;
if (interface1->QueryInterface(IID_IUnknown, (void **)&punk1) != S_OK) return FALSE;
punk1->Release(); // we don't actually need to dereference these guys, just want to compare them
if (interface2->QueryInterface(IID_IUnknown, (void **)&punk2) != S_OK) return FALSE;
punk2->Release();
return (punk1 == punk2); }
|