diff --git a/tools/linux/setup_26_01_bundle_symlinks.py b/tools/linux/setup_26_01_bundle_symlinks.py
new file mode 100644
index 0000000..f64be24
--- /dev/null
+++ b/tools/linux/setup_26_01_bundle_symlinks.py
@@ -0,0 +1,38 @@
+#!/usr/bin/env python3
+"""Creates symlinks in versions/26.01-bundle to mirror vendor directory structure."""
+import os
+from pathlib import Path
+
+ROOT = Path(__file__).resolve().parents[2]
+bundle_7zip = ROOT / "versions/26.01-bundle/CPP/7zip"
+vendor_7zip = ROOT / "versions/26.01/CPP/7zip"
+bundle_cpp = ROOT / "versions/26.01-bundle/CPP"
+vendor_cpp = ROOT / "versions/26.01/CPP"
+
+for item in vendor_7zip.iterdir():
+ target = bundle_7zip / item.name
+ if not target.exists() and not target.is_symlink():
+ rel = os.path.relpath(item, bundle_7zip)
+ os.symlink(rel, target)
+ print(f" symlink: {target.relative_to(ROOT)} -> {rel}")
+
+bundle_ui = bundle_7zip / "UI"
+vendor_ui = vendor_7zip / "UI"
+bundle_ui.mkdir(exist_ok=True)
+for item in vendor_ui.iterdir():
+ target = bundle_ui / item.name
+ if not target.exists() and not target.is_symlink():
+ rel = os.path.relpath(item, bundle_ui)
+ os.symlink(rel, target)
+ print(f" symlink: {target.relative_to(ROOT)} -> {rel}")
+
+for item in vendor_cpp.iterdir():
+ if item.name == "7zip":
+ continue
+ target = bundle_cpp / item.name
+ if not target.exists() and not target.is_symlink():
+ rel = os.path.relpath(item, bundle_cpp)
+ os.symlink(rel, target)
+ print(f" symlink: {target.relative_to(ROOT)} -> {rel}")
+
+print("Done")
diff --git a/versions/26.01-bundle/Asm b/versions/26.01-bundle/Asm
new file mode 120000
index 0000000..743fa66
--- /dev/null
+++ b/versions/26.01-bundle/Asm
@@ -0,0 +1 @@
+../26.01/Asm
\ No newline at end of file
diff --git a/versions/26.01-bundle/C b/versions/26.01-bundle/C
new file mode 120000
index 0000000..70a4f8a
--- /dev/null
+++ b/versions/26.01-bundle/C
@@ -0,0 +1 @@
+../26.01/C
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/7zip.mak b/versions/26.01-bundle/CPP/7zip/7zip.mak
new file mode 120000
index 0000000..bd97924
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/7zip.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/7zip.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/7zip_gcc.mak b/versions/26.01-bundle/CPP/7zip/7zip_gcc.mak
new file mode 120000
index 0000000..f93f72f
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/7zip_gcc.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/7zip_gcc.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Aes.mak b/versions/26.01-bundle/CPP/7zip/Aes.mak
new file mode 120000
index 0000000..bcacfc2
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Aes.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Aes.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Archive b/versions/26.01-bundle/CPP/7zip/Archive
new file mode 120000
index 0000000..accbd47
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Archive
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Archive
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Asm.mak b/versions/26.01-bundle/CPP/7zip/Asm.mak
new file mode 120000
index 0000000..37162c7
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Asm.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Asm.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/Nsis7z_vs2026.vcxproj b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/Nsis7z_vs2026.vcxproj
new file mode 100644
index 0000000..3147a7b
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/Nsis7z_vs2026.vcxproj
@@ -0,0 +1,929 @@
+
+
+
+
+ Debug Unicode
+ Win32
+
+
+ Debug Unicode
+ x64
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release Unicode
+ Win32
+
+
+ Release Unicode
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+
+
+ {A284C1EF-6CA9-4984-A25F-83B22C85A5EC}
+ 10.0.26100.0
+
+
+
+ DynamicLibrary
+ v145
+ false
+ MultiByte
+
+
+ DynamicLibrary
+ v145
+ false
+ MultiByte
+
+
+ DynamicLibrary
+ v145
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v145
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v145
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v145
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v145
+ false
+ MultiByte
+
+
+ DynamicLibrary
+ v145
+ false
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+ false
+ nsis7z
+ $(Configuration)\
+ $(Configuration)\
+
+
+ false
+ false
+ nsis7z
+
+
+ true
+ false
+
+
+ true
+ false
+ nsis7z
+
+
+ false
+ false
+ nsis7z
+ $(Configuration)\
+ $(Configuration)\
+
+
+ false
+ false
+ nsis7z
+ $(Platform)\$(Configuration)\
+ $(Platform)\$(Configuration)\
+
+
+ true
+ false
+
+
+ true
+ false
+ nsis7z
+
+
+
+ MultiThreaded
+ Default
+ true
+ true
+ MinSpace
+ true
+ false
+ true
+ Level3
+ ..\..\..\..\..\26.01\CPP\;..\..\..\;%(AdditionalIncludeDirectories)
+ NDEBUG;WIN32;%(PreprocessorDefinitions)
+ AssemblyAndMachineCode
+ FastCall
+ None
+ 4100
+
+
+ .\Release\Alone.tlb
+
+
+ 0x0419
+ NDEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ .\Release\Alone.bsc
+
+
+ true
+
+
+ No
+ UseLinkTimeCodeGeneration
+ true
+ true
+
+
+
+
+ MultiThreaded
+ Default
+ true
+ true
+ MinSpace
+ true
+ false
+ true
+ Level3
+ ..\..\..\..\..\26.01\CPP\;..\..\..\;%(AdditionalIncludeDirectories)
+ NDEBUG;WIN32;%(PreprocessorDefinitions)
+ AssemblyAndMachineCode
+ FastCall
+
+
+ .\Release\Alone.tlb
+
+
+ 0x0419
+ NDEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ .\Release\Alone.bsc
+
+
+ true
+
+
+ UseLinkTimeCodeGeneration
+ true
+ true
+
+
+
+
+ MultiThreadedDebugDLL
+ Default
+ false
+ Disabled
+ true
+ Level4
+ true
+ EditAndContinue
+ ..\..\..\..\..\26.01\CPP\;..\..\..\;%(AdditionalIncludeDirectories)
+ _DEBUG;UNICODE;WIN32;_CONSOLE;%(PreprocessorDefinitions)
+ NotUsing
+ FastCall
+ EnableFastChecks
+
+
+ .\DebugU\Alone.tlb
+
+
+ 0x0419
+ _DEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ .\DebugU\Alone.bsc
+
+
+ true
+ true
+ odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+ MultiThreadedDebugDLL
+ Default
+ false
+ Disabled
+ true
+ Level4
+ ProgramDatabase
+ ..\..\..\..\..\26.01\CPP\;..\..\..\;%(AdditionalIncludeDirectories)
+ _DEBUG;UNICODE;WIN32;_CONSOLE;%(PreprocessorDefinitions)
+ NotUsing
+ FastCall
+ EnableFastChecks
+
+
+ .\DebugU\Alone.tlb
+
+
+ 0x0419
+ _DEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ .\DebugU\Alone.bsc
+
+
+ true
+ true
+ odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+ MultiThreaded
+ Default
+ true
+ true
+ MinSpace
+ true
+ false
+ true
+ Level4
+ ..\..\..\ ;%(AdditionalIncludeDirectories)
+ NDEBUG;UNICODE;WIN32;%(PreprocessorDefinitions)
+ NotUsing
+ FastCall
+ None
+ 4100
+
+
+ .\ReleaseU\Alone.tlb
+
+
+ 0x0419
+ NDEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ .\ReleaseU\Alone.bsc
+
+
+ true
+
+
+ No
+ UseLinkTimeCodeGeneration
+ true
+ true
+
+
+
+
+ MultiThreaded
+ Default
+ true
+ true
+ MinSpace
+ true
+ false
+ true
+ Level4
+ ..\..\..\..\..\26.01\CPP\;..\..\..\;%(AdditionalIncludeDirectories)
+ NDEBUG;UNICODE;WIN32;%(PreprocessorDefinitions)
+ NotUsing
+ FastCall
+ None
+ 4100
+
+
+ .\ReleaseU\Alone.tlb
+
+
+ 0x0419
+ NDEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ .\ReleaseU\Alone.bsc
+
+
+ true
+
+
+ No
+ UseLinkTimeCodeGeneration
+ true
+ true
+
+
+
+
+ MultiThreadedDebugDLL
+ Default
+ Disabled
+ true
+ Level3
+ true
+ EditAndContinue
+ ..\..\..\..\..\26.01\CPP\;..\..\..\;%(AdditionalIncludeDirectories)
+ _DEBUG;WIN32;_CONSOLE;%(PreprocessorDefinitions)
+ FastCall
+ EnableFastChecks
+
+
+ .\Debug\Alone.tlb
+
+
+ 0x0419
+ _DEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ .\Debug\Alone.bsc
+
+
+ true
+ true
+ odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+ MultiThreadedDebugDLL
+ Default
+ false
+ Disabled
+ true
+ Level3
+ ProgramDatabase
+ ..\..\..\..\..\26.01\CPP\;..\..\..\;%(AdditionalIncludeDirectories)
+ _DEBUG;WIN32;_CONSOLE;%(PreprocessorDefinitions)
+ FastCall
+ EnableFastChecks
+
+
+ .\Debug\Alone.tlb
+
+
+ 0x0419
+ _DEBUG;%(PreprocessorDefinitions)
+
+
+ true
+ .\Debug\Alone.bsc
+
+
+ true
+ true
+ odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Create
+ Create
+ StdAfx.h
+ StdAfx.h
+ Create
+ Create
+
+ StdAfx.h
+
+ StdAfx.h
+ Create
+ Create
+
+ StdAfx.h
+
+ StdAfx.h
+ Create
+ Create
+ StdAfx.h
+ StdAfx.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/StdAfx.h b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/StdAfx.h
new file mode 100644
index 0000000..8607cf9
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/StdAfx.h
@@ -0,0 +1,13 @@
+// StdAfx.h
+
+#ifndef __STDAFX_H
+#define __STDAFX_H
+
+#include "../../../Common/Common.h"
+#include
+#include
+#include "../../../Common/MyWindows.h"
+#include "../../../Common/NewHandler.h"
+#include "pluginapi.h"
+
+#endif
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/StdAfx2.cpp b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/StdAfx2.cpp
new file mode 100644
index 0000000..d0feea8
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/StdAfx2.cpp
@@ -0,0 +1,3 @@
+// StdAfx.cpp
+
+#include "StdAfx.h"
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/afxres.h b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/afxres.h
new file mode 100644
index 0000000..c2fadd4
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/afxres.h
@@ -0,0 +1 @@
+#include
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/api.h b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/api.h
new file mode 100644
index 0000000..85d41c4
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/api.h
@@ -0,0 +1,83 @@
+/*
+ * apih
+ *
+ * This file is a part of NSIS.
+ *
+ * Copyright (C) 1999-2013 Nullsoft and Contributors
+ *
+ * Licensed under the zlib/libpng license (the "License");
+ * you may not use this file except in compliance with the License.
+ *
+ * Licence details can be found in the file COPYING.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.
+ */
+
+#ifndef _NSIS_EXEHEAD_API_H_
+#define _NSIS_EXEHEAD_API_H_
+
+// Starting with NSIS 2.42, you can check the version of the plugin API in exec_flags->plugin_api_version
+// The format is 0xXXXXYYYY where X is the major version and Y is the minor version (MAKELONG(y,x))
+// When doing version checks, always remember to use >=, ex: if (pX->exec_flags->plugin_api_version >= NSISPIAPIVER_1_0) {}
+
+#define NSISPIAPIVER_1_0 0x00010000
+#define NSISPIAPIVER_CURR NSISPIAPIVER_1_0
+
+// NSIS Plug-In Callback Messages
+enum NSPIM
+{
+ NSPIM_UNLOAD, // This is the last message a plugin gets, do final cleanup
+ NSPIM_GUIUNLOAD, // Called after .onGUIEnd
+};
+
+// Prototype for callbacks registered with extra_parameters->RegisterPluginCallback()
+// Return NULL for unknown messages
+// Should always be __cdecl for future expansion possibilities
+typedef UINT_PTR (*NSISPLUGINCALLBACK)(enum NSPIM);
+
+// extra_parameters data structures containing other interesting stuff
+// but the stack, variables and HWND passed on to plug-ins.
+typedef struct
+{
+ int autoclose;
+ int all_user_var;
+ int exec_error;
+ int abort;
+ int exec_reboot; // NSIS_SUPPORT_REBOOT
+ int reboot_called; // NSIS_SUPPORT_REBOOT
+ int XXX_cur_insttype; // depreacted
+ int plugin_api_version; // see NSISPIAPIVER_CURR
+ // used to be XXX_insttype_changed
+ int silent; // NSIS_CONFIG_SILENT_SUPPORT
+ int instdir_error;
+ int rtl;
+ int errlvl;
+ int alter_reg_view;
+ int status_update;
+} exec_flags_t;
+
+#ifndef NSISCALL
+# define NSISCALL __stdcall
+#endif
+
+typedef struct {
+ exec_flags_t *exec_flags;
+ int (NSISCALL *ExecuteCodeSegment)(int, HWND);
+ void (NSISCALL *validate_filename)(TCHAR *);
+ int (NSISCALL *RegisterPluginCallback)(HMODULE, NSISPLUGINCALLBACK); // returns 0 on success, 1 if already registered and < 0 on errors
+} extra_parameters;
+
+// Definitions for page showing plug-ins
+// See Ui.c to understand better how they're used
+
+// sent to the outer window to tell it to go to the next inner window
+#define WM_NOTIFY_OUTER_NEXT (WM_USER+0x8)
+
+// custom pages should send this message to let NSIS know they're ready
+#define WM_NOTIFY_CUSTOM_READY (WM_USER+0xd)
+
+// sent as wParam with WM_NOTIFY_OUTER_NEXT when user cancels - heed its warning
+#define NOTIFY_BYE_BYE 'x'
+
+#endif /* _PLUGIN_H_ */
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/nsis7z.cpp b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/nsis7z.cpp
new file mode 100644
index 0000000..3a49cd6
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/nsis7z.cpp
@@ -0,0 +1,191 @@
+#include "StdAfx.h"
+
+#include "../../UI/NSIS/ExtractCallbackConsole.h"
+#include "Common/StringConvert.h"
+
+#pragma warning(disable: 4100)
+
+#define IDC_PROGRESS 1004
+#define IDC_INTROTEXT 1006
+
+#define EXTRACTFUNC(funcname) extern "C" { \
+void __declspec(dllexport) __cdecl funcname(HWND hwndParent, int string_size, \
+ TCHAR *variables, stack_t **stacktop, \
+ extra_parameters *extra) \
+{ \
+ EXDLL_INIT();\
+ g_lastVal = -1; \
+ g_hwndParent=hwndParent; \
+ HWND hwndDlg = FindWindowEx(g_hwndParent, NULL, TEXT("#32770"), NULL); \
+ g_hwndProgress = GetDlgItem(hwndDlg, IDC_PROGRESS); \
+ g_hwndText = GetDlgItem(hwndDlg, IDC_INTROTEXT); \
+ TCHAR sArchive[1024], *outDir = getuservariable(INST_OUTDIR); \
+ popstring(sArchive); \
+ g_pluginExtra = extra; \
+
+#define EXTRACTFUNCEND } }
+
+HINSTANCE g_hInstance2;
+HWND g_hwndParent;
+HWND g_hwndProgress;
+HWND g_hwndText;
+extra_parameters *g_pluginExtra;
+
+void DoInitialize();
+int DoExtract(LPTSTR archive, LPTSTR dir, bool overwrite, bool expath, ExtractProgressHandler epc, const UStringVector& skipPatterns);
+int DoExtractWithFile(LPTSTR archive, LPTSTR dir, bool overwrite, bool expath, ExtractProgressWithFileHandler epc, const UStringVector& skipPatterns);
+
+int g_progressCallback = -1;
+int g_lastVal = -1;
+TCHAR* g_sDetails;
+
+static void PopSkipPatterns(UStringVector& skipPatterns)
+{
+ TCHAR *buf = new TCHAR[g_stringsize];
+ while (popstring(buf) == 0 && lstrlen(buf) > 0)
+ {
+#ifdef UNICODE
+ skipPatterns.Add(UString(buf));
+#else
+ skipPatterns.Add(MultiByteToUnicodeString(AString(buf)));
+#endif
+ }
+ delete[] buf;
+}
+
+int GetPercentComplete(UInt64 completedSize, UInt64 totalSize)
+{
+ if (totalSize == 0) return 0;
+ const int nsisProgressMax = 30000;
+ int val = (int)((completedSize*nsisProgressMax)/totalSize);
+ if (val < 0) return 0;
+ if (val > nsisProgressMax) return nsisProgressMax;
+ return val;
+}
+
+void SimpleProgressHandler(UInt64 completedSize, UInt64 totalSize)
+{
+ int val = GetPercentComplete(completedSize, totalSize);
+ if (g_lastVal != val)
+ SendMessage(g_hwndProgress, PBM_SETPOS, g_lastVal = val, 0);
+}
+
+void CallbackProgressHandler(UInt64 completedSize, UInt64 totalSize)
+{
+ int val = 0;
+
+ if (totalSize > 0)
+ {
+ val = GetPercentComplete(completedSize, totalSize);
+
+ static TCHAR buf[32];
+ wsprintf(buf, TEXT("%lu"), totalSize);
+ pushstring(buf);
+ wsprintf(buf, TEXT("%lu"), completedSize);
+ pushstring(buf);
+ g_pluginExtra->ExecuteCodeSegment(g_progressCallback-1, 0);
+ }
+
+ if (g_lastVal != val)
+ SendMessage(g_hwndProgress, PBM_SETPOS, g_lastVal = val, 0);
+}
+
+void CallbackFileProgressHandler(UInt64 completedSize, UInt64 totalSize, const wchar_t *fileName)
+{
+ int val = 0;
+
+ if (totalSize > 0)
+ val = GetPercentComplete(completedSize, totalSize);
+
+ // Notify NSIS only when a new file starts (filename changes)
+ if (fileName && fileName[0])
+ {
+ static TCHAR fileNameBuf[MAX_PATH];
+ static TCHAR prevFileNameBuf[MAX_PATH];
+ static TCHAR buf[32];
+
+ lstrcpyn(fileNameBuf, (const TCHAR*)fileName, MAX_PATH);
+ if (lstrcmp(fileNameBuf, prevFileNameBuf) != 0)
+ {
+ lstrcpy(prevFileNameBuf, fileNameBuf);
+ pushstring(fileNameBuf);
+ wsprintf(buf, TEXT("%lu"), (DWORD)totalSize);
+ pushstring(buf);
+ wsprintf(buf, TEXT("%lu"), (DWORD)completedSize);
+ pushstring(buf);
+ g_pluginExtra->ExecuteCodeSegment(g_progressCallback-1, 0);
+ }
+ }
+
+ if (g_lastVal != val)
+ SendMessage(g_hwndProgress, PBM_SETPOS, g_lastVal = val, 0);
+}
+
+void DetailsProgressHandler(UInt64 completedSize, UInt64 totalSize)
+{
+ int val = 0;
+
+ if (totalSize > 0)
+ {
+ val = GetPercentComplete(completedSize, totalSize);
+
+ TCHAR* buf = new TCHAR[g_stringsize];
+ TCHAR* buf2 = new TCHAR[g_stringsize];
+ wsprintf(buf, TEXT("%d%% (%d / %d MB)"), (int)(val?val/300:0), (int)(completedSize?completedSize/(1024*1024):0), (int)(totalSize/(1024*1024)));
+ wsprintf(buf2, g_sDetails, buf);
+ SetWindowText(g_hwndText, buf2);
+ delete[] buf;
+ delete[] buf2;
+ }
+
+ if (g_lastVal != val)
+ SendMessage(g_hwndProgress, PBM_SETPOS, g_lastVal = val, 0);
+}
+
+EXTRACTFUNC(Extract)
+{
+ UStringVector skipPatterns;
+ PopSkipPatterns(skipPatterns);
+ DoExtract(sArchive, outDir, true, true, (ExtractProgressHandler)SimpleProgressHandler, skipPatterns);
+}
+EXTRACTFUNCEND
+
+EXTRACTFUNC(ExtractWithDetails)
+{
+ g_sDetails = new TCHAR[string_size];
+ popstring(g_sDetails);
+ UStringVector skipPatterns;
+ PopSkipPatterns(skipPatterns);
+ DoExtract(sArchive, outDir, true, true, (ExtractProgressHandler)DetailsProgressHandler, skipPatterns);
+ delete[] g_sDetails;
+}
+EXTRACTFUNCEND
+
+EXTRACTFUNC(ExtractWithCallback)
+{
+ g_progressCallback = popint();
+ UStringVector skipPatterns;
+ PopSkipPatterns(skipPatterns);
+ DoExtract(sArchive, outDir, true, true, (ExtractProgressHandler)CallbackProgressHandler, skipPatterns);
+}
+EXTRACTFUNCEND
+
+EXTRACTFUNC(ExtractWithFileCallback)
+{
+ g_progressCallback = popint();
+ UStringVector skipPatterns;
+ PopSkipPatterns(skipPatterns);
+ DoExtractWithFile(sArchive, outDir, true, true, CallbackFileProgressHandler, skipPatterns);
+}
+EXTRACTFUNCEND
+
+extern "C" BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
+{
+ (void)lpReserved;
+ g_hInstance2=(HINSTANCE)hInst;
+ if (ul_reason_for_call == DLL_PROCESS_ATTACH)
+ {
+ DoInitialize();
+ }
+ return TRUE;
+}
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/nsis_tchar.h b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/nsis_tchar.h
new file mode 100644
index 0000000..210bab1
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/nsis_tchar.h
@@ -0,0 +1,229 @@
+/*
+ * nsis_tchar.h
+ *
+ * This file is a part of NSIS.
+ *
+ * Copyright (C) 1999-2013 Nullsoft and Contributors
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.
+ *
+ * For Unicode support by Jim Park -- 08/30/2007
+ */
+
+// Jim Park: Only those we use are listed here.
+
+#pragma once
+
+#ifdef _UNICODE
+
+#ifndef _T
+#define __T(x) L ## x
+#define _T(x) __T(x)
+#define _TEXT(x) __T(x)
+#endif
+
+#ifndef _TCHAR_DEFINED
+#define _TCHAR_DEFINED
+#if !defined(_NATIVE_WCHAR_T_DEFINED) && !defined(_WCHAR_T_DEFINED)
+typedef unsigned short TCHAR;
+#else
+typedef wchar_t TCHAR;
+#endif
+#endif
+
+
+// program
+#define _tenviron _wenviron
+#define __targv __wargv
+
+// printfs
+#define _ftprintf fwprintf
+#define _sntprintf _snwprintf
+#if (defined(_MSC_VER) && (_MSC_VER<=1310)) || defined(__MINGW32__)
+# define _stprintf swprintf
+#else
+# define _stprintf _swprintf
+#endif
+#define _tprintf wprintf
+#define _vftprintf vfwprintf
+#define _vsntprintf _vsnwprintf
+#if defined(_MSC_VER) && (_MSC_VER<=1310)
+# define _vstprintf vswprintf
+#else
+# define _vstprintf _vswprintf
+#endif
+
+// scanfs
+#define _tscanf wscanf
+#define _stscanf swscanf
+
+// string manipulations
+#define _tcscat wcscat
+#define _tcschr wcschr
+#define _tcsclen wcslen
+#define _tcscpy wcscpy
+#define _tcsdup _wcsdup
+#define _tcslen wcslen
+#define _tcsnccpy wcsncpy
+#define _tcsncpy wcsncpy
+#define _tcsrchr wcsrchr
+#define _tcsstr wcsstr
+#define _tcstok wcstok
+
+// string comparisons
+#define _tcscmp wcscmp
+#define _tcsicmp _wcsicmp
+#define _tcsncicmp _wcsnicmp
+#define _tcsncmp wcsncmp
+#define _tcsnicmp _wcsnicmp
+
+// upper / lower
+#define _tcslwr _wcslwr
+#define _tcsupr _wcsupr
+#define _totlower towlower
+#define _totupper towupper
+
+// conversions to numbers
+#define _tcstoi64 _wcstoi64
+#define _tcstol wcstol
+#define _tcstoul wcstoul
+#define _tstof _wtof
+#define _tstoi _wtoi
+#define _tstoi64 _wtoi64
+#define _ttoi _wtoi
+#define _ttoi64 _wtoi64
+#define _ttol _wtol
+
+// conversion from numbers to strings
+#define _itot _itow
+#define _ltot _ltow
+#define _i64tot _i64tow
+#define _ui64tot _ui64tow
+
+// file manipulations
+#define _tfopen _wfopen
+#define _topen _wopen
+#define _tremove _wremove
+#define _tunlink _wunlink
+
+// reading and writing to i/o
+#define _fgettc fgetwc
+#define _fgetts fgetws
+#define _fputts fputws
+#define _gettchar getwchar
+
+// directory
+#define _tchdir _wchdir
+
+// environment
+#define _tgetenv _wgetenv
+#define _tsystem _wsystem
+
+// time
+#define _tcsftime wcsftime
+
+#else // ANSI
+
+#ifndef _T
+#define _T(x) x
+#define _TEXT(x) x
+#endif
+
+#ifndef _TCHAR_DEFINED
+#define _TCHAR_DEFINED
+typedef char TCHAR;
+#endif
+
+// program
+#define _tenviron environ
+#define __targv __argv
+
+// printfs
+#define _ftprintf fprintf
+#define _sntprintf _snprintf
+#define _stprintf sprintf
+#define _tprintf printf
+#define _vftprintf vfprintf
+#define _vsntprintf _vsnprintf
+#define _vstprintf vsprintf
+
+// scanfs
+#define _tscanf scanf
+#define _stscanf sscanf
+
+// string manipulations
+#define _tcscat strcat
+#define _tcschr strchr
+#define _tcsclen strlen
+#define _tcscnlen strnlen
+#define _tcscpy strcpy
+#define _tcsdup _strdup
+#define _tcslen strlen
+#define _tcsnccpy strncpy
+#define _tcsrchr strrchr
+#define _tcsstr strstr
+#define _tcstok strtok
+
+// string comparisons
+#define _tcscmp strcmp
+#define _tcsicmp _stricmp
+#define _tcsncmp strncmp
+#define _tcsncicmp _strnicmp
+#define _tcsnicmp _strnicmp
+
+// upper / lower
+#define _tcslwr _strlwr
+#define _tcsupr _strupr
+
+#define _totupper toupper
+#define _totlower tolower
+
+// conversions to numbers
+#define _tcstol strtol
+#define _tcstoul strtoul
+#define _tstof atof
+#define _tstoi atoi
+#define _tstoi64 _atoi64
+#define _tstoi64 _atoi64
+#define _ttoi atoi
+#define _ttoi64 _atoi64
+#define _ttol atol
+
+// conversion from numbers to strings
+#define _i64tot _i64toa
+#define _itot _itoa
+#define _ltot _ltoa
+#define _ui64tot _ui64toa
+
+// file manipulations
+#define _tfopen fopen
+#define _topen _open
+#define _tremove remove
+#define _tunlink _unlink
+
+// reading and writing to i/o
+#define _fgettc fgetc
+#define _fgetts fgets
+#define _fputts fputs
+#define _gettchar getchar
+
+// directory
+#define _tchdir _chdir
+
+// environment
+#define _tgetenv getenv
+#define _tsystem system
+
+// time
+#define _tcsftime strftime
+
+#endif
+
+// is functions (the same in Unicode / ANSI)
+#define _istgraph isgraph
+#define _istascii __isascii
+
+#define __TFILE__ _T(__FILE__)
+#define __TDATE__ _T(__DATE__)
+#define __TTIME__ _T(__TIME__)
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/pluginapi.cpp b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/pluginapi.cpp
new file mode 100644
index 0000000..69406a8
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/pluginapi.cpp
@@ -0,0 +1,292 @@
+#include "StdAfx.h"
+
+#ifdef _countof
+#define COUNTOF _countof
+#else
+#define COUNTOF(a) (sizeof(a)/sizeof(a[0]))
+#endif
+
+unsigned int g_stringsize;
+stack_t **g_stacktop;
+TCHAR *g_variables;
+
+// utility functions (not required but often useful)
+
+int NSISCALL popstring(TCHAR *str)
+{
+ stack_t *th;
+ if (!g_stacktop || !*g_stacktop) return 1;
+ th=(*g_stacktop);
+ if (str) lstrcpy(str,th->text);
+ *g_stacktop = th->next;
+ GlobalFree((HGLOBAL)th);
+ return 0;
+}
+
+int NSISCALL popstringn(TCHAR *str, int maxlen)
+{
+ stack_t *th;
+ if (!g_stacktop || !*g_stacktop) return 1;
+ th=(*g_stacktop);
+ if (str) lstrcpyn(str,th->text,maxlen?maxlen:g_stringsize);
+ *g_stacktop = th->next;
+ GlobalFree((HGLOBAL)th);
+ return 0;
+}
+
+void NSISCALL pushstring(const TCHAR *str)
+{
+ stack_t *th;
+ if (!g_stacktop) return;
+ th=(stack_t*)GlobalAlloc(GPTR,(sizeof(stack_t)+(g_stringsize)*sizeof(TCHAR)));
+ lstrcpyn(th->text,str,g_stringsize);
+ th->next=*g_stacktop;
+ *g_stacktop=th;
+}
+
+TCHAR* NSISCALL getuservariable(const int varnum)
+{
+ if (varnum < 0 || varnum >= __INST_LAST) return NULL;
+ return g_variables+varnum*g_stringsize;
+}
+
+void NSISCALL setuservariable(const int varnum, const TCHAR *var)
+{
+ if (var != NULL && varnum >= 0 && varnum < __INST_LAST)
+ lstrcpy(g_variables + varnum*g_stringsize, var);
+}
+
+#ifdef _UNICODE
+int NSISCALL PopStringA(char* ansiStr)
+{
+ wchar_t* wideStr = (wchar_t*) GlobalAlloc(GPTR, g_stringsize*sizeof(wchar_t));
+ int rval = popstring(wideStr);
+ WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
+ GlobalFree((HGLOBAL)wideStr);
+ return rval;
+}
+
+int NSISCALL PopStringNA(char* ansiStr, int maxlen)
+{
+ int realLen = maxlen ? maxlen : g_stringsize;
+ wchar_t* wideStr = (wchar_t*) GlobalAlloc(GPTR, realLen*sizeof(wchar_t));
+ int rval = popstringn(wideStr, realLen);
+ WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, realLen, NULL, NULL);
+ GlobalFree((HGLOBAL)wideStr);
+ return rval;
+}
+
+void NSISCALL PushStringA(const char* ansiStr)
+{
+ wchar_t* wideStr = (wchar_t*) GlobalAlloc(GPTR, g_stringsize*sizeof(wchar_t));
+ MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
+ pushstring(wideStr);
+ GlobalFree((HGLOBAL)wideStr);
+ return;
+}
+
+void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr)
+{
+ lstrcpyW(wideStr, getuservariable(varnum));
+}
+
+void NSISCALL GetUserVariableA(const int varnum, char* ansiStr)
+{
+ wchar_t* wideStr = getuservariable(varnum);
+ WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
+}
+
+void NSISCALL SetUserVariableA(const int varnum, const char* ansiStr)
+{
+ if (ansiStr != NULL && varnum >= 0 && varnum < __INST_LAST)
+ {
+ wchar_t* wideStr = g_variables + varnum * g_stringsize;
+ MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
+ }
+}
+
+#else
+// ANSI defs
+int NSISCALL PopStringW(wchar_t* wideStr)
+{
+ char* ansiStr = (char*) GlobalAlloc(GPTR, g_stringsize);
+ int rval = popstring(ansiStr);
+ MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
+ GlobalFree((HGLOBAL)ansiStr);
+ return rval;
+}
+
+int NSISCALL PopStringNW(wchar_t* wideStr, int maxlen)
+{
+ int realLen = maxlen ? maxlen : g_stringsize;
+ char* ansiStr = (char*) GlobalAlloc(GPTR, realLen);
+ int rval = popstringn(ansiStr, realLen);
+ MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, realLen);
+ GlobalFree((HGLOBAL)ansiStr);
+ return rval;
+}
+
+void NSISCALL PushStringW(wchar_t* wideStr)
+{
+ char* ansiStr = (char*) GlobalAlloc(GPTR, g_stringsize);
+ WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
+ pushstring(ansiStr);
+ GlobalFree((HGLOBAL)ansiStr);
+}
+
+void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr)
+{
+ char* ansiStr = getuservariable(varnum);
+ MultiByteToWideChar(CP_ACP, 0, ansiStr, -1, wideStr, g_stringsize);
+}
+
+void NSISCALL GetUserVariableA(const int varnum, char* ansiStr)
+{
+ lstrcpyA(ansiStr, getuservariable(varnum));
+}
+
+void NSISCALL SetUserVariableW(const int varnum, const wchar_t* wideStr)
+{
+ if (wideStr != NULL && varnum >= 0 && varnum < __INST_LAST)
+ {
+ char* ansiStr = g_variables + varnum * g_stringsize;
+ WideCharToMultiByte(CP_ACP, 0, wideStr, -1, ansiStr, g_stringsize, NULL, NULL);
+ }
+}
+#endif
+
+// playing with integers
+
+INT_PTR NSISCALL nsishelper_str_to_ptr(const TCHAR *s)
+{
+ INT_PTR v=0;
+ if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X')))
+ {
+ s++;
+ for (;;)
+ {
+ int c=*(++s);
+ if (c >= _T('0') && c <= _T('9')) c-=_T('0');
+ else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;
+ else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;
+ else break;
+ v<<=4;
+ v+=c;
+ }
+ }
+ else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0'))
+ {
+ for (;;)
+ {
+ int c=*(++s);
+ if (c >= _T('0') && c <= _T('7')) c-=_T('0');
+ else break;
+ v<<=3;
+ v+=c;
+ }
+ }
+ else
+ {
+ int sign=0;
+ if (*s == _T('-')) sign++; else s--;
+ for (;;)
+ {
+ int c=*(++s) - _T('0');
+ if (c < 0 || c > 9) break;
+ v*=10;
+ v+=c;
+ }
+ if (sign) v = -v;
+ }
+
+ return v;
+}
+
+unsigned int NSISCALL myatou(const TCHAR *s)
+{
+ unsigned int v=0;
+
+ for (;;)
+ {
+ unsigned int c=*s++;
+ if (c >= _T('0') && c <= _T('9')) c-=_T('0');
+ else break;
+ v*=10;
+ v+=c;
+ }
+ return v;
+}
+
+int NSISCALL myatoi_or(const TCHAR *s)
+{
+ int v=0;
+ if (*s == _T('0') && (s[1] == _T('x') || s[1] == _T('X')))
+ {
+ s++;
+ for (;;)
+ {
+ int c=*(++s);
+ if (c >= _T('0') && c <= _T('9')) c-=_T('0');
+ else if (c >= _T('a') && c <= _T('f')) c-=_T('a')-10;
+ else if (c >= _T('A') && c <= _T('F')) c-=_T('A')-10;
+ else break;
+ v<<=4;
+ v+=c;
+ }
+ }
+ else if (*s == _T('0') && s[1] <= _T('7') && s[1] >= _T('0'))
+ {
+ for (;;)
+ {
+ int c=*(++s);
+ if (c >= _T('0') && c <= _T('7')) c-=_T('0');
+ else break;
+ v<<=3;
+ v+=c;
+ }
+ }
+ else
+ {
+ int sign=0;
+ if (*s == _T('-')) sign++; else s--;
+ for (;;)
+ {
+ int c=*(++s) - _T('0');
+ if (c < 0 || c > 9) break;
+ v*=10;
+ v+=c;
+ }
+ if (sign) v = -v;
+ }
+
+ // Support for simple ORed expressions
+ if (*s == _T('|'))
+ {
+ v |= myatoi_or(s+1);
+ }
+
+ return v;
+}
+
+INT_PTR NSISCALL popintptr()
+{
+ TCHAR buf[128];
+ if (popstringn(buf,COUNTOF(buf)))
+ return 0;
+ return nsishelper_str_to_ptr(buf);
+}
+
+int NSISCALL popint_or()
+{
+ TCHAR buf[128];
+ if (popstringn(buf,COUNTOF(buf)))
+ return 0;
+ return myatoi_or(buf);
+}
+
+void NSISCALL pushintptr(INT_PTR value)
+{
+ TCHAR buffer[30];
+ wsprintf(buffer, sizeof(void*) > 4 ? _T("%Id") : _T("%d"), value);
+ pushstring(buffer);
+}
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/pluginapi.h b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/pluginapi.h
new file mode 100644
index 0000000..f607b11
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/pluginapi.h
@@ -0,0 +1,115 @@
+#ifndef ___NSIS_PLUGIN__H___
+#define ___NSIS_PLUGIN__H___
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "api.h"
+#ifdef _UNICODE
+#ifndef _T
+#define __T(x) L ## x
+#define _T(x) __T(x)
+#define _TEXT(x) __T(x)
+#endif
+#else
+#ifndef _T
+#define _T(x) x
+#define _TEXT(x) x
+#endif
+#endif
+
+#ifndef NSISCALL
+# define NSISCALL __stdcall
+#endif
+
+#define EXDLL_INIT() { \
+ g_stringsize=string_size; \
+ g_stacktop=stacktop; \
+ g_variables=variables; }
+
+typedef struct _stack_t {
+ struct _stack_t *next;
+ TCHAR text[1]; // this should be the length of string_size
+} stack_t;
+
+enum
+{
+INST_0, // $0
+INST_1, // $1
+INST_2, // $2
+INST_3, // $3
+INST_4, // $4
+INST_5, // $5
+INST_6, // $6
+INST_7, // $7
+INST_8, // $8
+INST_9, // $9
+INST_R0, // $R0
+INST_R1, // $R1
+INST_R2, // $R2
+INST_R3, // $R3
+INST_R4, // $R4
+INST_R5, // $R5
+INST_R6, // $R6
+INST_R7, // $R7
+INST_R8, // $R8
+INST_R9, // $R9
+INST_CMDLINE, // $CMDLINE
+INST_INSTDIR, // $INSTDIR
+INST_OUTDIR, // $OUTDIR
+INST_EXEDIR, // $EXEDIR
+INST_LANG, // $LANGUAGE
+__INST_LAST
+};
+
+extern unsigned int g_stringsize;
+extern stack_t **g_stacktop;
+extern TCHAR *g_variables;
+
+void NSISCALL pushstring(const TCHAR *str);
+void NSISCALL pushintptr(INT_PTR value);
+#define pushint(v) pushintptr((INT_PTR)(v))
+int NSISCALL popstring(TCHAR *str); // 0 on success, 1 on empty stack
+int NSISCALL popstringn(TCHAR *str, int maxlen); // with length limit, pass 0 for g_stringsize
+INT_PTR NSISCALL popintptr();
+#define popint() ( (int) popintptr() )
+int NSISCALL popint_or(); // with support for or'ing (2|4|8)
+INT_PTR NSISCALL nsishelper_str_to_ptr(const TCHAR *s);
+#define myatoi(s) ( (int) nsishelper_str_to_ptr(s) ) // converts a string to an integer
+unsigned int NSISCALL myatou(const TCHAR *s); // converts a string to an unsigned integer, decimal only
+int NSISCALL myatoi_or(const TCHAR *s); // with support for or'ing (2|4|8)
+TCHAR* NSISCALL getuservariable(const int varnum);
+void NSISCALL setuservariable(const int varnum, const TCHAR *var);
+
+#ifdef _UNICODE
+#define PopStringW(x) popstring(x)
+#define PushStringW(x) pushstring(x)
+#define SetUserVariableW(x,y) setuservariable(x,y)
+
+int NSISCALL PopStringA(char* ansiStr);
+void NSISCALL PushStringA(const char* ansiStr);
+void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr);
+void NSISCALL GetUserVariableA(const int varnum, char* ansiStr);
+void NSISCALL SetUserVariableA(const int varnum, const char* ansiStr);
+
+#else
+// ANSI defs
+
+#define PopStringA(x) popstring(x)
+#define PushStringA(x) pushstring(x)
+#define SetUserVariableA(x,y) setuservariable(x,y)
+
+int NSISCALL PopStringW(wchar_t* wideStr);
+void NSISCALL PushStringW(wchar_t* wideStr);
+void NSISCALL GetUserVariableW(const int varnum, wchar_t* wideStr);
+void NSISCALL GetUserVariableA(const int varnum, char* ansiStr);
+void NSISCALL SetUserVariableW(const int varnum, const wchar_t* wideStr);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif//!___NSIS_PLUGIN__H___
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/resource.h b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/resource.h
new file mode 100644
index 0000000..08340b3
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/resource.h
@@ -0,0 +1,19 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by resource.rc
+//
+#define MY_VER_BUILD 0
+#define DBG_FL 0
+#define MY_VER_MAJOR 9
+#define MY_VER_MINOR 20
+
+// 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 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/resource.rc b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/resource.rc
new file mode 100644
index 0000000..18da943
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z/resource.rc
@@ -0,0 +1,99 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (United States) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 25,01,0,0
+ PRODUCTVERSION 25,01,0,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "Igor Pavlov"
+ VALUE "FileDescription", "7-Zip NSIS Plug-in"
+ VALUE "FileVersion", "25.01.0.0"
+ VALUE "InternalName", "nsis7z"
+ VALUE "LegalCopyright", "Copyright (c) 1999-2025 Igor Pavlov, Nik Medved, Marek Mizanin, Stuart Welch"
+ VALUE "OriginalFilename", "nsis7z.dll"
+ VALUE "ProductName", "7-Zip"
+ VALUE "ProductVersion", "25.01.0.0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+#endif // English (United States) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/versions/26.01-bundle/CPP/7zip/Common b/versions/26.01-bundle/CPP/7zip/Common
new file mode 120000
index 0000000..eccaff8
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Common
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Common
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Compress b/versions/26.01-bundle/CPP/7zip/Compress
new file mode 120000
index 0000000..2b2454c
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Compress
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Compress
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Crc.mak b/versions/26.01-bundle/CPP/7zip/Crc.mak
new file mode 120000
index 0000000..3bded4c
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Crc.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Crc.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Crc64.mak b/versions/26.01-bundle/CPP/7zip/Crc64.mak
new file mode 120000
index 0000000..acf53df
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Crc64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Crc64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Crypto b/versions/26.01-bundle/CPP/7zip/Crypto
new file mode 120000
index 0000000..c663fb4
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Crypto
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Crypto
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/GuiCommon.rc b/versions/26.01-bundle/CPP/7zip/GuiCommon.rc
new file mode 120000
index 0000000..4fd330b
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/GuiCommon.rc
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/GuiCommon.rc
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Guid.txt b/versions/26.01-bundle/CPP/7zip/Guid.txt
new file mode 120000
index 0000000..979e8eb
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Guid.txt
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Guid.txt
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/ICoder.h b/versions/26.01-bundle/CPP/7zip/ICoder.h
new file mode 120000
index 0000000..c343396
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/ICoder.h
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/ICoder.h
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/IDecl.h b/versions/26.01-bundle/CPP/7zip/IDecl.h
new file mode 120000
index 0000000..8355747
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/IDecl.h
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/IDecl.h
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/IPassword.h b/versions/26.01-bundle/CPP/7zip/IPassword.h
new file mode 120000
index 0000000..e8254fe
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/IPassword.h
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/IPassword.h
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/IProgress.h b/versions/26.01-bundle/CPP/7zip/IProgress.h
new file mode 120000
index 0000000..1bba56d
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/IProgress.h
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/IProgress.h
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/IStream.h b/versions/26.01-bundle/CPP/7zip/IStream.h
new file mode 120000
index 0000000..0048ac8
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/IStream.h
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/IStream.h
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/LzFindOpt.mak b/versions/26.01-bundle/CPP/7zip/LzFindOpt.mak
new file mode 120000
index 0000000..6e0d543
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/LzFindOpt.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/LzFindOpt.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/LzmaDec.mak b/versions/26.01-bundle/CPP/7zip/LzmaDec.mak
new file mode 120000
index 0000000..e905007
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/LzmaDec.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/LzmaDec.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/LzmaDec_gcc.mak b/versions/26.01-bundle/CPP/7zip/LzmaDec_gcc.mak
new file mode 100644
index 0000000..59f815c
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/LzmaDec_gcc.mak
@@ -0,0 +1,4 @@
+# Forwarding stub: Arc_gcc.mak includes ../../LzmaDec_gcc.mak relative to make's CWD.
+# When building from versions/26.01-bundle/CPP/7zip/Bundles/Nsis7z, the CWD-relative
+# ../../LzmaDec_gcc.mak resolves here. Forward to the real file in the vendor tree.
+include $(VENDOR_7ZIP)/LzmaDec_gcc.mak
diff --git a/versions/26.01-bundle/CPP/7zip/MyVersion.h b/versions/26.01-bundle/CPP/7zip/MyVersion.h
new file mode 120000
index 0000000..703bd0b
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/MyVersion.h
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/MyVersion.h
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/MyVersionInfo.rc b/versions/26.01-bundle/CPP/7zip/MyVersionInfo.rc
new file mode 120000
index 0000000..2e82f19
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/MyVersionInfo.rc
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/MyVersionInfo.rc
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/PropID.h b/versions/26.01-bundle/CPP/7zip/PropID.h
new file mode 120000
index 0000000..e5af387
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/PropID.h
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/PropID.h
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Sha1.mak b/versions/26.01-bundle/CPP/7zip/Sha1.mak
new file mode 120000
index 0000000..7e77097
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Sha1.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Sha1.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Sha256.mak b/versions/26.01-bundle/CPP/7zip/Sha256.mak
new file mode 120000
index 0000000..55bec47
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Sha256.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Sha256.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/Sort.mak b/versions/26.01-bundle/CPP/7zip/Sort.mak
new file mode 120000
index 0000000..583dc94
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/Sort.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/Sort.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/SubBuild.mak b/versions/26.01-bundle/CPP/7zip/SubBuild.mak
new file mode 120000
index 0000000..dc13170
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/SubBuild.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/SubBuild.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/UI/Agent b/versions/26.01-bundle/CPP/7zip/UI/Agent
new file mode 120000
index 0000000..61063b9
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/Agent
@@ -0,0 +1 @@
+../../../../26.01/CPP/7zip/UI/Agent
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/UI/Client7z b/versions/26.01-bundle/CPP/7zip/UI/Client7z
new file mode 120000
index 0000000..a7f7a8e
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/Client7z
@@ -0,0 +1 @@
+../../../../26.01/CPP/7zip/UI/Client7z
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/UI/Common b/versions/26.01-bundle/CPP/7zip/UI/Common
new file mode 120000
index 0000000..ac81d20
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/Common
@@ -0,0 +1 @@
+../../../../26.01/CPP/7zip/UI/Common
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/UI/Console b/versions/26.01-bundle/CPP/7zip/UI/Console
new file mode 120000
index 0000000..44f2b0a
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/Console
@@ -0,0 +1 @@
+../../../../26.01/CPP/7zip/UI/Console
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/UI/Explorer b/versions/26.01-bundle/CPP/7zip/UI/Explorer
new file mode 120000
index 0000000..c3dc116
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/Explorer
@@ -0,0 +1 @@
+../../../../26.01/CPP/7zip/UI/Explorer
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/UI/Far b/versions/26.01-bundle/CPP/7zip/UI/Far
new file mode 120000
index 0000000..f8f7499
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/Far
@@ -0,0 +1 @@
+../../../../26.01/CPP/7zip/UI/Far
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/UI/FileManager b/versions/26.01-bundle/CPP/7zip/UI/FileManager
new file mode 120000
index 0000000..b287912
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/FileManager
@@ -0,0 +1 @@
+../../../../26.01/CPP/7zip/UI/FileManager
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/UI/GUI b/versions/26.01-bundle/CPP/7zip/UI/GUI
new file mode 120000
index 0000000..d1e6438
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/GUI
@@ -0,0 +1 @@
+../../../../26.01/CPP/7zip/UI/GUI
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/UI/NSIS/ExtractCallbackConsole.cpp b/versions/26.01-bundle/CPP/7zip/UI/NSIS/ExtractCallbackConsole.cpp
new file mode 100644
index 0000000..57c1701
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/NSIS/ExtractCallbackConsole.cpp
@@ -0,0 +1,171 @@
+// ExtractCallbackConsole.h
+
+#include "StdAfx.h"
+
+#include "../../../Common/Common.h"
+#include "ExtractCallbackConsole.h"
+#include "UserInputUtils2.h"
+#include "NSISBreak.h"
+
+#include "Common/Wildcard.h"
+
+#include "Windows/FileDir.h"
+#include "Windows/FileFind.h"
+#include "Windows/TimeUtils.h"
+#include "Windows/Defs.h"
+#include "Windows/PropVariant.h"
+#include "Windows/ErrorMsg.h"
+#include "Windows/PropVariantConv.h"
+
+#include "../../Common/FilePathAutoRename.h"
+
+#include "../Common/ExtractingFilePath.h"
+
+using namespace NWindows;
+using namespace NFile;
+using namespace NDir;
+
+extern HWND g_hwndProgress;
+
+static const UInt64 k_SizeUnknown = (UInt64)(Int64)-1;
+
+void CExtractCallbackConsole::UpdateProgress()
+{
+ // Prima controlla se c'è il callback con filename (nuova funzione)
+ if (ProgressWithFileHandler != NULL)
+ {
+ if (completedSize != k_SizeUnknown || totalSize > 0)
+ ProgressWithFileHandler(completedSize, totalSize, CurrentFileName.Ptr());
+ else
+ ProgressWithFileHandler(0, 0, CurrentFileName.Ptr());
+ }
+ // Altrimenti usa il callback originale (per compatibilità)
+ else if (ProgressHandler != NULL)
+ {
+ if (completedSize != k_SizeUnknown || totalSize > 0)
+ ProgressHandler(completedSize, totalSize);
+ else
+ ProgressHandler(0, 0);
+ }
+}
+
+Z7_COM7F_IMF(CExtractCallbackConsole::SetTotal(UInt64 val))
+{
+ totalSize = val;
+ UpdateProgress();
+ if (NNSISBreak::TestBreakSignal())
+ return E_ABORT;
+ return S_OK;
+}
+
+Z7_COM7F_IMF(CExtractCallbackConsole::SetCompleted(const UInt64 *val))
+{
+ completedSize = *val;
+ UpdateProgress();
+ if (NNSISBreak::TestBreakSignal())
+ return E_ABORT;
+ return S_OK;
+}
+
+Z7_COM7F_IMF(CExtractCallbackConsole::AskOverwrite(
+ const wchar_t *existName, const FILETIME *, const UInt64 *,
+ const wchar_t *newName, const FILETIME *, const UInt64 *,
+ Int32 *answer))
+{
+ (void)existName; (void)newName;
+ *answer = NOverwriteAnswer::kYesToAll;
+ return S_OK;
+}
+
+Z7_COM7F_IMF(CExtractCallbackConsole::PrepareOperation(const wchar_t *name, Int32 isFolder, Int32 askExtractMode, const UInt64 *position))
+{
+ (void)isFolder; (void)askExtractMode; (void)position;
+ // Memorizza il nome del file corrente per passarlo al callback
+ CurrentFileName = name;
+ return S_OK;
+}
+
+Z7_COM7F_IMF(CExtractCallbackConsole::MessageError(const wchar_t *message))
+{
+ (void)message;
+ NumFileErrorsInCurrentArchive++;
+ NumFileErrors++;
+ return S_OK;
+}
+
+Z7_COM7F_IMF(CExtractCallbackConsole::SetOperationResult(Int32 opRes, Int32 encrypted))
+{
+ (void)encrypted;
+ switch(opRes)
+ {
+ case NArchive::NExtract::NOperationResult::kOK:
+ break;
+ default:
+ {
+ NumFileErrorsInCurrentArchive++;
+ NumFileErrors++;
+
+ }
+ }
+ return S_OK;
+}
+
+#ifndef Z7_NO_CRYPTO
+
+HRESULT CExtractCallbackConsole::SetPassword(const UString &password)
+{
+ PasswordIsDefined = true;
+ Password = password;
+ return S_OK;
+}
+
+Z7_COM7F_IMF(CExtractCallbackConsole::CryptoGetTextPassword(BSTR *password))
+{
+ if (!PasswordIsDefined)
+ {
+ Password = GetPassword(OutStream);
+ PasswordIsDefined = true;
+ }
+ return StringToBstr(Password, password);
+}
+
+#endif
+
+HRESULT CExtractCallbackConsole::BeforeOpen(const wchar_t *name, bool testMode)
+{
+ (void)name; (void)testMode;
+ NumArchives++;
+ NumFileErrorsInCurrentArchive = 0;
+ return S_OK;
+}
+
+HRESULT CExtractCallbackConsole::OpenResult(const CCodecs *codecs, const CArchiveLink &arcLink, const wchar_t *name, HRESULT result)
+{
+ (void)codecs; (void)arcLink; (void)name;
+ if (result != S_OK)
+ {
+ NumArchiveErrors++;
+ }
+ return S_OK;
+}
+
+HRESULT CExtractCallbackConsole::ThereAreNoFiles()
+{
+ return S_OK;
+}
+
+HRESULT CExtractCallbackConsole::ExtractResult(HRESULT result)
+{
+ if (result == S_OK)
+ {
+ if (NumFileErrorsInCurrentArchive != 0)
+ {
+ NumArchiveErrors++;
+ }
+ return result;
+ }
+ NumArchiveErrors++;
+ if (result == E_ABORT || result == ERROR_DISK_FULL)
+ return result;
+ return S_OK;
+}
diff --git a/versions/26.01-bundle/CPP/7zip/UI/NSIS/ExtractCallbackConsole.h b/versions/26.01-bundle/CPP/7zip/UI/NSIS/ExtractCallbackConsole.h
new file mode 100644
index 0000000..e217cff
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/NSIS/ExtractCallbackConsole.h
@@ -0,0 +1,98 @@
+// ExtractCallbackConsole.h
+// NSIS version adapted for 7-Zip 25.01 API
+
+#ifndef __EXTRACTCALLBACKCONSOLE_H
+#define __EXTRACTCALLBACKCONSOLE_H
+
+#include "Common/MyCom.h"
+#include "Common/MyString.h"
+#include "Common/StdOutStream.h"
+#include "../../Common/FileStreams.h"
+#include "../../IPassword.h"
+#include "../../Archive/IArchive.h"
+#include "../Common/ArchiveExtractCallback.h"
+#include "../Console/OpenCallbackConsole.h"
+
+typedef void (*ExtractProgressHandler)(UInt64 completedSize, UInt64 totalSize);
+typedef void (*ExtractProgressWithFileHandler)(UInt64 completedSize, UInt64 totalSize, const wchar_t *fileName);
+
+class CExtractCallbackConsole Z7_final:
+ public IFolderArchiveExtractCallback,
+ public IExtractCallbackUI,
+#ifndef Z7_NO_CRYPTO
+ public ICryptoGetTextPassword,
+#endif
+ public COpenCallbackConsole,
+ public CMyUnknownImp
+{
+ Z7_COM_QI_BEGIN2(IFolderArchiveExtractCallback)
+#ifndef Z7_NO_CRYPTO
+ Z7_COM_QI_ENTRY(ICryptoGetTextPassword)
+#endif
+ Z7_COM_QI_END
+ Z7_COM_ADDREF_RELEASE
+
+ // IProgress
+ Z7_IFACE_COM7_IMP(IProgress)
+
+ // IFolderArchiveExtractCallback
+ Z7_IFACE_COM7_IMP(IFolderArchiveExtractCallback)
+
+ // IExtractCallbackUI (non-COM interface)
+ Z7_IFACE_IMP(IExtractCallbackUI)
+
+#ifndef Z7_NO_CRYPTO
+ Z7_IFACE_COM7_IMP(ICryptoGetTextPassword)
+#endif
+
+public:
+#ifndef Z7_NO_CRYPTO
+ bool PasswordIsDefined;
+ UString Password;
+#endif
+
+ UInt64 NumArchives;
+ UInt64 NumArchiveErrors;
+ UInt64 NumFileErrors;
+ UInt64 NumFileErrorsInCurrentArchive;
+
+ CStdOutStream *OutStream;
+
+ UInt64 totalSize, completedSize, lastVal;
+
+ ExtractProgressHandler ProgressHandler;
+ ExtractProgressWithFileHandler ProgressWithFileHandler;
+ UString CurrentFileName;
+
+ CExtractCallbackConsole():
+ PasswordIsDefined(false),
+ NumArchives(0),
+ NumArchiveErrors(0),
+ NumFileErrors(0),
+ NumFileErrorsInCurrentArchive(0),
+ OutStream(NULL),
+ totalSize((UInt64)(Int64)-1),
+ completedSize(0),
+ lastVal(0),
+ ProgressHandler(NULL),
+ ProgressWithFileHandler(NULL)
+ {}
+
+ void Init()
+ {
+ NumArchives = 0;
+ NumArchiveErrors = 0;
+ NumFileErrors = 0;
+ NumFileErrorsInCurrentArchive = 0;
+
+ totalSize = (UInt64)(Int64)-1;
+ completedSize = 0;
+ lastVal = 0;
+ ProgressHandler = NULL;
+ ProgressWithFileHandler = NULL;
+ }
+
+ void UpdateProgress();
+};
+
+#endif
diff --git a/versions/26.01-bundle/CPP/7zip/UI/NSIS/Main.cpp b/versions/26.01-bundle/CPP/7zip/UI/NSIS/Main.cpp
new file mode 100644
index 0000000..5db7482
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/NSIS/Main.cpp
@@ -0,0 +1,313 @@
+// Main.cpp
+
+#include "StdAfx.h"
+
+#include "../../../Common/Common.h"
+#include "Common/MyInitGuid.h"
+
+#include "Common/CommandLineParser.h"
+#include "Common/MyException.h"
+#include "Common/IntToString.h"
+#include "Common/StdOutStream.h"
+#include "Common/StringConvert.h"
+#include "Common/StringToInt.h"
+
+#include "Windows/FileDir.h"
+#include "Windows/FileName.h"
+#include "Windows/Defs.h"
+#include "Windows/ErrorMsg.h"
+#ifdef _WIN32
+#include "Windows/MemoryLock.h"
+#endif
+
+#include "../../IPassword.h"
+#include "../../ICoder.h"
+#include "../Common/UpdateAction.h"
+#include "../Common/Update.h"
+#include "../Common/Extract.h"
+#include "../Common/ArchiveCommandLine.h"
+#include "../Common/ExitCode.h"
+#ifdef EXTERNAL_CODECS
+#include "../Common/LoadCodecs.h"
+#endif
+
+//#include "../../Compress/LZMA_Alone/LzmaBenchCon.h"
+
+#include "../Console/OpenCallbackConsole.h"
+#include "ExtractCallbackConsole.h"
+
+#include "../../MyVersion.h"
+
+#if defined( _WIN32) && defined( _7ZIP_LARGE_PAGES)
+extern "C"
+{
+#include "../../../../C/Alloc.h"
+}
+#endif
+
+using namespace NWindows;
+using namespace NFile;
+using namespace NCommandLineParser;
+
+HINSTANCE g_hInstance = 0;
+
+// ---------------------------
+// exception messages
+
+#ifndef _WIN32
+static void GetArguments(int numArguments, const char *arguments[], UStringVector &parts)
+{
+ parts.Clear();
+ for(int i = 0; i < numArguments; i++)
+ {
+ UString s = MultiByteToUnicodeString(arguments[i]);
+ parts.Add(s);
+ }
+}
+#endif
+
+#ifdef EXTERNAL_CODECS
+static void PrintString(CStdOutStream &stdStream, const AString &s, int size)
+{
+ int len = s.Length();
+ stdStream << s;
+ for (int i = len; i < size; i++)
+ stdStream << ' ';
+}
+#endif
+
+static inline char GetHex(Byte value)
+{
+ return (char)((value < 10) ? ('0' + value) : ('A' + (value - 10)));
+}
+
+#ifdef _WIN32
+void SwitchFileAPIEncoding(BOOL ansi)
+{
+ if (ansi)
+ {
+ SetFileApisToOEM();
+ }
+ else
+ {
+ SetFileApisToANSI();
+ }
+}
+#endif
+
+int DoExtractArchive(UString archive, UString targetDir, bool overwrite, bool extractPaths, ExtractProgressHandler epc, const UStringVector& skipPatterns)
+{
+ CCodecs *codecs = new CCodecs;
+ CMyComPtr compressCodecsInfo = codecs;
+ HRESULT result = codecs->Load();
+
+ if (result != S_OK)
+ throw CSystemException(result);
+
+ if (codecs->Formats.Size() == 0) throw -1;
+
+ CIntVector formatIndices;
+
+ if (!codecs->FindFormatForArchiveType(L"7z", formatIndices))
+ {
+ throw -1;
+ }
+
+ BOOL bApisAreAnsi = AreFileApisANSI();
+
+#ifdef _WIN32
+ if (bApisAreAnsi)
+ SwitchFileAPIEncoding(bApisAreAnsi);
+#endif
+
+ CExtractCallbackConsole *ecs = new CExtractCallbackConsole();
+ CMyComPtr extractCallback = ecs;
+ ecs->Init();
+ ecs->ProgressHandler = epc; // Imposta DOPO Init()
+
+ COpenCallbackConsole openCallback;
+
+ CExtractOptions eo;
+ eo.StdOutMode = false;
+ eo.PathMode = extractPaths?NExtract::NPathMode::kCurPaths:NExtract::NPathMode::kNoPaths;
+ eo.TestMode = false;
+ eo.OverwriteMode = overwrite?NExtract::NOverwriteMode::kOverwrite:NExtract::NOverwriteMode::kSkip;
+ eo.OutputDir = targetDir;
+ eo.YesToAll = true;
+#ifdef COMPRESS_MT
+ CObjectVector prp;
+ eo.Properties = prp;
+#endif
+ UString errorMessage;
+ CDecompressStat stat;
+ NWildcard::CCensor wildcardCensor;
+ NWildcard::CCensorPathProps props;
+ props.Recursive = true;
+ props.WildcardMatching = true;
+ wildcardCensor.AddItem(NWildcard::ECensorPathMode::k_FullPath, true, L"*", props);
+ for (unsigned i = 0; i < skipPatterns.Size(); i++)
+ {
+ const UString &p = skipPatterns[i];
+ if (p.IsEmpty()) continue;
+ // Keep only single-name patterns: multi-segment ones land in a separate Pair
+ // and would be silently ignored by Pairs.Front().Head below.
+ if (p.Find(L'\\') >= 0 || p.Find(L'/') >= 0) continue;
+ wildcardCensor.AddItem(NWildcard::ECensorPathMode::k_FullPath, false, p, props);
+ }
+ UStringVector ArchivePathsSorted;
+ UStringVector ArchivePathsFullSorted;
+ ArchivePathsSorted.Add(archive);
+ UString fullPath;
+ NFile::NDir::MyGetFullPathName(archive, fullPath);
+ ArchivePathsFullSorted.Add(fullPath);
+
+ UStringVector v1, v2;
+ v1.Add(fs2us(archive));
+ v2.Add(fs2us(archive));
+ const NWildcard::CCensorNode &wildcardCensorHead =
+ wildcardCensor.Pairs.Front().Head;
+
+ result = Extract(
+ codecs, CObjectVector(), CIntVector(),
+ v1, v2,
+ wildcardCensorHead,
+ eo, ecs, ecs, ecs,
+#ifndef Z7_SFX
+ NULL, // hash
+#endif
+ errorMessage, stat);
+
+#ifdef _WIN32
+ if (bApisAreAnsi)
+ SwitchFileAPIEncoding(!bApisAreAnsi);
+#endif
+
+
+ if (!errorMessage.IsEmpty())
+ {
+ if (result == S_OK)
+ result = E_FAIL;
+ }
+
+ if (ecs->NumArchiveErrors != 0 || ecs->NumFileErrors != 0)
+ {
+ if (result != S_OK)
+ throw CSystemException(result);
+
+ return NExitCode::kFatalError;
+ }
+
+ if (result != S_OK)
+ throw CSystemException(result);
+
+ return 0;
+}
+
+int DoExtractArchiveWithFile(UString archive, UString targetDir, bool overwrite, bool extractPaths, ExtractProgressWithFileHandler epc, const UStringVector& skipPatterns)
+{
+ CCodecs *codecs = new CCodecs;
+ CMyComPtr compressCodecsInfo = codecs;
+ HRESULT result = codecs->Load();
+
+ if (result != S_OK)
+ throw CSystemException(result);
+
+ if (codecs->Formats.Size() == 0) throw -1;
+
+ CIntVector formatIndices;
+
+ if (!codecs->FindFormatForArchiveType(L"7z", formatIndices))
+ {
+ throw -1;
+ }
+
+ BOOL bApisAreAnsi = AreFileApisANSI();
+
+#ifdef _WIN32
+ if (bApisAreAnsi)
+ SwitchFileAPIEncoding(bApisAreAnsi);
+#endif
+
+ CExtractCallbackConsole *ecs = new CExtractCallbackConsole();
+ CMyComPtr extractCallback = ecs;
+ ecs->Init();
+ ecs->ProgressWithFileHandler = epc; // Imposta DOPO Init() per evitare che venga resettato
+
+ COpenCallbackConsole openCallback;
+
+ CExtractOptions eo;
+ eo.StdOutMode = false;
+ eo.PathMode = extractPaths?NExtract::NPathMode::kCurPaths:NExtract::NPathMode::kNoPaths;
+ eo.TestMode = false;
+ eo.OverwriteMode = overwrite?NExtract::NOverwriteMode::kOverwrite:NExtract::NOverwriteMode::kSkip;
+ eo.OutputDir = targetDir;
+ eo.YesToAll = true;
+#ifdef COMPRESS_MT
+ CObjectVector prp;
+ eo.Properties = prp;
+#endif
+ UString errorMessage;
+ CDecompressStat stat;
+ NWildcard::CCensor wildcardCensor;
+ NWildcard::CCensorPathProps props;
+ props.Recursive = true;
+ props.WildcardMatching = true;
+ wildcardCensor.AddItem(NWildcard::ECensorPathMode::k_FullPath, true, L"*", props);
+ for (unsigned i = 0; i < skipPatterns.Size(); i++)
+ {
+ const UString &p = skipPatterns[i];
+ if (p.IsEmpty()) continue;
+ // Keep only single-name patterns: multi-segment ones land in a separate Pair
+ // and would be silently ignored by Pairs.Front().Head below.
+ if (p.Find(L'\\') >= 0 || p.Find(L'/') >= 0) continue;
+ wildcardCensor.AddItem(NWildcard::ECensorPathMode::k_FullPath, false, p, props);
+ }
+ UStringVector ArchivePathsSorted;
+ UStringVector ArchivePathsFullSorted;
+ ArchivePathsSorted.Add(archive);
+ UString fullPath;
+ NFile::NDir::MyGetFullPathName(archive, fullPath);
+ ArchivePathsFullSorted.Add(fullPath);
+
+ UStringVector v1, v2;
+ v1.Add(fs2us(archive));
+ v2.Add(fs2us(archive));
+ const NWildcard::CCensorNode &wildcardCensorHead =
+ wildcardCensor.Pairs.Front().Head;
+
+ result = Extract(
+ codecs, CObjectVector(), CIntVector(),
+ v1, v2,
+ wildcardCensorHead,
+ eo, ecs, ecs, ecs,
+#ifndef Z7_SFX
+ NULL, // hash
+#endif
+ errorMessage, stat);
+
+#ifdef _WIN32
+ if (bApisAreAnsi)
+ SwitchFileAPIEncoding(!bApisAreAnsi);
+#endif
+
+
+ if (!errorMessage.IsEmpty())
+ {
+ if (result == S_OK)
+ result = E_FAIL;
+ }
+
+ if (ecs->NumArchiveErrors != 0 || ecs->NumFileErrors != 0)
+ {
+ if (result != S_OK)
+ throw CSystemException(result);
+
+ return NExitCode::kFatalError;
+ }
+
+ if (result != S_OK)
+ throw CSystemException(result);
+
+ return 0;
+}
+
diff --git a/versions/26.01-bundle/CPP/7zip/UI/NSIS/MainAr.cpp b/versions/26.01-bundle/CPP/7zip/UI/NSIS/MainAr.cpp
new file mode 100644
index 0000000..ba15c26
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/NSIS/MainAr.cpp
@@ -0,0 +1,109 @@
+// MainAr.cpp
+
+#include "StdAfx.h"
+
+// #include
+
+#include "../../../Common/Common.h"
+
+#include "Windows/ErrorMsg.h"
+
+#include "Common/StdOutStream.h"
+#include "Common/NewHandler.h"
+#include "Common/MyException.h"
+#include "Common/StringConvert.h"
+
+#include "../Common/ExitCode.h"
+#include "../Common/ArchiveCommandLine.h"
+#include "ExtractCallbackConsole.h"
+#include "NSISBreak.h"
+
+using namespace NWindows;
+
+#ifdef _WIN32
+
+#pragma warning(disable : 4996)
+
+#ifndef _UNICODE
+bool g_IsNT = false;
+#endif
+#if !defined(_UNICODE) || !defined(_WIN64)
+static inline bool IsItWindowsNT()
+{
+ OSVERSIONINFO versionInfo;
+ versionInfo.dwOSVersionInfoSize = sizeof(versionInfo);
+ if (!::GetVersionEx(&versionInfo))
+ return false;
+ return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT);
+}
+#endif
+#endif
+
+void DoInitialize()
+{
+ #ifdef _WIN32
+
+ #ifdef _UNICODE
+ #ifndef _WIN64
+ if (!IsItWindowsNT())
+ {
+ //(*g_StdStream) << "This program requires Windows NT/2000/2003/2008/XP/Vista";
+ // return NExitCode::kFatalError;
+ return;
+ }
+ #endif
+ #else
+ g_IsNT = IsItWindowsNT();
+ #endif
+
+ #endif
+}
+
+
+extern int DoExtractArchive(UString archive, UString targetDir, bool overwrite, bool extractPathes, ExtractProgressHandler epc, const UStringVector& skipPatterns);
+extern int DoExtractArchiveWithFile(UString archive, UString targetDir, bool overwrite, bool extractPathes, ExtractProgressWithFileHandler epc, const UStringVector& skipPatterns);
+
+int DoExtract(LPTSTR archive, LPTSTR dir, bool overwrite, bool expath, ExtractProgressHandler epc, const UStringVector& skipPatterns)
+{
+ if (!archive || !dir) return -1;
+ int res = 0;
+ try
+ {
+#ifdef UNICODE
+ UString uarchive(archive);
+ UString udir(dir);
+#else
+ UString uarchive = MultiByteToUnicodeString(AString(archive));
+ UString udir = MultiByteToUnicodeString(AString(dir));
+#endif
+ res = DoExtractArchive(uarchive, udir, overwrite, expath, epc, skipPatterns);
+ }
+ catch(...)
+ {
+ return -1;
+ }
+ return res;
+}
+
+int DoExtractWithFile(LPTSTR archive, LPTSTR dir, bool overwrite, bool expath, ExtractProgressWithFileHandler epc, const UStringVector& skipPatterns)
+{
+ if (!archive || !dir) return -1;
+ int res = 0;
+ try
+ {
+#ifdef UNICODE
+ UString uarchive(archive);
+ UString udir(dir);
+#else
+ UString uarchive = MultiByteToUnicodeString(AString(archive));
+ UString udir = MultiByteToUnicodeString(AString(dir));
+#endif
+ res = DoExtractArchiveWithFile(uarchive, udir, overwrite, expath, epc, skipPatterns);
+ }
+ catch(...)
+ {
+ return -1;
+ }
+ return res;
+}
+
diff --git a/versions/26.01-bundle/CPP/7zip/UI/NSIS/NSISBreak.cpp b/versions/26.01-bundle/CPP/7zip/UI/NSIS/NSISBreak.cpp
new file mode 100644
index 0000000..93ac0d5
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/NSIS/NSISBreak.cpp
@@ -0,0 +1,31 @@
+// ConsoleClose.cpp
+
+#include "StdAfx.h"
+
+#include "NSISBreak.h"
+
+static int g_BreakCounter = 0;
+
+namespace NNSISBreak {
+
+void SendBreakSignal()
+{
+ g_BreakCounter++;
+}
+
+bool TestBreakSignal()
+{
+ /*
+ if (g_BreakCounter > 0)
+ return true;
+ */
+ return (g_BreakCounter > 0);
+}
+
+void CheckCtrlBreak()
+{
+ if (TestBreakSignal())
+ throw CCtrlBreakException();
+}
+
+}
diff --git a/versions/26.01-bundle/CPP/7zip/UI/NSIS/NSISBreak.h b/versions/26.01-bundle/CPP/7zip/UI/NSIS/NSISBreak.h
new file mode 100644
index 0000000..ca43f20
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/NSIS/NSISBreak.h
@@ -0,0 +1,16 @@
+#ifndef __NSISBREAKUTILS_H
+#define __NSISBREAKUTILS_H
+
+namespace NNSISBreak {
+
+bool TestBreakSignal();
+void SendBreakSignal();
+
+class CCtrlBreakException
+{};
+
+void CheckCtrlBreak();
+
+}
+
+#endif
diff --git a/versions/26.01-bundle/CPP/7zip/UI/NSIS/StdAfx.h b/versions/26.01-bundle/CPP/7zip/UI/NSIS/StdAfx.h
new file mode 100644
index 0000000..9f06ac9
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/NSIS/StdAfx.h
@@ -0,0 +1,15 @@
+// StdAfx.h
+
+#ifndef __STDAFX_H
+#define __STDAFX_H
+
+#ifdef _WIN32
+ #if defined(__MINGW32__) || defined(__MINGW64__)
+ #include
+ #else
+ #include
+ #endif
+#endif
+#include "../../Bundles/Nsis7z/pluginapi.h"
+
+#endif
diff --git a/versions/26.01-bundle/CPP/7zip/UI/NSIS/UserInputUtils2.cpp b/versions/26.01-bundle/CPP/7zip/UI/NSIS/UserInputUtils2.cpp
new file mode 100644
index 0000000..85d6d4f
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/NSIS/UserInputUtils2.cpp
@@ -0,0 +1,60 @@
+// UserInputUtils.cpp
+
+#include "StdAfx.h"
+
+#include "Common/StdInStream.h"
+#include "Common/StringConvert.h"
+
+#include "UserInputUtils2.h"
+
+static const char kYes = 'Y';
+static const char kNo = 'N';
+static const char kYesAll = 'A';
+static const char kNoAll = 'S';
+static const char kAutoRename = 'U';
+static const char kQuit = 'Q';
+
+static const char *kFirstQuestionMessage = "?\n";
+static const char *kHelpQuestionMessage =
+ "(Y)es / (N)o / (A)lways / (S)kip all / A(u)to rename / (Q)uit? ";
+
+// return true if pressed Quite;
+// in: anAll
+// out: anAll, anYes;
+
+NUserAnswerMode::EEnum ScanUserYesNoAllQuit2(CStdOutStream *outStream)
+{
+ (*outStream) << kFirstQuestionMessage;
+ for(;;)
+ {
+ (*outStream) << kHelpQuestionMessage;
+ AString scannedString;
+ g_StdIn.ScanAStringUntilNewLine(scannedString);
+ scannedString.Trim();
+ if(!scannedString.IsEmpty())
+ switch(::MyCharUpper(scannedString[0]))
+ {
+ case kYes:
+ return NUserAnswerMode::kYes;
+ case kNo:
+ return NUserAnswerMode::kNo;
+ case kYesAll:
+ return NUserAnswerMode::kYesAll;
+ case kNoAll:
+ return NUserAnswerMode::kNoAll;
+ case kAutoRename:
+ return NUserAnswerMode::kAutoRename;
+ case kQuit:
+ return NUserAnswerMode::kQuit;
+ }
+ }
+}
+
+UString GetPassword(CStdOutStream *outStream)
+{
+ (*outStream) << "\nEnter password:";
+ outStream->Flush();
+ AString oemPassword;
+ g_StdIn.ScanAStringUntilNewLine(oemPassword);
+ return MultiByteToUnicodeString(oemPassword, CP_OEMCP);
+}
diff --git a/versions/26.01-bundle/CPP/7zip/UI/NSIS/UserInputUtils2.h b/versions/26.01-bundle/CPP/7zip/UI/NSIS/UserInputUtils2.h
new file mode 100644
index 0000000..d8c3de0
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/NSIS/UserInputUtils2.h
@@ -0,0 +1,24 @@
+// UserInputUtils.h
+
+#ifndef __USERINPUTUTILS_H
+#define __USERINPUTUTILS_H
+
+#include "Common/StdOutStream.h"
+
+namespace NUserAnswerMode {
+
+enum EEnum
+{
+ kYes,
+ kNo,
+ kYesAll,
+ kNoAll,
+ kAutoRename,
+ kQuit
+};
+}
+
+NUserAnswerMode::EEnum ScanUserYesNoAllQuit2(CStdOutStream *outStream);
+UString GetPassword(CStdOutStream *outStream);
+
+#endif
diff --git a/versions/26.01-bundle/CPP/7zip/UI/makefile b/versions/26.01-bundle/CPP/7zip/UI/makefile
new file mode 120000
index 0000000..d9c43ac
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/UI/makefile
@@ -0,0 +1 @@
+../../../../26.01/CPP/7zip/UI/makefile
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_clang.mak b/versions/26.01-bundle/CPP/7zip/cmpl_clang.mak
new file mode 120000
index 0000000..d5f084c
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_clang.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_clang.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_clang_arm64.mak b/versions/26.01-bundle/CPP/7zip/cmpl_clang_arm64.mak
new file mode 120000
index 0000000..dc13b34
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_clang_arm64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_clang_arm64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_clang_x64.mak b/versions/26.01-bundle/CPP/7zip/cmpl_clang_x64.mak
new file mode 120000
index 0000000..635e421
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_clang_x64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_clang_x64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_clang_x86.mak b/versions/26.01-bundle/CPP/7zip/cmpl_clang_x86.mak
new file mode 120000
index 0000000..465cb8a
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_clang_x86.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_clang_x86.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_gcc.mak b/versions/26.01-bundle/CPP/7zip/cmpl_gcc.mak
new file mode 120000
index 0000000..fe726a2
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_gcc.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_gcc.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_gcc_arm.mak b/versions/26.01-bundle/CPP/7zip/cmpl_gcc_arm.mak
new file mode 120000
index 0000000..5b8ae7e
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_gcc_arm.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_gcc_arm.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_gcc_arm64.mak b/versions/26.01-bundle/CPP/7zip/cmpl_gcc_arm64.mak
new file mode 120000
index 0000000..9fd76ca
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_gcc_arm64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_gcc_arm64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_gcc_x64.mak b/versions/26.01-bundle/CPP/7zip/cmpl_gcc_x64.mak
new file mode 120000
index 0000000..34617f3
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_gcc_x64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_gcc_x64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_gcc_x86.mak b/versions/26.01-bundle/CPP/7zip/cmpl_gcc_x86.mak
new file mode 120000
index 0000000..9e0e158
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_gcc_x86.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_gcc_x86.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_mac_arm64.mak b/versions/26.01-bundle/CPP/7zip/cmpl_mac_arm64.mak
new file mode 120000
index 0000000..398d600
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_mac_arm64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_mac_arm64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/cmpl_mac_x64.mak b/versions/26.01-bundle/CPP/7zip/cmpl_mac_x64.mak
new file mode 120000
index 0000000..242d872
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/cmpl_mac_x64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/cmpl_mac_x64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/makefile b/versions/26.01-bundle/CPP/7zip/makefile
new file mode 120000
index 0000000..15492fd
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/makefile
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/makefile
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_clang.mak b/versions/26.01-bundle/CPP/7zip/var_clang.mak
new file mode 120000
index 0000000..d66d9a1
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_clang.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_clang.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_clang_arm64.mak b/versions/26.01-bundle/CPP/7zip/var_clang_arm64.mak
new file mode 120000
index 0000000..a7e484a
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_clang_arm64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_clang_arm64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_clang_x64.mak b/versions/26.01-bundle/CPP/7zip/var_clang_x64.mak
new file mode 120000
index 0000000..f96fe08
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_clang_x64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_clang_x64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_clang_x86.mak b/versions/26.01-bundle/CPP/7zip/var_clang_x86.mak
new file mode 120000
index 0000000..efa8c3f
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_clang_x86.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_clang_x86.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_gcc.mak b/versions/26.01-bundle/CPP/7zip/var_gcc.mak
new file mode 120000
index 0000000..358a321
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_gcc.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_gcc.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_gcc_arm.mak b/versions/26.01-bundle/CPP/7zip/var_gcc_arm.mak
new file mode 120000
index 0000000..b2b3f0d
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_gcc_arm.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_gcc_arm.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_gcc_arm64.mak b/versions/26.01-bundle/CPP/7zip/var_gcc_arm64.mak
new file mode 120000
index 0000000..1a00694
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_gcc_arm64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_gcc_arm64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_gcc_x64.mak b/versions/26.01-bundle/CPP/7zip/var_gcc_x64.mak
new file mode 120000
index 0000000..078c8a0
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_gcc_x64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_gcc_x64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_gcc_x86.mak b/versions/26.01-bundle/CPP/7zip/var_gcc_x86.mak
new file mode 120000
index 0000000..c0ec487
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_gcc_x86.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_gcc_x86.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_mac_arm64.mak b/versions/26.01-bundle/CPP/7zip/var_mac_arm64.mak
new file mode 120000
index 0000000..f6a09ef
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_mac_arm64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_mac_arm64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/var_mac_x64.mak b/versions/26.01-bundle/CPP/7zip/var_mac_x64.mak
new file mode 120000
index 0000000..ca94687
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/var_mac_x64.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/var_mac_x64.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/warn_clang.mak b/versions/26.01-bundle/CPP/7zip/warn_clang.mak
new file mode 120000
index 0000000..9675bfd
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/warn_clang.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/warn_clang.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/warn_clang_mac.mak b/versions/26.01-bundle/CPP/7zip/warn_clang_mac.mak
new file mode 120000
index 0000000..3d50f9f
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/warn_clang_mac.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/warn_clang_mac.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/7zip/warn_gcc.mak b/versions/26.01-bundle/CPP/7zip/warn_gcc.mak
new file mode 120000
index 0000000..b744446
--- /dev/null
+++ b/versions/26.01-bundle/CPP/7zip/warn_gcc.mak
@@ -0,0 +1 @@
+../../../26.01/CPP/7zip/warn_gcc.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/Build.mak b/versions/26.01-bundle/CPP/Build.mak
new file mode 120000
index 0000000..d8c3953
--- /dev/null
+++ b/versions/26.01-bundle/CPP/Build.mak
@@ -0,0 +1 @@
+../../26.01/CPP/Build.mak
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/Common b/versions/26.01-bundle/CPP/Common
new file mode 120000
index 0000000..e835877
--- /dev/null
+++ b/versions/26.01-bundle/CPP/Common
@@ -0,0 +1 @@
+../../26.01/CPP/Common
\ No newline at end of file
diff --git a/versions/26.01-bundle/CPP/Windows b/versions/26.01-bundle/CPP/Windows
new file mode 120000
index 0000000..f714c11
--- /dev/null
+++ b/versions/26.01-bundle/CPP/Windows
@@ -0,0 +1 @@
+../../26.01/CPP/Windows
\ No newline at end of file