⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 厦新 E8手机 ROM 编辑工具源码 编译平台Delphi7
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{   该软件用于夏新E8手机ROM的修改
  著作权所有(c) 2007 HAM
    ham127@163.com

  本程序为自由软件;
    您可依据自由软件基金会所发表的GNU通用公共授权条款规定,就本程序再为散布与/或修改;
    无论您依据的是本授权的第二版(GNU GPL v2)或(您自行选择的)任一日后发行的版本。
  本程序系基于使用目的而加以散布,然而不负任何担保责任;
    亦无对适售性或特定目的适用性所为的默示性担保。详情请参照GNU通用公共授权。
  您应已收到附随于本程序的GNU通用公共授权的副本;
  如无,请写信至自由软件基金会:59 Temple Place ?C Suite 330, Boston, Ma 02111-1307, USA。


再次说明:遵循GNU通用公共授权条款规定,修改再发布须附带更新说明且有义务提供源码,
          不得用于有偿服务}

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ValEdit, ExtCtrls,  ComCtrls, XPMan,
  Buttons, Clipbrd, StrUtils, Grids, ActnList, CustomizeDlg;//加入clipbrd和STR单元

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Button1: TButton;
    Button2: TButton;
    rom_name_edit: TEdit;
    file_name_edit: TEdit;
    Label1: TLabel;
    OpenDialog2: TOpenDialog;
    Button3: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    ROM1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    labelededit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    Button4: TButton;
    Button5: TButton;
    Edit1: TEdit;
    ProgressBar1: TProgressBar;
    StatusBar1: TStatusBar;
    StaticText1: TStaticText;
    N4: TMenuItem;
    LabeledEdit3: TLabeledEdit;
    CheckBox1: TCheckBox;
    Button7: TButton;
    LabeledEdit4: TLabeledEdit;
    LabeledEdit5: TLabeledEdit;
    RichEdit1: TRichEdit;
    name1: TLabel;
    name2: TLabel;
    name3: TLabel;
    name9: TLabel;
    Version: TLabel;
    e1: TMenuItem;
    Button8: TButton;
    Button9: TButton;
    Label3: TLabel;
    Button10: TButton;
    Button11: TButton;
    CheckBox3: TCheckBox;
    del_btn: TButton;
    CheckBox2: TCheckBox;
    OpenDialog3: TOpenDialog;
    Load_del_Btn: TButton;
    Data_sel_SB: TSpeedButton;
    Name_sel_SB: TSpeedButton;
    ListView1: TListView;
    Log_PopupMenu: TPopupMenu;
    RichCopy: TMenuItem;
    RichClear: TMenuItem;
    RichN7: TMenuItem;
    RichSelALL: TMenuItem;
    List_PopupMenu: TPopupMenu;
    ListCopyCap: TMenuItem;
    ListCopyLine: TMenuItem;
    ListN7: TMenuItem;
    ListDelFile: TMenuItem;
    ListView2: TListView;
    OpenDialog4: TOpenDialog;
    Button6: TButton;

    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure labelededit1KeyPress(Sender: TObject; var Key: Char);
    procedure labelededit1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure LabeledEdit2KeyPress(Sender: TObject; var Key: Char);
    procedure Button4Click(Sender: TObject);
    procedure LabeledEdit2KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure labelededit1Change(Sender: TObject);
    procedure LabeledEdit2Change(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure About_btClick(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure LabeledEdit4KeyPress(Sender: TObject; var Key: Char);
    procedure LabeledEdit4KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure LabeledEdit3KeyPress(Sender: TObject; var Key: Char);
    procedure ROM1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure LabeledEdit5KeyPress(Sender: TObject; var Key: Char);
    procedure LabeledEdit5KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure LabeledEdit5Change(Sender: TObject);
    procedure labelededit1DblClick(Sender: TObject);
    procedure LabeledEdit5DblClick(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button10MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure CheckBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button3MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button4MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button5MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button9MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure CheckBox2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button6MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button7MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button8MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure LabeledEdit2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure LabeledEdit4MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure labelededit1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure LabeledEdit5MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure name9MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button11Click(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    procedure Button11MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure del_btnClick(Sender: TObject);
    procedure del_btnMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure CheckBox3MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label3MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure Label2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure CheckBox2Click(Sender: TObject);
    procedure Load_del_BtnClick(Sender: TObject);
    procedure Load_del_BtnMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure Name_sel_SBClick(Sender: TObject);
    procedure ListView1ColumnClick(Sender: TObject; Column: TListColumn);
    procedure RichCopyClick(Sender: TObject);
    procedure RichClearClick(Sender: TObject);
    procedure RichSelALLClick(Sender: TObject);
    procedure ListCopyCapClick(Sender: TObject);
    procedure ListCopyLineClick(Sender: TObject);
    procedure ListDelFileClick(Sender: TObject);
    procedure Data_sel_SBClick(Sender: TObject);
    procedure ListView2DblClick(Sender: TObject);
    procedure ListView2KeyPress(Sender: TObject; var Key: Char);
    procedure Button6Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
//    function get_rom_info():integer;
    //function add_conv(in_add:string;to_rom:boolean):string;
    //function getname(iFileHandle:integer;in_address:string):string;
    //function get_ibyte(iFileHandle:integer;in_address:longword;byte_num:integer):string;
    //function ihextoint(in_hex:string):string;
    //function get_info(iFileHandle:integer;in_address:longword):string;
    //function get_info_struct(iFileHandle:integer;in_address:longword;iname:string;num:integer):string;
    //function get_info_mod(iFileHandle:integer;in_address:longword):string;
//    function get_name_sp(iFileHandle:integer;name_len:integer):longword;
    function get_version():string;
  end;

var
  Form1: TForm1;
  rom_base:Longword;
  rom_size:Longword;
  now_address:Longword ;
  max_address:Longword ;
  add_file_size:integer ;
  data_address:string;
  name_address:Longword;
  rom_end:string;
  rom_in,rom_mod_start:Longword;
  num_mod,num_filent,num_org:integer;
  add_file_name:Pchar;
  e8_ini:string;
  debug:boolean;
  m_bSort:boolean;
  StartEdit,EndEdit:tLabelededit;

//const
  //rom_base=Longword($80040000);

implementation

uses about;

{$R *.dfm}

//function CECompress(indata:Pbyte;inlength:Dword;outdata:Pbyte; outlength:Dword; i_1:integer; i_4096:integer):dword;
//cdecl;
//stdcall;
//external 'CECompressv4.dll';

function TForm1.get_version():string;
const
  InfoNum = 10;
  InfoStr: array[1..InfoNum] of string = ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName', 'LegalCopyright', 'LegalTradeMarks', 'OriginalFileName', 'ProductName', 'ProductVersion', 'Comments');
var
  S: string;
  n, Len: DWORD;
  Buf: PChar;
  Value: PChar;
begin
  S := Application.ExeName;
  n := GetFileVersionInfoSize(PChar(S), n);
  if n > 0 then
  begin

    Buf := AllocMem(n);
    //Memo1.Lines.Add('VersionInfoSize = ' + IntToStr(n));
    GetFileVersionInfo(PChar(S), 0, n, Buf);
    //for i := 1 to InfoNum do
      //if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\' + InfoStr[i]), Pointer(Value), Len) then
       if VerQueryValue(Buf, PChar('StringFileInfo\080403A8\FileVersion'), Pointer(Value), Len) then
        result:=( '版本:' + Value);
    FreeMem(Buf, n);
  end
  else
    result:=('No version information found');
end;

procedure op_log(in_message:string);
begin
with Form1.RichEdit1 do
 begin
      SelectAll;
      SelAttributes.Style:=[];
      SelAttributes.Color:=clBlack;
      Text:=in_message+#13+Text{TimeToStr(Time)+};
      //SetFocus;
      SelStart := 0;
      SelLength := Length(in_message);
      SelAttributes.Style:=[fsBold];
      SelAttributes.Color:=clBlue;
  end;
end;

function ihextoint(in_hex:string):string;
begin
result:=inttostr(strtoint64def(('$'+in_hex),0));
end;

function address_conv(in_add:string;to_virtual_add:boolean):string;
  var
  i:Longword;
  s:string;
begin
  s:=trim(in_add);
  with Form1 do
  if length(s)>8 then  begin showmessage('地址数据错误!'); exit; end;
  i:= strtoint64def(('$'+s),0);
  if (to_virtual_add=false) and (i>=rom_base) then
  begin
      i:=i-rom_base;
  end
  else if (to_virtual_add=true) and (i<rom_base) then
      begin
      i:=i+rom_base;
      end;
  result:=inttohex(i,8);
end;

function getname(iFileHandle:integer;in_address:string):string;
var
Buffer:array[0..255] of Byte;
i:integer;
s:string;
begin
 FileSeek(iFileHandle,strtoint64def('$'+address_conv(in_address,false),0),0);
 i:=-1;
 repeat
 i:=i+1;
 FileRead(iFileHandle, Buffer[i], 1);
 s:=(s+chr(Buffer[i]));
 Until ((integer(Buffer[i])=0)or(i>=255));
 result:=copy(s,1,i);
end;


function get_ibyte(iFileHandle:integer;in_address:longword;byte_num:integer):string;
var
Buffer: PChar;
//Buffer:array[0..255] of Byte;
i:integer;
s:string;
begin
    Buffer := PChar(AllocMem(byte_num+1));
    FileSeek(iFileHandle,in_address,0);
    FileRead(iFileHandle, Buffer^, byte_num);
    for i:=0 to byte_num-1 do s:=inttohex(integer(Buffer[i]),2)+s;
    result:=s;

 FreeMem(Buffer);
end;


function get_info(iFileHandle:integer;in_address:longword):string;
var
s,s1,s2,srom_size:string;
i:integer;
begin
//80ED33608170CF9800000C9B00003E3201C657868A0D4F0000000801
  begin
  s:=get_ibyte(iFileHandle,in_address-28,28);
  s1:=copy(s,1,8);
  srom_size:=copy(s,17,8);
  s2:=inttohex(strtoint64def('$'+s1,0)+strtoint64def('$'+srom_size,0),8);

  with Form1.ListView1 do
    begin
    Items.Add;//一定要add
    i:=Items.Count-1;
    Items[i].Caption:=getname(iFileHandle,copy(s,9,8));
    Items[i].SubItems.add(s1);
    Items[i].SubItems.add(s2);
    Items[i].SubItems.add(ihextoint(srom_size));
    Items[i].SubItems.add(ihextoint(copy(s,25,8)));
    Items[i].SubItems.add('F'+copy(s,49,8));
    end;
  end;
end;

function get_info_struct(iFileHandle:integer;in_address:longword;iname:string;num:integer):string;
var
add1,add2,n1,n2,isize:string;
i,x:integer;
s:string;
begin
  s:=get_ibyte(iFileHandle,in_address,24*num);//已经倒序排列
for i:=0 to num-1 do
  begin
  add1:=copy(s,48*(num-i-1)+17,8);
  n1:=copy(s,48*(num-i-1)+41,8);
  n2:=copy(s,48*(num-i-1)+25,8);
  //if strtointdef('$'+n1,-1)>strtointdef('$'+n2,0) then isize:=n2
  if n1>n2 then isize:=n2
   else  isize:=n1;
   add2:=inttohex(strtoint64def('$'+add1,0)+strtoint64def('$'+isize,0),8); //以小Size的计算结束地址

  with Form1.ListView1 do
    begin
    Items.Add;//一定要add
    x:=Items.Count-1;
    Items[x].Caption:='  '+iname+'_'+inttostr(i);
    Items[x].SubItems.add(add1);
    Items[x].SubItems.add(add2);
    Items[x].SubItems.add(inttostr(strtointdef('$'+isize,-1)));
    Items[x].SubItems.add('--');
    Items[x].SubItems.add('M--------');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -