#!/usr/bin/perl
use warnings;
use strict;
use Config;
use Term::ANSIColor ':constants';
my $CRST = RESET;
my $CCODE = BOLD;
my $CSTAT = BOLD . GREEN;
my $CCORE = BOLD . CYAN;
my $CSIG = CYAN;
if (@ARGV) {
my $code = system (@ARGV);
if ($code < 0) {
exit 127;
}
elsif ($code > 0) {
my $status = $code >> 8;
my $signum = $code & 127;
my $core = $code & 128;
my %sig_idx;
@sig_idx{split /\s+/, $Config{sig_num}} = split /\s/, $Config{sig_name};
printf STDERR (
<<EOF
Results of execution: `%s`
----------------------
System exit code:$CCODE %d $CRST$CSIG %s $CRST
($CSTAT%08b$CRST$CCORE%b$CRST$CSIG%07b$CRST)
Status: %3s ($CSTAT%08b$CRST)
Signal: %3s ($CSIG%08b$CRST)
Core: %3s
----------------------
EOF
, (join ' ', @ARGV),
$code, ($signum ? "(SIG-$sig_idx{$signum})" : ''),
$status, $core, $signum,
($status) x 2,
($signum) x 2,
($core ? 'Yes': 'No')
);
exit ($status);
}
}