⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svt6.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic char sccsid[] = "@(#)svt6.c	4.1 6/7/82";#endif lint#include "tdef.h"extern#include "d.h"extern#include "v.h"/*troff6.cwidth functions, sizes and fonts*/extern	int	inchar[LNSIZE], *pinchar;	/* XXX */extern int eschar;extern int widthp;extern int ohc;extern int xpts;extern int xfont;extern int code;extern int smnt;extern int setwdf;extern int cs;extern int ccs;extern int spacesz;extern char trtab[];extern int xbitf;extern int mfont;extern int mpts;extern int pfont;extern int ppts;extern int oldbits;extern int chbits;extern int spbits;extern int nonumb;extern int noscale;extern int font;extern int font1;extern int pts;extern int pts1;extern int apts;extern int apts1;extern int sps;extern int nlflg;extern int nform;extern int dfact;extern int lss;extern int lss1;extern int vflag;extern int ch0;extern int lg;char fontfile[] = "/usr/lib/font/ftXX";int ffi = 16;extern int bd;extern int level;extern int ch;extern int res;extern int ptid;extern char W1[],W2[],W3[],W4[];extern int xxx;int trflg;char *fontab[] = {W1,W2,W3,W4};int fontlab[] = {'R','I','B','S',0};char pstab[] = {6,7,8,9,10,11,12,14,16,18,20,22,24,28,36,0};char psctab[] = {010,000,001,007,002,003,004,005,0211,006,		0212,0213,0214,0215,0216,0};int cstab[4], ccstab[4];int bdtab[4];int sbold = 0;int spsz = 0;struct fz {	char sign;	char size;	int inc;	} fz[4];width(c)int c;{	register i,j,k;	j = c;	k = 0;	if(j & MOT){		if(j & VMOT)goto rtn;		k = j & ~MOTV;		if(j & NMOT)k = -k;		goto rtn;	}	if((i = (j & CMASK)) == 010){		k = -widthp;		goto rtn;	}	if(i == PRESC)i = eschar;	if((i == ohc) ||	   (i >= 0370))goto rtn;	if((j>>BYTE) == oldbits){		xfont = pfont;		xpts = ppts;	}else xbits(j);	if(j & ZBIT)goto rtn;	if(!trflg)i = trtab[i] & BMASK;	if((i -= 32) < 0)goto rtn;	k = getcw(i);	if(bd)k += bd - 1;	if(cs)k = cs;	widthp = k;rtn:	xbitf = trflg = 0;	return(k);}getcw(i)int i;{	register j,k;	register char *p;	int x;	extern char codetab[];	bd = 0;	if((code = codetab[i])  & 0200){		if(smnt){			p = fontab[smnt-1];			if(xfont == (sbold-1))bd = bdtab[smnt-1];			goto g0;		}		code = 0;		k = 36;		goto g1;	}	p = fontab[xfont];g0:	if(!i)k = spacesz;	else k = *(p + i) & BMASK;	if(setwdf)v.ct |= ((k>>6) & 3);g1:	k = (j = (k&077)*(xpts&077))/6;	if((j%6) >= 3)k++;	if(cs = cstab[xfont]){		if(ccs = ccstab[xfont])x = ccs; else x = xpts;		cs = (j = (cs&077)*(x&077))/6;		if((j%6) >= 3)cs++;	}	if(!bd)bd = bdtab[xfont];	return(k);}xbits(i)int i;{	register j, k;/*	if((j = i >> BYTE) == oldbits){		xfont = pfont;		xpts = ppts;		goto rtn;	}*/	j = i >> BYTE;	xfont = (j>>1) & 03;	if(k = (j>>3) & 017){		xpts = pstab[--k];		if(psctab[k] < 0)xpts |= DBL;		oldbits = j;		pfont = xfont;		ppts = xpts;		goto rtn;	}	switch(xbitf){		case 0:			xfont = font;			xpts = pts;			break;		case 1:			xfont = pfont;			xpts = ppts;			break;		case 2:			xfont = mfont;			xpts = mpts;	}rtn:	xbitf = 0;}setch(){	register i,*j,k;	extern int chtab[];	if((i = getrq()) == 0)return(0);	for(j=chtab;*j != i;j++)if(*(j++) == 0)return(0);	k = *(++j) | chbits;/*	if((i & CMASK) == '*'){		if(((i = find('R',fontlab)) < 0) &&		   ((i = find('G',fontlab)) < 0))			return(k);		else return((k & ~(03<<(BYTE+1))) | (i<<(BYTE+1)));	}*/	return(k);}find(i,j)int i,j[];{	register k;	if(((k = i-'0') >= 1) && (k <= 4) && (k != smnt))return(--k);	for(k=0; j[k] != i; k++)if(j[k] == 0)return(-1);	return(k);}casefz(){	register i, j, k;	int savinc;	k = 0;fz0:	if(skip() || !(i = getrq()) ||	  ((j = find(i,fontlab))  == -1)){		if(k)goto fz1;		else return;	}	if(j == (smnt-1)){		k = smnt;		goto fz0;	}	if(k){		spsz = j + 1;		j = k -1;	}fz1:	if((j==font) && fz[j].inc)savinc = fz[j].inc;	else savinc = 0;	fz[j].inc = fz[j].sign = fz[j].size = 0;	if(skip()){		if(k)spsz = 0;		goto fz2;	}	if(((i=((k=getch()) & CMASK)) == '+') || (i == '-'))fz[j].sign = i;	else{		fz[j].sign = 0;		ch = k;	}	noscale++;	fz[j].size = atoi();	noscale = 0;fz2:	if(j==font)casps1(apts + savinc);	else if(j == smnt-1)mchbits();}caseps(){	register i;	if(skip())i = apts1;	else{		noscale++;		i = inumb(&apts);		noscale = 0;		if(nonumb)return;	}	casps1(i);}casps1(i)int i;{	if(i <= 0)return;	if(fz[font].size){		i = getfz(font, i);	}	apts1 = apts;	apts = i;	pts1 = pts;	pts = findps(i & 077);	mchbits();}findps(i)int i;{	register j, k;	for(j=0; i > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}	if(psctab[j] < 0)k |= DBL;	return(k);}mchbits(){	register i, j, k;	spbits = 0;	i = pts & 077;	for(j=0; i > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}	chbits = (((++j)<<2) | font) << (BYTE + 1);	sps = width(' ' | chbits);	if(font == (spsz-1)){		i = findps(getfz(smnt-1, apts + fz[font].inc));		for(j=0; i > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}		spbits = (((++j)<<2) | font) << (BYTE + 1);	}}getfz(x,y)int x, y;{	register i, j, k;	i = fz[x].size;	j = fz[x].sign;	if(i || j){		if(j == '+')i += y;		else if(j == '-')i = y - i;	}	fz[x].inc = y - i;	return(i);}setps(){	register i,j;	if((((i=getch() & CMASK) == '+')  || (i == '-')) &&	  (((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9))){		if(i == '-')j = -j;		ch = 0;		casps1(apts+j);		return;	}	if((i -= '0') == 0){		casps1(apts1);		return;	}	if((i > 0) && (i <= 9)){		if((i <= 3) &&		  ((j=(ch = getch() & CMASK) - '0') >= 0) && (j <= 9)){			i = 10*i +j;			ch = 0;		}		casps1(i);	}}caseft(){	skip();	setfont(1);}setfont(a)int a;{	register i,j;	if(a)i = getrq();		else i = getsn();	if(!i || (i == 'P')){		j = font1;		goto s0;	}	if(i == 'S')return;	if((j = find(i,fontlab))  == -1)return;s0:	font1 = font;	font = j;	i = 0;	if(fz[font1].size){		i++;		casps1(apts + fz[font1].inc);	}else if(fz[font].size){		i++;		casps1(apts);	}	if(!i)mchbits();}setwd(){	register i, base, wid;	int delim, em, k;	int savlevel, savhp, savapts, savapts1, savfont, savfont1,		savpts, savpts1;	base = v.st = v.sb = wid = v.ct = 0;	if((delim = getch() & CMASK) & MOT)return;	savhp = v.hp;	savlevel = level;	v.hp = level = 0;	savapts = apts;	savapts1 = apts1;	savfont = font;	savfont1 = font1;	savpts = pts;	savpts1 = pts1;	setwdf++;	while((((i = getch()) & CMASK) != delim) && !nlflg){		wid += width(i);		if(!(i & MOT)){			em = (xpts & 077)*6;		}else if(i & VMOT){			k = i & ~MOTV;			if(i & NMOT)k = -k;			base -= k;			em = 0;		}else continue;		if(base < v.sb)v.sb = base;		if((k=base + em) > v.st)v.st = k;	}	nform = 0;	setn1(wid);	v.hp = savhp;	level = savlevel;	apts = savapts;	apts1 = savapts1;	font = savfont;	font1 = savfont1;	pts = savpts;	pts1 = savpts1;	mchbits();	setwdf = 0;}vmot(){	dfact = lss;	vflag++;	return(mot());}hmot(){	dfact = 6 * (pts & 077);	return(mot());}mot(){	register i, j;	j = HOR;	getch(); /*eat delim*/	if(i = atoi()){		if(vflag)j = VERT;		i = makem(quant(i,j));	}	getch();	vflag = 0;	dfact = 1;	return(i);}sethl(k)int k;{	register i;	i = 3 * (pts & 077);	if(k == 'u')i = -i;	else if(k == 'r')i = -2*i;	vflag++;	i = makem(i);	vflag = 0;	return(i);}makem(i)int i;{	register j;	if((j = i) < 0)j = -j;	j = (j & ~MOTV) | MOT;	if(i < 0)j |= NMOT;	if(vflag)j |= VMOT;	return(j);}getlg(i)int i;{	register j, k;	switch((j = getch0()) & CMASK){		case 'f':			if(lg!=2){switch((k =getch0()) & CMASK){					case 'i':						j = 0214;						break;					case 'l':						j = 0215;						break;					default:						ch0 = k;						j = 0213;				}			}else j = 0213;			break;		case 'l':			j = 0212;			break;		case 'i':			j = 0211;			break;		default:			ch0 = j;			j = i;	}	return((i & ~CMASK) | j);}caselg(){	lg = 1;	if(skip())return;	lg = atoi();}casefp(){	register i, j, k;	int x;	skip();	if(((i = (getch() & CMASK) - '0' -1) < 0) || (i >3)){prstr("fp: bad font position\n"); return;}	if(skip() || !(j = getrq())){prstr("fp: no font name\n"); return;}	fontfile[ffi] = j & BMASK;	fontfile[ffi+1] = j>>BYTE;	if((k = open(fontfile,0)) < 0){		prstr("Cannot open ");	c0:		prstr(fontfile);		prstr("\n");		done(-1);	}	if(lseek(k,8L * sizeof(int),0) < 0)goto c1; 	if(read(k,fontab[i],256-32) != 256-32){	c1:		prstr("Cannot read ");		goto c0;	}	close(k);	if(i == (smnt-1)){smnt = 0; sbold = 0; spsz = 0;}	if((fontlab[i] = j) == 'S')smnt = i + 1;	bdtab[i] = cstab[i] = ccstab[i] = 0;	fz[i].inc = fz[i].sign = fz[i].size = 0;	if(ptid != 1){		prstr("Mount font ");		prstr(&fontfile[ffi]);		prstr(" on ");		x = PAIR((i + '1'),0);		prstr((char *)&x);		prstr("\n");	}}casecs(){	register i, j;	noscale++;	skip();	if(!(i=getrq()) ||	  ((i = find(i,fontlab)) < 0))goto rtn;	skip();	cstab[i] = atoi();	skip();	j = atoi();	if(!nonumb)ccstab[i] = findps(j);rtn:	noscale = 0;}casebd(){	register i, j, k;	k = 0;bd0:	if(skip() || !(i = getrq()) ||	  ((j = find(i,fontlab))  == -1)){		if(k)goto bd1;		else return;	}	if(j == (smnt-1)){		k = smnt;		goto bd0;	}	if(k){		sbold = j + 1;		j = k -1;	}bd1:	skip();	noscale++;	bdtab[j] = atoi();	noscale = 0;}casevs(){	register i;	skip();	vflag++;	dfact = 6; /*default scaling is points!*/	res = VERT;	i = inumb(&lss);	if(nonumb)i = lss1;	if(i < VERT)i = VERT;	lss1 = lss;	lss = i;}casess(){	register i;	noscale++;	skip();	if(i = atoi()){		spacesz = i& 0177;		sps = width(' ' | chbits);	}	noscale = 0;}xlss(){	register i, j;	getch();	dfact = lss;	i = quant(atoi(),VERT);	dfact = 1;	getch();	if((j = i) < 0)j = -j;	ch0 = ((j & 03700)<<3) | HX;	if(i < 0)ch0 |= 040000;	return(((j & 077)<<9) | LX);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -