BSD 4_4_Lite1 development
[unix-history] / usr / src / contrib / rc-1.4 / mksignal
CommitLineData
a6559e03
C
1#!/bin/sh
2# generate rc's internal signal table from signal.h
3
4exec > sigmsgs.c
5
6echo '#include "sigmsgs.h"'
7echo
8echo 'Sigmsgs signals[] = {'
9
10sed ' s/\/\*[ ]*//
11 s/[ ]*\*\///
12 s/([@*+!]) //
13 s/[ ]*([a-zA-Z,->& ]*)[ ]*//
14 s/^[ ]*\#[ ]*define/\#define/
15 s/[ ]*signal$//' $1 |
16awk '
17 BEGIN {
18 # assign to nomesg["SIGNAME"] to suppress a long message
19 nomesg["SIGINT"] = 1
20 nomesg["SIGPIPE"] = 1
21 # assign to mesg["SIGNAME"] to override a message
22 mesg["SIGHUP"] = "hangup"
23 mesg["SIGKILL"] = "killed"
24 mesg["SIGQUIT"] = "quit"
25 mesg["SIGTERM"] = "terminated"
26 mesg["SIGURG"] = "urgent condition on i/o channel"
27 mesg["SIGSTOP"] = "stop signal not from tty"
28 mesg["SIGTSTP"] = "stopped"
29 mesg["SIGCONT"] = "continue"
30 mesg["SIGCHLD"] = "child stop or exit"
31 mesg["SIGTTIN"] = "background tty read"
32 mesg["SIGTTOU"] = "background tty write"
33 # assign to ignore["SIGNAME"] to explicitly ignore a named signal
34 ignore["SIGMAX"] = 1
35 }
36 $1 == "#define" && $2 == "NSIG" && $3 ~ /^[0-9]+$/ { nsig = $3 }
37 $1 == "#define" && $2 ~ /^SIG/ && $3 ~ /^[0-9]+$/ && sig[$3] == "" && ignore[$2] == 0 {
38 sig[$3] = $2
39 if ($3 > max)
40 max = $3
41 if (mesg[$2] == "" && nomesg[$2] == 0) {
42 str = $4
43 for (i = 5; i <= NF; i++)
44 str = str " " $i
45 mesg[$2] = str
46 }
47 }
48 END {
49 if (nsig == 0)
50 nsig = max + 1
51 printf " {!!, !!},\n"
52 for (i = 1; i < nsig; i++) {
53 if (sig[i] == "")
54 printf " {!!, !!},\n"
55 else
56 printf " {!%s!, !%s!},\n", sig[i], mesg[sig[i]]
57 }
58 }
59' |
60tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!' 'abcdefghijklmnopqrstuvwxyz"'
61
62echo '};'
63
64exec > sigmsgs.h
65
66echo 'typedef struct {'
67echo ' char *name, *msg;'
68echo '} Sigmsgs;'
69echo 'extern Sigmsgs signals[];'
70
71grep '^ ' sigmsgs.c | # the thing in quotes is ^<tab>
72awk '
73 { sum = sum + 1; }
74 END { print "#define NUMOFSIGNALS", sum }
75'