changeset 1434:8850d29960aa

org_to_fd.pl: improve formatting of generated data - Add more explicit comment blocks for "Start of generated data" and "End of generated data", including the invocation of org_to_fd.pl. - Change the default vendor to Base: code 0, name "". - Add Type, Code, and Section (if present) to the AVP comment. - Consistently use \t to ensure tab output. - Provide functions to format comment blocks.
author Luke Mewburn <luke@mewburn.net>
date Wed, 19 Feb 2020 18:05:01 +1100
parents 3338f135989d
children 4bd30996ad7f
files contrib/tools/org_to_fd.pl
diffstat 1 files changed, 44 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/contrib/tools/org_to_fd.pl	Wed Feb 19 17:04:53 2020 +1100
+++ b/contrib/tools/org_to_fd.pl	Wed Feb 19 18:05:01 2020 +1100
@@ -1,12 +1,15 @@
 #!/usr/bin/env perl
 use strict;
+use File::Basename;
 use Getopt::Std;
 
+my ($progname) = basename($0);
+
 our ($opt_V, $opt_v);
 
-# default to 3GPP
-my ($vendor) = 10415;
-my ($vendor_name) = "3GPP";
+# default to Base
+my ($vendor) = 0;
+my ($vendor_name) = "";
 
 sub convert_must_to_flags($) {
     my ($allmust) = @_;
@@ -32,6 +35,18 @@
     return "UNKNOWN TYPE: $type";
 }
 
+
+my ($comment_width) = 64;
+
+sub print_header() {
+    printf "\t/*=%s=*/\n", '=' x $comment_width;
+}
+
+sub print_comment($) {
+    my ($str) = @_;
+    printf "\t/* %-*s */\n", $comment_width, $str;
+}
+
 sub print_insert($$) {
     my ($type, $name) = @_;
     my $avp_type;
@@ -39,8 +54,8 @@
     if ($type =~ m/(Grouped|OctetString|Integer32|Integer64|Unsigned32|Unsigned64|Float32|Float64)/) {
         $avp_type = "NULL";
     } elsif ($type =~ m/Enumerated/) {
-        print "\t\tstruct dict_object		*type;\n";
-        print "\t\tstruct dict_type_data	 tdata = { AVP_TYPE_INTEGER32, \"Enumerated(" . ($vendor_name ? "$vendor_name/" : "") ."$name)\", NULL, NULL, NULL };\n";
+        print "\t\tstruct dict_object\t*type;\n";
+        print "\t\tstruct dict_type_data\t tdata = { AVP_TYPE_INTEGER32, \"Enumerated(" . ($vendor_name ? "$vendor_name/" : "") ."$name)\", NULL, NULL, NULL };\n";
         # XXX: add enumerated values
         print "\t\tCHECK_dict_new(DICT_TYPE, &tdata, NULL, &type);\n";
         $avp_type = "type";
@@ -52,7 +67,7 @@
 }
 
 sub usage($) {
-    die("usage: org_to_fd.pl [-V vendor_name -v vendor_code] [file ...]\n");
+    die(sprintf("usage: %s [-V vendor_name] [-v vendor_code] [file ...]\n", $progname));
     exit(@_);
 }
 
@@ -61,28 +76,41 @@
 if (defined($opt_v)) {
     $vendor = $opt_v;
     if (!defined($opt_V)) {
-	usage(1);
+        usage(1);
     }
     $vendor_name = $opt_V;
 }
 
-print "\t/* The following is created automatically. Do not modify. */\n";
-print "\t/* Changes will be lost during the next update. Modify the source org file instead. */\n\n";
+print_header();
+print_comment("Start of generated data.");
+print_comment("");
+print_comment("The following is created automatically with:");
+print_comment(sprintf("    org_to_fd.pl -V '%s' -v %s", $vendor_name, $vendor));
+print_comment("Changes will be lost during the next update.");
+print_comment("Do not modify; modify the source .org file instead.");
+print_header();
+print "\n";
 
 while (<>) {
     my ($dummy, $name, $code, $section, $type, $must, $may, $shouldnot, $mustnot, $encr) = split /\s*\|\s*/;
 
     next if ($name =~ m/Attribute Name/);
     if ($name =~ m/# (.*)/) {
-        printf "\t/* %-60s */\n", $1;
+        print_comment($1);
         next;
     }
 
     if ($name =~ m/\s/) {
-	die(sprintf("name '%s' contains space", $name));
+        die(sprintf("name '%s' contains space", $name));
     }
 
-    print "\t/* $name */\n\t{\n\t\tstruct dict_avp_data data = {\n";
+    my ($desc) = $name;
+    $desc .= ", " . $type;
+    $desc .= ", code " . $code;
+    $desc .= ", section " . $section if $section != "";
+    print_comment($desc);
+    print "\t{\n";
+    print "\t\tstruct dict_avp_data data = {\n";
     print "\t\t\t$code,\t/* Code */\n";
     print "\t\t\t$vendor,\t/* Vendor */\n";
     print "\t\t\t\"$name\",\t/* Name */\n";
@@ -93,3 +121,7 @@
     print_insert($type, $name);
     print "\t};\n\n";
 }
+
+print_header();
+print_comment("End of generated data.");
+print_header();
"Welcome to our mercurial repository"