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

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

?? oalzrwkh.pas

?? Office 97 中『小幫手』
?? PAS
字號:
{
---------------------------------------------------------------
    This posting includes the sources for the Turbo Pascal
version of the LZRW1/KH compression algoritm.
---------------------------------------------------------------
File #1 : The LZRW1KH unit
--------------------------
}
{    ###################################################################   }
{    ##                                                               ##   }
{    ##      ##    ##### #####  ##   ##  ##      ## ##  ## ##  ##     ##   }
{    ##      ##      ### ##  ## ## # ## ###     ##  ## ##  ##  ##     ##   }
{    ##      ##     ###  #####  #######  ##    ##   ####   ######     ##   }
{    ##      ##    ###   ##  ## ### ###  ##   ##    ## ##  ##  ##     ##   }
{    ##      ##### ##### ##  ## ##   ## #### ##     ##  ## ##  ##     ##   }
{    ##                                                               ##   }
{    ##   EXTREMELY FAST AND EASY TO UNDERSTAND COMPRESSION ALGORITM  ##   }
{    ##                                                               ##   }
{    ###################################################################   }
{    ##                                                               ##   }
{    ##   This unit implements the updated LZRW1/KH algoritm which    ##   }
{    ##   also implements  some RLE coding  which is usefull  when    ##   }
{    ##   compress files  containing  a lot  of consecutive  bytes    ##   }
{    ##   having the same value.   The algoritm is not as good  as    ##   }
{    ##   LZH, but can compete with Lempel-Ziff.   It's the fasted    ##   }
{    ##   one I've encountered upto now.                              ##   }
{    ##                                                               ##   }
{    ##                                                               ##   }
{    ##                                                               ##   }
{    ##                                                Kurt HAENEN    ##   }
{    ##                                                               ##   }
{    ##   UNIT MODIFED BY Alexander Halser (May 1998)                 ##   }
{    ##   for proper implementation in Delphi 3                       ##   }
{    ##                                                               ##   }
{    ##   UNIT MODIFED BY Kambiz R. Khjasteh (November 1999)          ##   }
{    ##   for adding stream support                                   ##   }
{    ##                                                               ##   }
{    ###################################################################   }

UNIT oaLZRWKH;

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;

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);
procedure DecompressStream(inStream, outStream: TStream);

IMPLEMENTATION

{$IFOPT R+}
  {$DEFINE RON}
  {$R-}
{$ENDIF}

type
  HashTable      = ARRAY [0..4095] OF Int16;
  HashTabPtr     = ^Hashtable;

VAR
  Hash                     : HashTabPtr;

{$IFOPT Q+}
  {$DEFINE QON}
  {$Q-}
{$ENDIF}

                             { 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;
{$IFDEF QON}
  {$UNDEF QON}
  {$Q+}
{$ENDIF}


                                    { 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
    SaveY := 1;
    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 }


{ CompressStream by Kambiz R. Khojasteh}

procedure CompressStream(inStream, outStream: TStream);
const
  ChunkSize = 32768;
  IOBufSize = (ChunkSize + 16);
var
  Size, SrcSize, DstSize: LongInt;
  SrcBuf, DstBuf: BufferPtr;
begin
  {Create buffers for LZWR1KH}
  Getmem(SrcBuf, IOBufSize);
  Getmem(DstBuf, IOBufSize);
  try
    {Write out uncompressed size}
    Size := inStream.Size;
    outStream.Write(Size, SizeOf(LongInt));
    {Compress data}
    SrcSize := ChunkSize;
    while (SRCSize = ChunkSize) do
    begin
      {Read a block of data}
      SrcSize := inStream.Read(SrcBuf^, ChunkSize);
      {Compress block}
      DstSize := Compression(SrcBuf, DstBuf, SrcSize);
      {Write out compressed size}
      outStream.Write(DstSize, SizeOf(Word));
      {Write out compressed data}
      outStream.Write(DstBuf^, DstSize);
    end;
  finally
    {Clean Up Memory}
    Freemem(SrcBuf, IOBufSize);
    Freemem(DstBuf, IOBufSize);
  end;
end;

{ DecompressStream by Kambiz R. Khojasteh}

procedure DecompressStream(inStream, outStream: TStream);
const
  ChunkSize = 32768;
  IOBufSize = (ChunkSize + 16);
var
  OrigSize, SrcSize, DstSize: LongInt;
  SrcBuf, DstBuf: BufferPtr;
begin
  {Create buffers for LZWR1KH}
  Getmem(SrcBuf, IOBufSize);
  Getmem(DstBuf, IOBufSize);
  try
    {Read in uncompressed size}
    inStream.Read(OrigSize, SizeOf(LongInt));
    {Uncompress data}
    DstSize := ChunkSize;
    SrcSize := 0;
    while (DstSize = ChunkSize) do
    begin
      {Read size of compressed block}
      inStream.Read(SrcSize, SizeOf(Word));
      {Read compressed block}
      inStream.Read(SrcBuf^, SrcSize);
      {Decompress block}
      DstSize := Decompression(SrcBuf, DstBuf, SrcSize);
      {Write decompressed block out to TmpStream}
      outStream.Write(DstBuf^, DstSize);
    end;
  finally
    {Clean Up Memory}
    Freemem(SrcBuf, IOBufSize);
    Freemem(DstBuf, IOBufSize);
  end;
end;

{$IFDEF RON}
  {$UNDEF RON}
  {$R+}
{$ENDIF}

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

{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;

Finalization
  if (Hash <> Nil) then Freemem(Hash, Sizeof(HashTable));

END.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月婷婷欧美视频| 国产精品视频免费| 婷婷成人综合网| 欧美精品丝袜中出| 免费成人结看片| 精品久久人人做人人爰| 国产九九视频一区二区三区| 国产日韩欧美精品综合| 国产不卡在线一区| 亚洲精品v日韩精品| 欧美大片在线观看一区二区| 精品亚洲aⅴ乱码一区二区三区| 2020日本不卡一区二区视频| 国产成人免费在线观看| 亚洲人成在线播放网站岛国| 在线国产亚洲欧美| 免费xxxx性欧美18vr| 国产婷婷色一区二区三区四区| av在线综合网| 亚洲电影第三页| 精品国产91乱码一区二区三区| av午夜一区麻豆| 天天色图综合网| 国产清纯白嫩初高生在线观看91| 97se亚洲国产综合自在线观| 石原莉奈在线亚洲三区| 久久色中文字幕| 欧美四级电影在线观看| 国产在线精品一区二区三区不卡| 亚洲欧美在线高清| 日韩一区二区精品| 99久久99久久精品免费看蜜桃| 午夜精品一区二区三区电影天堂| 久久天天做天天爱综合色| 一本色道久久综合亚洲aⅴ蜜桃| 天堂一区二区在线| 中日韩免费视频中文字幕| 欧美日韩国产免费一区二区 | 91国产丝袜在线播放| 天堂蜜桃一区二区三区| 日本一区二区三区四区在线视频| 欧美日韩国产精选| 成人av一区二区三区| 美女www一区二区| 一区二区视频在线看| 精品国产麻豆免费人成网站| 欧美在线一区二区| 国产.欧美.日韩| 男人操女人的视频在线观看欧美| 亚洲欧美一区二区三区孕妇| 欧美精品一区二区三区视频| 欧美日韩中文精品| 99精品视频在线观看免费| 狠狠色丁香婷综合久久| 无码av免费一区二区三区试看| 国产精品乱人伦| 亚洲精品在线观看视频| 91精品国产欧美一区二区18| 色视频一区二区| 成人精品免费网站| 国产精品原创巨作av| 麻豆精品一区二区三区| 午夜欧美大尺度福利影院在线看| 亚洲视频免费在线观看| 国产精品丝袜在线| 26uuu亚洲综合色欧美| 欧美久久久久久久久| 色播五月激情综合网| 色综合咪咪久久| 99精品视频在线免费观看| 成人h动漫精品一区二| 国产精品亚洲视频| 国产精品一二三| 国产精品一色哟哟哟| 国产精品一区二区三区99| 精品在线观看视频| 国产在线一区二区| 国产精品一二三区在线| 国产福利一区二区三区视频在线| 国产原创一区二区| 国产在线视频一区二区| 国产麻豆精品久久一二三| 极品瑜伽女神91| 国产乱妇无码大片在线观看| 国产精品白丝jk白祙喷水网站| 国产成人a级片| 99久精品国产| 欧美性大战久久久| 欧美日韩国产bt| 欧美一区二区三区不卡| 精品国产91乱码一区二区三区| 久久综合色鬼综合色| 亚洲国产成人在线| 亚洲日韩欧美一区二区在线| 一区二区三区高清在线| 日韩主播视频在线| 激情综合亚洲精品| 成人app网站| 日本道免费精品一区二区三区| 欧美日韩一级二级三级| 欧美一激情一区二区三区| 久久这里只有精品首页| 国产精品国产a| 亚洲国产综合色| 久久av中文字幕片| www.66久久| 欧美久久一二三四区| 久久先锋影音av鲁色资源网| 国产精品福利电影一区二区三区四区| 一区二区免费视频| 久久精品国产亚洲高清剧情介绍| 国产福利一区在线| 欧美在线色视频| 久久人人爽爽爽人久久久| 亚洲日穴在线视频| 免费在线一区观看| 99精品视频中文字幕| 欧美一区二区三区视频免费| 国产精品乱码人人做人人爱| 亚洲成人动漫av| 国产传媒久久文化传媒| 欧美色老头old∨ideo| 久久久久久久久久美女| 亚洲综合一区二区精品导航| 精品在线播放免费| 欧美午夜寂寞影院| 久久久久97国产精华液好用吗| 亚洲综合免费观看高清完整版| 激情亚洲综合在线| 欧美在线视频全部完| 国产欧美综合在线观看第十页| 一二三区精品福利视频| 国产成人av一区二区三区在线观看| 欧美性做爰猛烈叫床潮| 中文字幕欧美日本乱码一线二线| 午夜国产不卡在线观看视频| 成人国产精品免费观看动漫| 制服丝袜亚洲精品中文字幕| 亚洲三级在线看| 国产麻豆9l精品三级站| 538prom精品视频线放| 欧美国产国产综合| 狠狠狠色丁香婷婷综合激情| 欧美性受xxxx| 亚洲欧美电影院| 高清国产一区二区三区| 51久久夜色精品国产麻豆| 亚洲精品国产一区二区精华液| 国产一区二区三区黄视频| 欧美丰满少妇xxxbbb| 一区二区三区不卡视频在线观看 | 亚洲视频在线一区观看| 国模少妇一区二区三区| 欧美美女直播网站| 亚洲精品国久久99热| av不卡免费电影| 国产午夜亚洲精品不卡| 精品一区二区三区视频在线观看| 欧美剧情片在线观看| 午夜精品久久久久| 欧美在线不卡一区| 亚洲伊人色欲综合网| 日本精品一级二级| 亚洲精品一二三区| 色婷婷综合激情| 亚洲男人的天堂在线观看| 成人av网址在线观看| 国产精品福利影院| 99re热视频这里只精品| 亚洲日本丝袜连裤袜办公室| 99精品欧美一区二区蜜桃免费| 国产精品毛片无遮挡高清| 粉嫩久久99精品久久久久久夜| 久久精品一区二区三区av| 国产精品99精品久久免费| 国产欧美精品一区aⅴ影院| 国产盗摄女厕一区二区三区| 国产精品网曝门| 99re热这里只有精品免费视频| 综合激情成人伊人| 欧美性猛片xxxx免费看久爱| 亚洲国产乱码最新视频| 91麻豆精品91久久久久久清纯| 日韩精品电影一区亚洲| 欧美mv和日韩mv的网站| 国产精品99久久久久| 国产精品理论在线观看| 在线视频国内一区二区| 五月天视频一区| 精品国产免费视频| 99国产精品久久久久久久久久| 一区二区不卡在线播放 | 97久久超碰国产精品电影| 亚洲色欲色欲www| 欧美日韩免费视频| 欧洲精品一区二区三区在线观看| 亚洲国产另类精品专区| 欧美videos大乳护士334| 成人视屏免费看| 一二三四区精品视频|