#!/usr/bin/perl
# REQUIRES ONE ARGUMENT == to the ibus you want to read/write to.

while (1){
open IBUS, "+>$ARGV[0]"  || die "Can't open $ARGV[0]: $!\n";
read IBUS, $inport, 1;
$a = 0;
$in = sprintf "%.2lu", unpack "C", $inport;
printf "0x%.2lx ", unpack "C", $inport;
if($in > 127){print "yeah "; $a+=1; $in -= 128;}
if($in > 63){ $a+=2; $in -= 64;}
if($in > 31){ $a+=4; $in -= 32;}
if($in > 15){ $a+=8; $in -= 16;}
if($in > 7){ $a+=16; $in -= 8;}
if($in > 3){ $a+=32; $in -= 4;}
if($in > 1){ $a+=64; $in -= 2;}
if($in > 0){ $a+=128; $in -= 1;}
$inport = pack"C", $a;
printf "0x%.2lx ", unpack "C", $inport;
print IBUS $inport;

close IBUS;
printf "Value returned from port: 0x%.2lx\n", unpack "C", $inport;
}
exit 0;

