1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#ifndef _RAR_DATAIO_
#define _RAR_DATAIO_
// Igor Pavlov
#include "../../../ICoder.h"
class CmdAdd;
class Unpack;
// Igor Pavlov
struct CExitCode
{
HRESULT Result;
CExitCode(HRESULT result): Result(result) {};
};
class ComprDataIO
{
private:
void ShowUnpRead(Int64 ArcPos,Int64 ArcSize);
void ShowUnpWrite();
bool UnpackFromMemory;
uint UnpackFromMemorySize;
byte *UnpackFromMemoryAddr;
bool UnpackToMemory;
uint UnpackToMemorySize;
byte *UnpackToMemoryAddr;
uint UnpWrSize;
byte *UnpWrAddr;
Int64 UnpPackedSize;
bool ShowProgress;
bool TestMode;
bool SkipUnpCRC;
// Igor Pavlov
// File *SrcFile;
// File *DestFile;
ISequentialInStream *SrcFile;
ISequentialOutStream *DestFile;
ICompressProgressInfo *Progress;
CmdAdd *Command;
// Igor Pavlov
/*
FileHeader *SubHead;
Int64 *SubHeadPos;
*/
#ifndef NOCRYPT
CryptData Crypt;
CryptData Decrypt;
#endif
int LastPercent;
char CurrentCommand;
public:
ComprDataIO();
void Init();
int UnpRead(byte *Addr,uint Count);
void UnpWrite(byte *Addr,uint Count);
void EnableShowProgress(bool Show) {ShowProgress=Show;}
void GetUnpackedData(byte **Data,uint *Size);
void SetPackedSizeToRead(Int64 Size) {UnpPackedSize=Size;}
void SetTestMode(bool Mode) {TestMode=Mode;}
void SetSkipUnpCRC(bool Skip) {SkipUnpCRC=Skip;}
// Igor Pavlov
// void SetFiles(File *SrcFile,File *DestFile);
void SetFiles(ISequentialInStream *srcFile,
ISequentialOutStream *destFile, ICompressProgressInfo *progress);
void SetCommand(CmdAdd *Cmd) {Command=Cmd;}
// Igor Pavlov
// void SetSubHeader(FileHeader *hd,Int64 *Pos) {SubHead=hd;SubHeadPos=Pos;}
// void SetEncryption(int Method,char *Password,byte *Salt,bool Encrypt);
// void SetAV15Encryption();
// void SetCmt13Encryption();
void SetUnpackToMemory(byte *Addr,uint Size);
void SetCurrentCommand(char Cmd) {CurrentCommand=Cmd;}
bool PackVolume;
bool UnpVolume;
bool NextVolumeMissing;
Int64 TotalPackRead;
Int64 UnpArcSize;
Int64 CurPackRead,CurPackWrite,CurUnpRead,CurUnpWrite;
Int64 ProcessedArcSize,TotalArcSize;
uint PackFileCRC,UnpFileCRC,PackedCRC;
int Encryption;
int Decryption;
};
#endif
|