⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crfc2asn1.pl

📁 RSA加密/解密算法源码 asn1c-0.9.12
💻 PL
字号:
#!/usr/bin/perl## $Id: crfc2asn1.pl,v 1.3 2004/09/07 06:36:35 vlm Exp $# $Author: vlm $## 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;my $currentFname = '';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";			unlink($currentFile) or die "Can't remove $!";			print STDERR "Removed $currentFile";			exit(1);		}		my $rfcid = '';		$rfcid = $1 . '-' if($ARGV =~ /([a-z0-9]+)/i);		if(/^[ \t]+([A-Za-z0-9-]+).*DEFINITIONS.*::=/) {			$currentFname = $rfcid . $1 . ".asn1";			$inasn = 1;		} elsif(/^[ \t]*([A-Za-z0-9-]+).*{.*iso/) {			$currentFname = $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;		} 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 by $0 in $ARGV at line " . $. . "\n";		print "-- \n";		print "\n";	}	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 modules found\n" unless $found;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -