ùúùú                                        TestProgram:
	movem.l	d0-a6,-(sp)

	moveq.l	#0,d0
	lea.l	catalogname(pc),a0
	move.l	GUtilBase(pc),a6
	CallLib	GU_OpenCatalog
	move.l	d0,catalog

	move.l	IntuiBase(pc),a6	; Lock the default public screen
	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	; Use screen font for gadget labels
	move.l	GUtilBase(pc),a6
	CallLib	GU_LayoutGadgetsA	; Create all gadgets
	move.l	a0,d7			; D7 = PrivateInfo
	beq.w	.unlocksc

	suba.l	a0,a0			; No NewWindow structure
	lea.l	window_tags(pc),a1	; Get pointer to tag list

	move.l	farright(pc),d0		; InnerWidth = LEFT_OFFSET + farright
	add.l	#LEFT_OFFSET,d0
	add.l	#100,d0
	move.l	d0,InnerWidth(a1)

	move.l	farbottom(pc),d0	; InnerHeight = TOP_OFFSET + farbottom
	add.l	#TOP_OFFSET,d0
	move.l	d0,InnerHeight(a1)
	
	move.l	screen(pc),a3		; Window Y-pos = Font height + 3
	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	; Open the window
	CallLib	OpenWindowTagList
	move.l	d0,d6			; D6 = Window pointer
	beq.w	.NoWin

	move.l	d0,a0			; Refresh all gadgets in the window
	suba.l  a1,a1
	CallLib GU_RefreshWindow,GUtilBase(pc)

	lea.l	MyNewMenu(pc),a0	; Create menu structure
	move.l	d7,a1
	suba.l	a2,a2			; Tags for CreateMenusA
	lea.l	layoutmenutags(pc),a3	; Tags for LayoutMenusA
	move.l	GUtilBase(pc),a6
	CallLib	GU_CreateLocMenuA
	move.l	d0,MenuStrip
	beq.s	.closewin

	move.l	IntuiBase(pc),a6
	move.l	d6,a0
	move.l	MenuStrip(pc),a1
	CallLib	SetMenuStrip
	tst.l	d0
	beq.s	.freemenus
	
.WaitMsg:
	move.l  d6,a0			; Window pointer
	move.l  wd_UserPort(a0),a0	; Get UserPort
	CallLib WaitPort,_AbsExecBase.w	; Wait for a message

.GetMsg:
	move.l  d6,a0			; Window pointer
	move.l  wd_UserPort(a0),a0	; Get UserPort
	move.l	GUtilBase(pc),a6	; Get the message and process all
	CallLib	GU_GetIMsg		;  hotkeys attached to the gadgets
	beq.s	.WaitMsg		; No message - wait more

	move.l  d0,a1
	move.l  im_Class(a1),d3		; Get type of message
	move.l	im_IAddress(a1),a5	; Get gadget pointer (if GADGETUP)

	CallLib GU_ReplyIMsg,GUtilBase(pc)	; Reply the message

	cmp.l	#IDCMP_GADGETUP,d3	; Gadget up ?
	beq.b	.GadgetUp		; Check all gadgets

	cmp.l   #IDCMP_CLOSEWINDOW,d3	; Close gaget ?
	bne.b	.GetMsg			; Get next message
.freemenus:
	move.l	MenuStrip,a0
	CallLib	GU_FreeMenus,GUtilBase(pc)
.closewin:
	move.l	IntuiBase(pc),a6	; Close the window
	move.l	d6,a0
	CallLib	CloseWindow
.NoWin:
	move.l	d7,a0			; Free memory used for gadgets
	move.l	GUtilBase(pc),a6
	CallLib	GU_FreeLayoutGadgets
.unlocksc:
	suba.l	a0,a0			; Unlock the public screen
	move.l	screen(pc),a1
	move.l	IntuiBase(pc),a6
	CallLib	UnlockPubScreen
.noscreen:
	move.l	GUtilBase(pc),a6
	move.l	catalog(pc),a0
	CallLib	GU_CloseCatalog
	movem.l	(sp)+,d0-a6
	rts	

.GadgetUp:
	cmp.w	#GAD_BUTTON1,gg_GadgetID(a5)	; BUTTON1 ?
	beq.s	.isgad
	cmp.w	#10,gg_GadgetID(a5)		; Gadget 10 (the big gnagget)
	beq.s	.isgad
	cmp.w	#GAD_DRAWER,gg_GadgetID(a5)	; Drawer gadget ?
	bne.b	.checkgad2
.isgad:
	move.l	GUtilBase(pc),a6	; Block all input to the window
	move.l	d6,a0			; Get window pointer
	CallLib	GU_BlockInput

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

	move.l	GUtilBase(pc),a6	; Remove the invisible requester
	move.l	d6,a0			; Get window pointer
	CallLib	GU_FreeInput
	bra.s	.End
.checkgad2:
	cmp.w	#GAD_BUTTON2,gg_GadgetID(a5)	; BUTTON2 ?
	bne.s	.End
	lea.l	gadgets(pc),a0

	moveq.l	#16,d0			; Find gadget structure for MX gadget
	move.l	GUtilBase(pc),a6
	CallLib	GU_GetGadgetPtr	
	beq.s	.End
	
	move.l	d0,a0			; Gadget to change
	move.l	d6,a1			; Window pointer
	suba.l	a2,a2			; Requester
	lea.l	act(pc),a3		; Taglist
	CallLib	GU_SetGadgetAttrsA
.End:
	bra.w	.GetMsg

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

GTOOLSIDCMP:	equ	BUTTONIDCMP!STRINGIDCMP!IDCMP_REFRESHWINDOW!IDCMP_MOUSEMOVE
TESTIDCMP:	equ	IDCMP_CLOSEWINDOW!IDCMP_VANILLAKEY!IDCMP_RAWKEY!IDCMP_GADGETDOWN
WINGADS:	equ	WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_CLOSEGADGET
WINFLAGS:	equ	WFLG_ACTIVATE!WFLG_SMART_REFRESH!WFLG_REPORTMOUSE

window_tags:	dc.l	WA_Left,	0,	WA_Top
WinTop:		EQU	*-window_tags
		dc.l	0,			WA_InnerWidth
InnerWidth:	EQU	*-window_tags
		dc.l	0,			WA_InnerHeight
InnerHeight:	EQU	*-window_tags
		dc.l	0
		dc.l	WA_IDCMP,		GTOOLSIDCMP!TESTIDCMP
		dc.l	WA_NewLookMenus,	TRUE
		dc.l	WA_Flags,		WINGADS!WINFLAGS 
		dc.l	WA_Gadgets,		0
glist:		equ	*-4
		dc.l	WA_Title,		WinTitle
emptytag:
		dc.l	TAG_DONE

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

layoutmenutags:	dc.l	GTMN_NewLookMenus,	TRUE,	TAG_DONE

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

button1_layout_tags:
		dc.l	GU_GadgetKind,	BUTTON_KIND
		dc.l	GU_LocaleText,	MSG_BUTTON1
		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

button2_layout_tags:
		dc.l	GU_GadgetKind,	BUTTON_KIND
		dc.l	GU_LocaleText,	MSG_BUTTON2
		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

drawer_layout_tags:
		dc.l	GU_GadgetKind,	DRAWER_KIND
		dc.l	GU_LocaleText,	MSG_DRAWER
		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	TAG_MORE,	std_gttags

checkbox_layout_tags:
		dc.l	GU_GadgetKind,	CHECKBOX_KIND
		dc.l	GU_LocaleText,	MSG_CHECKBOX
		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	TAG_MORE,	std_gttags

kalle_layout_tags:
		dc.l	GU_Flags,	PLACETEXT_IN
		dc.l	GU_LocaleText,	MSG_GNADGET
		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,	0
		dc.l	GU_ToggleSelect,1
		dc.l	TAG_DONE

ola_layout_tags:
		dc.l	GU_GadgetText,	0
		dc.l	GU_MinWidth,	10
		dc.l	GU_MinHeight,	10
		dc.l	GU_MaxWidth,	200
		dc.l	GU_MaxHeight,	100
		dc.l	GU_GadgetKind,	IMAGE_KIND

		dc.l	GUIM_BOOPSILook,TRUE
		dc.l	GUIM_Image,	wdrawer_image
;		dc.l	GUIM_ReadOnly,	TRUE
;		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	GU_Hotkey,	$50
		dc.l	GU_RawKey,	TRUE

		dc.l	TAG_DONE

cycle_layout_tags:
		dc.l	GU_GadgetText,	Drive_Str
		dc.l	GU_Flags,	PLACETEXT_LEFT
		dc.l	GU_GadgetKind,	CYCLE_KIND
		dc.l	GU_AlignLeft,	11,	GU_DupeHeight,	11
		dc.l	GU_DupeWidth,	11
		dc.l	GU_LabelHotkey,	TRUE
		dc.l	GU_TopRel,	11,	TAG_DONE

cycle_gt_tags:	dc.l	GT_Underscore,	'_',	GTCY_Labels,	CyLabels
		dc.l	TAG_DONE

CyLabels:	dc.l	Lab0,Lab1,Lab2,Lab3,Lab4,0

DriveMxGad:
	dc.l	GU_GadgetKind,	MX_KIND,	GU_GadgetText,	MxText
	dc.l	GU_LeftRel,	GAD_CHECKBOX,	GU_AlignTop,	GAD_CHECKBOX
	dc.l	GU_Width,	MX_WIDTH,	GU_Height,	MX_HEIGHT
	dc.l	GU_Flags,	PLACETEXT_RIGHT!NG_HIGHLABEL
	dc.l	GU_LabelHotkey,	TRUE
	dc.l	TAG_DONE
	
MXGadGTTags:
	dc.l	GTMX_Labels,	CyLabels,	LAYOUTA_Spacing,	2
act:	dc.l	GTMX_Active,	2,		TAG_DONE
activemx:	equ	act+4

gadgets:
	GADGET	GAD_BUTTON1, button1_layout_tags, std_gttags,		 NULL
	GADGET	GAD_BUTTON2, button2_layout_tags, std_gttags,		 NULL
	GADGET	GAD_DRAWER,  drawer_layout_tags,  std_gttags,		 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,     std_gttags,		 NULL

	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
	GADGET	15,cycle_layout_tags,cycle_gt_tags,0
	GADGET	16,DriveMxGad,MXGadGTTags,0
	GADGET	-1,NULL,NULL,NULL

LayoutTags:
	dc.l	GU_RightExtreme,	farright
	dc.l	GU_LowerExtreme,	farbottom
ta:	dc.l	GU_DefTextAttr,		0
cat:	dc.l	GU_Catalog,		0
	dc.l	GU_AppStrings,		AppStrings
	dc.l	TAG_DONE

textattr:	equ	ta+4	
catalog:	equ	cat+4

;------------------ Data for localizing of the program -----------------------

MSG_BUTTON1:	equ	0
MSG_BUTTON2:	equ	1
MSG_DRAWER:	equ	2
MSG_CHECKBOX:	equ	3
MSG_GNADGET:	equ	4
MNU_1_TITLE:	equ	100
MNI_1_IT1:	equ	101
MNI_1_IT2:	equ	102
MNI_1_IT3:	equ	103
MNS_1_IT3_1:	equ	104
MNS_1_IT3_2:	equ	105
MNI_1_IT4:	equ	106

AppStrings:
	dc.l	MSG_BUTTON1,	MSG_BUTTON1_STR
	dc.l	MSG_BUTTON2,	MSG_BUTTON2_STR
	dc.l	MSG_DRAWER,	MSG_DRAWER_STR
	dc.l	MSG_CHECKBOX,	MSG_CHECKBOX_STR
	dc.l	MSG_GNADGET,	MSG_GNADGET_STR
	dc.l	MNU_1_TITLE,	MNU_1_TITLE_STR
	dc.l	MNI_1_IT1,	MNI_1_IT1_STR
	dc.l	MNI_1_IT2,	MNI_1_IT2_STR
	dc.l	MNI_1_IT3,	MNI_1_IT3_STR
	dc.l	MNS_1_IT3_1,	MNS_1_IT3_1_STR
	dc.l	MNS_1_IT3_2,	MNS_1_IT3_2_STR
	dc.l	MNI_1_IT4,	MNI_1_IT4_STR

MSG_BUTTON1_STR:	dc.b	'Gnadget _1',0
MSG_BUTTON2_STR:	dc.b	'Gnadget _2',0
MSG_DRAWER_STR:		dc.b	'_FileName',0
MSG_CHECKBOX_STR:	dc.b	'Checkbox',0
MSG_GNADGET_STR:	dc.b	'Gnadget',0
MNU_1_TITLE_STR:	dc.b	' ',$00,'Project',0
MNI_1_IT1_STR:		dc.b	'O',$00,'Open...',0
MNI_1_IT2_STR:		dc.b	'S',$00,'Save',0
MNI_1_IT3_STR:		dc.b	' ',$00,'Print',0
MNS_1_IT3_1_STR:	dc.b	' ',$00,'Draft',0
MNS_1_IT3_2_STR:	dc.b	' ',$00,'NLQ',0
MNI_1_IT4_STR:		dc.b	'Q',$00,'Quit',0

catalogname:	dc.b	'internaltest.catalog',0

;------------------------ End of localizing datas ----------------------------
MxText:	dc.b	"_Handshaking",0
	even
;--------------------------------- Menus ----------------------------------

MyNewMenu:	
	LOCMENU	NM_TITLE, MNU_1_TITLE,	0,	0,	0	; | Project |
	LOCMENU	NM_ITEM,  MNI_1_IT1,	0,	0,	1	; Open [O]
	LOCMENU	NM_ITEM,  MNI_1_IT2,	0,	0,	2	; Save [S]
	LOCMENU	NM_ITEM,  NM_BARLABEL,	0,	0,	0	; -----------

	LOCMENU	NM_ITEM,  MNI_1_IT3,	0,	0,	0	; Print...
	LOCMENU	NM_SUB,	  MNS_1_IT3_1,	0,	0,	3	;       Draft
	LOCMENU	NM_SUB,	  MNS_1_IT3_2,	0,	0,	4	;       NLQ
	LOCMENU	NM_ITEM,  NM_BARLABEL,	0,	0,	0	; -----------
	LOCMENU	NM_ITEM,  MNI_1_IT4,	0,	0,	5	; Quit [Q]

	LOCMENU	NM_END,	  NULL,		0,	0,	0

;-----------------------------------------------------------------------------
screen:		dc.l	0
farright:	dc.l	0
farbottom:	dc.l	0
MenuStrip:	dc.l	0

Test_Str:	dc.b	'Musse Pigg...',0
Drive_Str:	dc.b	'_Drive:',0

Lab0:		dc.b	'DF0:',0
Lab1:		dc.b	'DF1:',0
Lab2:		dc.b	'DF2:',0
Lab3:		dc.b	'DF3:',0
Lab4:		dc.b	'DF4:',0

	even	

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

	SECTION	Chip_Data,DATA_C	; Graphics must be in chip memory
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
