summaryrefslogtreecommitdiff
path: root/mcon/U/sig_name.U
blob: 4134c043b664b25e2254531677bd05d0eb8f1694 (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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
?RCS: $Id: sig_name.U 1 2006-08-24 12:32:52Z rmanfredi $
?RCS:
?RCS: Copyright (c) 1991-1997, 2004-2006, Raphael Manfredi
?RCS: 
?RCS: You may redistribute only under the terms of the Artistic Licence,
?RCS: as specified in the README file that comes with the distribution.
?RCS: You may reuse parts of this distribution only within the terms of
?RCS: that same Artistic Licence; a copy of which may be found at the root
?RCS: of the source tree for dist 4.0.
?RCS:
?RCS: $Log: sig_name.U,v $
?RCS: Revision 3.0.1.5  1997/02/28  16:21:25  ram
?RCS: patch61: brand new algorithm for sig_name and (new!) sig_num
?RCS:
?RCS: Revision 3.0.1.4  1995/07/25  14:14:54  ram
?RCS: patch56: added <asm/signal.h> lookup for linux
?RCS:
?RCS: Revision 3.0.1.3  1995/05/12  12:24:11  ram
?RCS: patch54: now looks for <linux/signal.h> too (ADO)
?RCS:
?RCS: Revision 3.0.1.2  1994/06/20  07:06:57  ram
?RCS: patch30: final echo was missing to close awk-printed string
?RCS:
?RCS: Revision 3.0.1.1  1994/05/06  15:17:55  ram
?RCS: patch23: signal list now formatted to avoid scroll-ups (ADO)
?RCS:
?RCS: Revision 3.0  1993/08/18  12:09:47  ram
?RCS: Baseline for dist 3.0 netwide release.
?RCS:
?MAKE:sig_name sig_name_init sig_num sig_num_init sig_count sig_size: \
	awk Signal Oldconfig rm
?MAKE:	-pick add $@ %<
?S:sig_name:
?S:	This variable holds the signal names, space separated. The leading
?S:	SIG in signal name is removed.  A ZERO is prepended to the
?S:	list.  This is currently not used.
?S:.
?S:sig_name_init:
?S:	This variable holds the signal names, enclosed in double quotes and
?S:	separated by commas, suitable for use in the SIG_NAME definition 
?S:	below.  A "ZERO" is prepended to the list, and the list is 
?S:	terminated with a plain 0.  The leading SIG in signal names
?S:	is removed. See sig_num.
?S:.
?S:sig_num:
?S:	This variable holds the signal numbers, space separated. A ZERO is
?S:	prepended to the list (corresponding to the fake SIGZERO), and 
?S:	the list is terminated with a 0.  Those numbers correspond to 
?S:	the value of the signal listed in the same place within the
?S:	sig_name list.
?S:.
?S:sig_num_init:
?S:	This variable holds the signal numbers, enclosed in double quotes and
?S:	separated by commas, suitable for use in the SIG_NUM definition 
?S:	below.  A "ZERO" is prepended to the list, and the list is 
?S:	terminated with a plain 0.
?S:.
?S:sig_count (sig_name.U):
?S: 	This variable holds a number larger than the largest valid
?S: 	signal number.  This is usually the same as the NSIG macro.
?S:.
?S:sig_size:
?S: 	This variable contains the number of elements of the sig_name
?S: 	and sig_num arrays, excluding the final NULL entry.
?S:.
?C:SIG_NAME:
?C:	This symbol contains a list of signal names in order of
?C:	signal number. This is intended
?C:	to be used as a static array initialization, like this:
?C:		char *sig_name[] = { SIG_NAME };
?C:	The signals in the list are separated with commas, and each signal
?C:	is surrounded by double quotes. There is no leading SIG in the signal
?C:	name, i.e. SIGQUIT is known as "QUIT".
?C:	Gaps in the signal numbers (up to NSIG) are filled in with NUMnn,
?C:	etc., where nn is the actual signal number (e.g. NUM37).
?C:	The signal number for sig_name[i] is stored in sig_num[i].
?C:	The last element is 0 to terminate the list with a NULL.  This
?C:	corresponds to the 0 at the end of the sig_num list.
?C:.
?C:SIG_NUM:
?C:	This symbol contains a list of signal numbers, in the same order as the
?C:	SIG_NAME list. It is suitable for static array initialization, as in:
?C:		int sig_num[] = { SIG_NUM };
?C:	The signals in the list are separated with commas, and the indices
?C:	within that list and the SIG_NAME list match, so it's easy to compute
?C:	the signal name from a number or vice versa at the price of a small
?C:	dynamic linear lookup. 
?C:	Duplicates are allowed, but are moved to the end of the list.
?C:	The signal number corresponding to sig_name[i] is sig_number[i].
?C:	if (i < NSIG) then sig_number[i] == i.  
?C:	The last element is 0, corresponding to the 0 at the end of
?C:	the sig_name list.
?C:.
?C:SIG_COUNT:
?C:	This variable contains a number larger than the largest
?C:	signal number.  This is usually the same as the NSIG macro.
?C:.
?C:SIG_SIZE:
?C:	This variable contains the number of elements of the sig_name
?C:	and sig_num arrays, excluding the final NULL entry.
?C:.
?H:#define SIG_NAME $sig_name_init		/**/
?H:#define SIG_NUM  $sig_num_init		/**/
?H:#define SIG_COUNT $sig_count			/**/
?H:#define SIG_SIZE $sig_size			/**/
?H:.
?T:i doinit
?F:!= !signal_cmd
?X:	signal.cmd creates a file  signal.lst which has two columns:
?X:	NAME  number, e.g.
?X:	 HUP 1
?X:	The list is sorted on signal number, with duplicates moved to
?X:	the end..
: generate list of signal names
echo " "
case "$sig_name_init" in
'') doinit=yes ;;
*)  case "$sig_num_init" in
    ''|*,*) doinit=yes ;;
    esac ;;
esac
case "$doinit" in
yes)
	echo "Generating a list of signal names and numbers..." >&4
	. ./signal_cmd
 	sig_count=`$awk '/^NSIG/ { printf "%d", $2 }' signal.lst`
 	sig_name=`$awk 'BEGIN { printf "ZERO " }
 			!/^NSIG/ { printf "%s ", $1 }' signal.lst`
 	sig_num=`$awk  'BEGIN { printf "0 " }
 			!/^NSIG/ { printf "%d ", $2 }' signal.lst`
 	sig_name_init=`$awk 'BEGIN	{ printf "\"ZERO\", " }
 			     !/^NSIG/	{ printf "\"%s\", ", $1 }
 			     END	{ printf "0\n" }' signal.lst`
 	sig_num_init=`$awk  'BEGIN	{ printf "0, " }
 			     !/^NSIG/	{ printf "%d, ", $2}
 			     END	{ printf "0\n"}' signal.lst`
	;;
esac
echo "The following $sig_count signals are available:"
echo " "
echo $sig_name | $awk \
'BEGIN { linelen = 0 }
{
	for (i = 1; i <= NF; i++) {
		name = "SIG" $i " "
		linelen = linelen + length(name)
		if (linelen > 70) {
			printf "\n"
			linelen = length(name)
		}
		printf "%s", name
	}
	printf "\n"
}'
sig_size=`echo $sig_name | awk '{print NF}'`
$rm -f signal signal.c signal.awk signal.lst signal_cmd