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