1#!/usr/bin/perl -w
2
3$errfile = 0;
4$errfunc = 0;
5$errcount = 0;
6$errtotcount = 0;
7$totcount = 0;
8$totfile = 0;
9$filelib = "unknown";
10$filename = "unknown";
11$funcline = "Function 'undefined'\n";
12
13open (LOG, ">embossdocreport.log") || die "Cannot open embossdocreport.log";
14
15%badfiles = ();
16%badcount = ();
17%badtotfiles = ();
18
19while (<>) {
20    $newfunc = 0;
21    $newfile = 0;
22    if (/^Function (\S+)/) {
23	$funcline = $_;
24	$funcname = $1;
25	$newfunc = 1;
26    }
27    if (/^Function list (\S+)/) {
28	$funcline = $_;
29	$funcname = $1;
30	$newfunc = 1;
31    }
32    elsif (/^Obsolete (\S+)/) {
33	$funcline = $_;
34	$funcname = $1;
35	$newfunc = 1;
36    }
37    elsif (/^Datasection (\S+)/) {
38	$funcline = $_;
39	$funcname = $1;
40	$newfunc = 1;
41    }
42    elsif (/^Section (\S+)/) {
43	$funcline = $_;
44	$funcname = $1;
45	$newfunc = 1;
46    }
47    elsif (/^Filesection (\S+)/) {
48	$funcline = $_;
49	$funcname = $1;
50	$newfunc = 1;
51    }
52    elsif (/^Static function (\S+)/) {
53	$funcline = $_;
54	$funcname = $1;
55	$newfunc = 1;
56    }
57    elsif (/^Macro (\S+)/) {
58	$funcline = $_;
59	$funcname = $1;
60	$newfunc = 1;
61    }
62    elsif (/^Data type (\S+)/) {
63	$funcline = $_;
64	$funcname = $1;
65	$newfunc = 1;
66    }
67    elsif (/^Enumeration (\S+)/) {
68	$funcline = $_;
69	$funcname = $1;
70	$newfunc = 1;
71    }
72    elsif (/^Static data type (\S+)/) {
73	$funcline = $_;
74	$funcname = $1;
75	$newfunc = 1;
76    }
77
78    elsif (/^Typedef data type (\S+)/) {
79	$funcline = $_;
80	$funcname = $1;
81	$newfunc = 1;
82    }
83
84    elsif (/^set pubout \'([^\']+)\' lib \'([^\']+)\'/) {
85	$newfileline = $_;
86	$newfilename = $1;
87	$newfilelib = $2;
88	$newfile = 1;
89	if (/ type \'([^\']+)\'/) {
90	    $newfiletype = $1;
91	}
92	else {
93	    $newfiletype = "";
94	}
95    }
96
97#    elsif (/^bad or missing docheader for (\S+)/) {
98#	$funcname = $1;
99#	$newfunc = 1;
100#    }
101#
102#    elsif (/^bad docheader for (\S+) precedes (\S+)/) {
103#	$funcname = $2;
104#	$newfunc = 1;
105#    }
106
107    elsif (/^bad (\S+)/) {
108	$badcount{$1}++;
109	if (!$errcount) {
110	    if (!$errfile) {
111		print LOG "=============================\n";
112		print LOG $newfileline;
113	    }
114	    print LOG "  ".$funcline;
115	}
116	$errcount++;
117	print LOG "    ".$_;
118    }
119
120    elsif (/^[*][*] [@]/) {
121	print LOG $_;
122    }
123
124    elsif (/^[.][.] File \/\S+\/([^\/]+)\/([^\/.]+)[.]([^\/.]+)$/) {
125	$newfileline = $_;
126	$newfilename = $2;
127	$newfilelib = $1;
128	$newfile = 1;
129	if ($3 eq 'c') {
130	    $newfiletype = "source";
131	}
132	elsif ($3 eq 'h') {
133	    $newfiletype = "include";
134	}
135	else {
136	    $newfiletype = "";
137	}
138	$funcline = "";
139	$funcname = "unknown";
140    }
141
142    if ($newfunc || $newfile) {
143	if ($errcount) {
144	    $errtotcount += $errcount;
145	    $totcount += $errcount;
146	    $errfunc++;
147	    $errfile++;
148	$errcount = 0;
149	}
150    }
151    if ($newfile) {
152	if ($errfile) {
153	    $badfiles{$filelib."_".$filename}=$errfile;
154	    $badtotfiles{$filelib."_".$filename}=$errtotcount;
155	    $totfile++;
156	}
157	$errfile = 0;
158	$errtotcount = 0;
159	$filename = $newfilename;
160	if ($newfiletype ne "") {
161	    if ($newfiletype eq "include") {$filename .= ".h"}
162	    elsif ($newfiletype eq "source") {$filename .= ".c"}
163	    else {$filename .= ".$newfiletype"}
164	}
165	$filelib = $newfilelib;
166    }
167
168
169}
170
171if ($errcount) {
172    $totcount += $errcount;
173    $errtotcount += $errcount;
174    $errfunc++;
175    if (!$errfile) {
176	$totfile++;
177    }
178    $errfile++;
179}
180
181if ($errfile) {
182    $badfiles{$filelib."_".$filename}=$errfile;
183    $badtotfiles{$filelib."_".$filename}=$errtotcount;
184    $totfile++;
185}
186
187foreach $x (sort (keys (%badfiles))) {
188    printf "%4d %4d %s\n", $badtotfiles{$x}, $badfiles{$x}, $x;
189}
190
191print STDERR "$totcount errors in $errfunc functions in $totfile files\n";
192close LOG;
193
194foreach $b (sort(keys(%badcount))) {
195    printf STDERR "%4d %s\n", $badcount{$b},$b;
196}
197