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

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

?? dcutbl.pas

?? 反匯編delphi的.dcu文件至匯編代碼的工具的所有源代碼, 用delphi/pascal實現, 反向工程borland delphi寫的程序必備
?? PAS
字號:
unit DCUTbl;
(*
The table of used units module of the DCU32INT utility by Alexei Hmelnov.
It is used to obtain the necessary imported declarations. If the imported unit
was not found, the program will still work, but, for example, will show
the corresponding constant value as a HEX dump.
----------------------------------------------------------------------------
E-Mail: alex@icc.ru
http://hmelnov.icc.ru/DCU/
----------------------------------------------------------------------------

See the file "readme.txt" for more details.

------------------------------------------------------------------------
                             IMPORTANT NOTE:
This software is provided 'as-is', without any expressed or implied warranty.
In no event will the author be held liable for any damages arising from the
use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented, you must not
   claim that you wrote the original software.
2. Altered source versions must be plainly marked as such, and must not
   be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
   distribution.
*)
interface

uses
  SysUtils,Classes,DCU32,DCP;

const
  PathSep = {$IFNDEF LINUX}';'{$ELSE}':'{$ENDIF};
  DirSep = {$IFNDEF LINUX}'\'{$ELSE}'/'{$ENDIF};
  PkgSep = '@';

var
  DCUPath: String='';
  PASPath: String='*' {Let only presence of -P signals, that source lines are required};

function GetDCUByName(FName,FExt: String; VerRq: integer; MSILRq: boolean; StampRq: integer): TUnit;

procedure FreeDCU;

procedure LoadSourceLines(FName: String; Lines: TStrings);

procedure SetUnitAliases(V: String);

implementation

{const
  PkgErr = Pointer(1);}

var
  PathList: TStringList = Nil;
  FUnitAliases: TStringList = Nil;
  AddedUnitDirToPath: boolean = false;

procedure FreePackages;
var
  i: integer;
  Pkg: TDCPackage;
begin
  if PathList=Nil then
    Exit;
  for i:=0 to PathList.Count-1 do begin
    Pkg := TDCPackage(PathList.Objects[i]);
    {if Pkg=PkgErr then
      Continue;}
    Pkg.Free;
  end ;
end ;

function AddToPathList(S: String; SurePkg: boolean): integer;
begin
  Result := PathList.IndexOf(S);
  if Result>=0 then
    Exit; {It may be wrong on Unix}
  if SurePkg or (CompareText(ExtractFileExt(S),'.dcp')=0) then begin
    if FileExists(S) then begin
      Result := PathList.AddObject(S,TDCPackage.Create);
      Exit;
    end ;
    Result := -1;
    if SurePkg then
      Exit;
  end ;
  if not (AnsiLastChar(S)^ in [{$IFNDEF Linux}':',{$ENDIF} DirSep]) then
    S := S + DirSep;
  Result := PathList.Add(S);
end ;

procedure SetPathList(DirList: string);
var
  I, P, L: Integer;
begin
  P := 1;
  L := Length(DirList);
  while True do
  begin
    while (P <= L) and (DirList[P] = PathSep) do
      Inc(P);
    if P > L then
      Break;
    I := P;
    while (P <= L) and (DirList[P] <> PathSep) do begin
      if DirList[P] in LeadBytes then
        Inc(P);
      Inc(P);
    end;
    AddToPathList(Copy(DirList, I, P-I),False{SurePkg});
  end;
end;

(*
function AllFilesSearch(Name: string; var DirList: string): string;
var
  I, P, L: Integer;
begin
  Result := Name;
  P := 1;
  L := Length(DirList);
  while True do
  begin
    while (P <= L) and (DirList[P] = PathSep) do
      Inc(P);
    if P > L then
      Break;
    I := P;
    while (P <= L) and (DirList[P] <> PathSep) do begin
      if DirList[P] in LeadBytes then
        Inc(P);
      Inc(P);
    end;
    Result := Copy(DirList, I, P - I);
    if not (AnsiLastChar(Result)^ in [{$IFNDEF Linux}':',{$ENDIF} DirSep]) then
      Result := Result + DirSep;
    Result := Result + Name;
    if FileExists(Result) then begin
      Delete(DirList,1,P+1);
      Exit;
    end ;
  end;
  Result := '';
  DirList := '';
end;
*)

type

TDCUSearchRec = record
  hPath: integer;
  FN,UnitName: String;
  Res: PDCPUnitHdr;
end ;

function InitDCUSearch(FN,FExt: String; var SR: TDCUSearchRec): boolean {HasPath};
var
  Dir: String;
  CP: PChar;
  AddedUnitDir: boolean;
begin
  FillChar(SR,SizeOf(TDCUSearchRec),0);
  SR.FN := FN;
  SR.hPath := -1;
  Dir := ExtractFileDir(FN);
  Result := Dir<>'';
  AddedUnitDir := AddedUnitDirToPath;
  if not AddedUnitDirToPath then begin
    if (PASPath<>'*') then begin
      if (PASPath='') then
        PASPath := Dir
      else
        PASPath := Dir + PathSep + PASPath;
    end ;
    AddedUnitDirToPath := true;
  end ;
  CP := PChar(FN)+Length(Dir);
  CP := StrScan(CP,PkgSep);
  if CP<>Nil then begin
    SetLength(FN,CP-PChar(FN)); //Package name with path
    SR.hPath := AddToPathList(FN,true{SurePkg});
    if SR.hPath>=0 then
      SR.UnitName := StrPas(CP+1);
    SR.UnitName := ChangeFileExt(SR.UnitName,'');
    Exit;
  end ;
  {if ExtractFileExt(SR.FN)='' then
    SR.FN := SR.FN+'.dcu';}
  SR.FN := SR.FN+FExt;
 (*
  if (DCUPath='') then
    DCUPath := Dir
  else
    DCUPath := Dir + {$IFNDEF LINUX}';'{$ELSE}';'{$ENDIF}+DCUPath;
  *)
  if not AddedUnitDir then
    AddToPathList(Dir,False{SurePkg});
  if Dir='' then
    SR.hPath := 0;
end ;


function FindDCU(var SR: TDCUSearchRec): String;
var
  S: String;
  Pkg: TDCPackage;
begin
  Result := '';
  SR.Res := Nil;
  if SR.hPath<0 then begin
    if FileExists(SR.FN) then
      Result := SR.FN;
    Exit;
  end ;
  if PathList=Nil then
    Exit {Paranoic};
  if SR.hPath>=PathList.Count then
    SR.hPath := -1
  else begin
    S := PathList[SR.hPath];
    Pkg := TDCPackage(PathList.Objects[SR.hPath]);
    Inc(SR.hPath);
    if Pkg=Nil then begin
      Result := S+SR.FN;
      if FileExists(Result) then
        Exit;
      Result := '';
     end
    else if Pkg.Load(S) then begin
      SR.Res := Pkg.GetFileByName(SR.UnitName);
      if SR.Res<>Nil then
        Result := S+'@'+SR.UnitName;
    end ;
  end ;
end ;

var
  UnitList: TStringList = Nil;

function GetUnitList: TStringList;
begin
  if UnitList=Nil then begin
    UnitList := TStringList.Create;
    UnitList.Sorted := true;
    UnitList.Duplicates := dupError;
  end ;
  Result := UnitList;
end ;

procedure RegisterUnit(Name: String; U: TUnit);
var
  UL: TStringList;
begin
  UL := GetUnitList;
  UL.AddObject(Name,U);
end ;

function GetDCUByName(FName,FExt: String; VerRq: integer; MSILRq: boolean; StampRq: integer): TUnit;
var
  UL: TStringList;
  NDX: integer;
  U0: TUnit;
//  SearchPath: String;
  SR: TDCUSearchRec;
  FN: String;
begin
  UL := GetUnitList;
  if PathList=Nil then begin
    PathList := TStringList.Create;
    SetPathList(DCUPath);
  end ;
  {if not AddedUnitDirToPath then begin
    AddUnitDirToPath(FName);
    AddedUnitDirToPath := true;
  end ;}
  if FUnitAliases<>Nil then begin
    FN := FUnitAliases.Values[FName];
    if FN<>'' then
      FName := FN;
  end ;
  if UL.Find(FName,NDX) then
    Result := TUnit(UL.Objects[NDX])
  else begin
    InitDCUSearch(FName,FExt,SR);
   // SearchPath := DCUPath;
    Result := Nil;
    U0 := CurUnit;
    try
      FN := FName;
      repeat
        FName := FindDCU(SR);
        if FName<>'' then begin
          Result := TUnit.Create;
          try
            if Result.Load(FName,VerRq,MSILRq,SR.Res) then
              break;
          except
            on E: Exception do begin
              if VerRq=0 then //Main Unit => reraise;
                raise;
            //The unit with the required version found, but it was wrong.
            //Report the problem and stop the search
              Writeln(Format('%s: %s',[E.ClassName,E.Message]));
              Result.Free;
              Result := Nil;
              break;
            end ;
          end ;
          Result.Free;
          Result := Nil;
        end ;
      until SR.hPath<0;
      if Result<>Nil then
        RegisterUnit(Result.UnitName, Result)
      else
        RegisterUnit(FN, Nil); //Means: don't seek this name again,
          //It's supposed that FName is a unit name without path
    finally
      CurUnit := U0;
    end ;
  end ;
  if Result=Nil then
    Exit;
  if (VerRq>2){In Delphi 2.0 Stamp is not used}and(StampRq<>0)
    and(StampRq<>Result.Stamp)
  then
    Result := Nil;
end ;

procedure FreeDCU;
var
  i: integer;
  U: TUnit;
begin
  if UnitList=Nil then
    Exit;
  for i:=0 to UnitList.Count-1 do begin
    U := TUnit(UnitList.Objects[i]);
    U.Free;
  end ;
  UnitList.Free;
  UnitList := Nil;
  FreePackages;
end ;

function FindPAS(FName: String): String;
var
  S: String;
begin
  if PASPath='*' then begin
    Result := '';
    Exit;
  end ;
  S := ExtractFilePath(FName);
  if S<>'' then begin
    if FileExists(FName) then begin
      Result := FName;
      Exit;
    end ;
    FName := ExtractFileName(FName);
  end ;
  Result := FileSearch(FName,PASPath);
end ;

procedure LoadSourceLines(FName: String; Lines: TStrings);
var
  S: String;
begin
  S := FindPAS(FName);
  if S='' then
    Exit;
  Lines.LoadFromFile(S);
end ;

procedure SetUnitAliases(V: String);
var
  CP,EP,NP: PChar;
  S: String;
begin
  if V='' then
    Exit;
  if FUnitAliases=Nil then
    FUnitAliases := TStringList.Create;
  CP := PChar(V);
  repeat
    NP := StrScan(CP,';');
    if NP=Nil then
      EP := StrEnd(CP)
    else begin
      EP := NP;
      NP := EP+1;
    end ;
    SetString(S,CP,EP-CP);
    if S<>'' then
      FUnitAliases.Add(S);
    CP := NP;
  until CP=Nil;
end ;

initialization
finalization
  FUnitAliases.Free;
  PathList.Free;
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99re成人精品视频| 久久日一线二线三线suv| 久久综合色天天久久综合图片| 18欧美乱大交hd1984| 韩国午夜理伦三级不卡影院| 欧美美女直播网站| 亚洲欧美国产毛片在线| 成人午夜又粗又硬又大| 久久先锋影音av鲁色资源| 亚洲妇女屁股眼交7| 91香蕉视频污在线| 国产精品三级电影| 国产精品 欧美精品| 精品国产乱码久久久久久蜜臀 | 99久久精品国产观看| 久久这里只有精品视频网| 日韩精品福利网| 精品视频在线看| 亚洲激情成人在线| 91美女片黄在线观看91美女| 中文字幕欧美日韩一区| 福利91精品一区二区三区| 欧美精品一区二区在线播放| 久久草av在线| 精品少妇一区二区| 久久av中文字幕片| 337p亚洲精品色噜噜| 婷婷一区二区三区| 欧美日韩aaa| 日本视频中文字幕一区二区三区| 欧美视频你懂的| 五月天精品一区二区三区| 欧美日韩国产一区二区三区地区| 亚洲成年人网站在线观看| 欧美日韩大陆一区二区| 午夜影院久久久| 欧美一区二区在线观看| 麻豆免费看一区二区三区| 日韩一区二区视频| 日本黄色一区二区| 夜色激情一区二区| 欧美日韩久久一区| 日本欧美一区二区在线观看| 欧美成人一区二区三区| 精品一区二区三区免费| 国产色产综合色产在线视频| 成人av资源在线| 一区二区三区在线观看欧美| 欧美日本一区二区| 九色porny丨国产精品| 久久日韩粉嫩一区二区三区| 99久久99久久久精品齐齐| 亚洲综合在线电影| 欧美一级日韩免费不卡| 国产一区999| 亚洲色图欧洲色图婷婷| 欧美日韩成人综合| 国产精品综合在线视频| 一区二区三区欧美久久| 欧美精品777| 国产成人精品三级麻豆| 亚洲一区在线看| 久久亚洲影视婷婷| 99re成人在线| 狠狠色狠狠色合久久伊人| 中文字幕亚洲不卡| 欧美一级片在线| 成人黄色av电影| 日本不卡在线视频| 国产精品久久久久久久久动漫| 欧美日韩一区二区欧美激情| 国内不卡的二区三区中文字幕| 亚洲欧美另类小说视频| 欧美一区二区三区人| 日韩三级视频在线看| 9i在线看片成人免费| 日本v片在线高清不卡在线观看| 国产精品久久久久久福利一牛影视| 欧美性受xxxx黑人xyx性爽| 韩日欧美一区二区三区| 午夜精品视频一区| 专区另类欧美日韩| 久久久噜噜噜久噜久久综合| 欧美精品777| 色综合天天做天天爱| 国模大尺度一区二区三区| 亚洲国产综合人成综合网站| 国产精品国产精品国产专区不蜜 | 99久久99久久综合| 国产九色精品成人porny| 亚洲成人手机在线| 亚洲免费观看在线观看| 国产欧美日韩另类视频免费观看| 欧美二区乱c少妇| 在线国产电影不卡| 99久久亚洲一区二区三区青草| 久久99精品久久久久久国产越南 | 日韩精品一区国产麻豆| 欧美美女视频在线观看| 91捆绑美女网站| 高清在线观看日韩| 久久se精品一区二区| 亚瑟在线精品视频| 亚洲伊人色欲综合网| 亚洲欧美一区二区三区孕妇| 国产欧美日韩在线| 国产欧美一区二区精品性色| 欧美成人精品3d动漫h| 欧美一区二区在线免费播放| 欧美精品日韩一区| 欧美久久久久免费| 欧美精品xxxxbbbb| 日韩欧美卡一卡二| 日韩一级完整毛片| 日韩一区二区麻豆国产| 日韩欧美123| 精品国产123| 国产三级三级三级精品8ⅰ区| 亚洲人成精品久久久久| 亚洲码国产岛国毛片在线| 亚洲裸体xxx| 亚洲国产精品久久一线不卡| 日韩精品福利网| 精品一区二区免费视频| 国产成人免费在线观看不卡| 国产精品1024久久| 91老司机福利 在线| 欧美日韩高清一区| 日韩欧美你懂的| 国产欧美一二三区| 亚洲乱码精品一二三四区日韩在线| 一卡二卡欧美日韩| 美洲天堂一区二卡三卡四卡视频| 精品无人码麻豆乱码1区2区| 国产不卡视频一区二区三区| 91亚洲精品久久久蜜桃网站| 欧美日韩一区二区在线视频| 91精品久久久久久久久99蜜臂 | 欧美日韩国产免费| 精品日韩在线观看| 亚洲国产高清aⅴ视频| 亚洲在线视频网站| 奇米色一区二区| 粉嫩aⅴ一区二区三区四区| 91小视频在线观看| 日韩欧美一区二区在线视频| 国产天堂亚洲国产碰碰| 一区二区在线观看视频在线观看| 青青国产91久久久久久 | 国产精品久久久久久久久免费丝袜 | 欧美日韩一区不卡| 久久综合久久鬼色中文字| 国产精品久久久久国产精品日日| 亚洲电影欧美电影有声小说| 激情伊人五月天久久综合| 不卡大黄网站免费看| 欧美日韩免费高清一区色橹橹| 久久一区二区视频| 亚洲一级电影视频| 国产传媒欧美日韩成人| 91精品国产综合久久小美女| 国产精品久久一卡二卡| 奇米在线7777在线精品| 色综合久久久久| 2021久久国产精品不只是精品| 亚洲综合一区二区精品导航| 粉嫩欧美一区二区三区高清影视| 欧美日韩免费视频| 久久国产乱子精品免费女| 色婷婷国产精品| 久久久久久久久久久久久久久99| 亚洲国产aⅴ天堂久久| 不卡视频在线看| 国产亚洲精品久| 久久国产综合精品| 69堂精品视频| 一区二区三区四区蜜桃| 国产成人精品在线看| 日韩欧美一级精品久久| 亚洲一二三四区| 色婷婷一区二区| 国产精品电影院| 成人av动漫网站| 国产午夜亚洲精品不卡| 精品夜夜嗨av一区二区三区| 91精品国产综合久久久久久漫画| 亚洲精品视频一区二区| 成人高清伦理免费影院在线观看| 精品精品国产高清a毛片牛牛| 青娱乐精品视频| 日韩写真欧美这视频| 奇米影视在线99精品| 欧美一卡二卡在线| 丝袜美腿亚洲色图| 欧美欧美欧美欧美首页| 日韩精品国产精品| 欧美一区二区三区在线电影| 青娱乐精品视频在线| 日韩欧美一区二区久久婷婷| 美女视频黄频大全不卡视频在线播放|