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

📄 n6.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "tdef.h"#include "ext.h"#include "fns.h"#include <ctype.h>/* * n6.c -- width functions, sizes and fonts*/n_width(Tchar j){	int i, k;	if (iszbit(j))		return 0;	if (ismot(j)) {		if (isvmot(j))			return(0);		k = absmot(j);		if (isnmot(j))			k = -k;		return(k);	}	i = cbits(j);	if (i < ' ') {		if (i == '\b')			return(-widthp);		if (i == PRESC)			i = eschar;		else if (i == HX)			return(0);	}	if (i == ohc)		return(0);	i = trtab[i];	if (i < ' ')		return(0);	if (i >= t.tfont.nchars)	/* not on the font */		k = t.Char;		/* really ought to check properly */	else		k = t.tfont.wp[i].wid * t.Char;	widthp = k;	return(k);}Tchar n_setch(int c){	return t_setch(c);}Tchar n_setabs(void)	/* set absolute char from \N'...' */{			/* for now, a no-op */	return t_setabs();}int n_findft(int i){	int k;	if ((k = i - '0') >= 0 && k <= nfonts && k < smnt)		return(k);	for (k = 0; fontlab[k] != i; k++)		if (k > nfonts)			return(-1);	return(k);}void n_mchbits(void){	chbits = 0;	setfbits(chbits, font);	sps = width(' ' | chbits);}void n_setps(void ){	int i, j;	i = cbits(getch());	if (isdigit(i)) {		/* \sd or \sdd */		i -= '0';		if (i == 0)		/* \s0 */			;		else if (i <= 3 && (ch=getch()) && isdigit(cbits(ch))) {	/* \sdd */			ch = 0;		}	} else if (i == '(') {		/* \s(dd */		getch();		getch();	} else if (i == '+' || i == '-') {	/* \s+, \s- */		j = cbits(getch());		if (isdigit(j)) {		/* \s+d, \s-d */			;		} else if (j == '(') {		/* \s+(dd, \s-(dd */			getch();			getch();		}	}}Tchar n_setht(void)		/* set character height from \H'...' */{	getch();	inumb(&apts);	getch();	return(0);}Tchar n_setslant(void)		/* set slant from \S'...' */{	int n;	getch();	n = 0;	n = inumb(&n);	getch();	return(0);}void n_caseft(void){	skip();	setfont(1);}void n_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')		return;	if ((j = findft(i)) == -1)		return;s0:	font1 = font;	font = j;	mchbits();}void n_setwd(void){	int base, wid;	Tchar i;	int	delim, emsz, k;	int	savhp, savapts, savapts1, savfont, savfont1, savpts, savpts1;	base = numtabp[ST].val = numtabp[ST].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 * pts + 36) / 72;		} 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 n_vmot(void){	dfact = lss;	vflag++;	return n_mot();}Tchar n_hmot(void){	dfact = EM;	return n_mot();}Tchar n_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 n_sethl(int k){	int j;	Tchar i;	j = t.Halfline;	if (k == 'u')		j = -j;	else if (k == 'r')		j = -2 * j;	vflag++;	i = makem(j);	vflag = 0;	return(i);}Tchar n_makem(int i){	Tchar j;	if (i >= 0)		j = i;	else		j = -i;	j |= MOT;	if (i < 0)		j |= NMOT;	if (vflag)		j |= VMOT;	return(j);}void n_casefp(void){	int i, j;	skip();	if ((i = cbits(getch()) - '0') < 0 || i > nfonts)		return;	if (skip() || !(j = getrq()))		return;	fontlab[i] = j;}void n_casebd(void){	int i, j, k;	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 n_casevs(void){	int i;	skip();	vflag++;	dfact = INCH; /*default scaling is points!*/	dfactd = 72;	res = VERT;	i = inumb(&lss);	if (nonumb)		i = lss1;	if (i < VERT)		i = VERT;	/* was VERT */	lss1 = lss;	lss = i;}Tchar n_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);}

⌨️ 快捷键说明

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