UNDO *undomk(B *b) { UNDO *undo = (UNDO *) alitem(&frdos, sizeof(UNDO)); undo->nrecs = 0; undo->ptr = NULL; undo->last = NULL; undo->first = NULL; undo->b = b; izque(UNDOREC, link, &undo->recs); enquef(UNDO, link, &undos, undo); return undo; }
static void frrec(UNDOREC *rec) { if (rec->del) { if (rec->len < SMALL) free(rec->small); else { B *b = rec->big; bonline(b); brm(b); } } enquef(UNDOREC, link, &frrecs, rec); }
void *alitem(void *list, ptrdiff_t itemsize) { STDITEM *freelist = (STDITEM *)list; if (qempty(STDITEM, link, freelist)) { STDITEM *i = (STDITEM *) joe_malloc(itemsize * 16); STDITEM *z = (STDITEM *) ((char *) i + itemsize * 16); while (i != z) { enquef(STDITEM, link, freelist, i); i = (STDITEM *) ((char *) i + itemsize); } } return (void *) deque_f(STDITEM, link, freelist->link.prev); }
static void freeerr(ERROR *n) { vsrm(n->file); vsrm(n->msg); enquef(ERROR, link, &errnodes, n); }
static void frirec(IREC *i) { /* Free an IREC */ enquef(IREC, link, &fri, i); }