
; Storm C Compiler
; Sonne:Ablage/AND/Dev1.3/Extras/Development/Example_Code_v37/Libraries/GadTools/gadget2.c


	XREF	_StrToLong
	XREF	_exit
	XREF	_printf
	XREF	_strlen
	XREF	_FreeVisualInfo
	XREF	_GetVisualInfo
	XREF	_CreateContext
	XREF	_GT_EndRefresh
	XREF	_GT_BeginRefresh
	XREF	_GT_RefreshWindow
	XREF	_GT_ReplyIMsg
	XREF	_GT_GetIMsg
	XREF	_FreeGadgets
	XREF	_CreateGadget
	XREF	_OpenDiskFont
	XREF	_OpenWindowTags
	XREF	_UnlockPubScreen
	XREF	_LockPubScreen
	XREF	_AddGList
	XREF	_RefreshGList
	XREF	_CloseWindow
	XREF	_InitRastPort
	XREF	_CloseFont
	XREF	_OpenFont
	XREF	_SetFont
	XREF	_TextLength
	XREF	_OpenLibrary
	XREF	_CloseLibrary
	XREF	_Wait
	XREF	_SysBase

	SECTION ":0",CODE


;void main(argc, argv)
	XDEF	_main
_main
L92	EQU	-4
	link	a5,#L92
	movem.l	d2/a2,-(a7)
	movem.l	$8(a5),d2/a2
L70
;    if (argc == 2)
	cmp.l	#2,d2
	bne.b	L72
L71
;    
;	printf("Usage:\n\tgadget2\nor\n\tgadget2 fontname.font fontsize\n")
	move.l	#L63,-(a7)
	jsr	_printf
	addq.w	#4,a7
;	printf("Example:\n\tgadget2 courier.font 15\n");
	move.l	#L64,-(a7)
	jsr	_printf
	addq.w	#4,a7
;	bail_out(0);
	clr.l	-(a7)
	jsr	_bail_out
	addq.w	#4,a7
L72
;    if (!(GfxBase = (struct GfxBase *)
	pea	$24.w
	move.l	#L65,-(a7)
	jsr	_OpenLibrary
	addq.w	#$8,a7
	move.l	d0,_GfxBase
	tst.l	_GfxBase
	bne.b	L74
L73
;	bail_out(20);
	pea	$14.w
	jsr	_bail_out
	addq.w	#4,a7
L74
;    if (!(IntuitionBase = (struct IntuitionBase *)
	pea	$24.w
	move.l	#L66,-(a7)
	jsr	_OpenLibrary
	addq.w	#$8,a7
	move.l	d0,_IntuitionBase
	tst.l	_IntuitionBase
	bne.b	L76
L75
;	bail_out(20);
	pea	$14.w
	jsr	_bail_out
	addq.w	#4,a7
L76
;    if (!(GadToolsBase = OpenLibrary("gadtools.library", 36L)))
	pea	$24.w
	move.l	#L67,-(a7)
	jsr	_OpenLibrary
	addq.w	#$8,a7
	move.l	d0,_GadToolsBase
	tst.l	_GadToolsBase
	bne.b	L78
L77
;	bail_out(20);
	pea	$14.w
	jsr	_bail_out
	addq.w	#4,a7
L78
;    if (!(DiskfontBase = OpenLibrary("diskfont.library", 36L)))
	pea	$24.w
	move.l	#L68,-(a7)
	jsr	_OpenLibrary
	addq.w	#$8,a7
	move.l	d0,_DiskfontBase
	tst.l	_DiskfontBase
	bne.b	L80
L79
;	bail_out(20);
	pea	$14.w
	jsr	_bail_out
	addq.w	#4,a7
L80
;    if (!(mysc = LockPubScreen(NULL)))
	clr.l	-(a7)
	jsr	_LockPubScreen
	addq.w	#4,a7
	move.l	d0,_mysc
	tst.l	_mysc
	bne.b	L82
L81
;	bail_out(20);
	pea	$14.w
	jsr	_bail_out
	addq.w	#4,a7
L82
;    customtattr.ta_Style = 0;
	clr.b	_customtattr+6
;    customtattr.ta_Flags = 0;
	clr.b	_customtattr+7
;    if (argc < 3)
	cmp.l	#3,d2
	bge.b	L84
L83
;    
;	tattr = mysc->Font;
	move.l	_mysc,a0
	move.l	$28(a0),_tattr
	bra.b	L86
L84
;    
;	customtattr.ta_Name = argv[1];
	move.l	4(a2),_customtattr
;	StrToLong(argv[2], &longval);
	pea	-4(a5)
	move.l	$8(a2),-(a7)
	jsr	_StrToLong
	addq.w	#$8,a7
;	customtattr.ta_YSize = longval;
	move.w	-2(a5),_customtattr+4
;	tattr = &customtattr;
	move.l	#_customtattr,_tattr
;	if (!(customfont = OpenDiskFont(tattr)))
	move.l	_tattr,-(a7)
	jsr	_OpenDiskFont
	addq.w	#4,a7
	move.l	d0,_customfont
	tst.l	_customfont
	bne.b	L86
L85
;	
;	    printf("Could not open font %s %ld\n", customtattr.ta_Name
	move.w	_customtattr+4,d0
	and.l	#$FFFF,d0
	move.l	d0,-(a7)
	move.l	_customtattr,a0
	move.l	a0,-(a7)
	move.l	#L69,-(a7)
	jsr	_printf
	add.w	#$C,a7
;	    bail_out(20);
	pea	$14.w
	jsr	_bail_out
	addq.w	#4,a7
L86
;    win = initWindow(mysc, tattr);
	move.l	_tattr,-(a7)
	move.l	_mysc,-(a7)
	jsr	_initWindow
	addq.w	#$8,a7
	move.l	d0,_win
;    if (win)
	tst.l	_win
	beq.b	L90
L87
;    
;	while (!HandleEvent(win))
L88
	move.l	_win,-(a7)
	jsr	_HandleEvent
	addq.w	#4,a7
	tst.w	d0
	beq.b	L88
L89
;	bail_out(0);
	clr.l	-(a7)
	jsr	_bail_out
	addq.w	#4,a7
	bra.b	L91
L90
;	bail_out(20);
	pea	$14.w
	jsr	_bail_out
	addq.w	#4,a7
L91
	movem.l	(a7)+,d2/a2
	unlk	a5
	moveq	#0,d0
	rts

;struct Window *initWindow(screen, tattr)
	XDEF	_initWindow
_initWindow
L102	EQU	-6
	link	a5,#L102
	movem.l	d2/a2/a3/a6,-(a7)
	movem.l	$8(a5),a3/a6
L94
;    struct Window *win = NULL;
	sub.l	a2,a2
;    ok = ((vi = GetVisualInfo(screen,
	clr.l	-(a7)
	move.l	a3,-(a7)
	jsr	_GetVisualInfo
	addq.w	#$8,a7
	move.l	d0,_vi
	tst.l	_vi
	sne	d0
	and.l	#1,d0
	move.w	d0,d2
;    if (ok)
	beq.b	L96
L95
;    
;	ok = (CreateAllGadgets(&glist, vi, screen, tattr) != NULL);
	move.l	a6,-(a7)
	move.l	a3,-(a7)
	move.l	_vi,-(a7)
	move.l	#_glist,-(a7)
	jsr	_CreateAllGadgets
	add.w	#$10,a7
	tst.l	d0
	sne	d0
	and.l	#1,d0
	move.w	d0,d2
L96
;    if (ok)
	tst.w	d2
	beq	L99
L97
;    
;    if (!(win = OpenWindowTags(NULL,
	clr.l	-(a7)
	move.l	#L93,-(a7)
	move.l	#$8000006E,-(a7)
	pea	$32.w
	move.l	#$80000073,-(a7)
	pea	$32.w
	move.l	#$80000072,-(a7)
	pea	$244.w
	move.l	#$8000006A,-(a7)
	pea	1.w
	move.l	#$8000008C,-(a7)
	pea	1.w
	move.l	#$80000081,-(a7)
	pea	1.w
	move.l	#$80000084,-(a7)
	pea	1.w
	move.l	#$80000083,-(a7)
	pea	1.w
	move.l	#$80000082,-(a7)
	pea	1.w
	move.l	#$80000089,-(a7)
	move.l	a3,-(a7)
	move.l	#$80000079,-(a7)
	pea	1.w
	move.l	#$80000090,-(a7)
	moveq	#0,d0
	move.w	_WinHeight,d0
	move.l	d0,-(a7)
	move.l	#$80000067,-(a7)
	moveq	#0,d0
	move.w	_WinWidth,d0
	move.l	d0,-(a7)
	move.l	#$80000076,-(a7)
	clr.l	-(a7)
	jsr	_OpenWindowTags
	add.w	#$78,a7
	move.l	d0,a2
	cmp.w	#0,a2
	bne.b	L99
L98
;	bail_out(20);
	pea	$14.w
	jsr	_bail_out
	addq.w	#4,a7
L99
;    if (ok)
	tst.w	d2
	beq.b	L101
L100
;    
;	AddGList(win, glist, ((UWORD) -1), ((UWORD) -1), NULL);
	clr.l	-(a7)
	move.l	#$FFFF,-(a7)
	move.l	#$FFFF,-(a7)
	move.l	_glist,-(a7)
	move.l	a2,-(a7)
	jsr	_AddGList
	add.w	#$14,a7
;	RefreshGList(glist, win, NULL, ((UWORD) -1));
	move.l	#$FFFF,-(a7)
	clr.l	-(a7)
	move.l	a2,-(a7)
	move.l	_glist,-(a7)
	jsr	_RefreshGList
	add.w	#$10,a7
;	GT_RefreshWindow(win, NULL);
	clr.l	-(a7)
	move.l	a2,-(a7)
	jsr	_GT_RefreshWindow
	addq.w	#$8,a7
;	return(win);
	move.l	a2,d0
	movem.l	(a7)+,d2/a2/a3/a6
	unlk	a5
	rts
L101
;    
;	uninitWindow(win);
	move.l	a2,-(a7)
	jsr	_uninitWindow
	addq.w	#4,a7
;	win = NULL;
;	return(NULL);
	moveq	#0,d0
	movem.l	(a7)+,d2/a2/a3/a6
	unlk	a5
	rts

;void uninitWindow(win)
	XDEF	_uninitWindow
_uninitWindow
L110	EQU	0
	link	a5,#L110
	move.l	$8(a5),a0
L103
;    if (win)
	cmp.w	#0,a0
	beq.b	L105
L104
;    
;	CloseWindow(win);
	move.l	a0,-(a7)
	jsr	_CloseWindow
	addq.w	#4,a7
L105
;    if (glist)
	tst.l	_glist
	beq.b	L107
L106
;    
;	FreeGadgets(glist);
	move.l	_glist,-(a7)
	jsr	_FreeGadgets
	addq.w	#4,a7
;	glist = NULL;
	clr.l	_glist
L107
;    if (vi)
	tst.l	_vi
	beq.b	L109
L108
;    
;	FreeVisualInfo(vi);
	move.l	_vi,-(a7)
	jsr	_FreeVisualInfo
	addq.w	#4,a7
;	vi = NULL;
	clr.l	_vi
L109
	unlk	a5
	rts

;void bail_out(code)
	XDEF	_bail_out
_bail_out
L124	EQU	0
	link	a5,#L124
	move.l	d2,-(a7)
	move.l	$8(a5),d2
L111
;    uninitWindow(win);
	move.l	_win,-(a7)
	jsr	_uninitWindow
	addq.w	#4,a7
;    win = NULL;
	clr.l	_win
;    if (customfont)
	tst.l	_customfont
	beq.b	L113
L112
;    
;	CloseFont(customfont);
	move.l	_customfont,-(a7)
	jsr	_CloseFont
	addq.w	#4,a7
L113
;    if (mysc)
	tst.l	_mysc
	beq.b	L115
L114
;    
;	UnlockPubScreen(NULL, mysc);
	move.l	_mysc,-(a7)
	clr.l	-(a7)
	jsr	_UnlockPubScreen
	addq.w	#$8,a7
L115
;    if (GadToolsBase)
	tst.l	_GadToolsBase
	beq.b	L117
L116
;    
;	CloseLibrary(GadToolsBase);
	move.l	_GadToolsBase,-(a7)
	jsr	_CloseLibrary
	addq.w	#4,a7
L117
;    if (DiskfontBase)
	tst.l	_DiskfontBase
	beq.b	L119
L118
;    
;	CloseLibrary(DiskfontBase);
	move.l	_DiskfontBase,-(a7)
	jsr	_CloseLibrary
	addq.w	#4,a7
L119
;    if (IntuitionBase)
	tst.l	_IntuitionBase
	beq.b	L121
L120
;    
;	CloseLibrary((struct Library *)IntuitionBase);
	move.l	_IntuitionBase,-(a7)
	jsr	_CloseLibrary
	addq.w	#4,a7
L121
;    if (GfxBase)
	tst.l	_GfxBase
	beq.b	L123
L122
;    
;	CloseLibrary((struct Library *)GfxBase);
	move.l	_GfxBase,-(a7)
	jsr	_CloseLibrary
	addq.w	#4,a7
L123
;    exit(code);
	move.l	d2,-(a7)
	jsr	_exit
	addq.w	#4,a7
	move.l	(a7)+,d2
	unlk	a5
	rts

;struct Gadget *CreateAllGadgets(glistptr, vi, screen, tattr)
	XDEF	_CreateAllGadgets
_CreateAllGadgets
L147	EQU	-$A0
	link	a5,#L147
	movem.l	d2-d7/a2/a3/a6,-(a7)
	movem.l	$10(a5),a0/a6
	move.l	$8(a5),a2
L125
;    WORD LeftWidth = 0;
	moveq	#0,d4
;    WORD RightWidth = 0;
	moveq	#0,d3
;    WORD FarRightWidth = 0;
;    topborder = screen->WBorTop + (screen->Font->ta_YSize + 1);
	move.b	$23(a0),d0
	ext.w	d0
	ext.l	d0
	move.l	$28(a0),a0
	moveq	#0,d1
	move.w	4(a0),d1
	addq.l	#1,d1
	add.l	d1,d0
	move.w	d0,-$9A(a5)
;    if (!(font = OpenFont(tattr)))
	move.l	a6,-(a7)
	jsr	_OpenFont
	addq.w	#4,a7
	move.l	d0,a3
	cmp.w	#0,a3
	bne.b	L127
L126
;    
;	return(NULL);
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2/a3/a6
	unlk	a5
	rts
L127
;    InitRastPort(&TextRP);
	pea	-$96(a5)
	jsr	_InitRastPort
	addq.w	#4,a7
;    SetFont(&TextRP, font);
	move.l	a3,-(a7)
	pea	-$96(a5)
	jsr	_SetFont
	addq.w	#$8,a7
;    for (i = 0;
	moveq	#0,d2
	bra	L133
L128
;    
;	if ( (width = TextLength(&TextRP, LeftLabels[i],
	move.w	d2,d0
	ext.l	d0
	asl.l	#2,d0
	move.l	#_LeftLabels,a1
	move.l	0(a1,d0.l),-(a7)
	jsr	_strlen
	addq.w	#4,a7
	ext.l	d0
	move.l	d0,-(a7)
	move.w	d2,d0
	ext.l	d0
	asl.l	#2,d0
	move.l	#_LeftLabels,a1
	move.l	0(a1,d0.l),-(a7)
	pea	-$96(a5)
	jsr	_TextLength
	add.w	#$C,a7
	cmp.w	d4,d0
	ble.b	L130
L129
;	
;	    LeftWidth = width;
	move.w	d0,d4
L130
;	if ( (width = TextLength(&TextRP, RightLabels[i],
	move.w	d2,d0
	ext.l	d0
	asl.l	#2,d0
	move.l	#_RightLabels,a1
	move.l	0(a1,d0.l),-(a7)
	jsr	_strlen
	addq.w	#4,a7
	ext.l	d0
	move.l	d0,-(a7)
	move.w	d2,d0
	ext.l	d0
	asl.l	#2,d0
	move.l	#_RightLabels,a1
	move.l	0(a1,d0.l),-(a7)
	pea	-$96(a5)
	jsr	_TextLength
	add.w	#$C,a7
	cmp.w	d3,d0
	ble.b	L132
L131
;	
;	    RightWidth = width;
	move.w	d0,d3
L132
	addq.w	#1,d2
L133
	cmp.w	#3,d2
	blt	L128
L134
;    FarRightWidth = TextLength(&TextRP, settinga, strlen(setting
	move.l	_settinga,-(a7)
	jsr	_strlen
	addq.w	#4,a7
	move.l	d0,-(a7)
	move.l	_settinga,-(a7)
	pea	-$96(a5)
	jsr	_TextLength
	add.w	#$C,a7
	move.w	d0,-$30(a5)
;    i = TextLength(&TextRP, settingb, strlen(settingb));
	move.l	_settingb,-(a7)
	jsr	_strlen
	addq.w	#4,a7
	move.l	d0,-(a7)
	move.l	_settingb,-(a7)
	pea	-$96(a5)
	jsr	_TextLength
	add.w	#$C,a7
	move.w	d0,d2
;    if (i > FarRightWidth)
	cmp.w	-$30(a5),d2
	ble.b	L136
L135
;    
;	FarRightWidth = i;
	move.w	d2,-$30(a5)
L136
;    gad = CreateContext(glistptr);
	move.l	a2,-(a7)
	jsr	_CreateContext
	addq.w	#4,a7
	move.l	d0,a2
;    ng.ng_LeftEdge = 10;
	move.w	#$A,-$1E(a5)
;    row1 = ng.ng_TopEdge = 6+topborder;
	moveq	#0,d0
	move.w	-$9A(a5),d0
	addq.l	#6,d0
	move.w	d0,d2
	move.w	d2,-$1C(a5)
;    ng.ng_Width = LeftWidth+16;
	move.w	d4,d0
	ext.l	d0
	add.l	#$10,d0
	move.w	d0,-$1A(a5)
;    ng.ng_Height = font->tf_YSize+4;
	move.l	a3,a0
	moveq	#0,d0
	move.w	$14(a0),d0
	addq.l	#4,d0
	move.w	d0,-$18(a5)
;    ng.ng_GadgetText = LeftLabels[0];
	move.l	#_LeftLabels,a1
	move.l	(a1),-$16(a5)
;    ng.ng_TextAttr = tattr;
	move.l	a6,-$12(a5)
;    ng.ng_Flags = 0;
	clr.l	-$C(a5)
;    ng.ng_UserData = (APTR) Hit_Button1;
	move.l	#_Hit_Button1,-4(a5)
;    ng.ng_VisualInfo = vi;
	move.l	$C(a5),-$8(a5)
;    gad = CreateGadget(BUTTON_KIND, gad, &ng,
	clr.l	-(a7)
	pea	-$1E(a5)
	move.l	a2,-(a7)
	pea	1.w
	jsr	_CreateGadget
	add.w	#$10,a7
	move.l	d0,a2
;    if (gad)
	cmp.w	#0,a2
	beq.b	L138
L137
;    
;	row2 = ng.ng_TopEdge += gad->Height + 4;
	move.w	$A(a2),d0
	ext.l	d0
	addq.l	#4,d0
	lea	-$1E(a5),a0
	move.w	2(a0),d1
	add.w	d0,d1
	move.w	d1,d7
	move.w	d7,-$1C(a5)
L138
;    ng.ng_GadgetText = LeftLabels[1];
	move.l	#_LeftLabels,a1
	move.l	4(a1),-$16(a5)
;    ng.ng_UserData = (APTR) Hit_Button2;
	move.l	#_Hit_Button2,-4(a5)
;    gad = CreateGadget(BUTTON_KIND, gad, &ng,
	clr.l	-(a7)
	pea	-$1E(a5)
	move.l	a2,-(a7)
	pea	1.w
	jsr	_CreateGadget
	add.w	#$10,a7
	move.l	d0,a2
;    if (gad)
	cmp.w	#0,a2
	beq.b	L140
L139
;    
;	row3 = ng.ng_TopEdge += gad->Height + 4;
	move.w	$A(a2),d0
	ext.l	d0
	addq.l	#4,d0
	lea	-$1E(a5),a0
	move.w	2(a0),d1
	add.w	d0,d1
	move.w	d1,d6
	move.w	d6,-$1C(a5)
L140
;    ng.ng_GadgetText = LeftLabels[2];
	move.l	#_LeftLabels,a1
	move.l	$8(a1),-$16(a5)
;    ng.ng_UserData = (APTR) Hit_Button3;
	move.l	#_Hit_Button3,-4(a5)
;    gad = CreateGadget(BUTTON_KIND, gad, &ng,
	clr.l	-(a7)
	pea	-$1E(a5)
	move.l	a2,-(a7)
	pea	1.w
	jsr	_CreateGadget
	add.w	#$10,a7
	move.l	d0,a2
;    if (gad)
	cmp.w	#0,a2
	beq.b	L142
L141
;    
;	row4 = ng.ng_TopEdge += gad->Height + 4;
	move.w	$A(a2),d0
	ext.l	d0
	addq.l	#4,d0
	lea	-$1E(a5),a0
	move.w	2(a0),d5
	add.w	d0,d5
	move.w	d5,-$1C(a5)
L142
;    ng.ng_GadgetText = LeftLabels[3];
	move.l	#_LeftLabels,a1
	move.l	$C(a1),-$16(a5)
;    ng.ng_UserData = (APTR) Hit_Button4;
	move.l	#_Hit_Button4,-4(a5)
;    gad = CreateGadget(BUTTON_KIND, gad, &ng,
	clr.l	-(a7)
	pea	-$1E(a5)
	move.l	a2,-(a7)
	pea	1.w
	jsr	_CreateGadget
	add.w	#$10,a7
	move.l	d0,a2
;    if (gad)
	cmp.w	#0,a2
	beq.b	L144
L143
;    
;	WinHeight = ng.ng_TopEdge += gad->Height + 8;
	move.w	$A(a2),d0
	ext.l	d0
	addq.l	#$8,d0
	move.w	d0,d1
	lea	-$1E(a5),a0
	move.w	2(a0),d0
	add.w	d1,d0
	move.w	d0,-$1C(a5)
	move.w	d0,_WinHeight
L144
;    ng.ng_GadgetText = RightLabels[0];
	move.l	#_RightLabels,a1
	move.l	(a1),-$16(a5)
;    ng.ng_UserData = NULL;
	clr.l	-4(a5)
;    ng.ng_TopEdge = row1+2;
	move.w	d2,d0
	ext.l	d0
	addq.l	#2,d0
	move.w	d0,-$1C(a5)
;    ng.ng_LeftEdge += ng.ng_Width + 26 + RightWidth;
	move.w	-$1A(a5),d0
	ext.l	d0
	add.l	#$1A,d0
	move.w	d3,d1
	ext.l	d1
	add.l	d1,d0
	add.w	d0,-$1E(a5)
;    ng.ng_Height = font->tf_YSize;
	move.l	a3,a0
	move.w	$14(a0),-$18(a5)
;    gad = CreateGadget(TEXT_KIND, gad, &ng,
	clr.l	-(a7)
	move.l	_settinga,-(a7)
	move.l	#$8008000B,-(a7)
	pea	-$1E(a5)
	move.l	a2,-(a7)
	pea	$D.w
	jsr	_CreateGadget
	add.w	#$18,a7
	move.l	d0,a2
;    if (gad)
	cmp.w	#0,a2
	beq.b	L146
L145
;    
;	WinWidth = ng.ng_LeftEdge + FarRightWidth + 2;
	move.w	-$1E(a5),d0
	ext.l	d0
	move.w	-$30(a5),d1
	ext.l	d1
	add.l	d1,d0
	addq.l	#2,d0
	move.w	d0,_WinWidth
L146
;    ng.ng_GadgetText = RightLabels[1];
	move.l	#_RightLabels,a1
	move.l	4(a1),-$16(a5)
;    ng.ng_TopEdge = row2+2;
	move.w	d7,d0
	ext.l	d0
	addq.l	#2,d0
	move.w	d0,-$1C(a5)
;    gad = CreateGadget(TEXT_KIND, gad, &ng,
	clr.l	-(a7)
	move.l	_settingb,-(a7)
	move.l	#$8008000B,-(a7)
	pea	-$1E(a5)
	move.l	a2,-(a7)
	pea	$D.w
	jsr	_CreateGadget
	add.w	#$18,a7
	move.l	d0,a2
;    ng.ng_GadgetText = RightLabels[2];
	move.l	#_RightLabels,a1
	move.l	$8(a1),-$16(a5)
;    ng.ng_TopEdge = row3;
	move.w	d6,-$1C(a5)
;    ng.ng_UserData = (APTR) Hit_Check1;
	move.l	#_Hit_Check1,-4(a5)
;    gad = CreateGadget(CHECKBOX_KIND, gad, &ng,
	clr.l	-(a7)
	move.w	_check1,d0
	ext.l	d0
	move.l	d0,-(a7)
	move.l	#$80080004,-(a7)
	pea	-$1E(a5)
	move.l	a2,-(a7)
	pea	2.w
	jsr	_CreateGadget
	add.w	#$18,a7
	move.l	d0,a2
;    ng.ng_GadgetText = RightLabels[3];
	move.l	#_RightLabels,a1
	move.l	$C(a1),-$16(a5)
;    ng.ng_TopEdge = row4;
	move.w	d5,-$1C(a5)
;    ng.ng_UserData = (APTR) Hit_Check2;
	move.l	#_Hit_Check2,-4(a5)
;    gad = CreateGadget(CHECKBOX_KIND, gad, &ng,
	clr.l	-(a7)
	move.w	_check2,d0
	ext.l	d0
	move.l	d0,-(a7)
	move.l	#$80080004,-(a7)
	pea	-$1E(a5)
	move.l	a2,-(a7)
	pea	2.w
	jsr	_CreateGadget
	add.w	#$18,a7
	move.l	d0,a2
;    CloseFont(font);
	move.l	a3,-(a7)
	jsr	_CloseFont
	addq.w	#4,a7
;    return(gad);
	move.l	a2,d0
	movem.l	(a7)+,d2-d7/a2/a3/a6
	unlk	a5
	rts

;BOOL HandleEvent(win)
	XDEF	_HandleEvent
_HandleEvent
L157	EQU	-$12
	link	a5,#L157
	movem.l	d2/d3/a2/a3,-(a7)
	move.l	$8(a5),a2
L148
;    BOOL terminated = FALSE;
	moveq	#0,d3
;    Wait (1 << win->UserPort->mp_SigBit);
	move.l	$56(a2),a0
	moveq	#0,d0
	move.b	$F(a0),d0
	moveq	#1,d1
	asl.l	d0,d1
	move.l	d1,-(a7)
	jsr	_Wait
	addq.w	#4,a7
;    while (imsg = GT_GetIMsg(win->UserPort))
	bra	L155
L149
;    
;	imsgClass = imsg->Class;
	move.l	$14(a0),d2
;	gad = (struct Gadget *)imsg->IAddress;
	move.l	$1C(a0),a3
;	GT_ReplyIMsg(imsg);
	move.l	a0,-(a7)
	jsr	_GT_ReplyIMsg
	addq.w	#4,a7
;	switch (imsgClass)
	cmp.l	#$40,d2
	beq.b	L150
	bhi.b	L158
	cmp.l	#4,d2
	beq.b	L154
	bra.b	L155
L158
	cmp.l	#$200,d2
	beq.b	L153
	bra.b	L155
;	
;	    
L150
;		if (fptr = (void (*)(struct Window *, struct Gadget *))gad->User
	move.l	a3,a1
	move.l	$28(a1),a0
	cmp.w	#0,a0
	beq.b	L155
L151
;		
;		    (*fptr)(win, gad);
	move.l	a3,-(a7)
	move.l	a2,-(a7)
	jsr	(a0)
	addq.w	#$8,a7
L152
;		
	bra.b	L155
L153
;		terminated = TRUE;
	moveq	#1,d3
;		
	bra.b	L155
L154
;		GT_BeginRefresh(win);
	move.l	a2,-(a7)
	jsr	_GT_BeginRefresh
	addq.w	#4,a7
;		GT_EndRefresh(win, TRUE);
	pea	1.w
	move.l	a2,-(a7)
	jsr	_GT_EndRefresh
	addq.w	#$8,a7
;		
L155
	move.l	$56(a2),-(a7)
	jsr	_GT_GetIMsg
	addq.w	#4,a7
	move.l	d0,a0
	cmp.w	#0,a0
	bne.b	L149
L156
;    return(terminated);
	move.w	d3,d0
	movem.l	(a7)+,d2/d3/a2/a3
	unlk	a5
	rts

;void Hit_Button1(win, gad)
	XDEF	_Hit_Button1
_Hit_Button1
L161	EQU	0
	link	a5,#L161
L160
;    printf("Clicked on Button1\n");
	move.l	#L159,-(a7)
	jsr	_printf
	addq.w	#4,a7
	unlk	a5
	rts

;void Hit_Button2(win, gad)
	XDEF	_Hit_Button2
_Hit_Button2
L164	EQU	0
	link	a5,#L164
L163
;    printf("Clicked on Button2\n");
	move.l	#L162,-(a7)
	jsr	_printf
	addq.w	#4,a7
	unlk	a5
	rts

;void Hit_Button3(win, gad)
	XDEF	_Hit_Button3
_Hit_Button3
L167	EQU	0
	link	a5,#L167
L166
;    printf("Clicked on Button3\n");
	move.l	#L165,-(a7)
	jsr	_printf
	addq.w	#4,a7
	unlk	a5
	rts

;void Hit_Button4(win, gad)
	XDEF	_Hit_Button4
_Hit_Button4
L170	EQU	0
	link	a5,#L170
L169
;    printf("Clicked on Button4\n");
	move.l	#L168,-(a7)
	jsr	_printf
	addq.w	#4,a7
	unlk	a5
	rts

;void Hit_Check1(win, gad)
	XDEF	_Hit_Check1
_Hit_Check1
L178	EQU	0
	link	a5,#L178
	move.l	a2,-(a7)
	move.l	$C(a5),a2
L174
;    printf("Check1 now ");
	move.l	#L171,-(a7)
	jsr	_printf
	addq.w	#4,a7
;    if (gad->Flags & SELECTED)
	moveq	#0,d0
	move.w	$C(a2),d0
	and.l	#$80,d0
	beq.b	L176
L175
;	printf("on.\n");
	move.l	#L172,-(a7)
	jsr	_printf
	addq.w	#4,a7
	bra.b	L177
L176
;	printf("off.\n");
	move.l	#L173,-(a7)
	jsr	_printf
	addq.w	#4,a7
L177
	move.l	(a7)+,a2
	unlk	a5
	rts

;void Hit_Check2(win, gad)
	XDEF	_Hit_Check2
_Hit_Check2
L184	EQU	0
	link	a5,#L184
	move.l	a2,-(a7)
	move.l	$C(a5),a2
L180
;    printf("Check2 now ");
	move.l	#L179,-(a7)
	jsr	_printf
	addq.w	#4,a7
;    if (gad->Flags & SELECTED)
	moveq	#0,d0
	move.w	$C(a2),d0
	and.l	#$80,d0
	beq.b	L182
L181
;	printf("on.\n");
	move.l	#L172,-(a7)
	jsr	_printf
	addq.w	#4,a7
	bra.b	L183
L182
;	printf("off.\n");
	move.l	#L173,-(a7)
	jsr	_printf
	addq.w	#4,a7
L183
	move.l	(a7)+,a2
	unlk	a5
	rts

L51
	dc.b	'Bananas',0
L56
	dc.b	'Button Four',0
L53
	dc.b	'Button One',0
L55
	dc.b	'Button Three',0
L54
	dc.b	'Button Two',0
L59
	dc.b	'Check 1:',0
L60
	dc.b	'Check 2:',0
L171
	dc.b	'Check1 now ',0
L179
	dc.b	'Check2 now ',0
L159
	dc.b	'Clicked on Button1',$A,0
L162
	dc.b	'Clicked on Button2',$A,0
L165
	dc.b	'Clicked on Button3',$A,0
L168
	dc.b	'Clicked on Button4',$A,0
L69
	dc.b	'Could not open font %s %ld',$A,0
L64
	dc.b	'Example:',$A,$9,'gadget2 courier.font 15',$A,0
L93
	dc.b	'GadTools Font-Sensitive Gadgets',0
L52
	dc.b	'Lemons',0
L57
	dc.b	'Setting A:',0
L58
	dc.b	'Setting B:',0
L63
	dc.b	'Usage:',$A,$9,'gadget2',$A,'or',$A,$9,'gadget2 fontname.font fo'
	dc.b	'ntsize',$A,0
L68
	dc.b	'diskfont.library',0
L67
	dc.b	'gadtools.library',0
L65
	dc.b	'graphics.library',0
L66
	dc.b	'intuition.library',0
L173
	dc.b	'off.',$A,0
L172
	dc.b	'on.',$A,0

	SECTION ":1",DATA

	XDEF	_check1
_check1
	dc.w	1
	XDEF	_check2
_check2
	dc.w	0
	XDEF	_settinga
_settinga
	dc.l	L51
	XDEF	_settingb
_settingb
	dc.l	L52
	XDEF	_LeftLabels
_LeftLabels
	dc.l	L53,L54,L55,L56
	XDEF	_RightLabels
_RightLabels
	dc.l	L57,L58,L59,L60
	XDEF	_GfxBase
_GfxBase
	dc.l	0
	XDEF	_IntuitionBase
_IntuitionBase
	dc.l	0
	XDEF	_GadToolsBase
_GadToolsBase
	dc.l	0
	XDEF	_DiskfontBase
_DiskfontBase
	dc.l	0
	XDEF	_mysc
_mysc
	dc.l	0
	XDEF	_win
_win
	dc.l	0
	XDEF	_customfont
_customfont
	dc.l	0
	XDEF	_glist
_glist
	dc.l	0
	XDEF	_vi
_vi
	dc.l	0

	SECTION ":2",BSS

	XDEF	_WinWidth
_WinWidth
	ds.w	1
	XDEF	_WinHeight
_WinHeight
	ds.w	1
	XDEF	_customtattr
_customtattr
	ds.l	2
	XDEF	_tattr
_tattr
	ds.l	1

	END
