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

📄 readdesc.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <ctype.h>#include "common.h"#include "tr2post.h"#include "comments.h"#include "path.h"char *printdesclang = 0;char *encoding = 0;int devres;int unitwidth;int nspechars = 0;struct charent spechars[MAXSPECHARS];#define NDESCTOKS 9static char *desctoks[NDESCTOKS] = {	"PDL",	"Encoding",	"fonts",	"sizes",	"res",	"hor",	"vert",	"unitwidth",	"charset"};char *spechar[MAXSPECHARS];inthash(char *s, int l) {    unsigned i;    for (i=0; *s; s++)	i = i*10 + *s;    return(i % l);}BOOLEANreadDESC(void) {	char token[MAXTOKENSIZE];	char *descnameformat = "%s/dev%s/DESC";	char *descfilename = 0;	Biobuf *bfd;	Biobufhdr *Bfd;	int i, state = -1;	int fontindex = 0;	if (debug) Bprint(Bstderr, "readDESC()\n");	descfilename = galloc(descfilename, strlen(descnameformat)+strlen(FONTDIR)		+strlen(devname), "readdesc");	sprint(descfilename, descnameformat, FONTDIR, devname);	if ((bfd = Bopen(descfilename, OREAD)) == 0) {		error(WARNING, "cannot open file %s\n", descfilename);		return(0);	}	Bfd = &(bfd->Biobufhdr);	while (Bgetfield(Bfd, 's', token, MAXTOKENSIZE) > 0) {		for (i=0; i<NDESCTOKS; i++) {			if (strcmp(desctoks[i], token) == 0) {				state = i;				break;			}		}		if (i<NDESCTOKS) continue;		switch (state) {		case 0:			printdesclang=galloc(printdesclang, strlen(token)+1, "readdesc:");			strcpy(printdesclang, token);			if (debug) Bprint(Bstderr, "PDL %s\n", token);			break;			case 1:			encoding=galloc(encoding, strlen(token)+1, "readdesc:");			strcpy(encoding, token);			if (debug) Bprint(Bstderr, "encoding %s\n", token);			break;		case 2:			if (fontmnt <=0) {				if (!isdigit(*token)) {					error(WARNING, "readdesc: expecting number of fonts in mount table.\n");					return(FALSE);				}				fontmnt = atoi(token) + 1;				fontmtab = galloc(fontmtab, fontmnt*sizeof(char *), "readdesc:");								for (i=0; i<fontmnt; i++)					fontmtab[i] = 0;				fontindex = 0;			} else {				mountfont(++fontindex, token);				findtfn(token, TRUE);			}			break;		case 3:			/* I don't really care about sizes */			break;		case 4:			/* device resolution in dots per inch */			if (!isdigit(*token)) {				error(WARNING, "readdesc: expecting device resolution.\n");				return(FALSE);			}			devres = atoi(token);			if (debug) Bprint(Bstderr, "res %d\n", devres);			break;		case 5:			/* I don't really care about horizontal motion resolution */			if (debug) Bprint(Bstderr, "ignoring horizontal resolution\n");			break;		case 6:			/* I don't really care about vertical motion resolution */			if (debug) Bprint(Bstderr, "ignoring vertical resolution\n");			break;		case 7:			/* unitwidth is the font size at which the character widths are 1:1 */			if (!isdigit(*token)) {				error(WARNING, "readdesc: expecting unitwidth.\n");				return(FALSE);			}			unitwidth = atoi(token);			if (debug) Bprint(Bstderr, "unitwidth %d\n", unitwidth);			break;		case 8:			/* I don't really care about this list of special characters */			if (debug) Bprint(Bstderr, "ignoring special character <%s>\n", token);			break;		default:			if (*token == '#')				Brdline(Bfd, '\n');			else				error(WARNING, "unknown token %s in DESC file.\n", token);			break;		}	}	Bterm(Bfd);}

⌨️ 快捷键说明

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