Mercurial > vba-linux
view 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 |
line wrap: on
line source
1 // IArchive.h3 #ifndef __IARCHIVE_H4 #define __IARCHIVE_H6 #include "../IStream.h"7 #include "../IProgress.h"8 #include "../PropID.h"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)13 namespace NFileTimeType14 {15 enum EEnum16 {17 kWindows,18 kUnix,19 kDOS20 };21 }23 namespace NArchive24 {25 enum26 {27 kName = 0,28 kClassID,29 kExtension,30 kAddExtension,31 kUpdate,32 kKeepName,33 kStartSignature,34 kFinishSignature,35 kAssociate36 };38 namespace NExtract39 {40 namespace NAskMode41 {42 enum43 {44 kExtract = 0,45 kTest,46 kSkip47 };48 }49 namespace NOperationResult50 {51 enum52 {53 kOK = 0,54 kUnSupportedMethod,55 kDataError,56 kCRCError57 };58 }59 }60 namespace NUpdate61 {62 namespace NOperationResult63 {64 enum65 {66 kOK = 0,67 kError68 };69 }70 }71 }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; \77 ARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10)78 {79 INTERFACE_IArchiveOpenCallback(PURE);80 };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; \90 ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20)91 {92 INTERFACE_IArchiveExtractCallback(PURE)93 };96 #define INTERFACE_IArchiveOpenVolumeCallback(x) \97 STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) x; \98 STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) x; \100 ARCHIVE_INTERFACE(IArchiveOpenVolumeCallback, 0x30)101 {102 INTERFACE_IArchiveOpenVolumeCallback(PURE);103 };106 ARCHIVE_INTERFACE(IInArchiveGetStream, 0x40)107 {108 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream) PURE;109 };112 ARCHIVE_INTERFACE(IArchiveOpenSetSubArchiveName, 0x50)113 {114 STDMETHOD(SetSubArchiveName)(const wchar_t *name) PURE;115 };118 /*119 IInArchive::Extract:120 indices must be sorted121 numItems = 0xFFFFFFFF means "all files"122 testMode != 0 means "test files without writing to outStream"123 */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;137 ARCHIVE_INTERFACE(IInArchive, 0x60)138 {139 INTERFACE_IInArchive(PURE)140 virtual ~IInArchive() {}141 };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; \155 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80)156 {157 INTERFACE_IArchiveUpdateCallback(PURE);158 };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; \165 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82)166 {167 INTERFACE_IArchiveUpdateCallback2(PURE);168 };171 #ifndef EXTRACT_ONLY172 #define INTERFACE_IOutArchive(x) \173 STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, IArchiveUpdateCallback *updateCallback) x; \174 STDMETHOD(GetFileTimeType)(UInt32 *type) x;175 #else176 #define INTERFACE_IOutArchive(x)177 #endif179 ARCHIVE_INTERFACE(IOutArchive, 0xA0)180 {181 #ifndef EXTRACT_ONLY182 INTERFACE_IOutArchive(PURE)183 #endif184 };187 ARCHIVE_INTERFACE(ISetProperties, 0x03)188 {189 #ifndef EXTRACT_ONLY190 STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) PURE;191 #endif192 };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; } \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; } \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)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)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)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)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; }237 #endif