1 // includes from 7-Zip sources
2 #include "7zip/Archive/IArchive.h"
3 #include "Common/StringConvert.h"
4 #include "Windows/PropVariant.h"
5 #include "Windows/PropVariantConversions.h"
6 #include "Windows/FileDir.h"
7 #include "Windows/FileFind.h"
8 #include "Windows/Thread.h"
9 #include "7zip/UI/Common/DirItem.h"
10 #include "7zip/Common/FileStreams.h"
13 #define DllBuild_Merge7z 14
17 typedef char SZ_EXTENSION[8];
18 typedef char CH_SIGNATURE[64]; //MAX(4 + IMAGE_SIZEOF_FILE_HEADER, 64)
20 using namespace NWindows;
22 extern HINSTANCE g_hInstance;
23 extern DWORD g_dwFlags;
24 extern CHAR g_cPath7z[MAX_PATH];
26 typedef UINT32 (WINAPI * CreateObjectFunc)(
28 const GUID *interfaceID,
31 typedef UINT32 (WINAPI * GetHandlerPropertyFunc)(
32 PROPID propID, PROPVARIANT *value);
37 CreateObjectFunc CreateObject;
38 GetHandlerPropertyFunc GetHandlerProperty;
41 const char *extension;
47 struct Format7zDLL::Proxy
51 &((struct Format7zDLL *)0)->handle
52 - &((struct Format7zDLL *)0)->origin
56 const char *extension;
58 struct Format7zDLL *operator->();
61 interface Format7zDLL::Interface : Merge7z::Format
64 static Interface *head;
66 Interface(Proxy &proxy):proxy(proxy), next(head)
70 void GetDefaultName(HWND, UString &);
71 virtual IInArchive *GetInArchive();
72 virtual HRESULT DeCompressArchive(HWND, LPCTSTR path, LPCTSTR folder);
73 virtual IOutArchive *GetOutArchive();
74 virtual HRESULT CompressArchive(HWND, LPCTSTR path, Merge7z::DirItemEnumerator *);
75 interface Inspector : Merge7z::Format::Inspector
78 virtual UINT32 Open();
79 virtual HRESULT Extract(HWND, LPCTSTR folder, const UINT32 *indices = 0, UINT32 numItems = -1);
80 virtual HRESULT GetProperty(UINT32, PROPID, PROPVARIANT *, VARTYPE);
81 virtual BSTR GetPath(UINT32);
82 virtual BSTR GetName(UINT32);
83 virtual BSTR GetExtension(UINT32);
84 virtual VARIANT_BOOL IsFolder(UINT32);
85 virtual FILETIME LastWriteTime(UINT32);
86 virtual BSTR GetDefaultName();
87 Format7zDLL::Interface *const format;
90 IArchiveOpenCallback *callback;
91 CSysString const path;
92 UString ustrDefaultName;
93 NFile::NFind::CFileInfo fileInfo;
94 Inspector(Format7zDLL::Interface *, LPCTSTR);
97 virtual Merge7z::Format::Inspector *Open(HWND, LPCTSTR);
98 interface Updater : Merge7z::Format::Updater
101 virtual UINT32 Add(Merge7z::DirItemEnumerator::Item &);
102 virtual HRESULT Commit(HWND);
103 Format7zDLL::Interface *const format;
104 IOutArchive *outArchive;
105 COutFileStream *file;
106 CSysString const path;
107 CObjectVector<CDirItem> dirItems;
108 CObjectVector<CArchiveItem> archiveItems;
109 Updater(Format7zDLL::Interface *, LPCTSTR);
112 virtual Merge7z::Format::Updater *Update(HWND, LPCTSTR);
113 virtual HRESULT GetHandlerProperty(HWND, PROPID, PROPVARIANT *, VARTYPE);
114 virtual BSTR GetHandlerName(HWND);
115 virtual BSTR GetHandlerClassID(HWND);
116 virtual BSTR GetHandlerExtension(HWND);
117 virtual BSTR GetHandlerAddExtension(HWND);
118 virtual VARIANT_BOOL GetHandlerUpdate(HWND);
119 virtual VARIANT_BOOL GetHandlerKeepName(HWND);
120 virtual BSTR GetDefaultName(HWND, LPCTSTR);