/***********************************************************************1* *2* This software is part of the ast package *3* Copyright (c) 1985-2011 AT&T Intellectual Property *4* and is licensed under the *5* Eclipse Public License, Version 1.0 *6* by AT&T Intellectual Property *7* *8* A copy of the License is available at *9* http://www.eclipse.org/org/documents/epl-v10.html *10* (with md5 checksum b35adb5213ca9657e911e9befb180842) *11* *12* Information and Software Systems Research *13* AT&T Research *14* Florham Park NJ *15* *16* Glenn Fowler <[email protected]> *17* David Korn <[email protected]> *18* Phong Vo <[email protected]> *19* *20***********************************************************************/21#pragma prototyped22/*23* Glenn Fowler24* AT&T Research25*26* _opt_infop_ context control27*28* allocate new context:29* new_context = optctx(0, 0);30* free new context:31* optctx(0, new_context);32* switch to new_context:33* old_context = optctx(new_context, 0);34* switch to old_context and free new_context:35* optctx(old_context, new_context);36*/3738#include <optlib.h>3940static Opt_t* freecontext;4142Opt_t*43optctx(Opt_t* p, Opt_t* o)44{45if (o)46{47if (freecontext)48free(o);49else50freecontext = o;51if (!p)52return 0;53}54if (p)55{56o = _opt_infop_;57_opt_infop_ = p;58}59else60{61if (o = freecontext)62freecontext = 0;63else if (!(o = newof(0, Opt_t, 1, 0)))64return 0;65memset(o, 0, sizeof(Opt_t));66o->state = _opt_infop_->state;67}68return o;69}707172