mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-12-18 19:45:49 +01:00
120 lines
2.4 KiB
ObjectPascal
120 lines
2.4 KiB
ObjectPascal
program srcmapdump;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
uses
|
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
|
cthreads,
|
|
{$ENDIF}{$ENDIF}
|
|
Classes, SysUtils, CustApp, JSSrcMap;
|
|
|
|
type
|
|
|
|
{ TSrcMapDump }
|
|
|
|
TSrcMapDump = class(TCustomApplication)
|
|
protected
|
|
procedure DoRun; override;
|
|
procedure DumpSrcMap(SrcMapFile, aGeneratedFilename: string);
|
|
public
|
|
constructor Create(TheOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure WriteHelp; virtual;
|
|
end;
|
|
|
|
{ TSrcMapDump }
|
|
|
|
procedure TSrcMapDump.DoRun;
|
|
var
|
|
ErrorMsg, SrcMapFilename, GeneratedFilename: String;
|
|
begin
|
|
// quick check parameters
|
|
ErrorMsg:=CheckOptions('hs:g:', 'help srcmap: generatedfile:');
|
|
if ErrorMsg<>'' then begin
|
|
ShowException(Exception.Create(ErrorMsg));
|
|
Terminate;
|
|
Exit;
|
|
end;
|
|
|
|
// parse parameters
|
|
if HasOption('h', 'help') then begin
|
|
WriteHelp;
|
|
Terminate;
|
|
Exit;
|
|
end;
|
|
|
|
if not HasOption('s','srcmap') then begin
|
|
writeln('missing -s >srcmap>');
|
|
WriteHelp;
|
|
Terminate;
|
|
Exit;
|
|
end;
|
|
SrcMapFilename:=ExpandFileName(GetOptionValue('s','srcmap'));
|
|
|
|
if not HasOption('g','generatedfile') then begin
|
|
writeln('missing -g <generatedfile>');
|
|
WriteHelp;
|
|
Terminate;
|
|
Exit;
|
|
end;
|
|
GeneratedFilename:=ExpandFileName(GetOptionValue('g','generatedfile'));
|
|
|
|
DumpSrcMap(SrcMapFilename,GeneratedFilename);
|
|
|
|
// stop program loop
|
|
Terminate;
|
|
end;
|
|
|
|
procedure TSrcMapDump.DumpSrcMap(SrcMapFile, aGeneratedFilename: string);
|
|
var
|
|
SrcMap: TSourceMap;
|
|
GenSrc: TStringList;
|
|
i: Integer;
|
|
GenSrcLine, InfoLine: String;
|
|
begin
|
|
GenSrc:=TStringList.Create;
|
|
SrcMap:=TSourceMap.Create(aGeneratedFilename);
|
|
try
|
|
SrcMap.LoadFromFile(SrcMapFile);
|
|
GenSrc.LoadFromFile(aGeneratedFilename);
|
|
for i:=1 to GenSrc.Count do begin
|
|
GenSrcLine:=GenSrc[i-1];
|
|
DebugSrcMapLine(i,GenSrcLine,SrcMap,InfoLine);
|
|
writeln(GenSrcLine);
|
|
writeln(InfoLine);
|
|
end;
|
|
finally
|
|
SrcMap.Free;
|
|
GenSrc.Free;
|
|
end;
|
|
end;
|
|
|
|
constructor TSrcMapDump.Create(TheOwner: TComponent);
|
|
begin
|
|
inherited Create(TheOwner);
|
|
StopOnException:=True;
|
|
end;
|
|
|
|
destructor TSrcMapDump.Destroy;
|
|
begin
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TSrcMapDump.WriteHelp;
|
|
begin
|
|
writeln('Usage: ', ExeName, ' -h');
|
|
writeln;
|
|
writeln('-s <srcmap>');
|
|
writeln('-g <generatedfile>');
|
|
end;
|
|
|
|
var
|
|
Application: TSrcMapDump;
|
|
begin
|
|
Application:=TSrcMapDump.Create(nil);
|
|
Application.Title:='SrcMapDump';
|
|
Application.Run;
|
|
Application.Free;
|
|
end.
|
|
|