Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '7zip/Compress/Rar29/Original/unpack.hpp')
-rwxr-xr-x7zip/Compress/Rar29/Original/unpack.hpp205
1 files changed, 205 insertions, 0 deletions
diff --git a/7zip/Compress/Rar29/Original/unpack.hpp b/7zip/Compress/Rar29/Original/unpack.hpp
new file mode 100755
index 00000000..83fb0f02
--- /dev/null
+++ b/7zip/Compress/Rar29/Original/unpack.hpp
@@ -0,0 +1,205 @@
+#ifndef _RAR_UNPACK_
+#define _RAR_UNPACK_
+
+enum BLOCK_TYPES {BLOCK_LZ,BLOCK_PPM};
+
+struct Decode
+{
+ unsigned int MaxNum;
+ unsigned int DecodeLen[16];
+ unsigned int DecodePos[16];
+ unsigned int DecodeNum[2];
+};
+
+struct LitDecode
+{
+ unsigned int MaxNum;
+ unsigned int DecodeLen[16];
+ unsigned int DecodePos[16];
+ unsigned int DecodeNum[NC];
+};
+
+struct DistDecode
+{
+ unsigned int MaxNum;
+ unsigned int DecodeLen[16];
+ unsigned int DecodePos[16];
+ unsigned int DecodeNum[DC];
+};
+
+struct LowDistDecode
+{
+ unsigned int MaxNum;
+ unsigned int DecodeLen[16];
+ unsigned int DecodePos[16];
+ unsigned int DecodeNum[LDC];
+};
+
+struct RepDecode
+{
+ unsigned int MaxNum;
+ unsigned int DecodeLen[16];
+ unsigned int DecodePos[16];
+ unsigned int DecodeNum[RC];
+};
+
+struct BitDecode
+{
+ unsigned int MaxNum;
+ unsigned int DecodeLen[16];
+ unsigned int DecodePos[16];
+ unsigned int DecodeNum[BC];
+};
+
+struct UnpackFilter
+{
+ unsigned int BlockStart;
+ unsigned int BlockLength;
+ unsigned int ExecCount;
+ bool NextWindow;
+ VM_PreparedProgram Prg;
+};
+
+/***************************** Unpack v 2.0 *********************************/
+struct MultDecode
+{
+ unsigned int MaxNum;
+ unsigned int DecodeLen[16];
+ unsigned int DecodePos[16];
+ unsigned int DecodeNum[MC20];
+};
+
+struct AudioVariables
+{
+ int K1,K2,K3,K4,K5;
+ int D1,D2,D3,D4;
+ int LastDelta;
+ unsigned int Dif[11];
+ unsigned int ByteCount;
+ int LastChar;
+};
+/***************************** Unpack v 2.0 *********************************/
+
+
+class Unpack:private BitInput
+{
+ private:
+ friend class Pack;
+
+ void Unpack29(bool Solid);
+ bool UnpReadBuf();
+ void UnpWriteBuf();
+ void ExecuteCode(VM_PreparedProgram *Prg);
+ void UnpWriteArea(unsigned int StartPtr,unsigned int EndPtr);
+ void UnpWriteData(byte *Data,int Size);
+ bool ReadTables();
+ void MakeDecodeTables(unsigned char *LenTab,struct Decode *Dec,int Size);
+ int DecodeNumber(struct Decode *Dec);
+ void CopyString();
+ inline void InsertOldDist(unsigned int Distance);
+ inline void InsertLastMatch(unsigned int Length,unsigned int Distance);
+ void UnpInitData(int Solid);
+ void CopyString(unsigned int Length,unsigned int Distance);
+ bool ReadEndOfBlock();
+ bool ReadVMCode();
+ bool ReadVMCodePPM();
+ bool AddVMCode(unsigned int FirstByte,byte *Code,int CodeSize);
+ void InitFilters();
+
+ ComprDataIO *UnpIO;
+ ModelPPM PPM;
+ int PPMEscChar;
+
+ RarVM VM;
+ Array<UnpackFilter*> Filters;
+ Array<UnpackFilter*> PrgStack;
+ Array<int> OldFilterLengths;
+ int LastFilter;
+
+ bool TablesRead;
+ struct LitDecode LD;
+ struct DistDecode DD;
+ struct LowDistDecode LDD;
+ struct RepDecode RD;
+ struct BitDecode BD;
+
+ unsigned int OldDist[4],OldDistPtr;
+ unsigned int LastDist,LastLength;
+
+ unsigned int UnpPtr,WrPtr;
+
+ int ReadTop;
+ int ReadBorder;
+
+ unsigned char UnpOldTable[HUFF_TABLE_SIZE];
+
+ int UnpBlockType;
+
+ byte *Window;
+ bool ExternalWindow;
+
+
+ Int64 DestUnpSize;
+
+ bool Suspended;
+ bool UnpAllBuf;
+ bool UnpSomeRead;
+ Int64 WrittenFileSize;
+ bool FileExtracted;
+ bool PPMError;
+
+ int PrevLowDist,LowDistRepCount;
+
+/***************************** Unpack v 1.5 *********************************/
+ void Unpack15(bool Solid);
+ void ShortLZ();
+ void LongLZ();
+ void HuffDecode();
+ void GetFlagsBuf();
+ void OldUnpInitData(int Solid);
+ void InitHuff();
+ void CorrHuff(unsigned int *CharSet,unsigned int *NumToPlace);
+ void OldCopyString(unsigned int Distance,unsigned int Length);
+ unsigned int DecodeNum(int Num,unsigned int StartPos,
+ unsigned int *DecTab,unsigned int *PosTab);
+ void OldUnpWriteBuf();
+
+ unsigned int ChSet[256],ChSetA[256],ChSetB[256],ChSetC[256];
+ unsigned int Place[256],PlaceA[256],PlaceB[256],PlaceC[256];
+ unsigned int NToPl[256],NToPlB[256],NToPlC[256];
+ unsigned int FlagBuf,AvrPlc,AvrPlcB,AvrLn1,AvrLn2,AvrLn3;
+ int Buf60,NumHuf,StMode,LCount,FlagsCnt;
+ unsigned int Nhfb,Nlzb,MaxDist3;
+/***************************** Unpack v 1.5 *********************************/
+
+/***************************** Unpack v 2.0 *********************************/
+ void Unpack20(bool Solid);
+ struct MultDecode MD[4];
+ unsigned char UnpOldTable20[MC20*4];
+ int UnpAudioBlock,UnpChannels,UnpCurChannel,UnpChannelDelta;
+ void CopyString20(unsigned int Length,unsigned int Distance);
+ bool ReadTables20();
+ void UnpInitData20(int Solid);
+ void ReadLastTables();
+ byte DecodeAudio(int Delta);
+ struct AudioVariables AudV[4];
+/***************************** Unpack v 2.0 *********************************/
+
+ public:
+ Unpack(ComprDataIO *DataIO);
+ ~Unpack();
+ void Init(byte *Window=NULL);
+ void DoUnpack(int Method,bool Solid);
+ bool IsFileExtracted() {return(FileExtracted);}
+ void SetDestSize(Int64 DestSize) {DestUnpSize=DestSize;FileExtracted=false;}
+ void SetSuspended(bool Suspended) {Unpack::Suspended=Suspended;}
+
+ unsigned int GetChar()
+ {
+ if (InAddr>BitInput::MAX_SIZE-30)
+ UnpReadBuf();
+ return(InBuf[InAddr++]);
+ }
+};
+
+#endif