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