[14] | 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; |
---|