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