summaryrefslogtreecommitdiff
path: root/i/pc104/initrd/conf/busybox/examples/mk2knr.pl
diff options
context:
space:
mode:
Diffstat (limited to 'i/pc104/initrd/conf/busybox/examples/mk2knr.pl')
-rwxr-xr-xi/pc104/initrd/conf/busybox/examples/mk2knr.pl84
1 files changed, 84 insertions, 0 deletions
diff --git a/i/pc104/initrd/conf/busybox/examples/mk2knr.pl b/i/pc104/initrd/conf/busybox/examples/mk2knr.pl
new file mode 100755
index 0000000..1259b84
--- /dev/null
+++ b/i/pc104/initrd/conf/busybox/examples/mk2knr.pl
@@ -0,0 +1,84 @@
+#!/usr/bin/perl -w
+#
+# @(#) mk2knr.pl - generates a perl script that converts lexemes to K&R-style
+#
+# How to use this script:
+# - In the busybox directory type 'examples/mk2knr.pl files-to-convert'
+# - Review the 'convertme.pl' script generated and remove / edit any of the
+# substitutions in there (please especially check for false positives)
+# - Type './convertme.pl same-files-as-before'
+# - Compile and see if it works
+#
+# BUGS: This script does not ignore strings inside comments or strings inside
+# quotes (it probably should).
+
+# set this to something else if you want
+$convertme = 'convertme.pl';
+
+# internal-use variables (don't touch)
+$convert = 0;
+%converted = ();
+
+# if no files were specified, print usage
+die "usage: $0 file.c | file.h\n" if scalar(@ARGV) == 0;
+
+# prepare the "convert me" file
+open(CM, ">$convertme") or die "convertme.pl $!";
+print CM "#!/usr/bin/perl -p -i\n\n";
+
+# process each file passed on the cmd line
+while (<>) {
+
+ # if the line says "getopt" in it anywhere, we don't want to muck with it
+ # because option lists tend to include strings like "cxtzvOf:" which get
+ # matched by the "check for mixed case" regexps below
+ next if /getopt/;
+
+ # tokenize the string into just the variables
+ while (/([a-zA-Z_][a-zA-Z0-9_]*)/g) {
+ $var = $1;
+
+ # ignore the word "BusyBox"
+ next if ($var =~ /BusyBox/);
+
+ # this checks for javaStyle or szHungarianNotation
+ $convert++ if ($var =~ /^[a-z]+[A-Z][a-z]+/);
+
+ # this checks for PascalStyle
+ $convert++ if ($var =~ /^[A-Z][a-z]+[A-Z][a-z]+/);
+
+ # if we want to add more checks, we can add 'em here, but the above
+ # checks catch "just enough" and not too much, so prolly not.
+
+ if ($convert) {
+ $convert = 0;
+
+ # skip ahead if we've already dealt with this one
+ next if ($converted{$var});
+
+ # record that we've dealt with this var
+ $converted{$var} = 1;
+
+ print CM "s/\\b$var\\b/"; # more to come in just a minute
+
+ # change the first letter to lower-case
+ $var = lcfirst($var);
+
+ # put underscores before all remaining upper-case letters
+ $var =~ s/([A-Z])/_$1/g;
+
+ # now change the remaining characters to lower-case
+ $var = lc($var);
+
+ print CM "$var/g;\n";
+ }
+ }
+}
+
+# tidy up and make the $convertme script executable
+close(CM);
+chmod 0755, $convertme;
+
+# print a helpful help message
+print "Done. Scheduled name changes are in $convertme.\n";
+print "Please review/modify it and then type ./$convertme to do the search & replace.\n";