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

📄 bufblock.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include	"mk.h"static Bufblock *freelist;#define	QUANTA	4096Bufblock *newbuf(void){	Bufblock *p;	if (freelist) {		p = freelist;		freelist = freelist->next;	} else {		p = (Bufblock *) Malloc(sizeof(Bufblock));		p->start = Malloc(QUANTA*sizeof(*p->start));		p->end = p->start+QUANTA;	}	p->current = p->start;	*p->start = 0;	p->next = 0;	return p;}voidfreebuf(Bufblock *p){	p->next = freelist;	freelist = p;}voidgrowbuf(Bufblock *p){	int n;	Bufblock *f;	char *cp;	n = p->end-p->start+QUANTA;		/* search the free list for a big buffer */	for (f = freelist; f; f = f->next) {		if (f->end-f->start >= n) {			memcpy(f->start, p->start, p->end-p->start);			cp = f->start;			f->start = p->start;			p->start = cp;			cp = f->end;			f->end = p->end;			p->end = cp;			f->current = f->start;			break;		}	}	if (!f) {		/* not found - grow it */		p->start = Realloc(p->start, n);		p->end = p->start+n;	}	p->current = p->start+n-QUANTA;}voidbufcpy(Bufblock *buf, char *cp, int n){	while (n--)		insert(buf, *cp++);}voidinsert(Bufblock *buf, int c){	if (buf->current >= buf->end)		growbuf(buf);	*buf->current++ = c;}voidrinsert(Bufblock *buf, Rune r){	int n;	n = runelen(r);	if (buf->current+n > buf->end)		growbuf(buf);	runetochar(buf->current, &r);	buf->current += n;}

⌨️ 快捷键说明

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