#!/usr/bin/perl
#
#	proc_stat_signal_decode
#	written by Jan Engelhardt <jengelh [at] medozas de>, 2007
#	http://jengelh.medozas.de/
#	released in the Public Domain
#

use strict;
my @signame = qw(HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE
	ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM
	PROF WINCH IO PWR SYS RTMIN RTMIN+1 RTMIN+2 RTMIN+3 RTMIN+4 RTMIN+5
	RTMIN+6 RTMIN+7 RTMIN+8 RTMIN+9 RTMIN+10 RTMIN+11 RTMIN+12 RTMIN+13
	RTMIN+14 RTMIN+15 RTMAX-14 RTMAX-13 RTMAX-12 RTMAX-11 RTMAX-10 RTMAX-9
	RTMAX-8 RTMAX-7 RTMAX-6 RTMAX-5 RTMAX-4 RTMAX-3 RTMAX-2 RTMAX-1 RTMAX);

while (<>) {
	s/^((?:Sig|Shd)\w+\s*:\s*)(\w{8})(\w{8})/"$1".&names($3, $2)/eg;
	print;
}

sub names {
	my $mask_lo = eval "0x".shift(@_);
	my $mask_hi = eval "0x".shift(@_);
	my $ret;

	for (my $signal_num = 1; $signal_num <= 32; ++$signal_num) {
		if ($mask_lo & (1 << ($signal_num - 1))) {
			$ret .= $signame[$signal_num-1]." ";
		}
	}
	return $ret;
}
