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

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

?? dededpjeng.pas

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

////////////////////////////////////////////////////////////////////////////////
// The .DPJ Engine functions for saving and loading .DPJ files
//
////////////////////////////////////////////////////////////////////////////////
// .DPJ Format
//
// DWORD      Ident  'DPJ!'
// QWORD      DPJ version  (4 chars - the current .DPJ version '1.01'
// QWORD      DeDe version (4 chars - minimal DeDe version needed to open
//                         (    the file - '2.50'
// STRPAS     Project name
// STRPAS     Full path to target executable
//
// CLASS_DATA_STREAM    - All classes data
// MEM_DUMP_STREAM      - BSS and DATA sections dumped from memory
// USER_SETTINGS_STREAM - User config (DSF and DOI files to load, etc.)
// USER_MACRO_STREAM    - User macros (COMMENT and EMUL)
//
//


interface

uses Classes;

Procedure LoadDPJFile(FsFileName : String);
Procedure SaveDPJFile(FsFileName : String);

implementation

{ TDPJFile }

Uses VCLUnZip, VCLZip, SysUtils, DeDeConstants, MainUnit, Windows, DeDeEditText,
     CRC32, DeDeSym, DeDeReg, DeDeClasses;

var
   Stream : TMemoryStream;

const
   DPJVersion = '1.00';

procedure SaveMagicStringValue(s : String);
var len : Integer;
begin
   len := Length(s);
   Stream.WriteBuffer(s[1], len);
end;


procedure SaveStringValue(s : String);
var len : Integer;
begin
   len := Length(s);
   Stream.WriteBuffer(len, 4);
   Stream.WriteBuffer(s[1], len);
end;

procedure SaveDWORDValue(i : LongWord);
begin
   Stream.WriteBuffer(i, 4);
end;

procedure SaveIntegerValue(i : Integer);
begin
   Stream.WriteBuffer(i, 4);
end;

procedure SaveByteValue(b : Byte);
begin
   Stream.WriteBuffer(b, 1);
end;


procedure SaveBooleanValue(b : Boolean);
var bt : Byte;
begin
   if b then bt:=1 else bt:=0;
   SaveByteValue(bt);
end;


procedure SaveStringListValues(sl : TStringList);
var i : Integer;
begin
  SaveDWORDValue(sl.Count);
  For i:=0 to sl.Count-1 do SaveStringValue(sl[i]);
end;

procedure SaveTStringsValues(sl : TStrings);
var i : Integer;
begin
  SaveDWORDValue(sl.Count);
  For i:=0 to sl.Count-1 do SaveStringValue(sl[i]);
end;

procedure SaveStringListValuesAndPointers(sl : TStringList);
var i : Integer;
begin
  SaveDWORDValue(sl.Count);
  For i:=0 to sl.Count-1 do
    begin
      SaveStringValue(sl[i]);
      SaveDWORDValue(LongWord(sl.Objects[i]));
    end;
end;


procedure CalcCRC32OfFile(sFileName : String);
var MemStr : TMemoryStream;
    bytesRead : cardinal;
    buff : Array of Byte;
begin
  MemStr:=TMemoryStream.Create;
  try
    MemStr.LoadFromFile(sFileName);
    MemStr.Seek(0,soFromBeginning);
    SetLength(buff,400);
    CRC32.crc32val:=0;
    bytesRead:=MemStr.Read(buff[1],400);
    if bytesRead>0 then CRC32.updatecrc(buff,bytesRead);

{    While MemStr.Position<MemStr.Size do
      begin
        bytesRead:=MemStr.Read(buff[1],100);
        if bytesRead>0 then CRC32.updatecrc(buff,bytesRead);
        if bytesRead<>100 then break;
      end
}  finally
    MemStr.Free;
  end;
end;

procedure ProcessStreamForLoadingDPJ;
const
   mDPJError = 'DeDe project loading error.';
var
   FileVer, s : string;
   i, j : integer;
   p : Pointer;
begin
   SetLength(s, 4);
   Stream.ReadBuffer(s[1], 4);
   if s <> 'DPJ!' then begin
//   Invalid DeDe project
      MessageBox(0, PChar('Invalid DeDe project'), mDPJError, MB_OK);
   end; { if }
   Stream.ReadBuffer(s[1], 4);
   if s > DPJVersion then begin
//   Not supported DPJ version
      MessageBox(0, PChar('Unsupported project version ('+s+')'), mDPJError, MB_OK);
   end; { if }
   FileVer := s;
   Stream.ReadBuffer(s[1],4);
   if s > GlobsCurrDeDeVersion then begin
//   Not supported DeDe version
      MessageBox(0, PChar('Unsupported DeDe version ('+s+')'), mDPJError, MB_OK);
   end; { if }
// Read Project Name
   Stream.ReadBuffer(i, SizeOf(i));
   SetLength(DeDeMainForm.FsProjectName, i);
   Stream.ReadBuffer(DeDeMainForm.FsProjectName[1], i);
// Read File Name
   Stream.ReadBuffer(i, SizeOf(i));
   SetLength(DeDeMainForm.FsFileName, i);
   Stream.ReadBuffer(DeDeMainForm.FsFileName[1], i);
// Read comments
   Stream.ReadBuffer(DeDeEditText.CommentsCount, SizeOf(DeDeEditText.CommentsCount));
   SetLength(DeDeEditText.Comments, DeDeEditText.CommentsCount);
   for i:=0 to DeDeEditText.CommentsCount - 1 do begin
      Stream.ReadBuffer(DeDeEditText.Comments[i], SizeOf(TComment));


   end; { for }
end;



procedure ProcessStreamForSavingDPJ;
var
   s : string;
   i, sz : integer;
   p : Pointer;
   buff : Array of Byte;
begin
   Stream.Clear;
   /////////////////////////////////////////////////////////////////////////////
   // Save DPJ and DeDe versions
   /////////////////////////////////////////////////////////////////////////////
   s:='DPJ!' + DPJVersion + GlobsCurrDeDeVersion;
   Stream.WriteBuffer(s[1], 12);

   /////////////////////////////////////////////////////////////////////////////
   // Save pre-dump data
   /////////////////////////////////////////////////////////////////////////////
   // Project name
      SaveStringValue(DeDeMainForm.FsProjectName);
   // Target file name and path
      SaveStringValue(DeDeMainForm.FsFileName);
   // Target file CRC32
      CalcCRC32OfFile(DeDeMainForm.FsFileName);
      SaveDWORDValue(CRC32.crc32val);
   // Symbols to load
      SaveMagicStringValue('SYM');
      SaveDWORDValue(DeDeMainForm.SymbolsList.Count);
      For i:=0 to DeDeMainForm.SymbolsList.Count-1 do
        Begin
          s:=ExtractFileName(TDeDeSymbol(DeDeMainForm.SymbolsList[i]).FileName);
          SaveStringValue(s);
        End;
   // DeDeReg values
      SaveMagicStringValue('DEDEREG');
      SaveBooleanValue(DeDeReg.bWARN_ON_FILE_OVERWRITE);
      SaveBooleanValue(DeDeReg.bNOT_ALLOW_EXISTING_DIR);
      SaveBooleanValue(DeDeReg.bDumpAll);
      SaveBooleanValue(DeDeReg.bObjPropRef);
      SaveIntegerValue(DeDeReg.iSTRING_REF_TYPE);
      SaveBooleanValue(DeDeReg.bSMARTMODE);
      SaveBooleanValue(DeDeReg.bUseDOI);
      SaveBooleanValue(DeDeReg.bDontShowUnkRefs);
      SaveBooleanValue(DeDeReg.bRegisterShellExt);
   // Dump specific values
      SaveBooleanValue(DeDeClasses.bBSS);
      SaveBooleanValue(DeDeClasses.bDebug);
      SaveBooleanValue(DeDeClasses.bUserProcs);
      SaveBooleanValue(DeDeClasses.GlobCBuilder);
      SaveBooleanValue(DeDeClasses.GlobDelphi2);
      SaveStringListValues(DeDeClasses.ProcRefOffsets);
      SaveStringListValues(DeDeClasses.ProcRefNames);
      SaveStringValue(DeDeClasses.DelphiVersion);
   // More delphi version constants
      SaveStringValue(DeDeMainForm.sDelphiVersion);
      SaveIntegerValue(MainUnit.DelphiVestionCompability);
   // DeDeMainForm string lists
      SaveStringListValuesAndPointers(DeDeMainForm.DFMFormList);
      SaveTStringsValues(DeDeMainForm.PIUL.Items);
      SaveStringListValues(DeDeMainForm.PASNameList);
      SaveIntegerValue(MainUnit.GlobClassesCount);
   /////////////////////////////////////////////////////////////////////////////
   // Save ClassesDumper object
   /////////////////////////////////////////////////////////////////////////////
      SaveMagicStringValue('CLASSESDUMPER');
      DeDeMainForm.ClassesDumper.GetBufferForDPJSave(buff,sz);
      SetLength(buff,sz);
      DeDeMainForm.ClassesDumper.GetBufferForDPJSave(buff,sz);
      SaveDWORDValue(sz);
      Stream.WriteBuffer(buff[0], sz);
   /////////////////////////////////////////////////////////////////////////////
   // Save DeDeMainForm additional stuff
   /////////////////////////////////////////////////////////////////////////////
      SaveStringListValues(DeDeMainForm.DFMFormList);
      SaveStringListValues(DeDeMainForm.UnitList);
      SaveStringListValues(DeDeMainForm.DFMNameList);
      SaveStringListValues(DeDeMainForm.PASNameList);
      SaveStringListValues(DeDeMainForm.CurrNames);
      SaveStringListValues(DeDeMainForm.CurrIDs);
      SaveStringListValues(DeDeMainForm.SymbolsPath);
      SaveBooleanValue(DeDeMainForm.FbMemFump);
      SaveBooleanValue(DeDeMainForm.FbProcessed);
      SaveBooleanValue(DeDeMainForm.FbFailed);
      SaveBooleanValue(DeDeMainForm.FbCutSelfPtr);
      SaveDWORDValue(ORD(DeDeMainForm.FFileType));
      SaveStringValue(DeDeMainForm.FsFileName);
      SaveStringValue(DeDeMainForm.FsProjectName);
      SaveStringValue(DeDeMainForm.DeDeProjectFileName);
      SaveStringValue(DeDeMainForm.FsLoadedDOIFile);

   // Write comments
   Stream.WriteBuffer(DeDeEditText.CommentsCount, SizeOf(DeDeEditText.CommentsCount));
   for i:=0 to DeDeEditText.CommentsCount - 1 do begin
      Stream.WriteBuffer(DeDeEditText.Comments[i], SizeOf(TComment));
   end;

   { Phew! :)) }
end;


procedure LoadDPJFile(FsFileName: String);
var UnZip : TVCLUnzip;
begin
  Stream := TMemoryStream.Create;
  UnZip := TVCLUnZip.Create(nil);
  Try
   UnZip.ZipName := FsFileName;
   UnZip.UnZipToStream(Stream,ExtractFileName(FsFileName));
   Stream.Seek(0, soFromBeginning);
  Finally
   UnZip.Free;
  End;
  ProcessStreamForLoadingDPJ;
  MessageBox(0, 'DeDe Project loaded !', '', MB_OK);
  Stream.Free;
end;


procedure SaveDPJFile(FsFileName: String);
var Zip : TVCLZip;
begin
   Stream := TMemoryStream.Create;
   DeleteFile(PChar(FsFileName));
   ProcessStreamForSavingDPJ;
   Zip := TVCLZip.Create(nil);
   Try
      Zip.ZipName := FsFileName;
      Stream.Seek(0, soFromBeginning);
      Zip.ZipFromStream(Stream, FsFileName);
      MessageBox(0, 'DeDe Project saved !', '', MB_OK);
   Finally
      Zip.Free;
   End;
   Stream.Free;
end;



end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区四区五区入口| 欧美高清精品3d| 欧美日韩在线不卡| 国产精品午夜久久| 久久国产欧美日韩精品| 91久久精品日日躁夜夜躁欧美| 91精品国产欧美一区二区| 亚洲日本丝袜连裤袜办公室| 国产美女精品一区二区三区| 3atv一区二区三区| 亚洲综合在线电影| zzijzzij亚洲日本少妇熟睡| 亚洲精品在线网站| 美女网站在线免费欧美精品| 欧美在线观看视频一区二区三区| 国产精品国产三级国产a| 国产中文字幕精品| 精品粉嫩aⅴ一区二区三区四区| 亚洲成a人片综合在线| 色综合久久久网| 中文字幕亚洲一区二区va在线| 国产真实精品久久二三区| 欧美一区二区三区视频免费| 亚洲成人免费看| 欧美日韩国产免费一区二区 | 欧美大片在线观看一区二区| 午夜视频一区在线观看| 欧美在线免费播放| 亚洲精品欧美综合四区| 色94色欧美sute亚洲线路一久| 亚洲视频免费在线观看| 91美女在线看| 一区二区视频在线看| 色成人在线视频| 亚洲综合久久久| 欧美日韩成人一区| 日本女优在线视频一区二区| 日韩天堂在线观看| 国产在线播放一区| 中文字幕成人在线观看| 94色蜜桃网一区二区三区| 亚洲最大的成人av| 欧美一级国产精品| 高清不卡一区二区在线| 中文字幕制服丝袜一区二区三区| 91麻豆swag| 日本伊人午夜精品| 日本一区二区免费在线| 色偷偷久久人人79超碰人人澡| 亚洲一区二区视频在线| 欧美一级在线视频| 国产不卡视频在线播放| 亚洲精品福利视频网站| 91麻豆精品国产91久久久使用方法| 久久国产精品无码网站| 中文字幕一区三区| 在线电影欧美成精品| 国产精品一区二区x88av| 亚洲人成小说网站色在线| 欧美日韩在线观看一区二区| 韩日欧美一区二区三区| 亚洲欧美一区二区不卡| 日韩一区二区三区视频在线观看| 国产精品一区二区无线| 亚洲午夜精品一区二区三区他趣| 欧美成人精品福利| 欧洲精品在线观看| 国产一区二区三区久久悠悠色av | youjizz久久| 奇米色777欧美一区二区| 国产精品美女www爽爽爽| 欧美日韩高清不卡| 972aa.com艺术欧美| 久久国产精品99精品国产| 亚洲精品视频在线观看免费| 欧美mv和日韩mv国产网站| 91黄色激情网站| 国产不卡视频在线观看| 麻豆精品视频在线观看视频| 亚洲色大成网站www久久九九| 日韩三级视频在线观看| 欧美亚洲综合在线| jlzzjlzz欧美大全| 久久99这里只有精品| 一区二区三区av电影| 中文字幕免费不卡在线| 日韩三级在线观看| 欧美美女一区二区在线观看| jvid福利写真一区二区三区| 国产一区二区三区免费观看| 日韩中文字幕一区二区三区| 亚洲自拍偷拍麻豆| 1000部国产精品成人观看| 久久久www成人免费无遮挡大片| 欧美精品久久久久久久多人混战| 不卡的av电影| 粉嫩aⅴ一区二区三区四区五区 | 日韩成人免费电影| 夜夜夜精品看看| 亚洲乱码国产乱码精品精的特点 | 久久午夜电影网| 日韩欧美色电影| 欧美一级黄色大片| 777久久久精品| 4438x亚洲最大成人网| 欧美情侣在线播放| 91麻豆精品国产| 51精品视频一区二区三区| 欧美三级日韩三级国产三级| 在线视频国内自拍亚洲视频| 一本大道久久精品懂色aⅴ| 91丝袜国产在线播放| eeuss影院一区二区三区| 成人av网站在线| 91免费国产在线观看| 色婷婷精品久久二区二区蜜臀av| 色综合久久88色综合天天免费| 99久久精品免费看| 色综合久久综合网| 欧美日韩一区成人| 欧美一区午夜视频在线观看| 欧美高清视频www夜色资源网| 欧美片网站yy| 2020国产精品自拍| 亚洲国产精品成人久久综合一区| 国产欧美一区二区精品性色 | 麻豆精品蜜桃视频网站| 久久er99热精品一区二区| 国产精一区二区三区| av中文字幕亚洲| 欧美视频一区二| 日韩免费视频一区二区| 国产欧美一区二区精品婷婷| 亚洲品质自拍视频网站| 亚洲妇熟xx妇色黄| 国模套图日韩精品一区二区| 不卡的电影网站| 欧美日韩国产乱码电影| 26uuu精品一区二区在线观看| 欧美激情一区二区三区不卡| 亚洲欧美一区二区三区孕妇| 午夜久久久影院| 国产盗摄女厕一区二区三区| 91视频91自| 欧美成人精品二区三区99精品| 国产精品视频一二三| 亚洲1区2区3区4区| 国产成人综合视频| 91福利小视频| 久久久99久久精品欧美| 亚洲一区二区中文在线| 国模大尺度一区二区三区| 色综合色综合色综合| 精品国产污网站| 亚洲午夜久久久久久久久电影网 | 欧美激情资源网| 亚洲国产精品久久不卡毛片| 国产一区不卡视频| 欧美三级电影网站| 中日韩av电影| 日本欧美在线观看| 色婷婷久久99综合精品jk白丝| 亚洲精品一区在线观看| 亚洲成人高清在线| 不卡欧美aaaaa| xfplay精品久久| 亚洲综合丝袜美腿| 99精品国产视频| 久久久综合网站| 久久av老司机精品网站导航| 精品视频一区二区不卡| 国产精品无人区| 国产麻豆欧美日韩一区| 日韩一区二区三区精品视频| 依依成人精品视频| 成人av先锋影音| 久久九九99视频| 久久99久久99| 日韩三级视频中文字幕| 日韩高清欧美激情| 在线观看网站黄不卡| 自拍偷拍欧美精品| av资源网一区| 成人欧美一区二区三区在线播放| 精品一区二区三区久久| 91精品国产色综合久久| 亚洲观看高清完整版在线观看| 91视频在线看| 亚洲色图一区二区| 色哟哟日韩精品| 亚洲综合在线电影| 欧美午夜精品一区二区蜜桃| 亚洲免费观看视频| 色综合久久精品| 亚洲一区二区三区影院| 欧美日韩综合不卡| 午夜伦理一区二区| 日韩一级高清毛片| 精一区二区三区| 国产欧美日产一区|