
;structure example


	include	"baselibs.i"
	include	"intuition.i"
	include	"baseintuition.i"
	include	"basegfx.i"


	#define		IDCMPflags,NEWSIZE|REFRESHWINDOW|MOUSEBUTTONS|CLOSEWINDOW|VANILLAKEY
	#define		flags,WINDOWSIZING|WINDOWDRAG|WINDOWCLOSE|ACTIVATE


	DATAAREA	chip
	{
		structset	myscreen
		{
		sw	0
		sw	0	;ns_TopEdge
		sw	320	;ns_Width
		sw	256	;ns_Height
		sw	3	;ns_Depth
		sb	1	;ns_DetailPen
		sb	3	;ns_BlockPen
		sw	$40	;ns_ViewModes
		sw	15	;ns_Type
		sl	0	;ns_Font
		sl	0	;ns_DefaultTitle
		sl	0	;ns_Gadgets
		sl	64	;ns_CustomBitMap
		}
		structset	mywindow
		{
		sw	0	;nw_LeftEdge
		sw	0	;nw_TopEdge
		sw	310	;nw_Width
		sw	240	;nw_Height
		sb	1	;nw_DetailPen
		sb	3	;nw_BlockPen
		sl	IDCMPflags	;nw_IDCMPFlags
		sl	flags		;nw_Flags
		sl	0	;nw_FirstGadget
		sl	0	;nw_CheckMark
		sl	0	;nw_Title
		sl	0	;nw_Screen
		sl	0	;nw_BitMap
		sw	200	;nw_MinWidth
		sw	200	;nw_MinHeight
		sw	320	;nw_MaxWidth
		sw	256	;nw_MaxHeight
		sw	15	;nw_Type
		}
		structset	tmpras,tr_SIZEOF

		structset	areainfo,ai_SIZEOF


iconwindow  dc.l    0
icnwindow   dc.w    40,170,72,28
	    dc.b    0,1
	    dc.l    $20,$800
	    dc.l    gadget,0,0,0,0
	    dc.w    72,28,72,28
	    dc.w    1

gadget	    dc.l    0
	    dc.w    0,0,72,28,4,2,$20
	    dc.l    image
	    dc.l    0,0,0,0
	    dc.w    0
	    dc.l    0

image	    dc.w    0,0,72,28,2
	    dc.l    imagedata
	    dc.b    3,0
	    dc.l    iconifimg

imagedata   dc.w    $000F,$FFFF,$FFFF,$FFF8,$0000,$001F,$FFFF,$FFFF
	    dc.w    $FFFC,$0000,$001F,$0000,$0000,$007C,$0000,$001F
	    dc.w    $7FFF,$FFFF,$FF7C,$0000,$001F,$4A46,$0244,$557C
	    dc.w    $0000,$001F,$5108,$D411,$817C,$0000,$001F,$7FFF
	    dc.w    $FFFF,$FF7C,$0000,$001F,$0000,$0000,$007C,$0000
	    dc.w    $001F,$30C0,$0000,$007C,$0000,$001F,$1980,$0000
	    dc.w    $007C,$0000,$001F,$0F0F,$1F0F,$1F7C,$0000,$001F
	    dc.w    $0619,$9999,$997C,$0000,$001F,$0F19,$999F,$987C
	    dc.w    $0000,$001F,$1999,$9F18,$187C,$0000,$001F,$30CF
	    dc.w    $180F,$187C,$0000,$001F,$0000,$1800,$007C,$0000
	    dc.w    $001F,$0000,$0000,$007C,$0000,$001F,$FFFF,$FFFF
	    dc.w    $FFFC,$0000,$000F,$FFFF,$FFFF,$FF18,$0000,$0000
	    dc.w    $0000,$0000,$0000,$0000,$3FFF,$FFFF,$FFFF,$FFFF
	    dc.w    $FC00,$FDFF,$FFFF,$FFFF,$FFFF,$FF00,$EBFF,$FFFF
	    dc.w    $FFFF,$FFFF,$FF00,$F7FF,$FFFF,$FFFF,$F800,$0700
	    dc.w    $FFFF,$FFFF,$FFFF,$FFFF,$FF00,$FFFF,$FFFF,$FFFF
	    dc.w    $FFFF,$FF00,$FFFF,$FFFF,$FFFF,$FFFF,$FF00,$3FFF
	    dc.w    $FFFF,$FFFF,$FFFF,$FC00,$0000,$0000,$0000,$0000
	    dc.w    $0000,$0000,$0000,$0000,$0000,$0000,$0000,$FFFF
	    dc.w    $FFFF,$FF80,$0000,$0000,$FFFF,$FFFF,$FF80,$0000
	    dc.w    $0000,$FFFF,$FFFF,$FF80,$0000,$0000,$FFFF,$FFFF
	    dc.w    $FF80,$0000,$0000,$FFFF,$FFFF,$FF80,$0000,$0000
	    dc.w    $FFFF,$FFFF,$FF80,$0000,$0000,$8000,$0000,$0080
	    dc.w    $0000,$0000,$8000,$0000,$0080,$0000,$0000,$8000
	    dc.w    $0000,$0080,$0000,$0000,$8000,$0000,$0080,$0000
	    dc.w    $0000,$8000,$0000,$0080,$0000,$0000,$8000,$0000
	    dc.w    $0080,$0000,$0000,$8000,$0000,$0080,$0000,$0000
	    dc.w    $8000,$0000,$0080,$0000,$0000,$FFFF,$FFFF,$FF80
	    dc.w    $0000,$0000,$0000,$0000,$00E0,$0000,$0000,$0000
	    dc.w    $0000,$00E0,$0000,$0000,$1FFF,$FFFF,$F800,$0000
	    dc.w    $0000,$0080,$0040,$0000,$0000,$0200,$0080,$0040
	    dc.w    $0000,$0000,$1400,$0080,$0040,$003F,$0000,$0800
	    dc.w    $0080,$0040,$07FF,$F800,$0000,$0080,$0040,$003F
	    dc.w    $0000,$0000,$0080,$0040,$0000,$3800,$FFFF,$FFFF
	    dc.w    $FFFF,$FFFF,$FE00,$0000,$0080,$0040,$0000,$0000

iconifgad   dc.l    0
	    dc.w    -83,0
	    dc.w    31,10
	    dc.w    $14
	    dc.w    $41
	    dc.w    1
	    dc.l    iconifimg
	    dc.l    0
	    dc.l    0
	    dc.l    0
	    dc.l    0
	    dc.w    0
	    dc.l    0

iconifimg   dc.w    50,30
	    dc.w    31,10
	    dc.w    2
	    dc.l    iconifdata
	    dc.b    $0003,$0000
	    dc.l    0

iconifdata  dc.w    $7FFF,$FFFC,$601F,$FFFC,$6000,$000C,$607F,$FFCC
	    dc.w    $6060,$00CC,$6067,$FCCC,$7E60,$00CC,$7E7F,$FFCC
	    dc.w    $7E00,$000C,$7FFF,$FFFC,$0000,$0000,$1FE0,$0000
	    dc.w    $1FFF,$FFF0,$1F80,$0030,$1F9F,$FF30,$1F98,$0330
	    dc.w    $019F,$FF30,$0180,$0030,$01FF,$FFF0,$0000,$0000


	}


	variables

	CPTR	_IntuitionBase
	CPTR	_GfxBase
	array	byte,areabuffer,400

		
	main()

	CPTR screenl
	CPTR	windowl
	CPTR	rp
	{

		func	_IntuitionBase,=,openlibrary,"intuition.library",0
		if	_IntuitionBase,!=,0,1
		{
			func	_GfxBase,=,openlibrary,"graphics.library",0
			if	_GfxBase,!=,0,2
			{
				func	screenl,=,openscreen,myscreen
				if	screenl,!=,0,3
				{

				;screenl address to window structure
					structput	mywindow,.,nw_Screen,=,screenl
					func	windowl,=,openwindow,mywindow
					if	windowl,!=,0,4
					{
						structput	rp,=,windowl,->,wd_RPort

					;rastport and windowl to a subroutine
						ROUTINE	draw,rp,windowl
					}
					ifend	4
					closewindow	windowl
				}
				ifend	3
				closescreen	screenl
			}	
			ifend	2
			closelibrary	_GfxBase
		}
		ifend	1
		closelibrary	_IntuitionBase
	}

;draw graphic into a window

		VOID	draw,rp,windowl
		;the first are taken the variables from the stack
	
		CPTR	rp,windowl
		short	width
		short	height
		CPTR	planePtr
	
		{
	
			calc	width,=,320
			calc	height,=,256
			
				func	planePtr,=,AllocRaster,width,height
				
				InitArea	areainfo,areabuffer,80
				structput	rp,->,rp_AreaInfo,=,areainfo

				InitTmpRas	tmpras,planePtr,width,height
				structput	rp,->,rp_TmpRas,=,tmpras

				SetRast		rp,0

				SetAPen		rp,1
				setopen		rp,3
				areamove		rp,50,50
				areaDraw		rp,50,200
				areaDraw		rp,100,200
				areaDraw		rp,200,50
				areaend			rp

				setapen		rp,3
				areamove	rp,100,100
				areadraw	rp,150,200
				areadraw	rp,260,150
				areadraw	rp,220,50
				areaend		rp


				FreeRaster	planePtr,width,height

				DrawImage	rp,image,100,80
				GetIntuiMsg	windowl
		
		}

		
	end