OSDN Git Service

no message
[winmerge-jp/winmerge-jp.git] / ArchiveSupport / Merge7z / Merge7zCommon.h
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"
11 // Merge7z includes
12 #include "tools.h"
13 #define DllBuild_Merge7z 14
14 #define DLLPSTUB /##/
15 #include "Merge7z.h"
16
17 typedef char SZ_EXTENSION[8];
18 typedef char CH_SIGNATURE[64]; //MAX(4 + IMAGE_SIZEOF_FILE_HEADER, 64)
19
20 using namespace NWindows;
21
22 extern HINSTANCE g_hInstance;
23 extern DWORD g_dwFlags;
24 extern CHAR g_cPath7z[MAX_PATH];
25
26 typedef UINT32 (WINAPI * CreateObjectFunc)(
27         const GUID *clsID, 
28         const GUID *interfaceID, 
29         void **outObject);
30
31 typedef UINT32 (WINAPI * GetHandlerPropertyFunc)(
32         PROPID propID, PROPVARIANT *value);
33
34 struct Format7zDLL
35 {
36         HMODULE origin;
37         CreateObjectFunc CreateObject;
38         GetHandlerPropertyFunc GetHandlerProperty;
39         HMODULE handle;
40         CLSID clsid;
41         const char *extension;
42         size_t signature;
43         struct Proxy;
44         interface Interface;
45 };
46
47 struct Format7zDLL::Proxy
48 {
49         LPCSTR Format7zDLL
50         [
51                 &((struct Format7zDLL *)0)->handle
52         -       &((struct Format7zDLL *)0)->origin
53         ];
54         HMODULE handle;
55         CLSID clsid;
56         const char *extension;
57         size_t signature;
58         struct Format7zDLL *operator->();
59 };
60
61 interface Format7zDLL::Interface : Merge7z::Format
62 {
63         Proxy &proxy;
64         static Interface *head;
65         Interface *next;
66         Interface(Proxy &proxy):proxy(proxy), next(head)
67         {
68                 head = this;
69         }
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
76         {
77                 virtual void Free();
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;
88                 IInArchive *archive;
89                 CInFileStream *file;
90                 IArchiveOpenCallback *callback;
91                 CSysString const path;
92                 UString ustrDefaultName;
93                 NFile::NFind::CFileInfo fileInfo;
94                 Inspector(Format7zDLL::Interface *, LPCTSTR);
95                 void Init(HWND);
96         };
97         virtual Merge7z::Format::Inspector *Open(HWND, LPCTSTR);
98         interface Updater : Merge7z::Format::Updater
99         {
100                 virtual void Free();
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);
110                 void Init(HWND);
111         };
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);
121 };