IMPORT struct RastPort rp;

Point OldFrame[9];
Point NewFrame[9];
LONG OFType = 0;
UWORD Ptrn;

STATIC VOID MultiDraw( struct RastPort *rp, LONG num, Point *xy)
{
	REGISTER LONG i = 0;
	REGISTER Point *coord = xy;

	while (i < num)
	{
		Move(rp, (LONG) coord->x, (LONG) coord->y);
		coord++;
		Draw(rp, (LONG) coord->x, (LONG) coord->y);
		i++;
	}
}

VOID crawl_frame( LONG dir)
{
	REGISTER UWORD temp = Ptrn;

	if (dir)
	{
		Ptrn = ((Ptrn << 1) & 0xfffe) | ((Ptrn & 0x8000) >> 15);
	}
	else
	{
		Ptrn = ((Ptrn >> 1) & 0x7fff) | ((Ptrn & 1) << 15);
	}
	temp ^= Ptrn;
	SetDrPt(&rp, temp);
	MultiDraw(&rp, OFType, &OldFrame[0]);
	SetDrPt(&rp, Ptrn);
}

VOID erase_frame( void)
{
	if (OFType)
	{
		MultiDraw(&rp, OFType, &OldFrame[0]);
		OFType = 0;
	}
}

VOID draw_frame( LONG ft)
{
	REGISTER LONG i;

	/* Remove old frame */
	WaitTOF();
	erase_frame();
	/* Draw the new frame */
	SetDrPt(&rp, Ptrn);
	MultiDraw(&rp, ft, &NewFrame[0]);
	/* save the frame for erasing later */
	for (i = 0; i <= ft; i++)
	{
		OldFrame[i].x = NewFrame[i].x;
		OldFrame[i].y = NewFrame[i].y;
	}
	OFType = ft;
}
