1b2808cd0411b5860f04f1364138674463768e414cdalton// ArchiveCommandLine.h
2b2808cd0411b5860f04f1364138674463768e414cdalton
3b2808cd0411b5860f04f1364138674463768e414cdalton#ifndef __ARCHIVE_COMMAND_LINE_H
4b2808cd0411b5860f04f1364138674463768e414cdalton#define __ARCHIVE_COMMAND_LINE_H
5b2808cd0411b5860f04f1364138674463768e414cdalton
6b2808cd0411b5860f04f1364138674463768e414cdalton#include "Common/CommandLineParser.h"
7b2808cd0411b5860f04f1364138674463768e414cdalton#include "Common/Wildcard.h"
8b2808cd0411b5860f04f1364138674463768e414cdalton
9b2808cd0411b5860f04f1364138674463768e414cdalton#include "Extract.h"
10b2808cd0411b5860f04f1364138674463768e414cdalton#include "Update.h"
11b2808cd0411b5860f04f1364138674463768e414cdalton
12b2808cd0411b5860f04f1364138674463768e414cdaltonstruct CArchiveCommandLineException: public AString
13b2808cd0411b5860f04f1364138674463768e414cdalton{
14b2808cd0411b5860f04f1364138674463768e414cdalton  CArchiveCommandLineException(const char *errorMessage): AString(errorMessage) {}
15b2808cd0411b5860f04f1364138674463768e414cdalton};
16b2808cd0411b5860f04f1364138674463768e414cdalton
17b2808cd0411b5860f04f1364138674463768e414cdaltonnamespace NCommandType { enum EEnum
18b2808cd0411b5860f04f1364138674463768e414cdalton{
19b2808cd0411b5860f04f1364138674463768e414cdalton  kAdd = 0,
20b2808cd0411b5860f04f1364138674463768e414cdalton  kUpdate,
21b2808cd0411b5860f04f1364138674463768e414cdalton  kDelete,
22b2808cd0411b5860f04f1364138674463768e414cdalton  kTest,
23b2808cd0411b5860f04f1364138674463768e414cdalton  kExtract,
24b2808cd0411b5860f04f1364138674463768e414cdalton  kFullExtract,
25b2808cd0411b5860f04f1364138674463768e414cdalton  kList,
26b2808cd0411b5860f04f1364138674463768e414cdalton  kBenchmark,
27b2808cd0411b5860f04f1364138674463768e414cdalton  kInfo
28b2808cd0411b5860f04f1364138674463768e414cdalton};}
29b2808cd0411b5860f04f1364138674463768e414cdalton
30b2808cd0411b5860f04f1364138674463768e414cdaltonnamespace NRecursedType { enum EEnum
31b2808cd0411b5860f04f1364138674463768e414cdalton{
32b2808cd0411b5860f04f1364138674463768e414cdalton  kRecursed,
33b2808cd0411b5860f04f1364138674463768e414cdalton  kWildCardOnlyRecursed,
34b2808cd0411b5860f04f1364138674463768e414cdalton  kNonRecursed
35b2808cd0411b5860f04f1364138674463768e414cdalton};}
36b2808cd0411b5860f04f1364138674463768e414cdalton
37b2808cd0411b5860f04f1364138674463768e414cdaltonstruct CArchiveCommand
38b2808cd0411b5860f04f1364138674463768e414cdalton{
39b2808cd0411b5860f04f1364138674463768e414cdalton  NCommandType::EEnum CommandType;
40b2808cd0411b5860f04f1364138674463768e414cdalton  bool IsFromExtractGroup() const;
41b2808cd0411b5860f04f1364138674463768e414cdalton  bool IsFromUpdateGroup() const;
42b2808cd0411b5860f04f1364138674463768e414cdalton  bool IsTestMode() const { return CommandType == NCommandType::kTest; }
43b2808cd0411b5860f04f1364138674463768e414cdalton  NExtract::NPathMode::EEnum GetPathMode() const;
44b2808cd0411b5860f04f1364138674463768e414cdalton};
45b2808cd0411b5860f04f1364138674463768e414cdalton
46b2808cd0411b5860f04f1364138674463768e414cdaltonstruct CArchiveCommandLineOptions
47b2808cd0411b5860f04f1364138674463768e414cdalton{
48b2808cd0411b5860f04f1364138674463768e414cdalton  bool HelpMode;
49b2808cd0411b5860f04f1364138674463768e414cdalton
50b2808cd0411b5860f04f1364138674463768e414cdalton  #ifdef _WIN32
51b2808cd0411b5860f04f1364138674463768e414cdalton  bool LargePages;
52b2808cd0411b5860f04f1364138674463768e414cdalton  #endif
53b2808cd0411b5860f04f1364138674463768e414cdalton
54b2808cd0411b5860f04f1364138674463768e414cdalton  bool IsInTerminal;
55b2808cd0411b5860f04f1364138674463768e414cdalton  bool IsStdOutTerminal;
56b2808cd0411b5860f04f1364138674463768e414cdalton  bool IsStdErrTerminal;
57b2808cd0411b5860f04f1364138674463768e414cdalton  bool StdInMode;
58b2808cd0411b5860f04f1364138674463768e414cdalton  bool StdOutMode;
59b2808cd0411b5860f04f1364138674463768e414cdalton  bool EnableHeaders;
60b2808cd0411b5860f04f1364138674463768e414cdalton
61b2808cd0411b5860f04f1364138674463768e414cdalton  bool YesToAll;
62b2808cd0411b5860f04f1364138674463768e414cdalton  bool ShowDialog;
63b2808cd0411b5860f04f1364138674463768e414cdalton  // NWildcard::CCensor ArchiveWildcardCensor;
64b2808cd0411b5860f04f1364138674463768e414cdalton  NWildcard::CCensor WildcardCensor;
65b2808cd0411b5860f04f1364138674463768e414cdalton
66b2808cd0411b5860f04f1364138674463768e414cdalton  CArchiveCommand Command;
67b2808cd0411b5860f04f1364138674463768e414cdalton  UString ArchiveName;
68b2808cd0411b5860f04f1364138674463768e414cdalton
69b2808cd0411b5860f04f1364138674463768e414cdalton  #ifndef _NO_CRYPTO
70b2808cd0411b5860f04f1364138674463768e414cdalton  bool PasswordEnabled;
71b2808cd0411b5860f04f1364138674463768e414cdalton  UString Password;
72b2808cd0411b5860f04f1364138674463768e414cdalton  #endif
73b2808cd0411b5860f04f1364138674463768e414cdalton
74b2808cd0411b5860f04f1364138674463768e414cdalton  bool TechMode;
75b2808cd0411b5860f04f1364138674463768e414cdalton  // Extract
76b2808cd0411b5860f04f1364138674463768e414cdalton  bool CalcCrc;
77b2808cd0411b5860f04f1364138674463768e414cdalton  bool AppendName;
78b2808cd0411b5860f04f1364138674463768e414cdalton  UString OutputDir;
79b2808cd0411b5860f04f1364138674463768e414cdalton  NExtract::NOverwriteMode::EEnum OverwriteMode;
80b2808cd0411b5860f04f1364138674463768e414cdalton  UStringVector ArchivePathsSorted;
81b2808cd0411b5860f04f1364138674463768e414cdalton  UStringVector ArchivePathsFullSorted;
82b2808cd0411b5860f04f1364138674463768e414cdalton  CObjectVector<CProperty> ExtractProperties;
83b2808cd0411b5860f04f1364138674463768e414cdalton
84b2808cd0411b5860f04f1364138674463768e414cdalton  CUpdateOptions UpdateOptions;
85b2808cd0411b5860f04f1364138674463768e414cdalton  UString ArcType;
86b2808cd0411b5860f04f1364138674463768e414cdalton  bool EnablePercents;
87b2808cd0411b5860f04f1364138674463768e414cdalton
88b2808cd0411b5860f04f1364138674463768e414cdalton  // Benchmark
89b2808cd0411b5860f04f1364138674463768e414cdalton  UInt32 NumIterations;
90b2808cd0411b5860f04f1364138674463768e414cdalton  UInt32 NumThreads;
91b2808cd0411b5860f04f1364138674463768e414cdalton  UInt32 DictionarySize;
92b2808cd0411b5860f04f1364138674463768e414cdalton  UString Method;
93b2808cd0411b5860f04f1364138674463768e414cdalton
94b2808cd0411b5860f04f1364138674463768e414cdalton
95b2808cd0411b5860f04f1364138674463768e414cdalton  CArchiveCommandLineOptions(): StdInMode(false), StdOutMode(false) {};
96b2808cd0411b5860f04f1364138674463768e414cdalton};
97b2808cd0411b5860f04f1364138674463768e414cdalton
98b2808cd0411b5860f04f1364138674463768e414cdaltonclass CArchiveCommandLineParser
99b2808cd0411b5860f04f1364138674463768e414cdalton{
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