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

📄 mkindex.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include "dict.h"/* * Use this to start making an index for a new dictionary. * Get the dictionary-specific nextoff and printentry(_,'h') * commands working, add a record to the dicts[] array below, * and run this program to get a list of offset,headword * pairs */Biobuf	boutbuf;Biobuf	*bdict;Biobuf	*bout = &boutbuf;int	linelen;int	breaklen = 2000;int	outinhibit;int	debug;Dict	*dict;	/* current dictionary */Entry	getentry(long);voidmain(int argc, char **argv){	int i;	long a, ae;	char *p;	Entry e;	Binit(&boutbuf, 1, OWRITE);	dict = &dicts[0];	ARGBEGIN {		case 'd':			p = ARGF();			dict = 0;			if(p) {				for(i=0; dicts[i].name; i++)					if(strcmp(p, dicts[i].name)==0) {						dict = &dicts[i];						break;					}			}			if(!dict) {				err("unknown dictionary: %s", p);				exits("nodict");			}			break;		case 'D':			debug++;			break;	ARGEND }	USED(argc,argv);	bdict = Bopen(dict->path, OREAD);	ae = Bseek(bdict, 0, 2);	if(!bdict) {		err("can't open dictionary %s", dict->path);		exits("nodict");	}	for(a = 0; a < ae; a = (*dict->nextoff)(a+1)) {		linelen = 0;		e = getentry(a);		Bprint(bout, "%ld\t", a);		linelen = 4;	/* only has to be approx right */		(*dict->printentry)(e, 'h');	}	exits(0);}Entrygetentry(long b){	long e, n, dtop;	static Entry ans;	static int anslen = 0;	e = (*dict->nextoff)(b+1);	ans.doff = b;	if(e < 0) {		dtop = Bseek(bdict, 0L, 2);		if(b < dtop) {			e = dtop;		} else {			err("couldn't seek to entry");			ans.start = 0;			ans.end = 0;		}	}	n = e-b;	if(n) {		if(n > anslen) {			ans.start = realloc(ans.start, n);			if(!ans.start) {				err("out of memory");				exits("nomem");			}			anslen = n;		}		Bseek(bdict, b, 0);		n = Bread(bdict, ans.start, n);		ans.end = ans.start + n;	}	return ans;}

⌨️ 快捷键说明

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