Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
7a78cfef
Commit
7a78cfef
authored
Oct 11, 1998
by
Juergen Schmied
Committed by
Alexandre Julliard
Oct 11, 1998
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New class IDLList "Item ID List List" (internal).
parent
5733ed76
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
160 additions
and
49 deletions
+160
-49
pidl.c
dlls/shell32/pidl.c
+124
-11
pidl.h
dlls/shell32/pidl.h
+36
-38
No files found.
dlls/shell32/pidl.c
View file @
7a78cfef
...
...
@@ -96,10 +96,6 @@ LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
{
DWORD
len
;
LPITEMIDLIST
newpidl
;
TRACE
(
pidl
,
"%p
\n
"
,
pidl
);
pdump
(
pidl
);
if
(
!
pidl
)
return
NULL
;
...
...
@@ -107,6 +103,10 @@ LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
newpidl
=
(
LPITEMIDLIST
)
SHAlloc
(
len
);
if
(
newpidl
)
memcpy
(
newpidl
,
pidl
,
len
);
TRACE
(
pidl
,
"pidl=%p newpidl=%p
\n
"
,
pidl
,
newpidl
);
pdump
(
pidl
);
return
newpidl
;
}
/*************************************************************************
...
...
@@ -118,7 +118,6 @@ LPITEMIDLIST WINAPI ILClone (LPCITEMIDLIST pidl)
LPITEMIDLIST
WINAPI
ILCloneFirst
(
LPCITEMIDLIST
pidl
)
{
DWORD
len
;
LPITEMIDLIST
newpidl
=
NULL
;
TRACE
(
pidl
,
"pidl=%p
\n
"
,
pidl
);
if
(
pidl
)
{
len
=
pidl
->
mkid
.
cb
;
...
...
@@ -128,6 +127,7 @@ LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
ILGetNext
(
newpidl
)
->
mkid
.
cb
=
0x00
;
}
}
TRACE
(
pidl
,
"pidl=%p newpidl=%p
\n
"
,
pidl
,
newpidl
);
return
newpidl
;
}
...
...
@@ -224,8 +224,6 @@ DWORD WINAPI ILGetSize(LPITEMIDLIST pidl)
{
LPSHITEMID
si
=
&
(
pidl
->
mkid
);
DWORD
len
=
0
;
/*TRACE(pidl,"pidl=%p\n",pidl);*/
if
(
pidl
)
{
while
(
si
->
cb
)
{
len
+=
si
->
cb
;
...
...
@@ -233,7 +231,7 @@ DWORD WINAPI ILGetSize(LPITEMIDLIST pidl)
}
len
+=
2
;
}
/*TRACE(pidl,"-- size=%lu\n",len);*/
TRACE
(
pidl
,
"pidl=%p size=%lu
\n
"
,
pidl
,
len
);
return
len
;
}
/*************************************************************************
...
...
@@ -250,7 +248,7 @@ DWORD WINAPI ILGetSize(LPITEMIDLIST pidl)
LPITEMIDLIST
WINAPI
ILGetNext
(
LPITEMIDLIST
pidl
)
{
LPITEMIDLIST
nextpidl
;
/* TRACE(pidl,"(pidl=%p)\n",pidl);*/
TRACE
(
pidl
,
"(pidl=%p)
\n
"
,
pidl
);
if
(
pidl
)
{
nextpidl
=
(
LPITEMIDLIST
)(
LPBYTE
)(((
LPBYTE
)
pidl
)
+
pidl
->
mkid
.
cb
);
return
nextpidl
;
...
...
@@ -467,7 +465,7 @@ DWORD WINAPI _ILGetFolderText(LPCITEMIDLIST pidl,LPSTR lpszPath, DWORD dwSize)
DWORD
dwCopied
=
0
;
LPSTR
pText
;
TRACE
(
pidl
,
"(%p
)
\n
"
,
pidl
);
TRACE
(
pidl
,
"(%p
path=%p)
\n
"
,
pidl
,
lpszPath
);
if
(
!
pidl
)
{
return
0
;
...
...
@@ -679,7 +677,7 @@ LPITEMIDLIST WINAPI _ILCreate(PIDLTYPE type, LPVOID pIn, UINT16 uInSize)
/* the sizes of: cb(2), pidldata-1, szText+1, next cb(2) */
switch
(
type
)
{
case
PT_DRIVE
:
uSize
=
4
+
10
;
uSize
=
4
+
9
;
break
;
default:
uSize
=
4
+
(
sizeof
(
PIDLDATA
))
+
uInSize
;
...
...
@@ -798,3 +796,118 @@ LPSTR WINAPI _ILGetTextPointer(PIDLTYPE type, LPPIDLDATA pidldata)
}
return
NULL
;
}
/**************************************************************************
* IDLList "Item ID List List"
*
*/
static
UINT32
IDLList_GetState
(
LPIDLLIST
this
);
static
LPITEMIDLIST
IDLList_GetElement
(
LPIDLLIST
this
,
UINT32
nIndex
);
static
UINT32
IDLList_GetCount
(
LPIDLLIST
this
);
static
BOOL32
IDLList_StoreItem
(
LPIDLLIST
this
,
LPITEMIDLIST
pidl
);
static
BOOL32
IDLList_AddItems
(
LPIDLLIST
this
,
LPITEMIDLIST
*
apidl
,
UINT32
cidl
);
static
BOOL32
IDLList_InitList
(
LPIDLLIST
this
);
static
void
IDLList_CleanList
(
LPIDLLIST
this
);
static
IDLList_VTable
idllvt
=
{
IDLList_GetState
,
IDLList_GetElement
,
IDLList_GetCount
,
IDLList_StoreItem
,
IDLList_AddItems
,
IDLList_InitList
,
IDLList_CleanList
};
LPIDLLIST
IDLList_Constructor
(
UINT32
uStep
)
{
LPIDLLIST
lpidll
;
if
(
!
(
lpidll
=
(
LPIDLLIST
)
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
IDLList
))))
return
NULL
;
lpidll
->
lpvtbl
=&
idllvt
;
lpidll
->
uStep
=
uStep
;
lpidll
->
dpa
=
NULL
;
TRACE
(
shell
,
"(%p)
\n
"
,
lpidll
);
return
lpidll
;
}
void
IDLList_Destructor
(
LPIDLLIST
this
)
{
TRACE
(
shell
,
"(%p)
\n
"
,
this
);
IDLList_CleanList
(
this
);
}
static
UINT32
IDLList_GetState
(
LPIDLLIST
this
)
{
TRACE
(
shell
,
"(%p)->(uStep=%u dpa=%p)
\n
"
,
this
,
this
->
uStep
,
this
->
dpa
);
if
(
this
->
uStep
==
0
)
{
if
(
this
->
dpa
)
return
(
State_Init
);
return
(
State_OutOfMem
);
}
return
(
State_UnInit
);
}
static
LPITEMIDLIST
IDLList_GetElement
(
LPIDLLIST
this
,
UINT32
nIndex
)
{
TRACE
(
shell
,
"(%p)->(index=%u)
\n
"
,
this
,
nIndex
);
return
((
LPITEMIDLIST
)
DPA_GetPtr
(
this
->
dpa
,
nIndex
));
}
static
UINT32
IDLList_GetCount
(
LPIDLLIST
this
)
{
TRACE
(
shell
,
"(%p)
\n
"
,
this
);
return
(
IDLList_GetState
(
this
)
==
State_Init
?
DPA_GetPtrCount
(
this
->
dpa
)
:
0
);
}
static
BOOL32
IDLList_StoreItem
(
LPIDLLIST
this
,
LPITEMIDLIST
pidl
)
{
TRACE
(
shell
,
"(%p)->(pidl=%p)
\n
"
,
this
,
pidl
);
if
(
pidl
)
{
if
(
IDLList_InitList
(
this
)
&&
DPA_InsertPtr
(
this
->
dpa
,
0x7fff
,
(
LPSTR
)
pidl
)
>=
0
)
return
(
TRUE
);
ILFree
(
pidl
);
}
IDLList_CleanList
(
this
);
return
(
FALSE
);
}
static
BOOL32
IDLList_AddItems
(
LPIDLLIST
this
,
LPITEMIDLIST
*
apidl
,
UINT32
cidl
)
{
INT32
i
;
TRACE
(
shell
,
"(%p)->(apidl=%p cidl=%u)
\n
"
,
this
,
apidl
,
cidl
);
for
(
i
=
0
;
i
<
cidl
;
++
i
)
{
if
(
!
IDLList_StoreItem
(
this
,
ILClone
((
LPCITEMIDLIST
)
apidl
[
i
])))
return
(
FALSE
);
}
return
(
TRUE
);
}
static
BOOL32
IDLList_InitList
(
LPIDLLIST
this
)
{
TRACE
(
shell
,
"(%p)
\n
"
,
this
);
switch
(
IDLList_GetState
(
this
))
{
case
State_Init
:
return
(
TRUE
);
case
State_OutOfMem
:
return
(
FALSE
);
case
State_UnInit
:
default:
this
->
dpa
=
DPA_Create
(
this
->
uStep
);
this
->
uStep
=
0
;
return
(
IDLList_InitList
(
this
));
}
}
static
void
IDLList_CleanList
(
LPIDLLIST
this
)
{
INT32
i
;
TRACE
(
shell
,
"(%p)
\n
"
,
this
);
if
(
this
->
uStep
!=
0
)
{
this
->
dpa
=
NULL
;
this
->
uStep
=
0
;
return
;
}
if
(
!
this
->
dpa
)
{
return
;
}
for
(
i
=
DPA_GetPtrCount
(
this
->
dpa
)
-
1
;
i
>=
0
;
--
i
)
{
ILFree
(
IDLList_GetElement
(
this
,
i
));
}
DPA_Destroy
(
this
->
dpa
);
this
->
dpa
=
NULL
;
}
dlls/shell32/pidl.h
View file @
7a78cfef
...
...
@@ -13,6 +13,7 @@
#ifndef __WINE_PIDL_H
#define __WINE_PIDL_H
#include "shlobj.h"
/*
...
...
@@ -34,16 +35,17 @@
* file: see the PIDLDATA structure
*/
#define PT_DESKTOP 0x00
00
/*fixme*/
#define PT_MYCOMP 0x
00
1F
#define PT_SPECIAL 0x
00
2E
#define PT_DRIVE 0x
00
23
#define PT_FOLDER 0x
00
31
#define PT_VALUE 0x
00
33
/*fixme*/
#define PT_DESKTOP 0x00
/*fixme*/
#define PT_MYCOMP 0x1F
#define PT_SPECIAL 0x2E
#define PT_DRIVE 0x23
#define PT_FOLDER 0x31
#define PT_VALUE 0x33
/*fixme*/
#pragma pack(1)
typedef
WORD
PIDLTYPE
;
typedef
struct
tagPIDLDATA
typedef
BYTE
PIDLTYPE
;
typedef
struct
tagPIDLDATA
{
PIDLTYPE
type
;
union
{
struct
...
...
@@ -52,7 +54,8 @@ typedef WORD PIDLTYPE;
DWORD
dwSFGAO
;
}
drive
;
struct
{
DWORD
dwFileSize
;
{
BYTE
dummy
;
DWORD
dwFileSize
;
WORD
uFileDate
;
WORD
uFileTime
;
WORD
uFileAttribs
;
...
...
@@ -62,39 +65,34 @@ typedef WORD PIDLTYPE;
CHAR
szText
[
1
];
/* last entry, variable size */
}
file
,
folder
,
generic
;
}
u
;
}
/* here starts my implementation*/
PIDLDATA
,
*
LPPIDLDATA
;
}
PIDLDATA
,
*
LPPIDLDATA
;
#pragma pack(4)
LPITEMIDLIST
WINAPI
_ILCreateDesktop
();
LPITEMIDLIST
WINAPI
_ILCreateMyComputer
();
LPITEMIDLIST
WINAPI
_ILCreateDrive
(
LPCSTR
);
LPITEMIDLIST
WINAPI
_ILCreateFolder
(
LPCSTR
);
LPITEMIDLIST
WINAPI
_ILCreateValue
(
LPCSTR
);
LPITEMIDLIST
WINAPI
_ILCreate
(
PIDLTYPE
,
LPVOID
,
UINT16
);
LPITEMIDLIST
WINAPI
_ILCreateDesktop
();
LPITEMIDLIST
WINAPI
_ILCreateMyComputer
();
LPITEMIDLIST
WINAPI
_ILCreateDrive
(
LPCSTR
);
LPITEMIDLIST
WINAPI
_ILCreateFolder
(
LPCSTR
);
LPITEMIDLIST
WINAPI
_ILCreateValue
(
LPCSTR
);
LPITEMIDLIST
WINAPI
_ILCreate
(
PIDLTYPE
,
LPVOID
,
UINT16
);
BOOL32
WINAPI
_ILGetDrive
(
LPCITEMIDLIST
,
LPSTR
,
UINT16
);
DWORD
WINAPI
_ILGetItemText
(
LPCITEMIDLIST
,
LPSTR
,
UINT16
);
DWORD
WINAPI
_ILGetFolderText
(
LPCITEMIDLIST
,
LPSTR
,
DWORD
);
DWORD
WINAPI
_ILGetValueText
(
LPCITEMIDLIST
,
LPSTR
,
DWORD
);
DWORD
WINAPI
_ILGetDataText
(
LPCITEMIDLIST
,
LPCITEMIDLIST
,
LPSTR
,
DWORD
);
DWORD
WINAPI
_ILGetPidlPath
(
LPCITEMIDLIST
,
LPSTR
,
DWORD
);
DWORD
WINAPI
_ILGetData
(
PIDLTYPE
,
LPCITEMIDLIST
,
LPVOID
,
UINT16
);
BOOL32
WINAPI
_ILGetDrive
(
LPCITEMIDLIST
,
LPSTR
,
UINT16
);
DWORD
WINAPI
_ILGetItemText
(
LPCITEMIDLIST
,
LPSTR
,
UINT16
);
DWORD
WINAPI
_ILGetFolderText
(
LPCITEMIDLIST
,
LPSTR
,
DWORD
);
DWORD
WINAPI
_ILGetValueText
(
LPCITEMIDLIST
,
LPSTR
,
DWORD
);
DWORD
WINAPI
_ILGetDataText
(
LPCITEMIDLIST
,
LPCITEMIDLIST
,
LPSTR
,
DWORD
);
DWORD
WINAPI
_ILGetPidlPath
(
LPCITEMIDLIST
,
LPSTR
,
DWORD
);
DWORD
WINAPI
_ILGetData
(
PIDLTYPE
,
LPCITEMIDLIST
,
LPVOID
,
UINT16
);
BOOL32
WINAPI
_ILIsDesktop
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILIsMyComputer
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILIsDrive
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILIsFolder
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILIsValue
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILIsDesktop
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILIsMyComputer
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILIsDrive
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILIsFolder
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILIsValue
(
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILHasFolders
(
LPSTR
,
LPCITEMIDLIST
);
BOOL32
WINAPI
_ILHasFolders
(
LPSTR
,
LPCITEMIDLIST
);
LPPIDLDATA
WINAPI
_ILGetDataPointer
(
LPCITEMIDLIST
);
LPSTR
WINAPI
_ILGetTextPointer
(
PIDLTYPE
type
,
LPPIDLDATA
pidldata
);
/*
BOOL32 WINAPI _ILGetDesktop(LPCITEMIDLIST,LPSTR);
BOOL32 WINAPI _ILSeparatePathAndValue(LPITEMIDLIST,LPITEMIDLIST*,LPITEMIDLIST*);
BOOL32 WINAPI _ILGetValueType(LPCITEMIDLIST,LPCITEMIDLIST,LPDWORD);
*/
LPPIDLDATA
WINAPI
_ILGetDataPointer
(
LPCITEMIDLIST
);
LPSTR
WINAPI
_ILGetTextPointer
(
PIDLTYPE
type
,
LPPIDLDATA
pidldata
);
void
pdump
(
LPCITEMIDLIST
pidl
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment