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