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