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

📄 t5.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* t5.c: read data for table */# include "t.h"voidgettbl(void){	int	icol, ch;	cstore = cspace = chspace();	textflg = 0;	for (nlin = nslin = 0; gets1(cstore, MAXCHS - (cstore - cspace)); nlin++) {		stynum[nlin] = nslin;		if (prefix(".TE", cstore)) {			leftover = 0;			break;		}		if (prefix(".TC", cstore) || prefix(".T&", cstore)) {			readspec();			nslin++;		}		if (nlin >= MAXLIN) {			leftover = cstore;			break;		}		fullbot[nlin] = 0;		if (cstore[0] == '.' && !isdigit(cstore[1])) {			instead[nlin] = cstore;			while (*cstore++)				;			continue;		} else 			instead[nlin] = 0;		if (nodata(nlin)) {			if (ch = oneh(nlin))				fullbot[nlin] = ch;			table[nlin] = (struct colstr *) alocv((ncol + 2) * sizeof(table[0][0]));			for (icol = 0; icol < ncol; icol++) {				table[nlin][icol].rcol = "";				table[nlin][icol].col = "";			}			nlin++;			nslin++;			fullbot[nlin] = 0;			instead[nlin] = (char *) 0;		}		table[nlin] = (struct colstr *) alocv((ncol + 2) * sizeof(table[0][0]));		if (cstore[1] == 0)			switch (cstore[0]) {			case '_': 				fullbot[nlin] = '-'; 				continue;			case '=': 				fullbot[nlin] = '='; 				continue;			}		stynum[nlin] = nslin;		nslin = min(nslin + 1, nclin - 1);		for (icol = 0; icol < ncol; icol++) {			table[nlin][icol].col = cstore;			table[nlin][icol].rcol = 0;			ch = 1;			if (match(cstore, "T{")) { /* text follows */				table[nlin][icol].col = 				    (char *)gettext(cstore, nlin, icol,				    font[icol][stynum[nlin]],				    csize[icol][stynum[nlin]]);			} else			 {				for (; (ch = *cstore) != '\0' && ch != tab; cstore++)					;				*cstore++ = '\0';				switch (ctype(nlin, icol)) /* numerical or alpha, subcol */ {				case 'n':					table[nlin][icol].rcol = maknew(table[nlin][icol].col);					break;				case 'a':					table[nlin][icol].rcol = table[nlin][icol].col;					table[nlin][icol].col = "";					break;				}			}			while (ctype(nlin, icol + 1) == 's') /* spanning */				table[nlin][++icol].col = "";			if (ch == '\0') 				break;		}		while (++icol < ncol + 2) {			table[nlin][icol].col = "";			table [nlin][icol].rcol = 0;		}		while (*cstore != '\0')			cstore++;		if (cstore - cspace + MAXLINLEN > MAXCHS)			cstore = cspace = chspace();	}	last = cstore;	permute();	if (textflg) 		untext();	return;}intnodata(int il){	int	c;	for (c = 0; c < ncol; c++) {		switch (ctype(il, c)) {		case 'c': 		case 'n': 		case 'r': 		case 'l': 		case 's': 		case 'a':			return(0);		}	}	return(1);}intoneh(int lin){	int	k, icol;	k = ctype(lin, 0);	for (icol = 1; icol < ncol; icol++) {		if (k != ctype(lin, icol))			return(0);	}	return(k);}# define SPAN "\\^"voidpermute(void){	int	irow, jcol, is;	char	*start, *strig;	for (jcol = 0; jcol < ncol; jcol++) {		for (irow = 1; irow < nlin; irow++) {			if (vspand(irow, jcol, 0)) {				is = prev(irow);				if (is < 0)					error("Vertical spanning in first row not allowed");				start = table[is][jcol].col;				strig = table[is][jcol].rcol;				while (irow < nlin && vspand(irow, jcol, 0))					irow++;				table[--irow][jcol].col = start;				table[irow][jcol].rcol = strig;				while (is < irow) {					table[is][jcol].rcol = 0;					table[is][jcol].col = SPAN;					is = next(is);				}			}		}	}}intvspand(int ir, int ij, int ifform){	if (ir < 0) 		return(0);	if (ir >= nlin)		return(0);	if (instead[ir]) 		return(0);	if (ifform == 0 && ctype(ir, ij) == '^') 		return(1);	if (table[ir][ij].rcol != 0) 		return(0);	if (fullbot[ir]) 		return(0);	return(vspen(table[ir][ij].col));}intvspen(char *s){	if (s == 0) 		return(0);	if (!point(s)) 		return(0);	return(match(s, SPAN));}

⌨️ 快捷键说明

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