Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pavlov <ipavlov@users.sourceforge.net>2007-01-20 03:00:00 +0300
committerKornel LesiƄski <kornel@geekhood.net>2016-05-28 02:15:49 +0300
commitd9666cf046a8453b33b3e2fbf4d82295a9f87df3 (patch)
treec722ed19b844b53042aec0c1d7d2f8381140a5ed /CPP/7zip/UI/GUI/GUI.cpp
parent804edc5756fede54dbb1aefda6d39d306111938d (diff)
4.44 beta
Diffstat (limited to 'CPP/7zip/UI/GUI/GUI.cpp')
-rwxr-xr-xCPP/7zip/UI/GUI/GUI.cpp260
1 files changed, 260 insertions, 0 deletions
diff --git a/CPP/7zip/UI/GUI/GUI.cpp b/CPP/7zip/UI/GUI/GUI.cpp
new file mode 100755
index 00000000..fe956dbd
--- /dev/null
+++ b/CPP/7zip/UI/GUI/GUI.cpp
@@ -0,0 +1,260 @@
+// GUI.cpp
+
+#include "StdAfx.h"
+
+#include <initguid.h>
+
+#include "Common/NewHandler.h"
+#include "Common/StringConvert.h"
+#include "Common/CommandLineParser.h"
+#include "Common/Exception.h"
+
+#include "Windows/COM.h"
+#include "Windows/FileMapping.h"
+#include "Windows/FileDir.h"
+#include "Windows/Synchronization.h"
+#include "Windows/Error.h"
+#include "Windows/FileName.h"
+#ifdef _WIN32
+#include "Windows/MemoryLock.h"
+#include "Common/Alloc.h"
+#endif
+
+#include "../../IStream.h"
+#include "../../IPassword.h"
+
+#include "../../FileManager/StringUtils.h"
+
+#include "../Common/ExitCode.h"
+#include "../Common/ArchiveCommandLine.h"
+
+#include "../Resource/Extract/resource.h"
+#include "../Explorer/MyMessages.h"
+
+#include "ExtractGUI.h"
+#include "UpdateGUI.h"
+
+using namespace NWindows;
+
+HINSTANCE g_hInstance;
+#ifndef _UNICODE
+bool g_IsNT = false;
+#endif
+
+static const wchar_t *kExceptionErrorMessage = L"Error:";
+static const wchar_t *kUserBreak = L"Break signaled";
+
+static const wchar_t *kMemoryExceptionMessage = L"ERROR: Can't allocate required memory!";
+static const wchar_t *kUnknownExceptionMessage = L"Unknown Error";
+static const wchar_t *kInternalExceptionMessage = L"Internal Error #";
+
+static const wchar_t *kIncorrectCommandMessage = L"Incorrect command";
+
+static void ErrorMessage(const wchar_t *message)
+{
+ MessageBoxW(0, message, L"7-Zip GUI", MB_ICONERROR);
+}
+
+int Main2()
+{
+ /*
+ TCHAR t[512];
+ GetCurrentDirectory(512, t);
+ ErrorMessage(t);
+ return 0;
+ */
+
+ UStringVector commandStrings;
+ NCommandLineParser::SplitCommandLine(GetCommandLineW(), commandStrings);
+ if(commandStrings.Size() <= 1)
+ {
+ MessageBoxW(0, L"Specify command", L"7-Zip", 0);
+ return 0;
+ }
+ commandStrings.Delete(0);
+
+ CArchiveCommandLineOptions options;
+ CArchiveCommandLineParser parser;
+
+ parser.Parse1(commandStrings, options);
+ parser.Parse2(options);
+
+ #ifdef _WIN32
+ if (options.LargePages)
+ NSecurity::EnableLockMemoryPrivilege();
+ #endif
+
+ bool isExtractGroupCommand = options.Command.IsFromExtractGroup();
+
+ if (isExtractGroupCommand)
+ {
+ CExtractCallbackImp *ecs = new CExtractCallbackImp;
+ CMyComPtr<IFolderArchiveExtractCallback> extractCallback = ecs;
+ ecs->PasswordIsDefined = options.PasswordEnabled;
+ ecs->Password = options.Password;
+ ecs->Init();
+
+ COpenCallbackGUI openCallback;
+ openCallback.PasswordIsDefined = options.PasswordEnabled;
+ openCallback.Password = options.Password;
+
+ CExtractOptions eo;
+ eo.StdOutMode = options.StdOutMode;
+ eo.OutputDir = options.OutputDir;
+ eo.YesToAll = options.YesToAll;
+ eo.OverwriteMode = options.OverwriteMode;
+ eo.PathMode = options.Command.GetPathMode();
+ eo.TestMode = options.Command.IsTestMode();
+ #ifdef COMPRESS_MT
+ eo.Properties = options.ExtractProperties;
+ #endif
+
+ HRESULT result = ExtractGUI(
+ options.ArchivePathsSorted,
+ options.ArchivePathsFullSorted,
+ options.WildcardCensor.Pairs.Front().Head,
+ eo, options.ShowDialog, &openCallback, ecs);
+ if (result != S_OK)
+ throw CSystemException(result);
+ if (ecs->Messages.Size() > 0 || ecs->NumArchiveErrors != 0)
+ return NExitCode::kFatalError;
+ }
+ else if (options.Command.IsFromUpdateGroup())
+ {
+ bool passwordIsDefined =
+ options.PasswordEnabled && !options.Password.IsEmpty();
+
+ COpenCallbackGUI openCallback;
+ openCallback.PasswordIsDefined = passwordIsDefined;
+ openCallback.Password = options.Password;
+
+ CUpdateCallbackGUI callback;
+ // callback.EnablePercents = options.EnablePercents;
+ callback.PasswordIsDefined = passwordIsDefined;
+ callback.AskPassword = options.PasswordEnabled && options.Password.IsEmpty();
+ callback.Password = options.Password;
+ // callback.StdOutMode = options.UpdateOptions.StdOutMode;
+ callback.Init();
+
+ CUpdateErrorInfo errorInfo;
+
+ HRESULT result = UpdateGUI(
+ options.WildcardCensor, options.UpdateOptions,
+ options.ShowDialog,
+ errorInfo, &openCallback, &callback);
+
+ if (result != S_OK)
+ {
+ if (!errorInfo.Message.IsEmpty())
+ ErrorMessage(errorInfo.Message);
+ throw CSystemException(result);
+ }
+ if (callback.FailedFiles.Size() > 0)
+ return NExitCode::kWarning;
+ }
+ else
+ {
+ ErrorMessage(L"Use correct command");
+ return 0;
+ }
+ return 0;
+}
+
+static bool inline IsItWindowsNT()
+{
+ OSVERSIONINFO versionInfo;
+ versionInfo.dwOSVersionInfoSize = sizeof(versionInfo);
+ if (!::GetVersionEx(&versionInfo))
+ return false;
+ return (versionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT);
+}
+
+int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /* hPrevInstance */, LPSTR /* lpCmdLine */, int /* nCmdShow */)
+{
+ g_hInstance = hInstance;
+ #ifdef _UNICODE
+ if (!IsItWindowsNT())
+ {
+ MyMessageBox(L"This program requires Windows NT/2000/XP/2003");
+ return NExitCode::kFatalError;
+ }
+ #else
+ g_IsNT = IsItWindowsNT();
+ #endif
+
+ #ifdef _WIN32
+ SetLargePageSize();
+ #endif
+
+ InitCommonControls();
+
+ ReloadLang();
+
+ // setlocale(LC_COLLATE, ".ACP");
+ try
+ {
+ return Main2();
+ }
+ catch(const CNewException &)
+ {
+ MyMessageBox(kMemoryExceptionMessage);
+ return (NExitCode::kMemoryError);
+ }
+ catch(const CArchiveCommandLineException &e)
+ {
+ MyMessageBox(GetUnicodeString(e));
+ return (NExitCode::kUserError);
+ }
+ catch(const CSystemException &systemError)
+ {
+ if (systemError.ErrorCode == E_OUTOFMEMORY)
+ {
+ MyMessageBox(kMemoryExceptionMessage);
+ return (NExitCode::kMemoryError);
+ }
+ if (systemError.ErrorCode == E_ABORT)
+ {
+ // MyMessageBox(kUserBreak);
+ return (NExitCode::kUserBreak);
+ }
+ UString message;
+ NError::MyFormatMessage(systemError.ErrorCode, message);
+ MyMessageBox(message);
+ return (NExitCode::kFatalError);
+ }
+ /*
+ catch(NExitCode::EEnum &exitCode)
+ {
+ g_StdErr << kInternalExceptionMessage << exitCode << endl;
+ return (exitCode);
+ }
+ */
+ catch(const UString &s)
+ {
+ MyMessageBox(s);
+ return (NExitCode::kFatalError);
+ }
+ catch(const AString &s)
+ {
+ MyMessageBox(GetUnicodeString(s));
+ return (NExitCode::kFatalError);
+ }
+ catch(const char *s)
+ {
+ MyMessageBox(GetUnicodeString(s));
+ return (NExitCode::kFatalError);
+ }
+ /*
+ catch(int t)
+ {
+ g_StdErr << kInternalExceptionMessage << t << endl;
+ return (NExitCode::kFatalError);
+ }
+ */
+ catch(...)
+ {
+ MyMessageBox(kUnknownExceptionMessage);
+ return (NExitCode::kFatalError);
+ }
+}
+