?? bufblock.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 + -