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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? zlib.pas

?? Evc編的一個在wince5.0上運行的flash播放器
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{*******************************************************}
{                                                       }
{       Delphi Supplemental Components                  }
{       ZLIB Data Compression Interface Unit            }
{                                                       }
{       Copyright (c) 1997 Borland International        }
{                                                       }
{*******************************************************}

{ Modified for zlib 1.1.3 by Davide Moretti <dave@rimini.com }

unit zlib;

interface

uses Sysutils, Classes;

type
  TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer;
  TFree = procedure (AppData, Block: Pointer);

  // Internal structure.  Ignore.
  TZStreamRec = packed record
    next_in: PChar;       // next input byte
    avail_in: Integer;    // number of bytes available at next_in
    total_in: Integer;    // total nb of input bytes read so far

    next_out: PChar;      // next output byte should be put here
    avail_out: Integer;   // remaining free space at next_out
    total_out: Integer;   // total nb of bytes output so far

    msg: PChar;           // last error message, NULL if no error
    internal: Pointer;    // not visible by applications

    zalloc: TAlloc;       // used to allocate the internal state
    zfree: TFree;         // used to free the internal state
    AppData: Pointer;     // private data object passed to zalloc and zfree

    data_type: Integer;   //  best guess about the data type: ascii or binary
    adler: Integer;       // adler32 value of the uncompressed data
    reserved: Integer;    // reserved for future use
  end;

  // Abstract ancestor class
  TCustomZlibStream = class(TStream)
  private
    FStrm: TStream;
    FStrmPos: Integer;
    FOnProgress: TNotifyEvent;
    FZRec: TZStreamRec;
    FBuffer: array [Word] of Char;
  protected
    procedure Progress(Sender: TObject); dynamic;
    property OnProgress: TNotifyEvent read FOnProgress write FOnProgress;
    constructor Create(Strm: TStream);
  end;

{ TCompressionStream compresses data on the fly as data is written to it, and
  stores the compressed data to another stream.

  TCompressionStream is write-only and strictly sequential. Reading from the
  stream will raise an exception. Using Seek to move the stream pointer
  will raise an exception.

  Output data is cached internally, written to the output stream only when
  the internal output buffer is full.  All pending output data is flushed
  when the stream is destroyed.

  The Position property returns the number of uncompressed bytes of
  data that have been written to the stream so far.

  CompressionRate returns the on-the-fly percentage by which the original
  data has been compressed:  (1 - (CompressedBytes / UncompressedBytes)) * 100
  If raw data size = 100 and compressed data size = 25, the CompressionRate
  is 75%

  The OnProgress event is called each time the output buffer is filled and
  written to the output stream.  This is useful for updating a progress
  indicator when you are writing a large chunk of data to the compression
  stream in a single call.}


  TCompressionLevel = (clNone, clFastest, clDefault, clMax);

  TCompressionStream = class(TCustomZlibStream)
  private
    function GetCompressionRate: Single;
  public
    constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream);
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    function Seek(Offset: Longint; Origin: Word): Longint; override;
    property CompressionRate: Single read GetCompressionRate;
    property OnProgress;
  end;

{ TDecompressionStream decompresses data on the fly as data is read from it.

  Compressed data comes from a separate source stream.  TDecompressionStream
  is read-only and unidirectional; you can seek forward in the stream, but not
  backwards.  The special case of setting the stream position to zero is
  allowed.  Seeking forward decompresses data until the requested position in
  the uncompressed data has been reached.  Seeking backwards, seeking relative
  to the end of the stream, requesting the size of the stream, and writing to
  the stream will raise an exception.

  The Position property returns the number of bytes of uncompressed data that
  have been read from the stream so far.

  The OnProgress event is called each time the internal input buffer of
  compressed data is exhausted and the next block is read from the input stream.
  This is useful for updating a progress indicator when you are reading a
  large chunk of data from the decompression stream in a single call.}

  TDecompressionStream = class(TCustomZlibStream)
  public
    constructor Create(Source: TStream);
    destructor Destroy; override;
    function Read(var Buffer; Count: Longint): Longint; override;
    function Write(const Buffer; Count: Longint): Longint; override;
    function Seek(Offset: Longint; Origin: Word): Longint; override;
    property OnProgress;
  end;



{ CompressBuf compresses data, buffer to buffer, in one call.
   In: InBuf = ptr to compressed data
       InBytes = number of bytes in InBuf
  Out: OutBuf = ptr to newly allocated buffer containing decompressed data
       OutBytes = number of bytes in OutBuf   }
procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
                      out OutBuf: Pointer; out OutBytes: Integer);


{ DecompressBuf decompresses data, buffer to buffer, in one call.
   In: InBuf = ptr to compressed data
       InBytes = number of bytes in InBuf
       OutEstimate = zero, or est. size of the decompressed data
  Out: OutBuf = ptr to newly allocated buffer containing decompressed data
       OutBytes = number of bytes in OutBuf   }
procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
 OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);

const
  zlib_version = '1.1.3';

type
  EZlibError = class(Exception);
  ECompressionError = class(EZlibError);
  EDecompressionError = class(EZlibError);

function adler32(adler: Integer; buf: PChar; len: Integer): Integer;

implementation

const
  Z_NO_FLUSH      = 0;
  Z_PARTIAL_FLUSH = 1;
  Z_SYNC_FLUSH    = 2;
  Z_FULL_FLUSH    = 3;
  Z_FINISH        = 4;

  Z_OK            = 0;
  Z_STREAM_END    = 1;
  Z_NEED_DICT     = 2;
  Z_ERRNO         = (-1);
  Z_STREAM_ERROR  = (-2);
  Z_DATA_ERROR    = (-3);
  Z_MEM_ERROR     = (-4);
  Z_BUF_ERROR     = (-5);
  Z_VERSION_ERROR = (-6);

  Z_NO_COMPRESSION       =   0;
  Z_BEST_SPEED           =   1;
  Z_BEST_COMPRESSION     =   9;
  Z_DEFAULT_COMPRESSION  = (-1);

  Z_FILTERED            = 1;
  Z_HUFFMAN_ONLY        = 2;
  Z_DEFAULT_STRATEGY    = 0;

  Z_BINARY   = 0;
  Z_ASCII    = 1;
  Z_UNKNOWN  = 2;

  Z_DEFLATED = 8;

  _z_errmsg: array[0..9] of PChar = (
    'need dictionary',      // Z_NEED_DICT      (2)
    'stream end',           // Z_STREAM_END     (1)
    '',                     // Z_OK             (0)
    'file error',           // Z_ERRNO          (-1)
    'stream error',         // Z_STREAM_ERROR   (-2)
    'data error',           // Z_DATA_ERROR     (-3)
    'insufficient memory',  // Z_MEM_ERROR      (-4)
    'buffer error',         // Z_BUF_ERROR      (-5)
    'incompatible version', // Z_VERSION_ERROR  (-6)
    ''
  );

{$L deflate.obj}
{$L inflate.obj}
{$L inftrees.obj}
{$L trees.obj}
{$L adler32.obj}
{$L infblock.obj}
{$L infcodes.obj}
{$L infutil.obj}
{$L inffast.obj}

procedure _tr_init; external;
procedure _tr_tally; external;
procedure _tr_flush_block; external;
procedure _tr_align; external;
procedure _tr_stored_block; external;
function adler32; external;
procedure inflate_blocks_new; external;
procedure inflate_blocks; external;
procedure inflate_blocks_reset; external;
procedure inflate_blocks_free; external;
procedure inflate_set_dictionary; external;
procedure inflate_trees_bits; external;
procedure inflate_trees_dynamic; external;
procedure inflate_trees_fixed; external;
procedure inflate_codes_new; external;
procedure inflate_codes; external;
procedure inflate_codes_free; external;
procedure _inflate_mask; external;
procedure inflate_flush; external;
procedure inflate_fast; external;

procedure _memset(P: Pointer; B: Byte; count: Integer);cdecl;
begin
  FillChar(P^, count, B);
end;

procedure _memcpy(dest, source: Pointer; count: Integer);cdecl;
begin
  Move(source^, dest^, count);
end;



// deflate compresses data
function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar;
  recsize: Integer): Integer; external;
function deflate(var strm: TZStreamRec; flush: Integer): Integer; external;
function deflateEnd(var strm: TZStreamRec): Integer; external;

// inflate decompresses data
function inflateInit_(var strm: TZStreamRec; version: PChar;
  recsize: Integer): Integer; external;
function inflate(var strm: TZStreamRec; flush: Integer): Integer; external;
function inflateEnd(var strm: TZStreamRec): Integer; external;
function inflateReset(var strm: TZStreamRec): Integer; external;


function zcalloc(AppData: Pointer; Items, Size: Integer): Pointer;
begin
  GetMem(Result, Items*Size);
end;

procedure zcfree(AppData, Block: Pointer);
begin
  FreeMem(Block);
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人久久18免费网站麻豆| 亚洲第一主播视频| 国产乱码精品一区二区三区忘忧草 | 成人激情图片网| 国产精品色眯眯| 色哟哟国产精品| 亚洲一区二区三区爽爽爽爽爽| 日本丰满少妇一区二区三区| 亚洲国产欧美日韩另类综合| 欧美主播一区二区三区| 男女性色大片免费观看一区二区 | 91美女在线观看| 亚洲综合小说图片| 日韩三级视频中文字幕| 国产91在线|亚洲| 中文字幕一区在线观看视频| 欧美主播一区二区三区| 久久99最新地址| 中文字幕精品一区二区三区精品| 97久久精品人人澡人人爽| 午夜电影一区二区| 久久久久国产免费免费 | 亚洲一区二区3| 日韩免费高清视频| 成人理论电影网| 午夜欧美视频在线观看| 国产亚洲美州欧州综合国| 欧亚一区二区三区| 国产乱码一区二区三区| 亚洲午夜av在线| 国产欧美日韩另类视频免费观看| 色八戒一区二区三区| 另类小说色综合网站| 中文字幕亚洲一区二区av在线| 777久久久精品| 不卡一卡二卡三乱码免费网站| 日本亚洲欧美天堂免费| 国产精品超碰97尤物18| 欧美不卡在线视频| 日本福利一区二区| 成人爽a毛片一区二区免费| 天堂久久久久va久久久久| 国产精品久久久爽爽爽麻豆色哟哟| 欧美猛男男办公室激情| 成人蜜臀av电影| 麻豆精品久久精品色综合| 依依成人精品视频| 国产午夜精品理论片a级大结局| 91精品在线一区二区| 成人免费va视频| 国产精品一品视频| 免费成人美女在线观看.| 一区二区三区日韩精品| 国产精品日日摸夜夜摸av| 亚洲精品在线电影| 欧美一区日韩一区| 欧美三级三级三级爽爽爽| 色综合久久久久综合| 国产成人在线免费| 国内外成人在线| 九九国产精品视频| 五月天丁香久久| 午夜婷婷国产麻豆精品| 一区二区三区四区视频精品免费| 国产精品情趣视频| 国产日韩欧美电影| 久久久美女毛片| 久久看人人爽人人| 久久久久久久久久久久久久久99 | 欧美一区二区网站| 欧美精品日日鲁夜夜添| 91理论电影在线观看| av影院午夜一区| 91免费国产在线| 在线看不卡av| 欧美亚州韩日在线看免费版国语版| 99国产麻豆精品| 色噜噜狠狠成人网p站| 色屁屁一区二区| 欧美亚洲动漫制服丝袜| 欧美猛男男办公室激情| 91精品国产91久久久久久一区二区| 欧美丝袜自拍制服另类| 欧美精选午夜久久久乱码6080| 欧美性大战久久久久久久| 欧美精三区欧美精三区| 日韩一区二区三区电影在线观看 | av电影在线观看一区| www.亚洲色图| 色94色欧美sute亚洲线路二| 色94色欧美sute亚洲13| 欧美日韩在线播放三区四区| 日韩欧美中文字幕公布| www日韩大片| 中文av一区二区| 亚洲一区二区三区不卡国产欧美| 亚洲成人av电影在线| 久久精品99国产精品| 国产精品18久久久久久vr| 成人av手机在线观看| 91国偷自产一区二区使用方法| 欧美丝袜第三区| 精品88久久久久88久久久| 国产精品丝袜91| 亚洲6080在线| 国产成人午夜视频| 在线亚洲高清视频| 精品日韩成人av| 亚洲人成伊人成综合网小说| 亚洲成va人在线观看| 国产精品一二三四区| 色偷偷久久人人79超碰人人澡 | 国产成人在线看| 91高清视频在线| 久久久不卡网国产精品一区| 最近日韩中文字幕| 蜜桃av噜噜一区| 91免费看`日韩一区二区| 欧美一区三区四区| 亚洲另类色综合网站| 美脚の诱脚舐め脚责91| 99久久精品国产一区二区三区| 91精品视频网| 亚洲精品国产无天堂网2021| 美国三级日本三级久久99| 色婷婷国产精品久久包臀| 亚洲精品在线观看网站| 亚洲成人av一区| 波波电影院一区二区三区| 日韩免费福利电影在线观看| 亚洲免费av在线| 成人美女视频在线看| 欧美videos中文字幕| 午夜在线电影亚洲一区| 91猫先生在线| 久久久777精品电影网影网 | 国产在线乱码一区二区三区| 色播五月激情综合网| 中文字幕乱码久久午夜不卡 | 成人av在线播放网站| 日韩一级在线观看| 亚洲电影在线播放| 色综合中文综合网| 成人爽a毛片一区二区免费| 日韩精品专区在线影院观看| 亚洲综合激情另类小说区| av电影天堂一区二区在线观看| 精品卡一卡二卡三卡四在线| 天天影视涩香欲综合网| 欧美色中文字幕| 亚洲欧洲日韩综合一区二区| 国产成+人+日韩+欧美+亚洲| 精品少妇一区二区| 日本强好片久久久久久aaa| 欧美专区日韩专区| 一区二区成人在线视频| 91视频在线看| 国产精品传媒视频| 成人高清在线视频| 亚洲欧洲日韩一区二区三区| 成人永久aaa| 中文字幕不卡三区| 成人免费看片app下载| 欧美激情在线看| www.亚洲激情.com| 中文字幕日本乱码精品影院| av一二三不卡影片| 亚洲免费观看高清完整版在线| av亚洲精华国产精华精华| 日韩伦理电影网| 欧美亚洲综合另类| 亚洲成人av一区二区三区| 91 com成人网| 国产一区二三区好的| 久久久久久久综合狠狠综合| 国产精品一二二区| 国产欧美1区2区3区| 99久久综合国产精品| 亚洲人成亚洲人成在线观看图片| 91美女在线看| 日韩av中文字幕一区二区三区| 欧美日韩成人综合天天影院 | 亚洲天堂成人网| 色婷婷综合五月| 亚洲成在人线在线播放| 538在线一区二区精品国产| 久久福利视频一区二区| 久久精品日产第一区二区三区高清版 | 欧美一级理论片| 国产在线不卡一卡二卡三卡四卡| 久久蜜臀精品av| 色悠悠久久综合| 亚洲网友自拍偷拍| 日韩欧美黄色影院| 成人午夜精品在线| 亚洲一区视频在线观看视频| 日韩视频免费观看高清完整版| 国产一区二区三区免费观看| 亚洲视频在线观看三级| 欧美日韩一区二区三区四区|