219 |
|
{ |
220 |
|
static char nambuf[MAXWORD]; |
221 |
|
register char *cp = nambuf, *cpp = context; |
222 |
+ |
/* check for explicit global */ |
223 |
+ |
if (*nam == CNTXMARK) |
224 |
+ |
return(lvl > 0 ? NULL : nam+1); |
225 |
|
/* check for repeat call */ |
226 |
|
if (nam == nambuf) |
227 |
|
return(lvl > 0 ? NULL : nambuf); |
255 |
|
return(nambuf); /* return qualified name */ |
256 |
|
toolong: |
257 |
|
*cp = '\0'; |
258 |
< |
wputs(nambuf); |
259 |
< |
wputs(": name too long\n"); |
260 |
< |
return(NULL); |
258 |
> |
eputs(nambuf); |
259 |
> |
eputs(": name too long\n"); |
260 |
> |
quit(1); |
261 |
|
} |
262 |
|
|
263 |
|
|
264 |
+ |
incontext(qn) /* is qualified name in current context? */ |
265 |
+ |
register char *qn; |
266 |
+ |
{ |
267 |
+ |
while (*qn && *qn != CNTXMARK) /* find context mark */ |
268 |
+ |
; |
269 |
+ |
return(!strcmp(qn, context)); |
270 |
+ |
} |
271 |
+ |
|
272 |
+ |
|
273 |
|
#ifdef OUTCHAN |
274 |
|
chanout(cs) /* set output channels */ |
275 |
|
int (*cs)(); |
289 |
|
register int i; |
290 |
|
register VARDEF *vp; |
291 |
|
register EPNODE *ep; |
292 |
< |
|
292 |
> |
/* if context is global, clear all */ |
293 |
|
for (i = 0; i < NHASH; i++) |
294 |
|
for (vp = hashtbl[i]; vp != NULL; vp = vp->next) |
295 |
< |
if (lvl >= 2) |
296 |
< |
dremove(vp->name); |
297 |
< |
else |
298 |
< |
dclear(vp->name); |
295 |
> |
if (!context[0] || incontext(vp->name)) |
296 |
> |
if (lvl >= 2) |
297 |
> |
dremove(vp->name); |
298 |
> |
else |
299 |
> |
dclear(vp->name); |
300 |
|
#ifdef OUTCHAN |
301 |
|
if (lvl >= 1) { |
302 |
|
for (ep = outchan; ep != NULL; ep = ep->sibling) |