#!/usr/bin/perl

if (scalar(@ARGV) != 4) {
    print STDERR "usage: binpatch filename offset wordsize value\n";
    exit 1;
}

($fname,$offset,$wsize,$nvalue) = @ARGV;

eval "\$fname = \"$fname\"";
eval "\$offset = $offset";
eval "\$wsize = $wsize";
eval "\$nvalue = $nvalue";

if ($wsize == 4)    { $format = "L"; }
elsif ($wsize == 2) { $format = "S"; }
elsif ($wsize == 1) { $format = "C"; }
else {
    die "word size $wsize unsupported";
}

$wstring = pack($format, $nvalue);

open FILE, "+<$fname";
binmode FILE;
#seek FILE, $offset, 0;
# printf FILE "%.${wsize}s", $wstring;
sysread  FILE, $forget, $offset;
syswrite FILE, $wstring, $wsize;

close FILE;
