Mercurial > vba-linux
comparison src/win32/7zip/7z/CPP/7zip/Archive/IArchive.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
1 // IArchive.h | |
2 | |
3 #ifndef __IARCHIVE_H | |
4 #define __IARCHIVE_H | |
5 | |
6 #include "../IStream.h" | |
7 #include "../IProgress.h" | |
8 #include "../PropID.h" | |
9 | |
10 #define ARCHIVE_INTERFACE_SUB(i, base, x) DECL_INTERFACE_SUB(i, base, 6, x) | |
11 #define ARCHIVE_INTERFACE(i, x) ARCHIVE_INTERFACE_SUB(i, IUnknown, x) | |
12 | |
13 namespace NFileTimeType | |
14 { | |
15 enum EEnum | |
16 { | |
17 kWindows, | |
18 kUnix, | |
19 kDOS | |
20 }; | |
21 } | |
22 | |
23 namespace NArchive | |
24 { | |
25 enum | |
26 { | |
27 kName = 0, | |
28 kClassID, | |
29 kExtension, | |
30 kAddExtension, | |
31 kUpdate, | |
32 kKeepName, | |
33 kStartSignature, | |
34 kFinishSignature, | |
35 kAssociate | |
36 }; | |
37 | |
38 namespace NExtract | |
39 { | |
40 namespace NAskMode | |
41 { | |
42 enum | |
43 { | |
44 kExtract = 0, | |
45 kTest, | |
46 kSkip | |
47 }; | |
48 } | |
49 namespace NOperationResult | |
50 { | |
51 enum | |
52 { | |
53 kOK = 0, | |
54 kUnSupportedMethod, | |
55 kDataError, | |
56 kCRCError | |
57 }; | |
58 } | |
59 } | |
60 namespace NUpdate | |
61 { | |
62 namespace NOperationResult | |
63 { | |
64 enum | |
65 { | |
66 kOK = 0, | |
67 kError | |
68 }; | |
69 } | |
70 } | |
71 } | |
72 | |
73 #define INTERFACE_IArchiveOpenCallback(x) \ | |
74 STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes) x; \ | |
75 STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes) x; \ | |
76 | |
77 ARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10) | |
78 { | |
79 INTERFACE_IArchiveOpenCallback(PURE); | |
80 }; | |
81 | |
82 | |
83 #define INTERFACE_IArchiveExtractCallback(x) \ | |
84 INTERFACE_IProgress(x) \ | |
85 /* GetStream OUT: S_OK - OK, S_FALSE - skeep this file */ \ | |
86 STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream, Int32 askExtractMode) x; \ | |
87 STDMETHOD(PrepareOperation)(Int32 askExtractMode) x; \ | |
88 STDMETHOD(SetOperationResult)(Int32 resultEOperationResult) x; \ | |
89 | |
90 ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20) | |
91 { | |
92 INTERFACE_IArchiveExtractCallback(PURE) | |
93 }; | |
94 | |
95 | |
96 #define INTERFACE_IArchiveOpenVolumeCallback(x) \ | |
97 STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) x; \ | |
98 STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) x; \ | |
99 | |
100 ARCHIVE_INTERFACE(IArchiveOpenVolumeCallback, 0x30) | |
101 { | |
102 INTERFACE_IArchiveOpenVolumeCallback(PURE); | |
103 }; | |
104 | |
105 | |
106 ARCHIVE_INTERFACE(IInArchiveGetStream, 0x40) | |
107 { | |
108 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream) PURE; | |
109 }; | |
110 | |
111 | |
112 ARCHIVE_INTERFACE(IArchiveOpenSetSubArchiveName, 0x50) | |
113 { | |
114 STDMETHOD(SetSubArchiveName)(const wchar_t *name) PURE; | |
115 }; | |
116 | |
117 | |
118 /* | |
119 IInArchive::Extract: | |
120 indices must be sorted | |
121 numItems = 0xFFFFFFFF means "all files" | |
122 testMode != 0 means "test files without writing to outStream" | |
123 */ | |
124 | |
125 #define INTERFACE_IInArchive(x) \ | |
126 STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition, IArchiveOpenCallback *openArchiveCallback) x; \ | |
127 STDMETHOD(Close)() x; \ | |
128 STDMETHOD(GetNumberOfItems)(UInt32 *numItems) x; \ | |
129 STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \ | |
130 STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems, Int32 testMode, IArchiveExtractCallback *extractCallback) x; \ | |
131 STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value) x; \ | |
132 STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties) x; \ | |
133 STDMETHOD(GetPropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) x; \ | |
134 STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties) x; \ | |
135 STDMETHOD(GetArchivePropertyInfo)(UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) x; | |
136 | |
137 ARCHIVE_INTERFACE(IInArchive, 0x60) | |
138 { | |
139 INTERFACE_IInArchive(PURE) | |
140 virtual ~IInArchive() {} | |
141 }; | |
142 | |
143 | |
144 #define INTERFACE_IArchiveUpdateCallback(x) \ | |
145 INTERFACE_IProgress(x); \ | |
146 STDMETHOD(GetUpdateItemInfo)(UInt32 index, \ | |
147 Int32 *newData, /*1 - new data, 0 - old data */ \ | |
148 Int32 *newProperties, /* 1 - new properties, 0 - old properties */ \ | |
149 UInt32 *indexInArchive /* -1 if there is no in archive, or if doesn't matter */ \ | |
150 ) x; \ | |
151 STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \ | |
152 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream) x; \ | |
153 STDMETHOD(SetOperationResult)(Int32 operationResult) x; \ | |
154 | |
155 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80) | |
156 { | |
157 INTERFACE_IArchiveUpdateCallback(PURE); | |
158 }; | |
159 | |
160 #define INTERFACE_IArchiveUpdateCallback2(x) \ | |
161 INTERFACE_IArchiveUpdateCallback(x) \ | |
162 STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size) x; \ | |
163 STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream) x; \ | |
164 | |
165 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82) | |
166 { | |
167 INTERFACE_IArchiveUpdateCallback2(PURE); | |
168 }; | |
169 | |
170 | |
171 #ifndef EXTRACT_ONLY | |
172 #define INTERFACE_IOutArchive(x) \ | |
173 STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, IArchiveUpdateCallback *updateCallback) x; \ | |
174 STDMETHOD(GetFileTimeType)(UInt32 *type) x; | |
175 #else | |
176 #define INTERFACE_IOutArchive(x) | |
177 #endif | |
178 | |
179 ARCHIVE_INTERFACE(IOutArchive, 0xA0) | |
180 { | |
181 #ifndef EXTRACT_ONLY | |
182 INTERFACE_IOutArchive(PURE) | |
183 #endif | |
184 }; | |
185 | |
186 | |
187 ARCHIVE_INTERFACE(ISetProperties, 0x03) | |
188 { | |
189 #ifndef EXTRACT_ONLY | |
190 STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) PURE; | |
191 #endif | |
192 }; | |
193 | |
194 | |
195 #define IMP_IInArchive_GetProp(k) \ | |
196 (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \ | |
197 { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \ | |
198 const STATPROPSTG &srcItem = k[index]; \ | |
199 *propID = srcItem.propid; *varType = srcItem.vt; *name = 0; return S_OK; } \ | |
200 | |
201 #define IMP_IInArchive_GetProp_WITH_NAME(k) \ | |
202 (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \ | |
203 { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \ | |
204 const STATPROPSTG &srcItem = k[index]; \ | |
205 *propID = srcItem.propid; *varType = srcItem.vt; \ | |
206 if (srcItem.lpwstrName == 0) *name = 0; else *name = ::SysAllocString(srcItem.lpwstrName); return S_OK; } \ | |
207 | |
208 #define IMP_IInArchive_Props \ | |
209 STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \ | |
210 { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \ | |
211 STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp(kProps) | |
212 | |
213 #define IMP_IInArchive_Props_WITH_NAME \ | |
214 STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \ | |
215 { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \ | |
216 STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kProps) | |
217 | |
218 | |
219 #define IMP_IInArchive_ArcProps \ | |
220 STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ | |
221 { *numProperties = sizeof(kArcProps) / sizeof(kArcProps[0]); return S_OK; } \ | |
222 STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp(kArcProps) | |
223 | |
224 #define IMP_IInArchive_ArcProps_WITH_NAME \ | |
225 STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ | |
226 { *numProperties = sizeof(kArcProps) / sizeof(kArcProps[0]); return S_OK; } \ | |
227 STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kArcProps) | |
228 | |
229 #define IMP_IInArchive_ArcProps_NO \ | |
230 STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ | |
231 { *numProperties = 0; return S_OK; } \ | |
232 STDMETHODIMP CHandler::GetArchivePropertyInfo(UInt32, BSTR *, PROPID *, VARTYPE *) \ | |
233 { return E_NOTIMPL; } \ | |
234 STDMETHODIMP CHandler::GetArchiveProperty(PROPID, PROPVARIANT *value) \ | |
235 { value->vt = VT_EMPTY; return S_OK; } | |
236 | |
237 #endif |