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