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

📄 tv.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* tv.c: draw vertical lines */# include "t.h"voiddrawvert(int start, int end, int c, int lwid){	char	*exb = 0, *ext = 0;	int	tp = 0, sl, ln, pos, epb, ept, vm;	end++;	vm = 'v';				/* note: nr 35 has value of 1m outside of linesize */	while (instead[end]) 		end++;	for (ln = 0; ln < lwid; ln++) {		epb = ept = 0;		pos = 2 * ln - lwid + 1;		if (pos != tp) 			Bprint(&tabout, "\\h'%dp'", pos - tp);		tp = pos;		if (end < nlin) {			if (fullbot[end] || (!instead[end] && allh(end)))				epb = 2;			else				switch (midbar(end, c)) {				case '-':					exb = "1v-.5m"; 					break;				case '=':					exb = "1v-.5m";					epb = 1; 					break;				}		}		if (lwid > 1)			switch (interh(end, c)) {			case THRU: 				epb -= 1; 				break;			case RIGHT: 				epb += (ln == 0 ? 1 : -1); 				break;			case LEFT: 				epb += (ln == 1 ? 1 : -1); 				break;			}		if (lwid == 1)			switch (interh(end, c)) {			case THRU: 				epb -= 1; 				break;			case RIGHT: 			case LEFT: 				epb += 1; 				break;			}		if (start > 0) {			sl = start - 1;			while (sl >= 0 && instead[sl]) 				sl--;			if (sl >= 0 && (fullbot[sl] || allh(sl)))				ept = 0;			else if (sl >= 0)				switch (midbar(sl, c)) {				case '-':					ext = ".5m"; 					break;				case '=':					ext = ".5m"; 					ept = -1; 					break;				default:					vm = 'm'; 					break;				}			else				ept = -4;		} else if (start == 0 && allh(0)) {			ept = 0;			vm = 'm';		}		if (lwid > 1)			switch (interh(start, c)) {			case THRU: 				ept += 1; 				break;			case LEFT: 				ept += (ln == 0 ? 1 : -1); 				break;			case RIGHT: 				ept += (ln == 1 ? 1 : -1); 				break;			}		else if (lwid == 1)			switch (interh(start, c)) {			case THRU: 				ept += 1; 				break;			case LEFT: 			case RIGHT: 				ept -= 1; 				break;			}		if (exb)			Bprint(&tabout, "\\v'%s'", exb);		if (epb)			Bprint(&tabout, "\\v'%dp'", epb);		Bprint(&tabout, "\\s\\n(%d", LSIZE);		if (linsize)			Bprint(&tabout, "\\v'-\\n(%dp/6u'", LSIZE);		Bprint(&tabout, "\\h'-\\n(#~u'");	 /* adjustment for T450 nroff boxes */		Bprint(&tabout, "\\L'|\\n(#%cu-%s", linestop[start] + 'a' - 1,		      vm == 'v' ? "1v" : "\\n(35u");		if (ext)			Bprint(&tabout, "-(%s)", ext);		if (exb)			Bprint(&tabout, "-(%s)", exb);		pos = ept - epb;		if (pos)			Bprint(&tabout, "%s%dp", pos >= 0 ? "+" : "", pos);		/* the string #d is either "nl" or ".d" depending	   on diversions; on GCOS not the same */		Bprint(&tabout, "'\\s0\\v'\\n(\\*(#du-\\n(#%cu+%s",		     linestop[start] + 'a' - 1, vm == 'v' ? "1v" : "\\n(35u");		if (ext)			Bprint(&tabout, "+%s", ext);		if (ept)			Bprint(&tabout, "%s%dp", (-ept) > 0 ? "+" : "", (-ept));		Bprint(&tabout, "'");		if (linsize)			Bprint(&tabout, "\\v'\\n(%dp/6u'", LSIZE);	}}intmidbar(int i, int c){	int	k;	k = midbcol(i, c);	if (k == 0 && c > 0)		k = midbcol(i, c - 1);	return(k);}intmidbcol(int i, int c){	int	ct;	while ( (ct = ctype(i, c)) == 's')		c--;	if (ct == '-' || ct == '=')		return(ct);	if (ct = barent(table[i][c].col))		return(ct);	return(0);}intbarent(char *s){	if (s == 0) 		return (1);	if (!point(s)) 		return(0);	if (s[0] == '\\') 		s++;	if (s[1] != 0)		return(0);	switch (s[0]) {	case '_':		return('-');	case '=':		return('=');	}	return(0);}

⌨️ 快捷键说明

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