home *** CD-ROM | disk | FTP | other *** search
- # include "ctlmod.h"
- # include "pipes.h"
- # include <pv.h>
- # include <sccs.h>
-
- SCCSID(@(#)error.c 8.1 12/31/84)
-
- /*
- ** ERROR -- Ingres error message generator
- **
- ** Error message `num' is sent up towards the caller with param-
- ** eters `msg'. This routine may have any number of parameters,
- ** but the last one must be zero.
- **
- ** Parameters:
- ** num -- the error number.
- ** msg -- the first in a null-terminated list of
- ** arguments, all of type char *, which are
- ** passed as arguments to the error.
- **
- ** Returns:
- ** non-locally
- **
- ** Side Effects:
- ** Many and vast. The message gets passed up the
- ** stack of activations. The activation stack gets
- ** popped. Etc.
- **
- ** Trace Flags:
- ** 6.0 - 6.7
- */
-
- /*VARARGS2*/
- error(num, msg)
- int num;
- char *msg;
- {
- register char **x;
- pb_t pb;
- extern jmp_buf CmReset;
- typedef int ftype();
-
- # ifdef xCTR1
- if (tTf(6, 0))
- lprintf("error: %d, Ctx.ctx_cmark %d\n", num, Ctx.ctx_cmark);
- # endif
-
- /* flush the current input pipe */
- while (!bitset(PB_EOF, Ctx.ctx_ppb->pb_stat))
- pb_read(Ctx.ctx_ppb);
-
- /* free up some stack space (in case called from need) */
- if (num == -ERR_QBUF)
- {
- freebuf(Qbuf, Ctx.ctx_cmark);
- Ctx.ctx_pmark = Ctx.ctx_cmark;
- Ctx.ctx_new = TRUE;
- }
-
- /* create an error context & set the message parameters */
- initp();
- setp(PV_INT, (char *) num, 0);
- x = &msg;
- while (*x != NULL)
- setp(PV_STR, *x++, 0);
-
- /* send it to my caller */
- pb_prime(&pb, PB_ERR);
- call_setup(&pb, PB_NONE, (ftype *) NULL);
-
- /* send the message to the correct place & unwind the stack */
- proc_err(&pb, Ctx.ctx_pc, Ctx.ctx_pv);
- syserr("error: proc_err");
- }
- /*
- ** NFERROR -- non-fatal error.
- **
- ** Errors of this type are passed directly to the front end.
- **
- ** Parameters:
- ** (same as error)
- **
- ** Returns:
- ** The error number.
- **
- ** Side Effects:
- ** The message is sent off to the front end. It
- ** is marked as being informational only.
- */
-
- /*VARARGS2*/
- nferror(num, msg)
- int num;
- char *msg;
- {
- register char **p;
- pb_t pb;
- typedef int ftype();
-
- initp();
- setp(PV_INT, (char *) num, 0);
- for (p = &msg; *p != NULL; p++)
- setp(PV_STR, *p, 0);
- pb_prime(&pb, PB_ERR);
- call_setup(&pb, PB_NONE, (ftype *) NULL);
- pb.pb_stat |= PB_INFO;
- pb.pb_proc = PB_FRONT;
- send_off(&pb, Ctx.ctx_pc, Ctx.ctx_pv);
- pb_flush(&pb);
- resetp();
- return (num);
- }
-