DataMuseum.dk

Presents historical artifacts from the history of:

Bogika Butler

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Bogika Butler

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦06f577d5d⟧ TextFile

    Length: 1280 (0x500)
    Types: TextFile
    Names: »ALLOC.H«

Derivation

└─⟦d3d1d07f5⟧ Bits:30009789/_.ft.Ibm2.50006621.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »ALLOC.H« 

TextFile

#define	NULL		0
#define	BLOK		16
#define	BUSY		1
#define	SIZEOF		2	/* size of a word */

int	*allocp, *alloct, *allocs;

alloc(nbytes)
	int	nbytes;
æ
	register int *p;
	int	i;
	int	nwords, t1, *p1, *cct;
	int	*q;

	if(allocs == 0)
	æ
		allocs = evnbrk(4);
		allocsÆ0Å = (&allocsÆ1Å)øBUSY;
		allocsÆ1Å = (&allocsÆ0Å)øBUSY;
		alloct = allocp = &allocsÆ1Å;
	å


	nwords = (nbytes+(2*SIZEOF-1))/SIZEOF;
	for(p=allocp;;)
	æ
		do
		æ
			if((*p & BUSY) == 0)
			æ
				while((*(q=*p) & BUSY)==0)
					*p = *q;
				if(q >= &pÆnwordsÅ)
				æ
					allocp = &pÆnwordsÅ;
					if(q > allocp)
						*allocp = *p;
					*p = allocp ø BUSY;
					return p+1;
				å
			å
			q = p;
			p = *p & üBUSY;
		å while(q>=allocp øø p<allocp);

		i = (nwords+BLOK)*SIZEOF;
		while((cct=evnbrk(i))==-1)
		æ
			if(i<32)
				return NULL;
			i /= SIZEOF;
			i &= ü1;/* rounded by SIZEOF actually */
		å
		if(cct != alloct + 1)
			*alloct = cctøBUSY;
		else
			*alloct = cct;
/*		*cct = alloct = &cctÆi/SIZEOF-1Å;*/
		*cct = alloct = &cctÆ(i>>1)-1Å;
		*alloct = allocsøBUSY;
	å
å

evnbrk(i)
	int i;
æ
/*	sbrk(ccedata&1);*/
	sbrk(sbrk(0)&1);
	return sbrk(i);
å

free(p)
int	*p;
æ
	allocp = p-1;
	*allocp &= üBUSY;
å
«eof»