ùúùú  Ë  ƒ                                	incdir	include:
	include	exec/types.i
	include libraries/gadtools.i
	include libraries/gadutil.i
	include	libraries/gadutil_lib.i
	include	LVOs.i
	include	gadutil_20to30comp.i

TESTPROG:	equ	2		; Change to 2 for another test program

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

	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	gadutilbase(pc),a6
	CallLib	GU_GetIMsg

	move.l  d0,a1

	move.l  20(a1),d3
	move.l	28(a1),a5

	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_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	


.GadgetUp:

	cmp.w	#GAD_BUTTON1,$26(a5)
	bne	.End

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

	move.l	dosbase,a6
	move.l	#100,d1			; Delay 2 secs
	CallLib	Delay

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

.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



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
	dc.l	WA_Flags,WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_CLOSEGADGET!WFLG_ACTIVATE!WFLG_SMART_REFRESH;!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
 if TESTPROG=1
	dc.l	GU_GadgetText,	_Filename.MSG
 else
 	dc.l	GU_GadgetText,	0
 endif
 	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
 if TESTPROG=1
	dc.l	GU_Flags,	PLACETEXT_LEFT
 else
 	dc.l	GU_Flags,	PLACETEXT_IN
 endif
 	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	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	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	GUIM_SelectImg,	wdrawer_image2
	dc.l	GU_ToggleSelect,1
	dc.l	GU_Selected,	1

	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
 if TESTPROG=1
	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

	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
 endif
	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

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
