| 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; | 
|---|