// Copyright status: this file is in the public domain. #include "lx.h" #include "internal.h" static void chain_done(LX_CONN *xc) { int savedop; int savedn; if (xc->chain) { savedop = xc->traceop; savedn = xc->tracen; xc->traceop = TRACEOP_IDLE; xc->tracen = -1; (*xc->chain->done)(xc,xc->chainpriv); xc->traceop = savedop; xc->tracen = savedn; } } void *lx__chainable(LX_CONN *xc, CHAINER *ch) { if (xc->chain != ch) { chain_done(xc); xc->chain = ch; xc->chainpriv = (*ch->start)(xc); } return(xc->chainpriv); } int lx__nochain(LX_CONN *xc) { if (! xc->chain) return(0); chain_done(xc); xc->chain = 0; xc->chainpriv = 0; return(1); }