| Разработка и ромхакинг > Ромхакинг и программирование |
| Помогите скомпилировать прогу в Delphi |
| (1/1) |
| pedro:
--- Код: ---unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, strutils, unit3; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Button2: TButton; OpenDialog1: TOpenDialog; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} //pac Type Pack_Head = Packed Record Magic:Array[0..3] of AnsiChar; Data_Offset:DWORD; File_Size:DWORD; Entries_Count:DWORD; Encode_Flag:DWORD; File_Name_Length:DWORD; Reserved1:DWORD; Reserved2:DWORD; End; Pack_Entries = Record //$20 File_Name:Array of Ansichar; File_Counter:DWORD; Start_Offset:DWORD; Length:Dword; Reserved:Array of DWORD; End; Const //Magic Const Pak_Magic:Ansistring=’FPAC’; procedure DBG_WRITETOFILE(Input:TmemoryStream;filename:string); var Tmp:Integer; Buffer:pbyte; pos:Int64; begin pos:=input.Position; input.Position:=0; Getmem(buffer,Input.Size); input.Read(buffer[0],Input.Size); tmp:=fileopen(filename+’.tmp’,fmopenwrite); if tmp=-1 then tmp:=filecreate(filename+’.tmp’); filewrite(tmp,buffer[0],Input.Size); fileclose(tmp); Freemem(buffer); input.Position:=pos; end; Function SetLen(var entries:Array of Pack_Entries;const Namelength:DWORD;const Num:Integer):Boolean; var tmp_counter:Integer; length:Integer; begin Result:=True; length:=($14 -(Namelength mod $10)) div 4; for tmp_counter := 0 to Num-1 do begin setlength(entries[tmp_counter].File_Name, Namelength); setlength(entries[tmp_counter].Reserved,length); end; end; Function ReadMyRec(Handle:Integer;var Buffer:Pack_Entries;const Namelength:DWORD):Boolean; begin Result:=True; FileRead(Handle,Buffer.File_Name[0],Namelength); FileRead(Handle,Buffer.File_Counter,4); FileRead(Handle,Buffer.Start_Offset,4); FileRead(Handle,Buffer.Length,4); FileRead(Handle,Buffer.Reserved[0],($14 -(Namelength mod $10))); end; Function PAC_Ana_Res(str_File_Path:String):Boolean; //Res Ana Var hdl_File_Handle:Integer; Head:Pack_Head; DataBuffer:Pbyte; Int_vnCounter,Int_hd_Size:Integer; tmp_FileName:Ansistring; Out_Handle:Integer; entries:Array of Pack_Entries; begin Result:=True; try hdl_File_Handle:=fileopen(str_File_Path,fmopenread); if hdl_File_Handle=-1 then raise Exception.Create(‘Can Not Open File’); FileRead(hdl_File_Handle,Head.Magic[0],sizeof(Pack_Head)); //文件头 if head.Magic<>Pak_Magic then Exception.Create(‘Magic Error’); setlength(entries,head.Entries_Count); SetLen(entries,head.File_Name_Length,head.Entries_Count); Int_hd_Size:=((((head.File_Name_Length + $c) div $10) * $10) + $10)*head.Entries_Count; for Int_vnCounter := 0 to head.Entries_Count – 1 do ReadMyRec(hdl_File_Handle,entries[Int_vnCounter],head.File_Name_Length); /////// Int_hd_Size:=Int_hd_Size+sizeof(Pack_Head); DataBuffer:=sysgetmem(head.File_Size-Int_hd_Size); FileRead(hdl_File_Handle,DataBuffer[0],head.File_Size-Int_hd_Size); str_File_Path:=ExtractFilePath(str_File_Path)+’OUTPUT\’+ ChangeFileExt(extractfilename(str_File_Path),”) +’\'; FileClose(hdl_File_Handle); setlength(tmp_FileName,head.File_Name_Length); for Int_vnCounter := 0 to head.Entries_Count – 1 do begin move(entries[Int_vnCounter].File_Name[0],Pbyte(tmp_FileName)^,head.File_Name_Length); if not DirectoryExists(ExtractFilePath(str_File_Path+tmp_FileName)) then ForceDirectories(ExtractFilePath(str_File_Path+tmp_FileName)); Out_Handle:=Filecreate(str_File_Path+tmp_FileName); if Out_Handle=-1 then Out_Handle:=Fileopen(str_File_Path+tmp_FileName,fmopenwrite); FileWrite(Out_Handle,DataBuffer[entries[Int_vnCounter].Start_Offset],entries[Int_vnCounter].Length); FileClose(Out_Handle); end; sysfreemem(DataBuffer); except Result:=False; Exit; end; end; //string.atf //其实就是艹字限用的 type Head_Rec = Packed Record Magic:Array[0..3] of Ansichar; Count:DWORD; RESERVED:DWORD; RESERVED1:DWORD; End; Save_Rec = Packed Record Offset:DWORD; COUNT:DWORD; SIZE:DWORD; RESERVED:DWORD; End; Cont_Rec = Packed Record Offset:DWORD; COUNT:DWORD; SIZE:DWORD; RESERVED:DWORD; End; Str_Rec = Packed Record Offset:DWORD; size1:DWORD; SIZE:DWORD; RESERVED:DWORD; End; Text_Rec = Packed Record Offset:DWORD; Unicode_Length:DWORD; SIZE:DWORD; RESERVED:DWORD; End; File_Head = Packed Record Header:Head_Rec; Save:Save_Rec; Cont:Cont_Rec; Str:Str_Rec; Text:Text_Rec; End; Func_Rec = Packed Record Str1_Offset:DWORD; Str1_Length:DWORD; RESERVED:DWORD; RESERVED1:DWORD; Str2_Offset:DWORD; Str2_Length:DWORD; RESERVED2:DWORD; RESERVED3:DWORD; End; Function PAC_Ana_Scr(str_File_Path:String):Boolean; var head:File_Head; hdl_File_Handle:Integer; Out_Handle:Text; Buffer,buffer1:Pbyte; Func:Array of Func_Rec; i:integer; tmpstr:Ansistring; untmpstr:string; begin Result:=True; try hdl_File_Handle:=fileopen(str_File_Path,fmopenread); if hdl_File_Handle=-1 then raise Exception.Create(‘Can Not Open File’); FileRead(hdl_File_Handle,Head.Header.Magic[0],$50); //文件头 if head.Header.Magic<>‘ATF’#0 then Exception.Create(‘Magic Error’); Setlength(Func,Head.Cont.COUNT div 2); FileSeek(hdl_File_Handle,Head.Cont.Offset,0); FileRead(hdl_File_Handle,Func[0].Str1_Offset,Head.Cont.SIZE); Buffer:=sysgetmem(head.Str.size1); Buffer1:=sysgetmem(head.Text.SIZE); FileSeek(hdl_File_Handle,Head.Str.Offset,0); FileRead(hdl_File_Handle,buffer[0],Head.Str.SIZE); FileSeek(hdl_File_Handle,Head.Text.Offset,0); FileRead(hdl_File_Handle,buffer1[0],Head.Text.SIZE); AssignFile(Out_Handle,str_File_Path+’.TXT’); Rewrite(Out_Handle); Write(Out_Handle,’//FOR BCS Hatsunetakumi’#13#10); for I := 0 to Head.Cont.COUNT div 2 -1 do begin setlength(tmpstr,Func[i].Str1_Length); Move(buffer[Func[i].Str1_Offset],pbyte(tmpstr)^,Func[i].Str1_Length); setlength(untmpstr,Func[i].Str2_Length); Move(buffer1[Func[i].Str2_Offset*2],pbyte(untmpstr)^,Func[i].Str2_Length*2); Write(Out_Handle,format(‘%.3d’,[i]),’ ‘,tmpstr,’ ‘,untmpstr,#13#10); end; close(Out_Handle); sysfreemem(buffer); sysfreemem(buffer1); except Result:=False; Exit; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Opendialog1.Execute(); if opendialog1.FileName<>” then Edit1.Text:=opendialog1.FileName; end; procedure TForm1.Button2Click(Sender: TObject); begin if PAC_Ana_Res(Edit1.Text) then MessageBox(Application.Handle,’Finished’,'DeCode’,0) else MessageBox(Application.Handle,’Failed’,'DeCode’,0); end; procedure TForm1.Button3Click(Sender: TObject); begin if PAC_Ana_Scr(Edit1.Text) then MessageBox(Application.Handle,’Finished’,'DeCode’,0) else MessageBox(Application.Handle,’Failed’,'DeCode’,0); end; procedure TForm1.Button6Click(Sender: TObject); begin Edit1.Text:=BrowseForFolder(’233′); end; function MakeFileList(Path,FileExt:string):TStringList ; var sch:TSearchrec; begin Result:=TStringlist.Create; if rightStr(trim(Path), 1) <> ‘\’ then Path := trim(Path) + ‘\’ else Path := trim(Path); if not DirectoryExists(Path) then begin Result.Clear; exit; end; if FindFirst(Path + ‘*’, faAnyfile, sch) = 0 then begin repeat Application.ProcessMessages; if ((sch.Name = ‘.’) or (sch.Name = ‘..’)) then Continue; if DirectoryExists(Path+sch.Name) then begin Result.AddStrings(MakeFileList(Path+sch.Name,FileExt)); end else begin if (UpperCase(extractfileext(Path+sch.Name)) = UpperCase(FileExt)) or (FileExt=’.*’) then Result.Add(Path+sch.Name); end; until FindNext(sch) <> 0; SysUtils.FindClose(sch); end; end; procedure TForm1.Button4Click(Sender: TObject); VAR TMP:TSTRINGLIST; I:INTEGER; begin TMP:=TSTRINGLIST.Create; TMP:=MAKEFILELIST(EXTRACTFILEPATH(Edit1.Text),’.pac’); for I := 0 to TMP.Count – 1 do PAC_Ana_Res(TMP[I]); MessageBox(Application.Handle,’Finished’,'DeCode’,0); end; procedure TForm1.Button5Click(Sender: TObject); VAR TMP:TSTRINGLIST; I:INTEGER; begin TMP:=TSTRINGLIST.Create; TMP:=MAKEFILELIST(EXTRACTFILEPATH(Edit1.Text),’.atf’); for I := 0 to TMP.Count – 1 do PAC_Ana_Scr(TMP[I]); MessageBox(Application.Handle,’Finished’,'DeCode’,0); end; end. --- Конец кода --- это распаковщик FPAK архивов, скомуниздил код с одного из нипонских форумов а вот собрать не удалось) Пробовал скомпилировать через delphi7, но тот жаловался на отсутствие unit3, я хз что это и где его брать. |
| GManiac:
Unit3 надо искать на том же форуме, наверно :) Добавлено позже: Код ужасный, конечно. Unit3, скорей всего не нужен, но дельфи ругается на указатели. Добавлено позже: Вот проект с формой из этого модуля. Процедура Button6Click не нужа, она какую-то ерунду делает. |
| pedro:
GManiac, Unit3 там не было, cпасибо :) Добавлено позже: тему можно крыть :D |
| lupus:
а где используются эти FPAK |
| pedro:
lupus,blazblue ct и cs |
| Навигация |
| Главная страница сообщений |