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