# HG changeset patch # User Luke Mewburn # Date 1582095901 -39600 # Node ID 8850d29960aa11bf960352575ea7fde92b1ee349 # Parent 3338f135989d97a87d597e6c7b388f252967b63e 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. diff -r 3338f135989d -r 8850d29960aa contrib/tools/org_to_fd.pl --- 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();