; AGAiff
; Include > prefswindow.s

Gadget4		macro		; Gadget4 KIND,struct,tags
		moveq	#\1,d0
		lea	\2(pc),a1
		lea	\3(pc),a2
		bsr	mgsub4
		beq	pfnogadgets
		endm

OpenPrefsWindow
		tst.l	pfwindow-j(a5)
		bne.w	.already

		move.w	PREFS_font(pc),d0
		beq.s	.oki1
		move.w	#1,PREFS_font-j(a5)
.oki1
		lea	pfnewones(pc),a0
		move.w	DCbwl(pc),d0
		move.w	d0,(a0)+
		move.w	d0,pfgad1t+6-j(a5)

		move.w	PREFS_font(pc),d0
		move.w	d0,(a0)+
		move.w	d0,pfgad0t+14-j(a5)

		move.w	range_locked(pc),d0
		move.w	d0,(a0)+
		move.w	d0,pfgad3t+14-j(a5)

		move.w	promote_screen(pc),d0
		move.w	d0,(a0)+
		move.w	d0,pfgad4t+14-j(a5)

		move.w	noshow_global(pc),d0
		move.w	d0,(a0)+
		move.w	d0,pfgad5t+14-j(a5)

		move.w	range_mode(pc),d0
		move.w	d0,(a0)+
		move.w	d0,pfgad6t+14-j(a5)

		move.w	activate_window(pc),d0
		move.w	d0,(a0)+
		move.w	d0,pfgad7t+14-j(a5)

		move.w	save_close_pic(pc),d0
		move.w	d0,(a0)+
		move.w	d0,pfgad8t+14-j(a5)

		move.w	show_coords(pc),d0
		move.w	d0,(a0)+
		move.w	d0,pfgad9t+14-j(a5)

		move.w	cccolumnwidth(pc),d0
		addq.w	#8,d0
		move.w	d0,pfnewwindowtags+6-j(a5)
		move.w	gad1+6(pc),d0
		addq.w	#2,d0
		mulu.w	#10,d0
		addq.w	#6,d0
		move.w	d0,pfnewwindowtags+14-j(a5)

		move.l	gadbase-j(a5),a6
		move.l	wbscreen(pc),a0
		sub.l	a1,a1
		LIBCALL	GetVisualInfoA
		move.l	d0,pfvisualinfo-j(a5)
		lea	pfglistpointer-j(a5),a0
		LIBCALL	CreateContext
		move.l	d0,pfgad-j(a5)
		beq	pfnocontext

		move.w	wborderl(pc),d0
		addq.w	#4,d0
		move.w	wbordert(pc),d1
		addq.w	#2,d1
		move.w	cccolumnwidth(pc),d2
		lsr.w	#1,d2
		add.w	d2,d0
		move.w	cccycleheight(pc),d3
		movem.w	d0-d3,pfgad1-j(a5)

		add.w	d3,d1
		addq.w	#2,d1
		move.w	d2,d4
		move.w	d3,d2
		add.w	d2,d2
		movem.w	d0-d3,pfgad0-j(a5)

		add.w	d3,d1
		addq.w	#2,d1
		movem.w	d0-d3,pfgad3-j(a5)

		add.w	d3,d1
		addq.w	#2,d1
		movem.w	d0-d3,pfgad4-j(a5)

		add.w	d3,d1
		addq.w	#2,d1
		movem.w	d0-d3,pfgad5-j(a5)

		add.w	d3,d1
		addq.w	#2,d1
		movem.w	d0-d3,pfgad6-j(a5)

		add.w	d3,d1
		addq.w	#2,d1
		movem.w	d0-d3,pfgad7-j(a5)

		add.w	d3,d1
		addq.w	#2,d1
		movem.w	d0-d3,pfgad8-j(a5)

		add.w	d3,d1
		addq.w	#2,d1
		movem.w	d0-d3,pfgad9-j(a5)

		move.w	d4,d2
		add.w	d3,d1
		addq.w	#4,d1
		sub.w	d2,d0
		move.w	cccolumnwidth(pc),d2
		movem.w	d0-d3,pfgad2-j(a5)

		Gadget4	CHECKBOX_KIND,pfgad0,pfgad0t
		move.l	d0,pfcycle1-j(a5)
		Gadget4	CYCLE_KIND,pfgad1,pfgad1t
		move.l	d0,pfcycle2-j(a5)
		Gadget4	BUTTON_KIND,pfgad2,notagz
		Gadget4	CHECKBOX_KIND,pfgad3,pfgad3t
		move.l	d0,pfcheck1-j(a5)
		Gadget4	CHECKBOX_KIND,pfgad4,pfgad4t
		move.l	d0,pfcheck2-j(a5)
		Gadget4	CHECKBOX_KIND,pfgad5,pfgad5t
		move.l	d0,pfcheck3-j(a5)
		Gadget4	CHECKBOX_KIND,pfgad6,pfgad6t
		move.l	d0,pfcheck4-j(a5)
		Gadget4	CHECKBOX_KIND,pfgad7,pfgad7t
		move.l	d0,pfcheck5-j(a5)
		Gadget4	CHECKBOX_KIND,pfgad8,pfgad8t
		move.l	d0,pfcheck6-j(a5)
		Gadget4	CHECKBOX_KIND,pfgad9,pfgad9t
		move.l	d0,pfcheck7-j(a5)

		move.l	intbase(pc),a6
		lea	pfnewwindow(pc),a0
		move.l	pfglistpointer(pc),nw_FirstGadget(a0)
		move.l	wbscreen(pc),a1
		move.w	18(a1),(a0)
		move.w	16(a1),2(a0)
		move.w	pfnewwindowtags+6(pc),d0
		move.w	pfnewwindowtags+14(pc),d1
		lsr.w	#1,d0
		lsr.w	#1,d1
		sub.w	d0,(a0)
		bpl.s	.0
		clr.w	(a0)
.0		sub.w	d1,2(a0)
		bpl.s	.1
		clr.w	2(a0)
.1		lea	pfnewwindowtags(pc),a1
		move.l	wbscreen(pc),nw_Screen(a0)
		LIBCALL	OpenWindowTagList
		move.l	d0,pfwindow-j(a5)
		beq	pfnowindow

		move.l	d0,a0
		move.l	wd_UserPort(a0),a0
		move.l	a0,pfwindowport-j(a5)
		move.b	MP_SIGBIT(a0),Signal.prefswin

		move.l	gadbase(pc),a6
		move.l	pfwindow(pc),a0
		sub.l	a1,a1
		LIBCALL	GT_RefreshWindow
		rts

.already	move.l	intbase(pc),a6
		move.l	pfwindow(pc),a0
		LIBCALL	WindowToFront
		move.l	pfwindow(pc),a0
		LIBCALL	ActivateWindow
		rts

mgsub4		move.l	pfgad-j(a5),a0
		move.l	#textattr,12(a1)
		move.l	pfvisualinfo-j(a5),22(a1)
		move.l	gadbase(pc),a6
		LIBCALL	CreateGadgetA
		move.l	d0,pfgad-j(a5)
		rts

pfwindow	dc.l	0
pfwindowport	dc.l	0
pfvisualinfo	dc.l	0
pfglistpointer	dc.l	0
pfgad		dc.l	0
pfcycle1	dc.l	0
pfcycle2	dc.l	0
pfcheck1	dc.l	0
pfcheck2	dc.l	0
pfcheck3	dc.l	0
pfcheck4	dc.l	0
pfcheck5	dc.l	0
pfcheck6	dc.l	0
pfcheck7	dc.l	0

pfnewones	dc.w	0,0,0,0,0,0,0,0,0,0,0

ClosePrefsWindow
	tst.l	pfwindow-j(a5)
	beq.s	pfalready
	move.l	intbase(pc),a6
	move.l	pfwindow(pc),a0
	LIBCALL	CloseWindow
	clr.l	pfwindow-j(a5)
	st	Signal.prefswin-j(a5)
pfnogadgets
pfnowindow	move.l	gadbase-j(a5),a6
	move.l	pfglistpointer(pc),a0
	LIBCALL	FreeGadgets
pfnocontext	move.l	gadbase-j(a5),a6
	move.l	pfvisualinfo-j(a5),a0
	LIBCALL	FreeVisualInfo
pfalready	rts

pfnewwindow	dc.w	0,0,0,0,1
	dc.l	CYCLEIDCMP!$200!IDCMP_VANILLAKEY,$1100e
	dc.l	0,0,pfwindowname,0,0
	dc.w	0,0,-1,-1,15
pfnewwindowtags	dc.l	WA_InnerWidth,580
	dc.l	WA_InnerHeight,100
	dc.l	WA_AutoAdjust,1
	dc.l	TAG_DONE
pfwindowname	dc.b	"AGAiff Preferences",0
	even

pfgad0	dc.w	0,0,0,0
	dc.l	pfgad0text,0
	dc.w	0
	dc.l	0,0,0
pfgad0text	dc.b	"Use _Topaz/8",0
	even
pfgad0t	dc.l	GTCB_Scaled,1
	dc.l	GTCB_Checked,0
	dc.l	GT_Underscore,"____"
	dc.l	TAG_DONE

pfgad1	dc.w	0,0,0,0
	dc.l	pfgad1text,0
	dc.w	1
	dc.l	0,0,0
pfgad1text	dc.b	"_dc.X Size",0
	even
pfgad1t	dc.l	GTCY_Active,0
	dc.l	GTCY_Labels,pfgad1labels
	dc.l	GT_Underscore,"____"
	dc.l	TAG_DONE
pfgad1labels	dc.l	.1,.2,.3,0
.1	dc.b	"Byte",0
.2	dc.b	"Word",0
.3	dc.b	"Long",0
	even

pfgad2	dc.w	0,0,0,0
	dc.l	pfgad2text,0
	dc.w	2
	dc.l	0,0,0
pfgad2text	dc.b	"_Use",0
	even

pfgad3	dc.w	0,0,0,0
	dc.l	pfgad3text,0
	dc.w	3
	dc.l	0,0,0
pfgad3text	dc.b	"_Lock Range",0
	even
pfgad3t	dc.l	GTCB_Scaled,1
	dc.l	GTCB_Checked,0
	dc.l	GT_Underscore,"____"
	dc.l	TAG_DONE

pfgad4	dc.w	0,0,0,0
	dc.l	pfgad4text,0
	dc.w	4
	dc.l	0,0,0
pfgad4text	dc.b	"_ScreenPromotion",0
	even
pfgad4t	dc.l	GTCB_Scaled,1
	dc.l	GTCB_Checked,0
	dc.l	GT_Underscore,"____"
	dc.l	TAG_DONE

pfgad5	dc.w	0,0,0,0
	dc.l	pfgad5text,0
	dc.w	5
	dc.l	0,0,0
pfgad5text	dc.b	"_Picture NoShow",0
	even
pfgad5t	dc.l	GTCB_Scaled,1
	dc.l	GTCB_Checked,0
	dc.l	GT_Underscore,"____"
	dc.l	TAG_DONE

pfgad6	dc.w	0,0,0,0
	dc.l	pfgad6text,0
	dc.w	6
	dc.l	0,0,0
pfgad6text	dc.b	"_Range W/H",0
	even
pfgad6t	dc.l	GTCB_Scaled,1
	dc.l	GTCB_Checked,0
	dc.l	GT_Underscore,"____"
	dc.l	TAG_DONE

pfgad7	dc.w	0,0,0,0
	dc.l	pfgad7text,0
	dc.w	7
	dc.l	0,0,0
pfgad7text	dc.b	"_Activate Window",0
	even
pfgad7t	dc.l	GTCB_Scaled,1
	dc.l	GTCB_Checked,0
	dc.l	GT_Underscore,"____"
	dc.l	TAG_DONE

pfgad8	dc.w	0,0,0,0
	dc.l	pfgad8text,0
	dc.w	8
	dc.l	0,0,0
pfgad8text	dc.b	"Save=_ClosePic",0
	even
pfgad8t	dc.l	GTCB_Scaled,1
	dc.l	GTCB_Checked,0
	dc.l	GT_Underscore,"____"
	dc.l	TAG_DONE

pfgad9	dc.w	0,0,0,0
	dc.l	pfgad9text,0
	dc.w	9
	dc.l	0,0,0
pfgad9text	dc.b	"Show C_oords",0
	even
pfgad9t	dc.l	GTCB_Scaled,1
	dc.l	GTCB_Checked,0
	dc.l	GT_Underscore,"____"
	dc.l	TAG_DONE

EvalPrefsWindowMessage
		move.l	gadbase(pc),a6
		move.l	pfwindowport(pc),a0
		LIBCALL	GT_GetIMsg
		tst.l	d0
		bne.s	.1
		rts
.1		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
		LIBCALL	GT_ReplyIMsg
		tst.w	GUI_locknestcnt-j(a5)
		bne.s	.00001
		bsr	epfm1
.00001		tst.l	pfwindow-j(a5)
		bne.w	EvalPrefsWindowMessage
		rts

epfm1	cmp.l	#IDCMP_CLOSEWINDOW,d4
	beq	ClosePrefsWindow
	cmp.l	#IDCMP_GADGETUP,d4
	beq	.GADUP
	cmp.l	#IDCMP_VANILLAKEY,d4
	beq	.pfVanilla
	rts

.pfVanilla	lea	pfnewones(pc),a3
		lea	.tab(pc),a0
.loop		move.b	(a0),d0
		bmi.s	.ende
		cmp.b	d0,d5
		bne.s	.loopon
		lea	.tab(pc),a1
		add.w	2(a0),a1
		jmp	(a1)
.loopon		addq.l	#4,a0
		bra.s	.loop
.ende		rts
.tab		dc.b	"t",0
		dc.w	.topaz-.tab
		dc.b	"d",0
		dc.w	.dcsize-.tab
		dc.b	"l",0
		dc.w	.lockr-.tab
		dc.b	27,0
		dc.w	ClosePrefsWindow-.tab
		dc.b	"s",0
		dc.w	.screenp-.tab
		dc.b	"p",0
		dc.w	.noshow-.tab
		dc.b	"u",0
		dc.w	.usegad-.tab
		dc.b	13,0
		dc.w	.usegad-.tab
		dc.b	"r",0
		dc.w	.range-.tab
		dc.b	"a",0
		dc.w	.actwin-.tab
		dc.b	"c",0
		dc.w	.saveclose-.tab
		dc.b	"o",0
		dc.w	.showcoords-.tab
		dc.b	-1

.topaz	move.l	pfcycle1(pc),a0
	lea	2(a3),a1
	bra	DoCheckInc

.dcsize	move.l	pfcycle2(pc),a0
	lea	(a3),a1
	moveq	#3,d0
	bra	DoCycInc2

.lockr	move.l	pfcheck1(pc),a0
	lea	4(a3),a1
	bsr	DoCheckInc
	movem.w	save.range(pc),d0-d3
	movem.w	d0-d3,save.rangelock
	rts

.screenp move.l	pfcheck2(pc),a0
	lea	6(a3),a1
	bsr	DoCheckInc
	move.l	load.modeid(pc),d0
	and.l	#MONITOR_ID_MASK,d0
	move.l	d0,promote_monitor-j(a5)
	rts

.noshow	move.l	pfcheck3(pc),a0
	lea	8(a3),a1
	bra	DoCheckInc

.range	move.l	pfcheck4(pc),a0
	lea	10(a3),a1
	bra	DoCheckInc

.actwin	move.l	pfcheck5(pc),a0
	lea	12(a3),a1
	bra	DoCheckInc

.saveclose	move.l	pfcheck6(pc),a0
	lea	14(a3),a1
	bra	DoCheckInc

.showcoords	move.l	pfcheck7(pc),a0
	lea	16(a3),a1
	bra	DoCheckInc

.not	rts

.GADUP		lea	pfnewones(pc),a3
		move.w	38(a4),d0
		lea	.gaduptab(pc),a0
		add.w	(a0,d0.w*2),a0
		jmp	(a0)
.gaduptab	dc.w	.topazgad-.gaduptab
		dc.w	.dcgad-.gaduptab
		dc.w	.usegad-.gaduptab
		dc.w	.lockrangegad-.gaduptab
		dc.w	.promogad-.gaduptab
		dc.w	.noshowgad-.gaduptab
		dc.w	.rangegad-.gaduptab
		dc.w	.actwingad-.gaduptab
		dc.w	.saveclosegad-.gaduptab
		dc.w	.showcoordsgad-.gaduptab

.topazgad	move.w	d5,2(a3)
		rts

.dcgad		move.w	d5,(a3)
		rts

.usegad		bsr	ClosePrefsWindow
		move.w	(a3),DCbwl-j(a5)
		move.w	2(a3),d0
		cmp.w	PREFS_font(pc),d0
		beq.s	.0
		move.w	d0,PREFS_font-j(a5)
		movem.l	a0-a6/d0-d7,-(sp)
		bsr	HideWindow
		bsr	ShowWindow
		movem.l	(sp)+,a0-a6/d0-d7
.0		move.w	4(a3),range_locked-j(a5)
		move.w	6(a3),promote_screen-j(a5)
		move.w	10(a3),range_mode-j(a5)
		move.w	12(a3),activate_window-j(a5)
		move.w	14(a3),save_close_pic-j(a5)
		move.w	16(a3),show_coords-j(a5)
		move.w	8(a3),noshow_global-j(a5)
		beq.s	.1
		bsr	ClosePic
		bra.s	.2
.1		tst.l	showscreen-j(a5)
		bne.s	.2
		bsr	OpenPic
.2		bsr	UpdateRangeGadgets
		rts

.lockrangegad	bchg	#0,5(a3)
		movem.w	save.range(pc),d0-d3
		movem.w	d0-d3,save.rangelock
		rts

.promogad	bchg	#0,7(a3)
		move.l	load.modeid(pc),d0
		and.l	#MONITOR_ID_MASK,d0
		move.l	d0,promote_monitor-j(a5)
		rts

.noshowgad	bchg	#0,9(a3)
		rts

.rangegad	bchg	#0,11(a3)
		rts

.actwingad	bchg	#0,13(a3)
		rts

.saveclosegad	bchg	#0,15(a3)
		rts

.showcoordsgad	bchg	#0,17(a3)
		rts

DoCheckInc	bchg	#0,1(a1)
		lea	.sgt(pc),a3
		move.w	(a1),6(a3)
		move.l	pfwindow(pc),a1
		sub.l	a2,a2
		move.l	gadbase(pc),a6
		LIBCALL	GT_SetGadgetAttrsA
		rts
.sgt		dc.l	GTCB_Checked,0
		dc.l	TAG_DONE

DoCycInc2	addq.w	#1,(a1)
		cmp.w	(a1),d0
		bne.s	.ok1
		clr.w	(a1)
.ok1		lea	.sgt(pc),a3
		move.w	(a1),6(a3)
		move.l	pfwindow(pc),a1
		sub.l	a2,a2
		move.l	gadbase(pc),a6
		LIBCALL	GT_SetGadgetAttrsA
		rts
.sgt		dc.l	GTCY_Active,0
		dc.l	TAG_DONE
