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

📄 t10.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include "tdef.h"extern#include "d.h"extern#include "v.h"/*troff10.cCAT interface*/extern int *olinep;extern int oline[];extern int *pslp;extern int back;extern int xpts;extern int mpts;extern int po;extern int xflg;extern int line[];extern int lss;extern int xbitf;extern char obuf[];extern char *obufp;extern int esct;extern int trflg;extern int cs;extern int smnt;extern int mfont;extern int xfont;extern int code;extern int mcase;extern int esc;extern int lead;extern int paper;extern int cps;extern int psflg;extern int ptid;extern int verm;extern int escm;extern char pstab[], psctab[];extern int dpn;extern int ascii;int mrail = 0; /*0=LR,1=UR*/int mmag = 1; /*0=UM,1=LM*/extern int nofeed;extern int gflag;extern int fontlab[];int papflg;extern int pfont;extern int ppts;extern int oldbits;extern int bd;extern int vflag;extern int stopmesg;extern int xxx;ptinit(){	if(ascii || gflag)return;	oput(T_INIT);	esc = T_IESC;	ptesc();	esct = 0;	esc = po;	oput(0140); /*some initial lead*/}ptout(i)int i;{	register *k, lw, *j;	int ds, de, inith, temp, *slp, dv;	int psl[16];	if((i & CMASK) != '\n'){		*olinep++ = i;		return;	}	if(olinep == oline){		lead += lss;		return;	}	pslp = psl;	*pslp = lw = inith = dv = 0;	for(k=oline; k<olinep; k++){		trflg++;		xbitf = 1;		lw += width(*k);		if((*k & (MOT | VMOT)) == (MOT | VMOT)){			temp = *k & ~MOTV;			if(*k & NMOT)temp = -temp;			dv += temp;		}		if(!(*k & MOT) && xflg)for(j=psl; j<=pslp; j++){			if(xpts == *j)break;			if(j == pslp){				*j = xpts;				*++pslp = 0;				break;			}		}	}	if(dv){		vflag++;		*olinep++ = makem(-dv);		vflag = 0;	}	if(xflg){	--pslp;		for(j=psl; j<=pslp; j++){			if(*j == mpts){				temp = *j;				*j = *pslp;				*pslp = temp;				break;			}		}	}	for(k=oline; k<olinep; k++){		if(!(*k & MOT) || (*k & VMOT))break;		*k &= ~MOT;		if(*k & NMOT){			*k &= ~NMOT;			*k = -*k;		}		inith += *k;	}	lead += dip->blss + lss;	dip->blss = 0;	slp = k;scan:	temp = esct - po;	if(mpts & DBL)temp -= 55;	ds = temp - inith;	de = lw - temp;	if(de >= ds){		back = 0;		esc = -ds;		for(k=slp; k<olinep; k++)ptout0(*k);	}else{		back = 1;		esc = de;		for(k = olinep-1; k>=slp; --k)ptout0(*k);	}	if(xflg && (--pslp >= psl))goto scan;	olinep = oline;	lead += dip->alss;	dip->alss = 0;}ptout0(i)int i;{	register j, k, w;	int z;	if(i & MOT){		j = i & ~MOTV;		if(i & NMOT)j = -j;		if(back)j = -j;		if(i & VMOT)lead += j;		else esc += j;		return;	}	xbitf = 2;	if((i>>BYTE) == oldbits){		xfont = pfont;		xpts = ppts;		xbitf = 0;	}else xbits(i);	if((k = (i & CMASK)) < 040){		return;	}	w = getcw(k-32);	if(cs){		if(bd)w += bd - 1;		j = (cs-w)/2;		w = cs - j;		if(bd)w -= bd - 1;	}else j = 0;	if(i & ZBIT){		if(cs)w = -j; else w = 0;		z = 1;	}else z = 0;	if(back){		k = j;		j = -w;		w = -k;	}	esc += j;	if((!xflg || (xpts == *pslp)) && (code & 077)){		if(code & 0200){			if(smnt)xfont = smnt -1;			else goto p1;		}		if((k=(code>>6)&01)^mcase)oput((mcase=k)+0105);		if(xfont != mfont){			mfont = xfont;			if(mrail != (xfont&01))				oput(0101 + (mrail=xfont&01));			if(mmag != (xfont<2))				oput(0103 + (mmag=(xfont<2)));		}		if(xpts != mpts)ptps();		if(lead)ptlead();		if(esc)ptesc();/*		oput(code & 077);*/		*obufp++ = code & 077;		if(obufp == (obuf + OBUFSZ + ascii - 1))flusho();		if(bd){			bd -= 1;			if(back && !z)bd = -bd;			if(esc += bd)ptesc();			oput(code & 077);			if(z)esc -= bd;		}	}else if(bd && !z){		bd -= 1;		if(back)bd = -bd;		esc += bd;	}p1:	esc += w;	return;}ptps(){	register i, j, k;	if(psflg)return;	if(cps){		psflg++;		i = findps(cps);	}else i = xpts;	for(j=0; (i&077) > (k = pstab[j]);j++)if(!k){k=pstab[--j];break;}	j = psctab[j];	oput((j & ~0200) | 0120);	if((!(mpts & DBL))^(!(j & 0200))){		if(j & 0200)k = 55;			else k = -55;		esc += k;	}	mpts = i;}ptlead(){	register i, k;	if(k = lead < 0)lead = -lead;	if(k^verm)oput(0112 + ((verm=k)<<1));	if(((k=lead)%3) == 2)k++;	k /= 3;	while(k > 0){		if((i=31) > k)i = k;		if(verm)paper -= i;			else paper += i;		oput(((~i) & 037) | 0140);		if((paper > (11*144*15)) && !papflg && ptid != 1){			prstr("Excessive paper use.\n");			papflg++;			if(ptid != 1){				lead = 0;				done2(0200);			}		}		k -= i;	}	lead = 0;}ptesc(){	register i, j, k;	if(k = esc < 0)esc = -esc;	if(k^escm)oput(0107 + (escm=k));	k = esc;	while(k > 0){		if((i=127) > k)i = k;		if(((j = (esct + i*(1-2*escm))) > (46*72+18-T_IESC)) ||		   (j < 0))break;/*		oput(~i);*/		*obufp++ = ~i;		if(obufp == (obuf + OBUFSZ + ascii - 1))flusho();		esct = j;		k -= i;	}	esc = 0;}dostop(){	register i;	if(ascii)return;	if(!nofeed && !gflag)lead += TRAILER;	ptlead();	flusho();	oput(T_INIT);	oput(T_STOP);	if(gflag){		oput('f');		for(i=0; i<4; i++){			oput(fontlab[i] & BMASK);			oput((fontlab[i]>>BYTE) & BMASK);		}	}else for(i=8; i>0; i--)oput(T_PAD);	flusho();	if(stopmesg)prstr("Pages finished.\n");	mcase = mpts = mfont = mrail = verm = escm = 0;	mmag = 1;	report();	paper = 0;	esc = T_IESC;	ptesc();	esct = 0;	esc = po;}

⌨️ 快捷键说明

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