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 "Update.h" 11 12struct CArchiveCommandLineException: public AString 13{ 14 CArchiveCommandLineException(const char *errorMessage): AString(errorMessage) {} 15}; 16 17namespace NCommandType { enum EEnum 18{ 19 kAdd = 0, 20 kUpdate, 21 kDelete, 22 kTest, 23 kExtract, 24 kFullExtract, 25 kList, 26 kBenchmark, 27 kInfo 28};} 29 30namespace NRecursedType { enum EEnum 31{ 32 kRecursed, 33 kWildCardOnlyRecursed, 34 kNonRecursed 35};} 36 37struct CArchiveCommand 38{ 39 NCommandType::EEnum CommandType; 40 bool IsFromExtractGroup() const; 41 bool IsFromUpdateGroup() const; 42 bool IsTestMode() const { return CommandType == NCommandType::kTest; } 43 NExtract::NPathMode::EEnum GetPathMode() const; 44}; 45 46struct CArchiveCommandLineOptions 47{ 48 bool HelpMode; 49 50 #ifdef _WIN32 51 bool LargePages; 52 #endif 53 54 bool IsInTerminal; 55 bool IsStdOutTerminal; 56 bool IsStdErrTerminal; 57 bool StdInMode; 58 bool StdOutMode; 59 bool EnableHeaders; 60 61 bool YesToAll; 62 bool ShowDialog; 63 // NWildcard::CCensor ArchiveWildcardCensor; 64 NWildcard::CCensor WildcardCensor; 65 66 CArchiveCommand Command; 67 UString ArchiveName; 68 69 #ifndef _NO_CRYPTO 70 bool PasswordEnabled; 71 UString Password; 72 #endif 73 74 bool TechMode; 75 // Extract 76 bool CalcCrc; 77 bool AppendName; 78 UString OutputDir; 79 NExtract::NOverwriteMode::EEnum OverwriteMode; 80 UStringVector ArchivePathsSorted; 81 UStringVector ArchivePathsFullSorted; 82 CObjectVector<CProperty> ExtractProperties; 83 84 CUpdateOptions UpdateOptions; 85 UString ArcType; 86 bool EnablePercents; 87 88 // Benchmark 89 UInt32 NumIterations; 90 UInt32 NumThreads; 91 UInt32 DictionarySize; 92 UString Method; 93 94 95 CArchiveCommandLineOptions(): StdInMode(false), StdOutMode(false) {}; 96}; 97 98class CArchiveCommandLineParser 99{ 100 NCommandLineParser::CParser parser; 101public: 102 CArchiveCommandLineParser(); 103 void Parse1(const UStringVector &commandStrings, CArchiveCommandLineOptions &options); 104 void Parse2(CArchiveCommandLineOptions &options); 105}; 106 107void EnumerateDirItemsAndSort(NWildcard::CCensor &wildcardCensor, 108 UStringVector &sortedPaths, 109 UStringVector &sortedFullPaths); 110 111#endif 112