; AGAiff
; > evalshowwindowmsg.s

EvalShowWindowMessage
		clr.w	sw_moved
.loop		move.l	gadbase(pc),a6
		move.l	showwindowport(pc),a0
		LIBCALL	GT_GetIMsg
		tst.l	d0
		beq	sw_lastmsg
		move.l	d0,a1
		move.l	$14(a1),d4	;Class
		move.w	$18(a1),d5	;Code
		move.w	$1a(a1),d6	;Qualifier
		move.l	$1c(a1),a4	;IAddress
		movem.w	$20(a1),d0/d1

		sub.w	showwindowpicy(pc),d1

		tst.w	d0
		bpl.s	.001
		moveq	#0,d0
.001		tst.w	d1
		bpl.s	.002
		moveq	#0,d1

.002		cmp.w	load.pagesizexorg(pc),d0
		bcs.s	.003
		move.w	load.pagesizexorg(pc),d0
		subq.w	#1,d0
.003		cmp.w	load.pagesize+2(pc),d1
		bcs.s	.004
		move.w	load.pagesize+2(pc),d1
		subq.w	#1,d1

.004		movem.w	d0/d1,sw_mousepos

		LIBCALL	GT_ReplyIMsg

		tst.w	GUI_locknestcnt-j(a5)
		bne.s	.0
		bsr.s	sw_eval
.0		bra.s	.loop

sw_mousepos	dc.l	0
sw_mousedown	dc.w	0	;0 = oben, 0xff00 = gedrückt
sw_moved	dc.w	0
sw_newrange	dc.l	0,0

sw_eval		cmp.l	#IDCMP_MOUSEBUTTONS,d4
		beq.s	sw_mousebuttons
		cmp.l	#IDCMP_MOUSEMOVE,d4
		beq	sw_mousemove
		cmp.l	#IDCMP_RAWKEY,d4
		beq	sw_rawkey
		cmp.l	#IDCMP_REFRESHWINDOW,d4
		beq	sw_refresh
		rts

sw_refresh	move.l	intbase(pc),a6
		move.l	showwindowa(pc),a0
		LIBCALL	BeginRefresh
		bsr	DrawRange
		bsr	BlitImageToScreen
		bsr	DrawRange
		move.l	intbase(pc),a6
		move.l	showwindowa(pc),a0
		moveq	#1,d0
		LIBCALL	EndRefresh
		rts

sw_mousebuttons	btst	#IEQUALIFIERB_RBUTTON,d6
		bne	WindowNachVorne
		btst	#IEQUALIFIERB_LEFTBUTTON,d6
		bne.s	.newrectangle
		beq.s	.endrectangle
		rts

.newrectangle	tst.w	sw_mousedown
		bne.s	.0
		st	sw_mousedown
		move.l	sw_mousepos(pc),d0
		move.l	d0,sw_newrange
		move.l	d0,sw_newrange+4
		st	sw_moved
.0		rts

.endrectangle	tst.w	sw_mousedown
		beq.s	.1
		clr.w	sw_mousedown
		movem.w	save.range(pc),d4-d7
		sub.w	d4,d6			* Single click -> Full range
		bne.s	.oki
		sub.w	d5,d7
		bne.s	.oki
		bsr	DrawRange
		moveq	#0,d4
		moveq	#0,d5
		move.w	load.pagesizexorg(pc),d6
		move.w	load.pagesize+2(pc),d7
		subq.w	#1,d6
		subq.w	#1,d7
		movem.w	d4-d7,save.range-j(a5)
		bsr	DrawRange
		bsr	DrawCoords
.oki		bsr	UpdateRangeGadgets
		clr.w	sw_moved
.1		rts

sw_mousemove	tst.w	sw_mousedown
		beq.s	.0
		move.l	sw_mousepos(pc),sw_newrange+4
		st	sw_moved
.0		rts


sw_lastmsg	tst.w	sw_moved
		beq.s	.0
		bsr	DrawRange
		movem.l	sw_newrange(pc),d0/d1
		movem.l	d0/d1,save.range
		bsr	DrawRange
.0		bsr	DrawCoords
		rts

sw_rawkey	cmp.w	#$0040,d5
		beq	ColorRequester
		cmp.w	#$0044,d5
		beq	WindowNachVorne
		cmp.w	#$004e,d5
		beq	HG_next
		rts

DrawRange	tst.l	showwindowa-j(a5)
		beq	.ende

		lea	save.range(pc),a3
		movem.w	(a3),d4-d7
		cmp.w	d4,d6
		bcc.s	.00
		exg	d4,d6
.00		cmp.w	d5,d7
		bcc.s	.01
		exg	d5,d7
.01		sub.w	d4,d6
		beq	.ende
		sub.w	d5,d7
		beq	.ende
		addq.w	#1,d6
		addq.w	#1,d7
		cmp.w	load.pagesizexorg(pc),d6
		bne.s	.draw
		cmp.w	load.pagesize+2(pc),d7
		beq	.ende

.draw		subq.w	#1,d6
		subq.w	#1,d7
		add.w	showwindowpicy(pc),d5

		move.l	gfxbase(pc),a6
		move.l	showwindowrastport(pc),a4
		move.l	a4,a1
		moveq	#RP_COMPLEMENT,d0
		LIBCALL	SetDrMd

		lea	_LVOMove(a6),a2
		lea	_LVODraw(a6),a3

		move.w	d4,d0	;oben
		move.w	d5,d1
		move.l	a4,a1
		jsr	(a2)
		move.w	d4,d0
		add.w	d6,d0
		subq.w	#1,d0
		move.w	d5,d1
		move.l	a4,a1
		jsr	(a3)

		move.w	d4,d0	;rechts
		add.w	d6,d0
		move.w	d5,d1
		move.l	a4,a1
		jsr	(a2)
		move.w	d4,d0
		add.w	d6,d0
		move.w	d5,d1
		add.w	d7,d1
		subq.w	#1,d1
		move.l	a4,a1
		jsr	(a3)

		move.w	d4,d0	;unten
		addq.w	#1,d0
		move.w	d5,d1
		add.w	d7,d1
		move.l	a4,a1
		jsr	(a2)
		move.w	d4,d0
		add.w	d6,d0
		move.w	d5,d1
		add.w	d7,d1
		move.l	a4,a1
		jsr	(a3)

		move.w	d4,d0	;links
		move.w	d5,d1
		addq.w	#1,d1
		move.l	a4,a1
		jsr	(a2)
		move.w	d4,d0
		move.w	d5,d1
		add.w	d7,d1
		move.l	a4,a1
		jsr	(a3)

.ende		rts

DrawCoords
		move.l	gfxbase(pc),a6
		move.l	coordsscreen(pc),d0
		beq.s	.ende
		move.l	d0,a4

		lea	swin_catext+2(pc),a0
		move.w	sw_mousepos(pc),d2
		bsr	bindec

		addq.l	#3,a0
		move.w	sw_mousepos+2(pc),d2
		bsr	bindec

		addq.l	#3,a0
		move.w	save.range+4(pc),d2
		sub.w	save.range(pc),d2
		bpl.s	.001
		neg.w	d2
.001		addq.w	#1,d2
		bsr	bindec

		addq.l	#3,a0
		move.w	save.range+6(pc),d2
		sub.w	save.range+2(pc),d2
		bpl.s	.002
		neg.w	d2
.002		addq.w	#1,d2
		bsr	bindec

		moveq	#0,d2
		addq.l	#3,a0
		lea	animlstruct(pc),a1
		tst.w	(a1)
		beq.s	.frameoki
		move.w	2(a1),d2
.frameoki	bsr	bindec

		lea	sc_RastPort(a4),a4
		moveq	#2,d0
		moveq	#8,d1
		move.l	a4,a1
		LIBCALL	Move
		move.l	a4,a1
		lea	swin_catext(pc),a0
		moveq	#swin_catextl,d0
		LIBCALL	Text
.ende		rts

swin_catext	dc.b	"X 0000 Y 0000 W 0000 H 0000 F 0000"
swin_catextl	equ	*-swin_catext
		even

bindec	; Zahl in d2 -> 4stelligeDEC nach (a0)+
		move.l	#1000,d1
		moveq	#3,d3
		bra.s	.2
.loop		divu	#10,d1
		swap	d2
.2		and.l	#$ffff,d2
		divu	d1,d2
		add.b	#"0",d2
		move.b	d2,(a0)+
		dbra	d3,.loop
		rts
