1*b30d1939SAndy Fiddaman /***********************************************************************
2*b30d1939SAndy Fiddaman * *
3*b30d1939SAndy Fiddaman * This software is part of the ast package *
4*b30d1939SAndy Fiddaman * Copyright (c) 1986-2011 AT&T Intellectual Property *
5*b30d1939SAndy Fiddaman * and is licensed under the *
6*b30d1939SAndy Fiddaman * Eclipse Public License, Version 1.0 *
7*b30d1939SAndy Fiddaman * by AT&T Intellectual Property *
8*b30d1939SAndy Fiddaman * *
9*b30d1939SAndy Fiddaman * A copy of the License is available at *
10*b30d1939SAndy Fiddaman * http://www.eclipse.org/org/documents/epl-v10.html *
11*b30d1939SAndy Fiddaman * (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12*b30d1939SAndy Fiddaman * *
13*b30d1939SAndy Fiddaman * Information and Software Systems Research *
14*b30d1939SAndy Fiddaman * AT&T Research *
15*b30d1939SAndy Fiddaman * Florham Park NJ *
16*b30d1939SAndy Fiddaman * *
17*b30d1939SAndy Fiddaman * Glenn Fowler <gsf@research.att.com> *
18*b30d1939SAndy Fiddaman * *
19*b30d1939SAndy Fiddaman ***********************************************************************/
20*b30d1939SAndy Fiddaman #pragma prototyped
21*b30d1939SAndy Fiddaman /*
22*b30d1939SAndy Fiddaman * Glenn Fowler
23*b30d1939SAndy Fiddaman * AT&T Research
24*b30d1939SAndy Fiddaman *
25*b30d1939SAndy Fiddaman * preprocessor context switch
26*b30d1939SAndy Fiddaman *
27*b30d1939SAndy Fiddaman * args op return
28*b30d1939SAndy Fiddaman * (0,0) free current context 0
29*b30d1939SAndy Fiddaman * (0,1) save current context current
30*b30d1939SAndy Fiddaman * (p,0) free context p 0
31*b30d1939SAndy Fiddaman * (p,1) make p current context previous
32*b30d1939SAndy Fiddaman */
33*b30d1939SAndy Fiddaman
34*b30d1939SAndy Fiddaman #include "pplib.h"
35*b30d1939SAndy Fiddaman
36*b30d1939SAndy Fiddaman void*
ppcontext(void * context,int flags)37*b30d1939SAndy Fiddaman ppcontext(void* context, int flags)
38*b30d1939SAndy Fiddaman {
39*b30d1939SAndy Fiddaman struct ppcontext* np = (struct ppcontext*)context;
40*b30d1939SAndy Fiddaman struct ppcontext* op;
41*b30d1939SAndy Fiddaman
42*b30d1939SAndy Fiddaman if (flags & 01)
43*b30d1939SAndy Fiddaman {
44*b30d1939SAndy Fiddaman if (!(op = pp.context)) op = pp.context = newof(0, struct ppcontext, 1, 0);
45*b30d1939SAndy Fiddaman memcpy(op, _PP_CONTEXT_BASE_, sizeof(struct ppcontext));
46*b30d1939SAndy Fiddaman }
47*b30d1939SAndy Fiddaman else
48*b30d1939SAndy Fiddaman {
49*b30d1939SAndy Fiddaman if (!(op = np)) op = (struct ppcontext*)_PP_CONTEXT_BASE_;
50*b30d1939SAndy Fiddaman if (op->filtab) hashfree(op->filtab);
51*b30d1939SAndy Fiddaman if (op->prdtab) hashfree(op->prdtab);
52*b30d1939SAndy Fiddaman if (op->symtab) hashfree(op->symtab);
53*b30d1939SAndy Fiddaman if (op->date) free(op->date);
54*b30d1939SAndy Fiddaman if (op->time) free(op->time);
55*b30d1939SAndy Fiddaman if (np)
56*b30d1939SAndy Fiddaman {
57*b30d1939SAndy Fiddaman free(np);
58*b30d1939SAndy Fiddaman np = 0;
59*b30d1939SAndy Fiddaman }
60*b30d1939SAndy Fiddaman memzero(op, sizeof(struct ppcontext));
61*b30d1939SAndy Fiddaman op = 0;
62*b30d1939SAndy Fiddaman }
63*b30d1939SAndy Fiddaman if (np) memcpy(_PP_CONTEXT_BASE_, np, sizeof(struct ppcontext));
64*b30d1939SAndy Fiddaman return((void*)op);
65*b30d1939SAndy Fiddaman }
66