xref: /csrg-svn/old/roff/troff/t6.c (revision 7080)
1*7080Srrh #ifndef lint
2*7080Srrh static char sccsid[] = "@(#)t6.c	4.1 06/07/82";
3*7080Srrh #endif lint
4*7080Srrh 
5*7080Srrh #include "tdef.h"
6*7080Srrh extern
7*7080Srrh #include "d.h"
8*7080Srrh extern
9*7080Srrh #include "v.h"
10*7080Srrh 
11*7080Srrh /*
12*7080Srrh troff6.c
13*7080Srrh 
14*7080Srrh width functions, sizes and fonts
15*7080Srrh */
16*7080Srrh 
17*7080Srrh extern	int	inchar[LNSIZE], *pinchar;	/* XXX */
18*7080Srrh extern int eschar;
19*7080Srrh extern int widthp;
20*7080Srrh extern int ohc;
21*7080Srrh extern int xpts;
22*7080Srrh extern int xfont;
23*7080Srrh extern int code;
24*7080Srrh extern int smnt;
25*7080Srrh extern int setwdf;
26*7080Srrh extern int cs;
27*7080Srrh extern int ccs;
28*7080Srrh extern int spacesz;
29*7080Srrh extern char trtab[];
30*7080Srrh extern int xbitf;
31*7080Srrh extern int mfont;
32*7080Srrh extern int mpts;
33*7080Srrh extern int pfont;
34*7080Srrh extern int ppts;
35*7080Srrh extern int oldbits;
36*7080Srrh extern int chbits;
37*7080Srrh extern int spbits;
38*7080Srrh extern int nonumb;
39*7080Srrh extern int noscale;
40*7080Srrh extern int font;
41*7080Srrh extern int font1;
42*7080Srrh extern int pts;
43*7080Srrh extern int pts1;
44*7080Srrh extern int apts;
45*7080Srrh extern int apts1;
46*7080Srrh extern int sps;
47*7080Srrh extern int nlflg;
48*7080Srrh extern int nform;
49*7080Srrh extern int dfact;
50*7080Srrh extern int lss;
51*7080Srrh extern int lss1;
52*7080Srrh extern int vflag;
53*7080Srrh extern int ch0;
54*7080Srrh extern int lg;
55*7080Srrh char fontfile[] = "/usr/lib/font/ftXX";
56*7080Srrh int ffi = 16;
57*7080Srrh extern int bd;
58*7080Srrh extern int level;
59*7080Srrh extern int ch;
60*7080Srrh extern int res;
61*7080Srrh extern int ptid;
62*7080Srrh extern char W1[],W2[],W3[],W4[];
63*7080Srrh extern int xxx;
64*7080Srrh int trflg;
65*7080Srrh char *fontab[] = {W1,W2,W3,W4};
66*7080Srrh int fontlab[] = {'R','I','B','S',0};
67*7080Srrh char pstab[] = {6,7,8,9,10,11,12,14,16,18,20,22,24,28,36,0};
68*7080Srrh char psctab[] = {010,000,001,007,002,003,004,005,0211,006,
69*7080Srrh 		0212,0213,0214,0215,0216,0};
70*7080Srrh int cstab[4], ccstab[4];
71*7080Srrh int bdtab[4];
72*7080Srrh int sbold = 0;
73*7080Srrh int spsz = 0;
74*7080Srrh struct fz {
75*7080Srrh 	char sign;
76*7080Srrh 	char size;
77*7080Srrh 	int inc;
78*7080Srrh 	} fz[4];
79*7080Srrh 
80*7080Srrh width(c)
81*7080Srrh int c;
82*7080Srrh {
83*7080Srrh 	register i,j,k;
84*7080Srrh 
85*7080Srrh 	j = c;
86*7080Srrh 	k = 0;
87*7080Srrh 	if(j & MOT){
88*7080Srrh 		if(j & VMOT)goto rtn;
89*7080Srrh 		k = j & ~MOTV;
90*7080Srrh 		if(j & NMOT)k = -k;
91*7080Srrh 		goto rtn;
92*7080Srrh 	}
93*7080Srrh 	if((i = (j & CMASK)) == 010){
94*7080Srrh 		k = -widthp;
95*7080Srrh 		goto rtn;
96*7080Srrh 	}
97*7080Srrh 	if(i == PRESC)i = eschar;
98*7080Srrh 	if((i == ohc) ||
99*7080Srrh 	   (i >= 0370))goto rtn;
100*7080Srrh 	if((j>>BYTE) == oldbits){
101*7080Srrh 		xfont = pfont;
102*7080Srrh 		xpts = ppts;
103*7080Srrh 	}else xbits(j);
104*7080Srrh 	if(j & ZBIT)goto rtn;
105*7080Srrh 	if(!trflg)i = trtab[i] & BMASK;
106*7080Srrh 	if((i -= 32) < 0)goto rtn;
107*7080Srrh 	k = getcw(i);
108*7080Srrh 	if(bd)k += bd - 1;
109*7080Srrh 	if(cs)k = cs;
110*7080Srrh 	widthp = k;
111*7080Srrh rtn:
112*7080Srrh 	xbitf = trflg = 0;
113*7080Srrh 	return(k);
114*7080Srrh }
115*7080Srrh getcw(i)
116*7080Srrh int i;
117*7080Srrh {
118*7080Srrh 	register j,k;
119*7080Srrh 	register char *p;
120*7080Srrh 	int x;
121*7080Srrh 	extern char codetab[];
122*7080Srrh 
123*7080Srrh 	bd = 0;
124*7080Srrh 	if((code = codetab[i])  & 0200){
125*7080Srrh 		if(smnt){
126*7080Srrh 			p = fontab[smnt-1];
127*7080Srrh 			if(xfont == (sbold-1))bd = bdtab[smnt-1];
128*7080Srrh 			goto g0;
129*7080Srrh 		}
130*7080Srrh 		code = 0;
131*7080Srrh 		k = 36;
132*7080Srrh 		goto g1;
133*7080Srrh 	}
134*7080Srrh 	p = fontab[xfont];
135*7080Srrh g0:
136*7080Srrh 	if(!i)k = spacesz;
137*7080Srrh 	else k = *(p + i) & BMASK;
138*7080Srrh 	if(setwdf)v.ct |= ((k>>6) & 3);
139*7080Srrh g1:
140*7080Srrh 	k = (j = (k&077)*(xpts&077))/6;
141*7080Srrh 	if((j%6) >= 3)k++;
142*7080Srrh 	if(cs = cstab[xfont]){
143*7080Srrh 		if(ccs = ccstab[xfont])x = ccs; else x = xpts;
144*7080Srrh 		cs = (j = (cs&077)*(x&077))/6;
145*7080Srrh 		if((j%6) >= 3)cs++;
146*7080Srrh 	}
147*7080Srrh 	if(!bd)bd = bdtab[xfont];
148*7080Srrh 	return(k);
149*7080Srrh }
150*7080Srrh xbits(i)
151*7080Srrh int i;
152*7080Srrh {
153*7080Srrh 	register j, k;
154*7080Srrh 
155*7080Srrh /*
156*7080Srrh 	if((j = i >> BYTE) == oldbits){
157*7080Srrh 		xfont = pfont;
158*7080Srrh 		xpts = ppts;
159*7080Srrh 		goto rtn;
160*7080Srrh 	}
161*7080Srrh */
162*7080Srrh 	j = i >> BYTE;
163*7080Srrh 	xfont = (j>>1) & 03;
164*7080Srrh 	if(k = (j>>3) & 017){
165*7080Srrh 		xpts = pstab[--k];
166*7080Srrh 		if(psctab[k] < 0)xpts |= DBL;
167*7080Srrh 		oldbits = j;
168*7080Srrh 		pfont = xfont;
169*7080Srrh 		ppts = xpts;
170*7080Srrh 		goto rtn;
171*7080Srrh 	}
172*7080Srrh 	switch(xbitf){
173*7080Srrh 		case 0:
174*7080Srrh 			xfont = font;
175*7080Srrh 			xpts = pts;
176*7080Srrh 			break;
177*7080Srrh 		case 1:
178*7080Srrh 			xfont = pfont;
179*7080Srrh 			xpts = ppts;
180*7080Srrh 			break;
181*7080Srrh 		case 2:
182*7080Srrh 			xfont = mfont;
183*7080Srrh 			xpts = mpts;
184*7080Srrh 	}
185*7080Srrh rtn:
186*7080Srrh 	xbitf = 0;
187*7080Srrh }
188*7080Srrh setch(){
189*7080Srrh 	register i,*j,k;
190*7080Srrh 	extern int chtab[];
191*7080Srrh 
192*7080Srrh 	if((i = getrq()) == 0)return(0);
193*7080Srrh 	for(j=chtab;*j != i;j++)if(*(j++) == 0)return(0);
194*7080Srrh 	k = *(++j) | chbits;
195*7080Srrh /*
196*7080Srrh 	if((i & CMASK) == '*'){
197*7080Srrh 		if(((i = find('R',fontlab)) < 0) &&
198*7080Srrh 		   ((i = find('G',fontlab)) < 0))
199*7080Srrh 			return(k);
200*7080Srrh 		else return((k & ~(03<<(BYTE+1))) | (i<<(BYTE+1)));
201*7080Srrh 	}
202*7080Srrh */
203*7080Srrh 	return(k);
204*7080Srrh }
205*7080Srrh find(i,j)
206*7080Srrh int i,j[];
207*7080Srrh {
208*7080Srrh 	register k;
209*7080Srrh 
210*7080Srrh 	if(((k = i-'0') >= 1) && (k <= 4) && (k != smnt))return(--k);
211*7080Srrh 	for(k=0; j[k] != i; k++)if(j[k] == 0)return(-1);
212*7080Srrh 	return(k);
213*7080Srrh }
214*7080Srrh casefz(){
215*7080Srrh 	register i, j, k;
216*7080Srrh 	int savinc;
217*7080Srrh 
218*7080Srrh 	k = 0;
219*7080Srrh fz0:
220*7080Srrh 	if(skip() || !(i = getrq()) ||
221*7080Srrh 	  ((j = find(i,fontlab))  == -1)){
222*7080Srrh 		if(k)goto fz1;
223*7080Srrh 		else return;
224*7080Srrh 	}
225*7080Srrh 	if(j == (smnt-1)){
226*7080Srrh 		k = smnt;
227*7080Srrh 		goto fz0;
228*7080Srrh 	}
229*7080Srrh 	if(k){
230*7080Srrh 		spsz = j + 1;
231*7080Srrh 		j = k -1;
232*7080Srrh 	}
233*7080Srrh fz1:
234*7080Srrh 	if((j==font) && fz[j].inc)savinc = fz[j].inc;
235*7080Srrh 	else savinc = 0;
236*7080Srrh 	fz[j].inc = fz[j].sign = fz[j].size = 0;
237*7080Srrh 	if(skip()){
238*7080Srrh 		if(k)spsz = 0;
239*7080Srrh 		goto fz2;
240*7080Srrh 	}
241*7080Srrh 	if(((i=((k=getch()) & CMASK)) == '+') || (i == '-'))fz[j].sign = i;
242*7080Srrh 	else{
243*7080Srrh 		fz[j].sign = 0;
244*7080Srrh 		ch = k;
245*7080Srrh 	}
246*7080Srrh 	noscale++;
247*7080Srrh 	fz[j].size = atoi();
248*7080Srrh 	noscale = 0;
249*7080Srrh fz2:
250*7080Srrh 	if(j==font)casps1(apts + savinc);
251*7080Srrh 	else if(j == smnt-1)mchbits();
252*7080Srrh }
253*7080Srrh caseps(){
254*7080Srrh 	register i;
255*7080Srrh 
256*7080Srrh 	if(skip())i = apts1;
257*7080Srrh 	else{
258*7080Srrh 		noscale++;
259*7080Srrh 		i = inumb(&apts);
260*7080Srrh 		noscale = 0;
261*7080Srrh 		if(nonumb)return;
262*7080Srrh 	}
263*7080Srrh 	casps1(i);
264*7080Srrh }
265*7080Srrh casps1(i)
266*7080Srrh int i;
267*7080Srrh {
268*7080Srrh 	if(i <= 0)return;
269*7080Srrh 	if(fz[font].size){
270*7080Srrh 		i = getfz(font, i);
271*7080Srrh 	}
272*7080Srrh 	apts1 = apts;
273*7080Srrh 	apts = i;
274*7080Srrh 	pts1 = pts;
275*7080Srrh 	pts = findps(i & 077);
276*7080Srrh 	mchbits();
277*7080Srrh }
278*7080Srrh findps(i)
279*7080Srrh int i;
280*7080Srrh {
281*7080Srrh 	register j, k;
282*7080Srrh 
283*7080Srrh 	for(j=0; i > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}
284*7080Srrh 	if(psctab[j] < 0)k |= DBL;
285*7080Srrh 	return(k);
286*7080Srrh }
287*7080Srrh mchbits(){
288*7080Srrh 	register i, j, k;
289*7080Srrh 
290*7080Srrh 	spbits = 0;
291*7080Srrh 	i = pts & 077;
292*7080Srrh 	for(j=0; i > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}
293*7080Srrh 	chbits = (((++j)<<2) | font) << (BYTE + 1);
294*7080Srrh 	sps = width(' ' | chbits);
295*7080Srrh 	if(font == (spsz-1)){
296*7080Srrh 		i = findps(getfz(smnt-1, apts + fz[font].inc));
297*7080Srrh 		for(j=0; i > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}
298*7080Srrh 		spbits = (((++j)<<2) | font) << (BYTE + 1);
299*7080Srrh 	}
300*7080Srrh }
301*7080Srrh getfz(x,y)
302*7080Srrh int x, y;
303*7080Srrh {
304*7080Srrh 	register i, j, k;
305*7080Srrh 
306*7080Srrh 	i = fz[x].size;
307*7080Srrh 	j = fz[x].sign;
308*7080Srrh 	if(i || j){
309*7080Srrh 		if(j == '+')i += y;
310*7080Srrh 		else if(j == '-')i = y - i;
311*7080Srrh 	}
312*7080Srrh 	fz[x].inc = y - i;
313*7080Srrh 	return(i);
314*7080Srrh }
315*7080Srrh setps(){
316*7080Srrh 	register i,j;
317*7080Srrh 
318*7080Srrh 	if((((i=getch() & CMASK) == '+')  || (i == '-')) &&
319*7080Srrh 	  (((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9))){
320*7080Srrh 		if(i == '-')j = -j;
321*7080Srrh 		ch = 0;
322*7080Srrh 		casps1(apts+j);
323*7080Srrh 		return;
324*7080Srrh 	}
325*7080Srrh 	if((i -= '0') == 0){
326*7080Srrh 		casps1(apts1);
327*7080Srrh 		return;
328*7080Srrh 	}
329*7080Srrh 	if((i > 0) && (i <= 9)){
330*7080Srrh 		if((i <= 3) &&
331*7080Srrh 		  ((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9)){
332*7080Srrh 			i = 10*i +j;
333*7080Srrh 			ch = 0;
334*7080Srrh 		}
335*7080Srrh 		casps1(i);
336*7080Srrh 	}
337*7080Srrh }
338*7080Srrh caseft(){
339*7080Srrh 	skip();
340*7080Srrh 	setfont(1);
341*7080Srrh }
342*7080Srrh setfont(a)
343*7080Srrh int a;
344*7080Srrh {
345*7080Srrh 	register i,j;
346*7080Srrh 
347*7080Srrh 	if(a)i = getrq();
348*7080Srrh 		else i = getsn();
349*7080Srrh 	if(!i || (i == 'P')){
350*7080Srrh 		j = font1;
351*7080Srrh 		goto s0;
352*7080Srrh 	}
353*7080Srrh 	if(i == 'S')return;
354*7080Srrh 	if((j = find(i,fontlab))  == -1)return;
355*7080Srrh s0:
356*7080Srrh 	font1 = font;
357*7080Srrh 	font = j;
358*7080Srrh 	i = 0;
359*7080Srrh 	if(fz[font1].size){
360*7080Srrh 		i++;
361*7080Srrh 		casps1(apts + fz[font1].inc);
362*7080Srrh 	}else if(fz[font].size){
363*7080Srrh 		i++;
364*7080Srrh 		casps1(apts);
365*7080Srrh 	}
366*7080Srrh 	if(!i)mchbits();
367*7080Srrh }
368*7080Srrh setwd(){
369*7080Srrh 	register i, base, wid;
370*7080Srrh 	int delim, em, k;
371*7080Srrh 	int savlevel, savhp, savapts, savapts1, savfont, savfont1,
372*7080Srrh 		savpts, savpts1;
373*7080Srrh         int *savpinchar, *p, *q, tempinchar[LNSIZE];    /* XXX */
374*7080Srrh 
375*7080Srrh 	base = v.st = v.sb = wid = v.ct = 0;
376*7080Srrh 	if((delim = getch() & CMASK) & MOT)return;
377*7080Srrh 	savhp = v.hp;
378*7080Srrh         savpinchar = pinchar;   /* XXX */
379*7080Srrh         for (p=inchar, q=tempinchar; p < pinchar; )     /* XXX */
380*7080Srrh                 *q++ = *p++;    /* XXX */
381*7080Srrh         pinchar = inchar;       /* XXX */
382*7080Srrh 	savlevel = level;
383*7080Srrh 	v.hp = level = 0;
384*7080Srrh 	savapts = apts;
385*7080Srrh 	savapts1 = apts1;
386*7080Srrh 	savfont = font;
387*7080Srrh 	savfont1 = font1;
388*7080Srrh 	savpts = pts;
389*7080Srrh 	savpts1 = pts1;
390*7080Srrh 	setwdf++;
391*7080Srrh 	while((((i = getch()) & CMASK) != delim) && !nlflg){
392*7080Srrh 		wid += width(i);
393*7080Srrh 		if(!(i & MOT)){
394*7080Srrh 			em = (xpts & 077)*6;
395*7080Srrh 		}else if(i & VMOT){
396*7080Srrh 			k = i & ~MOTV;
397*7080Srrh 			if(i & NMOT)k = -k;
398*7080Srrh 			base -= k;
399*7080Srrh 			em = 0;
400*7080Srrh 		}else continue;
401*7080Srrh 		if(base < v.sb)v.sb = base;
402*7080Srrh 		if((k=base + em) > v.st)v.st = k;
403*7080Srrh 	}
404*7080Srrh 	nform = 0;
405*7080Srrh 	setn1(wid);
406*7080Srrh 	v.hp = savhp;
407*7080Srrh         pinchar = savpinchar;   /* XXX */
408*7080Srrh         for (p=inchar, q=tempinchar; p < pinchar; )     /* XXX */
409*7080Srrh                 *p++ = *q++;    /* XXX */
410*7080Srrh 	level = savlevel;
411*7080Srrh 	apts = savapts;
412*7080Srrh 	apts1 = savapts1;
413*7080Srrh 	font = savfont;
414*7080Srrh 	font1 = savfont1;
415*7080Srrh 	pts = savpts;
416*7080Srrh 	pts1 = savpts1;
417*7080Srrh 	mchbits();
418*7080Srrh 	setwdf = 0;
419*7080Srrh }
420*7080Srrh vmot(){
421*7080Srrh 	dfact = lss;
422*7080Srrh 	vflag++;
423*7080Srrh 	return(mot());
424*7080Srrh }
425*7080Srrh hmot(){
426*7080Srrh 	dfact = 6 * (pts & 077);
427*7080Srrh 	return(mot());
428*7080Srrh }
429*7080Srrh mot(){
430*7080Srrh 	register i, j;
431*7080Srrh 
432*7080Srrh 	j = HOR;
433*7080Srrh 	getch(); /*eat delim*/
434*7080Srrh 	if(i = atoi()){
435*7080Srrh 		if(vflag)j = VERT;
436*7080Srrh 		i = makem(quant(i,j));
437*7080Srrh 	}
438*7080Srrh 	getch();
439*7080Srrh 	vflag = 0;
440*7080Srrh 	dfact = 1;
441*7080Srrh 	return(i);
442*7080Srrh }
443*7080Srrh sethl(k)
444*7080Srrh int k;
445*7080Srrh {
446*7080Srrh 	register i;
447*7080Srrh 
448*7080Srrh 	i = 3 * (pts & 077);
449*7080Srrh 	if(k == 'u')i = -i;
450*7080Srrh 	else if(k == 'r')i = -2*i;
451*7080Srrh 	vflag++;
452*7080Srrh 	i = makem(i);
453*7080Srrh 	vflag = 0;
454*7080Srrh 	return(i);
455*7080Srrh }
456*7080Srrh makem(i)
457*7080Srrh int i;
458*7080Srrh {
459*7080Srrh 	register j;
460*7080Srrh 
461*7080Srrh 	if((j = i) < 0)j = -j;
462*7080Srrh 	j = (j & ~MOTV) | MOT;
463*7080Srrh 	if(i < 0)j |= NMOT;
464*7080Srrh 	if(vflag)j |= VMOT;
465*7080Srrh 	return(j);
466*7080Srrh }
467*7080Srrh getlg(i)
468*7080Srrh int i;
469*7080Srrh {
470*7080Srrh 	register j, k;
471*7080Srrh 
472*7080Srrh 	switch((j = getch0()) & CMASK){
473*7080Srrh 		case 'f':
474*7080Srrh 			if(lg!=2){switch((k =getch0()) & CMASK){
475*7080Srrh 					case 'i':
476*7080Srrh 						j = 0214;
477*7080Srrh 						break;
478*7080Srrh 					case 'l':
479*7080Srrh 						j = 0215;
480*7080Srrh 						break;
481*7080Srrh 					default:
482*7080Srrh 						ch0 = k;
483*7080Srrh 						j = 0213;
484*7080Srrh 				}
485*7080Srrh 			}else j = 0213;
486*7080Srrh 			break;
487*7080Srrh 		case 'l':
488*7080Srrh 			j = 0212;
489*7080Srrh 			break;
490*7080Srrh 		case 'i':
491*7080Srrh 			j = 0211;
492*7080Srrh 			break;
493*7080Srrh 		default:
494*7080Srrh 			ch0 = j;
495*7080Srrh 			j = i;
496*7080Srrh 	}
497*7080Srrh 	return((i & ~CMASK) | j);
498*7080Srrh }
499*7080Srrh caselg(){
500*7080Srrh 
501*7080Srrh 	lg = 1;
502*7080Srrh 	if(skip())return;
503*7080Srrh 	lg = atoi();
504*7080Srrh }
505*7080Srrh casefp(){
506*7080Srrh 	register i, j, k;
507*7080Srrh 	int x;
508*7080Srrh 
509*7080Srrh 	skip();
510*7080Srrh 	if(((i = (getch() & CMASK) - '0' -1) < 0) || (i >3)){prstr("fp: bad font position\n"); return;}
511*7080Srrh 	if(skip() || !(j = getrq())){prstr("fp: no font name\n"); return;}
512*7080Srrh 	fontfile[ffi] = j & BMASK;
513*7080Srrh 	fontfile[ffi+1] = j>>BYTE;
514*7080Srrh 	if((k = open(fontfile,0)) < 0){
515*7080Srrh 		prstr("Cannot open ");
516*7080Srrh 	c0:
517*7080Srrh 		prstr(fontfile);
518*7080Srrh 		prstr("\n");
519*7080Srrh 		done(-1);
520*7080Srrh 	}
521*7080Srrh 	if(lseek(k,8L * sizeof(int),0) < 0)goto c1;
522*7080Srrh 	if(read(k,fontab[i],256-32) != 256-32){
523*7080Srrh 	c1:
524*7080Srrh 		prstr("Cannot read ");
525*7080Srrh 		goto c0;
526*7080Srrh 	}
527*7080Srrh 	close(k);
528*7080Srrh 	if(i == (smnt-1)){smnt = 0; sbold = 0; spsz = 0;}
529*7080Srrh 	if((fontlab[i] = j) == 'S')smnt = i + 1;
530*7080Srrh 	bdtab[i] = cstab[i] = ccstab[i] = 0;
531*7080Srrh 	fz[i].inc = fz[i].sign = fz[i].size = 0;
532*7080Srrh 	if(ptid != 1){
533*7080Srrh 		prstr("Mount font ");
534*7080Srrh 		prstr(&fontfile[ffi]);
535*7080Srrh 		prstr(" on ");
536*7080Srrh 		x = PAIR((i + '1'),0);
537*7080Srrh 		prstr((char *)&x);
538*7080Srrh 		prstr("\n");
539*7080Srrh 	}
540*7080Srrh }
541*7080Srrh casecs(){
542*7080Srrh 	register i, j;
543*7080Srrh 
544*7080Srrh 	noscale++;
545*7080Srrh 	skip();
546*7080Srrh 	if(!(i=getrq()) ||
547*7080Srrh 	  ((i = find(i,fontlab)) < 0))goto rtn;
548*7080Srrh 	skip();
549*7080Srrh 	cstab[i] = atoi();
550*7080Srrh 	skip();
551*7080Srrh 	j = atoi();
552*7080Srrh 	if(!nonumb)ccstab[i] = findps(j);
553*7080Srrh rtn:
554*7080Srrh 	noscale = 0;
555*7080Srrh }
556*7080Srrh casebd(){
557*7080Srrh 	register i, j, k;
558*7080Srrh 
559*7080Srrh 	k = 0;
560*7080Srrh bd0:
561*7080Srrh 	if(skip() || !(i = getrq()) ||
562*7080Srrh 	  ((j = find(i,fontlab))  == -1)){
563*7080Srrh 		if(k)goto bd1;
564*7080Srrh 		else return;
565*7080Srrh 	}
566*7080Srrh 	if(j == (smnt-1)){
567*7080Srrh 		k = smnt;
568*7080Srrh 		goto bd0;
569*7080Srrh 	}
570*7080Srrh 	if(k){
571*7080Srrh 		sbold = j + 1;
572*7080Srrh 		j = k -1;
573*7080Srrh 	}
574*7080Srrh bd1:
575*7080Srrh 	skip();
576*7080Srrh 	noscale++;
577*7080Srrh 	bdtab[j] = atoi();
578*7080Srrh 	noscale = 0;
579*7080Srrh }
580*7080Srrh casevs(){
581*7080Srrh 	register i;
582*7080Srrh 
583*7080Srrh 	skip();
584*7080Srrh 	vflag++;
585*7080Srrh 	dfact = 6; /*default scaling is points!*/
586*7080Srrh 	res = VERT;
587*7080Srrh 	i = inumb(&lss);
588*7080Srrh 	if(nonumb)i = lss1;
589*7080Srrh 	if(i < VERT)i = VERT;
590*7080Srrh 	lss1 = lss;
591*7080Srrh 	lss = i;
592*7080Srrh }
593*7080Srrh casess(){
594*7080Srrh 	register i;
595*7080Srrh 
596*7080Srrh 	noscale++;
597*7080Srrh 	skip();
598*7080Srrh 	if(i = atoi()){
599*7080Srrh 		spacesz = i& 0177;
600*7080Srrh 		sps = width(' ' | chbits);
601*7080Srrh 	}
602*7080Srrh 	noscale = 0;
603*7080Srrh }
604*7080Srrh xlss(){
605*7080Srrh 	register i, j;
606*7080Srrh 
607*7080Srrh 	getch();
608*7080Srrh 	dfact = lss;
609*7080Srrh 	i = quant(atoi(),VERT);
610*7080Srrh 	dfact = 1;
611*7080Srrh 	getch();
612*7080Srrh 	if((j = i) < 0)j = -j;
613*7080Srrh 	ch0 = ((j & 03700)<<3) | HX;
614*7080Srrh 	if(i < 0)ch0 |= 040000;
615*7080Srrh 	return(((j & 077)<<9) | LX);
616*7080Srrh }
617