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

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

?? kpshuge.~pas

?? delphi 的壓縮工具代碼
?? ~PAS
字號:
unit kpSHuge;

{$P-} { turn off open parameters }
{$Q-} { turn off overflow checking }
{$R-} { turn off range checking }
{$B-} { turn off complete boolean eval } { 12/24/98  2.17 }

interface

 {$IFNDEF WIN32}
 USES WinTypes, WinProcs;
 {$ENDIF}

  procedure HugeInc(var HugePtr: Pointer; Amount: LongInt);
  procedure HugeDec(var HugePtr: Pointer; Amount: LongInt);
  function  HugeOffset(HugePtr: Pointer; Amount: LongInt): Pointer;

{$ifdef WIN32}
  { The Win3.1 API defines hmemcpy to copy memory that might span
    a segment boundary. Win32 does not define it, so add it, for portability. }
  procedure HMemCpy(DstPtr, SrcPtr: Pointer; Amount: LongInt);
{$else}
  { The Win32 API defines these functions, so they are needed only for Win3.1. }
  procedure ZeroMemory(Ptr: Pointer; Length: LongInt);
  procedure FillMemory(Ptr: Pointer; Length: LongInt; Fill: Byte);

 type
  bytearrayptr = ^bytearraytype;
  wordarrayptr = ^wordarraytype;
  bytearraytype = array[0..0] of Byte;
  wordarraytype = array[0..0] of Word;

  TkpHugeByteArray = class
  private
    FMemBlock: THandle;
    FSize: Longint;
    FLocked: Boolean;
    FAPtr: PByte;
    bytearray: bytearrayptr;

    procedure SetSize(NewSize: Longint);
    function GetItem(Index: Longint): Byte;
    procedure SetItem(Index: Longint; Value: Byte);
    procedure CheckSize(Value: Longint);
  protected
    function GetMaxSize: Longint; virtual;
    procedure UnlockBlock; virtual;
    procedure SetLock(Value: Boolean); virtual;
    function GetAddrOf(Index: LongInt): PByte; virtual;
  public
    constructor Create(ArraySize: Longint); virtual;
    destructor Destroy; override;
    property Size: Longint read FSize write SetSize;
    property Locked: Boolean read FLocked write SetLock;
    property AddrOf[Index: Longint]: PByte read GetAddrOf;
    property Items[Index: Longint]: Byte read GetItem write SetItem; default;
  end;

  TkpHugeWordArray = class
  private
    FMemBlock: THandle;
    FSize: Longint;
    FLocked: Boolean;
    FAPtr: PWord;
    wordarray: wordarrayptr;

    procedure SetSize(NewSize: Longint);
    function GetItem(Index: Longint): Word;
    procedure SetItem(Index: Longint; Value: Word);
    procedure CheckSize(Value: Longint);
  protected
    function GetMaxSize: Longint; virtual;
    procedure UnlockBlock; virtual;
    procedure SetLock(Value: Boolean); virtual;
    function GetAddrOf(Index: LongInt): PWord; virtual;
  public
    constructor Create(ArraySize: Longint); virtual;
    destructor Destroy; override;
    property Size: Longint read FSize write SetSize;
    property Locked: Boolean read FLocked write SetLock;
    property AddrOf[Index: Longint]: PWord read GetAddrOf;
    property Items[Index: Longint]: Word read GetItem write SetItem; default;
  end;


{$endif}

implementation

{$ifdef WIN32}
procedure HugeInc(var HugePtr: Pointer; Amount: LongInt);
begin
  HugePtr := PChar(HugePtr) + Amount;
end;

procedure HugeDec(var HugePtr: Pointer; Amount: LongInt);
begin
  HugePtr := PChar(HugePtr) - Amount;
end;

function  HugeOffset(HugePtr: Pointer; Amount: LongInt): Pointer;
begin
  Result := PChar(HugePtr) + Amount;
end;

{ This is not defined in Delphi 2.0. }
procedure HMemCpy(DstPtr, SrcPtr: Pointer; Amount: LongInt);
begin
  Move(SrcPtr^, DstPtr^, Amount);
end;
{$else}

uses SysUtils;

const
  MemAllocFlags: word = gmem_Moveable or gmem_Discardable;

procedure HugeShift; far; external 'KERNEL' index 113;

procedure HugeInc(var HugePtr: Pointer; Amount: LongInt); assembler;
asm
  mov ax, Amount.Word[0]    { Store Amount in DX:AX. }
  mov dx, Amount.Word[2]
  les bx, HugePtr           { Get the reference to HugePtr. }
  add ax, es:[bx]           { Add the offset parts. }
  adc dx, 0                 { Propagate carry to the high word of Amount. }
  mov cx, Offset HugeShift
  shl dx, cl                { Shift high word of Amount for segment. }
  add es:[bx+2], dx         { Increment the segment of HugePtr. }
  mov es:[bx], ax
end;

{ Decrement a huge pointer. }
procedure HugeDec(var HugePtr: Pointer; Amount: LongInt); assembler;
asm
  les bx, HugePtr         { Store HugePtr ptr in es:[bx] }
  mov ax, es:[bx]
  sub ax, Amount.Word[0]  { Subtract the offset parts }
  mov dx, Amount.Word[2]
  adc dx, 0               { Propagate carry to the high word of Amount }
  mov cx, OFFSET HugeShift
  shl dx, cl              { Shift high word of Amount for segment }
  sub es:[bx+2], dx
  mov es:[bx], ax
end;

{ Add an offset to a huge pointer and return the result. }
function HugeOffset(HugePtr: Pointer; Amount: LongInt): Pointer; assembler;
asm
  mov ax, Amount.Word[0]  { Store Amount in DX:AX }
  mov dx, Amount.Word[2]
  add ax, HugePtr.Word[0] { Add the offset parts }
  adc dx, 0               { Propagate carry to the high word of Amount }
  mov cx, OFFSET HugeShift
  shl dx, cl              { Shift high word of Amount for segment }
  add dx, HugePtr.Word[2] { Increment the segment of HugePtr }
end;

procedure FillWords(DstPtr: Pointer; Size: Word; Fill: Word); assembler;
asm
  mov ax, Fill            { Get the fill word. }
  les di, DstPtr          { Get the pointer. }
  mov cx, Size.Word[0]    { Get the size. }
  cld                     { Clear the direction flag. }
  rep stosw               { Fill the memory. }
end;

procedure FillMemory(Ptr: Pointer; Length: LongInt; Fill: Byte);
var
  NBytes: Cardinal;
  NWords: Cardinal;
  FillWord: Word;
begin
  WordRec(FillWord).Hi := Fill;
  WordRec(FillWord).Lo := Fill;
  while Length > 1 do
  begin
    { Determine the number of bytes remaining in the segment. }
    if Ofs(Ptr^) = 0 then
      NBytes := $FFFE
    else
      NBytes := $10000 - Ofs(Ptr^);
    if NBytes > Length then
      NBytes := Length;
    { Filling by words is faster than filling by bytes. }
    NWords := NBytes div 2;
    FillWords(Ptr, NWords, FillWord);
    NBytes := NWords * 2;
    Dec(Length, NBytes);
    Ptr := HugeOffset(Ptr, NBytes);
  end;
  { If the fill size is odd, then fill the remaining byte. }
  if Length > 0 then
    PByte(Ptr)^ := Fill;
end;

procedure ZeroMemory(Ptr: Pointer; Length: LongInt);
begin
  FillMemory(Ptr, Length, 0);
end;

{********************** Huge Byte ***************************}
constructor TkpHugeByteArray.Create(ArraySize: Longint);
begin
  FLocked := False;
  if ArraySize > GetMaxSize then
    ArraySize := GetMaxSize;
  FMemBlock := GlobalAlloc(MemAllocFlags, ArraySize * SizeOf(Byte));
  if FMemBlock <> 0 then
    FSize := ArraySize
  else
    raise EOutOfMemory.Create('Couldn''t allocate memory block.');
  FAPtr := GlobalLock(FMemBlock);
  FLocked := True;
  bytearray := bytearrayptr(FAPtr);
end;

destructor TkpHugeByteArray.Destroy;
begin
  inherited Destroy;
  UnlockBlock;
  SetLock(False);
  if GlobalFree(FMemBlock) <> 0 then
    raise EInvalidPointer.Create('Couln''t free memory block');
end;

function TkpHugeByteArray.GetMaxSize: Longint;
begin
  Result := MaxLongint;
end;

procedure TkpHugeByteArray.SetSize(NewSize: Longint);
begin
  if NewSize <> FSize then begin
    if NewSize > GetMaxSize then
      NewSize := GetMaxSize;
    if GlobalReAlloc(FMemBlock, NewSize * SizeOf(Byte), MemAllocFlags) <> 0
        then
      FSize := NewSize
    else
      raise EOutOfMemory.Create('Couln''t realloc memory block');
  end;
end;

procedure TkpHugeByteArray.SetLock(Value: Boolean);
begin
  exit;
  if FLocked <> Value then begin
    if Value then begin
      GlobalLock(FMemBlock);
      FLocked := True;
    end
    else begin
      FLocked := False;
      UnlockBlock;
    end;
  end;
end;

function TkpHugeByteArray.GetAddrOf(Index: Longint): PByte;
begin
  Result := @bytearray^[Index];
end;

procedure TkpHugeByteArray.UnlockBlock;
begin
  if not FLocked then GlobalUnlock(FMemBlock);
end;

procedure TkpHugeByteArray.CheckSize(Value: Longint);
begin
  if (Value > FSize) or (Value < 0) then
    raise ERangeError.Create('Index not within established range.');
end;

procedure TkpHugeByteArray.SetItem(Index: Longint; Value: Byte);
begin
  bytearray^[Index] := Value;
end;

function TkpHugeByteArray.GetItem(Index: Longint): Byte;
begin
  Result := bytearray^[Index];
end;

{********************** Huge Word ***************************}
constructor TkpHugeWordArray.Create(ArraySize: Longint);
begin
  FLocked := False;
  if ArraySize > GetMaxSize then
    ArraySize := GetMaxSize;
  FMemBlock := GlobalAlloc(MemAllocFlags, ArraySize * SizeOf(Word));
  if FMemBlock <> 0 then
    FSize := ArraySize
  else
    raise EOutOfMemory.Create('Couldn''t allocate memory block.');
  FAPtr := GlobalLock(FMemBlock);
  FLocked := True;
  wordarray := wordarrayptr(FAPtr);
end;

destructor TkpHugeWordArray.Destroy;
begin
  inherited Destroy;
  UnlockBlock;
  SetLock(False);
  if GlobalFree(FMemBlock) <> 0 then
    raise EInvalidPointer.Create('Couln''t free memory block');
end;

function TkpHugeWordArray.GetMaxSize: Longint;
begin
  Result := MaxLongint div SizeOf(Word);
end;

procedure TkpHugeWordArray.SetSize(NewSize: Longint);
begin
  if NewSize <> FSize then begin
    if NewSize > GetMaxSize then
      NewSize := GetMaxSize;
    if GlobalReAlloc(FMemBlock, NewSize * SizeOf(Word), MemAllocFlags) <> 0
        then
      FSize := NewSize
    else
      raise EOutOfMemory.Create('Couln''t realloc memory block');
  end;
end;

procedure TkpHugeWordArray.SetLock(Value: Boolean);
begin
  if FLocked <> Value then begin
    if Value then begin
      GlobalLock(FMemBlock);
      FLocked := True;
    end
    else begin
      FLocked := False;
      UnlockBlock;
    end;
  end;
end;

function TkpHugeWordArray.GetAddrOf(Index: Longint): PWord;
begin
  Result := @wordarray^[Index];
end;

procedure TkpHugeWordArray.UnlockBlock;
begin
  if not FLocked then GlobalUnlock(FMemBlock);
end;

procedure TkpHugeWordArray.CheckSize(Value: Longint);
begin
  if (Value > FSize) or (Value < 0) then
    raise ERangeError.Create('Index not within established range.');
end;

procedure TkpHugeWordArray.SetItem(Index: Longint; Value: Word);
begin
  wordarray^[Index] := Value;
end;

function TkpHugeWordArray.GetItem(Index: Longint): Word;
begin
  Result := wordarray^[Index];
end;



{$endif}

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久久网| 亚洲一二三区视频在线观看| 亚洲人成影院在线观看| 视频一区二区三区中文字幕| 国产一区二区精品久久99| 在线视频你懂得一区| 久久久.com| 日日骚欧美日韩| 色婷婷久久久亚洲一区二区三区| 日韩欧美色综合网站| 中文字幕在线免费不卡| 国产在线视频一区二区三区| 精品视频在线免费| 中文字幕亚洲成人| 国产精品乡下勾搭老头1| 欧美精选一区二区| 亚洲精品久久久蜜桃| 国产99一区视频免费| 日韩三级视频在线看| 午夜精品福利一区二区三区av| 岛国av在线一区| 26uuu另类欧美| 免费高清在线一区| 欧美日韩五月天| 一区二区三区产品免费精品久久75| 国产美女久久久久| 精品国产区一区| 日韩av在线发布| 777a∨成人精品桃花网| 亚洲综合丝袜美腿| 色素色在线综合| 一区av在线播放| 99久久99久久精品免费观看| 中文幕一区二区三区久久蜜桃| 激情文学综合插| 精品免费一区二区三区| 秋霞电影一区二区| 日韩欧美一级在线播放| 五月激情六月综合| 91精品欧美久久久久久动漫| 日韩制服丝袜先锋影音| 欧美电影在哪看比较好| 日本午夜精品一区二区三区电影| 欧美精品高清视频| 日本vs亚洲vs韩国一区三区二区| 91精品麻豆日日躁夜夜躁| 午夜电影久久久| 日韩精品资源二区在线| 免费在线一区观看| 2023国产精品| av电影在线观看一区| 国产精品二三区| 在线观看亚洲精品| 五月婷婷另类国产| 精品国产一区二区三区不卡 | 国产精品白丝jk黑袜喷水| 久久麻豆一区二区| av一二三不卡影片| 一区二区三区日韩在线观看| 欧美日韩一区二区三区四区五区| 五月激情综合网| 久久青草国产手机看片福利盒子| 国产成人欧美日韩在线电影| 中文字幕中文字幕在线一区| 91成人看片片| 激情综合五月婷婷| 国产精品免费视频观看| 色婷婷久久一区二区三区麻豆| 爽好久久久欧美精品| 久久精品夜色噜噜亚洲a∨| 成人va在线观看| 午夜国产精品影院在线观看| 欧美mv日韩mv国产网站app| 成人高清在线视频| 日日噜噜夜夜狠狠视频欧美人| 精品国产免费久久| 成人aa视频在线观看| 婷婷综合久久一区二区三区| 久久毛片高清国产| 欧美亚洲尤物久久| 国产福利一区二区| 亚洲sss视频在线视频| 国产欧美综合色| 欧美精品日韩一本| caoporm超碰国产精品| 日韩精品成人一区二区在线| 国产女人aaa级久久久级| 欧美色国产精品| 国产a精品视频| 日本在线观看不卡视频| 中文字幕不卡的av| 91麻豆精品国产91久久久更新时间 | 国产日产欧美一区二区视频| 色噜噜夜夜夜综合网| 国产一区二区在线看| 天使萌一区二区三区免费观看| 久久综合久久综合久久| 欧美三区在线观看| 91麻豆swag| 高清不卡一二三区| 精品一二三四在线| 男人操女人的视频在线观看欧美| 亚洲男人的天堂在线aⅴ视频| 国产夜色精品一区二区av| 欧美剧情电影在线观看完整版免费励志电影 | 欧美天堂一区二区三区| 国产乱码精品一区二区三区忘忧草| 亚洲在线观看免费| 国产精品视频在线看| 精品99999| 日韩午夜精品电影| 欧美肥妇free| 欧美老年两性高潮| 欧美日韩一区二区在线观看| 91久久线看在观草草青青| 成人做爰69片免费看网站| 韩国精品在线观看| 麻豆国产91在线播放| 婷婷久久综合九色国产成人 | 成人黄色777网| 国产成人综合视频| 国产精品一区二区免费不卡 | 91麻豆福利精品推荐| 国产91精品久久久久久久网曝门| 蜜桃久久av一区| 久久99精品一区二区三区三区| 奇米影视7777精品一区二区| 五月激情丁香一区二区三区| 亚洲成人免费看| 亚洲一区二区三区四区中文字幕| 亚洲最新在线观看| 亚洲电影在线免费观看| 亚洲18色成人| 蜜芽一区二区三区| 男女男精品视频| 经典三级视频一区| 国产激情91久久精品导航| 国产99一区视频免费| av一区二区三区黑人| 91国在线观看| 91超碰这里只有精品国产| 777奇米四色成人影色区| 欧美一卡在线观看| 久久久亚洲高清| 国产精品三级在线观看| 亚洲欧美一区二区三区极速播放 | 亚洲在线视频网站| 无吗不卡中文字幕| 看电视剧不卡顿的网站| 国产在线精品免费| 99国产精品久久久久| 日本道精品一区二区三区| 欧美二区三区的天堂| 久久在线观看免费| 亚洲天堂精品视频| 亚洲国产精品尤物yw在线观看| 日韩不卡一区二区三区| 狠狠色丁香婷婷综合| 99久久久精品免费观看国产蜜| 欧美羞羞免费网站| 精品理论电影在线观看| 亚洲欧洲一区二区在线播放| 亚洲成人av一区| 国产在线视频精品一区| 91麻豆福利精品推荐| 日韩欧美中文字幕精品| 国产精品嫩草99a| 天天av天天翘天天综合网色鬼国产| 蜜桃精品视频在线观看| 成人h动漫精品一区二区| 欧美高清性hdvideosex| 国产欧美日韩在线| 婷婷久久综合九色综合绿巨人 | 亚洲美女一区二区三区| 青青草国产成人99久久| 不卡av电影在线播放| 制服丝袜成人动漫| 欧美激情综合五月色丁香小说| 亚洲第一激情av| 国产91在线看| 精品日韩欧美在线| 亚洲精品免费在线观看| 久久国产精品一区二区| www.欧美.com| 久久色在线观看| 日韩精品电影在线| caoporn国产精品| 久久久精品2019中文字幕之3| 亚洲va欧美va天堂v国产综合| 成人激情午夜影院| 精品91自产拍在线观看一区| 亚洲亚洲精品在线观看| av网站一区二区三区| 久久久久久影视| 免费xxxx性欧美18vr| 欧洲生活片亚洲生活在线观看| 国产欧美久久久精品影院| 日韩精品电影在线观看| 欧美亚男人的天堂| 一区二区日韩av|