// ArchiveCommandLine.h #ifndef __ARCHIVE_COMMAND_LINE_H #define __ARCHIVE_COMMAND_LINE_H #include "../../../Common/CommandLineParser.h" #include "../../../Common/Wildcard.h" #include "EnumDirItems.h" #include "Extract.h" #include "HashCalc.h" #include "Update.h" typedef CMessagePathException CArcCmdLineException; namespace NCommandType { enum EEnum { kAdd = 0, kUpdate, kDelete, kTest, kExtract, kExtractFull, kList, kBenchmark, kInfo, kHash, kRename };} struct CArcCommand { NCommandType::EEnum CommandType; bool IsFromExtractGroup() const; bool IsFromUpdateGroup() const; bool IsTestCommand() const { return CommandType == NCommandType::kTest; } NExtract::NPathMode::EEnum GetPathMode() const; }; enum { k_OutStream_disabled = 0, k_OutStream_stdout = 1, k_OutStream_stderr = 2 }; struct CArcCmdLineOptions { bool HelpMode; // bool LargePages; bool CaseSensitiveChange; bool CaseSensitive; bool IsInTerminal; bool IsStdOutTerminal; bool IsStdErrTerminal; bool StdInMode; bool StdOutMode; bool EnableHeaders; bool YesToAll; bool ShowDialog; NWildcard::CCensor Censor; CArcCommand Command; UString ArchiveName; #ifndef _NO_CRYPTO bool PasswordEnabled; UString Password; #endif bool TechMode; bool ShowTime; UStringVector HashMethods; bool AppendName; // UStringVector ArchivePathsSorted; // UStringVector ArchivePathsFullSorted; NWildcard::CCensor arcCensor; UString ArcName_for_StdInMode; CObjectVector Properties; CExtractOptionsBase ExtractOptions; CBoolPair NtSecurity; CBoolPair AltStreams; CBoolPair HardLinks; CBoolPair SymLinks; CUpdateOptions UpdateOptions; CHashOptions HashOptions; UString ArcType; UStringVector ExcludedArcTypes; unsigned Number_for_Out; unsigned Number_for_Errors; unsigned Number_for_Percents; unsigned LogLevel; // bool IsOutAllowed() const { return Number_for_Out != k_OutStream_disabled; } // Benchmark UInt32 NumIterations; CArcCmdLineOptions(): // LargePages(false), CaseSensitiveChange(false), CaseSensitive(false), StdInMode(false), StdOutMode(false), Number_for_Out(k_OutStream_stdout), Number_for_Errors(k_OutStream_stderr), Number_for_Percents(k_OutStream_stdout), LogLevel(0) { }; }; class CArcCmdLineParser { NCommandLineParser::CParser parser; public: void Parse1(const UStringVector &commandStrings, CArcCmdLineOptions &options); void Parse2(CArcCmdLineOptions &options); }; #endif