|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T a
Length: 2055 (0x807) Types: TextFile Names: »alloc.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Life/alloc.c«
#ifdef SCCS static char *sccsid = "@(#)alloc.c 1.5 2/1/85"; static char *cpyrid = "@(#)Copyright (C) 1985 by D Bell"; #endif #include "life.h" /* * Allocate a new object structure. It contains one row element, the termrow. */ struct object * allocobject() { register struct object *obj; obj = freeobjects; if (obj) freeobjects = obj->o_next; else { obj = newobjects; if (obj >= endobjects) { /* allocate new storage */ obj = (struct object *) sbrk(sizeof(struct object) * ALLOCOBJ); if ((int)obj == -1) { perror("sbrk"); exit(1); } newobjects = obj; endobjects = obj + ALLOCOBJ; } newobjects++; } obj->o_next = NULL; obj->o_firstrow = termrow; obj->o_lastrow = NULL; obj->o_reserved = reserve; obj->o_name[0] = '\0'; obj->o_count = 0; obj->o_gen = 0; obj->o_lock = 0; obj->o_currow = 0; obj->o_curcol = 0; obj->o_prow = 0; obj->o_pcol = 0; obj->o_mark = 0; obj->o_autoscale = 0; setscale(obj, 1); return(obj); } /* * Allocate a new row structure. It contains one row element, the termcell. */ struct row * allocrow() { register struct row *rp; rp = freerows; if (rp) freerows = rp->r_next; else { rp = newrows; if (rp >= endrows) { /* allocate new storage */ rp = (struct row *) sbrk(sizeof(struct row) * ALLOCROW); if ((int)rp == -1) { perror("sbrk"); exit(1); } newrows = rp; endrows = rp + ALLOCROW; } newrows++; } rp->r_next = NULL; rp->r_firstcell = termcell; rp->r_lastcell = NULL; rp->r_count = 0; return(rp); } /* Allocate a new cell structure */ struct cell * alloccell() { register struct cell *cp; cp = freecells; if (cp) { freecells = cp->c_next; cp->c_next = NULL; cp->c_marks = MARK_ANY; return(cp); } cp = newcells; if (cp >= endcells) { /* allocate new storage */ cp = (struct cell *) sbrk(sizeof(struct cell) * ALLOCCELL); if ((int)cp == -1) { perror("sbrk"); exit(1); } newcells = cp; endcells = cp + ALLOCCELL; } newcells++; cp->c_next = NULL; cp->c_marks = MARK_ANY; return(cp); }