Commit a2bf7240 authored by Lev Walkin's avatar Lev Walkin

real-lifing specs

parent 0634eb75
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
my $inasn = 0; # Are we inside ASN.1 grammar? my $inasn = 0; # Are we inside ASN.1 grammar?
my $found = 0; my $found = 0;
my $currentFname = '';
if(-t STDIN && $#ARGV == -1) { if(-t STDIN && $#ARGV == -1) {
print STDERR "Rip ASN.1 specification from RFC file\n"; print STDERR "Rip ASN.1 specification from RFC file\n";
...@@ -35,6 +36,8 @@ while(<>) { ...@@ -35,6 +36,8 @@ while(<>) {
if(/^[ \t]*END[ \t]*$/) { if(/^[ \t]*END[ \t]*$/) {
print STDERR print STDERR
"Missed an ASN.1 grammar before line ". $. ."?\n"; "Missed an ASN.1 grammar before line ". $. ."?\n";
unlink($currentFile) or die "Can't remove $!";
print STDERR "Removed $currentFile";
exit(1); exit(1);
} }
...@@ -42,12 +45,10 @@ while(<>) { ...@@ -42,12 +45,10 @@ while(<>) {
$rfcid = $1 . '-' if($ARGV =~ /([a-z0-9]+)/i); $rfcid = $1 . '-' if($ARGV =~ /([a-z0-9]+)/i);
if(/^[ \t]+([A-Za-z0-9-]+).*DEFINITIONS.*::=/) { if(/^[ \t]+([A-Za-z0-9-]+).*DEFINITIONS.*::=/) {
my $fname = $rfcid . $1 . ".asn1"; $currentFname = $rfcid . $1 . ".asn1";
open(O, "> $fname") or die "Can't open $fname";
select(O);
$inasn = 1; $inasn = 1;
} elsif(/^[ \t]*([A-Za-z0-9-]+).*{.*iso/) { } elsif(/^[ \t]*([A-Za-z0-9-]+).*{.*iso/) {
my $fname = $rfcid . $1 . ".asn1"; $currentFname = $rfcid . $1 . ".asn1";
my @a = ($_); my @a = ($_);
my $i; my $i;
for($i = 0; $i < 8; $i++) { for($i = 0; $i < 8; $i++) {
...@@ -60,27 +61,53 @@ while(<>) { ...@@ -60,27 +61,53 @@ while(<>) {
} }
} }
next unless $inasn; next unless $inasn;
open(O, "> $fname") or die "Can't open $fname";
select(O);
} else { } else {
next; next;
} }
print STDERR "Found $1 at line $. => $currentFname\n";
open(O, "> $currentFname") or die "Can't open $currentFname";
select(O);
$found++; $found++;
print "\n"; print "\n";
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 "\n"; print "\n";
} }
print;
if(/^[ \t]*END[ \t]*$/) { if(/^[ \t]*END[ \t]*$/) {
print;
select(STDOUT); select(STDOUT);
close(O); close(O);
$inasn = 0; $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;
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment