use syscall for doing syswrite stuff -- more portable?
[unix-history] / usr / src / local / sccscmds / sccscmds.ok / util / setsig.c
CommitLineData
9ba5b3ae 1static char Sccsid[] = "@(#)setsig.c 1.3 %G%";
455d17bb 2
3084bb00
JL
3# include "signal.h"
4#undef NSIG
5# ifdef PWB
6#define NSIG 16
7# else
8#define NSIG 4
9# endif
10# include "../hdr/macros.h"
9ba5b3ae
SL
11#include <sys/syscall.h>
12#define syswrite(a,b,c) syscall(SYS_write,a,b,c)
3084bb00
JL
13
14/*
15 General-purpose signal setting routine.
16 All non-ignored, non-caught signals are caught.
17 If a signal other than hangup, interrupt, or quit is caught,
18 a "user-oriented" message is printed on file descriptor 2 with
19 a number for help(I).
20 If hangup, interrupt or quit is caught, that signal
21 is set to ignore.
22 Termination is like that of "fatal",
23 via "clean_up(sig)" (sig is the signal number)
24 and "exit(userexit(1))".
25
26 If the file "dump.core" exists in the current directory
27 the function commits
28 suicide to produce a core dump
29 (after calling clean_up, but before calling userexit).
30*/
31
32
455d17bb 33char *Mesg[NSIG] = {
3084bb00
JL
34 0,
35 0, /* Hangup */
36 0, /* Interrupt */
37 0, /* Quit */
38# ifdef PWB
39 "Illegal instruction",
40 "Trace/BPT trap",
41 "IOT trap",
42 "EMT trap",
43 "Floating exception",
44 "Killed",
45 "Bus error",
46 "Memory fault",
47 "Bad system call",
48 "Broken pipe",
49 "Alarm clock",
50 "Terminated"
51# endif PWB
52};
53
54
55setsig()
56{
57 extern int setsig1();
58 register int j, n;
59
60 for (j=1; j<NSIG; j++)
61 if (n=signal(j,setsig1))
62 signal(j,n);
63}
64
65
455d17bb
JL
66static char preface[] = "SIGNAL: ";
67static char endmsg[] = " (ut12)\n";
3084bb00
JL
68
69setsig1(sig)
70int sig;
71{
72# ifndef PWB
73 sig = 2;
74# endif PWB
75 if (Mesg[sig]) {
76 syswrite(2,preface,length(preface));
77 syswrite(2,Mesg[sig],length(Mesg[sig]));
78 syswrite(2,endmsg,length(endmsg));
79 }
80 else
81 signal(sig,1);
82 clean_up(sig);
83 if(open("dump.core",0) > 0) {
84 signal(SIGIOT,0);
85 abort();
86 }
87 exit(userexit(1));
88}