plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

size.c (1724B)


      1 #include "e.h"
      2 #include <ctype.h>
      3 
      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((unsigned char)*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 
     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 		(int)yyval, ps, p2, p1, ebase[yyval], eht[yyval]);
     34 	if (szstack[nszstack] != 0) {
     35 		printf(".ds %d %s\\*(%d\\s\\n(%d\n", (int)yyval, ABSPS(ps), p2, 99-nszstack);
     36 	} else
     37 		printf(".ds %d %s\\*(%d%s\n", (int)yyval, DPS(p1,ps), p2, DPS(ps,p1));
     38 	nszstack--;
     39 	ps = p1;
     40 }
     41 
     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((unsigned char)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 }