xref: /csrg-svn/old/roff/troff/t6.c (revision 11248)
17080Srrh #ifndef lint
2*11248Sshannon static char sccsid[] = "@(#)t6.c	4.2 02/23/83";
37080Srrh #endif lint
47080Srrh 
57080Srrh #include "tdef.h"
67080Srrh extern
77080Srrh #include "d.h"
87080Srrh extern
97080Srrh #include "v.h"
107080Srrh 
117080Srrh /*
127080Srrh troff6.c
137080Srrh 
147080Srrh width functions, sizes and fonts
157080Srrh */
167080Srrh 
177080Srrh extern	int	inchar[LNSIZE], *pinchar;	/* XXX */
187080Srrh extern int eschar;
197080Srrh extern int widthp;
207080Srrh extern int ohc;
217080Srrh extern int xpts;
227080Srrh extern int xfont;
237080Srrh extern int code;
247080Srrh extern int smnt;
257080Srrh extern int setwdf;
267080Srrh extern int cs;
277080Srrh extern int ccs;
287080Srrh extern int spacesz;
297080Srrh extern char trtab[];
307080Srrh extern int xbitf;
317080Srrh extern int mfont;
327080Srrh extern int mpts;
337080Srrh extern int pfont;
347080Srrh extern int ppts;
357080Srrh extern int oldbits;
367080Srrh extern int chbits;
377080Srrh extern int spbits;
387080Srrh extern int nonumb;
397080Srrh extern int noscale;
407080Srrh extern int font;
417080Srrh extern int font1;
427080Srrh extern int pts;
437080Srrh extern int pts1;
447080Srrh extern int apts;
457080Srrh extern int apts1;
467080Srrh extern int sps;
477080Srrh extern int nlflg;
487080Srrh extern int nform;
497080Srrh extern int dfact;
507080Srrh extern int lss;
517080Srrh extern int lss1;
527080Srrh extern int vflag;
537080Srrh extern int ch0;
547080Srrh extern int lg;
55*11248Sshannon char *fontfile = "/usr/lib/font/ftXX";
56*11248Sshannon int ffi = 0;
577080Srrh extern int bd;
587080Srrh extern int level;
597080Srrh extern int ch;
607080Srrh extern int res;
617080Srrh extern int ptid;
627080Srrh extern char W1[],W2[],W3[],W4[];
637080Srrh extern int xxx;
647080Srrh int trflg;
657080Srrh char *fontab[] = {W1,W2,W3,W4};
667080Srrh int fontlab[] = {'R','I','B','S',0};
677080Srrh char pstab[] = {6,7,8,9,10,11,12,14,16,18,20,22,24,28,36,0};
687080Srrh char psctab[] = {010,000,001,007,002,003,004,005,0211,006,
697080Srrh 		0212,0213,0214,0215,0216,0};
707080Srrh int cstab[4], ccstab[4];
717080Srrh int bdtab[4];
727080Srrh int sbold = 0;
737080Srrh int spsz = 0;
747080Srrh struct fz {
757080Srrh 	char sign;
767080Srrh 	char size;
777080Srrh 	int inc;
787080Srrh 	} fz[4];
797080Srrh 
807080Srrh width(c)
817080Srrh int c;
827080Srrh {
837080Srrh 	register i,j,k;
847080Srrh 
857080Srrh 	j = c;
867080Srrh 	k = 0;
877080Srrh 	if(j & MOT){
887080Srrh 		if(j & VMOT)goto rtn;
897080Srrh 		k = j & ~MOTV;
907080Srrh 		if(j & NMOT)k = -k;
917080Srrh 		goto rtn;
927080Srrh 	}
937080Srrh 	if((i = (j & CMASK)) == 010){
947080Srrh 		k = -widthp;
957080Srrh 		goto rtn;
967080Srrh 	}
977080Srrh 	if(i == PRESC)i = eschar;
987080Srrh 	if((i == ohc) ||
997080Srrh 	   (i >= 0370))goto rtn;
1007080Srrh 	if((j>>BYTE) == oldbits){
1017080Srrh 		xfont = pfont;
1027080Srrh 		xpts = ppts;
1037080Srrh 	}else xbits(j);
1047080Srrh 	if(j & ZBIT)goto rtn;
1057080Srrh 	if(!trflg)i = trtab[i] & BMASK;
1067080Srrh 	if((i -= 32) < 0)goto rtn;
1077080Srrh 	k = getcw(i);
1087080Srrh 	if(bd)k += bd - 1;
1097080Srrh 	if(cs)k = cs;
1107080Srrh 	widthp = k;
1117080Srrh rtn:
1127080Srrh 	xbitf = trflg = 0;
1137080Srrh 	return(k);
1147080Srrh }
1157080Srrh getcw(i)
1167080Srrh int i;
1177080Srrh {
1187080Srrh 	register j,k;
1197080Srrh 	register char *p;
1207080Srrh 	int x;
1217080Srrh 	extern char codetab[];
1227080Srrh 
1237080Srrh 	bd = 0;
1247080Srrh 	if((code = codetab[i])  & 0200){
1257080Srrh 		if(smnt){
1267080Srrh 			p = fontab[smnt-1];
1277080Srrh 			if(xfont == (sbold-1))bd = bdtab[smnt-1];
1287080Srrh 			goto g0;
1297080Srrh 		}
1307080Srrh 		code = 0;
1317080Srrh 		k = 36;
1327080Srrh 		goto g1;
1337080Srrh 	}
1347080Srrh 	p = fontab[xfont];
1357080Srrh g0:
1367080Srrh 	if(!i)k = spacesz;
1377080Srrh 	else k = *(p + i) & BMASK;
1387080Srrh 	if(setwdf)v.ct |= ((k>>6) & 3);
1397080Srrh g1:
1407080Srrh 	k = (j = (k&077)*(xpts&077))/6;
1417080Srrh 	if((j%6) >= 3)k++;
1427080Srrh 	if(cs = cstab[xfont]){
1437080Srrh 		if(ccs = ccstab[xfont])x = ccs; else x = xpts;
1447080Srrh 		cs = (j = (cs&077)*(x&077))/6;
1457080Srrh 		if((j%6) >= 3)cs++;
1467080Srrh 	}
1477080Srrh 	if(!bd)bd = bdtab[xfont];
1487080Srrh 	return(k);
1497080Srrh }
1507080Srrh xbits(i)
1517080Srrh int i;
1527080Srrh {
1537080Srrh 	register j, k;
1547080Srrh 
1557080Srrh /*
1567080Srrh 	if((j = i >> BYTE) == oldbits){
1577080Srrh 		xfont = pfont;
1587080Srrh 		xpts = ppts;
1597080Srrh 		goto rtn;
1607080Srrh 	}
1617080Srrh */
1627080Srrh 	j = i >> BYTE;
1637080Srrh 	xfont = (j>>1) & 03;
1647080Srrh 	if(k = (j>>3) & 017){
1657080Srrh 		xpts = pstab[--k];
1667080Srrh 		if(psctab[k] < 0)xpts |= DBL;
1677080Srrh 		oldbits = j;
1687080Srrh 		pfont = xfont;
1697080Srrh 		ppts = xpts;
1707080Srrh 		goto rtn;
1717080Srrh 	}
1727080Srrh 	switch(xbitf){
1737080Srrh 		case 0:
1747080Srrh 			xfont = font;
1757080Srrh 			xpts = pts;
1767080Srrh 			break;
1777080Srrh 		case 1:
1787080Srrh 			xfont = pfont;
1797080Srrh 			xpts = ppts;
1807080Srrh 			break;
1817080Srrh 		case 2:
1827080Srrh 			xfont = mfont;
1837080Srrh 			xpts = mpts;
1847080Srrh 	}
1857080Srrh rtn:
1867080Srrh 	xbitf = 0;
1877080Srrh }
1887080Srrh setch(){
1897080Srrh 	register i,*j,k;
1907080Srrh 	extern int chtab[];
1917080Srrh 
1927080Srrh 	if((i = getrq()) == 0)return(0);
1937080Srrh 	for(j=chtab;*j != i;j++)if(*(j++) == 0)return(0);
1947080Srrh 	k = *(++j) | chbits;
1957080Srrh /*
1967080Srrh 	if((i & CMASK) == '*'){
1977080Srrh 		if(((i = find('R',fontlab)) < 0) &&
1987080Srrh 		   ((i = find('G',fontlab)) < 0))
1997080Srrh 			return(k);
2007080Srrh 		else return((k & ~(03<<(BYTE+1))) | (i<<(BYTE+1)));
2017080Srrh 	}
2027080Srrh */
2037080Srrh 	return(k);
2047080Srrh }
2057080Srrh find(i,j)
2067080Srrh int i,j[];
2077080Srrh {
2087080Srrh 	register k;
2097080Srrh 
2107080Srrh 	if(((k = i-'0') >= 1) && (k <= 4) && (k != smnt))return(--k);
2117080Srrh 	for(k=0; j[k] != i; k++)if(j[k] == 0)return(-1);
2127080Srrh 	return(k);
2137080Srrh }
2147080Srrh casefz(){
2157080Srrh 	register i, j, k;
2167080Srrh 	int savinc;
2177080Srrh 
2187080Srrh 	k = 0;
2197080Srrh fz0:
2207080Srrh 	if(skip() || !(i = getrq()) ||
2217080Srrh 	  ((j = find(i,fontlab))  == -1)){
2227080Srrh 		if(k)goto fz1;
2237080Srrh 		else return;
2247080Srrh 	}
2257080Srrh 	if(j == (smnt-1)){
2267080Srrh 		k = smnt;
2277080Srrh 		goto fz0;
2287080Srrh 	}
2297080Srrh 	if(k){
2307080Srrh 		spsz = j + 1;
2317080Srrh 		j = k -1;
2327080Srrh 	}
2337080Srrh fz1:
2347080Srrh 	if((j==font) && fz[j].inc)savinc = fz[j].inc;
2357080Srrh 	else savinc = 0;
2367080Srrh 	fz[j].inc = fz[j].sign = fz[j].size = 0;
2377080Srrh 	if(skip()){
2387080Srrh 		if(k)spsz = 0;
2397080Srrh 		goto fz2;
2407080Srrh 	}
2417080Srrh 	if(((i=((k=getch()) & CMASK)) == '+') || (i == '-'))fz[j].sign = i;
2427080Srrh 	else{
2437080Srrh 		fz[j].sign = 0;
2447080Srrh 		ch = k;
2457080Srrh 	}
2467080Srrh 	noscale++;
2477080Srrh 	fz[j].size = atoi();
2487080Srrh 	noscale = 0;
2497080Srrh fz2:
2507080Srrh 	if(j==font)casps1(apts + savinc);
2517080Srrh 	else if(j == smnt-1)mchbits();
2527080Srrh }
2537080Srrh caseps(){
2547080Srrh 	register i;
2557080Srrh 
2567080Srrh 	if(skip())i = apts1;
2577080Srrh 	else{
2587080Srrh 		noscale++;
2597080Srrh 		i = inumb(&apts);
2607080Srrh 		noscale = 0;
2617080Srrh 		if(nonumb)return;
2627080Srrh 	}
2637080Srrh 	casps1(i);
2647080Srrh }
2657080Srrh casps1(i)
2667080Srrh int i;
2677080Srrh {
2687080Srrh 	if(i <= 0)return;
2697080Srrh 	if(fz[font].size){
2707080Srrh 		i = getfz(font, i);
2717080Srrh 	}
2727080Srrh 	apts1 = apts;
2737080Srrh 	apts = i;
2747080Srrh 	pts1 = pts;
2757080Srrh 	pts = findps(i & 077);
2767080Srrh 	mchbits();
2777080Srrh }
2787080Srrh findps(i)
2797080Srrh int i;
2807080Srrh {
2817080Srrh 	register j, k;
2827080Srrh 
2837080Srrh 	for(j=0; i > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}
2847080Srrh 	if(psctab[j] < 0)k |= DBL;
2857080Srrh 	return(k);
2867080Srrh }
2877080Srrh mchbits(){
2887080Srrh 	register i, j, k;
2897080Srrh 
2907080Srrh 	spbits = 0;
2917080Srrh 	i = pts & 077;
2927080Srrh 	for(j=0; i > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}
2937080Srrh 	chbits = (((++j)<<2) | font) << (BYTE + 1);
2947080Srrh 	sps = width(' ' | chbits);
2957080Srrh 	if(font == (spsz-1)){
2967080Srrh 		i = findps(getfz(smnt-1, apts + fz[font].inc));
2977080Srrh 		for(j=0; i > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}
2987080Srrh 		spbits = (((++j)<<2) | font) << (BYTE + 1);
2997080Srrh 	}
3007080Srrh }
3017080Srrh getfz(x,y)
3027080Srrh int x, y;
3037080Srrh {
3047080Srrh 	register i, j, k;
3057080Srrh 
3067080Srrh 	i = fz[x].size;
3077080Srrh 	j = fz[x].sign;
3087080Srrh 	if(i || j){
3097080Srrh 		if(j == '+')i += y;
3107080Srrh 		else if(j == '-')i = y - i;
3117080Srrh 	}
3127080Srrh 	fz[x].inc = y - i;
3137080Srrh 	return(i);
3147080Srrh }
3157080Srrh setps(){
3167080Srrh 	register i,j;
3177080Srrh 
3187080Srrh 	if((((i=getch() & CMASK) == '+')  || (i == '-')) &&
3197080Srrh 	  (((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9))){
3207080Srrh 		if(i == '-')j = -j;
3217080Srrh 		ch = 0;
3227080Srrh 		casps1(apts+j);
3237080Srrh 		return;
3247080Srrh 	}
3257080Srrh 	if((i -= '0') == 0){
3267080Srrh 		casps1(apts1);
3277080Srrh 		return;
3287080Srrh 	}
3297080Srrh 	if((i > 0) && (i <= 9)){
3307080Srrh 		if((i <= 3) &&
3317080Srrh 		  ((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9)){
3327080Srrh 			i = 10*i +j;
3337080Srrh 			ch = 0;
3347080Srrh 		}
3357080Srrh 		casps1(i);
3367080Srrh 	}
3377080Srrh }
3387080Srrh caseft(){
3397080Srrh 	skip();
3407080Srrh 	setfont(1);
3417080Srrh }
3427080Srrh setfont(a)
3437080Srrh int a;
3447080Srrh {
3457080Srrh 	register i,j;
3467080Srrh 
3477080Srrh 	if(a)i = getrq();
3487080Srrh 		else i = getsn();
3497080Srrh 	if(!i || (i == 'P')){
3507080Srrh 		j = font1;
3517080Srrh 		goto s0;
3527080Srrh 	}
3537080Srrh 	if(i == 'S')return;
3547080Srrh 	if((j = find(i,fontlab))  == -1)return;
3557080Srrh s0:
3567080Srrh 	font1 = font;
3577080Srrh 	font = j;
3587080Srrh 	i = 0;
3597080Srrh 	if(fz[font1].size){
3607080Srrh 		i++;
3617080Srrh 		casps1(apts + fz[font1].inc);
3627080Srrh 	}else if(fz[font].size){
3637080Srrh 		i++;
3647080Srrh 		casps1(apts);
3657080Srrh 	}
3667080Srrh 	if(!i)mchbits();
3677080Srrh }
3687080Srrh setwd(){
3697080Srrh 	register i, base, wid;
3707080Srrh 	int delim, em, k;
3717080Srrh 	int savlevel, savhp, savapts, savapts1, savfont, savfont1,
3727080Srrh 		savpts, savpts1;
3737080Srrh         int *savpinchar, *p, *q, tempinchar[LNSIZE];    /* XXX */
3747080Srrh 
3757080Srrh 	base = v.st = v.sb = wid = v.ct = 0;
3767080Srrh 	if((delim = getch() & CMASK) & MOT)return;
3777080Srrh 	savhp = v.hp;
3787080Srrh         savpinchar = pinchar;   /* XXX */
3797080Srrh         for (p=inchar, q=tempinchar; p < pinchar; )     /* XXX */
3807080Srrh                 *q++ = *p++;    /* XXX */
3817080Srrh         pinchar = inchar;       /* XXX */
3827080Srrh 	savlevel = level;
3837080Srrh 	v.hp = level = 0;
3847080Srrh 	savapts = apts;
3857080Srrh 	savapts1 = apts1;
3867080Srrh 	savfont = font;
3877080Srrh 	savfont1 = font1;
3887080Srrh 	savpts = pts;
3897080Srrh 	savpts1 = pts1;
3907080Srrh 	setwdf++;
3917080Srrh 	while((((i = getch()) & CMASK) != delim) && !nlflg){
3927080Srrh 		wid += width(i);
3937080Srrh 		if(!(i & MOT)){
3947080Srrh 			em = (xpts & 077)*6;
3957080Srrh 		}else if(i & VMOT){
3967080Srrh 			k = i & ~MOTV;
3977080Srrh 			if(i & NMOT)k = -k;
3987080Srrh 			base -= k;
3997080Srrh 			em = 0;
4007080Srrh 		}else continue;
4017080Srrh 		if(base < v.sb)v.sb = base;
4027080Srrh 		if((k=base + em) > v.st)v.st = k;
4037080Srrh 	}
4047080Srrh 	nform = 0;
4057080Srrh 	setn1(wid);
4067080Srrh 	v.hp = savhp;
4077080Srrh         pinchar = savpinchar;   /* XXX */
4087080Srrh         for (p=inchar, q=tempinchar; p < pinchar; )     /* XXX */
4097080Srrh                 *p++ = *q++;    /* XXX */
4107080Srrh 	level = savlevel;
4117080Srrh 	apts = savapts;
4127080Srrh 	apts1 = savapts1;
4137080Srrh 	font = savfont;
4147080Srrh 	font1 = savfont1;
4157080Srrh 	pts = savpts;
4167080Srrh 	pts1 = savpts1;
4177080Srrh 	mchbits();
4187080Srrh 	setwdf = 0;
4197080Srrh }
4207080Srrh vmot(){
4217080Srrh 	dfact = lss;
4227080Srrh 	vflag++;
4237080Srrh 	return(mot());
4247080Srrh }
4257080Srrh hmot(){
4267080Srrh 	dfact = 6 * (pts & 077);
4277080Srrh 	return(mot());
4287080Srrh }
4297080Srrh mot(){
4307080Srrh 	register i, j;
4317080Srrh 
4327080Srrh 	j = HOR;
4337080Srrh 	getch(); /*eat delim*/
4347080Srrh 	if(i = atoi()){
4357080Srrh 		if(vflag)j = VERT;
4367080Srrh 		i = makem(quant(i,j));
4377080Srrh 	}
4387080Srrh 	getch();
4397080Srrh 	vflag = 0;
4407080Srrh 	dfact = 1;
4417080Srrh 	return(i);
4427080Srrh }
4437080Srrh sethl(k)
4447080Srrh int k;
4457080Srrh {
4467080Srrh 	register i;
4477080Srrh 
4487080Srrh 	i = 3 * (pts & 077);
4497080Srrh 	if(k == 'u')i = -i;
4507080Srrh 	else if(k == 'r')i = -2*i;
4517080Srrh 	vflag++;
4527080Srrh 	i = makem(i);
4537080Srrh 	vflag = 0;
4547080Srrh 	return(i);
4557080Srrh }
4567080Srrh makem(i)
4577080Srrh int i;
4587080Srrh {
4597080Srrh 	register j;
4607080Srrh 
4617080Srrh 	if((j = i) < 0)j = -j;
4627080Srrh 	j = (j & ~MOTV) | MOT;
4637080Srrh 	if(i < 0)j |= NMOT;
4647080Srrh 	if(vflag)j |= VMOT;
4657080Srrh 	return(j);
4667080Srrh }
4677080Srrh getlg(i)
4687080Srrh int i;
4697080Srrh {
4707080Srrh 	register j, k;
4717080Srrh 
4727080Srrh 	switch((j = getch0()) & CMASK){
4737080Srrh 		case 'f':
4747080Srrh 			if(lg!=2){switch((k =getch0()) & CMASK){
4757080Srrh 					case 'i':
4767080Srrh 						j = 0214;
4777080Srrh 						break;
4787080Srrh 					case 'l':
4797080Srrh 						j = 0215;
4807080Srrh 						break;
4817080Srrh 					default:
4827080Srrh 						ch0 = k;
4837080Srrh 						j = 0213;
4847080Srrh 				}
4857080Srrh 			}else j = 0213;
4867080Srrh 			break;
4877080Srrh 		case 'l':
4887080Srrh 			j = 0212;
4897080Srrh 			break;
4907080Srrh 		case 'i':
4917080Srrh 			j = 0211;
4927080Srrh 			break;
4937080Srrh 		default:
4947080Srrh 			ch0 = j;
4957080Srrh 			j = i;
4967080Srrh 	}
4977080Srrh 	return((i & ~CMASK) | j);
4987080Srrh }
4997080Srrh caselg(){
5007080Srrh 
5017080Srrh 	lg = 1;
5027080Srrh 	if(skip())return;
5037080Srrh 	lg = atoi();
5047080Srrh }
5057080Srrh casefp(){
5067080Srrh 	register i, j, k;
5077080Srrh 	int x;
5087080Srrh 
509*11248Sshannon 	if (ffi == 0)
510*11248Sshannon 		while (fontfile[ffi] != 'X')
511*11248Sshannon 			ffi++;
5127080Srrh 	skip();
5137080Srrh 	if(((i = (getch() & CMASK) - '0' -1) < 0) || (i >3)){prstr("fp: bad font position\n"); return;}
5147080Srrh 	if(skip() || !(j = getrq())){prstr("fp: no font name\n"); return;}
5157080Srrh 	fontfile[ffi] = j & BMASK;
5167080Srrh 	fontfile[ffi+1] = j>>BYTE;
5177080Srrh 	if((k = open(fontfile,0)) < 0){
5187080Srrh 		prstr("Cannot open ");
5197080Srrh 	c0:
5207080Srrh 		prstr(fontfile);
5217080Srrh 		prstr("\n");
5227080Srrh 		done(-1);
5237080Srrh 	}
5247080Srrh 	if(lseek(k,8L * sizeof(int),0) < 0)goto c1;
5257080Srrh 	if(read(k,fontab[i],256-32) != 256-32){
5267080Srrh 	c1:
5277080Srrh 		prstr("Cannot read ");
5287080Srrh 		goto c0;
5297080Srrh 	}
5307080Srrh 	close(k);
5317080Srrh 	if(i == (smnt-1)){smnt = 0; sbold = 0; spsz = 0;}
5327080Srrh 	if((fontlab[i] = j) == 'S')smnt = i + 1;
5337080Srrh 	bdtab[i] = cstab[i] = ccstab[i] = 0;
5347080Srrh 	fz[i].inc = fz[i].sign = fz[i].size = 0;
5357080Srrh 	if(ptid != 1){
5367080Srrh 		prstr("Mount font ");
5377080Srrh 		prstr(&fontfile[ffi]);
5387080Srrh 		prstr(" on ");
5397080Srrh 		x = PAIR((i + '1'),0);
5407080Srrh 		prstr((char *)&x);
5417080Srrh 		prstr("\n");
5427080Srrh 	}
5437080Srrh }
5447080Srrh casecs(){
5457080Srrh 	register i, j;
5467080Srrh 
5477080Srrh 	noscale++;
5487080Srrh 	skip();
5497080Srrh 	if(!(i=getrq()) ||
5507080Srrh 	  ((i = find(i,fontlab)) < 0))goto rtn;
5517080Srrh 	skip();
5527080Srrh 	cstab[i] = atoi();
5537080Srrh 	skip();
5547080Srrh 	j = atoi();
5557080Srrh 	if(!nonumb)ccstab[i] = findps(j);
5567080Srrh rtn:
5577080Srrh 	noscale = 0;
5587080Srrh }
5597080Srrh casebd(){
5607080Srrh 	register i, j, k;
5617080Srrh 
5627080Srrh 	k = 0;
5637080Srrh bd0:
5647080Srrh 	if(skip() || !(i = getrq()) ||
5657080Srrh 	  ((j = find(i,fontlab))  == -1)){
5667080Srrh 		if(k)goto bd1;
5677080Srrh 		else return;
5687080Srrh 	}
5697080Srrh 	if(j == (smnt-1)){
5707080Srrh 		k = smnt;
5717080Srrh 		goto bd0;
5727080Srrh 	}
5737080Srrh 	if(k){
5747080Srrh 		sbold = j + 1;
5757080Srrh 		j = k -1;
5767080Srrh 	}
5777080Srrh bd1:
5787080Srrh 	skip();
5797080Srrh 	noscale++;
5807080Srrh 	bdtab[j] = atoi();
5817080Srrh 	noscale = 0;
5827080Srrh }
5837080Srrh casevs(){
5847080Srrh 	register i;
5857080Srrh 
5867080Srrh 	skip();
5877080Srrh 	vflag++;
5887080Srrh 	dfact = 6; /*default scaling is points!*/
5897080Srrh 	res = VERT;
5907080Srrh 	i = inumb(&lss);
5917080Srrh 	if(nonumb)i = lss1;
5927080Srrh 	if(i < VERT)i = VERT;
5937080Srrh 	lss1 = lss;
5947080Srrh 	lss = i;
5957080Srrh }
5967080Srrh casess(){
5977080Srrh 	register i;
5987080Srrh 
5997080Srrh 	noscale++;
6007080Srrh 	skip();
6017080Srrh 	if(i = atoi()){
6027080Srrh 		spacesz = i& 0177;
6037080Srrh 		sps = width(' ' | chbits);
6047080Srrh 	}
6057080Srrh 	noscale = 0;
6067080Srrh }
6077080Srrh xlss(){
6087080Srrh 	register i, j;
6097080Srrh 
6107080Srrh 	getch();
6117080Srrh 	dfact = lss;
6127080Srrh 	i = quant(atoi(),VERT);
6137080Srrh 	dfact = 1;
6147080Srrh 	getch();
6157080Srrh 	if((j = i) < 0)j = -j;
6167080Srrh 	ch0 = ((j & 03700)<<3) | HX;
6177080Srrh 	if(i < 0)ch0 |= 040000;
6187080Srrh 	return(((j & 077)<<9) | LX);
6197080Srrh }
620