| OLD | NEW |
| (Empty) |
| 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 as
kExtractMode) 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, IArchi
veOpenCallback *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, IAr
chiveExtractCallback *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, VA
RTYPE *varType) x; | |
| 136 | |
| 137 ARCHIVE_INTERFACE(IInArchive, 0x60) | |
| 138 { | |
| 139 INTERFACE_IInArchive(PURE) | |
| 140 }; | |
| 141 | |
| 142 | |
| 143 #define INTERFACE_IArchiveUpdateCallback(x) \ | |
| 144 INTERFACE_IProgress(x); \ | |
| 145 STDMETHOD(GetUpdateItemInfo)(UInt32 index, \ | |
| 146 Int32 *newData, /*1 - new data, 0 - old data */ \ | |
| 147 Int32 *newProperties, /* 1 - new properties, 0 - old properties */ \ | |
| 148 UInt32 *indexInArchive /* -1 if there is no in archive, or if doesn't matt
er */ \ | |
| 149 ) x; \ | |
| 150 STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) x; \ | |
| 151 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream) x; \ | |
| 152 STDMETHOD(SetOperationResult)(Int32 operationResult) x; \ | |
| 153 | |
| 154 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80) | |
| 155 { | |
| 156 INTERFACE_IArchiveUpdateCallback(PURE); | |
| 157 }; | |
| 158 | |
| 159 #define INTERFACE_IArchiveUpdateCallback2(x) \ | |
| 160 INTERFACE_IArchiveUpdateCallback(x) \ | |
| 161 STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size) x; \ | |
| 162 STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream)
x; \ | |
| 163 | |
| 164 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82) | |
| 165 { | |
| 166 INTERFACE_IArchiveUpdateCallback2(PURE); | |
| 167 }; | |
| 168 | |
| 169 | |
| 170 #define INTERFACE_IOutArchive(x) \ | |
| 171 STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, IArch
iveUpdateCallback *updateCallback) x; \ | |
| 172 STDMETHOD(GetFileTimeType)(UInt32 *type) x; | |
| 173 | |
| 174 ARCHIVE_INTERFACE(IOutArchive, 0xA0) | |
| 175 { | |
| 176 INTERFACE_IOutArchive(PURE) | |
| 177 }; | |
| 178 | |
| 179 | |
| 180 ARCHIVE_INTERFACE(ISetProperties, 0x03) | |
| 181 { | |
| 182 STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int
32 numProperties) PURE; | |
| 183 }; | |
| 184 | |
| 185 | |
| 186 #define IMP_IInArchive_GetProp(k) \ | |
| 187 (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \ | |
| 188 { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \ | |
| 189 const STATPROPSTG &srcItem = k[index]; \ | |
| 190 *propID = srcItem.propid; *varType = srcItem.vt; *name = 0; return S_OK; } \ | |
| 191 | |
| 192 #define IMP_IInArchive_GetProp_WITH_NAME(k) \ | |
| 193 (UInt32 index, BSTR *name, PROPID *propID, VARTYPE *varType) \ | |
| 194 { if(index >= sizeof(k) / sizeof(k[0])) return E_INVALIDARG; \ | |
| 195 const STATPROPSTG &srcItem = k[index]; \ | |
| 196 *propID = srcItem.propid; *varType = srcItem.vt; \ | |
| 197 if (srcItem.lpwstrName == 0) *name = 0; else *name = ::SysAllocString(srcIte
m.lpwstrName); return S_OK; } \ | |
| 198 | |
| 199 #define IMP_IInArchive_Props \ | |
| 200 STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \ | |
| 201 { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \ | |
| 202 STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp(kProps) | |
| 203 | |
| 204 #define IMP_IInArchive_Props_WITH_NAME \ | |
| 205 STDMETHODIMP CHandler::GetNumberOfProperties(UInt32 *numProperties) \ | |
| 206 { *numProperties = sizeof(kProps) / sizeof(kProps[0]); return S_OK; } \ | |
| 207 STDMETHODIMP CHandler::GetPropertyInfo IMP_IInArchive_GetProp_WITH_NAME(kProps
) | |
| 208 | |
| 209 | |
| 210 #define IMP_IInArchive_ArcProps \ | |
| 211 STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ | |
| 212 { *numProperties = sizeof(kArcProps) / sizeof(kArcProps[0]); return S_OK; }
\ | |
| 213 STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp(kArcProps
) | |
| 214 | |
| 215 #define IMP_IInArchive_ArcProps_WITH_NAME \ | |
| 216 STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ | |
| 217 { *numProperties = sizeof(kArcProps) / sizeof(kArcProps[0]); return S_OK; }
\ | |
| 218 STDMETHODIMP CHandler::GetArchivePropertyInfo IMP_IInArchive_GetProp_WITH_NAME
(kArcProps) | |
| 219 | |
| 220 #define IMP_IInArchive_ArcProps_NO \ | |
| 221 STDMETHODIMP CHandler::GetNumberOfArchiveProperties(UInt32 *numProperties) \ | |
| 222 { *numProperties = 0; return S_OK; } \ | |
| 223 STDMETHODIMP CHandler::GetArchivePropertyInfo(UInt32, BSTR *, PROPID *, VARTYP
E *) \ | |
| 224 { return E_NOTIMPL; } \ | |
| 225 STDMETHODIMP CHandler::GetArchiveProperty(PROPID, PROPVARIANT *value) \ | |
| 226 { value->vt = VT_EMPTY; return S_OK; } | |
| 227 | |
| 228 #endif | |
| OLD | NEW |