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

📄 n10.c

📁 unix v7是最后一个广泛发布的研究型UNIX版本
💻 C
字号:
#include "tdef.h"#include <sgtty.h>extern#include "d.h"extern#include "v.h"extern#include "tw.h"/*nroff10.cDevice interfaces*/extern int lss;extern char obuf[];extern char *obufp;extern int xfont;extern int esc;extern int lead;extern int oline[];extern int *olinep;extern int ulfont;extern int esct;extern int sps;extern int ics;extern int ttysave;extern struct sgttyb ttys;extern char termtab[];extern int ptid;extern int waitf;extern int pipeflg;extern int eqflg;extern int hflg;extern int tabtab[];extern int ascii;extern int xxx;int dtab;int bdmode;int plotmode;ptinit(){	register i, j;	register char **p;	char *q;	int x[8];	extern char *setbrk();	if((i = open(termtab,0)) < 0){		prstr("Cannot open ");		prstr(termtab);		prstr("\n");		exit(-1);	}	read(i,(char *)x,8*sizeof(int));	read(i,(char *)&t.bset,j = sizeof(int)*((int *)&t.zzz - &t.bset));	x[2] -= j;	q = setbrk(x[2]);	lseek(i,(long)t.twinit+8*sizeof(int),0);	i = read(i,q,x[2]);	j = q - t.twinit;	for(p = &t.twinit; p < &t.zzz; p++){		if(*p)*p += j;else *p = "";	}	sps = EM;	ics = EM*2;	dtab = 8 * t.Em;	for(i=0; i<16; i++)tabtab[i] = dtab * (i+1);	if(eqflg)t.Adj = t.Hor;}twdone(){	obufp = obuf;	oputs(t.twrest);	flusho();	if(pipeflg){		close(ptid);		wait(&waitf);	}	if(ttysave != -1) {		ttys.sg_flags = ttysave;		stty(1, &ttys);	}}ptout(i)int i;{	*olinep++ = i;	if(olinep >= &oline[LNSIZE])olinep--;	if((i&CMASK) != '\n')return;	olinep--;	lead += dip->blss + lss - t.Newline;	dip->blss = 0;	esct = esc = 0;	if(olinep>oline){		move();		ptout1();		oputs(t.twnl);	}else{		lead += t.Newline;		move();	}	lead += dip->alss;	dip->alss = 0;	olinep = oline;}ptout1(){	register i, k;	register char *codep;	extern char *plot();	int *q, w, j, phyw;	for(q=oline; q<olinep; q++){	if((i = *q) & MOT){		j = i & ~MOTV;		if(i & NMOT)j = -j;		if(i & VMOT)lead += j;		else esc += j;		continue;	}	if((k = (i & CMASK)) <= 040){		switch(k){			case ' ': /*space*/				esc += t.Char;				break;		}		continue;	}	codep = t.codetab[k-32];	w = t.Char * (*codep++ & 0177);	phyw = w;	if(i&ZBIT)w = 0;	if(*codep && (esc || lead))move();	esct += w;	if(i&074000)xfont = (i>>9) & 03;	if(*t.bdon & 0377){		if(!bdmode && (xfont == 2)){			oputs(t.bdon);			bdmode++;		}		if(bdmode && (xfont != 2)){			oputs(t.bdoff);			bdmode = 0;		}	}	if(xfont == ulfont){		for(k=w/t.Char;k>0;k--)oput('_');		for(k=w/t.Char;k>0;k--)oput('\b');	}	while(*codep != 0){		if(*codep & 0200){			codep = plot(codep);			oputs(t.plotoff);			oput(' ');		}else{			if(plotmode)oputs(t.plotoff);			*obufp++ = *codep++;			if(obufp == (obuf + OBUFSZ + ascii - 1))flusho();/*			oput(*codep++);*/		}	}	if(!w)for(k=phyw/t.Char;k>0;k--)oput('\b');	}}char *plot(x)char *x;{	register int i;	register char *j, *k;	if(!plotmode)oputs(t.ploton);	k = x;	if((*k & 0377) == 0200)k++;	for(; *k; k++){		if(*k & 0200){			if(*k & 0100){				if(*k & 040)j = t.up; else j = t.down;			}else{				if(*k & 040)j = t.left; else j = t.right;			}			if(!(i = *k & 037))return(++k);			while(i--)oputs(j);		}else oput(*k);	}	return(k);}move(){	register k;	register char *i, *j;	char *p, *q;	int iesct, dt;	iesct = esct;	if(esct += esc)i = "\0"; else i = "\n\0";	j = t.hlf;	p = t.right;	q = t.down;	if(lead){		if(lead < 0){			lead = -lead;			i = t.flr;		/*	if(!esct)i = t.flr; else i = "\0";*/			j = t.hlr;			q = t.up;		}		if(*i & 0377){			k = lead/t.Newline;			lead = lead%t.Newline;			while(k--)oputs(i);		}		if(*j & 0377){			k = lead/t.Halfline;			lead = lead%t.Halfline;			while(k--)oputs(j);		}		else { /* no half-line forward, not at line begining */			k = lead/t.Newline;			lead = lead%t.Newline;			if (k>0) esc=esct;			i = "\n";			while (k--) oputs(i);		}	}	if(esc){		if(esc < 0){			esc = -esc;			j = "\b";			p = t.left;		}else{			j = " ";			if(hflg)while((dt = dtab - (iesct%dtab)) <= esc){				if(dt%t.Em)break;				oput(TAB);				esc -= dt;				iesct += dt;			}		}		k = esc/t.Em;		esc = esc%t.Em;		while(k--)oputs(j);	}	if((*t.ploton & 0377) && (esc || lead)){		if(!plotmode)oputs(t.ploton);		esc /= t.Hor;		lead /= t.Vert;		while(esc--)oputs(p);		while(lead--)oputs(q);		oputs(t.plotoff);	}	esc = lead = 0;}ptlead(){move();}dostop(){	char junk;	flusho();	read(2,&junk,1);}

⌨️ 快捷键说明

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