aboutsummaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-extended/mime-construct/files/Signal.pm
blob: 9280e886813f1b25e3ee414ae7718a15fe09518e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# $Id: Signal.pm,v 1.4 1998-10-27 16:16:13-05 roderick Exp $
#
# Copyright (c) 1997 Roderick Schertler.  All rights reserved.  This
# program is free software; you can redistribute it and/or modify it
# under the same terms as Perl itself.

package IPC::Signal;

use 5.003_94;	# __PACKAGE__
use strict;
use vars	qw($VERSION @ISA @EXPORT_OK $AUTOLOAD %Sig_num @Sig_name);

require Exporter;

$VERSION	= '1.00';
@ISA		= qw(Exporter);
@EXPORT_OK	= qw(sig_num sig_name sig_translate_setup %Sig_num @Sig_name);
%Sig_num	= ();
@Sig_name	= ();

sub sig_num  ($);
sub sig_name ($);

sub sig_translate_setup () {
    return if %Sig_num && @Sig_name;

    require Config;

    # In 5.005 the sig_num entries are comma separated and there's a
    # trailing 0.
    my $num = $Config::Config{'sig_num'};
    if ($num =~ s/,//g) {
	$num =~ s/\s+0$//;
    }

    my @name	= split ' ', $Config::Config{'sig_name'};
    my @num	= split ' ', $num;

    @name			or die 'No signals defined';
    @name == @num		or die 'Signal name/number mismatch';

    @Sig_num{@name} = @num;
    keys %Sig_num == @name	or die 'Duplicate signal names present';
    for (@name) {
	$Sig_name[$Sig_num{$_}] = $_
	    unless defined $Sig_name[$Sig_num{$_}];
    }
}

# This autoload routine just is just for sig_num() and sig_name().  It
# calls sig_translate_setup() and then snaps the real function definitions
# into place.

sub AUTOLOAD {
    if ($AUTOLOAD ne __PACKAGE__ . '::sig_num'
	    && $AUTOLOAD ne __PACKAGE__ . '::sig_name') {
	require Carp;
	Carp::croak("Undefined subroutine &$AUTOLOAD called");
    }
    sig_translate_setup;
    *sig_num  = sub ($) { $Sig_num{$_[0]} };
    *sig_name = sub ($) { $Sig_name[$_[0]] };
    goto &$AUTOLOAD;
}

1

__END__

=head1 NAME

IPC::Signal - Utility functions dealing with signals

=head1 SYNOPSIS

    $number = sig_num $name;
    $name   = sig_name $number;

    sig_translate_setup;
    $number = $Sig_num{$name};
    $name   = $Sig_name[$number];

=head1 DESCRIPTION

This module contains utility functions for dealing with signals.

Nothing is exported by default.

=over

=item B<sig_num> I<chopped-signal-name>

Returns the signal number of the signal whose name (sans C<SIG>) is
I<chopped-signal-name>, or undef if there is no such signal.

This function is prototyped to take a single scalar argument.

=item B<sig_name> I<signal-number>

Returns the chopped signal name (like C<HUP>) of signal number
I<signal-number>, or undef if there is no such signal.

This function is prototyped to take a single scalar argument.

=item B<sig_translate_setup>

If you want to use the @Sig_name and %Sig_num variables directly you must
call B<sig_translate_setup> to initialize them.  This isn't necessary if
you only use the function interfaces sig_name() and sig_num().

This function is prototyped to take no arguments.

=item B<%Sig_num>

A hash with chopped signal name keys (like C<HUP>) and integer signal
number values.

=item B<@Sig_name>

An array mapping signal numbers to chopped signal names (like C<HUP>).

=back

=head1 AUTHOR

Roderick Schertler <F<roderick@argon.org>>

=head1 SEE ALSO

perl(1).

=cut