1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
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.
|