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

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

?? vs_compress.pas

?? KSDev.VirtualSream.v1.01.rar 虛擬文件系統,
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
{ 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);
type
  EZlibError = class(Exception);
  ECompressionError = class(EZlibError);
  EDecompressionError = class(EZlibError);


implementation {===============================================================}





{ZKsUtil}
{$IFDEF CALLDOS}
{ reduce your application memory footprint with $M before using this }
function dosAlloc (Size : Longint) : Pointer;
var
  regs: TRegisters;
begin
  regs.bx := (Size + 15) div 16; { number of 16-bytes-paragraphs }
  regs.ah := $48;                { Allocate memory block }
  msdos(regs);
  if regs.Flags and FCarry <> 0 then
    DosAlloc := NIL
  else
    DosAlloc := Ptr(regs.ax, 0);
end;


function dosFree(P : pointer) : boolean;
var
  regs: TRegisters;
begin
  dosFree := FALSE;
  regs.bx := Seg(P^);             { segment }
  if Ofs(P) <> 0 then
    exit;
  regs.ah := $49;                { Free memory block }
  msdos(regs);
  dosFree := (regs.Flags and FCarry = 0);
end;
{$ENDIF}

type
  LH = record
    L, H : word;
  end;

{$IFDEF HugeMem}
  {$define HEAP_LIST}
{$endif}

{$IFDEF HEAP_LIST} {--- to avoid Mark and Release --- }
const
  MaxAllocEntries = 50;
type
  TMemRec = record
    orgvalue,
    value : pointer;
    size: longint;
  end;
const
  allocatedCount : 0..MaxAllocEntries = 0;
var
  allocatedList : array[0..MaxAllocEntries-1] of TMemRec;

 function NewAllocation(ptr0, ptr : pointer; memsize : longint) : boolean;
 begin
   if (allocatedCount < MaxAllocEntries) and (ptr0 <> NIL) then
   begin
     with allocatedList[allocatedCount] do
     begin
       orgvalue := ptr0;
       value := ptr;
       size := memsize;
     end;
     Inc(allocatedCount);  { we don't check for duplicate }
     NewAllocation := TRUE;
   end
   else
     NewAllocation := FALSE;
 end;
{$ENDIF}

{$IFDEF HugeMem}

{ The code below is extremely version specific to the TP 6/7 heap manager!!}
type
  PFreeRec = ^TFreeRec;
  TFreeRec = record
    next: PFreeRec;
    size: Pointer;
  end;
type
  HugePtr = voidpf;


 procedure IncPtr(var p:pointer;count:word);
 { Increments pointer }
 begin
   inc(LH(p).L,count);
   if LH(p).L < count then
     inc(LH(p).H,SelectorInc);  { $1000 }
 end;

 procedure DecPtr(var p:pointer;count:word);
 { decrements pointer }
 begin
   if count > LH(p).L then
     dec(LH(p).H,SelectorInc);
   dec(LH(p).L,Count);
 end;

 procedure IncPtrLong(var p:pointer;count:longint);
 { Increments pointer; assumes count > 0 }
 begin
   inc(LH(p).H,SelectorInc*LH(count).H);
   inc(LH(p).L,LH(Count).L);
   if LH(p).L < LH(count).L then
     inc(LH(p).H,SelectorInc);
 end;

 procedure DecPtrLong(var p:pointer;count:longint);
 { Decrements pointer; assumes count > 0 }
 begin
   if LH(count).L > LH(p).L then
     dec(LH(p).H,SelectorInc);
   dec(LH(p).L,LH(Count).L);
   dec(LH(p).H,SelectorInc*LH(Count).H);
 end;
 { The next section is for real mode only }

function Normalized(p : pointer)  : pointer;
var
  count : word;
begin
  count := LH(p).L and $FFF0;
  Normalized := Ptr(LH(p).H + (count shr 4), LH(p).L and $F);
end;

procedure FreeHuge(var p:HugePtr; size : longint);
const
  blocksize = $FFF0;
var
  block : word;
begin
  while size > 0 do
  begin
    { block := minimum(size, blocksize); }
    if size > blocksize then
      block := blocksize
    else
      block := size;

    dec(size,block);
    freemem(p,block);
    IncPtr(p,block);    { we may get ptr($xxxx, $fff8) and 31 bytes left }
    p := Normalized(p); { to free, so we must normalize }
  end;
end;

function FreeMemHuge(ptr : pointer) : boolean;
var
  i : integer; { -1..MaxAllocEntries }
begin
  FreeMemHuge := FALSE;
  i := allocatedCount - 1;
  while (i >= 0) do
  begin
    if (ptr = allocatedList[i].value) then
    begin
      with allocatedList[i] do
        FreeHuge(orgvalue, size);

      Move(allocatedList[i+1], allocatedList[i],
           SizeOf(TMemRec)*(allocatedCount - 1 - i));
      Dec(allocatedCount);
      FreeMemHuge := TRUE;
      break;
    end;
    Dec(i);
  end;
end;

procedure GetMemHuge(var p:HugePtr;memsize:Longint);
const
  blocksize = $FFF0;
var
  size : longint;
  prev,free : PFreeRec;
  save,temp : pointer;
  block : word;
begin
  p := NIL;
  { Handle the easy cases first }
  if memsize > maxavail then
    exit
  else
    if memsize <= blocksize then
    begin
      getmem(p, memsize);
      if not NewAllocation(p, p, memsize) then
      begin
        FreeMem(p, memsize);
        p := NIL;
      end;
    end
    else
    begin
      size := memsize + 15;

      { Find the block that has enough space }
      prev := PFreeRec(@freeList);
      free := prev^.next;
      while (free <> heapptr) and (ptr2int(free^.size) < size) do
      begin
        prev := free;
        free := prev^.next;
      end;

      { Now free points to a region with enough space; make it the first one and
        multiple allocations will be contiguous. }

      save := freelist;
      freelist := free;
      { In TP 6, this works; check against other heap managers }
      while size > 0 do
      begin
        { block := minimum(size, blocksize); }
        if size > blocksize then
          block := blocksize
        else
          block := size;
        dec(size,block);
        getmem(temp,block);
      end;

      { We've got what we want now; just sort things out and restore the
        free list to normal }

      p := free;
      if prev^.next <> freelist then
      begin
        prev^.next := freelist;
        freelist := save;
      end;

      if (p <> NIL) then
      begin
        { return pointer with 0 offset }
        temp := p;
        if Ofs(p^)<>0 Then
          p := Ptr(Seg(p^)+1,0);  { hack }
        if not NewAllocation(temp, p, memsize + 15) then
        begin
          FreeHuge(temp, size);
          p := NIL;
        end;
      end;

    end;
end;

{$ENDIF}

procedure zmemcpy(destp : pBytef; sourcep : pBytef; len : uInt);
begin
  Move(sourcep^, destp^, len);
end;

function zmemcmp(s1p, s2p : pBytef; len : uInt) : int;
var
  j : uInt;
  source,
  dest : pBytef;
begin
  source := s1p;
  dest := s2p;
  for j := 0 to pred(len) do
  begin
    if (source^ <> dest^) then
    begin
      zmemcmp := 2*Ord(source^ > dest^)-1;
      exit;
    end;
    Inc(source);
    Inc(dest);
  end;
  zmemcmp := 0;
end;

procedure zmemzero(destp : pBytef; len : uInt);
begin
  FillChar(destp^, len, 0);
end;

procedure zcfree(opaque : voidpf; ptr : voidpf);
{$ifdef Delphi16}
var
  Handle : THand

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
福利一区在线观看| av欧美精品.com| 亚洲欧美中日韩| 国产亚洲人成网站| 久久精品视频在线免费观看| 欧美精选一区二区| 日韩视频一区二区三区 | 色婷婷久久一区二区三区麻豆| 日本韩国视频一区二区| 国产成人免费在线观看不卡| 国精产品一区一区三区mba桃花| 欧美一区二区三区公司| 欧美xxxx老人做受| 日韩欧美高清在线| 亚洲国产精品精华液ab| 国产精品国产三级国产a| 亚洲欧美视频在线观看视频| 国产乱国产乱300精品| 日韩欧美国产不卡| 国产日产亚洲精品系列| 欧美伦理影视网| 国产乱色国产精品免费视频| 国产精品66部| 色婷婷激情一区二区三区| 欧美色图在线观看| 欧美大片在线观看一区二区| 2020国产精品久久精品美国| 国产精品久久久久7777按摩 | 亚洲成人激情av| 日韩二区在线观看| 国产一区在线精品| 色婷婷狠狠综合| 日韩一区二区三区av| 国产日韩一级二级三级| 国产精品亲子乱子伦xxxx裸| 成人三级伦理片| 欧美日韩一区久久| 欧美韩国一区二区| 强制捆绑调教一区二区| 97久久精品人人澡人人爽| 日本精品一区二区三区四区的功能| 日韩高清不卡在线| 成人一区在线看| 欧美一区二区三区视频在线观看| 91在线视频播放| 亚洲精品一线二线三线无人区| 国产.欧美.日韩| 欧美日高清视频| 国产精品不卡视频| 国产一区二区久久| 日韩一区二区精品| 亚洲最新视频在线播放| 风间由美中文字幕在线看视频国产欧美| 亚洲午夜在线观看视频在线| 亚洲三级免费观看| 欧美日韩在线播放三区四区| 青青草国产精品97视觉盛宴| 91久久精品国产91性色tv | 激情偷乱视频一区二区三区| 国产精品资源网站| 91精品国产品国语在线不卡| 亚洲精品视频一区二区| 国产精品99久久久| 久久久91精品国产一区二区三区| 久久综合久久综合亚洲| 性欧美疯狂xxxxbbbb| 91在线观看高清| 中文字幕一区二区三区色视频| 最新国产の精品合集bt伙计| 精品系列免费在线观看| 欧美精品日日鲁夜夜添| 亚洲bt欧美bt精品| 欧美成人video| 国产成人三级在线观看| 色综合激情五月| 国产日韩欧美高清在线| 久久精品99久久久| 日韩免费电影一区| 蜜桃视频在线观看一区二区| 日韩视频永久免费| 精品亚洲欧美一区| 国产欧美综合在线| 粗大黑人巨茎大战欧美成人| 欧美国产视频在线| 97国产一区二区| 亚洲一区二区三区在线| 91麻豆精品国产91久久久 | 亚洲美女区一区| 99re热视频这里只精品| 一个色妞综合视频在线观看| 在线免费视频一区二区| 亚洲国产一区在线观看| 成人污视频在线观看| 国产一区二区三区国产| 国产人成一区二区三区影院| 国产不卡免费视频| 亚洲综合色在线| 91精品国产黑色紧身裤美女| 精品亚洲国内自在自线福利| 国产精品污网站| 欧美在线观看你懂的| 麻豆精品蜜桃视频网站| 国产三区在线成人av| 在线免费av一区| 精品一区二区日韩| 亚洲欧洲成人自拍| 日韩三级高清在线| 99riav久久精品riav| 日本va欧美va欧美va精品| 国产日韩欧美不卡在线| 欧美日韩一区国产| 国产91精品久久久久久久网曝门| 欧洲国内综合视频| 免费观看一级特黄欧美大片| 欧美精品一区二区三区蜜臀| 欧美国产日本韩| 成人精品国产一区二区4080| 亚洲黄色小视频| 日韩视频免费直播| 91麻豆视频网站| 久久精品72免费观看| 亚洲乱码国产乱码精品精98午夜 | 蜜臀av在线播放一区二区三区| 91丨九色丨黑人外教| 美女精品自拍一二三四| 一区二区三区不卡视频| 国产欧美一区二区三区沐欲| 色www精品视频在线观看| 国产米奇在线777精品观看| 首页国产欧美久久| 亚洲三级在线播放| 国产精品免费丝袜| 国产色91在线| 欧美精品一区二区三区蜜桃| 日韩一区二区三区免费观看| 色一情一乱一乱一91av| 高清av一区二区| 色综合中文字幕国产| 亚洲一区国产视频| 亚洲少妇30p| 久久久精品欧美丰满| 91麻豆精品国产综合久久久久久| 夜夜嗨av一区二区三区中文字幕| av电影在线不卡| 国产精品99久久久久久久女警| 337p粉嫩大胆噜噜噜噜噜91av| 精品一区精品二区高清| 婷婷亚洲久悠悠色悠在线播放 | av在线综合网| 国产露脸91国语对白| 狠狠色狠狠色综合系列| 美女一区二区三区| 日韩福利电影在线| 日本不卡一二三| 青青草国产精品亚洲专区无| 日韩av一级片| 麻豆成人久久精品二区三区红 | 亚洲婷婷综合色高清在线| 国产日韩欧美激情| 国产精品久久久99| 中文字幕不卡一区| 中文字幕一区在线观看| 亚洲精品免费看| 亚洲在线观看免费| 日韩精品电影在线观看| 免费观看在线综合| 国产黄色精品网站| 9l国产精品久久久久麻豆| 色噜噜狠狠成人中文综合 | 国产欧美一二三区| 18成人在线视频| 夜夜操天天操亚洲| 日韩黄色片在线观看| 国产中文字幕精品| 99久久精品久久久久久清纯| 99re在线视频这里只有精品| 在线观看视频欧美| 日韩一卡二卡三卡国产欧美| 国产成人综合网| 国产欧美日韩亚州综合| 成人欧美一区二区三区视频网页| 精品在线免费视频| 国产成人精品免费视频网站| 日韩欧美三级在线| 欧美探花视频资源| 欧美成人官网二区| 精品精品欲导航| 亚洲日穴在线视频| 日韩不卡手机在线v区| 国产成人精品1024| 7777精品久久久大香线蕉| 国产亚洲人成网站| 天涯成人国产亚洲精品一区av| 国产无遮挡一区二区三区毛片日本| 欧美日韩一区三区四区| 久久婷婷国产综合精品青草| **性色生活片久久毛片| 日本欧美一区二区在线观看| 国产麻豆精品在线| 欧美精品 国产精品|