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