| 
														
															@@ -3,16 +3,25 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 for $fn (@ARGV) { 
														 | 
														
														 | 
														
															 for $fn (@ARGV) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     open(F, "$fn"); 
														 | 
														
														 | 
														
															     open(F, "$fn"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     $lastnil = 0; 
														 | 
														
														 | 
														
															     $lastnil = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    $incomment = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     while (<F>) { 
														 | 
														
														 | 
														
															     while (<F>) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	## Warn about windows-style newlines. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (/\r/) { 
														 | 
														
														 | 
														
															         if (/\r/) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             print "       CR:$fn:$.\n"; 
														 | 
														
														 | 
														
															             print "       CR:$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	## Warn about tabs. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (/\t/) { 
														 | 
														
														 | 
														
															         if (/\t/) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             print "      TAB:$fn:$.\n"; 
														 | 
														
														 | 
														
															             print "      TAB:$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	## Warn about trailing whitespace. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (/ +$/) { 
														 | 
														
														 | 
														
															         if (/ +$/) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             print "Space\@EOL:$fn:$.\n"; 
														 | 
														
														 | 
														
															             print "Space\@EOL:$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	## Warn about control keywords without following space. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#if (/\s(?:if|while|for|switch)\(/) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#    print "      KW(:$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	## Warn about multiple empty lines. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if ($lastnil && /^$/) { 
														 | 
														
														 | 
														
															         if ($lastnil && /^$/) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             print " DoubleNL:$fn:$.\n"; 
														 | 
														
														 | 
														
															             print " DoubleNL:$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } elsif (/^$/) { 
														 | 
														
														 | 
														
															         } elsif (/^$/) { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -20,6 +29,51 @@ for $fn (@ARGV) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } else { 
														 | 
														
														 | 
														
															         } else { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             $lastnil = 0; 
														 | 
														
														 | 
														
															             $lastnil = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	### Juju to skip over comments and strings, since the tests 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	### we're about to do are okay there. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if ($incomment) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    if (m!\*/!) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		s!.*?\*/!!; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		$incomment = 0; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    } else { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		next; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (m!/\*.*?\*/!) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    s!/\*.*?\*/!!; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} elsif (m!/\*!) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    s!/\*!!; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    $incomment = 1; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    next; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	s!"(?:[^\"]+|\\.)*"!!g; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	next if /^\#/; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	## Warn about C++-style comments. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (m!//!) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#    print "       //:$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    s!//.*!!; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        ## Warn about braces preceded by non-space. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (/([^\s])\{/) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    print "       $1\{:$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	## Warn about function calls with space before parens. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	if (/(\w+)\s\(/) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    if ($1 ne "if" and $1 ne "while" and $1 ne "for" and  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		$1 ne "switch" and $1 ne "return" and $1 ne "int" and  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                $1 ne "void" and $1 ne "__attribute__") { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		print "     fn ():$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	    } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	## Warn about multiple internal spaces. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#if (/\S\s{2,}[^\s\\]/) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#    print "     X  X:$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	## Warn about { with stuff after. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#s/\s+$//; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#if (/\{[^\}\\]+$/) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#    print "     {X:$fn:$.\n"; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	#} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     close(F); 
														 | 
														
														 | 
														
															     close(F); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 } 
														 | 
														
														 | 
														
															 } 
														 |