aboutsummaryrefslogtreecommitdiffstats
path: root/tools/extract_asn1_from_spec.pl
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2011-04-04 14:35:21 +0000
committerAnders Broman <anders.broman@ericsson.com>2011-04-04 14:35:21 +0000
commit5e494f36ae23a3f924047a56b9e577a4730fe980 (patch)
treefead81f9a3cddfd5315e37aa7e6dc65da405f18f /tools/extract_asn1_from_spec.pl
parent72b69aeaf5eb2c5064c9a870fb4829a004b667fe (diff)
From Vincent Helfre:
updated the script that extracts the asn1 from the specification (we modified it after noticing that it currently fails to take the IMPORT section). It should also work now to extract the WCDMA RRC (TS 25.331). svn path=/trunk/; revision=36442
Diffstat (limited to 'tools/extract_asn1_from_spec.pl')
-rwxr-xr-xtools/extract_asn1_from_spec.pl87
1 files changed, 40 insertions, 47 deletions
diff --git a/tools/extract_asn1_from_spec.pl b/tools/extract_asn1_from_spec.pl
index a57623bfaa..52d0f83c13 100755
--- a/tools/extract_asn1_from_spec.pl
+++ b/tools/extract_asn1_from_spec.pl
@@ -1,80 +1,73 @@
#$Id$
#!/usr/bin/perl
-# This script extracts the ASN1 definition from and TS 36.331 and generates 3 output files that can be processed by asn2wrs
+# 2011 Vincent Helfre and Erwan Yvin
+# This script extracts the ASN1 definition from and TS 36.331/25.331 and generates asn files that can be processed by asn2wrs
# First download the specification from 3gpp.org as a word document and open it
-# Then in "view" menu, select normal or web layout (needed to removed page header and footers)
+# Then in "view" menu, select normal, draft or web layout (any kind that removes page header and footers)
# Finally save the document as a text file
-# Call the script: "perl extract_asn1_from_spec.pl 36331-xxx.txt"
+# Example with TS 36.331: "perl extract_asn1_from_spec.pl 36331-xxx.txt"
# It should generate: EUTRA-RRC-Definitions.asn, EUTRA-UE-Variables.asn and EUTRA-InterNodeDefinitions
use warnings;
$input_file = $ARGV[0];
-$def_output_file = "EUTRA-RRC-Definitions.asn";
-$var_output_file = "EUTRA-UE-Variables.asn";
-$internode_output_file = "EUTRA-InterNodeDefinitions.asn";
+$version = 0;
+sub extract_spec_version;
sub extract_asn1;
open(INPUT_FILE, "< $input_file") or die "Can not open file $input_file";
-while (<INPUT_FILE>) {
- # Process the EUTRA-RRC-Definitions section
- if( m/EUTRA-RRC-Definitions DEFINITIONS AUTOMATIC TAGS ::=/){
- open(OUTPUT_FILE, "> $def_output_file") or die "Can not open file $def_output_file";
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
+extract_spec_version();
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
+extract_asn1();
- syswrite OUTPUT_FILE,"END\n\n";
- close(OUTPUT_FILE);
- }
-
- # Process the EUTRA-RRC-Variables section
- if( m/EUTRA-UE-Variables DEFINITIONS AUTOMATIC TAGS ::=/){
- open(OUTPUT_FILE, "> $var_output_file") or die "Can not open file $def_output_file";
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
-
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
-
- syswrite OUTPUT_FILE,"END\n\n";
- close(OUTPUT_FILE);
- }
- # Process the EUTRA-InterNodeDefinitions section
- if( m/EUTRA-InterNodeDefinitions DEFINITIONS AUTOMATIC TAGS ::=/){
- open(OUTPUT_FILE, "> $internode_output_file") or die "Can not open file $def_output_file";
- syswrite OUTPUT_FILE,"$_ \n";
- syswrite OUTPUT_FILE,"BEGIN\n\n";
-
- # Get all the text delimited by -- ASN1START and -- ASN1STOP
- extract_asn1();
+close(INPUT_FILE);
- syswrite OUTPUT_FILE,"END\n\n";
- close(OUTPUT_FILE);
+# This subroutine extracts the version of the specification
+sub extract_spec_version {
+ my $line;
+ while($line = <INPUT_FILE>){
+ if($line =~ m/3GPP TS (25|36)\.331 V/){
+ $version = $line;
+ return;
+ }
}
}
-close(INPUT_FILE);
-
# This subroutine copies the text delimited by -- ASN1START and -- ASN1STOP in INPUT_FILE
# and copies it into OUTPUT_FILE.
-# It stops when it meets the keyword "END"
+# The OUTPUT_FILE is opened on encounter of the keyword "DEFINITIONS AUTOMATIC TAGS"
+# and closed on encounter of the keyword "END"
sub extract_asn1 {
- my $line = <INPUT_FILE>;
+ my $line;
my $is_asn1 = 0;
+ my $output_file_name = 0;
- while(($line ne "END\n") && ($line ne "END\r\n")){
+ while($line = <INPUT_FILE>){
if ($line =~ m/-- ASN1STOP/) {
$is_asn1 = 0;
}
- if ($is_asn1 == 1){
+
+ if($line =~ m/DEFINITIONS AUTOMATIC TAGS ::=/){
+ ($output_file_name) = ($line =~ m/^([a-zA-Z\-]+)\s+DEFINITIONS AUTOMATIC TAGS ::=/);
+ $output_file_name = "$output_file_name".".asn";
+ print "generating $output_file_name\n";
+ open(OUTPUT_FILE, "> $output_file_name") or die "Can not open file $output_file_name";
+ syswrite OUTPUT_FILE,"-- $version-- \$Id$output_file_name 32781 2010-05-12 05:51:54Z etxrab \$\n--\n";
+ $is_asn1 = 1;
+ }
+
+ if (($line =~ /END$/) && (defined fileno OUTPUT_FILE)){
+ syswrite OUTPUT_FILE,"$line";
+ close(OUTPUT_FILE);
+ $is_asn1 = 0;
+ }
+
+ if (($is_asn1 == 1) && (defined fileno OUTPUT_FILE)){
syswrite OUTPUT_FILE,"$line";
}
if ($line =~ m/-- ASN1START/) {
$is_asn1 = 1;
}
- $line = <INPUT_FILE>;
}
}
+