* ============================================================================ *
*	SectRect: Calculate the intersection of two rectangles
*
*	BOOL SectRect(struct IBox *a, struct IBox *b, struct IBox *result);
*                              a0              a1                   a2
* ============================================================================ *

			include		'intuition/intuition.i'

			SECTION		sectrect.asm,CODE

			xdef		_SectRect
_SectRect:			; (a0, a1, a2)

;	x1 = MAX(a->Left, b->Left);

			move.w		ibox_Left(a0),d0
			move.w		ibox_Left(a1),d1
			move.w		d0,ibox_Left(a2)
			cmp.w		d0,d1
			blt.s		1$
			move.w		d1,ibox_Left(a2)
1$

;	x2 = MIN(a->Left + a->Width, b->Left + b->Width) - x1;

			add.w		ibox_Width(a0),d0
			add.w		ibox_Width(a1),d1
			cmp.w		d0,d1
			bgt.s		2$
			move.w		d1,d0
2$			sub.w		ibox_Left(a2),d0
			bpl.s		20$
			moveq		#0,d0
20$			move.w		d0,ibox_Width(a2)

;	y1 = MAX(a->Top, b->Top);

			move.w		ibox_Top(a0),d0
			move.w		ibox_Top(a1),d1
			move.w		d0,ibox_Top(a2)
			cmp.w		d0,d1
			blt.s		3$
			move.w		d1,ibox_Top(a2)
3$
;	y2 = MIN(a->Top + a->Height, b->Top + b->Height) - y1;

			add.w		ibox_Height(a0),d0
			add.w		ibox_Height(a1),d1
			cmp.w		d0,d1
			bgt.s		4$
			move.w		d1,d0
4$			sub.w		ibox_Top(a2),d0
			bpl.s		40$
			moveq		#0,d0
40$			move.w		d0,ibox_Height(a2)

			beq.s		50$						; return TRUE if non-zero interior
			tst.w		ibox_Width(a2)
			beq.s		50$
			moveq		#1,d0
50$
			rts
