1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/other-licenses/7zstub/src/7zip/Archive/7z/7zHandler.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,234 @@ 1.4 +// 7z/Handler.h 1.5 + 1.6 +#ifndef __7Z_HANDLER_H 1.7 +#define __7Z_HANDLER_H 1.8 + 1.9 +#include "../IArchive.h" 1.10 +#include "7zIn.h" 1.11 + 1.12 +#include "7zCompressionMode.h" 1.13 + 1.14 +#ifndef _SFX 1.15 +#include "7zMethods.h" 1.16 +#endif 1.17 + 1.18 +#ifdef COMPRESS_MT 1.19 +#include "../../../Windows/System.h" 1.20 +#endif 1.21 + 1.22 +namespace NArchive { 1.23 +namespace N7z { 1.24 + 1.25 +#ifdef _7Z_VOL 1.26 +struct CRef 1.27 +{ 1.28 + int VolumeIndex; 1.29 + int ItemIndex; 1.30 +}; 1.31 + 1.32 +/* 1.33 +struct CRef2 1.34 +{ 1.35 + CRecordVector<CRef> Refs; 1.36 + UInt64 UnPackSize; 1.37 + UInt64 PackSize; 1.38 + UInt64 StartPos; 1.39 + CRef2(): UnPackSize(0), PackSize(0), StartPos(0) {} 1.40 +}; 1.41 +*/ 1.42 + 1.43 +struct CVolume 1.44 +{ 1.45 + int StartRef2Index; 1.46 + CMyComPtr<IInStream> Stream; 1.47 + CArchiveDatabaseEx Database; 1.48 +}; 1.49 +#endif 1.50 + 1.51 +#ifndef EXTRACT_ONLY 1.52 + 1.53 +struct COneMethodInfo 1.54 +{ 1.55 + CObjectVector<CProperty> CoderProperties; 1.56 + UString MethodName; 1.57 +}; 1.58 +#endif 1.59 + 1.60 +// {23170F69-40C1-278A-1000-000110070000} 1.61 +DEFINE_GUID(CLSID_CFormat7z, 1.62 + 0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00); 1.63 + 1.64 +#ifndef __7Z_SET_PROPERTIES 1.65 + 1.66 +#ifdef EXTRACT_ONLY 1.67 +#ifdef COMPRESS_MT 1.68 +#define __7Z_SET_PROPERTIES 1.69 +#endif 1.70 +#else 1.71 +#define __7Z_SET_PROPERTIES 1.72 +#endif 1.73 + 1.74 +#endif 1.75 + 1.76 + 1.77 +class CHandler: 1.78 + public IInArchive, 1.79 + #ifdef _7Z_VOL 1.80 + public IInArchiveGetStream, 1.81 + #endif 1.82 + #ifdef __7Z_SET_PROPERTIES 1.83 + public ISetProperties, 1.84 + #endif 1.85 + #ifndef EXTRACT_ONLY 1.86 + public IOutArchive, 1.87 + #endif 1.88 + public CMyUnknownImp 1.89 +{ 1.90 +public: 1.91 + MY_QUERYINTERFACE_BEGIN 1.92 + #ifdef _7Z_VOL 1.93 + MY_QUERYINTERFACE_ENTRY(IInArchiveGetStream) 1.94 + #endif 1.95 + #ifdef __7Z_SET_PROPERTIES 1.96 + MY_QUERYINTERFACE_ENTRY(ISetProperties) 1.97 + #endif 1.98 + #ifndef EXTRACT_ONLY 1.99 + MY_QUERYINTERFACE_ENTRY(IOutArchive) 1.100 + #endif 1.101 + MY_QUERYINTERFACE_END 1.102 + MY_ADDREF_RELEASE 1.103 + 1.104 + STDMETHOD(Open)(IInStream *stream, 1.105 + const UInt64 *maxCheckStartPosition, 1.106 + IArchiveOpenCallback *openArchiveCallback); 1.107 + STDMETHOD(Close)(); 1.108 + 1.109 + STDMETHOD(GetNumberOfItems)(UInt32 *numItems); 1.110 + STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value); 1.111 + STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems, 1.112 + Int32 testMode, IArchiveExtractCallback *extractCallback); 1.113 + 1.114 + STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value); 1.115 + 1.116 + STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties); 1.117 + STDMETHOD(GetPropertyInfo)(UInt32 index, 1.118 + BSTR *name, PROPID *propID, VARTYPE *varType); 1.119 + 1.120 + STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties); 1.121 + STDMETHOD(GetArchivePropertyInfo)(UInt32 index, 1.122 + BSTR *name, PROPID *propID, VARTYPE *varType); 1.123 + 1.124 + #ifdef _7Z_VOL 1.125 + STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream); 1.126 + #endif 1.127 + 1.128 + #ifdef __7Z_SET_PROPERTIES 1.129 + STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties); 1.130 + #endif 1.131 + 1.132 + #ifndef EXTRACT_ONLY 1.133 + // IOutArchiveHandler 1.134 + STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems, 1.135 + IArchiveUpdateCallback *updateCallback); 1.136 + 1.137 + STDMETHOD(GetFileTimeType)(UInt32 *type); 1.138 + 1.139 + // ISetProperties 1.140 + 1.141 + HRESULT SetSolidSettings(const UString &s); 1.142 + HRESULT SetSolidSettings(const PROPVARIANT &value); 1.143 + #endif 1.144 + 1.145 + CHandler(); 1.146 + 1.147 +private: 1.148 + #ifdef _7Z_VOL 1.149 + CObjectVector<CVolume> _volumes; 1.150 + CObjectVector<CRef> _refs; 1.151 + #else 1.152 + CMyComPtr<IInStream> _inStream; 1.153 + NArchive::N7z::CArchiveDatabaseEx _database; 1.154 + #endif 1.155 + 1.156 + #ifdef COMPRESS_MT 1.157 + UInt32 _numThreads; 1.158 + #endif 1.159 + 1.160 + #ifndef EXTRACT_ONLY 1.161 + CObjectVector<COneMethodInfo> _methods; 1.162 + CRecordVector<CBind> _binds; 1.163 + bool _removeSfxBlock; 1.164 + UInt64 _numSolidFiles; 1.165 + UInt64 _numSolidBytes; 1.166 + bool _numSolidBytesDefined; 1.167 + bool _solidExtension; 1.168 + 1.169 + bool _compressHeaders; 1.170 + bool _compressHeadersFull; 1.171 + bool _encryptHeaders; 1.172 + 1.173 + bool _autoFilter; 1.174 + UInt32 _level; 1.175 + 1.176 + bool _volumeMode; 1.177 + 1.178 + 1.179 + HRESULT SetParam(COneMethodInfo &oneMethodInfo, const UString &name, const UString &value); 1.180 + HRESULT SetParams(COneMethodInfo &oneMethodInfo, const UString &srcString); 1.181 + 1.182 + HRESULT SetPassword(CCompressionMethodMode &methodMode, 1.183 + IArchiveUpdateCallback *updateCallback); 1.184 + 1.185 + HRESULT SetCompressionMethod(CCompressionMethodMode &method, 1.186 + CObjectVector<COneMethodInfo> &methodsInfo 1.187 + #ifdef COMPRESS_MT 1.188 + , UInt32 numThreads 1.189 + #endif 1.190 + ); 1.191 + 1.192 + HRESULT SetCompressionMethod( 1.193 + CCompressionMethodMode &method, 1.194 + CCompressionMethodMode &headerMethod); 1.195 + 1.196 + #endif 1.197 + 1.198 + #ifndef _SFX 1.199 + 1.200 + CRecordVector<UInt64> _fileInfoPopIDs; 1.201 + void FillPopIDs(); 1.202 + 1.203 + #endif 1.204 + 1.205 + #ifndef EXTRACT_ONLY 1.206 + 1.207 + void InitSolidFiles() { _numSolidFiles = UInt64(Int64(-1)); } 1.208 + void InitSolidSize() { _numSolidBytes = UInt64(Int64(-1)); } 1.209 + void InitSolid() 1.210 + { 1.211 + InitSolidFiles(); 1.212 + InitSolidSize(); 1.213 + _solidExtension = false; 1.214 + _numSolidBytesDefined = false; 1.215 + } 1.216 + 1.217 + void Init() 1.218 + { 1.219 + _removeSfxBlock = false; 1.220 + _compressHeaders = true; 1.221 + _compressHeadersFull = true; 1.222 + _encryptHeaders = false; 1.223 + #ifdef COMPRESS_MT 1.224 + _numThreads = NWindows::NSystem::GetNumberOfProcessors(); 1.225 + #endif 1.226 + 1.227 + _level = 5; 1.228 + _autoFilter = true; 1.229 + _volumeMode = false; 1.230 + InitSolid(); 1.231 + } 1.232 + #endif 1.233 +}; 1.234 + 1.235 +}} 1.236 + 1.237 +#endif