#!/usr/bin/perl
# SPDX-License-Identifier: MIT
#
#	proc_stat_signal_decode - read /proc/stat signal status
#	written by Jan Engelhardt, 2007

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;
}
