Initial revision

diff --git a/examples/crfc2asn1.pl b/examples/crfc2asn1.pl
new file mode 100755
index 0000000..20e1f9f
--- /dev/null
+++ b/examples/crfc2asn1.pl
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+
+#
+# $Id$
+# $Author$
+#
+# Simple tool that fetches the ASN.1 specifications from the
+# given set of RFC files.
+#
+
+
+my $inasn = 0;	# Are we inside ASN.1 grammar?
+my $found = 0;
+
+if(-t STDIN && $#ARGV == -1) {
+	print STDERR "Rip ASN.1 specification from RFC file\n";
+	print STDERR "Usage: $0 <rfc-file.txt> ...\n";
+	print STDERR "Usage: <someprog> | $0\n";
+	exit(1);
+}
+
+while(<>) {
+	#
+	# Strip RFC page delimiters.
+	#
+	next if /^[A-Z].*\[Page [0-9]+\]$/;
+	next if /^$/;
+	next if /^RFC [0-9].*[0-9]+$/;
+
+	if($inasn == 0) {
+		#
+		# The least correct way to find the start of ASN
+		# definition.
+		#
+		if(/^[ \t]*END[ \t]*$/) {
+			print STDERR
+			"Missed an ASN.1 grammar before line ". $. ."?\n";
+			exit(1);
+		}
+
+		my $rfcid = '';
+		$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);
+			$inasn = 1;
+		} elsif(/^[ \t]*([A-Za-z0-9-]+).*{.*iso/) {
+			my $fname = $rfcid . $1 . ".asn1";
+			my @a = ($_);
+			my $i;
+			for($i = 0; $i < 8; $i++) {
+				$_ = <>;
+				push(@a, $_);
+				if(/DEFINITIONS/) {
+					$_ = join('', @a);
+					$inasn = 1;
+					last;
+				}
+			}
+			next unless $inasn;
+			open(O, "> $fname") or die "Can't open $fname";
+			select(O);
+		} else {
+			next;
+		}
+
+		$found++;
+		print "\n";
+		print "-- \n";
+		print "-- Grammar found in $ARGV by $0 at " . $. . "\n";
+		print "-- \n";
+		print "\n";
+	}
+
+	print;
+
+	if(/^[ \t]*END[ \t]*$/) {
+		select(STDOUT);
+		close(O);
+		$inasn = 0;
+	}
+}
+
+die "No ASN.1 specifications found\n" unless $found;