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* 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