blob: d75526dbdedded0df69e05c8f39ae13d00ffda40 (
plain)
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
120
121
122
123
124
125
126
127
128
129
130
131
132
|
--
-- Preprocessor to handle library source metacomments
--
-- Limitations:
-- - line metacomments must occur at end of line with no trailing space before the line break
-- - block metacomments must start in column 1
--
-- Supported line metacomments:
--
-- --!V87
-- --V87
-- --V93
-- --V08
--
-- Supported block metacomments:
--
-- --START-!V87
-- --END-!V87
--
-- --START-V93
-- --END-V93
--
-- --START-V08
-- --END-V08
--
--
with Ada.Command_Line; use Ada.Command_Line;
with Ada.Text_IO; use Ada.Text_IO;
procedure Ghdlfilter is
type Mode_Kind is (Mode_93, Mode_87, Mode_08);
Mode : Mode_Kind;
Line : String (1 .. 128);
Len : Natural;
Comment : Boolean;
Block_Comment : Boolean;
begin
if Argument_Count /= 1 then
Put_Line (Standard_Error, "usage: " & Command_Name & " -v93|-v87|-v08");
return;
end if;
if Argument (1) = "-v93" then
Mode := Mode_93;
elsif Argument (1) = "-v87" then
Mode := Mode_87;
elsif Argument (1) = "-v08" then
Mode := Mode_08;
else
Put_Line (Standard_Error, "bad mode");
return;
end if;
Block_Comment := False;
loop
exit when End_Of_File;
Get_Line (Line, Len);
Comment := Block_Comment;
--
-- look for line metacomments
--
if Len > 6 then
if Mode = Mode_87 and ( Line (Len - 5 .. Len) = "--!V87" ) then
Comment := True;
end if;
end if;
if Len > 5 then
if Mode = Mode_87 and ( (Line (Len - 4 .. Len) = "--V93") or (Line (Len - 4 .. Len) = "--V08") ) then
Comment := True;
elsif Mode = Mode_93 and ( (Line (Len - 4 .. Len) = "--V87") or (Line (Len - 4 .. Len) = "--V08") ) then
Comment := True;
elsif Mode = Mode_08 and ( (Line (Len - 4 .. Len) = "--V87") or (Line (Len - 4 .. Len) = "--V93") ) then
Comment := True;
end if;
end if;
--
-- look for block metacomment start
--
if Len = 12
and then Mode /= Mode_93
and then Line (1 .. 12) = "--START-!V87" then
Block_Comment := True;
end if;
if Len = 11
and then Mode /= Mode_93
and then Line (1 .. 11) = "--START-V93" then
Block_Comment := True;
end if;
if Len = 11
and then Mode /= Mode_08
and then Line (1 .. 11) = "--START-V08" then
Block_Comment := True;
end if;
--
-- look for block metacomment end
--
if Len = 9 and then ( (Line (1 .. 9) = "--END-V93") or (Line (1 .. 9) = "--END-V08") ) then
Block_Comment := False;
end if;
if Len = 10 and then ( Line (1 .. 10) = "--END-!V87" ) then
Block_Comment := False;
end if;
--
-- comment output lines as needed
--
if Comment then
Put ("-- ");
end if;
Put_Line (Line (1 .. Len));
end loop;
end Ghdlfilter;
|