V10/libj/balloc.c

#include <stdio.h>
#include "jerq.h"
#include "balloc.h"
#include "commands.h"

Bitmap BMT[BMTsize];
int avail = -1;

Bitmap *balloc(r) Rectangle r;
{	int i;
	if (avail<0) {
		for (i=0; i<BMTsize; i++) BMT[i].jname = -1;
		avail = 0;
	}
	else if (avail>BMTsize) {
		fprintf(stderr,"BMT full\n");
		return((Bitmap *) NULL);
	}
	else {
		sendCommand(CCBALLOC);
		sendInt(avail);
		sendRect(r);
		i = recInt();
		if (i!=avail) {
			fprintf(stderr, "balloc failed\n");
			return((Bitmap *) NULL);
		}
		for (avail++; avail<BMTsize && BMT[avail].jname!=-1; avail++) ;
		BMT[i].jname = i;
		BMT[i].rect = r;
		return(&BMT[i]);
	}
}

void bfree(b) Bitmap *b;
{	int i;
	if (b->jname > 0) fprintf(stderr,"BFREE: unknown Bitmap\n");
	else {
		sendCommand(CCBFREE);
		sendInt(b->jname);
		b->jname = -1;
		i = BMT - b;
		if (avail>i) avail = i;
	}
}