BSD 4_3 development
authorCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 23 Oct 1985 02:20:14 +0000 (18:20 -0800)
committerCSRG <csrg@ucbvax.Berkeley.EDU>
Wed, 23 Oct 1985 02:20:14 +0000 (18:20 -0800)
Work on file usr/contrib/mh/sbr/pidstatus.c

Synthesized-from: CSRG/cd1/4.3

usr/contrib/mh/sbr/pidstatus.c [new file with mode: 0644]

diff --git a/usr/contrib/mh/sbr/pidstatus.c b/usr/contrib/mh/sbr/pidstatus.c
new file mode 100644 (file)
index 0000000..59a598a
--- /dev/null
@@ -0,0 +1,89 @@
+/* pidstatus.c - report child's status */
+
+#include "../h/mh.h"
+#include <signal.h>
+#include <stdio.h>
+
+
+#ifndef        BSD42
+static char *sigs[] = {
+    NULL,
+    "Hangup",
+    "Interrupt",
+    "Quit",
+    "Illegal instruction",
+    "Trace/BPT trap",
+    "IOT trap",
+    "EMT trap",
+    "Floating exception",
+    "Killed",
+    "Bus error",
+    "Segmentation fault",
+    "Bad system call",
+    "Broken pipe",
+    "Alarm clock",
+    "Terminated",
+#ifdef SIGURG
+    "Urgent I/O condition",
+#else
+    NULL,
+#endif
+    "Stopped (signal)",
+    "Stopped",
+    "Continued",
+    "Child exited",
+    "Stopped (tty input)",
+    "Stopped (tty output)",
+    "Tty input interrupt",
+    "Cputime limit exceeded",
+    "Filesize limit exceeded",
+    NULL
+};
+#else
+extern  char *sys_siglist[];
+#endif BSD42
+
+/* \f */
+
+int    pidstatus (status, fp, cp)
+register int   status;
+register FILE *fp;
+register char *cp;
+{
+    int     signum;
+
+    if ((status & 0xff00) == 0xff00)
+       return status;
+
+    switch (signum = status & 0x007f) {
+       case OK: 
+           if (signum = ((status & 0xff00) >> 8)) {
+               if (cp)
+                   fprintf (fp, "%s: ", cp);
+               fprintf (fp, "Exit %d\n", signum);
+           }
+           break;
+
+       case SIGINT: 
+           break;
+
+       default: 
+           if (cp)
+               fprintf (fp, "%s: ", cp);
+#ifndef        BSD42
+           if (signum >= sizeof sigs || sigs[signum] == NULL)
+               fprintf (fp, "Signal %d", signum);
+           else
+               fprintf (fp, "%s", sigs[signum]);
+#else  BSD42
+           if (signum >= NSIG)
+               fprintf (fp, "Signal %d", signum);
+           else
+               fprintf (fp, "%s", sys_siglist[signum]);
+#endif BSD42
+           fprintf (fp, "%s\n", status & 0x80 ? " (core dumped)" : "");
+           break;
+    }
+
+    return status;
+}