18462SApril.Chin@Sun.COM /***********************************************************************
28462SApril.Chin@Sun.COM * *
38462SApril.Chin@Sun.COM * This software is part of the ast package *
4*12068SRoger.Faulkner@Oracle.COM * Copyright (c) 1985-2010 AT&T Intellectual Property *
58462SApril.Chin@Sun.COM * and is licensed under the *
68462SApril.Chin@Sun.COM * Common Public License, Version 1.0 *
78462SApril.Chin@Sun.COM * by AT&T Intellectual Property *
88462SApril.Chin@Sun.COM * *
98462SApril.Chin@Sun.COM * A copy of the License is available at *
108462SApril.Chin@Sun.COM * http://www.opensource.org/licenses/cpl1.0.txt *
118462SApril.Chin@Sun.COM * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
128462SApril.Chin@Sun.COM * *
138462SApril.Chin@Sun.COM * Information and Software Systems Research *
148462SApril.Chin@Sun.COM * AT&T Research *
158462SApril.Chin@Sun.COM * Florham Park NJ *
168462SApril.Chin@Sun.COM * *
178462SApril.Chin@Sun.COM * Glenn Fowler <gsf@research.att.com> *
188462SApril.Chin@Sun.COM * David Korn <dgk@research.att.com> *
198462SApril.Chin@Sun.COM * Phong Vo <kpv@research.att.com> *
208462SApril.Chin@Sun.COM * *
218462SApril.Chin@Sun.COM ***********************************************************************/
228462SApril.Chin@Sun.COM #pragma prototyped
238462SApril.Chin@Sun.COM /*
248462SApril.Chin@Sun.COM * Glenn Fowler
258462SApril.Chin@Sun.COM * AT&T Research
268462SApril.Chin@Sun.COM *
278462SApril.Chin@Sun.COM * _opt_infop_ context control
288462SApril.Chin@Sun.COM *
298462SApril.Chin@Sun.COM * allocate new context:
308462SApril.Chin@Sun.COM * new_context = optctx(0, 0);
318462SApril.Chin@Sun.COM * free new context:
328462SApril.Chin@Sun.COM * optctx(0, new_context);
338462SApril.Chin@Sun.COM * switch to new_context:
348462SApril.Chin@Sun.COM * old_context = optctx(new_context, 0);
358462SApril.Chin@Sun.COM * switch to old_context and free new_context:
368462SApril.Chin@Sun.COM * optctx(old_context, new_context);
378462SApril.Chin@Sun.COM */
388462SApril.Chin@Sun.COM
398462SApril.Chin@Sun.COM #include <optlib.h>
408462SApril.Chin@Sun.COM
418462SApril.Chin@Sun.COM static Opt_t* freecontext;
428462SApril.Chin@Sun.COM
438462SApril.Chin@Sun.COM Opt_t*
optctx(Opt_t * p,Opt_t * o)448462SApril.Chin@Sun.COM optctx(Opt_t* p, Opt_t* o)
458462SApril.Chin@Sun.COM {
468462SApril.Chin@Sun.COM if (o)
478462SApril.Chin@Sun.COM {
488462SApril.Chin@Sun.COM if (freecontext)
498462SApril.Chin@Sun.COM free(o);
508462SApril.Chin@Sun.COM else
518462SApril.Chin@Sun.COM freecontext = o;
528462SApril.Chin@Sun.COM if (!p)
538462SApril.Chin@Sun.COM return 0;
548462SApril.Chin@Sun.COM }
558462SApril.Chin@Sun.COM if (p)
568462SApril.Chin@Sun.COM {
578462SApril.Chin@Sun.COM o = _opt_infop_;
588462SApril.Chin@Sun.COM _opt_infop_ = p;
598462SApril.Chin@Sun.COM }
608462SApril.Chin@Sun.COM else
618462SApril.Chin@Sun.COM {
628462SApril.Chin@Sun.COM if (o = freecontext)
638462SApril.Chin@Sun.COM freecontext = 0;
648462SApril.Chin@Sun.COM else if (!(o = newof(0, Opt_t, 1, 0)))
658462SApril.Chin@Sun.COM return 0;
668462SApril.Chin@Sun.COM memset(o, 0, sizeof(Opt_t));
678462SApril.Chin@Sun.COM o->state = _opt_infop_->state;
688462SApril.Chin@Sun.COM }
698462SApril.Chin@Sun.COM return o;
708462SApril.Chin@Sun.COM }
71