📄 unode.c
字号:
head 2.1;access;symbols;locks; strict;comment @ * @;2.1date 95.10.24.15.46.14; author tsurace; state Release;branches;next 1.1;1.1date 95.10.12.21.03.27; author tsurace; state Beta;branches;next ;desc@Unode structure management.@2.1log@Roll.@text@/* unode.c: Allocation and general routines dealing with user nodes */
/* $Id: unode.c 1.1 1995/10/12 21:03:27 tsurace Beta tsurace $ */
#include "vt.h"
static int id = 0; /* Used to assign unique IDs */
static Unode recycle_ring; /* Re-use discarded unodes */
extern int debug;
extern Dframe *dstack;
void init_unalloc()
{
recycle_ring.next = recycle_ring.prev = &recycle_ring;
}
Unode *unalloc()
{
Unode *ret;
if (recycle_ring.next != &recycle_ring) {
ret = recycle_ring.next;
recycle_ring.next = ret->next;
ret->next->prev = &recycle_ring;
} else
ret = New(Unode);
ret->frefs = NULL;
ret->dummy = 0;
ret->id = id++;
return ret;
}
void destroy_pointers(frefs)
Flist *frefs;
{
Flist *next;
for (; frefs; frefs = next) {
next = frefs->next;
frefs->fr->type = F_NULL;
Discard(frefs, Flist);
}
}
void discard_unode(un)
Unode *un;
{
un->id = -1;
un->next = recycle_ring.next;
un->prev = &recycle_ring;
recycle_ring.next = recycle_ring.next->prev = un;
}
void add_fref(frefs, frame)
Flist **frefs;
Dframe *frame;
{
Flist *fr;
fr = New(Flist);
fr->fr = frame;
fr->next = *frefs;
*frefs = fr;
}
void move_fref(frefs, old, new)
Flist *frefs;
Dframe *old, *new;
{
while (frefs->fr != old)
frefs = frefs->next;
frefs->fr = new;
}
void elim_fref(frefs, frame)
Flist **frefs;
Dframe *frame;
{
Flist *next;
while ((*frefs)->fr != frame)
frefs = &(*frefs)->next;
next = (*frefs)->next;
Discard(*frefs, Flist);
*frefs = next;
}
@1.1log@Initial revision@text@d2 1a2 1/* $Id$ */@
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -