xref: /plan9-contrib/sys/src/cmd/eqn/size.c (revision 3e12c5d1bb89fc02707907988834ef147769ddaf)
1*3e12c5d1SDavid du Colombier #include "e.h"
2*3e12c5d1SDavid du Colombier #include <ctype.h>
3*3e12c5d1SDavid du Colombier 
setsize(char * p)4*3e12c5d1SDavid du Colombier void setsize(char *p)	/* set size as found in p */
5*3e12c5d1SDavid du Colombier {
6*3e12c5d1SDavid du Colombier 	nszstack++;
7*3e12c5d1SDavid du Colombier 	szstack[nszstack] = 0;		/* assume relative */
8*3e12c5d1SDavid du Colombier 	if (*p == '+') {
9*3e12c5d1SDavid du Colombier 		ps += atoi(p+1);
10*3e12c5d1SDavid du Colombier 		if (szstack[nszstack-1] != 0)	/* propagate absolute size */
11*3e12c5d1SDavid du Colombier 			szstack[nszstack] = ps;
12*3e12c5d1SDavid du Colombier 	} else if (*p == '-') {
13*3e12c5d1SDavid du Colombier 		ps -= atoi(p+1);
14*3e12c5d1SDavid du Colombier 		if (szstack[nszstack-1] != 0)
15*3e12c5d1SDavid du Colombier 			szstack[nszstack] = ps;
16*3e12c5d1SDavid du Colombier 	} else if (isdigit(*p)) {
17*3e12c5d1SDavid du Colombier 		if (szstack[nszstack-1] == 0)
18*3e12c5d1SDavid du Colombier 			printf(".nr %d \\n(.s\n", 99-nszstack);
19*3e12c5d1SDavid du Colombier 		else
20*3e12c5d1SDavid du Colombier 			printf(".nr %d %d\n", 99-nszstack, ps);
21*3e12c5d1SDavid du Colombier 		szstack[nszstack] = ps = atoi(p);
22*3e12c5d1SDavid du Colombier 	} else {
23*3e12c5d1SDavid du Colombier 		ERROR "illegal size %s ignored", p WARNING;
24*3e12c5d1SDavid du Colombier 	}
25*3e12c5d1SDavid du Colombier 	dprintf(".\tsetsize %s; ps = %d\n", p, ps);
26*3e12c5d1SDavid du Colombier }
27*3e12c5d1SDavid du Colombier 
size(int p1,int p2)28*3e12c5d1SDavid du Colombier void size(int p1, int p2)
29*3e12c5d1SDavid du Colombier {
30*3e12c5d1SDavid du Colombier 		/* old size in p1, new in ps */
31*3e12c5d1SDavid du Colombier 	yyval = p2;
32*3e12c5d1SDavid du Colombier 	dprintf(".\tS%d <- \\s%d %d \\s%d; b=%g, h=%g\n",
33*3e12c5d1SDavid du Colombier 		yyval, ps, p2, p1, ebase[yyval], eht[yyval]);
34*3e12c5d1SDavid du Colombier 	if (szstack[nszstack] != 0) {
35*3e12c5d1SDavid du Colombier 		printf(".ds %d %s\\*(%d\\s\\n(%d\n", yyval, ABSPS(ps), p2, 99-nszstack);
36*3e12c5d1SDavid du Colombier 	} else
37*3e12c5d1SDavid du Colombier 		printf(".ds %d %s\\*(%d%s\n", yyval, DPS(p1,ps), p2, DPS(ps,p1));
38*3e12c5d1SDavid du Colombier 	nszstack--;
39*3e12c5d1SDavid du Colombier 	ps = p1;
40*3e12c5d1SDavid du Colombier }
41*3e12c5d1SDavid du Colombier 
globsize(void)42*3e12c5d1SDavid du Colombier void globsize(void)
43*3e12c5d1SDavid du Colombier {
44*3e12c5d1SDavid du Colombier 	char temp[20];
45*3e12c5d1SDavid du Colombier 
46*3e12c5d1SDavid du Colombier 	getstr(temp, sizeof(temp));
47*3e12c5d1SDavid du Colombier 	if (temp[0] == '+') {
48*3e12c5d1SDavid du Colombier 		gsize += atoi(temp+1);
49*3e12c5d1SDavid du Colombier 		if (szstack[0] != 0)
50*3e12c5d1SDavid du Colombier 			szstack[0] = gsize;
51*3e12c5d1SDavid du Colombier 	} else if (temp[0] == '-') {
52*3e12c5d1SDavid du Colombier 		gsize -= atoi(temp+1);
53*3e12c5d1SDavid du Colombier 		if (szstack[0] != 0)
54*3e12c5d1SDavid du Colombier 			szstack[0] = gsize;
55*3e12c5d1SDavid du Colombier 	} else  if (isdigit(temp[0])) {
56*3e12c5d1SDavid du Colombier 		gsize = atoi(temp);
57*3e12c5d1SDavid du Colombier 		szstack[0] = gsize;
58*3e12c5d1SDavid du Colombier 		printf(".nr 99 \\n(.s\n");
59*3e12c5d1SDavid du Colombier 	} else {
60*3e12c5d1SDavid du Colombier 		ERROR "illegal gsize %s ignored", temp WARNING;
61*3e12c5d1SDavid du Colombier 	}
62*3e12c5d1SDavid du Colombier 	yyval = eqnreg = 0;
63*3e12c5d1SDavid du Colombier 	ps = gsize;
64*3e12c5d1SDavid du Colombier 	if (gsize < 12 && !dps_set)		/* sub and sup size change */
65*3e12c5d1SDavid du Colombier 		deltaps = gsize / 3;
66*3e12c5d1SDavid du Colombier 	else if (gsize < 20)
67*3e12c5d1SDavid du Colombier 		deltaps = gsize / 4;
68*3e12c5d1SDavid du Colombier 	else
69*3e12c5d1SDavid du Colombier 		deltaps = gsize / 5;
70*3e12c5d1SDavid du Colombier }
71