diff options
Diffstat (limited to 'h2pl')
-rw-r--r-- | h2pl/mksizes | 42 | ||||
-rw-r--r-- | h2pl/mkvars | 31 |
2 files changed, 73 insertions, 0 deletions
diff --git a/h2pl/mksizes b/h2pl/mksizes new file mode 100644 index 0000000000..cb4b8ab86e --- /dev/null +++ b/h2pl/mksizes @@ -0,0 +1,42 @@ +#!/usr/local/bin/perl + +($iam = $0) =~ s%.*/%%; +$tmp = "$iam.$$"; +open (CODE,">$tmp.c") || die "$iam: cannot create $tmp.c: $!\n"; + +$mask = q/printf ("$sizeof{'%s'} = %d;\n"/; + +# write C program +select(CODE); + +print <<EO_C_PROGRAM; +#include <sys/param.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <net/if_arp.h> +#include <net/if.h> +#include <net/route.h> +#include <sys/ioctl.h> + +main() { +EO_C_PROGRAM + +while ( <> ) { + chop; + printf "\t%s, \n\t\t\"%s\", sizeof(%s));\n", $mask, $_,$_; +} + +print "\n}\n"; + +close CODE; + +# compile C program + +select(STDOUT); + +system "cc $tmp.c -o $tmp"; +die "couldn't compile $tmp.c" if $?; +system "./$tmp"; +die "couldn't run $tmp" if $?; + +unlink "$tmp.c", $tmp; diff --git a/h2pl/mkvars b/h2pl/mkvars new file mode 100644 index 0000000000..c6b5ad14da --- /dev/null +++ b/h2pl/mkvars @@ -0,0 +1,31 @@ +#!/usr/bin/perl + +require 'sizeof.ph'; + +$LIB = '/usr/local/lib/perl'; + +foreach $include (@ARGV) { + printf STDERR "including %s\n", $include; + do $include; + warn "sourcing $include: $@\n" if ($@); + if (!open (INCLUDE,"$LIB/$include")) { + warn "can't open $LIB/$include: $!\n"; + next; + } + while (<INCLUDE>) { + chop; + if (/^\s*eval\s+'sub\s+(\w+)\s.*[^{]$/ || /^\s*sub\s+(\w+)\s.*[^{]$/) { + $var = $1; + $val = eval "&$var;"; + if ($@) { + warn "$@: $_"; + print <<EOT +warn "\$$var isn't correctly set" if defined \$_main{'$var'}; +EOT + next; + } + ( $nval = sprintf ("%x",$val ) ) =~ tr/a-z/A-Z/; + printf "\$%s = 0x%s;\n", $var, $nval; + } + } +} |