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

📄 roget.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <ctype.h>#include "dict.h"/* Roget's Thesaurus from project Gutenberg */static long Last = 0;voidrogetprintentry(Entry e, int cmd){	int spc;	char c, *p;	spc = 0;	p = e.start;	if(cmd == 'h'){		while(!isspace(*p) && p < e.end)			p++;		while(strncmp(p, " -- ", 4) != 0 && p < e.end){			while(isspace(*p) && p < e.end)				p++;			if (*p == '[' || *p == '{'){					c = (*p == '[')? ']': '}';				while(*p != c && p < e.end)					p++;				p++;				continue;			}			if (isdigit(*p) || ispunct(*p)){				while(!isspace(*p) && p < e.end)					p++;				continue;			}			if (isspace(*p))				spc = 1;			else			if (spc){				outchar(' ');				spc = 0;			}			while(!isspace(*p) && p < e.end)				outchar(*p++);		}		return;	}		while(p < e.end && !isspace(*p))		p++;	while(p < e.end && isspace(*p))		p++;	while (p < e.end){		if (p < e.end -4 && strncmp(p, " -- ", 4) == 0){	/* first line */			outnl(2);			p += 4;			spc = 0;		}					if (p < e.end -2 && strncmp(p, "[ ", 4) == 0){		/* twiddle layout */			outchars(" [");			continue;		}		if (p < e.end -4 && strncmp(p, "&c (", 4) == 0){	/* usefull xref */			if (spc)				outchar(' ');			outchar('/');			while(p < e.end && *p != '(')				p++;			p++;			while(p < e.end && *p != ')')				outchar(*p++);			p++;			while(p < e.end && isspace(*p))				p++;			while(p < e.end && isdigit(*p))				p++;			outchar('/');			continue;		}		if (p < e.end -3 && strncmp(p, "&c ", 3) == 0){		/* less usefull xref */			while(p < e.end && !isdigit(*p))				p++;			while(p < e.end && isdigit(*p))				p++;			continue;		}		if (*p == '\n' && p < (e.end -1)){			/* their newlines */			spc = 0;			p++;			if (isspace(*p)){				/* their continuation line */				while (isspace(*p))					p++;				p--;			}			else{				outnl(2);			}		}		if (spc && *p != ';' && *p != '.' &&		    *p != ',' && !isspace(*p)){				/* drop spaces before punct */			spc = 0;			outchar(' ');		}		if (isspace(*p))			spc = 1;		else			outchar(*p);		p++;	}	outnl(0);}longrogetnextoff(long fromoff){	int i;	vlong l;	char *p;	Bseek(bdict, fromoff, 0);	Brdline(bdict, '\n');	while ((p = Brdline(bdict, '\n')) != nil){		l = Blinelen(bdict);		if (!isdigit(*p))			continue;		for (i = 0; i < l-4; i++)			if (strncmp(p+i, " -- ", 4) == 0)				return Boffset(bdict)-l;	}	return Boffset(bdict);}voidrogetprintkey(void){	Bprint(bout, "No pronunciation key.\n");}

⌨️ 快捷键说明

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