;*** other interfaces:
;*** IProvideClassInfo
;*** optional: ISpecifyPropertyPages

	.386
	.model flat, stdcall
	option casemap:none ; case sensitive
	option proc:private

	.nolist
	.nocref
	include windows.inc
	include unknwn.inc
	include objidl.inc
	include oleidl.inc
	include olectl.inc
	include oaidl.inc
	include ocidl.inc
	include CatProp.inc

	include macros.inc
	include debugout.inc
	.list
	.cref

	include control.inc

	.const

CProvideClassInfoVtbl IProvideClassInfoVtbl {\
	QueryInterface_1, AddRef_1, Release_1, GetClassInfo_}

	.code

;--------------------------------------------------------------------------
; IProvideClassInfo
;--------------------------------------------------------------------------

CastOffset textequ <offset CAsmCtrl.m_IProvideClassInfo>

	@MakeIUnknownStubs CastOffset, 1

GetClassInfo_ proc uses ebx this_:ptr CAsmCtrl, ppTI:ptr ptr ITypeInfo

local	pITL:ptr ITypeLib

	@AdjustThis

	mov ebx,this_
	assume ebx:ptr CAsmCtrl

	DebugOut "IProvideClassInfo::GetClassInfo"

	.if (!ppTI)
		mov eax, E_POINTER
	.else
		invoke LoadRegTypeLib,[ebx].m_IID_TypeLib, [ebx].m_MajorVer,
				[ebx].m_MinorVer, LANG_NEUTRAL, addr pITL
		.if (eax == S_OK)
			invoke vf(pITL, ITypeLib, GetTypeInfoOfGuid),addr CLSID_AsmCtrl,ppTI
			push eax
			invoke vf(pITL, ITypeLib, Release)
			pop eax
		.endif
	.endif
	DebugOut "exit IProvideClassInfo::GetClassInfo, hr=%X",eax
	ret
	assume ebx:nothing

GetClassInfo_ endp

if ?SPECPROP

;--------------------------------------------------------------------------
;ISpecifyPropertyPages
;--------------------------------------------------------------------------

	.const

CSpecifyPropertyPagesVtbl ISpecifyPropertyPagesVtbl {\
	QueryInterface_2, AddRef_2, Release_2, GetPages}

	.code

CastOffset textequ <offset CAsmCtrl.m_ISpecifyPropertyPages>

	@MakeIUnknownStubs CastOffset, 2


GetPages proc  uses ebx esi edi this_:ptr CAsmCtrl, pPages:ptr CAUUID

	@AdjustThis

	DebugOut "ISpecifyPropertyPages::GetPages"

	mov ebx, pPages
	assume ebx:ptr CAUUID

	.if (!ebx)
		return E_POINTER
	.endif
	mov [ebx].cElems, 2
	invoke CoTaskMemAlloc, (SIZEOF GUID) * 2
	mov [ebx].pElems, eax
	mov edi, eax

	mov esi, offset CLSID_StockFontPage
	mov ecx, SIZEOF GUID / 4
	rep movsd

	mov esi, offset CLSID_StockColorPage
	mov ecx, SIZEOF GUID / 4
	rep movsd

	return S_OK

GetPages endp

endif

	end