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

📄 t6.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
📖 第 1 页 / 共 2 页
字号:
	setsbits(c, n);	setfbits(c, pts);	/* sneaky, CHARHT font bits are size bits */	return(c);}Tchar t_setslant(void)		/* set slant from \S'...' */{	int n;	Tchar c;	getch();	n = 0;	n = inumb(&n);	getch();	if (nonumb)		n = 0;	c = SLANT;	c |= ZBIT;	setsfbits(c, n+180);	return(c);}void caseft(void){	if (!TROFF) {		n_caseft();		return;	}	skip();	setfont(1);}void t_setfont(int a){	int i, j;	if (a)		i = getrq();	else 		i = getsn();	if (!i || i == 'P') {		j = font1;		goto s0;	}	if (/* i == 'S' || */ i == '0')	/* an experiment -- why can't we change to it? */		return;	if ((j = findft(i)) == -1)		if ((j = setfp(0, i, (char*) 0, 1)) == -1)	/* try to put it in position 0 */			return;s0:	font1 = font;	font = j;	mchbits();}void t_setwd(void){	int base, wid;	Tchar i;	int delim, emsz, k;	int savhp, savapts, savapts1, savfont, savfont1, savpts, savpts1;	base = numtabp[ST].val = numtabp[SB].val = wid = numtabp[CT].val = 0;	if (ismot(i = getch()))		return;	delim = cbits(i);	savhp = numtabp[HP].val;	numtabp[HP].val = 0;	savapts = apts;	savapts1 = apts1;	savfont = font;	savfont1 = font1;	savpts = pts;	savpts1 = pts1;	setwdf++;	while (cbits(i = getch()) != delim && !nlflg) {		k = width(i);		wid += k;		numtabp[HP].val += k;		if (!ismot(i)) {			emsz = (INCH/72) * xpts;		} else if (isvmot(i)) {			k = absmot(i);			if (isnmot(i))				k = -k;			base -= k;			emsz = 0;		} else 			continue;		if (base < numtabp[SB].val)			numtabp[SB].val = base;		if ((k = base + emsz) > numtabp[ST].val)			numtabp[ST].val = k;	}	setn1(wid, 0, (Tchar) 0);	numtabp[HP].val = savhp;	apts = savapts;	apts1 = savapts1;	font = savfont;	font1 = savfont1;	pts = savpts;	pts1 = savpts1;	mchbits();	setwdf = 0;}Tchar t_vmot(void){	dfact = lss;	vflag++;	return t_mot();}Tchar t_hmot(void){	dfact = EM;	return t_mot();}Tchar t_mot(void){	int j, n;	Tchar i;	j = HOR;	getch(); /*eat delim*/	if (n = atoi0()) {		if (vflag)			j = VERT;		i = makem(quant(n, j));	} else		i = 0;	getch();	vflag = 0;	dfact = 1;	return(i);}Tchar t_sethl(int k){	int j;	Tchar i;	j = EM / 2;	if (k == 'u')		j = -j;	else if (k == 'r')		j = -2 * j;	vflag++;	i = makem(j);	vflag = 0;	return(i);}Tchar t_makem(int i){	Tchar j;	if (i >= 0)		j = i;	else		j = -i;	if (Hor > 1 && !vflag)		j = (j + Hor/2)/Hor * Hor;	j |= MOT;	if (i < 0)		j |= NMOT;	if (vflag)		j |= VMOT;	return(j);}Tchar getlg(Tchar i){	Tchar j, k;	int lf;	if (!TROFF)		return i;	if ((lf = fonts[fbits(i)].ligfont) == 0) /* font lacks ligatures */		return(i);	j = getch0();	if (cbits(j) == 'i' && (lf & LFI))		j = LIG_FI;	else if (cbits(j) == 'l' && (lf & LFL))		j = LIG_FL;	else if (cbits(j) == 'f' && (lf & LFF)) {		if ((lf & (LFFI|LFFL)) && lg != 2) {			k = getch0();			if (cbits(k)=='i' && (lf&LFFI))				j = LIG_FFI;			else if (cbits(k)=='l' && (lf&LFFL))				j = LIG_FFL;			else {				*pbp++ = k;				j = LIG_FF;			}		} else 			j = LIG_FF;	} else {		*pbp++ = j;		j = i;	}	return(i & SFMASK | j);}void caselg(void){	if(TROFF) {		skip();		lg = atoi0();		if (nonumb)			lg = 1;	}}void casefp(void){	int i, j;	if (!TROFF) {		n_casefp();		return;	}	skip();	i = cbits(getch());	if (isdigit(i)) {		i -= '0';		j = cbits(getch());		if (isdigit(j))			i = 10 * i + j - '0';	}	if (i <= 0 || i > nfonts)		ERROR "fp: bad font position %d", i WARN;	else if (skip() || !(j = getrq()))		ERROR "fp: no font name" WARN; 	else if (skip() || !getname())		setfp(i, j, (char*) 0, 1);	else		/* 3rd argument = filename */		setfp(i, j, nextf, 1);}char *strdupl(const char *s)	/* make a copy of s */{	char *t;	t = (char *) malloc(strlen(s) + 1);	if (t == NULL)		ERROR "out of space in strdupl(%s)", s FATAL;	strcpy(t, s);	return t;}setfp(int pos, int f, char *truename, int print)	/* mount font f at position pos[0...nfonts] */{	char pathname[NS], shortname[NS], *sl;	zapwcache(0);	if (truename)		strcpy(shortname, truename);	else		strcpy(shortname, (char *) unpair(f));	if (truename && strrchr(truename, '/')) {	/* .fp 1 R dir/file: use verbatim */		sprintf(pathname, "%s", truename);		if (fonts[pos].truename)			free(fonts[pos].truename);		fonts[pos].truename = strdupl(truename);	} else if (truename) {			/* synonym: .fp 1 R Avant */		sprintf(pathname, "%s/dev%s/%s", fontdir, devname, truename);		truename = 0;	/* so doesn't get repeated by ptfpcmd */	} else					/* vanilla: .fp 5 XX */		sprintf(pathname, "%s/dev%s/%s", fontdir, devname, shortname);	if (truename == 0 && fonts[pos].truename != 0) {		free(fonts[pos].truename);		fonts[pos].truename = 0;	}	if (getfont(pathname, pos) < 0) {		ERROR "Can't open font file %s", pathname WARN;		return -1;	}	if (print && !ascii) {		ptfpcmd(pos, fonts[pos].longname, truename);		ptfont();	}	if (pos == smnt) {		smnt = 0; 		sbold = 0; 	}	fontlab[pos] = f;	if (smnt == 0 && fonts[pos].specfont)		smnt = pos;	bdtab[pos] = cstab[pos] = ccstab[pos] = 0;	return pos;}/* * .cs request; don't check legality of optional arguments */void casecs(void){	int i, j;	if (TROFF) {		int savtr = trace;		trace = 0;		noscale++;		skip();		if (!(i = getrq()) || (i = findft(i)) < 0)			goto rtn;		skip();		cstab[i] = atoi0();		skip();		j = atoi0();		if(nonumb)			ccstab[i] = 0;		else			ccstab[i] = findps(j);	rtn:		zapwcache(0);		noscale = 0;		trace = savtr;	}}void casebd(void){	int i, j, k;	if (!TROFF) {		n_casebd();		return;	}	zapwcache(0);	k = 0;bd0:	if (skip() || !(i = getrq()) || (j = findft(i)) == -1) {		if (k)			goto bd1;		else 			return;	}	if (j == smnt) {		k = smnt;		goto bd0;	}	if (k) {		sbold = j;		j = k;	}bd1:	skip();	noscale++;	bdtab[j] = atoi0();	noscale = 0;}void casevs(void){	int i;	if (!TROFF) {		n_casevs();		return;	}	skip();	vflag++;	dfact = INCH; /* default scaling is points! */	dfactd = 72;	res = VERT;	i = inumb(&lss);	if (nonumb)		i = lss1;	if (i < VERT) 		i = VERT;	lss1 = lss;	lss = i;}void casess(void){	int i;	if(TROFF) {		noscale++;		skip();		if(i = atoi0()) {			spacesz = i & 0177;			zapwcache(0);			sps = width(' ' | chbits);		}		noscale = 0;	}}Tchar t_xlss(void){	/* stores \x'...' into two successive Tchars.	/* the first contains HX, the second the value,	/* encoded as a vertical motion.	/* decoding is done in n2.c by pchar().	*/	int i;	getch();	dfact = lss;	i = quant(atoi0(), VERT);	dfact = 1;	getch();	if (i >= 0)		*pbp++ = MOT | VMOT | i;	else		*pbp++ = MOT | VMOT | NMOT | -i;	return(HX);}Uchar *unpair(int i){	static Uchar name[3];	name[0] = i & SHORTMASK;	name[1] = (i >> SHORT) & SHORTMASK;	name[2] = 0;	return name;}

⌨️ 快捷键说明

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