1: # include "ctlmod.h"
2: # include <ingres.h>
3: # include <aux.h>
4: # include <tree.h>
5: # include <sccs.h>
6:
7: SCCSID(@(#)initp.c 8.1 12/31/84)
8:
9: /*
10: ** INITP -- initialize parameters for call
11: **
12: ** Saves the current context if one is in effect, and
13: ** initializes the new context. Further 'setp' calls
14: ** will set parameters, and 'call' will call the desired
15: ** function.
16: **
17: ** 'Initp' is also used by the error routine, except
18: ** that the 'call' is simulated internally in 'error'
19: **
20: ** Parameters:
21: ** none
22: **
23: ** Returns:
24: ** nothing
25: **
26: ** Side Effects:
27: ** Saves the context 'Ctx' if active.
28: ** Initializes 'Ctx'.
29: **
30: ** Trace Flags:
31: ** 4.0 - 4.3
32: */
33:
34: initp()
35: {
36: register ctx_t *pctx;
37: register int sz;
38: extern char *need();
39:
40: # ifdef xCTR1
41: if (tTf(4, 0))
42: lprintf("initp: new %d mark %d\n", Ctx.ctx_new, markbuf(Qbuf));
43: # endif
44:
45: if (!Ctx.ctx_new)
46: {
47: /*
48: ** Save the context.
49: ** Mark the current point in Qbuf.
50: ** Allocate space from Qbuf and save the context.
51: ** Only save as much of the pv as is used.
52: ** Leave 'pctx' as a pointer to the save area.
53: */
54:
55: Ctx.ctx_cmark = markbuf(Qbuf);
56: sz = Ctx.ctx_pc * sizeof Ctx.ctx_pv[0]
57: + ((char *) Ctx.ctx_pv - (char *) &Ctx);
58: pctx = (ctx_t *) need(Qbuf, sz);
59: bmove((char *) &Ctx, (char *) pctx, sz);
60:
61: /*
62: ** Initialize new context.
63: ** The current context describes the attributes of
64: ** the next context (e.g., ctx_size).
65: ** ctx_pmark marks the base of the parameters in
66: ** Qbuf.
67: ** ctx_qt points to the saved query tree header (if
68: ** one exists).
69: */
70:
71: Ctx.ctx_link = pctx;
72: Ctx.ctx_size = sz;
73: Ctx.ctx_pmark = markbuf(Qbuf);
74: Ctx.ctx_qt = NULL;
75: Ctx.ctx_resp = Cm.cm_myproc;
76:
77: /*
78: ** If the QT hdr is in use by the
79: ** context we just saved, arrange to have it saved
80: ** later (if anyone every tries to use it).
81: */
82:
83: if (Qt.qt_active > 0 && Qt.qt_ctx == NULL)
84: {
85: Qt.qt_ctx = (char *) pctx;
86: }
87: }
88: Ctx.ctx_pc = 0;
89: Ctx.ctx_init = Ctx.ctx_new = TRUE;
90: Ctx.ctx_errfn = NULL;
91: Ctx.ctx_fn = NULL;
92: Ctx.ctx_glob = NULL;
93:
94: # ifdef xCTR2
95: if (tTf(4, 2))
96: lprintf("initp: cmark %d pmark %d link %x\n",
97: Ctx.ctx_cmark, Ctx.ctx_pmark, Ctx.ctx_link);
98: # endif
99: }
Defined functions
initp
defined in line
7; used 2 times