Mercurial > hg > freeDiameter
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();