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

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

?? dedewpjalf.pas

?? DeDe3.2004源碼
?? PAS
字號:
unit DeDeWpjAlf;

///////////////////////////////////////////////////////
// Win32DASM WPJ and ALF files editing
//
// This unit has been coded to be used with DeDe 2.40
//
// (c) 2000 DaFixer
///////////////////////////////////////////////////////

interface

uses Classes, DeDeConstants;

Type DWORD = LongWord;

const sCopyrightString = #13#10'Including DeDe '+GlobsCurrDeDeVersion+' references (c) DaFixer  '#13#10;
      WPJ_MAGIC1 = $00455845;
      WPJ_MAGIC2 = $00657865;
      DATA_MAGIC = 2.51930465558271833E93;
      DATA_MAGIC1 = $35002C2C;
      DATA_MAGIC2 = $53535300;
      DELTA_OFFSET = $63;

      Color_R_BLK    = $01; // normal = Red && selection = Black
      Color_B_BLK    = $02; // normal = Blue && selection = Black
      Color_R_B      = $03; // normal = Red && selection = Blue
      Color_DB_BLK   = $04; // normal = DarkBlue && selection = Black
      Color_R_DB     = $05; // normal = Red && selection = DarkBlue
      Color_G_BLK    = $08; // normal = Green && selection = Black
      Color_R_G      = $09; // normal = Red && selection = Green

Type TWPJColorRec = Packed Record
       LineNum : DWORD;
       Color   : Word;
       Size    : Byte;
     End;

Type TWPJALF = Class (TObject)
      private
      protected
        procedure ReadHeader;
        procedure ReadWPJData;
        procedure LoadALFListing;
      public
        WPJ, ALF : TMemoryStream;
        dwLineNum, dwColorNum, dwPEP, dwNewPEP : DWORD;
        LineDataPos, EndLineDataPos, ColorPos, EndColorPos, SizePos : DWORD;
        LinesData : Array of Byte;
        ColorData : Array of TWPJColorRec;
        sTargetName : String;
        Listing : TStringList;
        ReffStrings : TStringList;
        constructor Create;
        destructor Destroy; override;
        function OpenWPJFile(sWPJFileName : String) : boolean;
        procedure NewReferences;
        procedure AddRefference(dwRVA : String; color : Word; sReference : String = 'Should be passed by increasing order of RVA');
        procedure SaveCopy(sWPJFileName : String);
     End;

implementation

uses SysUtils, HexTools;

{ TWPJALF }

procedure TWPJALF.AddRefference(dwRVA: String; color: Word;
  sReference: String);
var s : String;
begin
   // dont add trash
   if dwRVA='' then Exit;
   if dwRVA='00000000' then Exit;
   
   sReference:=sReference+#13#10;
   while length(dwRVA)<8 do dwRVA:='0'+dwRVA;
   s:=IntToStr(color);
   while length(s)<2 do s:='0'+s;
   s:=Copy(s,1,2);
   s:=dwRVA+s+sReference;
   If ReffStrings.IndexOf(s)=-1 then ReffStrings.Add(s);
end;

constructor TWPJALF.Create;
begin
  Inherited Create;

  WPJ:=TMemoryStream.Create;
  ALF:=TMemoryStream.Create;
  Listing:=TStringList.Create;
  ReffStrings:=TStringList.Create;
end;

destructor TWPJALF.Destroy;
begin
  ReffStrings.Free;
  Listing.Free;
  if ALF<>nil then ALF.Free;
  if WPJ<>nil then WPJ.Free;

  Inherited Destroy;
end;

procedure TWPJALF.LoadALFListing;
var s : String;
    b : Byte;
    cnt : Cardinal;
begin
  Listing.Clear;
  ALF.Seek(0,soFromBeginning);

  cnt:=0;
  b:=LinesData[cnt]+2;
  SetLength(s,b);
  ALF.ReadBuffer(s[1],b);
  Listing.Add(s);
  Inc(cnt);

  b:=LinesData[cnt]+2;
  SetLength(s,b);
  ALF.ReadBuffer(s[1],b);
  Listing.Add(s);
  Inc(cnt);

  Repeat
   b:=LinesData[cnt]+2;
   SetLength(s,b);
   ALF.ReadBuffer(s[1],b);
   Listing.Add(s);
   Inc(cnt);
  Until (ALF.Position>=ALF.Size) or (cnt>dwLineNum);
end;

procedure TWPJALF.NewReferences;
begin
  ReffStrings.Clear;
end;

function TWPJALF.OpenWPJFile(sWPJFileName: String) : Boolean;
var b : Byte;
    s : String;
begin
  if alf=nil then alf:=TMemoryStream.Create;
  
  WPJ.LoadFromFile(sWPJFileName);
  ALF.LoadFromFile(ChangeFileExt(sWPJFileName,'.alf'));

  repeat
    ALF.ReadBuffer(b,1);
  until b=10;

  SetLength(s,14);
  ALF.ReadBuffer(s[1],14);
  if s='Including DeDe' then
    begin
      alf.free;
      alf:=nil;
      result:=False;
      exit;
    end;

  ReadHeader;
  ReadWPJData;
  LoadALFListing;
  Result:=True;
end;

procedure TWPJALF.ReadHeader;
var dw : DWORD;
     w : WORD;
begin
  WPJ.Seek(0,soFromBeginning);
  WPJ.ReadBuffer(dw,4);

  if   (DW<>WPJ_MAGIC1)
   and (DW<>WPJ_MAGIC2) then Raise Exception.Create('Invalid WPJ File');

  WPJ.ReadBuffer(w,2);
  SetLength(sTargetName,w);

  WPJ.Seek(2,soFromCurrent);
  WPJ.ReadBuffer(sTargetName[1],w);

  SizePos:=WPJ.Position;
  WPJ.ReadBuffer(dwLineNum,4);
  SetLength(LinesData,dwLineNum);

  WPJ.Seek(4,soFromCurrent);
  WPJ.ReadBuffer(dwPEP,4);
end;

procedure TWPJALF.ReadWPJData;
var ext : DWORD;
    bt  : Byte;
    i,n   : DWORD;
    ColRec : TWPJColorRec;
    bkupPos : DWORD;
begin
  // Seek the magic
  Repeat
    Repeat
      WPJ.ReadBuffer(ext,4);
      WPJ.Seek(-3,soFromCurrent);
    Until (ext=DATA_MAGIC1) or (WPJ.Position+4>=WPJ.Size);
    WPJ.Seek(3,soFromCurrent);
    WPJ.ReadBuffer(ext,4);
    WPJ.Seek(-4,soFromCurrent);
  Until (ext=DATA_MAGIC2) or (WPJ.Position+4>=WPJ.Size);
  
  WPJ.Seek(-3,soFromCurrent);

  // find the beginning
  WPJ.Seek(-2,soFromCurrent);

  LineDataPos:=WPJ.Position;
  // Read line Info
  For i:=1 To dwLineNum Do
      WPJ.ReadBuffer(LinesData[i-1],1);

  EndLineDataPos:=WPJ.Position;

  // find the beginning
  Repeat
    WPJ.ReadBuffer(bt,1);
  Until bt=0;

  // find the beginning
  Repeat
    WPJ.ReadBuffer(bt,1);
  Until bt<>0;

  WPJ.Seek(-1,soFromCurrent);

  // enum color data
  bkupPos:=WPJ.Position;
  ColorPos:=bkupPos;
  n:=0;
  Repeat
     WPJ.ReadBuffer(ColRec.LineNum,4);
     WPJ.ReadBuffer(ColRec.Color,2);
     WPJ.ReadBuffer(ColRec.Size,1);
     Inc(n);
  Until ColRec.LineNum+ColRec.Color+ColRec.Size=0;

  // Read color data
  Dec(n,2);
  dwColorNum:=n+1;
  SetLength(ColorData,dwColorNum);
  WPJ.Seek(bkupPos,soFromBeginning);
  For i:=0 to n do
   begin
     WPJ.ReadBuffer(ColRec.LineNum,4);
     WPJ.ReadBuffer(ColRec.Color,2);
     WPJ.ReadBuffer(ColRec.Size,1);
     ColorData[i]:=ColRec;
   end;
   EndColorPos:=WPJ.Position;
end;

procedure TWPJALF.SaveCopy(sWPJFileName: String);
var i, iCol : Integer;
    s, rva, rva1, sline : String;
    color : Word;
    delta_lines,cnt, boza, dw : DWORD;
    Colors, LineData : TMemoryStream;
    wpj1, alf1 : TFileStream;
    ColDTA : TWPJColorRec;
    bt : Byte;

    procedure GetRVACol(var s : String);
    begin
        rva:=copy(s,1,8);
        color:=StrToInt(Copy(s,9,2));
        s:=Copy(s,11,Length(s)-10);
    end;

begin
  //Free some memory
  Alf.Free; alf:=nil;

  wpj1:=TFileStream.Create(sWPJFileName,fmCreate);
  alf1:=TFileStream.Create(ChangeFileExt(sWPJFileName,'.alf'),fmCreate);
  Colors:=TMemoryStream.Create;
  LineData:=TMemoryStream.Create;

  // copyright line will be inserted later
  delta_lines:=1;

  cnt:=0;
  i:=-1;
  iCol:=-1;
  Try
    if i<ReffStrings.Count-1 then Inc(i);
    s:=ReffStrings[i];
    GetRVACol(s);

    if iCol<dwColorNum-1 then Inc(iCol);
    ColDTA:=ColorData[iCol];

    // first line
    sline:=Listing[0];
    bt:=LinesData[cnt];
    LineData.WriteBuffer(bt,1);
    alf1.WriteBuffer(sLine[1],bt);

    //copyright string
     ALF1.WriteBuffer(sCopyrightString,Length(sCopyrightString));
     rva:='';

    for cnt:=1 to dwLineNum-1 Do
     begin
      sline:=Listing[cnt];
      if Copy(sLine,1,1)=':' then rva1:=DWORD2HEX(HEX2DWORD(Copy(sline,2,8)))
                             else rva1:='00000000';

      // correcting entry point line num when reached
      if dwPEP=cnt then
         dwNewPEP:=dwPEP+delta_lines;

      if rva=rva1 then
         repeat
           // add comment here
           bt:=Length(s);
           alf1.WriteBuffer(s[1],bt);
           Dec(bt,2);
           LineData.WriteBuffer(bt,1);

           boza:=cnt+delta_lines;
           Colors.WriteBuffer(boza,4);
           Colors.WriteBuffer(Color,2);
           Colors.WriteBuffer(bt,1);
           Inc(delta_lines);

           // getnext line for reference
           if i<ReffStrings.Count-1 then
            begin
              Inc(i);
              s:=ReffStrings[i];
              GetRVACol(s);
            end
            else rva:='FFFFFFFE';
         until rva<>rva1;

       if rva<rva1 then
         begin
           // getnext line for reference
           if i<ReffStrings.Count-1 then
            begin
              Inc(i);
              s:=ReffStrings[i];
              GetRVACol(s);
            end
            else rva:='FFFFFFFE';
         end;

      ALF1.WriteBuffer(sline[1],Length(sline));
      bt:=LinesData[cnt];
      LineData.WriteBuffer(bt,1);

      if ColDta.LineNum<=cnt then
        begin
          if iCol<=dwColorNum-1 then
           begin
            ColDta.LineNum:=ColDta.LineNum+delta_lines;
            Colors.WriteBuffer(ColDta.LineNum,4);
            Colors.WriteBuffer(ColDta.Color,2);
            Colors.WriteBuffer(ColDta.Size,1);
            if iCol=dwColorNum-1 then Inc(iCol);
           end;
          if iCol<dwColorNum-1 then
            begin
              Inc(iCol);
              ColDTA:=ColorData[iCol];
            end;
        end;
     end;

     // Copyright string color data
     ColDta.LineNum:=1;ColDta.Color:=2;ColDta.Size:=Length(sCopyrightString)-2;
     Colors.WriteBuffer(ColDta.LineNum,4);
     Colors.WriteBuffer(ColDta.Color,2);
     Colors.WriteBuffer(ColDta.Size,1);

     // Save WPJ1 File
     LineData.Seek(0,soFromBeginning);
     WPJ.Seek(0,soFrombeginning);

     // move all to sizePos
     Repeat
       WPJ.ReadBuffer(bt,1);
       WPJ1.WriteBuffer(bt,1);
     Until WPJ.Position=SizePos;

     // Update line num
     WPJ.Seek(4,soFromCurrent);
     dwLineNum:=dwLineNum+delta_lines;
     WPJ1.WriteBuffer(dwLineNum,4);

     // Update code start
     WPJ.ReadBuffer(dw,4); Inc(dw);
     WPJ1.WriteBuffer(bt,4);

     // Correction of program entry point line num
     WPJ.Seek(4,soFromCurrent);
     WPJ1.WriteBuffer(dwNewPEP,4);



     // move all to LineDataPos
     Repeat
       WPJ.ReadBuffer(bt,1);
       WPJ1.WriteBuffer(bt,1);
     Until WPJ.Position=LineDataPos;

     // adding line length data
     cnt:=0;
     Repeat
       LineData.ReadBuffer(bt,1);
       if cnt=1 then begin
           bt:=$2C;
           WPJ1.WriteBuffer(bt,1);
         end;
       WPJ1.WriteBuffer(bt,1);
       Inc(cnt);
     Until LineData.Position>=LineData.Size;

     // move all to ColorDataPos
     WPJ.Seek(EndLineDataPos,soFromBeginning);
     Repeat
       WPJ.ReadBuffer(bt,1);
       WPJ1.WriteBuffer(bt,1);
     Until WPJ.Position=ColorPos;

     // Adding ColorData
     Colors.Seek(0,soFromBeginning);
     Repeat
       Colors.ReadBuffer(bt,1);
       WPJ1.WriteBuffer(bt,1);
     Until Colors.Position>=Colors.Size;

     // moving all the rest
     WPJ.Seek(EndColorPos,soFromBeginning);
     Repeat
       WPJ.ReadBuffer(bt,1);
       WPJ1.WriteBuffer(bt,1);
     Until WPJ.Position>=WPJ.Size;

     //WPJ1.SaveToFile(sWPJFileName);
     //ALF1.SaveToFile(ChangeFileExt(sWPJFileName,'.alf'));
  Finally
    ALF1.Free;
    WPJ1.Free;
    Colors.free;
    LineData.free;
  End;
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
玖玖九九国产精品| 91精品1区2区| 在线电影欧美成精品| 亚洲女人的天堂| 成人黄色小视频| 日韩免费看的电影| 天天av天天翘天天综合网| 欧美亚日韩国产aⅴ精品中极品| 国产精品久久久久9999吃药| 成人国产亚洲欧美成人综合网| 精品久久人人做人人爱| 蜜臀久久99精品久久久久久9| 欧美日韩黄色影视| 日本亚洲三级在线| 欧美一区二区三区视频在线 | 高清av一区二区| 国产午夜精品在线观看| 国产成人午夜精品影院观看视频| 久久亚洲春色中文字幕久久久| 日韩综合小视频| 日韩一级黄色片| 精品一区二区三区视频| 久久久一区二区三区捆绑**| 国产69精品久久99不卡| 亚洲精品一卡二卡| 欧美群妇大交群中文字幕| 亚洲综合视频在线| 日韩一区二区在线播放| 国产裸体歌舞团一区二区| 国产精品不卡在线| 欧美日韩在线直播| 国产乱码精品一区二区三区五月婷| 国产午夜精品美女毛片视频| 波多野结衣精品在线| 一区二区三区精品| 欧美不卡一二三| 北条麻妃一区二区三区| 日日摸夜夜添夜夜添国产精品| 精品国产乱码久久久久久闺蜜| 成人激情免费视频| 亚洲成人一区在线| 国产亚洲一本大道中文在线| 波多野结衣中文字幕一区| 亚洲一区二区3| 久久久五月婷婷| 欧亚洲嫩模精品一区三区| 亚洲国产精品一区二区www| 精品久久国产老人久久综合| 成人aaaa免费全部观看| 亚洲小少妇裸体bbw| 久久久久久99精品| 欧美午夜精品久久久久久超碰| 精品一区二区三区在线播放 | 91精品欧美久久久久久动漫| 国产一区视频在线看| 国产精品久久夜| 日韩三级伦理片妻子的秘密按摩| 成人综合婷婷国产精品久久| 亚洲一区二区三区四区在线观看| 久久免费视频一区| 欧美一级欧美三级在线观看| 国产成人精品www牛牛影视| 日本网站在线观看一区二区三区 | 成人天堂资源www在线| 看电视剧不卡顿的网站| 日本aⅴ精品一区二区三区 | 午夜精品久久久久久久| 亚洲欧美日韩国产一区二区三区 | 一区二区三区色| 亚洲视频在线观看三级| 日本一区二区动态图| 国产亚洲视频系列| 国产无遮挡一区二区三区毛片日本| 精品福利一区二区三区免费视频| 日韩一级二级三级| 91精品啪在线观看国产60岁| 69av一区二区三区| 51午夜精品国产| 欧美一区二区成人| 欧美tickling挠脚心丨vk| 日韩美女一区二区三区四区| 欧美成人欧美edvon| 久久天天做天天爱综合色| 欧美精品一区二区三区久久久 | 国产欧美中文在线| 中文字幕亚洲精品在线观看| 亚洲欧洲三级电影| 亚洲美女屁股眼交3| 亚洲精品欧美二区三区中文字幕| 国产精品成人午夜| 一区二区成人在线视频| 亚洲成人一二三| 久久99久久精品欧美| 国产高清一区日本| 91免费观看视频在线| 欧美性猛交xxxx乱大交退制版| 欧美一区中文字幕| 久久精品亚洲乱码伦伦中文| 国产农村妇女精品| 亚洲自拍偷拍九九九| 日日夜夜一区二区| 国产乱码字幕精品高清av| 成人免费视频网站在线观看| 91视频www| 日韩欧美一区二区视频| 欧美激情在线一区二区三区| 一二三区精品视频| 蜜臀久久久久久久| 成人免费福利片| 欧美天天综合网| 精品国产百合女同互慰| 中文av一区特黄| 午夜精品久久一牛影视| 国产一区三区三区| 在线看一区二区| 精品免费国产二区三区| 国产精品高潮呻吟久久| 日日欢夜夜爽一区| 成人av中文字幕| 6080国产精品一区二区| 日本一区二区成人在线| 日韩成人精品在线| 成人午夜电影网站| 日韩精品一区二区三区在线播放| 国产精品视频一二| 久久成人免费网站| 在线观看国产91| 国产精品区一区二区三| 日韩成人一级片| 在线欧美小视频| 中文字幕不卡的av| 久久福利视频一区二区| 欧美性感一类影片在线播放| 欧美高清在线精品一区| 久久成人精品无人区| 欧美主播一区二区三区| 国产精品丝袜黑色高跟| 九一九一国产精品| 欧美精品tushy高清| 亚洲精品乱码久久久久久日本蜜臀| 国产精品一区免费在线观看| 欧美肥大bbwbbw高潮| 一区二区三区视频在线看| caoporn国产一区二区| 久久一二三国产| 人人精品人人爱| 成人综合婷婷国产精品久久蜜臀| 91成人免费在线视频| 亚洲国产电影在线观看| 美女视频黄 久久| 欧洲色大大久久| 亚洲图片激情小说| 久久成人免费日本黄色| 日韩欧美在线1卡| 亚洲一区二区在线免费观看视频| 国产一区二区三区蝌蚪| 欧美性欧美巨大黑白大战| 亚洲综合另类小说| 国产在线国偷精品产拍免费yy| 欧美日高清视频| 天天av天天翘天天综合网| 色94色欧美sute亚洲13| 亚洲免费在线电影| 免费看黄色91| 日韩欧美一级特黄在线播放| 日本美女一区二区| 欧美精品一二三| 日本不卡在线视频| 欧美人与禽zozo性伦| 日韩黄色小视频| 欧美一级免费大片| 日韩高清中文字幕一区| 91精品国产综合久久精品| 性久久久久久久久久久久| 51精品秘密在线观看| 亚洲成av人片一区二区梦乃| 色综合久久综合中文综合网| 一区二区三区国产| 欧美制服丝袜第一页| 亚洲第一福利视频在线| 91久久精品一区二区三区| 亚洲一区二区三区视频在线| 色婷婷香蕉在线一区二区| 伊人婷婷欧美激情| 9191成人精品久久| 蜜臀av性久久久久蜜臀aⅴ流畅 | 蜜桃av一区二区在线观看 | 国产在线视频一区二区| 久久影院电视剧免费观看| 国内一区二区视频| 久久色中文字幕| 国产福利一区二区三区| 国产精品视频一二三区| 国产99久久久国产精品潘金| 综合久久久久久久| 色综合久久88色综合天天免费| 亚洲精品久久久蜜桃| 欧美成人伊人久久综合网| 国产精品一区二区不卡| 国产精品久久久久影院|