#include <qd.h>
#include <win.h>
#include <mem.h>
#include <res.h>

pinpoint (r, in, out) rect *r; register point *in, *out;
{
	register long foo;

	foo = pinrect (r, in);
	out -> a.h = loword (foo);
	out -> a.v = hiword (foo);
}

rectcenter (r, p) register rect *r; register point *p;
{
	p -> a.h = (r -> a.left + r -> a.right) / 2;
	p -> a.v = (r -> a.top + r -> a.bottom) / 2;
}

quit ()
{
	exittoshell ();
}

randint (n) int n;
{
	return (random() & 0x7FFF) % n;
}

allocbitmap (b) register bitmap *b;
{
	char *malloc ();

	b -> rowbytes = (b -> bounds.a.right - b -> bounds.a.left + 15) / 16 * 2;
	b -> baseaddr = (qdptr) malloc (b -> rowbytes *
		(b -> bounds.a.bottom - b -> bounds.a.top));
}

freebitmap (b) register bitmap *b;
{
	if (b -> baseaddr) {
		free (b -> baseaddr);
		b -> baseaddr = 0L;
	}
}

bitmap *getbitmap (name) char *name;
{
	register handle bhandle;
	register bitmap *b;

	bhandle = getnamedresource ("BTMP", name);
	if (!bhandle) 
		return 0L;
	hlock (bhandle);
	b = (bitmap *) (*bhandle);
	b -> baseaddr = (qdptr) (*bhandle + sizeof (bitmap));
	return b;
}

static grafptr portstack[8];
static int portnum = 0;

pushport (p) grafptr p;
{
	getport (portstack + portnum++);
	setport (p);
}

popport ()
{
	setport (portstack[--portnum]);
}
