xref: /plan9/sys/src/cmd/plot/libplot/text.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1*3e12c5d1SDavid du Colombier /*
2*3e12c5d1SDavid du Colombier           t string  Place the string so that its first character is
3*3e12c5d1SDavid du Colombier                     centered on the current point (default).  If
4*3e12c5d1SDavid du Colombier                     string begins with `\C' (`\R'), it is centered
5*3e12c5d1SDavid du Colombier                     (right-adjusted) on the current point.  A
6*3e12c5d1SDavid du Colombier                     backslash at the beginning of the string may be
7*3e12c5d1SDavid du Colombier                     escaped with another backslash.
8*3e12c5d1SDavid du Colombier  */
9*3e12c5d1SDavid du Colombier #include "mplot.h"
text(char * s)10*3e12c5d1SDavid du Colombier void text(char *s){
11*3e12c5d1SDavid du Colombier 	register int	kx, ky;
12*3e12c5d1SDavid du Colombier 	int centered, right, more;
13*3e12c5d1SDavid du Colombier 	char *ss;
14*3e12c5d1SDavid du Colombier 	ss=s;
15*3e12c5d1SDavid du Colombier 	for(;;){
16*3e12c5d1SDavid du Colombier 		centered=right=more=0;
17*3e12c5d1SDavid du Colombier 		if(*ss=='\\'){
18*3e12c5d1SDavid du Colombier 			ss++;
19*3e12c5d1SDavid du Colombier 			switch(*ss){
20*3e12c5d1SDavid du Colombier 			case 'C': centered++; ss++; break;
21*3e12c5d1SDavid du Colombier 			case 'R': right++; ss++; break;
22*3e12c5d1SDavid du Colombier 			case 'L': ss++; break;
23*3e12c5d1SDavid du Colombier 			case 'n': --ss; break;
24*3e12c5d1SDavid du Colombier 			}
25*3e12c5d1SDavid du Colombier 		}
26*3e12c5d1SDavid du Colombier 		for(s=ss;*ss!='\0';ss++)
27*3e12c5d1SDavid du Colombier 			if(ss[0]=='\\' && ss[1]=='n'){
28*3e12c5d1SDavid du Colombier 				more++;
29*3e12c5d1SDavid du Colombier 				break;
30*3e12c5d1SDavid du Colombier 			}
31*3e12c5d1SDavid du Colombier 		kx = SCX(e1->copyx);
32*3e12c5d1SDavid du Colombier 		ky = SCY(e1->copyy);
33*3e12c5d1SDavid du Colombier 		ky=m_text(kx, ky, s, ss, e1->foregr, centered, right);
34*3e12c5d1SDavid du Colombier 		if(!more)break;
35*3e12c5d1SDavid du Colombier 		e1->copyy = ( (double)(ky) - e1->bottom)/e1->scaley + e1->ymin + .5;
36*3e12c5d1SDavid du Colombier 		move(e1->copyx, e1->copyy);
37*3e12c5d1SDavid du Colombier 		ss+=2;
38*3e12c5d1SDavid du Colombier 	}
39*3e12c5d1SDavid du Colombier }
40