
;structure example


	include	"baselibs.i"			;baselibs.i must be the first
	include	"intuition.i"
	include	"baselibs1.i"
	include	"baseintuition.i"
	include	"basegfx.i"
	include	"baseexec.i"


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

	
	DATAAREA
	{
	structset	myscreen
	{
		sw	0
		sw	0	;ns_TopEdge
		sw	640	;ns_Width
		sw	256	;ns_Height
		sw	3	;ns_Depth
		sb	1	;ns_DetailPen
		sb	3	;ns_BlockPen
		sw	V_HIRES	;ns_ViewModes
		sw	15	;ns_Type
		sl	0	;ns_Font
		sl	0	;ns_DefaultTitle
		sl	0	;ns_Gadgets
		sl	64	;ns_CustomBitMap
	}
	
;set mywindow
	structset	mywindow
	{
		sw	0	;nw_LeftEdge
		sw	0	;nw_TopEdge
		sw	620	;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	640	;nw_MaxWidth
		sw	256	;nw_MaxHeight
		sw	15	;nw_Type
	}	
	structset	mymenu1
	{	
		sa	mymenu2
		sw	10	;x
		sw	30	;y
		sw	50	;width
		sw	10	;height
		sw	1	;enabled
		sa	menuname1
		sa	mymenuitem11
		sw	0,0,0,0
	}	

	structset	mymenu2
	{	
		sl	0
		sw	80
		sw	0	
		sw	50
		sw	10
		sw	1
		sa	menuname2
		sa	mymenuitem21
		sw	0,0,0,0
	}	

	structset	mymenuitem11
	{	
		sa	mymenuitem12
		sw	0,0	;x,y
		sw	130,12
		sw	$9e	;flags
		sl	0	;exclude
		sa	intuitext11
		sl	0
		sb	"1"	;command
		sb	0
		sl	0	;no subitem
		sw	0	;next select 
	}	
	structset	mymenuitem12
	{	
		sl	0
		sw	0,10	;x,y
		sw	130,12
		sw	$56	;flags
		sl	0	;exclude
		sa	intuitext12
		sl	0
		sb	"2"	;command
		sb	0
		sl	0	;no subitem
		sw	0	;next select 
	}	
	structset	mymenuitem21
	{	
		sa	mymenuitem22
		sw	0,0	;x,y
		sw	90,12
		sw	$52	;flags
		sl	0	;exclude
		sa	intuitext21
		sl	0
		sb	0	;command
		sb	0
		sl	0	;no subitem
		sw	0	;next select 
	}	
	structset	mymenuitem22
	{	
		sl	0
		sw	0,12	;x,y
		sw	90,12
		sw	$92	;flags
		sl	0	;exclude
		sa	intuitext22
		sl	0
		sb	0	;command
		sb	0
		sl	0	;no subitem
		sw	0	;next select 
	}	
	structset	intuitext11
	{	
		sb	0,1	;color
		sb	0,0	;mode
		sw	5,3	;x,y position
		sl	0
		sa	text11
		sl	0	;no more text
	}		
	structset	intuitext12
	{	
		sb	0,1	;color
		sb	0,0	;mode
		sw	5,3	;x,y position
		sl	0
		sa	text12
		sl	0	;no more text
	}		
	structset	intuitext21
	{	
		sb	0,1	;color
		sb	0,0	;mode
		sw	5,3	;x,y position
		sl	0
		sa	text21
		sl	0	;no more text
	}		
	
	structset	intuitext22
	{	
		sb	0,1	;color
		sb	0,0	;mode
		sw	5,3	;x,y position
		sl	0
		sa	text22
		sl	0	;no more text
	}		

colors		dc.w	$0eee,$0f20,$0d80,$0ac60,$04e2,$02f6,$058b,$083e,$0a1f
menuname1		dc.b	"Project",0
menuname2		dc.b	"Draw",0
text11		dc.b	"Clear",0
text12		dc.b	"Exit",0
text21		dc.b	"Ellipses",0
text22		dc.b	"Lines",0
	}

	variables

	CPTR	_IntuitionBase
	CPTR	_GfxBase

	
	main()


	CPTR	screenl
	CPTR	windowl
	CPTR	rp
	CPTR	viewport
	CPTR	userport
	CPTR	message
	int	mClass
	short	mCode
	int	menunumber,itemnumber,subnuber
	int	flag
	{
		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
			{
				structput	viewport,=&,screenl,->,sc_ViewPort
				LoadRGB4	viewport,colors,8
				structput	mywindow,.,nw_Screen,=,screenl
				func	windowl,=,openwindow,mywindow
				if	windowl,!=,0,4
				{
					structput	rp,=,windowl,->,wd_RPort
					SetMenuStrip	windowl,mymenu1
					structput	userport,=,windowl,->,wd_UserPort
					calc	flag,=,0
					while	flag,==,0,w1
					{
						WaitIntuiMsg	userport
						func	message,=,GetMsg,userport		
							if	message,!=,0,5
							{
								structput	mCode,=,message,->,im_Code
								ReplyMsg	message
							}
							ifend	5
						func	menunumber,=,MENUNUM,mCode
						func	itemnumber,=,ITEMNUM,mCode
							
						switch	menunumber
							{
							case	0,1
								switch	itemnumber
								{
								case	0,00
									ClearScreen	rp																											
									break	00,11
								case	1,11
									calc	flag,=,1
									break	11,11
								}	11
								break	1,1
							case	1,2
							
								switch	itemnumber
								{
								case	0,21
									ROUTINE	ellipses,rp
									break	21,21
								case	1,22
									ROUTINE	lines,rp
									break	22,21					
								}	21
								break	2,1
							}	1
					}	w1

					ClearMenuStrip	windowl
				}
				ifend	4
				closewindow	windowl
			}	
			ifend	3
			closescreen	screenl
		}	
		ifend	2
		closelibrary	_GfxBase
		}
		ifend	1
		closelibrary	_IntuitionBase
	}

;draw ellipses into a window

		VOID	ellipses,rport
	
		
			CPTR	rport
			int	count
			int	xa,ya
			int	xb,yb
			{
			calc	xa,=,320
			calc	ya,=,180
			calc	xb,=,40
			calc	yb,=,80
			calc	count,=,0
				while	count,«,64,1
				{
					calc	count,++
					setapen		rport,count
					drawellipse	rport,xa,ya,xb,yb
					calc	xa,--
					calc	ya,--
					calc	xb,=,xb,+,4
					calc	yb,=,yb,-,2
				}	1	
			}

;draw lines into a window
		VOID	lines,rport
		
			CPTR	rport
			int	xa,ya
			int	xb,yb
			int	count
			{
		
			calc	xa,=,100
			calc	ya,=,80
			calc	xb,=,300
			calc	yb,=,200
			calc	count,=,0
				while	count,«,96,21
				{
					calc	count,++
					setapen		rport,count
					movepen	rport,xa,ya
					draw	rport,xb,yb
					calc	xa,--
					calc	ya,++
					calc	xb,=,xb,+,4
					calc	yb,=,yb,-,2
				}	21
			}

		}		
	end