#!/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;