' ****************************************************************************************
function ddSpecialPrototype(DDPROTO as any ptr ptr) as hresult
  #ifdef DebugFatal
  messagebox(null,"Iunknown::Special Function not implemented: " & DDSPECIALPROTOID, _
  "DirectX",MB_SYSTEMMODAL or MB_ICONERROR)
  #endif    
  ExitProcess(1)  
  return DDERR_INVALIDOBJECT 'DD_OK
  
  asm
    .balign 32
    _ddSpecialProtoTable_:  
    #macro ProtoNum(X)
    mov dword ptr [DDSPECIALPROTOID],X
    jmp ddSpecialPrototype
    .balign 32
    #endmacro
    ProtoNum(0)
    ProtoNum(1)
    ProtoNum(2)
    ProtoNum(3)
    ProtoNum(4)
    ProtoNum(5)
    ProtoNum(6)
    ProtoNum(7)
    ProtoNum(8)
    ProtoNum(9)
    ProtoNum(10)
    ProtoNum(11)
    ProtoNum(12)
    ProtoNum(13)
    ProtoNum(14)
    ProtoNum(15)
    ProtoNum(16)
    ProtoNum(17)
    ProtoNum(18)
    ProtoNum(19)
    ProtoNum(20)
    ProtoNum(21)
    ProtoNum(22)
    ProtoNum(23)
    ProtoNum(24)
    ProtoNum(25)
    ProtoNum(26)
    ProtoNum(27)
    ProtoNum(28)
    ProtoNum(29)
    ProtoNum(30)
    ProtoNum(31)
    ProtoNum(32)
    ProtoNum(33)
    ProtoNum(34)
    ProtoNum(35)
  end asm  
  
end function

sub SpecialFuncs(VTABLE() as any ptr)
  dim as any ptr PROTOTABLE
  asm mov dword ptr [PROTOTABLE], offset _ddSpecialProtoTable_
  for CNT as integer = 0 to 35
    VTABLE(CNT) = PROTOTABLE+CNT*32
  next CNT 
end sub
