📄 unit1.pas
字号:
{ 该软件用于夏新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 + -