66 lines
2.1 KiB
ObjectPascal
66 lines
2.1 KiB
ObjectPascal
/// sample program to create .mab files from existing .map files
|
|
// - if some .map file name is specified (you can use wild chars), will
|
|
// process all those .map files, then create the corresponding .mab files
|
|
// - if some .exe/.dll file name is specified (you can use wild chars), will
|
|
// process all matching .exe/.dll files with an associated .map file, and will
|
|
// create the .mab files, then embedd the .mab content to the .exe/.dll
|
|
// - if no file name is specified, will process '*.map' into '*.mab'
|
|
// - you can make map2mapb.exe file small if you define LVCL as conditional in
|
|
// the Project options and set the ..\lib\LVCL directories as expected
|
|
program Map2Mab;
|
|
|
|
{$APPTYPE CONSOLE}
|
|
|
|
uses
|
|
{$I SynDprUses.inc} // use FastMM4 on older Delphi, or set FPC threads
|
|
SysUtils,
|
|
SynCommons,
|
|
SynLog;
|
|
|
|
procedure Process(const FileName: TFileName);
|
|
var SR: TSearchRec;
|
|
Path, FN: TFileName;
|
|
Ext: integer;
|
|
AllOk: boolean;
|
|
begin
|
|
AllOk := True;
|
|
Ext := GetFileNameExtIndex(FileName,'map,exe,dll,ocx,bpl');
|
|
if (Ext>=0) and (FindFirst(FileName,faAnyFile,SR)=0) then
|
|
try
|
|
Path := ExtractFilePath(FileName);
|
|
repeat
|
|
FN := Path+SR.Name;
|
|
if (SR.Name[1]<>'.') and (faDirectory and SR.Attr=0) then
|
|
try
|
|
with TSynMapFile.Create(FN,true) do // true = .map -> .mab
|
|
try
|
|
if not HasDebugInfo then begin
|
|
WriteLn('Error: no Debug Info found on ',FN);
|
|
AllOk := False;
|
|
end else if (Ext>0) then // has debug info and is not a map
|
|
SaveToExe(FN);
|
|
finally
|
|
Free;
|
|
end;
|
|
except
|
|
on E: Exception do begin // ignore any problem here: just print it and process next file
|
|
WriteLn('Error: ', E.ClassName,' ',E.Message);
|
|
AllOk := False;
|
|
end;
|
|
end;
|
|
until FindNext(SR)<>0;
|
|
finally
|
|
FindClose(SR);
|
|
end else begin
|
|
WriteLn('Error: cant find any file to process matching: ', FileName);
|
|
ExitCode := 2;
|
|
end;
|
|
if not AllOk then
|
|
ExitCode := 1;
|
|
end;
|
|
|
|
begin
|
|
if paramCount>0 then
|
|
Process(paramstr(1)) else
|
|
Process('*.map');
|
|
end. |