+# CPU0 CPU1
+# 1: 107040 111123 Phys-irq i8042
+# 6: 3 0 Phys-irq floppy
+sub input()
+{
+ my $fname="/proc/interrupts";
+ local *F;
+ open F,$fname or die "open \"$fname\": $!";
+ <F> or die "header \"$fname\"";;
+ my $r=0;
+ while (<F>) {
+ chomp;
+ my @f=split;
+ last if $f[0]=~/^[A-Z]{3}:$/; # NMI/LOC/ERR/MIS
+ $f[0]=~/^\s*\d+:$/ or die $f[0];
+ next if $f[$#f] ne "i8042";
+ for (1..$#f-2) {
+ $_=$f[$_];
+ /^\d+$/ or die $_;
+ $r+=$_;
+ }
+ }
+ close F or die "open \"$fname\": $!";
+ return $r;
+}
+
+my $input=input();
+my $input_last=time()+0;
+sub input_idle()
+{
+ my $input_now=input();
+ my $diff=$input_now-$input;
+ die $diff if $diff<0;
+ my $time_now=time()+0;
+ if ($diff) {
+ $input=$input_now;
+ $input_last=$time_now;
+ }
+ my $time_diff=$time_now-$input_last;
+ return $time_diff>$INPUT_IDLE;
+}
+