Mark Whitley | bac75ac | 2001-03-14 21:04:07 +0000 | [diff] [blame] | 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: |
Eric Andersen | bdfd0d7 | 2001-10-24 05:00:29 +0000 | [diff] [blame] | 6 | # - In the busybox directory type 'examples/mk2knr.pl files-to-convert' |
Mark Whitley | bac75ac | 2001-03-14 21:04:07 +0000 | [diff] [blame] | 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 | |
Mark Whitley | 31868b8 | 2001-04-17 17:37:47 +0000 | [diff] [blame] | 22 | # if no files were specified, print usage |
| 23 | die "usage: $0 file.c | file.h\n" if scalar(@ARGV) == 0; |
Mark Whitley | bac75ac | 2001-03-14 21:04:07 +0000 | [diff] [blame] | 24 | |
| 25 | # prepare the "convert me" file |
| 26 | open(CM, ">$convertme") or die "convertme.pl $!"; |
| 27 | print CM "#!/usr/bin/perl -p -i\n\n"; |
| 28 | |
| 29 | # process each file passed on the cmd line |
| 30 | while (<>) { |
| 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 |
Mark Whitley | 31868b8 | 2001-04-17 17:37:47 +0000 | [diff] [blame] | 34 | # matched by the "check for mixed case" regexps below |
Mark Whitley | bac75ac | 2001-03-14 21:04:07 +0000 | [diff] [blame] | 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 | |
Mark Whitley | 31868b8 | 2001-04-17 17:37:47 +0000 | [diff] [blame] | 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 | |
Mark Whitley | bac75ac | 2001-03-14 21:04:07 +0000 | [diff] [blame] | 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 |
| 79 | close(CM); |
| 80 | chmod 0755, $convertme; |
| 81 | |
Mark Whitley | 31868b8 | 2001-04-17 17:37:47 +0000 | [diff] [blame] | 82 | # print a helpful help message |
| 83 | print "Done. Scheduled name changes are in $convertme.\n"; |
| 84 | print "Please review/modify it and then type ./$convertme to do the search & replace.\n"; |