1#! /usr/local/bin/perl -w 2 3$found = 0; 4$last = 0; 5$debug = 0; 6 7while (<>) { 8 next if /^#/; 9 next if /^\s*$/; 10 if (/^struct req_pkt/) { 11 $found = 1; 12 } 13 if (/^struct info_dns_assoc/) { 14 $last = 1; 15 } 16 if ($found) { 17 if (/^(struct\s*\w*)\s*{\s*$/) { 18 $type = $1; 19 print STDERR "type = '$type'\n" if $debug; 20 printf " printf(\"sizeof($type) = %%d\\n\", \n\t (int) sizeof($type));\n"; 21 next; 22 } 23 if (/\s*\w+\s+(\w*)\s*(\[.*\])?\s*;\s*$/) { 24 $field = $1; 25 print STDERR "\tfield = '$field'\n" if $debug; 26 printf " printf(\"offsetof($field) = %%d\\n\", \n\t (int) offsetof($type, $field));\n"; 27 next; 28 } 29 if (/^}\s*;\s*$/) { 30 printf " printf(\"\\n\");\n\n"; 31 $found = 0 if $last; 32 next; 33 } 34 print STDERR "Unmatched line: $_"; 35 exit 1; 36 } 37} 38