/*** *misc.cpp * * Copyright (C) 1992-1994, Microsoft Corporation. All Rights Reserved. * *Purpose: * *Implementation Notes: * *****************************************************************************/ #include "spoly.h" #include "cpoint.h" #include "cpoly.h" #include #ifdef _MAC # include # include #endif unsigned long g_dwPolyCF = 0; unsigned long g_dwPointCF = 0; IClassFactory FAR* g_ppolyCF = NULL; IClassFactory FAR* g_ppointCF = NULL; #ifdef _MAC struct regentry{ char *szKey; char *szValue; } g_rgregentry[] = { { "CLSID\\{00020464-0000-0000-C000-000000000046}", "OLE Automation SPoly2 1.0 Application" } , { "CLSID\\{00020464-0000-0000-C000-000000000046}\\LocalServer", "SPL2" } , { "CLSID\\{00020464-0000-0000-C000-000000000046}\\ProgID", "SPoly2.Application" } , { "CLSID\\{00020464-0000-0000-C000-000000000046}\\InprocHandler", "OLE2:Def$DefFSet" } , { "SPL2", "{00020464-0000-0000-C000-000000000046}" } , { "SPoly2.Application\\CLSID", "{00020464-0000-0000-C000-000000000046}" } }; HRESULT EnsureRegistration() { HKEY hkey; if(RegOpenKey(HKEY_CLASSES_ROOT, "SPL2", &hkey) == NOERROR){ RegCloseKey(hkey); return NOERROR; } for(int i = 0; i < DIM(g_rgregentry); ++i){ if(RegSetValue(HKEY_CLASSES_ROOT, g_rgregentry[i].szKey, REG_SZ, g_rgregentry[i].szValue, 0) != ERROR_SUCCESS) return ResultFromScode(E_FAIL); } return NOERROR; } #endif /*** *HRESULT InitOle(void) *Purpose: * Initialize Ole, and register our class factories. * *Entry: * None * *Exit: * None * ***********************************************************************/ STDAPI InitOle() { HRESULT hresult; if((hresult = OleInitialize(NULL)) != NOERROR) goto LError0; #ifdef _MAC if((hresult = EnsureRegistration()) != NOERROR) goto LError0; #endif // Register the CPoint Class Factory // if((g_ppointCF = CPointCF::Create()) == NULL){ hresult = ResultFromScode(E_OUTOFMEMORY); goto LError1; } hresult = CoRegisterClassObject( CLSID_CPoint2, g_ppointCF, CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &g_dwPointCF); if(hresult != NOERROR) goto LError1; // Register the CPoly Class Factory. // if((g_ppolyCF = CPolyCF::Create()) == NULL){ hresult = ResultFromScode(E_OUTOFMEMORY); goto LError1; } hresult = CoRegisterClassObject( CLSID_CPoly2, g_ppolyCF, CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &g_dwPolyCF); if(hresult != NOERROR) goto LError1; g_ppolyCF->Release(); g_ppointCF->Release(); return NOERROR; LError1:; if(g_ppolyCF != NULL) g_ppolyCF->Release(); if(g_ppointCF != NULL) g_ppointCF->Release(); UninitOle(); LError0:; return hresult; } STDAPI UninitOle() { // Tell Ole to release our class factories. // if(g_dwPointCF != 0L) CoRevokeClassObject(g_dwPointCF); if(g_dwPolyCF != 0L) CoRevokeClassObject(g_dwPolyCF); OleUninitialize(); return NOERROR; } // disable unicode expansion for assertions #undef UNICODE void Assert(int fCond, char FAR* file, int line, char FAR* message) { char * fmt; char buf[128]; if(fCond) return; fmt = (message == NULL) ? "Assertion failed: %s(%d)" : "Assertion failed: %s(%d) '%s'"; sprintf(buf, fmt, file, line, message); #ifdef _MAC DebugStr(c2pstr(buf)); #else #ifdef WIN32 OutputDebugStringA(buf); #else //WIN32 OutputDebugString(buf); #endif //WIN32 DebugBreak(); #endif } #ifdef _MAC #if defined(_MSC_VER) int pascal #else pascal int #endif stricmp(char *first, char *last) { unsigned short f, l; do{ f = tolower(*first++); l = tolower(*last++); }while(f && f == l); return f - l; } #endif