1N/A/***********************************************************************
1N/A* *
1N/A* This software is part of the ast package *
1N/A* Copyright (c) 1985-2011 AT&T Intellectual Property *
1N/A* and is licensed under the *
1N/A* Common Public License, Version 1.0 *
1N/A* by AT&T Intellectual Property *
1N/A* *
1N/A* A copy of the License is available at *
1N/A* http://www.opensource.org/licenses/cpl1.0.txt *
1N/A* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
1N/A* *
1N/A* Information and Software Systems Research *
1N/A* AT&T Research *
1N/A* Florham Park NJ *
1N/A* *
1N/A* Glenn Fowler <gsf@research.att.com> *
1N/A* David Korn <dgk@research.att.com> *
1N/A* Phong Vo <kpv@research.att.com> *
1N/A* *
1N/A***********************************************************************/
1N/A#pragma prototyped
1N/A/*
1N/A * Glenn Fowler
1N/A * AT&T Research
1N/A *
1N/A * _opt_infop_ context control
1N/A *
1N/A * allocate new context:
1N/A * new_context = optctx(0, 0);
1N/A * free new context:
1N/A * optctx(0, new_context);
1N/A * switch to new_context:
1N/A * old_context = optctx(new_context, 0);
1N/A * switch to old_context and free new_context:
1N/A * optctx(old_context, new_context);
1N/A */
1N/A
1N/A#include <optlib.h>
1N/A
1N/Astatic Opt_t* freecontext;
1N/A
1N/AOpt_t*
1N/Aoptctx(Opt_t* p, Opt_t* o)
1N/A{
1N/A if (o)
1N/A {
1N/A if (freecontext)
1N/A free(o);
1N/A else
1N/A freecontext = o;
1N/A if (!p)
1N/A return 0;
1N/A }
1N/A if (p)
1N/A {
1N/A o = _opt_infop_;
1N/A _opt_infop_ = p;
1N/A }
1N/A else
1N/A {
1N/A if (o = freecontext)
1N/A freecontext = 0;
1N/A else if (!(o = newof(0, Opt_t, 1, 0)))
1N/A return 0;
1N/A memset(o, 0, sizeof(Opt_t));
1N/A o->state = _opt_infop_->state;
1N/A }
1N/A return o;
1N/A}