ùúùú  “…  ˆÖ                                	incdir	include:
	include libraries/gadtools.i
	include libraries/gadutil.i
	include	libraries/gadutil_lib.i
	include	LVOs.i
	include	gadutil_20to30comp.i

TESTPROG:	equ	2

start:
	move.l	4.w,a6
	lea.l	libptrs(pc),a2		; Get pointer to libraries
	move.w	(a2)+,d2		; Get number of libraries to open
.openlib:
	moveq.l	#0,d0			; Clear version
	move.w	(a2)+,d0		;  and get version number
	move.l	(a2),a1			; Get pointer to libname
	CallLib	OpenLibrary		; Try to open the library
	move.l	d0,(a2)+		; Save base address
	dbeq	d2,.openlib		; Continue until done or error
	beq.s	.closelibs

	bsr.w	TestProgram
 
.closelibs:
	move.l	_AbsExecBase.w,a6
	lea.l	libptrs(pc),a2		; Get pointer to libraries
	move.w	(a2)+,d2		; Get number of libraries to close
.closelib:
	tst.w	(a2)+			; Skip version number
	move.l	(a2)+,d0		; Get base address
	beq.s	.notopen		; Library not opened
	move.l	d0,a1
	CallLib	CloseLibrary		; Close if open
	dbra	d2,.closelib
.notopen:
	moveq.l	#0,d0	
	rts

libptrs:	dc.w	7-1
		dc.w	37
intuibase:	dc.l	intuiname
		dc.w	37
gfxbase:	dc.l	gfxname
		dc.w	37
utilitybase:	dc.l	utilityname
		dc.w	37
gtoolsbase:	dc.l	gtoolsname
		dc.w	37
localebase:	dc.l	localename
		dc.w	37
dosbase:	dc.l	dosname
		dc.w	0
gadutilbase:	dc.l	gadutilname


intuiname:	dc.b	"intuition.library",0
gfxname:	dc.b	"graphics.library",0
utilityname:	dc.b	"utility.library",0
gtoolsname:	dc.b	"gadtools.library",0
localename:	dc.b	"locale.library",0
dosname:	dc.b	"dos.library",0
gadutilname:	dc.b	'gadutil.library',0


	even

TestProgram:
	movem.l	d0-a6,-(sp)
	move.l	intuibase(pc),a6
	suba.l	a0,a0
	CallLib	LockPubScreen
	move.l	d0,screen
	beq.w	.noscreen

	lea.l	glist(pc),a0		; Gadget list pointer to A0
	lea.l	gadgets(pc),a1		; LayoutGadget structures
	move.l	d0,a2			; Screen pointer to A2
	lea.l	LayoutTags(pc),a3	; LayoutGadgets tags

	move.l	sc_Font(a2),textattr
	move.l	gadutilbase(pc),a6
	CallLib	GU_LayoutGadgetsA
	move.l	a0,d7
	beq.w	.unlocksc

;	ILLEGAL

	suba.l	a0,a0
	lea	window_tags(pc),a1
	move.l	farright(pc),d0
	add.l	#LEFT_OFFSET,d0
	move.l	d0,InnerWidth(a1)

	move.l	farbottom(pc),d0
	add.l	#TOP_OFFSET,d0
	move.l	d0,InnerHeight(a1)
	
	move.l	screen(pc),a3
	move.l	sc_Font(a3),a3
	move.w	ta_YSize(a3),d0
	addq.l	#3,d0
	move.l	d0,WinTop(a1)

	move.l	intuibase(pc),a6
	CallLib	OpenWindowTagList

	move.l	d0,d6
	beq.b	.NoWin

	move.l	d0,a0
	suba.l  a1,a1
	move.l  gtoolsbase(pc),a6
	CallLib GT_RefreshWindow

.Loop:
	move.l  d6,a0
	move.l  86(a0),a0
	move.l  4.w,a6

	CallLib WaitPort
	move.l  d6,a0
	move.l  86(a0),a0

;	move.l  gtoolsbase(pc),a6
;	CallLib GT_GetIMsg

	move.l	gadutilbase(pc),a6
	CallLib	GU_GetIMsg

	move.l  d0,a1

	move.l  20(a1),d3
	move.l	28(a1),a5
	move.l	im_MouseX(a1),MouseXY
	
	move.l  gtoolsbase(pc),a6	; Ta bort den här raden för en lustig
					; effekt..
	CallLib GT_ReplyIMsg

	cmp.l	#IDCMP_GADGETUP,d3
	beq	.GadgetUp
	cmp.l	#IDCMP_MOUSEMOVE,d3
	beq	.MovedMouse

	cmp.l   #IDCMP_CLOSEWINDOW,d3
	bne.b	.Loop

	move.l	intuibase(pc),a6
	move.l	d6,a0
	CallLib	CloseWindow
.NoWin:
	move.l	d7,a0
	move.l	gadutilbase(pc),a6
	CallLib	GU_FreeLayoutGadgets
.unlocksc:
	suba.l	a0,a0			; Screen name
	move.l	screen(pc),a1		; Screen pointer
	move.l	intuibase(pc),a6
	CallLib	UnlockPubScreen
.noscreen:
	movem.l	(sp)+,d0-a6
	rts	

.MovedMouse:
	move.l	gnag14(pc),a0
	move.l	MouseXY(pc),d0
	CallLib	GU_CoordsInGadBox,gadutilbase(pc)
	beq	.End
	bchg	#1,$bfe001

 if TESTPROG=2
	lea.l	setimagetags(pc),a2	; Tags
	moveq.l	#0,d0
	move.w	imagenum(pc),d0		; Get current image number
	addq.w	#1,d0
	divu	#2,d0			; Divide by 2
	swap	d0			; Use remainder
	move.w	d0,imagenum		; Save new number
	lsl.w	#2,d0			; Multiply by 4 to get offset
	lea.l	imagelist(pc),a1
	move.l	(a1,d0.w),4(a2)		; Get image to use

	move.l	d7,d0			; PrivateInfo
	move.l	gnag10(pc),a0		; Gadget pointer
	move.l	d6,a1			; Window pointer
;	CallLib	GU_SetGUGadAttrsA
 endif
	bra.s	.End
	
.GadgetUp:
	cmp.w	#GAD_BUTTON1,$26(a5)
	bne	.next

.enlabel:
	move.l	d6,a0			; Window
	move.l	gadutilbase(pc),a6
	CallLib	GU_BlockInput

	move.l	dosbase,a6
	move.l	#50,d1			; Delay 1 second
	CallLib	Delay

	move.l	d6,a0			; Window
	move.l	gadutilbase(pc),a6
	CallLib	GU_FreeInput
	bra.w	.Loop

.next:
	cmp.w	#GAD_DRAWER,$26(a5)
 if TESTPROG=2
	bne.s	.next2
	bchg	#1,$bfe001
	bra	.Loop
.next2:
	cmp.w	#GAD_BUTTON2,$26(a5)
 endif
	bne.s	.End

 if TESTPROG=2
	move.l	d6,a0			; Window
	move.l	gadutilbase(pc),a6
	CallLib	GU_BlockInput

	bchg	#1,$bfe001
	moveq.l	#100,d1			; Delay 2 seconds
	CallLib	Delay,dosbase(pc)
	bchg	#1,$bfe001

	move.l	d6,a0			; Window
	move.l	gadutilbase(pc),a6
	CallLib	GU_FreeInput
 else
 	bchg	#1,$bfe001
 endif
 
.End:
	bra	.Loop



GAD_BUTTON1:	equ	0
GAD_BUTTON2:	equ	1
GAD_DRAWER:	equ	2
GAD_STRING:	equ	3
GAD_CHECKBOX:	equ	4

LEFT_OFFSET:	equ	6
TOP_OFFSET:	equ	4

 if TESTPROG=2
imagelist:	dc.l	wdrawer_image,wdrawer_image2
imagenum:	dc.w	0

setimagetags:
	dc.l	GUIM_Image,	0,	TAG_DONE
 endif	

window_tags:
	dc.l	WA_Left,0
	dc.l	WA_Top
WinTop:	EQU	*-window_tags
	dc.l	0
	dc.l	WA_InnerWidth
InnerWidth:EQU	*-window_tags
	dc.l	0
	dc.l	WA_InnerHeight
InnerHeight:EQU	*-window_tags
	dc.l	0
	dc.l	WA_IDCMP,BUTTONIDCMP!STRINGIDCMP!IDCMP_REFRESHWINDOW!IDCMP_CLOSEWINDOW!IDCMP_GADGETUP!IDCMP_VANILLAKEY!IDCMP_RAWKEY!IDCMP_MOUSEMOVE
	dc.l	WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_CLOSEGADGET!WFLG_ACTIVATE!WFLG_SMART_REFRESH!WFLG_REPORTMOUSE ;!WFLG_GIMMEZEROZERO
	dc.l	WA_Gadgets
glist:		dc.l	0
	dc.l	WA_Title,WinTitle
	dc.l	TAG_DONE

WinTitle:	dc.b	"Kalle Ankas Fönster",0

button1_layout_tags:
	dc.l	GU_GadgetKind,	BUTTON_KIND
	dc.l	GU_GadgetText,	Butt1Txt
	dc.l	GU_Left,	LEFT_OFFSET
	dc.l	GU_Top,		TOP_OFFSET
	dc.l	GU_AutoHeight,	4
	dc.l	GU_DupeWidth,	GAD_BUTTON2
	dc.l	GU_Flags,	PLACETEXT_IN
	dc.l	GU_LabelHotkey,	TRUE
	dc.l	TAG_DONE

button1_gadtools_tags:
	dc.l	GT_Underscore,	'_'
	dc.l	TAG_DONE

button2_layout_tags:
	dc.l	GU_GadgetKind,	BUTTON_KIND
	dc.l	GU_GadgetText,	Butt2Txt
	dc.l	GU_AutoWidth,	10
	dc.l	GU_AutoHeight,	4
	dc.l	GU_TopRel,	GAD_BUTTON1
	dc.l	GU_AddTop,	INTERHEIGHT+100
	dc.l	GU_LabelHotkey,	TRUE
	dc.l	TAG_DONE
	
button2_gadtools_tags:
	dc.l	GT_Underscore,	'_'
	dc.l	TAG_DONE

drawer_layout_tags:
	dc.l	GU_GadgetKind,	DRAWER_KIND
	dc.l	GU_GadgetText,	_Filename.MSG
	dc.l	GU_Top,		4
	dc.l	GU_LeftRel,	GAD_BUTTON1
	dc.l	GU_AdjustLeft,	INTERWIDTH*2
	dc.l	GU_Width,	20
	dc.l	GU_AutoHeight,	4
	dc.l	GU_Flags,	PLACETEXT_LEFT
	dc.l	GU_Hotkey,	'f'
	dc.l	GU_HotkeyCase,	TRUE
	dc.l	TAG_DONE

string_layout_tags:
	dc.l	GU_GadgetKind,	STRING_KIND
	dc.l	GU_GadgetText,	NULL
	dc.l	GU_Width,	100
	dc.l	GU_LeftRel,	GAD_DRAWER
	dc.l	GU_Hotkey,	'F'
	dc.l	GU_HotkeyCase,	TRUE
	dc.l	TAG_DONE

string_gadtools_tags:
	dc.l	GTST_MaxChars,	100
	dc.l	GTST_String,	Test_Str
	dc.l	GT_Underscore,	'_'
	dc.l	TAG_DONE

checkbox_layout_tags:
	dc.l	GU_GadgetKind,	CHECKBOX_KIND
	dc.l	GU_GadgetText,	Checkbox.MSG
	dc.l	GU_Width,	26
	dc.l	GU_AutoHeight,	1
	dc.l	GU_TopRel,	GAD_DRAWER
	dc.l	GU_AddTop,	INTERHEIGHT
	dc.l	GU_AlignRight,	GAD_STRING
	dc.l	GU_Flags,	PLACETEXT_LEFT
	dc.l	GU_LabelHotkey,	TRUE
	dc.l	TAG_DONE

checkbox_gadtools_tags:
	dc.l	GTCB_Checked,TRUE
	dc.l	GTCB_Scaled,TRUE
	dc.l	GT_Underscore,'_'
	dc.l	TAG_DONE


kalle_layout_tags:
	dc.l	GU_Flags,	PLACETEXT_IN
	dc.l	GU_GadgetText,	kalletext
	dc.l	GU_GadgetKind,	BUTTON_KIND
	dc.l	GU_TopRel,	10
	dc.l	GU_AlignBottom,	GAD_BUTTON2
	dc.l	GU_AlignRight,	10
	dc.l	GU_LeftRel,	GAD_BUTTON2
	dc.l	TAG_DONE

sune_layout_tags:
	dc.l	GU_AlignLeft,	GAD_BUTTON2
	dc.l	GU_TopRel,	GAD_BUTTON1
	dc.l	GU_RightRel,	10
	dc.l	GU_BottomRel,	GAD_BUTTON2
	dc.l	TAG_DONE

beda_layout_tags:
	dc.l	GU_LeftRel,	12
	dc.l	GU_AlignRight,	GAD_DRAWER
	dc.l	GU_AlignTop,	12
	dc.l	GU_BottomRel,	10
	dc.l	TAG_DONE

rune_layout_tags:
	dc.l	GU_AlignLeft,	GAD_CHECKBOX
	dc.l	GU_AlignRight,	GAD_CHECKBOX
	dc.l	GU_TopRel,	GAD_CHECKBOX
	dc.l	GU_AlignBottom,	11
	dc.l	GU_GadgetText,	olastext
	dc.l	GU_ToggleSelect,1
	dc.l	TAG_DONE

ola_layout_tags:
	dc.l	GU_GadgetText,	olastext
	dc.l	GU_MinWidth,	10
	dc.l	GU_MinHeight,	10
	dc.l	GU_MaxWidth,	500
	dc.l	GU_MaxHeight,	200
	dc.l	GU_GadgetKind,	IMAGE_KIND
	dc.l	GUIM_Image,	wdrawer_image

	dc.l	GU_ToggleSelect,1
;	dc.l	GUIM_SelectImg,	wdrawer_image2
 if TESTPROG=1
	dc.l	GUIM_BOOPSILook,TRUE
	dc.l	GU_Selected,	1
 endif
	dc.l	GU_Hotkey,	$50
	dc.l	GU_RawKey,	TRUE
	
	dc.l	GU_TopRel,	GAD_CHECKBOX
	dc.l	GU_BottomRel,	GAD_BUTTON2
	dc.l	GU_Width,	200

	dc.l	GU_LeftRel,	GAD_BUTTON2
	dc.l	GU_RightRel,	GAD_CHECKBOX

	dc.l	TAG_DONE


olastext:	dc.b	0;'Ga_ddgett:',0
kalletext:	dc.b	'Knapp',0
	even
gadgets:
	GADGET	GAD_BUTTON1, button1_layout_tags, button1_gadtools_tags, NULL
	GADGET	GAD_BUTTON2, button2_layout_tags, button2_gadtools_tags, NULL
	GADGET	GAD_DRAWER,  drawer_layout_tags,  NULL,			 NULL
	GADGET	GAD_STRING,  string_layout_tags,  string_gadtools_tags,	 NULL
	GADGET	GAD_CHECKBOX,checkbox_layout_tags,checkbox_gadtools_tags,NULL
	GADGET	10,          ola_layout_tags,     button2_gadtools_tags, 0
gnag10:	equ	*-4

	GADGET	11,kalle_layout_tags,0,0
	GADGET	12,sune_layout_tags,0,0
	GADGET	13,beda_layout_tags,0,0
	GADGET	14,rune_layout_tags,0,0
gnag14:	equ	*-4
	GADGET	-1,NULL,NULL,NULL


LayoutTags:
	dc.l	GU_RightExtreme,	farright
	dc.l	GU_LowerExtreme,	farbottom
ta	dc.l	GU_DefTextAttr,		0
	dc.l	TAG_DONE

textattr:	equ	ta+4	

screen:		dc.l	0
farright:	dc.l	0
farbottom:	dc.l	0
MouseXY:	dc.l	0

Butt1Txt:	dc.b	"Gnadget _1",0
Butt2Txt:	dc.b	"Gnadget _2",0
Checkbox.MSG:
	dc.b	'_Checkbox',0
_Filename.MSG:
	dc.b	'_Filename',0
Test_Str:
	dc.b	'Musse Pigg...',0
	even	


	SECTION	Chip_Data,DATA_C	; Graphics must be in chip memory

wdrawer_image:				; Image structure for drawer image
	dc.w	0,0,32,20,4		; Left, Top, Width, Height, Depth
	dc.l	wdrawer_data		; ImageData
	dc.b	%00000001,%00000000	; PlanePick, PlaneOnOff
	dc.l	0			; NextImage

wdrawer_data:				; Data for the drawer image
	dc.l	%00000000000000000000000000000000
	dc.l	%00000111111111111111111111100000
	dc.l	%00001111111111111111111111110000
	dc.l	%00011110000000111100000001111000
	dc.l	%00111100000000111100000000111100
	dc.l	%01111000000000111100000000011110
	dc.l	%00110000000000111100000000011000
	dc.l	%00010000000000111100000000010000
	dc.l	%00000000000000111100000000000000
	dc.l	%00000000000000111100000000000000
	dc.l	%00000000000011100111000000000000
	dc.l	%00000000000111000011100000000000
	dc.l	%00000000001111000011110000000000
	dc.l	%00000000011110000001111000000000
	dc.l	%00000000111100000000111100000000
	dc.l	%00000001111000000000011110000000
	dc.l	%00000011110000000000001111000000
	dc.l	%00000111111110000001111111100000
	dc.l	%00111111111111100111111111111100
	dc.l	%00000000000000000000000000000000



wdrawer_image2:
	dc.w	0,0,32,20,4		; Left, Top, Width, Height, Depth
	dc.l	oooo_data		; ImageData
	dc.b	%00000001,%00000000	; PlanePick, PlaneOnOff
	dc.l	NULL			; NextImage

oooo_data:
	dc.l	%00000000000000000000000000000000
	dc.l	%00111111111111100111111111111100
	dc.l	%00000111111110000001111111100000
	dc.l	%00000011110000000000001111000000
	dc.l	%00000001111000000000011110000000
	dc.l	%00000000111100000000111100000000
	dc.l	%00000000011110000001111000000000
	dc.l	%00000000001111000011110000000000
	dc.l	%00000000000111000011100000000000
	dc.l	%00000000000011100111000000000000
	dc.l	%00000000000000111100000000000000
	dc.l	%00000000000000111100000000000000
	dc.l	%00010000000000111100000000010000
	dc.l	%00110000000000111100000000011000
	dc.l	%01111000000000111100000000011110
	dc.l	%00111100000000111100000000111100
	dc.l	%00011110000000111100000001111000
	dc.l	%00001111111111111111111111110000
	dc.l	%00000111111111111111111111100000
	dc.l	%00000000000000000000000000000000
