busybox/examples/mk2knr.pl
<<
>>
Prefs
   1#!/usr/bin/perl -w
   2#
   3# @(#) mk2knr.pl - generates a perl script that converts lexemes to K&R-style
   4#
   5# How to use this script:
   6#  - In the busybox directory type 'examples/mk2knr.pl files-to-convert'
   7#  - Review the 'convertme.pl' script generated and remove / edit any of the
   8#    substitutions in there (please especially check for false positives)
   9#  - Type './convertme.pl same-files-as-before'
  10#  - Compile and see if it works
  11#
  12# BUGS: This script does not ignore strings inside comments or strings inside
  13# quotes (it probably should).
  14
  15# set this to something else if you want
  16$convertme = 'convertme.pl';
  17
  18# internal-use variables (don't touch)
  19$convert = 0;
  20%converted = ();
  21
  22# if no files were specified, print usage
  23die "usage: $0 file.c | file.h\n" if scalar(@ARGV) == 0;
  24
  25# prepare the "convert me" file
  26open(CM, ">$convertme") or die "convertme.pl $!";
  27print CM "#!/usr/bin/perl -p -i\n\n";
  28
  29# process each file passed on the cmd line
  30while (<>) {
  31
  32        # if the line says "getopt" in it anywhere, we don't want to muck with it
  33        # because option lists tend to include strings like "cxtzvOf:" which get
  34        # matched by the "check for mixed case" regexps below
  35        next if /getopt/;
  36
  37        # tokenize the string into just the variables
  38        while (/([a-zA-Z_][a-zA-Z0-9_]*)/g) {
  39                $var = $1;
  40
  41                # ignore the word "BusyBox"
  42                next if ($var =~ /BusyBox/);
  43
  44                # this checks for javaStyle or szHungarianNotation
  45                $convert++ if ($var =~ /^[a-z]+[A-Z][a-z]+/);
  46
  47                # this checks for PascalStyle
  48                $convert++ if ($var =~ /^[A-Z][a-z]+[A-Z][a-z]+/);
  49
  50                # if we want to add more checks, we can add 'em here, but the above
  51                # checks catch "just enough" and not too much, so prolly not.
  52
  53                if ($convert) {
  54                        $convert = 0;
  55
  56                        # skip ahead if we've already dealt with this one
  57                        next if ($converted{$var});
  58
  59                        # record that we've dealt with this var
  60                        $converted{$var} = 1;
  61
  62                        print CM "s/\\b$var\\b/"; # more to come in just a minute
  63
  64                        # change the first letter to lower-case
  65                        $var = lcfirst($var);
  66
  67                        # put underscores before all remaining upper-case letters
  68                        $var =~ s/([A-Z])/_$1/g;
  69
  70                        # now change the remaining characters to lower-case
  71                        $var = lc($var);
  72
  73                        print CM "$var/g;\n";
  74                }
  75        }
  76}
  77
  78# tidy up and make the $convertme script executable
  79close(CM);
  80chmod 0755, $convertme;
  81
  82# print a helpful help message
  83print "Done. Scheduled name changes are in $convertme.\n";
  84print "Please review/modify it and then type ./$convertme to do the search & replace.\n";
  85