#
# Copyright (c) 2007 Christian Jaeger, copying@christianjaeger.ch
#
# This is free software, offered under either the same terms as perl 5
# or the terms of the Artistic License version 2 or the terms of the
# MIT License (Expat version). See the file COPYING.md that came
# bundled with this file.
#

=head1 NAME

Chj::Unix::Signal

=head1 SYNOPSIS

=head1 DESCRIPTION


=head1 NOTE

This is alpha software! Read the status section in the package README
or on the L<website|http://functional-perl.org/>.

=cut

package Chj::Unix::Signal;

use strict;
use warnings;
use warnings FATAL => 'uninitialized';

use Chj::Class::Array -fields => -publica => 'number',
    ;

sub new {
    my $class = shift;
    my $s     = $class->SUPER::new;
    ($$s[Number]) = @_;
    $s
}

# how do we do reverse mapping? I did it already somewhere, I know.
# and /bin/kill doesn't know all of them, bush eh bash is much better.
# ah, man perlipc "Signals":

our $inited = 0;
our $signo;
our $signame;

sub MaybeInit {
    $inited ||= do {
        require Config;
        my $cfg = $Config::Config{sig_name};
        defined $cfg or die "No sigs?";
        my $i = 0;
        foreach my $name (split(' ', $cfg)) {
            $$signo{$name} = $i;
            $$signame[$i] = $name;
            $i++
        }
        1
    }
}

sub as_string {
    my $s = shift;
    MaybeInit;
    my $maybe_str = $$signame[$$s[Number]];
    defined $maybe_str ? $maybe_str : "<unknown signal (number $$s[Number])>"
}

end Chj::Class::Array;
