void makelattr(char *p, char *q) /* "locus" attribute; x and y coordinate lists via varnames */ { YYSTYPE val; val.p = p; makeattr(XLIST, 0, val); val.p = q; makeattr(YLIST, 0, val); }
void makeoattr(int type, obj *o) /* obj* attr */ { YYSTYPE val; val.o = o; makeattr(type, 0, val); }
void makefattr(int type, int sub, double f) /* float attr */ { YYSTYPE val; val.f = f; makeattr(type, sub, val); }
void makedattr(char *name) /* dash pattern (array of dash/space widths) */ { int n; struct symtab *p; YYSTYPE val; if (name) { if ((p = lookup(name)) == NULL) { yyerror("no variable named %s", name); return; } n = p->s_dim+1; } else { n = nexpr; nexpr = 0; } if ((val.a = (float *)malloc(sizeof(float)*(n+1))) == NULL) yyerror("out of room in makedattr"); else { val.a[0] = (float)n; while (n--) val.a[n+1] = (name? p->s_val.a[n] : exprlist[n]); } makeattr(DASHPAT, 0, val); }
void makeiattr(int type, int i) /* int attr */ { YYSTYPE val; val.i = i; makeattr(type, 0, val); }
void makevattr(char *p) /* varname attribute */ { YYSTYPE val; val.p = p; makeattr(VARNAME, 0, val); }
void maketattr(int sub, char *p) /* text attribute: takes two */ { YYSTYPE val; val.p = p; makeattr(TEXTATTR, sub, val); }
Attr *makesattr(char *s) /* make an Attr cell containing s */ { Attr *ap = makeattr(STRING, sizexpr, s, just, sizeop); just = sizeop = 0; sizexpr = 0.0; return ap; }
void maketattr(int sub, char *p) /* text attribute: takes two */ { YYSTYPE val; val.p = p; if (sub == 0) sub = def_textattr; else if (sub & (CENTER|LJUST|RJUST)) def_textattr = (def_textattr & ~(CENTER|LJUST|RJUST)) | sub; else if (sub & (ABOVE|BELOW)) def_textattr = (def_textattr & ~(ABOVE|BELOW)) | sub; makeattr(TEXTATTR, sub, val); }
Attr * makefattr(int type, double fval) /* set double in attribute */ { return makeattr(type, fval, (char *) 0, 0, 0); }