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 
12 struct CArchiveCommandLineException: public AString
13 {
CArchiveCommandLineExceptionCArchiveCommandLineException14   CArchiveCommandLineException(const char *errorMessage): AString(errorMessage) {}
15 };
16 
17 namespace 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 
30 namespace NRecursedType { enum EEnum
31 {
32   kRecursed,
33   kWildCardOnlyRecursed,
34   kNonRecursed
35 };}
36 
37 struct CArchiveCommand
38 {
39   NCommandType::EEnum CommandType;
40   bool IsFromExtractGroup() const;
41   bool IsFromUpdateGroup() const;
IsTestModeCArchiveCommand42   bool IsTestMode() const { return CommandType == NCommandType::kTest; }
43   NExtract::NPathMode::EEnum GetPathMode() const;
44 };
45 
46 struct 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 
CArchiveCommandLineOptionsCArchiveCommandLineOptions95   CArchiveCommandLineOptions(): StdInMode(false), StdOutMode(false) {};
96 };
97 
98 class CArchiveCommandLineParser
99 {
100   NCommandLineParser::CParser parser;
101 public:
102   CArchiveCommandLineParser();
103   void Parse1(const UStringVector &commandStrings, CArchiveCommandLineOptions &options);
104   void Parse2(CArchiveCommandLineOptions &options);
105 };
106 
107 void EnumerateDirItemsAndSort(NWildcard::CCensor &wildcardCensor,
108     UStringVector &sortedPaths,
109     UStringVector &sortedFullPaths);
110 
111 #endif
112