siglist.sh revision 1.11 1 1.1 jtc #!/bin/sh
2 1.10 christos # $NetBSD: siglist.sh,v 1.11 2016/03/17 13:54:31 christos Exp $
3 1.1 jtc #
4 1.1 jtc # Script to generate a sorted, complete list of signals, suitable
5 1.1 jtc # for inclusion in trap.c as array initializer.
6 1.1 jtc #
7 1.1 jtc
8 1.11 christos set -e
9 1.11 christos
10 1.11 christos : ${AWK:=awk}
11 1.8 apb : ${SED:=sed}
12 1.7 apb
13 1.11 christos in=tmpi$$.c
14 1.11 christos out=tmpo$$.c
15 1.11 christos ecode=1
16 1.11 christos trapsigs='0 1 2 13 15'
17 1.11 christos trap 'rm -f $in $out; trap 0; exit $ecode' $trapsigs
18 1.11 christos
19 1.11 christos CPP="${1-cc -E}"
20 1.11 christos
21 1.10 christos # The trap here to make up for a bug in bash (1.14.3(1)) that calls the trap
22 1.11 christos (trap $trapsigs;
23 1.11 christos echo '#include "sh.h"';
24 1.11 christos echo ' { QwErTy SIGNALS , "DUMMY" , "hook for number of signals" },';
25 1.11 christos ${SED} -e '/^[ ]*#/d' -e 's/^[ ]*\([^ ][^ ]*\)[ ][ ]*\(.*[^ ]\)[ ]*$/#ifdef SIG\1\
26 1.11 christos { QwErTy .signal = SIG\1 , .name = "\1", .mess = "\2" },\
27 1.11 christos #endif/') > $in
28 1.11 christos # work around for gcc 5
29 1.11 christos $CPP $in | grep -v '^#' | tr -d '\n' | sed 's/},/},\
30 1.11 christos /g' > $out
31 1.11 christos ${SED} -n 's/{ QwErTy/{/p' < $out | ${AWK} '{print NR, $0}' | sort -k 5n -k 1n |
32 1.11 christos ${SED} 's/^[0-9]* //' |
33 1.11 christos ${AWK} 'BEGIN { last=0; nsigs=0; }
34 1.11 christos {
35 1.11 christos if ($4 ~ /^[0-9][0-9]*$/ && $5 == ",") {
36 1.11 christos n = $4;
37 1.11 christos if (n > 0 && n != last) {
38 1.11 christos while (++last < n) {
39 1.11 christos printf "\t{ .signal = %d , .name = NULL, .mess = `Signal %d` } ,\n", last, last;
40 1.11 christos }
41 1.11 christos print;
42 1.11 christos }
43 1.11 christos }
44 1.11 christos }' |
45 1.11 christos tr '`' '"' | grep -v '"DUMMY"'
46 1.11 christos ecode=0
47