85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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";
 | 
