BSD 4_4_Lite1 release
[unix-history] / usr / src / contrib / mh-6.8.3a / sbr / pidstatus.c
CommitLineData
ad787160
C
1/* pidstatus.c - report child's status */
2#ifndef lint
ed554bc5 3static char ident[] = "@(#)$Id: pidstatus.c,v 1.4 1993/02/26 21:57:34 jromine Exp $";
ad787160
C
4#endif /* lint */
5
6#include "../h/mh.h"
7#include <signal.h>
8#include <stdio.h>
9
10
11#ifndef BSD44
12#ifndef BSD42
13static char *sigs[] = {
14 NULL,
15 "Hangup",
16 "Interrupt",
17 "Quit",
18 "Illegal instruction",
19 "Trace/BPT trap",
20 "IOT trap",
21 "EMT trap",
22 "Floating exception",
23 "Killed",
24 "Bus error",
25 "Segmentation fault",
26 "Bad system call",
27 "Broken pipe",
28 "Alarm clock",
29 "Terminated",
30#ifdef SIGURG
31 "Urgent I/O condition",
32#else
33 NULL,
34#endif
35 "Stopped (signal)",
36 "Stopped",
37 "Continued",
38 "Child exited",
39 "Stopped (tty input)",
40 "Stopped (tty output)",
41 "Tty input interrupt",
42 "Cputime limit exceeded",
43 "Filesize limit exceeded",
44 NULL
45};
46#else
47extern char *sys_siglist[];
48#endif /* BSD42 */
49#endif /* BSD44 defines sys_siglist in signal.h */
50
51/* \f */
52
53int pidstatus (status, fp, cp)
54register int status;
55register FILE *fp;
56register char *cp;
57{
58 int signum;
59
60 if ((status & 0xff00) == 0xff00)
61 return status;
62
63 switch (signum = status & 0x007f) {
64 case OK:
65 if (signum = ((status & 0xff00) >> 8)) {
66 if (cp)
67 fprintf (fp, "%s: ", cp);
68 fprintf (fp, "Exit %d\n", signum);
69 }
70 break;
71
72 case SIGINT:
73 break;
74
75 default:
76 if (cp)
77 fprintf (fp, "%s: ", cp);
78#ifndef BSD42
79 if (signum >= sizeof sigs || sigs[signum] == NULL)
80 fprintf (fp, "Signal %d", signum);
81 else
82 fprintf (fp, "%s", sigs[signum]);
83#else /* BSD42 */
84 if (signum >= NSIG)
85 fprintf (fp, "Signal %d", signum);
86 else
87 fprintf (fp, "%s", sys_siglist[signum]);
88#endif /* BSD42 */
89 fprintf (fp, "%s\n", status & 0x80 ? " (core dumped)" : "");
90 break;
91 }
92
93 return status;
94}