diff options
Diffstat (limited to 'examples/mk2knr.pl')
-rwxr-xr-x | examples/mk2knr.pl | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/examples/mk2knr.pl b/examples/mk2knr.pl new file mode 100755 index 000000000..1259b8436 --- /dev/null +++ b/examples/mk2knr.pl | |||
@@ -0,0 +1,84 @@ | |||
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 | ||
23 | die "usage: $0 file.c | file.h\n" if scalar(@ARGV) == 0; | ||
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 | ||
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 | ||
79 | close(CM); | ||
80 | chmod 0755, $convertme; | ||
81 | |||
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"; | ||