diff options
Diffstat (limited to 'contrib/ntp/ntpdc/nl.pl')
-rwxr-xr-x | contrib/ntp/ntpdc/nl.pl | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/contrib/ntp/ntpdc/nl.pl b/contrib/ntp/ntpdc/nl.pl new file mode 100755 index 0000000..4a418fb --- /dev/null +++ b/contrib/ntp/ntpdc/nl.pl @@ -0,0 +1,43 @@ +#! /usr/local/perl-5.8.8/bin/perl -w + +$found = 0; +$last = 0; +$debug = 0; + +while (<>) { + next if /^#/; + next if /^\s*$/; + if (/^typedef union req_data_u_tag/) { + $found = 1; + } + if (/^struct info_dns_assoc/) { + $last = 1; + } + if ($found) { + if (/^(struct\s*\w*)\s*{\s*$/) { + $type = $1; + print STDERR "type = '$type'\n" if $debug; + printf " printf(\"sizeof($type) = %%d\\n\", \n\t (int) sizeof($type));\n"; + next; + } + if (/^typedef (union\s*\w*)\s*{\s*$/) { + $type = $1; + print STDERR "union = '$type'\n" if $debug; + printf " printf(\"sizeof($type) = %%d\\n\", \n\t (int) sizeof($type));\n"; + next; + } + if (/\s*\w+\s+(\w*)\s*(\[.*\])?\s*;\s*$/) { + $field = $1; + print STDERR "\tfield = '$field'\n" if $debug; + printf " printf(\"offsetof($field) = %%d\\n\", \n\t (int) offsetof($type, $field));\n"; + next; + } + if (/^}\s*\w*\s*;\s*$/) { + printf " printf(\"\\n\");\n\n"; + $found = 0 if $last; + next; + } + print STDERR "Unmatched line: $_"; + exit 1; + } +} |