1// ArchiveCommandLine.h 2 3#ifndef ZIP7_INC_ARCHIVE_COMMAND_LINE_H 4#define ZIP7_INC_ARCHIVE_COMMAND_LINE_H 5 6#include "../../../Common/CommandLineParser.h" 7#include "../../../Common/Wildcard.h" 8 9#include "EnumDirItems.h" 10 11#include "Extract.h" 12#include "HashCalc.h" 13#include "Update.h" 14 15typedef CMessagePathException CArcCmdLineException; 16 17namespace NCommandType { enum EEnum 18{ 19 kAdd = 0, 20 kUpdate, 21 kDelete, 22 kTest, 23 kExtract, 24 kExtractFull, 25 kList, 26 kBenchmark, 27 kInfo, 28 kHash, 29 kRename 30};} 31 32struct CArcCommand 33{ 34 NCommandType::EEnum CommandType; 35 36 bool IsFromExtractGroup() const; 37 bool IsFromUpdateGroup() const; 38 bool IsTestCommand() const { return CommandType == NCommandType::kTest; } 39 NExtract::NPathMode::EEnum GetPathMode() const; 40}; 41 42enum 43{ 44 k_OutStream_disabled = 0, 45 k_OutStream_stdout = 1, 46 k_OutStream_stderr = 2 47}; 48 49struct CArcCmdLineOptions 50{ 51 bool HelpMode; 52 53 // bool LargePages; 54 bool CaseSensitive_Change; 55 bool CaseSensitive; 56 57 bool IsInTerminal; 58 bool IsStdOutTerminal; 59 bool IsStdErrTerminal; 60 bool StdInMode; 61 bool StdOutMode; 62 bool EnableHeaders; 63 64 bool YesToAll; 65 bool ShowDialog; 66 bool TechMode; 67 bool ShowTime; 68 69 CBoolPair NtSecurity; 70 CBoolPair AltStreams; 71 CBoolPair HardLinks; 72 CBoolPair SymLinks; 73 74 CBoolPair StoreOwnerId; 75 CBoolPair StoreOwnerName; 76 77 AString ListFields; 78 79 int ConsoleCodePage; 80 81 NWildcard::CCensor Censor; 82 83 CArcCommand Command; 84 UString ArchiveName; 85 86 #ifndef Z7_NO_CRYPTO 87 bool PasswordEnabled; 88 UString Password; 89 #endif 90 91 UStringVector HashMethods; 92 // UString HashFilePath; 93 94 // bool AppendName; 95 // UStringVector ArchivePathsSorted; 96 // UStringVector ArchivePathsFullSorted; 97 NWildcard::CCensor arcCensor; 98 UString ArcName_for_StdInMode; 99 100 CObjectVector<CProperty> Properties; 101 102 CExtractOptionsBase ExtractOptions; 103 104 CUpdateOptions UpdateOptions; 105 CHashOptions HashOptions; 106 UString ArcType; 107 UStringVector ExcludedArcTypes; 108 109 unsigned Number_for_Out; 110 unsigned Number_for_Errors; 111 unsigned Number_for_Percents; 112 unsigned LogLevel; 113 114 // bool IsOutAllowed() const { return Number_for_Out != k_OutStream_disabled; } 115 116 // Benchmark 117 UInt32 NumIterations; 118 bool NumIterations_Defined; 119 120 CArcCmdLineOptions(): 121 HelpMode(false), 122 // LargePages(false), 123 CaseSensitive_Change(false), 124 CaseSensitive(false), 125 126 IsInTerminal(false), 127 IsStdOutTerminal(false), 128 IsStdErrTerminal(false), 129 130 StdInMode(false), 131 StdOutMode(false), 132 133 EnableHeaders(false), 134 135 YesToAll(false), 136 ShowDialog(false), 137 TechMode(false), 138 ShowTime(false), 139 140 ConsoleCodePage(-1), 141 142 Number_for_Out(k_OutStream_stdout), 143 Number_for_Errors(k_OutStream_stderr), 144 Number_for_Percents(k_OutStream_stdout), 145 146 LogLevel(0) 147 { 148 } 149}; 150 151class CArcCmdLineParser 152{ 153 NCommandLineParser::CParser parser; 154public: 155 UString Parse1Log; 156 void Parse1(const UStringVector &commandStrings, CArcCmdLineOptions &options); 157 void Parse2(CArcCmdLineOptions &options); 158}; 159 160#endif 161