1 #ifndef _RAR_EXTRACT_
2 #define _RAR_EXTRACT_
3 
4 enum EXTRACT_ARC_CODE {EXTRACT_ARC_NEXT,EXTRACT_ARC_REPEAT};
5 
6 class CmdExtract
7 {
8   private:
9     EXTRACT_ARC_CODE ExtractArchive();
10     bool ExtractFileCopy(File &New,wchar *ArcName,wchar *NameNew,wchar *NameExisting,size_t NameExistingSize);
11     void ExtrPrepareName(Archive &Arc,const wchar *ArcFileName,wchar *DestName,size_t DestSize);
12 #ifdef RARDLL
13     bool ExtrDllGetPassword();
14 #else
15     bool ExtrGetPassword(Archive &Arc,const wchar *ArcFileName);
16 #endif
17 #if defined(_WIN_ALL) && !defined(SFX_MODULE)
18     void ConvertDosPassword(Archive &Arc,SecPassword &DestPwd);
19 #endif
20     void ExtrCreateDir(Archive &Arc,const wchar *ArcFileName);
21     bool ExtrCreateFile(Archive &Arc,File &CurFile);
22     bool CheckUnpVer(Archive &Arc,const wchar *ArcFileName);
23 #ifndef SFX_MODULE
24     bool DetectStartVolume(const wchar *VolName,bool NewNumbering);
25     void GetFirstVolIfFullSet(const wchar *SrcName,bool NewNumbering,wchar *DestName,size_t DestSize);
26 #endif
27 
28     RarTime StartTime; // Time when extraction started.
29 
30     CommandData *Cmd;
31 
32     ComprDataIO DataIO;
33     Unpack *Unp;
34     unsigned long TotalFileCount;
35 
36     unsigned long FileCount;
37     unsigned long MatchedArgs;
38     bool FirstFile;
39     bool AllMatchesExact;
40     bool ReconstructDone;
41     bool UseExactVolName;
42 
43     // If any non-zero solid file was successfully unpacked before current.
44     // If true and if current encrypted file is broken, obviously
45     // the password is correct and we can report broken CRC without
46     // any wrong password hints.
47     bool AnySolidDataUnpackedWell;
48 
49     wchar ArcName[NM];
50 
51     bool GlobalPassword;
52     bool PrevProcessed; // If previous file was successfully extracted or tested.
53     wchar DestFileName[NM];
54     bool PasswordCancelled;
55 #if defined(_WIN_ALL) && !defined(SFX_MODULE) && !defined(SILENT)
56     bool Fat32,NotFat32;
57 #endif
58   public:
59     CmdExtract(CommandData *Cmd);
60     ~CmdExtract();
61     void DoExtract();
62     void ExtractArchiveInit(Archive &Arc);
63     bool ExtractCurrentFile(Archive &Arc,size_t HeaderSize,bool &Repeat);
64     static void UnstoreFile(ComprDataIO &DataIO,int64 DestUnpSize);
65 };
66 
67 #endif
68