#include #include #include struct JMP_BUF *errenv = 0; static char proc[]="perror"; /* error reporting program */ const char *bmsprog = proc; /* program name default */ volatile void errpost(code) /* post error code with no logging if trapped */ int code; { if (errenv) longjmp(errenv->buf,code); errdesc("errpost with no envelope",code); } volatile void errdesc(desc,code) /* report error code and description */ const char *desc; /* description of error */ int code; /* error code */ { register char *parm = ""; char buf[18]; if (errenv) { if (fork()) longjmp(errenv->buf,code); parm = "N"; /* suppress message on terminal when trapped */ } if (!desc) desc = "unknown error"; execlp(proc,proc,ltoa(code,buf,10),bmsprog,desc,parm,0); if (!errenv) fprintf(stderr,"%s: error %d: %s\n",bmsprog,code,desc); /* Do NOT call exit(). It will screw up BTAS among other things. */ _exit(1); }