X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=geekos%2Fscripts%2Fmkuprog;fp=geekos%2Fscripts%2Fmkuprog;h=1581b4b29e0959b4e725c34086ce8e94bebfb081;hp=0000000000000000000000000000000000000000;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hpb=626595465a2c6987606a6bc697df65130ad8c2d3 diff --git a/geekos/scripts/mkuprog b/geekos/scripts/mkuprog new file mode 100755 index 0000000..1581b4b --- /dev/null +++ b/geekos/scripts/mkuprog @@ -0,0 +1,55 @@ +#! /usr/bin/perl + +# From a binary image containing a user program, generate +# C code initializing a User_Program struct. + +# $Revision: 1.1 $ + +use strict qw(refs vars); +use FileHandle; + +if ( scalar(@ARGV) != 3 ) { + print STDERR "usage: mkuprog \n"; + exit 1; +} + +my $filename = shift @ARGV; +my $progname = shift @ARGV; +my $entryAddr = shift @ARGV; + +my $fh = new FileHandle("<$filename"); +(defined $fh) || die "Couldn't open $filename: $!\n"; +binmode $fh; + +my $dataArrayName = $progname . "Data"; +my $structName = $progname . "Prog"; +print "const unsigned char $dataArrayName"."[] = {\n"; + +my $LINEWIDTH = 10; + +my $buf = chr(0) x $LINEWIDTH; +my $n; +my $size = 0; +while ( ($n = read( $fh, $buf, $LINEWIDTH )) > 0 ) { + $size += $n; + my $i; + print " "; + for ( $i = 0; $i < $n; $i++ ) { + my $c = ord( substr($buf, $i, 1) ); + printf( "0x%x,", $c ); + } + print "\n"; +} + +print "};\n"; + +$fh->close(); + +print << "END"; +const struct User_Program $structName = { + "$progname", + $size, + $entryAddr, + $dataArrayName +}; +END