+/* error.c 4.1 82/05/07 */
+
+#
+/*
+ * UNIX shell
+ *
+ * S. R. Bourne
+ * Bell Telephone Laboratories
+ *
+ */
+
+#include "defs.h"
+
+
+/* ======== error handling ======== */
+
+exitset()
+{
+ assnum(&exitadr,exitval);
+}
+
+sigchk()
+{
+ /* Find out if it is time to go away.
+ * `trapnote' is set to SIGSET when fault is seen and
+ * no trap has been set.
+ */
+ IF trapnote&SIGSET
+ THEN exitsh(SIGFAIL);
+ FI
+}
+
+failed(s1,s2)
+ STRING s1, s2;
+{
+ prp(); prs(s1);
+ IF s2
+ THEN prs(colon); prs(s2);
+ FI
+ newline(); exitsh(ERROR);
+}
+
+error(s)
+ STRING s;
+{
+ failed(s,NIL);
+}
+
+exitsh(xno)
+ INT xno;
+{
+ /* Arrive here from `FATAL' errors
+ * a) exit command,
+ * b) default trap,
+ * c) fault with no trap set.
+ *
+ * Action is to return to command level or exit.
+ */
+ exitval=xno;
+ IF (flags & (forked|errflg|ttyflg)) != ttyflg
+ THEN done();
+ ELSE clearup();
+ longjmp(errshell,1);
+ FI
+}
+
+done()
+{
+ REG STRING t;
+ IF t=trapcom[0]
+ THEN trapcom[0]=0; /*should free but not long */
+ execexp(t,0);
+ FI
+ rmtemp(0);
+ exit(exitval);
+}
+
+rmtemp(base)
+ IOPTR base;
+{
+ WHILE iotemp>base
+ DO unlink(iotemp->ioname);
+ iotemp=iotemp->iolst;
+ OD
+}