--- ray/src/rt/text.c 1993/06/04 17:03:11 2.11 +++ ray/src/rt/text.c 1995/05/25 15:13:43 2.14 @@ -77,7 +77,7 @@ typedef struct { TLINE tl; /* line list */ } TEXT; -extern char *libpath; +extern char *getlibpath(); extern char *fgetword(); @@ -109,8 +109,13 @@ RAY *r; sprintf(errmsg, "undefined modifier \"%s\"", modname); objerror(m, USER, errmsg); } - raytexture(r, omod); - } else if (m->otype == PAT_BTEXT) { + if (rayshade(r, omod)) { + if (m->omod != OVOID) + objerror(m, USER, "inappropriate modifier"); + return(1); + } + } + if (m->otype == PAT_BTEXT) { if (foreground) scalecolor(r->pcol, m->oargs.farg[9]); else @@ -127,6 +132,7 @@ RAY *r; m->oargs.farg[14]); multcolor(r->pcol, cval); } + return(0); } @@ -195,7 +201,7 @@ register OBJREC *tm; tlp = tlp->next; } else { /* text file */ if ((s = getpath(tm->oargs.sarg[tndx(tm)], - libpath, R_OK)) == NULL) { + getlibpath(), R_OK)) == NULL) { sprintf(errmsg, "cannot find text file \"%s\"", tm->oargs.sarg[tndx(tm)]); error(USER, errmsg); @@ -219,7 +225,7 @@ register OBJREC *tm; /* compute character spacing */ i = sndx(tm); d = i < tm->oargs.nfargs ? tm->oargs.farg[i] : 0.0; - i = d * 256.0; + i = d * 255.0; t->tl.width = 0; for (tlp = t->tl.next; tlp != NULL; tlp = tlp->next) { if (i < 0) @@ -275,15 +281,15 @@ OBJREC *m; x = DOT(v, tp->right); i = sndx(m); if (i < m->oargs.nfargs) - x *= tp->f->mwidth + 256.*fabs(m->oargs.farg[i]); + x *= tp->f->mwidth + 255.*fabs(m->oargs.farg[i]); else - x *= 256.; + x *= 255.; h = x; i = y = DOT(v, tp->down); if (x < 0.0 || y < 0.0) return(0); x -= (double)h; - y = ((i+1) - y)*256.; + y = ((i+1) - y)*255.; /* find the line position */ for (tlp = tp->tl.next; tlp != NULL; tlp = tlp->next) if (--i < 0) @@ -291,7 +297,7 @@ OBJREC *m; if (tlp == NULL || h >= tlp->width) return(0); for (i = 0; (h -= tlp->spc[i]) >= 0; i++) - if (h < 256 && inglyph(h+x, y, + if (h < 255 && inglyph(h+x, y, tp->f->fg[TLSTR(tlp)[i]&0xff])) return(1); return(0); @@ -299,7 +305,7 @@ OBJREC *m; inglyph(x, y, gl) /* (x,y) within font glyph gl? */ -double x, y; /* real coordinates in range [0,256) */ +double x, y; /* real coordinates in range [0,255) */ register GLYPH *gl; { int n, ncross;