' ****************************************************************************************
function ddPalettePrototype() as hresult
  #ifdef DebugFatal
    messagebox(null,"iDirectDraw.Palette::#" & DDPALETTEPROTOID & " Function not implemented", _
    "DirectX",MB_SYSTEMMODAL or MB_ICONERROR)
  #endif      
  return DDERR_UNSUPPORTED
  
  asm
    .balign 32
    _ddPaletteProtoTable_:  
    #macro ProtoNum(X)
    mov dword ptr [DDPALETTEPROTOID],X
    jmp ddPalettePrototype
    .balign 32
    #endmacro
    ProtoNum(0)
    ProtoNum(1)
    ProtoNum(2)
    ProtoNum(3)
    ProtoNum(4)
    ProtoNum(5)
    ProtoNum(6)    
  end asm  
  
end function
' ****************************************************************************************
UndefAll()
#define P1 DDPALETTE as ddPaletteObject ptr
function ddPalette_2_Release(P1) as hresult
  #ifdef MyDebugX
  Cout("IDirectDraw::Palette.Release (2)" + chr$(13,10) + _
  " >> DDPALETTE: "+hex$(cast(uinteger,DDPALETTE),8))
  #endif
  Delete DDPALETTE  
  return DD_OK
end function
' ****************************************************************************************
UndefAll()
#define P1 DDPALETTE as ddPaletteObject ptr
#define P2 dwFlags as dword
#define P3 dwStartingEntry as dword
#define P4 dwCount as dword
#define P5 lpEntries as PaletteEntry ptr
function ddPalette_6_SetEntries(P1,P2,P3,P4,P5) as hresult
  MutexLock(DDMUTEX)
  #ifdef MyDebugX
  Cout("IDirectDraw::Palette.SetEntries (6)" + chr$(13,10) + _
  " > Palette:"+hex$(cast(uinteger,DDPALETTE))+ _
  " Start:" & dwStartingEntry & " Count:" & dwCount & _
  " Ptr:"+hex$(cast(uinteger,lpEntries)) )
  #endif
    
  for CNT as integer = 0 to dwCount-1
    with DDPALETTE->Pal(dwStartingEntry+CNT).c        
      .r = lpEntries[CNT].peRed
      .g = lpEntries[CNT].peGreen
      .b = lpEntries[CNT].peBlue        
    end with
  next CNT

  MutexUnlock(DDMUTEX)
  return DD_OK
end function
' ****************************************************************************************
sub PaletteFuncs(VTABLE() as any ptr)
  dim as any ptr PROTOTABLE
  asm mov dword ptr [PROTOTABLE], offset _ddPaletteProtoTable_
  for CNT as integer = 0 to 6
    VTABLE(CNT) = PROTOTABLE+CNT*32
  next CNT  
  VTABLE(2) = @ddPalette_2_Release
  VTABLE(6) = @ddPalette_6_SetEntries
end sub
