OSDN Git Service

Patch [1103274] Merge7z interface plugin installer
authorJochen Tucht <jtuc@users.sourceforge.net>
Sat, 22 Jan 2005 20:54:16 +0000 (20:54 +0000)
committerJochen Tucht <jtuc@users.sourceforge.net>
Sat, 22 Jan 2005 20:54:16 +0000 (20:54 +0000)
ArchiveSupport/Merge7zInstaller/Files.rc2 [new file with mode: 0755]
ArchiveSupport/Merge7zInstaller/Installer.cpp [new file with mode: 0755]
ArchiveSupport/Merge7zInstaller/Installer.rc [new file with mode: 0755]
ArchiveSupport/Merge7zInstaller/Merge7zInstaller.dsp [new file with mode: 0755]
ArchiveSupport/Merge7zInstaller/resource.h [new file with mode: 0755]

diff --git a/ArchiveSupport/Merge7zInstaller/Files.rc2 b/ArchiveSupport/Merge7zInstaller/Files.rc2
new file mode 100755 (executable)
index 0000000..bef1914
--- /dev/null
@@ -0,0 +1,102 @@
+#ifndef IMPORT
+#define IMPORT(name) name
+SYSTEMTIME RCDATA {2005,1,0,15,12,0,0,0}
+#endif
+
+IMPORT(Merge7z311.dll)                 Merge7z "../Build/MergeRelease/Merge7z311.dll"
+IMPORT(Merge7z311U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z311U.dll"
+IMPORT(Merge7z312.dll)                 Merge7z "../Build/MergeRelease/Merge7z312.dll"
+IMPORT(Merge7z312U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z312U.dll"
+IMPORT(Merge7z313.dll)                 Merge7z "../Build/MergeRelease/Merge7z313.dll"
+IMPORT(Merge7z313U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z313U.dll"
+IMPORT(Merge7z407.dll)                 Merge7z "../Build/MergeRelease/Merge7z407.dll"
+IMPORT(Merge7z407U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z407U.dll"
+IMPORT(Merge7z408.dll)                 Merge7z "../Build/MergeRelease/Merge7z408.dll"
+IMPORT(Merge7z408U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z408U.dll"
+IMPORT(Merge7z409.dll)                 Merge7z "../Build/MergeRelease/Merge7z409.dll"
+IMPORT(Merge7z409U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z409U.dll"
+IMPORT(Merge7z410.dll)                 Merge7z "../Build/MergeRelease/Merge7z410.dll"
+IMPORT(Merge7z410U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z410U.dll"
+IMPORT(Merge7z411.dll)                 Merge7z "../Build/MergeRelease/Merge7z411.dll"
+IMPORT(Merge7z411U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z411U.dll"
+IMPORT(Merge7z412.dll)                 Merge7z "../Build/MergeRelease/Merge7z412.dll"
+IMPORT(Merge7z412U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z412U.dll"
+IMPORT(Merge7z413.dll)                 Merge7z "../Build/MergeRelease/Merge7z413.dll"
+IMPORT(Merge7z413U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z413U.dll"
+IMPORT(Merge7z414.dll)                 Merge7z "../Build/MergeRelease/Merge7z414.dll"
+IMPORT(Merge7z414U.dll)                        Merge7z "../Build/MergeUnicodeRelease/Merge7z414U.dll"
+
+IMPORT(7zip_pad.xml)                   7-ZIP   "../../../7z313bin/7zip_pad.xml"
+
+IMPORT(Codecs/7zAES.dll)               7-ZIP   "../../../7z313bin/Codecs/7zAES.dll"
+IMPORT(Codecs/AES.dll)                 7-ZIP   "../../../7z313bin/Codecs/AES.dll"
+IMPORT(Codecs/Branch.dll)              7-ZIP   "../../../7z313bin/Codecs/Branch.dll"
+IMPORT(Codecs/BZip2.dll)               7-ZIP   "../../../7z313bin/Codecs/BZip2.dll"
+IMPORT(Codecs/Copy.dll)                        7-ZIP   "../../../7z313bin/Codecs/Copy.dll"
+IMPORT(Codecs/Deflate.dll)             7-ZIP   "../../../7z313bin/Codecs/Deflate.dll"
+IMPORT(Codecs/Implode.dll)             7-ZIP   "../../../7z313bin/Codecs/Implode.dll"
+IMPORT(Codecs/LZMA.dll)                        7-ZIP   "../../../7z313bin/Codecs/LZMA.dll"
+IMPORT(Codecs/PPMD.dll)                        7-ZIP   "../../../7z313bin/Codecs/PPMD.dll"
+IMPORT(Codecs/Rar29.dll)               7-ZIP   "../../../7z313bin/Codecs/Rar29.dll"
+IMPORT(Codecs/Swap.dll)                        7-ZIP   "../../../7z313bin/Codecs/Swap.dll"
+
+IMPORT(Formats/7z.dll)                 7-ZIP   "../../../7z313bin/Formats/7z.dll"
+IMPORT(Formats/arj.dll)                        7-ZIP   "../../../7z313bin/Formats/arj.dll"
+IMPORT(Formats/bz2.dll)                        7-ZIP   "../../../7z313bin/Formats/bz2.dll"
+IMPORT(Formats/cab.dll)                        7-ZIP   "../../../7z313bin/Formats/cab.dll"
+IMPORT(Formats/cpio.dll)               7-ZIP   "../../../7z313bin/Formats/cpio.dll"
+IMPORT(Formats/deb.dll)                        7-ZIP   "../../../7z313bin/Formats/deb.dll"
+IMPORT(Formats/gz.dll)                 7-ZIP   "../../../7z313bin/Formats/gz.dll"
+IMPORT(Formats/rar.dll)                        7-ZIP   "../../../7z313bin/Formats/rar.dll"
+IMPORT(Formats/rpm.dll)                        7-ZIP   "../../../7z313bin/Formats/rpm.dll"
+IMPORT(Formats/split.dll)              7-ZIP   "../../../7z313bin/Formats/split.dll"
+IMPORT(Formats/tar.dll)                        7-ZIP   "../../../7z313bin/Formats/tar.dll"
+IMPORT(Formats/zip.dll)                        7-ZIP   "../../../7z313bin/Formats/zip.dll"
+
+IMPORT(Lang/af.txt)                            7-ZIP   "../../../7z313bin/Lang/af.txt"
+IMPORT(Lang/ar.txt)                            7-ZIP   "../../../7z313bin/Lang/ar.txt"
+IMPORT(Lang/be.txt)                            7-ZIP   "../../../7z313bin/Lang/be.txt"
+IMPORT(Lang/bg.txt)                            7-ZIP   "../../../7z313bin/Lang/bg.txt"
+IMPORT(Lang/ca.txt)                            7-ZIP   "../../../7z313bin/Lang/ca.txt"
+IMPORT(Lang/cs.txt)                            7-ZIP   "../../../7z313bin/Lang/cs.txt"
+IMPORT(Lang/da.txt)                            7-ZIP   "../../../7z313bin/Lang/da.txt"
+IMPORT(Lang/de.txt)                            7-ZIP   "../../../7z313bin/Lang/de.txt"
+IMPORT(Lang/el.txt)                            7-ZIP   "../../../7z313bin/Lang/el.txt"
+IMPORT(Lang/en.ttt)                            7-ZIP   "../../../7z313bin/Lang/en.ttt"
+IMPORT(Lang/eo.txt)                            7-ZIP   "../../../7z313bin/Lang/eo.txt"
+IMPORT(Lang/es.txt)                            7-ZIP   "../../../7z313bin/Lang/es.txt"
+IMPORT(Lang/et.txt)                            7-ZIP   "../../../7z313bin/Lang/et.txt"
+IMPORT(Lang/fi.txt)                            7-ZIP   "../../../7z313bin/Lang/fi.txt"
+IMPORT(Lang/fr.txt)                            7-ZIP   "../../../7z313bin/Lang/fr.txt"
+//IMPORT(Lang/fur.txt)                 7-ZIP   "../../../7z313bin/Lang/fur.txt"
+//IMPORT(Lang/gl.txt)                          7-ZIP   "../../../7z313bin/Lang/gl.txt"
+IMPORT(Lang/he.txt)                            7-ZIP   "../../../7z313bin/Lang/he.txt"
+IMPORT(Lang/hr.txt)                            7-ZIP   "../../../7z313bin/Lang/hr.txt"
+IMPORT(Lang/hu.txt)                            7-ZIP   "../../../7z313bin/Lang/hu.txt"
+IMPORT(Lang/it.txt)                            7-ZIP   "../../../7z313bin/Lang/it.txt"
+IMPORT(Lang/ja.txt)                            7-ZIP   "../../../7z313bin/Lang/ja.txt"
+IMPORT(Lang/ko.txt)                            7-ZIP   "../../../7z313bin/Lang/ko.txt"
+IMPORT(Lang/lt.txt)                            7-ZIP   "../../../7z313bin/Lang/lt.txt"
+IMPORT(Lang/lv.txt)                            7-ZIP   "../../../7z313bin/Lang/lv.txt"
+//IMPORT(Lang/mk.txt)                          7-ZIP   "../../../7z313bin/Lang/mk.txt"
+//IMPORT(Lang/mn.txt)                          7-ZIP   "../../../7z313bin/Lang/mn.txt"
+IMPORT(Lang/nl.txt)                            7-ZIP   "../../../7z313bin/Lang/nl.txt"
+IMPORT(Lang/no.txt)                            7-ZIP   "../../../7z313bin/Lang/no.txt"
+IMPORT(Lang/pl.txt)                            7-ZIP   "../../../7z313bin/Lang/pl.txt"
+IMPORT(Lang/pt-br.txt)                 7-ZIP   "../../../7z313bin/Lang/pt-br.txt"
+IMPORT(Lang/pt.txt)                            7-ZIP   "../../../7z313bin/Lang/pt.txt"
+IMPORT(Lang/ro.txt)                            7-ZIP   "../../../7z313bin/Lang/ro.txt"
+IMPORT(Lang/ru.txt)                            7-ZIP   "../../../7z313bin/Lang/ru.txt"
+IMPORT(Lang/sk.txt)                            7-ZIP   "../../../7z313bin/Lang/sk.txt"
+IMPORT(Lang/sl.txt)                            7-ZIP   "../../../7z313bin/Lang/sl.txt"
+IMPORT(Lang/sr.txt)                            7-ZIP   "../../../7z313bin/Lang/sr.txt"
+IMPORT(Lang/sv.txt)                            7-ZIP   "../../../7z313bin/Lang/sv.txt"
+//IMPORT(Lang/ta.txt)                          7-ZIP   "../../../7z313bin/Lang/ta.txt"
+//IMPORT(Lang/th.txt)                          7-ZIP   "../../../7z313bin/Lang/th.txt"
+IMPORT(Lang/tr.txt)                            7-ZIP   "../../../7z313bin/Lang/tr.txt"
+IMPORT(Lang/uk.txt)                            7-ZIP   "../../../7z313bin/Lang/uk.txt"
+IMPORT(Lang/va.txt)                            7-ZIP   "../../../7z313bin/Lang/va.txt"
+IMPORT(Lang/vi.txt)                            7-ZIP   "../../../7z313bin/Lang/vi.txt"
+IMPORT(Lang/vr.txt)                            7-ZIP   "../../../7z313bin/Lang/vr.txt"
+IMPORT(Lang/zh-cn.txt)                 7-ZIP   "../../../7z313bin/Lang/zh-cn.txt"
+IMPORT(Lang/zh-tw.txt)                 7-ZIP   "../../../7z313bin/Lang/zh-tw.txt"
diff --git a/ArchiveSupport/Merge7zInstaller/Installer.cpp b/ArchiveSupport/Merge7zInstaller/Installer.cpp
new file mode 100755 (executable)
index 0000000..8b4e7cf
--- /dev/null
@@ -0,0 +1,274 @@
+/* Installer.cpp: Merge7z plugin installer
+ * Copyright (c) 2005 Jochen Tucht
+ *
+ * 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.
+ *
+ * Remarks:    Bundles plugins for all supported versions of 7-Zip in a single
+ *                     installer. Also includes essential components from latest 7-Zip
+ *                     stable release for optional standalone operation.
+ *                     Files to be installed are embedded as resources (see Files.rc2).
+ *                     The resulting exe must be run through UPX (upx.sourceforge.net)
+ *                     to reduce size.
+
+Please mind 2. a) of the GNU General Public License, and log your changes below.
+
+DATE:          BY:                                     DESCRIPTION:
+==========     ==================      ================================================
+2005/01/15     Jochen Tucht            Created
+*/
+
+#include <windows.h>
+
+#pragma intrinsic(memset) // do not depend on CRT
+
+// Compute dwBuild from revision.txt
+static const DWORD dwBuild =
+(
+       sizeof""
+#      define VERSION(MAJOR,MINOR)
+#      include "../Merge7z/revision.txt"
+#      undef VERSION
+);
+
+const SYSTEMTIME *st = NULL; // initialized from SYSTEMTIME RCDATA in Files.rc2
+
+void InstallFile(HWND hWnd, LPTSTR lpName, LPCTSTR lpType, LPTSTR path, int cchPath)
+{
+       HMODULE hModule = GetModuleHandle(0);
+       HRSRC hResource = FindResource(hModule, lpName, lpType);
+       DWORD dwSize = SizeofResource(hModule, hResource);
+       LPVOID pResource = LoadResource(hModule, hResource);
+       LPTSTR name = path + cchPath;
+       if (name != lpName)
+       {
+               lstrcpy(name, lpName);
+       }
+       int cchName = lstrlen(name);
+       int i;
+       for (i = 0 ; i < cchName ; ++i)
+       {
+               if (name[i] == '/')
+               {
+                       name[i] = '\0';
+                       CreateDirectory(path, 0);
+                       name[i] = '\\';
+               }
+       }
+       HANDLE hFile = CreateFile(path, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
+       if (hFile != INVALID_HANDLE_VALUE)
+       {
+               DWORD dwNumberOfBytesWritten;
+               BOOL bSuccess = WriteFile(hFile, pResource, dwSize, &dwNumberOfBytesWritten, 0);
+               FILETIME ft;
+               if (SystemTimeToFileTime(st, &ft))
+               {
+                       SetFileTime(hFile, &ft, &ft, &ft);
+               }
+               CloseHandle(hFile);
+               if (!bSuccess || dwNumberOfBytesWritten != dwSize)
+               {
+                       hFile = INVALID_HANDLE_VALUE;
+               }
+       }
+       if (hFile == INVALID_HANDLE_VALUE)
+       {
+               LONG error = GetLastError();
+               name[cchName++] = '\n';
+               FormatMessage
+               (
+                       FORMAT_MESSAGE_FROM_SYSTEM,
+                       NULL, error,
+                       MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT),
+                       name + cchName, MAX_PATH, NULL
+               );
+               int response = MessageBox(hWnd, path, 0, MB_ICONSTOP|MB_OKCANCEL);
+               if (response == IDCANCEL)
+               {
+                       ExitProcess(1);
+               }
+       }
+}
+
+BOOL CALLBACK fnPopulateList(HMODULE hModule, LPCTSTR lpType, LPTSTR lpName, LONG lParam)
+{
+       TCHAR acName[MAX_PATH];
+       if (ATOM aName = FindAtom(lpName))
+       {
+               GetAtomName(aName, lpName = acName, sizeof acName);
+       }
+       SendDlgItemMessage((HWND)lParam, 100, LB_ADDSTRING, 0, (LPARAM)lpName);
+       return TRUE;
+}
+
+BOOL CALLBACK fnInstallFiles(HMODULE hModule, LPCTSTR lpType, LPTSTR lpName, LONG lParam)
+{
+       HWND hWnd = (HWND)lParam;
+       TCHAR path[8 * MAX_PATH];
+       int cchPath = GetDlgItemText(hWnd, 203, path, 5 * MAX_PATH);
+       int cchName = GetFileTitle(path, 0, 0);
+       if (cchName < cchPath)
+       {
+               cchPath -= cchName;
+       }
+       if (cchPath != 3 || path[1] != ':')
+       {
+               path[cchPath++] = '\\';
+       }
+       TCHAR acName[MAX_PATH];
+       if (ATOM aName = FindAtom(lpName))
+       {
+               GetAtomName(aName, lpName = acName, sizeof acName);
+       }
+       InstallFile(hWnd, lpName, lpType, path, cchPath);
+       return TRUE;
+}
+
+BOOL CALLBACK DlgMain_InitDialog(HWND hWnd, LPARAM lParam)
+{
+       TCHAR path[5 * MAX_PATH];
+       wsprintf(path + GetWindowText(hWnd, path, MAX_PATH), " (dllbuild %04lu, %04u-%02u-%02u)",
+               dwBuild, (UINT)st->wYear, (UINT)st->wMonth, (UINT)st->wDay);
+       SetWindowText(hWnd, path);
+       EnumResourceNames(GetModuleHandle(0), "Merge7z", fnPopulateList, (LONG)hWnd);
+       LONG lCount = SendDlgItemMessage(hWnd, 100, LB_GETCOUNT , 0, 0);
+       SendDlgItemMessage(hWnd, 100, LB_SELITEMRANGEEX, 0, lCount - 1);
+       CheckRadioButton(hWnd, 201, 202, 201);
+       GetModuleFileName(0, path, sizeof path);
+       SetDlgItemText(hWnd, 203, path);
+       return TRUE;
+}
+
+BOOL CALLBACK DlgMain_BrowseExe(HWND hWnd)
+{
+       struct
+       {
+               OPENFILENAME ofn;
+               TCHAR buffer[5 * MAX_PATH];
+       } path;
+       ZeroMemory(&path, sizeof path);
+       path.ofn.lStructSize = sizeof path.ofn;
+       path.ofn.hwndOwner = hWnd;
+       path.ofn.lpstrFile = path.buffer;
+       path.ofn.nMaxFile = sizeof path.buffer;
+       path.ofn.lpstrFilter = "*.exe\0*.exe\0";
+       path.ofn.lpstrTitle = "Browse for application ...";
+       path.ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_PATHMUSTEXIST;
+       GetDlgItemText(hWnd, 203, path.buffer, sizeof path.buffer);
+       if (GetOpenFileName(&path.ofn))
+       {
+               SetDlgItemText(hWnd, 203, path.buffer);
+       }
+       return FALSE;
+}
+
+BOOL CALLBACK DlgMain_InstallFiles(HWND hWnd)
+{
+       HCURSOR hCursor = SetCursor(LoadCursor(0, IDC_WAIT));
+       HINSTANCE hModule = GetModuleHandle(0);
+       int count = SendDlgItemMessage(hWnd, 100, LB_GETCOUNT , 0, 0);
+       int index = 0;
+       TCHAR path[8 * MAX_PATH];
+       int cchPath;
+       if (IsDlgButtonChecked(hWnd, 201))
+       {
+               cchPath = GetSystemDirectory(path, 4 * MAX_PATH);
+       }
+       else
+       {
+               cchPath = GetDlgItemText(hWnd, 203, path, 5 * MAX_PATH);
+               int cchName = GetFileTitle(path, 0, 0);
+               if (cchName < cchPath)
+               {
+                       cchPath -= cchName;
+               }
+       }
+       if (cchPath != 3 || path[1] != ':')
+       {
+               path[cchPath++] = '\\';
+       }
+       LPTSTR name = path + cchPath;
+       while (index < count)
+       {
+               if (SendDlgItemMessage(hWnd, 100, LB_GETSEL, index, 0))
+               {
+                       int cchName = SendDlgItemMessage(hWnd, 100, LB_GETTEXT, index, (LPARAM)name);
+                       InstallFile(hWnd, name, "Merge7z", path, cchPath);
+               }
+               ++index;
+       }
+       if (IsDlgButtonChecked(hWnd, 205))
+       {
+               EnumResourceNames(GetModuleHandle(0), "7-ZIP", fnInstallFiles, (LONG)hWnd);
+       }
+       SetCursor(hCursor);
+       return TRUE;
+}
+
+BOOL CALLBACK DlgMain_EnableStandalone(HWND hWnd)
+{
+       if (IsDlgButtonChecked(hWnd, 205))
+       {
+               int lower = SendDlgItemMessage(hWnd, 100, LB_FINDSTRINGEXACT, -1, (LPARAM)"Merge7z313.dll");
+               int upper = SendDlgItemMessage(hWnd, 100, LB_FINDSTRINGEXACT, -1, (LPARAM)"Merge7z313U.dll");
+               SendDlgItemMessage(hWnd, 100, LB_SELITEMRANGEEX, lower, upper);
+       }
+       return TRUE;
+}
+
+BOOL CALLBACK DlgMain(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+       switch (uMsg)
+       {
+       case WM_INITDIALOG:
+               return DlgMain_InitDialog(hWnd, lParam);
+       case WM_COMMAND:
+               switch (wParam)
+               {
+               case 201:
+                       CheckDlgButton(hWnd, 205, 0);
+                       //fall through
+               case 202:
+                       EnableWindow(GetDlgItem(hWnd, 203), wParam == 202);
+                       EnableWindow(GetDlgItem(hWnd, 204), wParam == 202);
+                       EnableWindow(GetDlgItem(hWnd, 205), wParam == 202);
+                       break;
+               case 204:
+                       return DlgMain_BrowseExe(hWnd);
+               case 205:
+                       if (IsDlgButtonChecked(hWnd, 205))
+                               SendDlgItemMessage(hWnd, 100, LB_SETSEL, 0, -1);
+                       //fall through
+               case MAKELONG(100, LBN_SELCHANGE):
+                       return DlgMain_EnableStandalone(hWnd);
+               case IDOK: if (DlgMain_InstallFiles(hWnd)) case IDCANCEL:
+                       EndDialog(hWnd, wParam);
+                       break;
+               }
+               return TRUE;
+       }
+       return FALSE;
+}
+
+void WinMainCRTStartup(void)
+{
+       HINSTANCE hModule = GetModuleHandle(0);
+       HRSRC hResource = FindResource(hModule, "SYSTEMTIME", RT_RCDATA);
+       st = (SYSTEMTIME *)LoadResource(hModule, hResource);
+       InitAtomTable(0x3001);
+#      define IMPORT(name) AddAtom(#name); /##/
+#      include "files.rc2"
+       DialogBoxParam(hModule, MAKEINTRESOURCE(100), 0, DlgMain, 0);
+       ExitProcess(0);
+}
diff --git a/ArchiveSupport/Merge7zInstaller/Installer.rc b/ArchiveSupport/Merge7zInstaller/Installer.rc
new file mode 100755 (executable)
index 0000000..5499f54
--- /dev/null
@@ -0,0 +1,110 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <afxres.h>
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Deutsch (Deutschland) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
+#ifdef _WIN32
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include <afxres.h>\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""files.rc2""\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+100 DIALOGEX 0, 0, 308, 177
+STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_CAPTION | 
+    WS_SYSMENU
+CAPTION "Merge7z Interface Plugin Installer"
+FONT 8, "MS Sans Serif"
+BEGIN
+    GROUPBOX        "&Select plugins to be installed",IDC_STATIC,2,0,304,82,
+                    WS_GROUP,WS_EX_TRANSPARENT
+    LISTBOX         100,6,10,296,68,LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | 
+                    LBS_EXTENDEDSEL | WS_VSCROLL | WS_GROUP | WS_TABSTOP
+    GROUPBOX        "&Options",IDC_STATIC,2,84,304,72,WS_GROUP,
+                    WS_EX_TRANSPARENT
+    CONTROL         "Install to s&ystem directory",201,"Button",
+                    BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,6,94,94,10
+    CONTROL         "Install to &program directory",202,"Button",
+                    BS_AUTORADIOBUTTON | WS_TABSTOP,6,106,98,10
+    EDITTEXT        203,18,118,232,14,ES_AUTOHSCROLL | WS_DISABLED | 
+                    WS_GROUP
+    PUSHBUTTON      "&Browse",204,252,118,50,14,WS_DISABLED | WS_GROUP
+    CONTROL         "&Enable standalone operation\nThis option adds required components from 7-Zip 3.13 to program directory.",
+                    205,"Button",BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE | 
+                    WS_DISABLED | WS_TABSTOP,18,134,280,18
+    DEFPUSHBUTTON   "OK",IDOK,202,160,50,14,WS_GROUP
+    PUSHBUTTON      "Cancel",IDCANCEL,256,160,50,14,WS_GROUP
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO DISCARDABLE 
+BEGIN
+    100, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 301
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 170
+    END
+END
+#endif    // APSTUDIO_INVOKED
+
+#endif    // Deutsch (Deutschland) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+#include "files.rc2"
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/ArchiveSupport/Merge7zInstaller/Merge7zInstaller.dsp b/ArchiveSupport/Merge7zInstaller/Merge7zInstaller.dsp
new file mode 100755 (executable)
index 0000000..49d2f6f
--- /dev/null
@@ -0,0 +1,121 @@
+# Microsoft Developer Studio Project File - Name="Merge7zInstaller" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** NICHT BEARBEITEN **
+
+# TARGTYPE "Win32 (x86) Application" 0x0101
+
+CFG=Merge7zInstaller - Win32 Debug
+!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 "Merge7zInstaller.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 "Merge7zInstaller.mak" CFG="Merge7zInstaller - Win32 Debug"
+!MESSAGE 
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
+!MESSAGE 
+!MESSAGE "Merge7zInstaller - Win32 Release" (basierend auf  "Win32 (x86) Application")
+!MESSAGE "Merge7zInstaller - Win32 Debug" (basierend auf  "Win32 (x86) Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "Merge7zInstaller - 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 "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# 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 /subsystem:windows /machine:I386
+# ADD 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 /subsystem:windows /pdb:none /machine:I386 /nodefaultlib
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=UPX compression
+PostBuild_Cmds=upx Release/Merge7zInstaller.exe
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "Merge7zInstaller - 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 "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Z7 /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /FR /FD /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 /subsystem:windows /debug /machine:I386 /pdbtype:sept
+# ADD 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 /subsystem:windows /incremental:no /debug /machine:I386 /nodefaultlib /pdbtype:sept
+
+!ENDIF 
+
+# Begin Target
+
+# Name "Merge7zInstaller - Win32 Release"
+# Name "Merge7zInstaller - Win32 Debug"
+# Begin Group "Quellcodedateien"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Installer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Installer.rc
+# 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=.\Files.rc2
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/ArchiveSupport/Merge7zInstaller/resource.h b/ArchiveSupport/Merge7zInstaller/resource.h
new file mode 100755 (executable)
index 0000000..6047e53
--- /dev/null
@@ -0,0 +1,15 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by Installer.rc
+//
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        101
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1008
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif