OSDN Git Service

Initial revision
authorJochen Tucht <jtuc@users.sourceforge.net>
Wed, 7 Jan 2004 19:26:10 +0000 (19:26 +0000)
committerJochen Tucht <jtuc@users.sourceforge.net>
Wed, 7 Jan 2004 19:26:10 +0000 (19:26 +0000)
ArchiveSupport/Merge7z/Merge7z.h [new file with mode: 0755]
ArchiveSupport/Merge7z/Merge7z311.cpp [new file with mode: 0755]
ArchiveSupport/Merge7z/Merge7z311.dsp [new file with mode: 0755]
ArchiveSupport/Merge7z/Merge7z312.dsp [new file with mode: 0755]
ArchiveSupport/Merge7z/Merge7z313.dsp [new file with mode: 0755]
ArchiveSupport/Merge7z/Merge7zCommon.cpp [new file with mode: 0755]
ArchiveSupport/Merge7z/Merge7zCommon.h [new file with mode: 0755]
ArchiveSupport/Merge7z/StdAfx.cpp [new file with mode: 0755]
ArchiveSupport/Merge7z/StdAfx.h [new file with mode: 0755]
ArchiveSupport/Merge7z/tools.cpp [new file with mode: 0755]
ArchiveSupport/Merge7z/tools.h [new file with mode: 0755]

diff --git a/ArchiveSupport/Merge7z/Merge7z.h b/ArchiveSupport/Merge7z/Merge7z.h
new file mode 100755 (executable)
index 0000000..6b3fd87
--- /dev/null
@@ -0,0 +1,67 @@
+interface Merge7z
+{
+       struct Proxy
+       {
+               LPCSTR Merge7z[2];
+               HMODULE handle;
+               interface Merge7z *operator->();
+       };
+       struct Initialize
+       {
+               enum
+               {
+                       Unicode = 1,
+                       Local7z = 2,
+                       Default = sizeof(TCHAR) == sizeof(WCHAR) ? Unicode : 0
+               };
+       };
+       virtual int Initialize(DWORD = Initialize::Default);
+       interface Envelope
+       {
+               virtual void Free() = 0;
+       };
+       interface DirItemEnumerator
+       {
+               struct Item
+               {
+                       struct
+                       {
+                               enum
+                               {
+                                       Attributes = 1,
+                                       CreationTime = 2,
+                                       LastAccessTime = 4,
+                                       LastWriteTime = 8,
+                                       Size = 16,
+                                       Name = 32,
+                                       FullPath = 64,
+                                       CheckIfPresent = 128,
+                                       NeedFindFile = Attributes|CreationTime|LastAccessTime|LastWriteTime|Size|Name
+                               };
+                       } *operator->();
+                       UINT32 Mask;
+                       UINT32 Attributes;
+                       FILETIME CreationTime;
+                       FILETIME LastAccessTime;
+                       FILETIME LastWriteTime;
+                       UINT64 Size;
+                       LPCTSTR Name;
+                       LPCTSTR FullPath;
+               };
+               virtual UINT Open() = 0;
+               virtual Envelope *Enum(Item &) = 0;
+       };
+       interface Format
+       {
+               virtual HRESULT DeCompressArchive(HWND, LPCTSTR path, LPCTSTR folder) = 0;
+               virtual HRESULT CompressArchive(HWND, LPCTSTR path, DirItemEnumerator *) = 0;
+       };
+       Merge7z();
+       Format &Format7z;
+       Format &ZipHandler;
+       Format &RarHandler;
+       Format &BZip2Handler;
+       Format &TarHandler;
+       virtual Format *GuessFormat(LPCTSTR path);
+};
+
diff --git a/ArchiveSupport/Merge7z/Merge7z311.cpp b/ArchiveSupport/Merge7z/Merge7z311.cpp
new file mode 100755 (executable)
index 0000000..ce356a4
--- /dev/null
@@ -0,0 +1,409 @@
+/* File:       Merge7z311.cpp
+ * Author:     Jochen Tucht 2003/12/09
+ *                     Copyright (C) Jochen Tucht
+ *
+ * Purpose:    Provide a handy C++ interface to access 7Zip services
+ *
+ * Remarks:    Based on 7z311 sources. May or may not compile/run with earlier or
+ *                     later versions. See Merge7z311.dsp for dependencies. Some less
+ *                     version-dependent parts of code reside in Merge7zCommon.cpp.
+ *
+ *     *** SECURITY ALERT ***
+ *     Be aware of 2. a) of the GNU General Public License. Please log your changes
+ *     at the end of this comment.
+ *
+ * License:    This program is free software; you can redistribute it and/or modify
+ *                     it under the terms of the GNU General Public License as published by
+ *                     the Free Software Foundation; either version 2 of the License, or
+ *                     (at your option) any later version.
+ *
+ *                     This program is distributed in the hope that it will be useful,
+ *                     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *                     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *                     GNU General Public License for more details.
+ *
+ *                     You should have received a copy of the GNU General Public License
+ *                     along with this program; if not, write to the Free Software
+ *                     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+
+DATE:          BY:                                     DESCRIPTION:
+==========     ==================      ================================================
+
+*/
+
+#include "stdafx.h"
+
+#include "Merge7zCommon.h"
+
+#include "7zip/FileManager/OpenCallback.h"
+#include "7zip/FileManager/ExtractCallback.h"
+#include "7zip/FileManager/UpdateCallback100.h"
+
+/**
+ * @brief Extraction thread
+ */
+class CThreadExtracting : CThread
+{
+protected:
+       DWORD Process()
+       {
+               ExtractCallbackSpec->ProgressDialog.WaitCreating();
+               result = Archive->Extract(0, -1, false, ArchiveExtractCallback);
+               ExtractCallbackSpec->ProgressDialog.MyClose();
+               return 0;
+       }
+       static DWORD WINAPI Process(void *param)
+       {
+               return ((CThreadExtracting *)param)->Process();
+       }
+       CExtractCallbackImp *ExtractCallbackSpec;
+       IInArchive *Archive;
+       IArchiveExtractCallback *ArchiveExtractCallback;
+public:
+       HRESULT result;
+
+       CThreadExtracting
+       (
+               CExtractCallbackImp *ExtractCallbackSpec,
+               IInArchive *Archive,
+               IArchiveExtractCallback *ArchiveExtractCallback,
+               const CSysString &title
+       ):
+               ExtractCallbackSpec(ExtractCallbackSpec),
+               Archive(Archive),
+               ArchiveExtractCallback(ArchiveExtractCallback)
+       {
+               result = E_FAIL;
+               if COMPLAIN(!Create(Process, this))
+               {
+                       Complain(_T("Failed to create extraction thread"));
+               }
+               ExtractCallbackSpec->StartProgressDialog(GetUnicodeString(title));
+       }
+};
+
+/**
+ * @brief Extraction method accessible from outside
+ */
+HRESULT Format7zDLL::Interface::DeCompressArchive(HWND hwndParent, LPCTSTR path, LPCTSTR folder)
+{
+       IInArchive *archive = 0;
+       CInFileStream *file = 0;
+       COpenArchiveCallback *callback = 0;
+       CArchiveExtractCallback *extractCallbackSpec = 0;
+       CExtractCallbackImp *extractCallbackSpec2 = 0;
+       HRESULT result = 0;
+       try
+       {
+               //      Ref counts are not always accurate with 7-Zip.
+               //      An extra AddRef() ensures that interfaces remain valid until they
+               //      are explicitly released at the end of this function.
+               (archive = GetInArchive()) -> AddRef();
+               (file = new CInFileStream) -> AddRef();
+               (callback = new COpenArchiveCallback) -> AddRef();
+               callback->_passwordIsDefined = false;
+               callback->_parentWindow = hwndParent;
+               /*CMyComBSTR password;
+               callback->CryptoGetTextPassword(&password);*/
+               if COMPLAIN(!file->Open(path))
+               {
+                       ComplainCantOpen(path);
+               }
+               if COMPLAIN(archive->Open(file, 0, callback) != S_OK)
+               {
+                       ComplainCantOpen(path);
+               }
+
+               NFile::NFind::CFileInfo fileInfo;
+               if COMPLAIN(!NFile::NFind::FindFile(path, fileInfo))
+               {
+                       ComplainCantOpen(path);
+               }
+
+               if (*folder)
+               {
+                       if COMPLAIN(!NFile::NDirectory::CreateComplexDirectory(folder))
+                       {
+                               Complain(_T("Can not create output directory"));
+                       }
+               }
+
+               //      if path is whatever.tar.bz2, default to whatever.tar:
+               UString ustrDefaultName = GetUnicodeString(path);
+               int dot = ustrDefaultName.ReverseFind('.');
+               int slash = ustrDefaultName.ReverseFind('\\');
+               if (dot > slash)
+               {
+                       if (StrChrW(L"Tt", ustrDefaultName[dot + 1]))
+                       {
+                               ustrDefaultName.ReleaseBuffer(dot + 2);
+                               ustrDefaultName += L"ar";
+                       }
+                       else
+                       {
+                               ustrDefaultName.ReleaseBuffer(dot);
+                       }
+                       ustrDefaultName.Delete(0, slash + 1);
+               }
+               else
+               {
+                       ustrDefaultName = L"noname";
+               }
+
+               (extractCallbackSpec2 = new CExtractCallbackImp) -> AddRef();
+
+               extractCallbackSpec2->Init
+               (
+                       NExtractionMode::NOverwrite::kWithoutPrompt,    // overwriteMode
+                       false,                                                                                  // passwordIsDefined
+                       UString()                                                                               // password
+               );
+
+               extractCallbackSpec2->_parentWindow = hwndParent;
+
+               extractCallbackSpec2->ProgressDialog.MainWindow = 0;
+               (extractCallbackSpec = new CArchiveExtractCallback) -> AddRef();
+
+               extractCallbackSpec->Init
+               (
+                       archive, 
+                       extractCallbackSpec2,
+                       GetUnicodeString(folder),
+                       NExtractionMode::NPath::kFullPathnames, 
+                       NExtractionMode::NOverwrite::kWithoutPrompt,
+                       UStringVector(),
+                       ustrDefaultName, 
+                       fileInfo.LastWriteTime,
+                       fileInfo.Attributes
+               );
+
+               result = CThreadExtracting
+               (
+                       extractCallbackSpec2,
+                       archive,
+                       extractCallbackSpec,
+                       PathFindFileName(path)
+               ).result;
+
+               if COMPLAIN(extractCallbackSpec->_numErrors)
+               {
+                       Complain(_T("%I64u error(s)"), extractCallbackSpec->_numErrors);
+               }
+       }
+       catch (Complain *complain)
+       {
+               result = complain->Alert(hwndParent);
+       }
+       //      Always release interfaces in this order, or else all hell will break
+       //      loose!
+       Release(static_cast<IArchiveExtractCallback*>(extractCallbackSpec));
+       Release(archive);
+       Release(static_cast<IFolderArchiveExtractCallback*>(extractCallbackSpec2));
+       Release(static_cast<IInStream*>(file));
+       Release(static_cast<IArchiveOpenCallback*>(callback));
+       return result;
+}
+
+/**
+ * @brief Compression thread
+ */
+class CThreadUpdateCompress : CThread
+{
+protected:
+       DWORD Process()
+       {
+               updateCallback100->ProgressDialog.WaitCreating();
+               result = outArchive->UpdateItems(file, numItems, updateCallbackSpec);
+               updateCallback100->ProgressDialog.MyClose();
+               return 0;
+       }
+       static DWORD WINAPI Process(void *param)
+       {
+               return ((CThreadUpdateCompress *)param)->Process();
+       }
+       CUpdateCallback100Imp *updateCallback100;
+       IOutArchive *outArchive;
+       CArchiveUpdateCallback *updateCallbackSpec;
+       COutFileStream *file;
+public:
+       HRESULT result;
+       UINT32 numItems;
+       CThreadUpdateCompress
+       (
+               CUpdateCallback100Imp *updateCallback100,
+               IOutArchive *outArchive,
+               CArchiveUpdateCallback *updateCallbackSpec,
+               UINT32 numItems,
+               COutFileStream *file,
+               const CSysString &title
+       ):
+               updateCallback100(updateCallback100),
+               outArchive(outArchive),
+               updateCallbackSpec(updateCallbackSpec),
+               numItems(numItems),
+               file(file)
+       {
+               result = E_FAIL;
+               if COMPLAIN(!Create(Process, this))
+               {
+                       Complain(_T("Failed to create extraction thread"));
+               }
+               updateCallback100->StartProgressDialog(GetUnicodeString(title));
+       }
+};
+
+/**
+ * @brief Compression method accessible from outside
+ */
+HRESULT Format7zDLL::Interface::CompressArchive(HWND hwndParent, LPCTSTR path, Merge7z::DirItemEnumerator *etor)
+{
+       UINT codePage = AreFileApisANSI() ? CP_ACP : CP_OEMCP;
+       IOutArchive *outArchive = 0;
+       COutFileStream *file = 0;
+       COpenArchiveCallback *callback = 0;
+       CArchiveUpdateCallback *updateCallbackSpec = 0;
+       CUpdateCallback100Imp *updateCallback100 = 0;
+       HRESULT result = 0;
+       try
+       {
+               //      Ref counts are not always accurate with 7-Zip.
+               //      An extra AddRef() ensures that interfaces remain valid until they
+               //      are explicitly released at the end of this function.
+               (outArchive = GetOutArchive()) -> AddRef();
+               (file = new COutFileStream) -> AddRef();
+               (callback = new COpenArchiveCallback) -> AddRef();
+               callback->_passwordIsDefined = false;
+               callback->_parentWindow = hwndParent;
+               /*CMyComBSTR password;
+               callback->CryptoGetTextPassword(&password);*/
+               if COMPLAIN(!file->Open(path))
+               {
+                       ComplainCantOpen(path);
+               }
+               (updateCallbackSpec = new CArchiveUpdateCallback) -> AddRef();
+               (updateCallback100 = new CUpdateCallback100Imp) -> AddRef();
+               updateCallback100->Init
+               (
+                       hwndParent,
+                       false,                                                                                  // passwordIsDefined
+                       UString()                                                                               // password
+               );
+               NFileTimeType::EEnum fileTimeType;
+               UINT32 value;
+               if COMPLAIN(outArchive->GetFileTimeType(&value) != S_OK)
+               {
+                       ComplainCantOpen(path);
+               }
+               switch(value)
+               {
+               case NFileTimeType::kWindows:
+               case NFileTimeType::kDOS:
+               case NFileTimeType::kUnix:
+                       fileTimeType = NFileTimeType::EEnum(value);
+                       break;
+               default:
+                       ComplainCantOpen(path);
+               }
+
+               CObjectVector<CUpdatePair2> operationChain;
+               CObjectVector<CArchiveItem> archiveItems;
+               CObjectVector<CDirItem> dirItems;
+
+               UINT count = etor->Open();
+               dirItems.Reserve(count);
+               while (count--)
+               {
+                       Merge7z::DirItemEnumerator::Item etorItem;
+                       etorItem.Mask = 0;
+                       Merge7z::Envelope *envelope = etor->Enum(etorItem);
+                       CDirItem item;
+                       if (etorItem.Mask & etorItem->Name)
+                               item.Name = GetUnicodeString(etorItem.Name);
+                       if (etorItem.Mask & etorItem->FullPath)
+                               item.FullPath = GetUnicodeString(etorItem.FullPath);
+                       if (etorItem.Mask & etorItem->Attributes)
+                               item.Attributes = etorItem.Attributes;
+                       if (etorItem.Mask & etorItem->Size)
+                               item.Size = etorItem.Size;
+                       if (etorItem.Mask & etorItem->CreationTime)
+                               item.CreationTime = etorItem.CreationTime;
+                       if (etorItem.Mask & etorItem->LastAccessTime)
+                               item.LastAccessTime = etorItem.LastAccessTime;
+                       if (etorItem.Mask & etorItem->LastWriteTime)
+                               item.LastWriteTime = etorItem.LastWriteTime;
+                       if (envelope)
+                       {
+                               envelope->Free();
+                       }
+                       if (etorItem.Mask && (etorItem.Mask & (etorItem->NeedFindFile|etorItem->CheckIfPresent)) != etorItem->NeedFindFile)
+                       {
+                               NFile::NFind::CFileInfoW fileInfo;
+                               if (NFile::NFind::FindFile(item.FullPath, fileInfo))
+                               {
+                                       if (!(etorItem.Mask & etorItem->Name))
+                                               item.Name = fileInfo.Name;
+                                       if (!(etorItem.Mask & etorItem->Attributes))
+                                               item.Attributes = fileInfo.Attributes;
+                                       if (!(etorItem.Mask & etorItem->Size))
+                                               item.Size = fileInfo.Size;
+                                       if (!(etorItem.Mask & etorItem->CreationTime))
+                                               item.CreationTime = fileInfo.CreationTime;
+                                       if (!(etorItem.Mask & etorItem->LastAccessTime))
+                                               item.LastAccessTime = fileInfo.LastAccessTime;
+                                       if (!(etorItem.Mask & etorItem->LastWriteTime))
+                                               item.LastWriteTime = fileInfo.LastWriteTime;
+                               }
+                               else
+                               {
+                                       if COMPLAIN(!(etorItem.Mask & etorItem->CheckIfPresent))
+                                       {
+                                               ComplainCantOpen(GetSystemString(item.FullPath));
+                                       }
+                                       etorItem.Mask = 0;
+                               }
+                       }
+                       if (etorItem.Mask)
+                       {
+                               CUpdatePair2 pair2;
+                               pair2.IsAnti = false;
+                               pair2.DirItemIndex = dirItems.Add(item);
+                               pair2.ExistInArchive = false;
+                               pair2.ExistOnDisk = true;
+                               pair2.NewData = pair2.NewProperties = true;
+                               operationChain.Add(pair2);
+                       }
+               }
+
+               updateCallbackSpec->Init(UString()/*folderPrefix*/, &dirItems, &archiveItems, 
+                       &operationChain, NULL, updateCallback100);
+
+               result = CThreadUpdateCompress
+               (
+                       updateCallback100,
+                       outArchive,
+                       updateCallbackSpec,
+                       operationChain.Size(),
+                       file,
+                       PathFindFileName(path)
+               ).result;
+
+               //result = outArchive->UpdateItems(file, operationChain.Size(), updateCallbackSpec);
+               if COMPLAIN(result != S_OK)
+               {
+                       ComplainCantOpen(path);
+               }
+       }
+       catch (Complain *complain)
+       {
+               result = complain->Alert(hwndParent);
+       }
+       //      Always release interfaces in this order, or else all hell will break
+       //      loose!
+       Release(static_cast<IArchiveUpdateCallback*>(updateCallbackSpec));
+       Release(outArchive);
+       Release(static_cast<IFolderArchiveUpdateCallback*>(updateCallback100));
+       Release(static_cast<IOutStream*>(file));
+       Release(static_cast<IArchiveOpenCallback*>(callback));
+       return result;
+}
diff --git a/ArchiveSupport/Merge7z/Merge7z311.dsp b/ArchiveSupport/Merge7z/Merge7z311.dsp
new file mode 100755 (executable)
index 0000000..41cc81f
--- /dev/null
@@ -0,0 +1,525 @@
+# Microsoft Developer Studio Project File - Name="Merge7z311" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Merge7z311 - Win32 UnicodeDebug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "Merge7z311.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "Merge7z311.mak" CFG="Merge7z311 - Win32 UnicodeDebug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "Merge7z311 - Win32 Release" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Merge7z311 - Win32 Debug" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Merge7z311 - Win32 UnicodeDebug" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Merge7z311 - Win32 UnicodeRelease" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Merge7z311 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Merge7z311___Win32_Release"
+# PROP Intermediate_Dir "Merge7z311___Win32_Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../7z311" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z311_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../Build/MergeRelease/Merge7z311.dll"
+
+!ELSEIF  "$(CFG)" == "Merge7z311 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Merge7z311___Win32_Debug"
+# PROP Intermediate_Dir "Merge7z311___Win32_Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /vd0 /GX /Z7 /Od /I "../../7z311" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z311_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"../Build/MergeDebug/Merge7z311.dll"
+# SUBTRACT LINK32 /map
+
+!ELSEIF  "$(CFG)" == "Merge7z311 - Win32 UnicodeDebug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Merge7z311___Win32_UnicodeDebug"
+# PROP BASE Intermediate_Dir "Merge7z311___Win32_UnicodeDebug"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Merge7z311___Win32_UnicodeDebug"
+# PROP Intermediate_Dir "Merge7z311___Win32_UnicodeDebug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /vd0 /GX /Z7 /Od /I "../../7z311" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /vd0 /GX /Z7 /Od /I "../../7z311" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z311_EXPORTS" /D "UNICODE" /D "_UNICODE" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /map /debug /machine:I386 /out:"../Build/MergeDebug/Merge7z311.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"../Build/MergeUnicodeDebug/Merge7z311U.dll"
+# SUBTRACT LINK32 /map
+
+!ELSEIF  "$(CFG)" == "Merge7z311 - Win32 UnicodeRelease"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Merge7z311___Win32_UnicodeRelease"
+# PROP BASE Intermediate_Dir "Merge7z311___Win32_UnicodeRelease"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Merge7z311___Win32_UnicodeRelease"
+# PROP Intermediate_Dir "Merge7z311___Win32_UnicodeRelease"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../7z311" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../7z311" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z311_EXPORTS" /D "UNICODE" /D "_UNICODE" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../Build/MergeRelease/Merge7z311.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../Build/MergeUnicodeRelease/Merge7z311U.dll"
+
+!ENDIF 
+
+# Begin Target
+
+# Name "Merge7z311 - Win32 Release"
+# Name "Merge7z311 - Win32 Debug"
+# Name "Merge7z311 - Win32 UnicodeDebug"
+# Name "Merge7z311 - Win32 UnicodeRelease"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Merge7z.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Merge7z311.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Merge7zCommon.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Merge7zCommon.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\tools.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\tools.h
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Ressourcendateien"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Ui\Gui\FM.ico
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\UI\GUI\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Ui\Gui\resource.rc
+# End Source File
+# End Group
+# Begin Group "Windows"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\DLL.cpp
+
+!IF  "$(CFG)" == "Merge7z311 - Win32 Release"
+
+!ELSEIF  "$(CFG)" == "Merge7z311 - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "Merge7z311 - Win32 UnicodeDebug"
+
+!ELSEIF  "$(CFG)" == "Merge7z311 - Win32 UnicodeRelease"
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\DLL.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\FileIO.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\FileIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\PropVariant.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\PropVariant.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\PropVariantConversions.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\PropVariantConversions.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\ResourceString.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\ResourceString.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\Synchronization.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\Synchronization.h
+# End Source File
+# End Group
+# Begin Group "Common"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\IntToString.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\IntToString.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\Lang.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\Lang.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\StdInStream.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\StdInStream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\String.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\String.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\StringConvert.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\StringConvert.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\TextConfig.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\TextConfig.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\UTFConvert.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\UTFConvert.h
+# End Source File
+# End Group
+# Begin Group "7zip Common"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Ui\Agent\ArchiveExtractCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\UI\Agent\ArchiveExtractCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Ui\Agent\ArchiveUpdateCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\UI\Agent\ArchiveUpdateCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\Control\Dialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\Control\Dialog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\ExtractCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\ExtractCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Common\FileStreams.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Common\FileStreams.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\FormatUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\FormatUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\LangUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\LangUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\Resource\MessagesDialog\MessagesDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\OpenCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\OpenCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\Resource\OverwriteDialog\OverwriteDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\Resource\PasswordDialog\PasswordDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\Resource\PasswordDialog\PasswordDialog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\Resource\ProgressDialog2\ProgressDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\Resource\ProgressDialog2\ProgressDialog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\Registry.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\Registry.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\RegistryUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\RegistryUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\FileManager\UpdateCallback100.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\Window.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\Window.h
+# End Source File
+# End Group
+# Begin Group "Extract"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Ui\Common\ExtractingFilePath.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\UI\Common\ExtractingFilePath.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\FileDir.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\FileDir.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\FileFind.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\FileFind.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\FileName.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\FileName.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Common\FilePathAutoRename.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Common\FilePathAutoRename.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\System.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Windows\System.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\Vector.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\Vector.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\Wildcard.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z311\Common\Wildcard.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\7z311\7zip\Ui\Gui\7zG.exe.manifest
+# End Source File
+# End Target
+# End Project
diff --git a/ArchiveSupport/Merge7z/Merge7z312.dsp b/ArchiveSupport/Merge7z/Merge7z312.dsp
new file mode 100755 (executable)
index 0000000..49b72bc
--- /dev/null
@@ -0,0 +1,525 @@
+# Microsoft Developer Studio Project File - Name="Merge7z312" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Merge7z312 - Win32 UnicodeDebug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "Merge7z312.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "Merge7z312.mak" CFG="Merge7z312 - Win32 UnicodeDebug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "Merge7z312 - Win32 Release" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Merge7z312 - Win32 Debug" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Merge7z312 - Win32 UnicodeDebug" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Merge7z312 - Win32 UnicodeRelease" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Merge7z312 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Merge7z312___Win32_Release"
+# PROP Intermediate_Dir "Merge7z312___Win32_Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../7z312" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7z312_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../Build/MergeRelease/Merge7z312.dll"
+
+!ELSEIF  "$(CFG)" == "Merge7z312 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Merge7z312___Win32_Debug"
+# PROP Intermediate_Dir "Merge7z312___Win32_Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /vd0 /GX /Z7 /Od /I "../../7z312" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7z312_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"../Build/MergeDebug/Merge7z312.dll"
+# SUBTRACT LINK32 /map
+
+!ELSEIF  "$(CFG)" == "Merge7z312 - Win32 UnicodeDebug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Merge7z312___Win32_UnicodeDebug"
+# PROP BASE Intermediate_Dir "Merge7z312___Win32_UnicodeDebug"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Merge7z312___Win32_UnicodeDebug"
+# PROP Intermediate_Dir "Merge7z312___Win32_UnicodeDebug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /vd0 /GX /Z7 /Od /I "../../7z312" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /vd0 /GX /Z7 /Od /I "../../7z312" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7z312_EXPORTS" /D "UNICODE" /D "_UNICODE" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /map /debug /machine:I386 /out:"../Build/MergeDebug/Merge7z312.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"../Build/MergeUnicodeDebug/Merge7z312U.dll"
+# SUBTRACT LINK32 /map
+
+!ELSEIF  "$(CFG)" == "Merge7z312 - Win32 UnicodeRelease"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Merge7z312___Win32_UnicodeRelease"
+# PROP BASE Intermediate_Dir "Merge7z312___Win32_UnicodeRelease"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Merge7z312___Win32_UnicodeRelease"
+# PROP Intermediate_Dir "Merge7z312___Win32_UnicodeRelease"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../7z312" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../7z312" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7z312_EXPORTS" /D "UNICODE" /D "_UNICODE" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../Build/MergeRelease/Merge7z312.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../Build/MergeUnicodeRelease/Merge7z312U.dll"
+
+!ENDIF 
+
+# Begin Target
+
+# Name "Merge7z312 - Win32 Release"
+# Name "Merge7z312 - Win32 Debug"
+# Name "Merge7z312 - Win32 UnicodeDebug"
+# Name "Merge7z312 - Win32 UnicodeRelease"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Merge7z.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Merge7z311.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Merge7zCommon.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Merge7zCommon.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\tools.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\tools.h
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Ressourcendateien"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Ui\Gui\FM.ico
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\UI\GUI\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Ui\Gui\resource.rc
+# End Source File
+# End Group
+# Begin Group "Windows"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\DLL.cpp
+
+!IF  "$(CFG)" == "Merge7z312 - Win32 Release"
+
+!ELSEIF  "$(CFG)" == "Merge7z312 - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "Merge7z312 - Win32 UnicodeDebug"
+
+!ELSEIF  "$(CFG)" == "Merge7z312 - Win32 UnicodeRelease"
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\DLL.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\FileIO.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\FileIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\PropVariant.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\PropVariant.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\PropVariantConversions.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\PropVariantConversions.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\ResourceString.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\ResourceString.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\Synchronization.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\Synchronization.h
+# End Source File
+# End Group
+# Begin Group "Common"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\IntToString.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\IntToString.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\Lang.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\Lang.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\StdInStream.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\StdInStream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\String.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\String.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\StringConvert.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\StringConvert.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\TextConfig.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\TextConfig.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\UTFConvert.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\UTFConvert.h
+# End Source File
+# End Group
+# Begin Group "7zip Common"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Ui\Agent\ArchiveExtractCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\UI\Agent\ArchiveExtractCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Ui\Agent\ArchiveUpdateCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\UI\Agent\ArchiveUpdateCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\Control\Dialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\Control\Dialog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\ExtractCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\ExtractCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Common\FileStreams.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Common\FileStreams.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\FormatUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\FormatUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\LangUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\LangUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\Resource\MessagesDialog\MessagesDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\OpenCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\OpenCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\Resource\OverwriteDialog\OverwriteDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\Resource\PasswordDialog\PasswordDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\Resource\PasswordDialog\PasswordDialog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\Resource\ProgressDialog2\ProgressDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\Resource\ProgressDialog2\ProgressDialog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\Registry.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\Registry.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\RegistryUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\RegistryUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\FileManager\UpdateCallback100.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\Window.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\Window.h
+# End Source File
+# End Group
+# Begin Group "Extract"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Ui\Common\ExtractingFilePath.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\UI\Common\ExtractingFilePath.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\FileDir.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\FileDir.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\FileFind.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\FileFind.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\FileName.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\FileName.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Common\FilePathAutoRename.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Common\FilePathAutoRename.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\System.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Windows\System.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\Vector.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\Vector.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\Wildcard.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z312\Common\Wildcard.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\7z312\7zip\Ui\Gui\7zG.exe.manifest
+# End Source File
+# End Target
+# End Project
diff --git a/ArchiveSupport/Merge7z/Merge7z313.dsp b/ArchiveSupport/Merge7z/Merge7z313.dsp
new file mode 100755 (executable)
index 0000000..9f6aa1d
--- /dev/null
@@ -0,0 +1,525 @@
+# Microsoft Developer Studio Project File - Name="Merge7z313" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Merge7z313 - Win32 UnicodeDebug
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
+!MESSAGE 
+!MESSAGE NMAKE /f "Merge7z313.mak".
+!MESSAGE 
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
+!MESSAGE 
+!MESSAGE NMAKE /f "Merge7z313.mak" CFG="Merge7z313 - Win32 UnicodeDebug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "Merge7z313 - Win32 Release" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Merge7z313 - Win32 Debug" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Merge7z313 - Win32 UnicodeDebug" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Merge7z313 - Win32 UnicodeRelease" (basierend auf  "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Merge7z313 - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Merge7z313___Win32_Release"
+# PROP Intermediate_Dir "Merge7z313___Win32_Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../7z313" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7z313_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../Build/MergeRelease/Merge7z313.dll"
+
+!ELSEIF  "$(CFG)" == "Merge7z313 - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Merge7z313___Win32_Debug"
+# PROP Intermediate_Dir "Merge7z313___Win32_Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /vd0 /GX /Z7 /Od /I "../../7z313" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7z313_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"../Build/MergeDebug/Merge7z313.dll"
+# SUBTRACT LINK32 /map
+
+!ELSEIF  "$(CFG)" == "Merge7z313 - Win32 UnicodeDebug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Merge7z313___Win32_UnicodeDebug"
+# PROP BASE Intermediate_Dir "Merge7z313___Win32_UnicodeDebug"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Merge7z313___Win32_UnicodeDebug"
+# PROP Intermediate_Dir "Merge7z313___Win32_UnicodeDebug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /vd0 /GX /Z7 /Od /I "../../7z313" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /MTd /W3 /vd0 /GX /Z7 /Od /I "../../7z313" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7z313_EXPORTS" /D "UNICODE" /D "_UNICODE" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "_DEBUG"
+# ADD RSC /l 0x407 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /map /debug /machine:I386 /out:"../Build/MergeDebug/Merge7z313.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /debug /machine:I386 /out:"../Build/MergeUnicodeDebug/Merge7z313U.dll"
+# SUBTRACT LINK32 /map
+
+!ELSEIF  "$(CFG)" == "Merge7z313 - Win32 UnicodeRelease"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Merge7z313___Win32_UnicodeRelease"
+# PROP BASE Intermediate_Dir "Merge7z313___Win32_UnicodeRelease"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Merge7z313___Win32_UnicodeRelease"
+# PROP Intermediate_Dir "Merge7z313___Win32_UnicodeRelease"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /I "../../7z313" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7Z310_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../7z313" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MERGE7z313_EXPORTS" /D "UNICODE" /D "_UNICODE" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x407 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../Build/MergeRelease/Merge7z313.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shlwapi.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /pdb:none /machine:I386 /out:"../Build/MergeUnicodeRelease/Merge7z313U.dll"
+
+!ENDIF 
+
+# Begin Target
+
+# Name "Merge7z313 - Win32 Release"
+# Name "Merge7z313 - Win32 Debug"
+# Name "Merge7z313 - Win32 UnicodeDebug"
+# Name "Merge7z313 - Win32 UnicodeRelease"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Merge7z.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Merge7z311.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Merge7zCommon.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Merge7zCommon.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\tools.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\tools.h
+# End Source File
+# End Group
+# Begin Group "Header-Dateien"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Ressourcendateien"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Ui\Gui\FM.ico
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\UI\GUI\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Ui\Gui\resource.rc
+# End Source File
+# End Group
+# Begin Group "Windows"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\DLL.cpp
+
+!IF  "$(CFG)" == "Merge7z313 - Win32 Release"
+
+!ELSEIF  "$(CFG)" == "Merge7z313 - Win32 Debug"
+
+# PROP Exclude_From_Build 1
+
+!ELSEIF  "$(CFG)" == "Merge7z313 - Win32 UnicodeDebug"
+
+!ELSEIF  "$(CFG)" == "Merge7z313 - Win32 UnicodeRelease"
+
+!ENDIF 
+
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\DLL.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\FileIO.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\FileIO.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\PropVariant.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\PropVariant.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\PropVariantConversions.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\PropVariantConversions.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\ResourceString.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\ResourceString.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\Synchronization.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\Synchronization.h
+# End Source File
+# End Group
+# Begin Group "Common"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\IntToString.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\IntToString.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\Lang.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\Lang.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\StdInStream.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\StdInStream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\String.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\String.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\StringConvert.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\StringConvert.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\TextConfig.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\TextConfig.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\UTFConvert.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\UTFConvert.h
+# End Source File
+# End Group
+# Begin Group "7zip Common"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Ui\Agent\ArchiveExtractCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\UI\Agent\ArchiveExtractCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Ui\Agent\ArchiveUpdateCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\UI\Agent\ArchiveUpdateCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\Control\Dialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\Control\Dialog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\ExtractCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\ExtractCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Common\FileStreams.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Common\FileStreams.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\FormatUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\FormatUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\LangUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\LangUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\Resource\MessagesDialog\MessagesDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\OpenCallback.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\OpenCallback.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\Resource\OverwriteDialog\OverwriteDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\Resource\PasswordDialog\PasswordDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\Resource\PasswordDialog\PasswordDialog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\Resource\ProgressDialog2\ProgressDialog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\Resource\ProgressDialog2\ProgressDialog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\Registry.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\Registry.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\RegistryUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\RegistryUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\FileManager\UpdateCallback100.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\Window.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\Window.h
+# End Source File
+# End Group
+# Begin Group "Extract"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Ui\Common\ExtractingFilePath.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\UI\Common\ExtractingFilePath.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\FileDir.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\FileDir.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\FileFind.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\FileFind.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\FileName.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\FileName.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Common\FilePathAutoRename.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Common\FilePathAutoRename.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\System.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Windows\System.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\Vector.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\Vector.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\Wildcard.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\7z313\Common\Wildcard.h
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=..\..\7z313\7zip\Ui\Gui\7zG.exe.manifest
+# End Source File
+# End Target
+# End Project
diff --git a/ArchiveSupport/Merge7z/Merge7zCommon.cpp b/ArchiveSupport/Merge7z/Merge7zCommon.cpp
new file mode 100755 (executable)
index 0000000..2e1ad62
--- /dev/null
@@ -0,0 +1,290 @@
+/* File:       Merge7zCommon.cpp
+ * Author:     Jochen Tucht 2003/12/09
+ *                     Copyright (C) Jochen Tucht
+ *
+ * Purpose:    Provide a handy C++ interface to access 7Zip services
+ *
+ * Remarks:    This file contains the presumably version-independent parts of
+ *                     Merge7z code. Version specific code resides in Merge7zXXX.cpp.
+ *
+ *     *** SECURITY ALERT ***
+ *     Be aware of 2. a) of the GNU General Public License. Please log your changes
+ *     at the end of this comment.
+ *
+ * License:    This program is free software; you can redistribute it and/or modify
+ *                     it under the terms of the GNU General Public License as published by
+ *                     the Free Software Foundation; either version 2 of the License, or
+ *                     (at your option) any later version.
+ *
+ *                     This program is distributed in the hope that it will be useful,
+ *                     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *                     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *                     GNU General Public License for more details.
+ *
+ *                     You should have received a copy of the GNU General Public License
+ *                     along with this program; if not, write to the Free Software
+ *                     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+
+DATE:          BY:                                     DESCRIPTION:
+==========     ==================      ================================================
+2003/12/16     Jochen Tucht            GuessFormat() now checks for directory
+
+*/
+
+#include "stdafx.h"
+
+#define INITGUID
+#include <initguid.h>
+
+#include "Merge7zCommon.h"
+
+HINSTANCE g_hInstance;
+DWORD g_dwFlags;
+CHAR g_cPath7z[MAX_PATH];
+
+/**
+ * @brief Dll entry point
+ */
+BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD, LPVOID)
+{
+       g_hInstance = hModule;
+       return TRUE;
+}
+
+/**
+ * @brief Load a dll and import a number of functions.
+ */
+static HMODULE DllProxyHelper(LPCSTR *export, ...)
+{
+       HMODULE handle = 0;
+       if (LPCSTR format = *export)
+       {
+               char path[MAX_PATH];
+               FormatMessageA
+               (
+                       FORMAT_MESSAGE_FROM_STRING | FORMAT_MESSAGE_ARGUMENT_ARRAY,
+                       format,
+                       0,
+                       0,
+                       path,
+                       sizeof path,
+                       (va_list *)(&export + 1)
+               );
+               handle = LoadLibraryA(path);
+               if COMPLAIN(handle == 0)
+               {
+                       ComplainNotFound(GetSystemString(path));
+               }
+               *export = 0;
+               while (LPCSTR name = *++export)
+               {
+                       *export = (LPCSTR)GetProcAddress(handle, name);
+                       if COMPLAIN(*export == 0)
+                       {
+                               ComplainNotFound(GetSystemString(name));
+                       }
+               }
+               *export = (LPCSTR)handle;
+       }
+       return handle;
+}
+
+/**
+ * @brief Access archiver dll functions through proxy.
+ */
+struct Format7zDLL *Format7zDLL::Proxy::operator->()
+{
+       DllProxyHelper(Format7zDLL, g_cPath7z);
+       return (struct Format7zDLL *)Format7zDLL;
+}
+
+/**
+ * @brief Ask archiver dll for an instance of IInArchive.
+ */
+IInArchive *Format7zDLL::Interface::GetInArchive()
+{
+       void *pv;
+       if COMPLAIN(proxy->CreateObject(proxy.clsid, &IID_IInArchive, &pv) != S_OK)
+       {
+               ComplainCreateObject(proxy.handle, _T("IInArchive"));
+       }
+       return static_cast<IInArchive *>(pv);
+}
+
+/**
+ * @brief Ask archiver dll for an instance of IOutArchive.
+ */
+IOutArchive *Format7zDLL::Interface::GetOutArchive()
+{
+       void *pv;
+       if COMPLAIN(proxy->CreateObject(proxy.clsid, &IID_IOutArchive, &pv) != S_OK)
+       {
+               ComplainCreateObject(proxy.handle, _T("IOutArchive"));
+       }
+       return static_cast<IOutArchive *>(pv);
+}
+
+/**
+ * @brief Initialize the library.
+ */
+int Merge7z::Initialize(DWORD dwFlags)
+{
+       g_dwFlags = dwFlags;
+       if (dwFlags & Initialize::Local7z)
+       {
+               GetModuleFileNameA(g_hInstance, g_cPath7z, sizeof g_cPath7z);
+               PathRemoveFileSpecA(g_cPath7z);
+       }
+       else
+       {
+               DWORD type = 0;
+               DWORD size = sizeof g_cPath7z;
+               SHGetValueA(HKEY_LOCAL_MACHINE, "Software\\7-Zip", "Path", &type, g_cPath7z, &size);
+       }
+       PathAppendA(g_cPath7z, "Formats");
+       return 0;
+}
+
+#define        DEFINE_FORMAT(name, dll, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+               EXTERN_C const GUID CLSID_##name \
+                               = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }; \
+               Format7zDLL::Proxy PROXY_##name = \
+               { \
+                       "%1\\" dll, \
+                       "CreateObject", \
+                       (HMODULE)0, \
+                       &CLSID_##name \
+               }; \
+               Format7zDLL::Interface name = PROXY_##name;
+       
+/* this is how DEFINE_FORMAT expands:
+DEFINE_GUID(CLSID_CFormat7z,
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x05, 0x00, 0x00);
+
+Format7zDLL::Proxy PROXY_CFormat7z =
+{
+       "%1\\7Z.DLL",
+       "CreateObject",
+       (HMODULE)0,
+       &CLSID_CFormat7z
+};
+
+Format7zDLL::Interface CFormat7z = PROXY_CFormat7z;/**/
+
+DEFINE_FORMAT(CFormat7z, "7Z.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x05, 0x00, 0x00);
+DEFINE_FORMAT(CArjHandler, "ARJ.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x0A, 0x00, 0x00);
+DEFINE_FORMAT(CBZip2Handler, "BZ2.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x07, 0x00, 0x00);
+DEFINE_FORMAT(CCabHandler, "CAB.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x06, 0x00, 0x00);
+DEFINE_FORMAT(CCpioHandler, "CPIO.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x08, 0x00, 0x00);
+DEFINE_FORMAT(CDebHandler, "DEB.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x0C, 0x00, 0x00);
+DEFINE_FORMAT(CGZipHandler, "GZ.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x03, 0x00, 0x00);
+DEFINE_FORMAT(CRarHandler, "RAR.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x02, 0x00, 0x00);
+DEFINE_FORMAT(CRpmHandler, "RPM.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x09, 0x00, 0x00);
+DEFINE_FORMAT(CSplitHandler, "SPLIT.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x0B, 0x00, 0x00);
+DEFINE_FORMAT(CTarHandler, "TAR.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x04, 0x00, 0x00);
+DEFINE_FORMAT(CZipHandler, "ZIP.DLL",
+       0x23170F69, 0x40C1, 0x278A, 0x10, 0x00, 0x00, 0x01, 0x10, 0x01, 0x00, 0x00);
+
+/**
+ * @brief Construct Merge7z interface.
+ */
+Merge7z::Merge7z():
+Format7z(CFormat7z),
+ZipHandler(CZipHandler),
+RarHandler(CRarHandler),
+BZip2Handler(CBZip2Handler),
+TarHandler(CTarHandler)
+{
+}
+
+/**
+ * @brief Figure out which archiver dll to use for a given archive.
+ */
+Merge7z::Format *Merge7z::GuessFormat(LPCTSTR path)
+{
+       if (PathIsDirectory(path))
+               return 0;
+       ENUM_LIST
+       (
+               EnumList,
+               _ENUM(7Z)
+               ENUM(ZIP)
+               ENUM(JAR)
+               ENUM(XPI)
+               ENUM(RAR)
+               ENUM(BZ2)
+               ENUM(TAR)
+               ENUM(GZ)
+               ENUM(TGZ)
+               ENUM(CAB)
+               ENUM(ARJ)
+               ENUM(CPIO)
+               ENUM(DEB)
+               ENUM(RPM)
+               _ENUM(001)
+       );
+       Format *pFormat = 0;
+       switch (EnumList->Find(PathFindExtension(path), FALSE))
+       {
+       case EnumList::_7Z:
+               pFormat = &CFormat7z;
+               break;
+       case EnumList::ZIP:
+       case EnumList::JAR:
+       case EnumList::XPI:
+               pFormat = &CZipHandler;
+               break;
+       case EnumList::RAR:
+               pFormat = &CRarHandler;
+               break;
+       case EnumList::BZ2:
+               pFormat = &CBZip2Handler;
+               break;
+       case EnumList::TAR:
+               pFormat = &CTarHandler;
+               break;
+       case EnumList::GZ:
+       case EnumList::TGZ:
+               pFormat = &CGZipHandler;
+               break;
+       case EnumList::CAB:
+               pFormat = &CCabHandler;
+               break;
+       case EnumList::ARJ:
+               pFormat = &CArjHandler;
+               break;
+       case EnumList::CPIO:
+               pFormat = &CCpioHandler;
+               break;
+       case EnumList::DEB:
+               pFormat = &CDebHandler;
+               break;
+       case EnumList::RPM:
+               pFormat = &CRpmHandler;
+               break;
+       case EnumList::_001:
+               pFormat = &CSplitHandler;
+               break;
+       }
+       return pFormat;
+}
+
+/**
+ * @brief Export instance of Merge7z interface.
+ */
+EXTERN_C
+{
+       __declspec(dllexport) Merge7z Merge7z;
+}
diff --git a/ArchiveSupport/Merge7z/Merge7zCommon.h b/ArchiveSupport/Merge7z/Merge7zCommon.h
new file mode 100755 (executable)
index 0000000..8113882
--- /dev/null
@@ -0,0 +1,58 @@
+// includes from 7-Zip sources
+#include "7zip/Archive/IArchive.h"
+#include "7zip/UI/Agent/ArchiveExtractCallback.h"
+#include "7zip/UI/Agent/ArchiveUpdateCallback.h"
+#include "Common/StringConvert.h"
+#include "Windows/PropVariant.h"
+#include "Windows/PropVariantConversions.h"
+#include "Windows/FileDir.h"
+#include "Windows/Thread.h"
+// Merge7z includes
+#include "tools.h"
+#include "Merge7z.h"
+
+using namespace NWindows;
+
+extern HINSTANCE g_hInstance;
+extern DWORD g_dwFlags;
+extern CHAR g_cPath7z[MAX_PATH];
+
+typedef UINT32 (WINAPI * CreateObjectFunc)(
+    const GUID *clsID, 
+    const GUID *interfaceID, 
+    void **outObject);
+
+struct Format7zDLL
+{
+       HMODULE origin;
+       CreateObjectFunc CreateObject;
+       HMODULE handle;
+       const CLSID *clsid;
+       struct Proxy;
+       interface Interface;
+};
+
+struct Format7zDLL::Proxy
+{
+       LPCSTR Format7zDLL
+       [
+               &((struct Format7zDLL *)0)->handle
+       -       &((struct Format7zDLL *)0)->origin
+       ];
+       HMODULE handle;
+       const CLSID *clsid;
+       struct Format7zDLL *operator->();
+};
+
+interface Format7zDLL::Interface : Merge7z::Format
+{
+       Proxy &proxy;
+       Interface(Proxy &proxy):proxy(proxy)
+       {
+       }
+       virtual IInArchive *GetInArchive();
+       virtual HRESULT DeCompressArchive(HWND, LPCTSTR path, LPCTSTR folder);
+       virtual IOutArchive *GetOutArchive();
+       virtual HRESULT CompressArchive(HWND, LPCTSTR path, Merge7z::DirItemEnumerator *);
+};
+
diff --git a/ArchiveSupport/Merge7z/StdAfx.cpp b/ArchiveSupport/Merge7z/StdAfx.cpp
new file mode 100755 (executable)
index 0000000..8d364ca
--- /dev/null
@@ -0,0 +1,8 @@
+// stdafx.cpp : Quelltextdatei, die nur die Standard-Includes einbindet
+//     Merge7z.pch ist die vorkompilierte Header-Datei
+//     stdafx.obj enthält die vorkompilierte Typinformation
+
+#include "stdafx.h"
+
+// ZU ERLEDIGEN: Verweis auf alle zusätzlichen Header-Dateien, die Sie in STDAFX.H
+// und nicht in dieser Datei benötigen
diff --git a/ArchiveSupport/Merge7z/StdAfx.h b/ArchiveSupport/Merge7z/StdAfx.h
new file mode 100755 (executable)
index 0000000..0a29b83
--- /dev/null
@@ -0,0 +1,42 @@
+#include <limits.h>
+#include <windows.h>
+#include <shlwapi.h>
+#include <commctrl.h>
+#include <basetyps.h>
+#include <vector>
+//<jtuc>
+//-    help 7z sources compile with old SDK headers
+#ifndef GWLP_WNDPROC
+typedef INT_PTR LONG_PTR;
+
+#define SetWindowLongPtr SetWindowLong
+#define GetWindowLongPtr GetWindowLong
+
+#define GWLP_WNDPROC GWL_WNDPROC
+#define GWLP_USERDATA GWL_USERDATA
+#define DWLP_MSGRESULT DWL_MSGRESULT
+//#define BIF_NEWDIALOGSTYLE 0
+//#define BTNS_BUTTON 0        
+#endif
+
+#ifndef ListView_SetCheckState
+#define        ListView_SetCheckState(hLv, iItem, bCheck) ListView_SetItemState(hLv, iItem, bCheck ? INDEXTOSTATEIMAGEMASK(2) : INDEXTOSTATEIMAGEMASK(1), LVIS_STATEIMAGEMASK)
+#endif
+//</jtuc>
+
+#define LANG        
+
+// the following defines control how ReadArchiverInfoList() will collect the
+// list of available formats.
+
+/*#define EXCLUDE_COM
+#define FORMAT_7Z
+#define FORMAT_BZIP2
+#define FORMAT_GZIP
+#define FORMAT_TAR
+#define FORMAT_ZIP
+#define FORMAT_CPIO
+#define FORMAT_RPM
+#define FORMAT_ARJ*/
+  
+//#define _SFX
diff --git a/ArchiveSupport/Merge7z/tools.cpp b/ArchiveSupport/Merge7z/tools.cpp
new file mode 100755 (executable)
index 0000000..8cb1ac7
--- /dev/null
@@ -0,0 +1,123 @@
+/* File:       tools.cpp
+ * Author:     Jochen Tucht 2003/12/09
+ *                     Copyright (C) Jochen Tucht
+ *
+ * Purpose:    supplementary classes and functions for Merge7z
+ *
+ * Remarks:    
+ *
+ *     *** SECURITY ALERT ***
+ *     Be aware of 2. a) of the GNU General Public License. Please log your changes
+ *     at the end of this comment.
+ *
+ * License:    This program is free software; you can redistribute it and/or modify
+ *                     it under the terms of the GNU General Public License as published by
+ *                     the Free Software Foundation; either version 2 of the License, or
+ *                     (at your option) any later version.
+ *
+ *                     This program is distributed in the hope that it will be useful,
+ *                     but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *                     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ *                     GNU General Public License for more details.
+ *
+ *                     You should have received a copy of the GNU General Public License
+ *                     along with this program; if not, write to the Free Software
+ *                     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+
+DATE:          BY:                                     DESCRIPTION:
+==========     ==================      ================================================
+
+*/
+
+#include "stdafx.h"
+
+#ifndef StrIsIntlEqual
+#ifdef UNICODE
+#define StrIsIntlEqual          StrIsIntlEqualW
+#else
+#define StrIsIntlEqual          StrIsIntlEqualA
+#endif
+#endif
+
+#include "tools.h"
+
+/**
+ * @brief Construct and throw a Complain object containing an error message.
+ */
+Complain::Complain(LPCTSTR format, ...)
+{
+       wvsprintf(msg, format, (va_list)(&format + 1));
+       throw this;
+}
+
+/**
+ * @brief Report error to user. To be called from within catch block.
+ */
+int Complain::Alert(HWND hwndParent, UINT flags)
+{
+       return MessageBox(hwndParent, msg, 0, flags);
+}
+
+/**
+ * @brief Complain that some DLL failed to CreateObject() something.
+ */
+void ComplainCreateObject(HMODULE handle, LPCTSTR name)
+{
+       TCHAR module[MAX_PATH];
+       ::GetModuleFileName(handle, module, sizeof module);
+       Complain(_T("%.300s Failed to create %.300s"), module, name);
+} 
+
+/**
+ * @brief Complain that something could not be found.
+ */
+void ComplainNotFound(LPCTSTR name)
+{
+       Complain(_T("Not found: %.300s"), name);
+}
+
+/**
+ * @brief Complain that something could not be opened.
+ */
+void ComplainCantOpen(LPCTSTR name)
+{
+       Complain(_T("Can't open: %.300s"), name);
+}
+
+/**
+ * @brief Release interface until ref count reaches 0.
+ *
+ * Very bad practice in general, but helps avoiding resource leaks
+ * due to inaccurate ref counting.
+ */
+void NTAPI Release(IUnknown *punk)
+{
+       while (punk)
+       {       
+               ULONG Release = punk->Release();
+               if (Release == 0)
+               {
+                       punk = 0;
+               }
+       }
+}
+
+/**
+ * @brief Find a keyword within an EnumList, and return its numeric value.
+ */
+EnumList::Find(LPCTSTR r, BOOL fCaseSens) const
+{
+       static const TCHAR trim[] = _T(".;:() ");
+       int cch = StrCSpn(r += StrSpn(r, trim), trim);
+       int Find = 0;
+       LPCTSTR q = buffer;
+       while (LPCTSTR p = StrChr(q, '('))
+       {
+               q = StrChr(++p, ')');
+               if (StrIsIntlEqual(fCaseSens, p, r, cch) && q - p == cch)
+                       break;
+               ++Find;
+       }
+       return Find;
+}
diff --git a/ArchiveSupport/Merge7z/tools.h b/ArchiveSupport/Merge7z/tools.h
new file mode 100755 (executable)
index 0000000..bb188e8
--- /dev/null
@@ -0,0 +1,33 @@
+#include <tchar.h>
+
+#ifdef _DEBUG
+static int FAIL_AT_LINE = 0;
+#define COMPLAIN(X) ((X) || FAIL_AT_LINE == __LINE__)
+#else
+#define COMPLAIN(X) (X)
+#endif
+
+class Complain
+{
+public:
+       TCHAR msg[1024];
+       Complain(LPCTSTR, ...);
+       int Alert(HWND, UINT = MB_ICONSTOP|MB_TASKMODAL);
+};
+
+void ComplainCreateObject(HMODULE, LPCTSTR);
+void ComplainNotFound(LPCTSTR);
+void ComplainCantOpen(LPCTSTR);
+
+void NTAPI Release(IUnknown *);
+
+struct EnumList
+{
+       TCHAR buffer[INT_MAX];
+       int Find(LPCTSTR r, BOOL fCaseSens) const;
+};
+
+#define ENUM(X) X,
+#define _ENUM(X) _##X,
+#define ENUM_LIST(T,X) struct T: ::EnumList{enum{X N};} const*const T=(struct T const*)_T(#X);