diff options
| author | Byron Rakitzis <byron@archone.tamu.edu> | 1992-05-27 00:00:01 +0100 |
|---|---|---|
| committer | Toby Goodwin <toby@paccrat.org> | 2015-05-16 21:22:04 +0100 |
| commit | 6bb38f6a01dbf4bbd584e038ceace0a00faa27bb (patch) | |
| tree | 589705b2492ce4681760846d9ca45600f0af298d /mksignal | |
release: rc-1.4
Diffstat (limited to 'mksignal')
| -rwxr-xr-x | mksignal | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/mksignal b/mksignal new file mode 100755 index 0000000..9a9b968 --- /dev/null +++ b/mksignal @@ -0,0 +1,75 @@ +#!/bin/sh +# generate rc's internal signal table from signal.h + +exec > sigmsgs.c + +echo '#include "sigmsgs.h"' +echo +echo 'Sigmsgs signals[] = {' + +sed ' s/\/\*[ ]*// + s/[ ]*\*\/// + s/([@*+!]) // + s/[ ]*([a-zA-Z,->& ]*)[ ]*// + s/^[ ]*\#[ ]*define/\#define/ + s/[ ]*signal$//' $1 | +awk ' + BEGIN { + # assign to nomesg["SIGNAME"] to suppress a long message + nomesg["SIGINT"] = 1 + nomesg["SIGPIPE"] = 1 + # assign to mesg["SIGNAME"] to override a message + mesg["SIGHUP"] = "hangup" + mesg["SIGKILL"] = "killed" + mesg["SIGQUIT"] = "quit" + mesg["SIGTERM"] = "terminated" + mesg["SIGURG"] = "urgent condition on i/o channel" + mesg["SIGSTOP"] = "stop signal not from tty" + mesg["SIGTSTP"] = "stopped" + mesg["SIGCONT"] = "continue" + mesg["SIGCHLD"] = "child stop or exit" + mesg["SIGTTIN"] = "background tty read" + mesg["SIGTTOU"] = "background tty write" + # assign to ignore["SIGNAME"] to explicitly ignore a named signal + ignore["SIGMAX"] = 1 + } + $1 == "#define" && $2 == "NSIG" && $3 ~ /^[0-9]+$/ { nsig = $3 } + $1 == "#define" && $2 ~ /^SIG/ && $3 ~ /^[0-9]+$/ && sig[$3] == "" && ignore[$2] == 0 { + sig[$3] = $2 + if ($3 > max) + max = $3 + if (mesg[$2] == "" && nomesg[$2] == 0) { + str = $4 + for (i = 5; i <= NF; i++) + str = str " " $i + mesg[$2] = str + } + } + END { + if (nsig == 0) + nsig = max + 1 + printf " {!!, !!},\n" + for (i = 1; i < nsig; i++) { + if (sig[i] == "") + printf " {!!, !!},\n" + else + printf " {!%s!, !%s!},\n", sig[i], mesg[sig[i]] + } + } +' | +tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!' 'abcdefghijklmnopqrstuvwxyz"' + +echo '};' + +exec > sigmsgs.h + +echo 'typedef struct {' +echo ' char *name, *msg;' +echo '} Sigmsgs;' +echo 'extern Sigmsgs signals[];' + +grep '^ ' sigmsgs.c | # the thing in quotes is ^<tab> +awk ' + { sum = sum + 1; } + END { print "#define NUMOFSIGNALS", sum } +' |