// Licensed under the Apache License, Version 2.0 // or the MIT license // , at your option. // All files in the project carrying such notice may not be copied, modified, or distributed // except according to those terms. use ctypes::{c_int, c_void}; use shared::basetsd::INT_PTR; use shared::minwindef::{BOOL, DWORD, LPARAM, UINT}; use um::winnt::{HANDLE, HRESULT, LPCWSTR, LPWSTR, PVOID, ULONGLONG}; pub const DA_LAST: c_int = 0x7FFFFFFF; pub const DA_ERR: c_int = -1; FN!{stdcall PFNDAENUMCALLBACK( p: *mut c_void, pData: *mut c_void, ) -> c_int} FN!{stdcall PFNDAENUMCALLBACKCONST( p: *const c_void, pData: *mut c_void, ) -> c_int} FN!{stdcall PFNDACOMPARE( p1: *mut c_void, p2: *mut c_void, lParam: LPARAM, ) -> c_int} FN!{stdcall PFNDACOMPARECONST( p1: *const c_void, p2: *const c_void, lParam: LPARAM, ) -> c_int} pub enum DSA {} pub type HDSA = *mut DSA; extern "system" { pub fn DSA_Create( cbItem: c_int, cItemGrow: c_int, ) -> HDSA; pub fn DSA_Destroy( hdsa: HDSA, ) -> BOOL; pub fn DSA_DestroyCallback( hdsa: HDSA, pfnCB: PFNDAENUMCALLBACK, pData: *mut c_void, ); pub fn DSA_DeleteItem( hdsa: HDSA, i: c_int, ) -> BOOL; pub fn DSA_DeleteAllItems( hdsa: HDSA, ) -> BOOL; pub fn DSA_EnumCallback( hdsa: HDSA, pfnCB: PFNDAENUMCALLBACK, pData: *mut c_void, ); pub fn DSA_InsertItem( hdsa: HDSA, i: c_int, pitem: *const c_void, ) -> c_int; pub fn DSA_GetItemPtr( hdsa: HDSA, i: c_int, ) -> PVOID; pub fn DSA_GetItem( hdsa: HDSA, i: c_int, pitem: *mut c_void, ) -> BOOL; pub fn DSA_SetItem( hdsa: HDSA, i: c_int, pitem: *const c_void, ) -> BOOL; } #[inline] pub unsafe fn DSA_GetItemCount(hdsa: HDSA) -> c_int { *(hdsa as *mut c_int) } #[inline] pub unsafe fn DSA_AppendItem(hdsa: HDSA, pitem: *const c_void) -> c_int { DSA_InsertItem(hdsa, DA_LAST, pitem) } extern "system" { pub fn DSA_Clone( hdsa: HDSA, ) -> HDSA; pub fn DSA_GetSize( hdsa: HDSA, ) -> ULONGLONG; pub fn DSA_Sort( pdsa: HDSA, pfnCompare: PFNDACOMPARE, lParam: LPARAM, ) -> BOOL; } pub const DSA_APPEND: c_int = DA_LAST; pub const DSA_ERR: c_int = DA_ERR; pub type PFNDSAENUMCALLBACK = PFNDAENUMCALLBACK; pub type PFNDSAENUMCALLBACKCONST = PFNDAENUMCALLBACKCONST; pub type PFNDSACOMPARE = PFNDACOMPARE; pub type PFNDSACOMPARECONST = PFNDACOMPARECONST; pub enum DPA {} pub type HDPA = *mut DPA; extern "system" { pub fn DPA_Create( cItemGrow: c_int, ) -> HDPA; pub fn DPA_CreateEx( cpGrow: c_int, hheap: HANDLE, ) -> HDPA; pub fn DPA_Clone( hdpa: HDPA, hdpaNew: HDPA, ) -> HDPA; pub fn DPA_Destroy( hdpa: HDPA, ) -> BOOL; pub fn DPA_DestroyCallback( hdpa: HDPA, pfnCB: PFNDAENUMCALLBACK, pData: *mut c_void, ); pub fn DPA_DeletePtr( hdpa: HDPA, i: c_int, ) -> PVOID; pub fn DPA_DeleteAllPtrs( hdpa: HDPA, ) -> BOOL; pub fn DPA_EnumCallback( hdpa: HDPA, pfnCB: PFNDAENUMCALLBACK, pData: *mut c_void, ); pub fn DPA_Grow( hdpa: HDPA, cp: c_int, ) -> BOOL; pub fn DPA_InsertPtr( hdpa: HDPA, i: c_int, p: *mut c_void, ) -> c_int; pub fn DPA_SetPtr( hdpa: HDPA, i: c_int, p: *mut c_void, ) -> BOOL; pub fn DPA_GetPtr( hdpa: HDPA, i: INT_PTR, ) -> PVOID; pub fn DPA_GetPtrIndex( hdpa: HDPA, p: *const c_void, ) -> c_int; } #[inline] pub unsafe fn DPA_GetPtrCount(hdpa: HDPA) -> c_int { *(hdpa as *mut c_int) } #[inline] pub unsafe fn DPA_SetPtrCount(hdpa: HDPA, cItems: c_int) { *(hdpa as *mut c_int) = cItems; } #[inline] pub unsafe fn DPA_FastDeleteLastPtr(hdpa: HDPA) -> c_int { *(hdpa as *mut c_int) -= 1; *(hdpa as *mut c_int) } #[inline] pub unsafe fn DPA_AppendPtr(hdpa: HDPA, pitem: *mut c_void) -> c_int { DPA_InsertPtr(hdpa, DA_LAST, pitem) } extern "system" { pub fn DPA_GetSize( hdpa: HDPA, ) -> ULONGLONG; pub fn DPA_Sort( hdpa: HDPA, pfnCompare: PFNDACOMPARE, lParam: LPARAM, ) -> BOOL; } STRUCT!{struct DPASTREAMINFO { iPos: c_int, pvItem: *mut c_void, }} pub enum IStream {} FN!{stdcall PFNDPASTREAM( pinfo: *mut DPASTREAMINFO, pstream: *mut IStream, pvInstData: *mut c_void, ) -> HRESULT} extern "system" { pub fn DPA_LoadStream( phdpa: *mut HDPA, pfn: PFNDPASTREAM, pstream: *mut IStream, pvInstData: *mut c_void, ) -> HRESULT; pub fn DPA_SaveStream( hdpa: HDPA, pfn: PFNDPASTREAM, pstream: *mut IStream, pvInstData: *mut c_void, ) -> HRESULT; } pub const DPAM_SORTED: DWORD = 0x00000001; pub const DPAM_NORMAL: DWORD = 0x00000002; pub const DPAM_UNION: DWORD = 0x00000004; pub const DPAM_INTERSECT: DWORD = 0x00000008; FN!{stdcall PFNDPAMERGE( uMsg: UINT, pvDest: *mut c_void, pvSrc: *mut c_void, lParam: LPARAM, ) -> *mut c_void} FN!{stdcall PFNDPAMERGECONST( uMsg: UINT, pvDest: *const c_void, pvSrc: *const c_void, lParam: LPARAM, ) -> *const c_void} pub const DPAMM_MERGE: UINT = 1; pub const DPAMM_DELETE: UINT = 2; pub const DPAMM_INSERT: UINT = 3; extern "system" { pub fn DPA_Merge( hdpaDest: HDPA, hdpaSrc: HDPA, dwFlags: DWORD, pfnCompare: PFNDACOMPARE, pfnMerge: PFNDPAMERGE, lParam: LPARAM, ) -> BOOL; } pub const DPAS_SORTED: UINT = 0x0001; pub const DPAS_INSERTBEFORE: UINT = 0x0002; pub const DPAS_INSERTAFTER: UINT = 0x0004; extern "system" { pub fn DPA_Search( hdpa: HDPA, pFind: *mut c_void, iStart: c_int, pfnCompare: PFNDACOMPARE, lParam: LPARAM, options: UINT, ) -> c_int; } #[inline] pub unsafe fn DPA_SortedInsertPtr( hdpa: HDPA, pFind: *mut c_void, iStart: c_int, pfnCompare: PFNDACOMPARE, lParam: LPARAM, options: UINT, pitem: *mut c_void, ) -> c_int { DPA_InsertPtr( hdpa, DPA_Search( hdpa, pFind, iStart, pfnCompare, lParam, DPAS_SORTED | options, ), pitem, ) } pub const DPA_APPEND: c_int = DA_LAST; pub const DPA_ERR: c_int = DA_ERR; pub type PFNDPAENUMCALLBACK = PFNDAENUMCALLBACK; pub type PFNDPAENUMCALLBACKCONST = PFNDAENUMCALLBACKCONST; pub type PFNDPACOMPARE = PFNDACOMPARE; pub type PFNDPACOMPARECONST = PFNDACOMPARECONST; extern "system" { pub fn Str_SetPtrW( ppsz: *mut LPWSTR, psz: LPCWSTR, ) -> BOOL; }