static char *sccsid
= "@(#)sh.set.c 4.1 10/9/80";
for (vp
= p
; alnum(*p
); p
++)
if (*p
== 0 && *v
&& **v
== '(')
} else if (*v
&& eq(*v
, "=")) {
asx(vp
, subscr
, savestr(p
));
exportpath(adrof("path")->vec
);
} else if (eq(vp
, "histchars")) {
register char *p
= value("histchars");
} else if (eq(vp
, "user"))
setenv("USER", value(vp
));
setenv("TERM", value(vp
));
setenv("HOME", value(vp
));
while (*cp
&& digit(*cp
))
*ip
= *ip
* 10 + *cp
++ - '0';
bferr("Subscript error");
register struct varent
*v
= getvx(vp
, subscr
);
xfree(v
->vec
[subscr
- 1]);
v
->vec
[subscr
- 1] = globone(p
);
register struct varent
*v
= adrof(vp
);
if (subscr
< 1 || subscr
> blklen(v
->vec
))
bferr("Subscript out of range");
char plusplus
[2] = { '1', 0 };
for (vp
= p
; letter(*p
); p
++)
/* avoid bug in vax CC */
struct varent
*gv
= getvx(vp
, subscr
);
asx(vp
, subscr
, operate(op
, gv
->vec
[subscr
- 1], p
));
asx(vp
, subscr
, operate(op
, getvx(vp
, subscr
)->vec
[subscr
- 1], p
));
set(vp
, operate(op
, value(vp
), p
));
if (strcmp(vp
, "path") == 0)
if (op
== '<' || op
== '>')
bferr("Expression syntax");
if (cp
>= end
&& cp
< (char *) &cp
)
strcpy(n
= calloc(1, strlen(s
) + 1), s
);
if (sizeof (int) == 2 && n
== -32768) {
} else if (sizeof (int) == 4 && n
== -2147483648) {
return (savestr(number
));
if (cp
[0] == '+' && cp
[1])
n
= n
* 10 + *cp
++ - '0';
bferr("Badly formed number");
return (value1(var
, &shvhed
));
register struct varent
*vp
;
return (vp
== 0 || vp
->vec
[0] == 0 ? "" : vp
->vec
[0]);
static struct varent
*shprev
;
return (adrof1(var
, &shvhed
));
register struct varent
*vp
;
for (vp
= shprev
->link
; vp
!= 0; vp
= vp
->link
) {
if (Gmatch(vp
->name
, pat
))
register struct varent
*vp
;
for (vp
= shprev
->link
; vp
!= 0; vp
= vp
->link
) {
cmp
= strcmp(vp
->name
, var
);
* The caller is responsible for putting value in a safe place
register char **vec
= (char **) calloc(2, sizeof (char **));
vec
[0] = onlyread(value
) ? savestr(value
) : value
;
register char **oldv
= vec
;
gflag
= 0; rscan(oldv
, tglob
);
register struct varent
*vp
;
vp
= (struct varent
*) calloc(1, sizeof *vp
);
if (adrof("histchars") == 0) {
register struct varent
*vp
;
while (vp
= madrof(var
, head
))
unsetv1(vp
->name
, head
), cnt
++;
register struct varent
*vp
;
register struct varent
*argv
;
if (strlen(*val
) + strlen(exppath
) + 2 > BUFSIZ
) {
printf("Warning: ridiculously long PATH truncated\n");
if (*val
== 0 || eq(*val
, ")"))