亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? lzrw.pas

?? LZW和LZRW壓縮算法源代碼
?? PAS
字號(hào):
unit LZRW;

interface

uses SysUtils, Classes;

{$IFDEF WIN32}
type
  Int16 = SmallInt;
{$ELSE}
type
  Int16 = Integer;
{$ENDIF}

const
  BufferMaxSize = 32768;
  BufferMax     = BufferMaxSize - 1;
  FLAG_Copied   = $80;
  FLAG_Compress = $40;
  FSignature = 'LZRW';
  
type
  BufferIndex = 0..BufferMax + 15;
  BufferSize  = 0..BufferMaxSize;
  { extra bytes needed here if compression fails      *dh *}
  BufferArray = array [BufferIndex] of BYTE;
  BufferPtr   = ^BufferArray;


  ELzrw1KHCompressor = class(Exception);


function Compression(Source, Dest: BufferPtr; SourceSize: BufferSize): BufferSize;
function Decompression(Source, Dest: BufferPtr; SourceSize: BufferSize): BufferSize;

procedure CompressStream(InStream, OutStream: TStream; InSize: LongInt);
procedure DeCompressStream(InStream, OutStream: TStream);

implementation

type
  HashTable  = array [0..4095] of Int16;
  HashTabPtr = ^Hashtable;

var
  Hash: HashTabPtr;

  { check if this string has already been seen }
  { in the current 4 KB window }
  
function GetMatch(Source: BufferPtr; X: BufferIndex;
  SourceSize: BufferSize; Hash: HashTabPtr; var Size: WORD;
  var Pos: BufferIndex): BOOLEAN;
var
  HashValue: WORD;
  TmpHash: Int16;
begin
  HashValue := (40543 * ((((Source^[X] shl 4) xor Source^[X + 1]) shl 4) xor
    Source^[X + 2]) shr 4) and $0FFF;
  Result := False;
  TmpHash := Hash^[HashValue];
  if (TmpHash <> -1) and (X - TmpHash < 4096) then
  begin
    Pos  := TmpHash;
    Size := 0;
    while ((Size < 18) and (Source^[X + Size] = Source^[Pos + Size]) and
      (X + Size < SourceSize)) do
    begin
      INC(Size);
    end;
    Result := (Size >= 3)
  end;
  Hash^[HashValue] := X
end;

{ compress a buffer of max. 32 KB }

function Compression(Source, Dest: BufferPtr;
  SourceSize: BufferSize): BufferSize;
var
  Bit, Command, Size: WORD;
  Key: Word;
  X, Y, Z, Pos: BufferIndex;
begin
  FillChar(Hash^, SizeOf(Hashtable), $FF);
  Dest^[0] := FLAG_Compress;
  X := 0;
  Y := 3;
  Z := 1;
  Bit := 0;
  Command := 0;
  while (X < SourceSize) and (Y <= SourceSize) do
  begin
    if (Bit > 15) then
    begin
      Dest^[Z] := HI(Command);
      Dest^[Z + 1] := LO(Command);
      Z := Y;
      Bit := 0;
      INC(Y, 2)
    end;
    Size := 1;
    while ((Source^[X] = Source^[X + Size]) and (Size < $FFF) and
      (X + Size < SourceSize)) do
    begin
      INC(Size);
    end;
    if (Size >= 16) then
    begin
      Dest^[Y] := 0;
      Dest^[Y + 1] := HI(Size - 16);
      Dest^[Y + 2] := LO(Size - 16);
      Dest^[Y + 3] := Source^[X];
      INC(Y, 4);
      INC(X, Size);
      Command := (Command shl 1) + 1;
    end
    else
    begin { not size >= 16 }
      if (GetMatch(Source, X, SourceSize, Hash, Size, Pos)) then
      begin
        Key := ((X - Pos) shl 4) + (Size - 3);
        Dest^[Y] := HI(Key);
        Dest^[Y + 1] := LO(Key);
        INC(Y, 2);
        INC(X, Size);
        Command := (Command shl 1) + 1
      end
      else
      begin
        Dest^[Y] := Source^[X];
        INC(Y);
        INC(X);
        Command := Command shl 1
      end;
    end; { size <= 16 }
    INC(Bit);
  end; { while x < sourcesize ... }
  Command := Command shl (16 - Bit);
  Dest^[Z] := HI(Command);
  Dest^[Z + 1] := LO(Command);
  if (Y > SourceSize) then
  begin
    MOVE(Source^[0], Dest^[1], SourceSize);
    Dest^[0] := FLAG_Copied;
    Y        := SUCC(SourceSize)
  end;
  Result := Y
end;

{ decompress a buffer of max 32 KB }

function Decompression(Source, Dest: BufferPtr;
  SourceSize: BufferSize): BufferSize;
var
  X, Y, Pos: BufferIndex;
  Command, Size, K: WORD;
  Bit: BYTE;
  SaveY: BufferIndex; { * dh * unsafe for-loop variable Y }
begin
  if (Source^[0] = FLAG_Copied) then
  begin
    for Y := 1 to PRED(SourceSize) do
    begin
      Dest^[PRED(Y)] := Source^[Y];
      SaveY := Y;
    end;
    Y := SaveY;
  end
  else
  begin
    Y       := 0;
    X       := 3;
    Command := (Source^[1] shl 8) + Source^[2];
    Bit     := 16;
    while (X < SourceSize) do
    begin
      if (Bit = 0) then
      begin
        Command := (Source^[X] shl 8) + Source^[X + 1];
        Bit := 16;
        INC(X, 2)
      end;
      if ((Command and $8000) = 0) then
      begin
        Dest^[Y] := Source^[X];
        INC(X);
        INC(Y)
      end
      else
      begin  { command and $8000 }
        Pos := ((Source^[X] shl 4) + (Source^[X + 1] shr 4));
        if (Pos = 0) then
        begin
          Size := (Source^[X + 1] shl 8) + Source^[X + 2] + 15;
          for K := 0 to Size do
          begin
            Dest^[Y + K] := Source^[X + 3];
          end;
          INC(X, 4);
          INC(Y, Size + 1)
        end
        else
        begin  { pos = 0 }
          Size := (Source^[X + 1] and $0F) + 2;
          for K := 0 to Size do
            Dest^[Y + K] := Dest^[Y - Pos + K];
          INC(X, 2);
          INC(Y, Size + 1)
        end; { pos = 0 }
      end;   { command and $8000 }
      Command := Command shl 1;
      DEC(Bit)
    end { while x < sourcesize }
  end;
  Result := Y
end;  { decompression }

{
  Unit "Finalization" as Delphi 2.0 would have it
}

procedure CompressStream(InStream, OutStream: TStream; InSize: LongInt);
var
  InBuffer, OutBuffer: BufferArray;
  CompressedSize, BytesRead, FinalPos, SizePos, TotalSize: LongInt;
begin
  TotalSize := 0;
  OutStream.WriteBuffer(FSignature, SizeOf(FSignature));
  SizePos := OutStream.Position;
  OutStream.WriteBuffer(TotalSize, SizeOf(TotalSize));
  while InSize > 0 do
  begin
    BytesRead      := InStream.Read(InBuffer, SizeOf(InBuffer));
    CompressedSize := Compression(@InBuffer, @OutBuffer, BytesRead);
    OutStream.WriteBuffer(CompressedSize, SizeOf(CompressedSize));
    OutStream.WriteBuffer(OutBuffer, CompressedSize);
    TotalSize := TotalSize + CompressedSize + SizeOf(CompressedSize);
    InSize    := InSize - BytesRead;
  end;
  FinalPos := OutStream.Position;
  OutStream.Position := SizePos;
  OutStream.WriteBuffer(TotalSize, SizeOf(TotalSize));
  OutStream.Position := FinalPos;
end;

procedure DeCompressStream(InStream, OutStream: TStream);
var
  InBuffer, OutBuffer: BufferArray;
  CompressedSize, UnCompressedSize, InSize: LongInt;
  Sig: array[0..SizeOf(FSignature) - 1] of Char;
begin
  InStream.ReadBuffer(Sig, SizeOf(FSignature));
  if Sig <> FSignature then
    raise Exception.Create('Wrong file type');
  InStream.ReadBuffer(InSize, SizeOf(InSize));
  while InSize > 0 do
  begin
    InStream.ReadBuffer(CompressedSize, SizeOf(CompressedSize));
    InStream.ReadBuffer(InBuffer, CompressedSize);
    UnCompressedSize := DeCompression(@InBuffer, @OutBuffer, CompressedSize);
    OutStream.WriteBuffer(OutBuffer, UnCompressedSize);
    InSize := InSize - CompressedSize - SizeOf(CompressedSize);
  end;
end;

var
  ExitSave: Pointer;

procedure Cleanup; far;
begin
  ExitProc := ExitSave;
  if (Hash <> nil) then
    Freemem(Hash, Sizeof(HashTable));
end;

initialization
  Hash := nil;
  try
    Getmem(Hash, Sizeof(Hashtable));
  except
    raise ELzrw1KHCompressor.Create('LZRW1KH : no memory for HASH table');
  end;
  ExitSave := ExitProc;
  ExitProc := @Cleanup;
end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一二三区| 日韩免费高清电影| 成人白浆超碰人人人人| 久久99国产精品免费网站| 亚洲日本在线a| 国产精品电影院| 国产精品久久久久久久蜜臀| 中文字幕中文在线不卡住| 国产精品进线69影院| 亚洲欧洲成人自拍| 亚洲欧美精品午睡沙发| 一区二区三区国产| 亚洲大片免费看| 日本成人在线看| 男女激情视频一区| 国模套图日韩精品一区二区| 国产精品一卡二| 成人av网在线| 在线观看免费亚洲| 在线播放欧美女士性生活| 日韩欧美色电影| 国产亚洲欧美日韩日本| 日韩毛片高清在线播放| 亚洲国产乱码最新视频| 奇米色一区二区| 国产成人亚洲综合a∨猫咪| 亚洲国产精品t66y| 中文字幕亚洲在| 亚洲成精国产精品女| 精品亚洲成a人| 日韩国产在线观看| 91电影在线观看| 欧美无砖专区一中文字| 制服丝袜成人动漫| 国产亚洲欧美日韩日本| 亚洲三级在线免费| 日韩国产成人精品| 国产成人精品亚洲777人妖| 99久久国产综合精品女不卡| 欧美欧美欧美欧美| 国产香蕉久久精品综合网| 亚洲美女偷拍久久| 男人的j进女人的j一区| 国产超碰在线一区| 欧美天天综合网| 久久综合中文字幕| 一区二区三区毛片| 狠狠色综合色综合网络| 色综合欧美在线| www成人在线观看| 一区二区三区丝袜| 国产福利91精品| 欧美日韩大陆在线| 国产精品久久久久精k8| 日本不卡一区二区| 成人的网站免费观看| 日韩亚洲国产中文字幕欧美| 最新中文字幕一区二区三区| 久久99精品视频| 在线免费视频一区二区| 国产亚洲欧美激情| 蜜臀va亚洲va欧美va天堂| 91欧美激情一区二区三区成人| 日韩一区二区三区视频在线| 伊人一区二区三区| 粉嫩13p一区二区三区| 欧美一区二区三区在线观看视频| 国产精品大尺度| 国产麻豆成人精品| 91精品国产综合久久精品麻豆| 最新中文字幕一区二区三区| 国产裸体歌舞团一区二区| 欧美日韩精品电影| 亚洲欧美另类小说| 国产成人av一区| 精品国产在天天线2019| 午夜精品123| 91久久精品一区二区三| 国产精品免费丝袜| 国产一区999| 日韩免费视频一区| 日日夜夜一区二区| 精品视频资源站| 丁香婷婷综合色啪| 久久色.com| 韩日欧美一区二区三区| 日韩欧美专区在线| 亚洲h动漫在线| 欧美日韩一二三| 亚洲大片一区二区三区| 欧美婷婷六月丁香综合色| 一区二区三区精品久久久| 99久久精品久久久久久清纯| 国产精品国产自产拍高清av王其| 国产精品18久久久久久久久久久久 | 色综合久久久久久久久| 国产精品麻豆网站| 成人一区二区三区中文字幕| 久久天天做天天爱综合色| 国产一区二区精品久久99| 欧美成人午夜电影| 激情另类小说区图片区视频区| 欧美一区二区二区| 毛片一区二区三区| 久久亚洲精精品中文字幕早川悠里| 麻豆国产欧美日韩综合精品二区 | 欧美一区二区三区影视| 图片区小说区国产精品视频| 欧美老肥妇做.爰bbww| 污片在线观看一区二区| 欧美一区二区三区在线观看| 麻豆成人在线观看| 久久久久久久一区| 成人免费毛片高清视频| 亚洲精品欧美在线| 欧美视频在线观看一区二区| 亚洲高清视频中文字幕| 欧美一二三在线| 国产一区二区在线看| 亚洲国产电影在线观看| 91老师片黄在线观看| 夜夜爽夜夜爽精品视频| 欧美二区在线观看| 久久99精品国产麻豆婷婷洗澡| 亚洲精品一区二区三区影院| 福利电影一区二区| 亚洲免费av高清| 91精品国产手机| 激情文学综合丁香| 国产精品美女一区二区| 欧美无乱码久久久免费午夜一区| 日韩不卡一区二区三区| 国产肉丝袜一区二区| 日本二三区不卡| 青椒成人免费视频| 欧美国产激情二区三区 | 欧美激情综合网| 欧美在线一区二区| 久久国产精品免费| 国产精品久久精品日日| 欧美日韩午夜精品| 国产精品一区在线观看乱码 | 国产一区二区91| 亚洲女爱视频在线| 精品剧情在线观看| 日本乱人伦aⅴ精品| 久久er99热精品一区二区| 国产精品福利电影一区二区三区四区| 欧美亚洲免费在线一区| 国产乱码字幕精品高清av| 一区二区三区中文字幕电影| 日韩精品一区二区三区视频 | 成人免费高清在线观看| 亚洲国产一二三| 久久精品欧美一区二区三区不卡| 欧美亚洲国产怡红院影院| 国产麻豆成人传媒免费观看| 一个色在线综合| 欧美国产日本韩| 日韩午夜精品视频| 在线视频综合导航| 国产传媒久久文化传媒| 三级在线观看一区二区| 亚洲视频你懂的| 亚洲精品一区二区三区福利| 在线视频你懂得一区| 国产成人免费视| 奇米色一区二区| 一区二区免费在线播放| 国产色综合一区| 日韩精品中文字幕在线不卡尤物| 色八戒一区二区三区| 国产91精品欧美| 久久www免费人成看片高清| 亚洲综合999| 国产精品电影一区二区三区| 26uuu久久综合| 日韩西西人体444www| 精品视频一区三区九区| 99麻豆久久久国产精品免费| 国产一区二区三区视频在线播放| 肉色丝袜一区二区| 亚洲一区二区三区四区在线观看 | 91在线国产观看| 国产成人免费9x9x人网站视频| 奇米影视一区二区三区| 午夜国产不卡在线观看视频| 亚洲图片你懂的| 国产精品久久久久aaaa| 国产亚洲婷婷免费| wwwwxxxxx欧美| 精品国产1区二区| 日韩女优av电影在线观看| 91麻豆精品91久久久久久清纯| 欧美亚洲国产bt| 欧美性猛交一区二区三区精品| 色婷婷久久综合| 91麻豆国产精品久久| 色综合欧美在线| 91久久线看在观草草青青|