Lines Matching defs:vp

281 Awkfloat setfval(Cell *vp, Awkfloat f)	/* set float val of a Cell */
285 if ((vp->tval & (NUM | STR)) == 0)
286 funnyvar(vp, "assign to");
287 if (isfld(vp)) {
289 fldno = atoi(vp->nval);
293 } else if (isrec(vp)) {
297 if (freeable(vp))
298 xfree(vp->sval); /* free any previous string */
299 vp->tval &= ~STR; /* mark string invalid */
300 vp->tval |= NUM; /* mark number ok */
303 dprintf( ("setfval %p: %s = %g, t=%o\n", (void*)vp, NN(vp->nval), f, vp->tval) );
304 return vp->fval = f;
307 void funnyvar(Cell *vp, const char *rw)
309 if (isarr(vp))
310 FATAL("can't %s %s; it's an array name.", rw, vp->nval);
311 if (vp->tval & FCN)
312 FATAL("can't %s %s; it's a function.", rw, vp->nval);
314 vp, vp->nval, vp->sval, vp->fval, vp->tval);
317 char *setsval(Cell *vp, const char *s) /* set string val of a Cell */
323 (void*)vp, NN(vp->nval), s, vp->tval, donerec, donefld) );
324 if ((vp->tval & (NUM | STR)) == 0)
325 funnyvar(vp, "assign to");
326 if (isfld(vp)) {
328 fldno = atoi(vp->nval);
332 } else if (isrec(vp)) {
337 if (freeable(vp))
338 xfree(vp->sval);
339 vp->tval &= ~NUM;
340 vp->tval |= STR;
341 vp->tval &= ~DONTFREE;
343 (void*)vp, NN(vp->nval), t,t, vp->tval, donerec, donefld) );
344 return(vp->sval = t);
347 Awkfloat getfval(Cell *vp) /* get float val of a Cell */
349 if ((vp->tval & (NUM | STR)) == 0)
350 funnyvar(vp, "read value of");
351 if (isfld(vp) && donefld == 0)
353 else if (isrec(vp) && donerec == 0)
355 if (!isnum(vp)) { /* not a number */
356 vp->fval = atof(vp->sval); /* best guess */
357 if (is_number(vp->sval) && !(vp->tval&CON))
358 vp->tval |= NUM; /* make NUM only sparingly */
361 (void*)vp, NN(vp->nval), vp->fval, vp->tval) );
362 return(vp->fval);
365 static char *get_str_val(Cell *vp, char **fmt) /* get string val of a Cell */
370 if ((vp->tval & (NUM | STR)) == 0)
371 funnyvar(vp, "read value of");
372 if (isfld(vp) && donefld == 0)
374 else if (isrec(vp) && donerec == 0)
376 if (isstr(vp) == 0) {
377 if (freeable(vp))
378 xfree(vp->sval);
379 if (modf(vp->fval, &dtemp) == 0) /* it's integral */
380 sprintf(s, "%.30g", vp->fval);
382 sprintf(s, *fmt, vp->fval);
383 vp->sval = tostring(s);
384 vp->tval &= ~DONTFREE;
385 vp->tval |= STR;
388 (void*)vp, NN(vp->nval), vp->sval, vp->sval, vp->tval) );
389 return(vp->sval);
392 char *getsval(Cell *vp) /* get string val of a Cell */
394 return get_str_val(vp, CONVFMT);
397 char *getpssval(Cell *vp) /* get string val of a Cell for print */
399 return get_str_val(vp, OFMT);