Home | History | Annotate | Download | only in Common
      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 "HashCalc.h"
     11 #include "Update.h"
     12 
     13 struct CArcCmdLineException: public UString
     14 {
     15   CArcCmdLineException(const char *a, const wchar_t *u = NULL);
     16 };
     17 
     18 namespace NCommandType { enum EEnum
     19 {
     20   kAdd = 0,
     21   kUpdate,
     22   kDelete,
     23   kTest,
     24   kExtract,
     25   kExtractFull,
     26   kList,
     27   kBenchmark,
     28   kInfo,
     29   kHash,
     30   kRename
     31 };}
     32 
     33 struct CArcCommand
     34 {
     35   NCommandType::EEnum CommandType;
     36 
     37   bool IsFromExtractGroup() const;
     38   bool IsFromUpdateGroup() const;
     39   bool IsTestCommand() const { return CommandType == NCommandType::kTest; }
     40   NExtract::NPathMode::EEnum GetPathMode() const;
     41 };
     42 
     43 struct CArcCmdLineOptions
     44 {
     45   bool HelpMode;
     46 
     47   #ifdef _WIN32
     48   bool LargePages;
     49   #endif
     50   bool CaseSensitiveChange;
     51   bool CaseSensitive;
     52 
     53   bool IsInTerminal;
     54   bool IsStdOutTerminal;
     55   bool IsStdErrTerminal;
     56   bool StdInMode;
     57   bool StdOutMode;
     58   bool EnableHeaders;
     59 
     60   bool YesToAll;
     61   bool ShowDialog;
     62   NWildcard::CCensor Censor;
     63 
     64   CArcCommand Command;
     65   UString ArchiveName;
     66 
     67   #ifndef _NO_CRYPTO
     68   bool PasswordEnabled;
     69   UString Password;
     70   #endif
     71 
     72   bool TechMode;
     73 
     74   UStringVector HashMethods;
     75 
     76   bool AppendName;
     77   UStringVector ArchivePathsSorted;
     78   UStringVector ArchivePathsFullSorted;
     79   CObjectVector<CProperty> Properties;
     80 
     81   CExtractOptionsBase ExtractOptions;
     82 
     83   CBoolPair NtSecurity;
     84   CBoolPair AltStreams;
     85   CBoolPair HardLinks;
     86   CBoolPair SymLinks;
     87 
     88   CUpdateOptions UpdateOptions;
     89   CHashOptions HashOptions;
     90   UString ArcType;
     91   UStringVector ExcludedArcTypes;
     92   bool EnablePercents;
     93 
     94   // Benchmark
     95   UInt32 NumIterations;
     96 
     97   CArcCmdLineOptions():
     98       StdInMode(false),
     99       StdOutMode(false),
    100       CaseSensitiveChange(false),
    101       CaseSensitive(false)
    102       {};
    103 };
    104 
    105 class CArcCmdLineParser
    106 {
    107   NCommandLineParser::CParser parser;
    108 public:
    109   CArcCmdLineParser();
    110   void Parse1(const UStringVector &commandStrings, CArcCmdLineOptions &options);
    111   void Parse2(CArcCmdLineOptions &options);
    112 };
    113 
    114 void EnumerateDirItemsAndSort(
    115     bool storeAltStreams,
    116     NWildcard::CCensor &censor,
    117     NWildcard::ECensorPathMode pathMode,
    118     const UString &addPathPrefix,
    119     UStringVector &sortedPaths,
    120     UStringVector &sortedFullPaths);
    121 
    122 #endif
    123