1*8462SApril.Chin@Sun.COM /***********************************************************************
2*8462SApril.Chin@Sun.COM *                                                                      *
3*8462SApril.Chin@Sun.COM *               This software is part of the ast package               *
4*8462SApril.Chin@Sun.COM *          Copyright (c) 1985-2008 AT&T Intellectual Property          *
5*8462SApril.Chin@Sun.COM *                      and is licensed under the                       *
6*8462SApril.Chin@Sun.COM *                  Common Public License, Version 1.0                  *
7*8462SApril.Chin@Sun.COM *                    by AT&T Intellectual Property                     *
8*8462SApril.Chin@Sun.COM *                                                                      *
9*8462SApril.Chin@Sun.COM *                A copy of the License is available at                 *
10*8462SApril.Chin@Sun.COM *            http://www.opensource.org/licenses/cpl1.0.txt             *
11*8462SApril.Chin@Sun.COM *         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12*8462SApril.Chin@Sun.COM *                                                                      *
13*8462SApril.Chin@Sun.COM *              Information and Software Systems Research               *
14*8462SApril.Chin@Sun.COM *                            AT&T Research                             *
15*8462SApril.Chin@Sun.COM *                           Florham Park NJ                            *
16*8462SApril.Chin@Sun.COM *                                                                      *
17*8462SApril.Chin@Sun.COM *                 Glenn Fowler <gsf@research.att.com>                  *
18*8462SApril.Chin@Sun.COM *                  David Korn <dgk@research.att.com>                   *
19*8462SApril.Chin@Sun.COM *                   Phong Vo <kpv@research.att.com>                    *
20*8462SApril.Chin@Sun.COM *                                                                      *
21*8462SApril.Chin@Sun.COM ***********************************************************************/
22*8462SApril.Chin@Sun.COM #pragma prototyped
23*8462SApril.Chin@Sun.COM /*
24*8462SApril.Chin@Sun.COM  * Glenn Fowler
25*8462SApril.Chin@Sun.COM  * AT&T Research
26*8462SApril.Chin@Sun.COM  *
27*8462SApril.Chin@Sun.COM  * _opt_infop_ context control
28*8462SApril.Chin@Sun.COM  *
29*8462SApril.Chin@Sun.COM  * allocate new context:
30*8462SApril.Chin@Sun.COM  *	new_context = optctx(0, 0);
31*8462SApril.Chin@Sun.COM  * free new context:
32*8462SApril.Chin@Sun.COM  *	optctx(0, new_context);
33*8462SApril.Chin@Sun.COM  * switch to new_context:
34*8462SApril.Chin@Sun.COM  *	old_context = optctx(new_context, 0);
35*8462SApril.Chin@Sun.COM  * switch to old_context and free new_context:
36*8462SApril.Chin@Sun.COM  *	optctx(old_context, new_context);
37*8462SApril.Chin@Sun.COM  */
38*8462SApril.Chin@Sun.COM 
39*8462SApril.Chin@Sun.COM #include <optlib.h>
40*8462SApril.Chin@Sun.COM 
41*8462SApril.Chin@Sun.COM static Opt_t*	freecontext;
42*8462SApril.Chin@Sun.COM 
43*8462SApril.Chin@Sun.COM Opt_t*
44*8462SApril.Chin@Sun.COM optctx(Opt_t* p, Opt_t* o)
45*8462SApril.Chin@Sun.COM {
46*8462SApril.Chin@Sun.COM 	if (o)
47*8462SApril.Chin@Sun.COM 	{
48*8462SApril.Chin@Sun.COM 		if (freecontext)
49*8462SApril.Chin@Sun.COM 			free(o);
50*8462SApril.Chin@Sun.COM 		else
51*8462SApril.Chin@Sun.COM 			freecontext = o;
52*8462SApril.Chin@Sun.COM 		if (!p)
53*8462SApril.Chin@Sun.COM 			return 0;
54*8462SApril.Chin@Sun.COM 	}
55*8462SApril.Chin@Sun.COM 	if (p)
56*8462SApril.Chin@Sun.COM 	{
57*8462SApril.Chin@Sun.COM 		o = _opt_infop_;
58*8462SApril.Chin@Sun.COM 		_opt_infop_ = p;
59*8462SApril.Chin@Sun.COM 	}
60*8462SApril.Chin@Sun.COM 	else
61*8462SApril.Chin@Sun.COM 	{
62*8462SApril.Chin@Sun.COM 		if (o = freecontext)
63*8462SApril.Chin@Sun.COM 			freecontext = 0;
64*8462SApril.Chin@Sun.COM 		else if (!(o = newof(0, Opt_t, 1, 0)))
65*8462SApril.Chin@Sun.COM 			return 0;
66*8462SApril.Chin@Sun.COM 		memset(o, 0, sizeof(Opt_t));
67*8462SApril.Chin@Sun.COM 		o->state = _opt_infop_->state;
68*8462SApril.Chin@Sun.COM 	}
69*8462SApril.Chin@Sun.COM 	return o;
70*8462SApril.Chin@Sun.COM }
71