1 | #!/usr/local/bin/perl |
---|
2 | # |
---|
3 | # Script to process the output of purify in terms of memory use. |
---|
4 | # |
---|
5 | # Abelardo Pardo <abel@vlsi.colorado.edu> |
---|
6 | # |
---|
7 | # Revision [$Id: createfunctionmap,v 1.4 1996/12/18 23:43:46 hsv Exp $] |
---|
8 | |
---|
9 | require 5.001; |
---|
10 | use Getopt::Long; |
---|
11 | |
---|
12 | # Define default variables |
---|
13 | # |
---|
14 | $version = 1.3; |
---|
15 | |
---|
16 | # Initialize the different options |
---|
17 | # |
---|
18 | $opt_h = 0; |
---|
19 | $opt_v = 0; |
---|
20 | |
---|
21 | # Read the options |
---|
22 | # |
---|
23 | $optionResult = GetOptions("h","v"); |
---|
24 | |
---|
25 | # Print the version if required |
---|
26 | # |
---|
27 | if ($opt_v) { |
---|
28 | print <<ENDOFMESSAGE; |
---|
29 | $0 -- Version: $version -- by Abelardo Pardo <abel\@vlsi.colorado.edu> |
---|
30 | ENDOFMESSAGE |
---|
31 | exit; |
---|
32 | } |
---|
33 | |
---|
34 | # Print the help message if required |
---|
35 | # |
---|
36 | if ($opt_h || !$optionResult) { |
---|
37 | print <<ENDOFMESSAGE; |
---|
38 | |
---|
39 | $0 - Program to extract the function declarations from C source code files and |
---|
40 | create a map of functions to files. The files must contain the declaration |
---|
41 | of the functions encapsulated between the keywords "AutomaticStart" and |
---|
42 | "AutomaticEnd". The tool "extproto" provides an automatic way to create |
---|
43 | this encapsulations in any *.[ch] file. The file must also contain a |
---|
44 | "FileName" and a "PackageName" field on its header in order for the map to |
---|
45 | be extracted correctly. |
---|
46 | |
---|
47 | Usage: |
---|
48 | $0 [-h] [-v] <files> |
---|
49 | |
---|
50 | Options: |
---|
51 | -h Print this message |
---|
52 | -v Print the version |
---|
53 | |
---|
54 | Author: Abelardo Pardo <abel\@vlsi.colorado.edu> |
---|
55 | |
---|
56 | ENDOFMESSAGE |
---|
57 | exit; |
---|
58 | } |
---|
59 | |
---|
60 | # Open the input files |
---|
61 | # |
---|
62 | foreach $filename (@ARGV) { |
---|
63 | |
---|
64 | if (open(INPUT, $filename)) { |
---|
65 | |
---|
66 | $indefinition = 0; |
---|
67 | while(<INPUT>) { |
---|
68 | chop; |
---|
69 | |
---|
70 | if (/FileName\s+\[\s*(.+)\s*\]/) { |
---|
71 | $cfilename = $1; |
---|
72 | } |
---|
73 | if (/PackageName\s+\[\s*(.+)\s*\]/) { |
---|
74 | $pkgname = $1; |
---|
75 | } |
---|
76 | if (/^\/\*\*AutomaticStart\*+\/$/) { |
---|
77 | $indefinition = 1; |
---|
78 | } |
---|
79 | if (/^\/\*\*AutomaticEnd\*+\/$/) { |
---|
80 | $indefinition = 0; |
---|
81 | } |
---|
82 | |
---|
83 | if ($indefinition == 1) { |
---|
84 | if (/static\s*.*\s+([a-zA-Z0-9_]+\(.*\))/) { |
---|
85 | $function = $1; |
---|
86 | $function =~ /([a-zA-Z0-9_]+)\(.*\)/; |
---|
87 | print "$pkgname $cfilename $1\n"; |
---|
88 | } |
---|
89 | } |
---|
90 | } |
---|
91 | close(INPUT); |
---|
92 | } |
---|
93 | else { |
---|
94 | print "Unable to open $filename. Ignoring it.\n"; |
---|
95 | } |
---|
96 | } |
---|
97 | |
---|
98 | exit; |
---|