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

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

?? kpinflt.pas

?? delphi 的壓縮工具代碼
?? PAS
字號:
{ ********************************************************************************** }
{                                                                                    }
{ 	 COPYRIGHT 1997 Kevin Boylan                                                    }
{     Source File: Inflate.pas                                                       }
{     Description: VCLUnZip component - native Delphi unzip component.               }
{     Date:        March 1997                                                        }
{     Author:      Kevin Boylan, boylank@bigfoot.com                                 }
{                                                                                    }
{                                                                                    }
{ ********************************************************************************** }

{$Q-}
{$R-}

procedure Inflate;
var
	wp: WORD;
  bb: ULONG;
  bk: WORD;
  lbits: short_int;          { bits in base literal/length lookup table }
	dbits: short_int;          { bits in base distance lookup table }

{****************************************************************************}
function inflate_codes( tl, td: huftptr; bl, bd: short_int ): short_int;
{ tl,td = literal/length and distance decoder tables }
{ bl, bd = number of bits decoded by tl[] and td[] }
{ inflate (decompress) the codes in a deflated (compressed) block.
   Return an error code or zero if it all goes ok. }
var
	e: 		WORD;            	{ table entry flag/number of extra bits }
  n,d: 		WORD;             { length and index for copy }
  w:			WORD;            	{ current window position }
  t:			huftptr;    		{ pointer to table entry }
  ml,md:   WORD;            	{ masks for bl and bd bits }
  b:			ULONG;         	{ bit buffer }
  k:			WORD;            	{ number of bits in bit buffer }
begin
  { make local copies of globals }
  b := bb;                       { initialize bit buffer }
  k := bk;
  w := wp;                       { initialize window position }

  { inflate the coded data }
  ml := mask_bits[bl];           { precompute masks for speed }
  md := mask_bits[bd];
  while True do                     { do until end of block }
   begin
    NEEDBITS(bl,b,k);
    t := tl;

    if (t = nil) then
     begin
        Result := 1;
        exit;
     end;

    Inc(t,WORD(b) and ml);
    e := t^.e;
    if (e  > 16) then
      Repeat
        if (e = 99) then
         begin
          Result := 1;
          exit;
         end;
        DUMPBITS(t^.b,b,k);
        Dec(e,16);
        NEEDBITS(e,b,k);
        t := t^.v.t;
        Inc(t,WORD(b) and mask_bits[e]);
        e := t^.e;
      Until ( e <= 16);
    DUMPBITS(t^.b,b,k);
    if (e = 16) then               { then it's a literal }
     begin
	  		slide^[w] := BYTE(t^.v.n);
        Inc(w);
      	if (w >= WSIZE) then
      	 begin
        	flushslide(w);
        	w := 0;
      	 end;
     end
    else                        { it's an EOB or a length }
     begin
      { exit if end of block }
      if (e = 15) then
        break;

      { get length of block to copy }
      NEEDBITS(e,b,k);
      n := t^.v.n + (WORD(b) and mask_bits[e]);
      DUMPBITS(e,b,k);

      { decode distance of block to copy }
      NEEDBITS(bd,b,k);
      t := td;
      Inc(t,WORD(b) and md);
      e := t^.e;
      if (e  > 16) then
        Repeat
          if (e = 99) then
           begin
            Result := 1;
            exit;
           end;
          DUMPBITS(t^.b,b,k);
          Dec(e,16);
          NEEDBITS(e,b,k);
          t := t^.v.t;
          Inc(t,WORD(b) and mask_bits[e]);
          e := t^.e;
        Until ( e<=16 );
      DUMPBITS(t^.b,b,k);
      NEEDBITS(e,b,k);
      d := w - t^.v.n - (WORD(b) and mask_bits[e]);
      DUMPBITS(e,b,k);

      { do the copy }
      Repeat
      	d := d and (WSIZE-1);
      	if (d > w) then
        	e := WSIZE - d
        else
        	e := WSIZE - w;
        if (e > n) then
        	e := n;
        Dec(n,e);
        if ((w - d) >= e) then        { (this test assumes unsigned short_int comparison) }
         begin
          MoveMemory(@(slide^[w]), @(slide^[d]), e);
          Inc(w,e);
          Inc(d,e);
         end
        else                      { do it slow to avoid memcpy() overlap }
          Repeat
            slide^[w] := slide^[d];
            Inc(w);
            Inc(d);
            Dec(e);
          Until (e = 0);
        if (w >= WSIZE) then
         begin
          flushslide(w);
          w := 0;
         end;
      Until (n = 0);
     end;
   end; { while True }

   { restore the globals from the locals }
   wp := w;		{ restore global window pointer }
   bb := b;      { restore global bit buffer }
   bk := k;

   Result := 0;   { Done }
end;

{****************************************************************************}
function inflate_dynamic: short_int;
{ decompress an inflated type 2 (dynamic Huffman codes) block. }
var
	i: short_int;							{ temporary variables }
	j: WORD;
	l: WORD;											{ last length }
	m: WORD;											{ mask for bit lengths table }
	n: WORD;											{ number of lengths to get }
	tl: huftptr;									{ literal/length code table }
	td: huftptr;									{ distance code table }
	bl: short_int;										{ lookup bits for tl }
	bd: short_int;										{ lookup bits for td }
	nb: WORD;										{ number of bit length codes }
	nl: WORD;										{ number of literal/length codes }
	nd: WORD;										{ number of distance codes }
	ll: llarraytype;								{ literal/length and distance code lengths }
  llptr: llarrayptr;
	b: ULONG;										{ bit buffer }
	k: WORD;											{ number of bits in bit buffer }

begin
  tl := nil;
  td := nil;
  { make local bit buffer }
  b := bb;
  k := bk;
try
  { read in table lengths }
  NEEDBITS(5,b,k);
  nl := 257 + (b and $1f);      { number of literal/length codes }
  DUMPBITS(5,b,k);
  NEEDBITS(5,b,k);
  nd := 1 + (b and $1f);        { number of distance codes }
  DUMPBITS(5,b,k);
  NEEDBITS(4,b,k);
  nb := 4 + (b and $f);         { number of bit length codes }
  DUMPBITS(4,b,k);
  if (nl > 286) or (nd > 30) then
   begin
    Result := 1;                   { bad lengths }
    exit;
   end;

  { read in bit-length-code lengths }
  j := 0;
  while (j < nb) do
   begin
    NEEDBITS(3,b,k);
    ll[border[j]] := b and 7;
    DUMPBITS(3,b,k);
    Inc(j);
   end;
  while (j < 19) do
   begin
   	ll[border[j]] := 0;
     Inc(j);
   end;

  { build decoding table for trees--single level, 7 bit lookup }
  bl := 7;
  i := huft_build(ll, 19, 19, [0], [0], @tl, bl);
  if (i <> 0) then
   begin
    if (i = 1) then
      huft_free(tl);
    	 Result := i;                   { incomplete code set }
      exit;
   end;

  { read in literal and distance code lengths }
  n := nl + nd;
  m := mask_bits[bl];
  i := 0;
  l := 0;

  while (WORD(i) < n) do
   begin
    NEEDBITS(bl,b,k);
    td := tl;
    Inc(td,(b and m));
    j := td^.b;
    {j = (td = tl + ((unsigned short_int)b & m))->b;}
    DUMPBITS(j,b,k);
    j := td^.v.n;
    if (j < 16) then            	{ length of code in bits (0..15) }
     begin
      ll[i] := j;          			{ save last length in l }
      l := j;
      Inc(i);
     end
    else if (j = 16) then          { repeat last length 3 to 6 times }
     begin
      NEEDBITS(2,b,k);
      j := 3 + (b and 3);
      DUMPBITS(2,b,k);
      if ((i + j) > n) then
       begin
        Result := 1;
        exit;
       end;
      while (j>0) do
       begin
        ll[i] := l;
        Inc(i);
        Dec(j);
       end;
     end
    else if (j = 17) then           { 3 to 10 zero length codes }
     begin
      NEEDBITS(3,b,k);
      j := 3 + (b and 7);
      DUMPBITS(3,b,k);
      if ((i + j) > n) then
       begin
        Result := 1;
        exit;
       end;
      while (j>0) do
       begin
        ll[i] := 0;
        Inc(i);
        Dec(j);
       end;
      l := 0;
     end
    else                        { j == 18: 11 to 138 zero length codes }
     begin
      NEEDBITS(7,b,k);
      j := 11 + (b and $7f);
      DUMPBITS(7,b,k);
      if ((i + j) > n) then
       begin
        Result := 1;
        exit;
       end;
      while (j>0) do
       begin
        ll[i] := 0;
        Inc(i);
        Dec(j);
       end;
      l := 0;
     end;
   end;  { while (i < n) do }


  { free decoding table for trees }
  huft_free(tl);


  { restore the global bit buffer }
  bb := b;
  bk := k;


  { build the decoding tables for literal/length and distance codes }
  bl := lbits;
  i := huft_build(ll, nl, 257, cplens, cplext, @tl, bl);

  if (i <> 0) then
   begin
    if (i = 1) then
      huft_free(tl);
    Result := i;                   { incomplete code set }
    exit;
   end;
  bd := dbits;
  llptr := llarrayptr(@ll[nl]); { added typecast 5/18/98  2.13 }
  i := huft_build(llptr^, nd, 0, cpdist, cpdext, @td, bd);
  if (i <> 0) then
   begin
    if (i = 1) then
      huft_free(td);
    huft_free(tl);
    Result := i;                   { incomplete code set }
    exit;
   end;

  { decompress until an end-of-block code }
  if (inflate_codes(tl, td, bl, bd) <> 0) then
   begin
    Result := 1;
     huft_free(tl);
     huft_free(td);
    exit;
   end;

  huft_free(tl);
  huft_free(td);
  Result := 0;

except
  { free the decoding tables, return }
  on EUserCanceled do
   begin
     huft_free(tl);
     huft_free(td);
     raise;
   end
  else
   begin
     huft_free(tl);
     huft_free(td);
     Result := 1;
   end;
end;

end;

{****************************************************************************}
function inflate_stored: short_int;
var
	n:		WORD;           { number of bytes in block }
	w:		WORD;           { number of bytes in block }
	b:		ULONG;        { bit buffer }
	k:		WORD;           { number of bits in bit buffer }
  tmp:	WORD;
begin

  { make local copies of globals }
  b := bb;                       { initialize bit buffer }
  k := bk;
  w := wp;                       { initialize window position }


  { go to byte boundary }
  n := k and 7;
  DUMPBITS(n,b,k);


  { get the length and its complement }
  NEEDBITS(16,b,k);
  n := (WORD(b) and $ffff);
  DUMPBITS(16,b,k);
  NEEDBITS(16,b,k);
  tmp := WORD(((not b) and ($ffff)));
  if (n <> tmp) then
   begin
    Result := 1;
    exit;
   end;                   { error in compressed data }
  DUMPBITS(16,b,k);


  { read and output the compressed data }
  while (n <> 0) do
   begin
    NEEDBITS(8,b,k);
    slide^[w] := b;
    Inc(w);
    if (w = WSIZE) then
     begin
      flushslide(w);
      w := 0;
     end;
    DUMPBITS(8,b,k);
    Dec(n);
   end;


  { restore the globals from the locals }
  wp := w;                       { restore global window pointer }
  bb := b;                       { restore global bit buffer }
  bk := k;
  Result := 0;


end;

{****************************************************************************}
function inflate_fixed: short_int;
var
  i:			short_int;                	{ temporary variable }
  tl:		huftptr;      				{ literal/length code table }
  td:		huftptr;      				{ distance code table }
  bl:		short_int;               	{ lookup bits for tl }
  bd:		short_int;               	{ lookup bits for td }
  l:			array[0..287] of WORD;	{ length list for huft_build }
{ decompress an inflated type 1 (fixed Huffman codes) block.  We should
   either replace this with a custom decoder, or at least precompute the
   Huffman tables. }
begin
  tl := nil;
  td := nil;
  { set up literal table }
  for i := 0 to 143 do
    l[i] := 8;
  for I := 144 to 255 do
    l[i] := 9;
  for i := 256 to 279 do
    l[i] := 7;
  for i := 280 to 287 do          { make a complete, but wrong code set }
    l[i] := 8;
  bl := 7;
try
  i := huft_build(l, 288, 257, cplens, cplext, @tl, bl);
  if ( i <> 0) then
   begin
    Result := i;
    exit;
   end;

  { set up distance table }
  for i := 0 to 29 do      { make an incomplete code set }
    l[i] := 5;
  bd := 5;
  i := huft_build(l, 30, 0, cpdist, cpdext, @td, bd);
  if (i > 1) then
   begin
    huft_free(tl);
    Result := i;
    exit;
   end;

  { decompress until an end-of-block code }
  if (inflate_codes(tl, td, bl, bd) <> 0) then
   begin
    Result := 1;
     huft_free(tl);
     huft_free(td);
    exit;
   end;

  { free the decoding tables, return }
  huft_free(tl);
  huft_free(td);
  Result := 0;

except
  on EUserCanceled do
   begin
     huft_free(tl);
     huft_free(td);
     raise;
   end
  else
   begin
     huft_free(tl);
     huft_free(td);
     Result := 1;
   end;
end;
end;


{****************************************************************************}
function inflate_block(var e:short_int): short_int;
var
  t: WORD;           { block type }
  b: ULONG;     		{ bit buffer }
  k: WORD;  			{ number of bits in bit buffer }

begin
{e = last block flag }
{ decompress an inflated block }
{ make local bit buffer }
  b := bb;
  k := bk;

  { read in last block bit }
  NEEDBITS(1,b,k);
  e := b and 1;
  DUMPBITS(1,b,k);

  { read in block type }
  NEEDBITS(2,b,k);
  t := b and 3;
  DUMPBITS(2,b,k);

  { restore the global bit buffer }
  bb := b;
  bk := k;

try
  { inflate that block type }
  if (t = 2) then
  	Result := inflate_dynamic
  else if (t = 0) then
  	Result := inflate_stored
  else if (t = 1) then
  	Result := inflate_fixed
  else { bad block type }
  	Result := 2;
except
  on EUserCanceled do
     raise
  else
     Result := 1;
end;
end;

{*********************** main inflate procedure **********************}
var
  e: short_int;                	{ last block flag }
  h: WORD;       				{ maximum struct huft's malloc'ed }
begin
{ decompress an inflated entry }
  { initialize window, bit buffer }
  wp := 0;
  bk := 0;
  bb := 0;
  lbits := 9;
  dbits := 6;
  { decompress until the last block }
  h := 0;
  Repeat
    hufts := 0;
    if (inflate_block(e) <> 0) then
      exit;
    if (hufts > h) then
      h := hufts;
  Until(e <> 0);

  { flush out slide }
  flushslide(wp);
  xFlushOutput;
end;

{   Sat 04 Jul 1998   16:23:24  Supervisor
{ Modified ULONG to U_LONG because of ULONG
{ definition in C++ Builder.
}
{
{   Mon 27 Apr 1998   17:26:16  Supervisor
{ Modified to get rid of some memory leak
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人美女视频在线观看18| 日韩欧美第一区| 视频一区欧美日韩| 欧美一区二区视频在线观看2022| 免费一级欧美片在线观看| 日韩欧美激情在线| 国产成人午夜99999| 中文字幕精品一区| 色婷婷精品大视频在线蜜桃视频| 亚洲一区免费观看| 欧美一区二区视频在线观看| 国模娜娜一区二区三区| 国产精品欧美综合在线| 欧美在线观看视频在线| 免费观看30秒视频久久| 国产日韩欧美在线一区| 色婷婷精品久久二区二区蜜臂av| 日韩国产精品久久久| 久久久久久9999| 色av一区二区| 蜜桃av一区二区三区电影| 国产日韩欧美综合一区| 欧美在线播放高清精品| 久久99精品一区二区三区三区| 亚洲国产精品ⅴa在线观看| 91国偷自产一区二区开放时间| 免费欧美在线视频| 国产精品美女视频| 欧美精品99久久久**| 国产精品白丝av| 亚洲丶国产丶欧美一区二区三区| 精品成人一区二区三区| 91香蕉国产在线观看软件| 日韩电影在线一区二区| 国产精品日韩精品欧美在线| 欧美日韩黄色影视| 国产sm精品调教视频网站| 午夜久久久久久久久久一区二区| 久久精品在这里| 欧美精品日韩一本| 粉嫩一区二区三区性色av| 亚洲123区在线观看| 久久精品人人做| 欧美日韩一级二级| 暴力调教一区二区三区| 天堂资源在线中文精品| 国产精品你懂的在线欣赏| 欧美一区二区三区在线电影| 丰满放荡岳乱妇91ww| 日韩国产在线观看一区| 国产精品国产自产拍在线| 日韩一级黄色片| 色综合天天综合网天天狠天天| 黑人巨大精品欧美一区| 亚洲午夜av在线| 欧美国产1区2区| 日韩一区二区精品在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 韩国三级电影一区二区| 午夜精品福利一区二区三区av| 国产精品久久毛片a| 欧美大片顶级少妇| 欧美日韩一区二区不卡| 96av麻豆蜜桃一区二区| 国产美女一区二区三区| 全部av―极品视觉盛宴亚洲| 亚洲乱码国产乱码精品精小说| 久久久国产一区二区三区四区小说| 欧美探花视频资源| 床上的激情91.| 国内久久婷婷综合| 日本伊人午夜精品| 亚洲国产综合在线| 亚洲同性gay激情无套| 国产视频在线观看一区二区三区 | 久久夜色精品国产欧美乱极品| 欧美少妇一区二区| 91在线视频观看| 成人av网站免费观看| 久久99国产精品免费网站| 视频在线观看一区| 亚洲一区二区三区国产| 亚洲精品大片www| 国产精品毛片高清在线完整版 | 久久久亚洲欧洲日产国码αv| 在线成人午夜影院| 欧美日韩亚洲丝袜制服| 色欧美乱欧美15图片| 99久久免费精品高清特色大片| 国产91对白在线观看九色| 国内精品嫩模私拍在线| 麻豆免费精品视频| 人人狠狠综合久久亚洲| 日韩电影在线看| 日本欧美久久久久免费播放网| 亚洲国产aⅴ天堂久久| 亚洲自拍偷拍麻豆| 夜夜爽夜夜爽精品视频| 亚洲美腿欧美偷拍| 一级中文字幕一区二区| 亚洲美女免费在线| 一区二区三区 在线观看视频| 亚洲欧美日韩中文字幕一区二区三区| 国产精品久久久久aaaa樱花| 中文字幕一区免费在线观看| 欧美极品xxx| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美成人在线直播| 欧美xxxxx裸体时装秀| 日韩精品专区在线| 精品美女一区二区三区| 精品国产91久久久久久久妲己 | 久久99国产乱子伦精品免费| 精品一区二区三区免费视频| 美国av一区二区| 国产一区二区三区视频在线播放| 极品少妇xxxx精品少妇偷拍| 国产精品99久久久久| 成人免费视频视频| 91在线你懂得| 欧洲一区在线电影| 91精品啪在线观看国产60岁| 日韩欧美在线123| 久久婷婷久久一区二区三区| 国产日韩欧美高清| 亚洲三级在线免费| 亚洲一区二区五区| 青青草国产成人av片免费| 精品中文字幕一区二区小辣椒| 精品亚洲成a人| 丁香六月久久综合狠狠色| 99精品视频一区| 欧美视频一区二区三区四区| 制服丝袜日韩国产| 久久亚区不卡日本| 中文字幕一区二区三区不卡| 亚洲欧美色一区| 日本伊人色综合网| 国产成人av电影在线观看| 一本一道综合狠狠老| 7777精品伊人久久久大香线蕉超级流畅 | 欧美v日韩v国产v| 国产精品无圣光一区二区| 一区二区三区毛片| 奇米精品一区二区三区在线观看一 | 久久久久久久久久久久久女国产乱| 中文字幕高清不卡| 亚洲综合一区二区精品导航| 美女国产一区二区| www.日韩大片| 欧美日韩国产乱码电影| 久久香蕉国产线看观看99| 亚洲视频免费观看| 麻豆精品在线播放| 9l国产精品久久久久麻豆| 欧美日韩高清在线| 久久久久9999亚洲精品| 一区二区三区视频在线观看| 奇米亚洲午夜久久精品| 不卡免费追剧大全电视剧网站| 欧美四级电影在线观看| 久久精品免费在线观看| 亚洲午夜久久久久中文字幕久| 九色|91porny| 欧美最猛黑人xxxxx猛交| 精品毛片乱码1区2区3区| 尤物av一区二区| 国产一区二区三区在线观看精品 | 粉嫩蜜臀av国产精品网站| 欧美日韩一区二区欧美激情| 国产日韩欧美精品一区| 性做久久久久久久久| 国产成人鲁色资源国产91色综 | 国产一区高清在线| 欧美午夜不卡视频| 国产女人水真多18毛片18精品视频| 性做久久久久久久免费看| 不卡区在线中文字幕| 日韩欧美区一区二| 一区二区日韩av| 国产精品综合在线视频| 777奇米成人网| 伊人色综合久久天天| 国产主播一区二区三区| 欧美日韩国产美女| 亚洲日本va在线观看| 国产一区二三区| 6080yy午夜一二三区久久| 亚洲少妇屁股交4| 国产精品亚洲专一区二区三区| 欧美剧情片在线观看| 亚洲欧洲精品一区二区三区不卡| 久久99久国产精品黄毛片色诱| 欧美性猛片aaaaaaa做受| 中文字幕av资源一区| 久久精品免费观看| 欧美日韩视频专区在线播放| 日韩一区在线播放| 国产成人午夜99999| 精品国产乱码久久久久久久|