summaryrefslogtreecommitdiff
path: root/ntpdc/nl.pl
diff options
context:
space:
mode:
Diffstat (limited to 'ntpdc/nl.pl')
-rwxr-xr-xntpdc/nl.pl43
1 files changed, 43 insertions, 0 deletions
diff --git a/ntpdc/nl.pl b/ntpdc/nl.pl
new file mode 100755
index 0000000..4a418fb
--- /dev/null
+++ b/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;
+ }
+}