real-lifing specs

diff --git a/examples/crfc2asn1.pl b/examples/crfc2asn1.pl
index 3e68c5d..df0a099 100755
--- a/examples/crfc2asn1.pl
+++ b/examples/crfc2asn1.pl
@@ -11,6 +11,7 @@
 
 my $inasn = 0;	# Are we inside ASN.1 grammar?
 my $found = 0;
+my $currentFname = '';
 
 if(-t STDIN && $#ARGV == -1) {
 	print STDERR "Rip ASN.1 specification from RFC file\n";
@@ -35,6 +36,8 @@
 		if(/^[ \t]*END[ \t]*$/) {
 			print STDERR
 			"Missed an ASN.1 grammar before line ". $. ."?\n";
+			unlink($currentFile) or die "Can't remove $!";
+			print STDERR "Removed $currentFile";
 			exit(1);
 		}
 
@@ -42,12 +45,10 @@
 		$rfcid = $1 . '-' if($ARGV =~ /([a-z0-9]+)/i);
 
 		if(/^[ \t]+([A-Za-z0-9-]+).*DEFINITIONS.*::=/) {
-			my $fname = $rfcid . $1 . ".asn1";
-			open(O, "> $fname") or die "Can't open $fname";
-			select(O);
+			$currentFname = $rfcid . $1 . ".asn1";
 			$inasn = 1;
 		} elsif(/^[ \t]*([A-Za-z0-9-]+).*{.*iso/) {
-			my $fname = $rfcid . $1 . ".asn1";
+			$currentFname = $rfcid . $1 . ".asn1";
 			my @a = ($_);
 			my $i;
 			for($i = 0; $i < 8; $i++) {
@@ -60,27 +61,53 @@
 				}
 			}
 			next unless $inasn;
-			open(O, "> $fname") or die "Can't open $fname";
-			select(O);
 		} else {
 			next;
 		}
 
+		print STDERR "Found $1 at line $. => $currentFname\n";
+		open(O, "> $currentFname") or die "Can't open $currentFname";
+		select(O);
+
 		$found++;
 		print "\n";
 		print "-- \n";
-		print "-- ASN.1 module found in $ARGV by $0 at " . $. . "\n";
+		print "-- ASN.1 module found by $0 in $ARGV at line " . $. . "\n";
 		print "-- \n";
 		print "\n";
 	}
 
-	print;
-
 	if(/^[ \t]*END[ \t]*$/) {
+		print;
 		select(STDOUT);
 		close(O);
 		$inasn = 0;
+		next;
 	}
+
+	#
+	# The following clauses are primarily designed to make
+	# asn1c command-line easier (i.e., to avoid "-ftypes88").
+	# You may want to get rid of them if you're doing generic
+	# ASN.1 extraction and do not want to alter the ASN.1 specs.
+	#
+	if(
+/^(.*)((UniversalString|BMPString|UTF8String)\s+::=\s+\[[A-Z]+\s\d+\]\sIMPLICIT\sOCTET\sSTRING)(.*)$/ms
+	) {
+		print "\n-- Legacy redefinition of $3 removed by $0:\n";
+		print "$1-- $2 -- $4";
+		next;
+	} elsif(/delete following line if \"new\" types are supported/) {
+		print;
+		print "/* Legacy stuff deleted by $0:\n";
+		$_ = <>;
+		print;
+		print " */\n";
+		next;
+	}
+ 
+
+	print;	# Dump the ASN.1 module line out.
 }
 
-die "No ASN.1 specifications found\n" unless $found;
+die "No ASN.1 modules found\n" unless $found;