Lines Matching refs:vp
29 static char *formatstr ARGS((struct tbl *vp, const char *s));
30 static void export ARGS((struct tbl *vp, const char *val));
33 static void getspec ARGS((struct tbl *vp));
34 static void setspec ARGS((struct tbl *vp));
35 static void unsetspec ARGS((struct tbl *vp));
72 struct tbl *vp, **vpp = l->vars.tbls, *vq;
77 if ((vp = *vpp++) != NULL && (vp->flag&SPECIAL)) {
78 if ((vq = global(vp->name))->flag & ISSET)
178 struct tbl *vp;
191 vp = &vtemp;
192 vp->flag = DEFINED;
193 vp->type = 0;
194 vp->areap = ATEMP;
195 *vp->name = c;
201 setstr(vp, l->argv[c], KSH_RETURN_ERROR);
202 vp->flag |= RDONLY;
203 return vp;
205 vp->flag |= RDONLY;
207 return vp;
208 vp->flag |= ISSET|INTEGER;
211 vp->val.i = kshpid;
215 if ((vp->val.i = j_async()) == 0)
216 vp->flag &= ~(ISSET|INTEGER);
219 vp->val.i = exstat;
222 vp->val.i = l->argc;
225 vp->flag &= ~INTEGER;
226 vp->val.s = getoptions();
229 vp->flag &= ~(ISSET|INTEGER);
231 return vp;
234 vp = mytsearch(&l->vars, n, h);
235 if (vp != NULL) {
237 return arraysearch(vp, val);
239 return vp;
244 vp = tenter(&l->vars, n, h);
246 vp = arraysearch(vp, val);
247 vp->flag |= DEFINED;
249 vp->flag |= SPECIAL;
250 return vp;
260 struct tbl *vp;
269 vp = &vtemp;
270 vp->flag = DEFINED|RDONLY;
271 vp->type = 0;
272 vp->areap = ATEMP;
273 return vp;
275 vp = tenter(&l->vars, n, h);
276 if (copy && !(vp->flag & DEFINED)) {
283 vp->flag |= vq->flag & (EXPORT|INTEGER|RDONLY
287 vp->type = vq->type;
288 vp->u2.field = vq->u2.field;
292 vp = arraysearch(vp, val);
293 vp->flag |= DEFINED;
295 vp->flag |= SPECIAL;
296 return vp;
301 str_val(vp)
302 struct tbl *vp;
306 if ((vp->flag&SPECIAL))
307 getspec(vp);
308 if (!(vp->flag&ISSET))
310 else if (!(vp->flag&INTEGER)) /* string source */
311 s = vp->val.s + vp->type;
316 const char *digits = (vp->flag & UCASEV_AL) ?
323 if (vp->flag & INT_U)
324 n = (unsigned long) vp->val.i;
326 n = (vp->val.i < 0) ? -vp->val.i : vp->val.i;
327 base = (vp->type == 0) ? 10 : vp->type;
340 if (!(vp->flag & INT_U) && vp->val.i < 0)
342 if (vp->flag & (RJUST|LJUST)) { /* case already dealt with */
343 s = formatstr(vp, s);
354 intval(vp)
355 struct tbl *vp;
360 base = getint(vp, &num);
363 errorf("%s: bad number", str_val(vp));
421 struct tbl *vp = &vtemp;
422 vp->flag = (ISSET|INTEGER);
423 vp->type = 0;
424 vp->areap = ATEMP;
425 vp->val.i = n;
427 setstr(vq, str_val(vp), KSH_RETURN_ERROR);
436 getint(vp, nump)
437 struct tbl *vp;
446 if (vp->flag&SPECIAL)
447 getspec(vp);
449 if (!(vp->flag&ISSET) || (!(vp->flag&INTEGER) && vp->val.s == NULL))
451 if (vp->flag&INTEGER) {
452 *nump = vp->val.i;
453 return vp->type;
455 s = vp->val.s + vp->type;
498 /* convert variable vq to integer variable, setting its value from vp
499 * (vq and vp may be the same)
502 setint_v(vq, vp)
503 struct tbl *vq, *vp;
508 if ((base = getint(vp, &num)) == -1)
524 formatstr(vp, s)
525 struct tbl *vp;
533 if (vp->flag & (RJUST|LJUST)) {
534 if (!vp->u2.field) /* default field width */
535 vp->u2.field = olen;
536 nlen = vp->u2.field;
541 if (vp->flag & (RJUST|LJUST)) {
544 if (vp->flag & RJUST) {
550 if (slen > vp->u2.field) {
551 s += slen - vp->u2.field;
552 slen = vp->u2.field;
555 ((vp->flag & ZEROFIL) && digit(*s)) ?
557 vp->u2.field - slen, null, slen, s);
562 if (vp->flag & ZEROFIL)
566 vp->u2.field, vp->u2.field, s);
571 if (vp->flag & UCASEV_AL) {
575 } else if (vp->flag & LCASEV) {
585 * make vp->val.s be "name=value" for quick exporting.
588 export(vp, val)
589 struct tbl *vp;
593 char *op = (vp->flag&ALLOC) ? vp->val.s : NULL;
594 int namelen = strlen(vp->name);
597 vp->flag |= ALLOC;
598 xp = (char*)alloc(namelen + 1 + vallen, vp->areap);
599 memcpy(vp->val.s = xp, vp->name, namelen);
602 vp->type = xp - vp->val.s; /* offset to value */
605 afree((void*)op, vp->areap);
619 struct tbl *vp;
664 vp = (set&LOCAL) ? local(tvar, (set & LOCAL_COPY) ? true : false)
668 vpbase = (vp->flag & ARRAY) ? global(arrayname(var)) : vp;
692 fake_assign = (t->flag & ISSET) && (!val || t != vp)
715 if ((set & INTEGER) && base > 0 && (!val || t != vp))
745 if (vp->flag&INTEGER) {
747 setstr(vp, val, KSH_UNWIND_ERROR | 0x4);
750 vp->type = base;
753 setstr(vp, val, KSH_RETURN_ERROR | 0x4);
761 return vp;
768 unset(vp, array_ref)
769 struct tbl *vp;
772 if (vp->flag & ALLOC)
773 afree((void*)vp->val.s, vp->areap);
774 if ((vp->flag & ARRAY) && !array_ref) {
778 for (a = vp->u.array; a; ) {
785 vp->u.array = (struct tbl *) 0;
788 vp->flag &= SPECIAL | (array_ref ? ARRAY|DEFINED : 0);
789 if (vp->flag & SPECIAL)
790 unsetspec(vp); /* responsible for `unspecial'ing var */
875 struct tbl *vp, **vpp;
881 if ((vp = *vpp++) != NULL
882 && (vp->flag&(ISSET|EXPORT)) == (ISSET|EXPORT)) {
885 unsigned h = hash(vp->name);
889 vp2 = mytsearch(&l2->vars, vp->name, h);
893 if ((vp->flag&INTEGER)) {
896 val = str_val(vp);
897 vp->flag &= ~(INTEGER|RDONLY);
899 setstr(vp, val, KSH_RETURN_ERROR);
901 XPput(env, vp->val.s);
951 getspec(vp)
952 struct tbl *vp;
954 switch (special(vp->name)) {
957 vp->flag &= ~SPECIAL;
962 if (vp->flag & ISSET)
963 setint(vp, (long) (time((time_t *)0) - seconds));
964 vp->flag |= SPECIAL;
967 vp->flag &= ~SPECIAL;
968 setint(vp, (long) (rand() & 0x7fff));
969 vp->flag |= SPECIAL;
974 vp->flag &= ~SPECIAL;
975 setint(vp, (long) histsize);
976 vp->flag |= SPECIAL;
980 vp->flag &= ~SPECIAL;
981 setint(vp, (long) user_opt.uoptind);
982 vp->flag |= SPECIAL;
985 vp->flag &= ~SPECIAL;
986 setint(vp, (long) current_lineno + user_lineno);
987 vp->flag |= SPECIAL;
993 setspec(vp)
994 struct tbl *vp;
998 switch (special(vp->name)) {
1002 path = str_save(str_val(vp), APERM);
1006 setctypes(s = str_val(vp), C_IFS);
1010 vp->flag &= ~SPECIAL;
1011 getopts_reset((int) intval(vp));
1012 vp->flag |= SPECIAL;
1027 s = str_val(vp);
1035 vp->flag &= ~SPECIAL;
1036 sethistsize((int) intval(vp));
1037 vp->flag |= SPECIAL;
1040 sethistfile(str_val(vp));
1045 set_editmode(str_val(vp));
1049 set_editmode(str_val(vp));
1052 if ((x_cols = intval(vp)) <= MIN_COLS)
1058 mbset(str_val(vp));
1061 mpset(str_val(vp));
1064 vp->flag &= ~SPECIAL;
1065 mcset(intval(vp));
1066 vp->flag |= SPECIAL;
1069 vp->flag &= ~SPECIAL;
1070 srand((unsigned int)intval(vp));
1071 vp->flag |= SPECIAL;
1074 vp->flag &= ~SPECIAL;
1075 seconds = time((time_t*) 0) - intval(vp);
1076 vp->flag |= SPECIAL;
1080 if (vp->flag & INTEGER)
1081 ksh_tmout = vp->val.i >= 0 ? vp->val.i : 0;
1085 vp->flag &= ~SPECIAL;
1087 user_lineno = (unsigned int) intval(vp) - current_lineno - 1;
1088 vp->flag |= SPECIAL;
1094 unsetspec(vp)
1095 struct tbl *vp;
1097 switch (special(vp->name)) {
1131 unspecial(vp->name);
1150 * vp, indexed by val.
1153 arraysearch(vp, val)
1154 struct tbl *vp;
1158 size_t namelen = strlen(vp->name) + 1;
1160 vp->flag |= ARRAY|DEFINED;
1164 vp->index = 0;
1165 return vp;
1167 prev = vp;
1168 curr = vp->u.array;
1180 vp->areap);
1181 strlcpy(new->name, vp->name, namelen);
1182 new->flag = vp->flag & ~(ALLOC|DEFINED|ISSET|SPECIAL);
1183 new->type = vp->type;
1184 new->areap = vp->areap;
1185 new->u2.field = vp->u2.field;
1238 struct tbl *vp, *vq;
1242 vp = global(var);
1245 if ((vp->flag&RDONLY))
1250 unset(vp, 0);
1256 vq = arraysearch(vp, i);