
;structure example


	include	"baselibs.i"
	include	"baseexec.i"
	include	"intuition.i"
	include	"string.i"
	include	"baselibs1.i"
	include	"baseintuition.i"
	include	"basegfx.i"


	#define		IDCMPflags,CLOSEWINDOW|GADGETUP
	#define		flags,WINDOWSIZING|WINDOWDRAG|WINDOWCLOSE|ACTIVATE|SIMPLE_REFRESH|NOCAREREFRESH
	#define	NULL,0
	#define	MIINUS,-1


		DATAAREA
	{
		structset	myscreen
		{
		dc.w	0,0	;ns_LeftEdge ns_TopEdge
		dc.w	640,256	;ns_Width ns_Height
		dc.w	3	;ns_Depth
		dc.b	1	;ns_DetailPen
		dc.b	3	;ns_BlockPen
		dc.w	$8000	;ns_ViewModes
		dc.w	15	;ns_Type
		dc.l	0	;ns_Font
		dc.l	0	;ns_DefaultTitle
		dc.l	0	;ns_Gadgets
		dc.l	64	;ns_CustomBitMap
		}
		structset	mywindow
		{
		dc.w	0,0		;nw_LeftEd nw_TopEdge
		dc.w	640,240		;nw_Width nw_Height
		dc.b	1		;nw_DetailPen
		dc.b	3		;nw_BlockPen
		dc.l	IDCMPflags	;nw_IDCMPFlags
		dc.l	flags		;nw_Flags
		dc.l	StringGadget		;nw_FirstGadget
		dc.l	0		;nw_CheckMark
		dc.l	WTitle	;nw_Title
		dc.l	0		;nw_Screen
		dc.l	0		;nw_BitMap
		dc.w	200,200		;nw_MinWidth nw_MinHeight
		dc.w	640,256		;nw_MaxWidth nw_MaxHeight
		dc.w	15		;nw_Type
		{
		structset	myRequest
		}
		sa	0		;olderRequest
		sw	60		;LeftEdge
		sw	60		;TopEdge
		sw	300		;Width
		sw	80		;Height
		sw	0,0		;RelLeft, RelTop
		sa	StringGadget	;First gadget
		sa	0			;RegBorder
		sa	0			;RegText
		sw	POINTREL		;flags
		sb	2			;backfill
		sb	0			;Krugelfill
		sa	0			;Layer
		ds.b	32			;Regpad
		sa	0			;bitmab
		sa	0			;Rwindow
		ds.b	36			;Regpad
		}

		structset	StringGadget
		{
		sa	BoolGadget
		sw	10,20		;x,y
		sw	200,10		;size
		sw	GADGHCOMP
		sw	RELVERIFY	;
		sw	STRGADGET	;string gadget
		sl	StringBorder
		sl	0
		sl	0
		sl	0
		sl	StringSInfo
		sw	0		;gadgetid
		sa	StrRtn		;userdata
		}
		structset	StringSInfo
		{
		sl	0		;set a buffer later
		sl	0		;set a undobuffer later
		sw	0		;editing a place
		sw	32		;max mount of characters
		sw	0
		sw	0,0,0,0,0	;for intuition
		sl	0		;no use
		sl	0		;longint
		sl	0		;keymap 
		}
		structset	StringBorder
		{
		sw	-2,-2		;relative position
		sb	1,2		;draw color
		sb	RP_JAM1		;draw mode
		sb	5		;mount of a pair of cordinates
 		sl	StringVectors	;table
		sl	0		;no more
		}
StringVectors	dc.w	0,0,203,0,203,11,0,11,0,0

		structset	BoolGadget
		{
		sl	CloseGadget		;no more gadgets
		sw	220,19		;x,y
		sw	56,10		;size	
		sw	GADGHCOMP
		sw	RELVERIFY
		sw	BOOLGADGET
		sl	BoolBorder
		sl	0		;no image
		sl	BoolText
		sl	0
		sl	0
		sw	0		;gadget	id
		sl	BoolRtn
		}
		structset	BoolBorder
		{
		sw	-1,-1
		sb	1,2
		sb	RP_JAM1
		sb	5
		sl	BoolVectors
		sl	0
		{
BoolVectors	dc.w	0,0,57,0,57,11,0,11,0,0
		}
		structset	BoolText
		{
		sb	1,2
		sb	RP_JAM1
		sb	0
		sw	8,1
		sl	0
		sa	Bool_Text
		sl	0
		}
		structset	CloseGadget
		{
		sl	DrawGadget		;no more gadgets
		sw	10,40		;x,y
		sw	56,10		;size	
		sw	GADGHCOMP
		sw	RELVERIFY
		sw	BOOLGADGET
		sl	CloseBorder
		sl	0		;no image
		sl	CloseText
		sl	0
		sl	0
		sw	0		;gadget	id
		sl	CloseRtn
		}
		structset	CloseBorder
		{
		sw	-1,-1
		sb	1,2
		sb	RP_JAM1
		sb	5
		sl	CloseVectors
		sl	0
		}
CloseVectors	dc.w	0,0,57,0,57,11,0,11,0,0

		structset	CloseText
		{
		sb	1,2
		sb	RP_JAM1
		sb	0
		sw	8,1
		sl	0
		sa	Close_Text
		sl	0
		}
		structset	DrawGadget
		{
		sl	LongIntGadget		;no more gadgets
		sw	220,40		;x,y
		sw	56,10		;size	
		sw	GADGHCOMP
		sw	RELVERIFY
		sw	BOOLGADGET
		sl	DrawBorder
		sl	0		;no image
		sl	DrawText
		sl	0
		sl	0
		sw	0		;gadget	id
		sl	draw
		}
		structset	DrawBorder
		{
		sw	-1,-1
		sb	1,2
		sb	RP_JAM1
		sb	5
		sl	DrawVectors
		sl	0
		}
DrawVectors	dc.w	0,0,57,0,57,11,0,11,0,0

		structset	DrawText
		{
		sb	1,2
		sb	RP_JAM1
		sb	0
		sw	8,1
		sl	0
		sa	Draw_Text
		sl	0
		}
		structset	LongIntGadget
		{
		sa	PropGadget
		sw	50,60		;x,y
		sw	160,10		;size
		sw	GADGHCOMP
		sw	RELVERIFY|LONGINT	;
		sw	STRGADGET	;string gadget
		sl	LongIntBorder
		sl	0
		sl	0
		sl	0
		sl	LongIntSInfo
		sw	0		;gadgetid
		sa	draw		;userdata
		}
		structset	LongIntSInfo
		{
		sl	0		;set a buffer later
		sl	0		;set a undobuffer later
		sw	0		;editing a place
		sw	32		;max mount of characters
		sw	0
		sw	0,0,0,0,0	;for intuition
		sl	0		;no use
		sl	100		;longint
		sl	0		;keymap 
		}
		structset	LongIntBorder
		{
		sw	-2,-2		;relative position
		sb	1,2		;draw color
		sb	RP_JAM1		;draw mode
		sb	5		;mount of a pair of cordinates
 		sl	LongIntVectors	;table
		sl	0		;no more
		}
LongIntVectors	dc.w	0,0,163,0,163,11,0,11,0,0

		structset	PropGadget
		{
		sl	0
		sw	-33,11		;x,y
		sw	16,-14		;size
		sw	GADGHCOMP|GRELRIGHT|GRELHEIGHT
		sw	RELVERIFY|FOLLOWMOUSE	;
		sw	PROPGADGET	;string gadget
		sl	KnopImage
		sl	0
		sl	0
		sl	0
		sl	PropPInfo
		sw	0		;gadgetid
		sa	PropRtn		;userdata
		}
		structset	PropPInfo
		{
		sw	AUTOKNOB|FREEVERT
		sw	0		;editing a place
		sw	0		;max mount of characters
		sw	0
		sw	4095
		sw	0,0,0,0,0	;for intuition
		}
		structset	KnopImage
		{
		sw	0,0,0,0,0
		sl	0
		sb	0,0
		sl	0		
		}
colors		dc.w	$0eee,$0f20,$0d80,$0ac0,$04e2,$02f6,$058b,$083e
WTitle		dc.b	"Simple_Window",0
Bool_Text		dc.b	"clear",0
Close_Text	dc.b	"exit",0
Draw_Text		dc.b	"draw",0
Clear_buffer	dc.b	0
valjue		dc.b	"100",0
blank		dc.b	"        ",0
	}


	variables

	CPTR	screenl
	CPTR	windowl
	CPTR	_IntuitionBase
	CPTR	_GfxBase
	CPTR	rp		;rastport
	CPTR	_buffer
	CPTR	_undo_buffer
	CPTR	_intbuffer
	CPTR	_intundo_buffer
	
	CPTR	_StringGadget
	CPTR	_Clear_buffer
	CPTR	_valjuebuffer
	int	flag
	array	char,buffer,34
	array	char,undo_buffer,34
	array	char,intbuffer,34
	array	char,intundo_buffer,34
	array	char,valjuebuffer,34

	
	main()

	CPTR	userport
	CPTR	viewport
	CPTR	message
	int	mClass
	short	mCode
	CPTR	mIAddress
	CPTR	Address
	CPTR	_valjue

	
	{
		pointer	_buffer,=&,buffer
		pointer	_undo_buffer,=&,undo_buffer
		pointer	_intbuffer,=&,intbuffer
		pointer	_intundo_buffer,=&,intundo_buffer

		pointer	_StringGadget,=&,StringGadget
		pointer	_Clear_buffer,=&,Clear_buffer
		pointer	_valjue,=&,valjue
		pointer	_valjuebuffer,=&,valjuebuffer

		structput	StringSInfo,.,si_Buffer,=,_buffer
		structput	StringSInfo,.,si_UndoBuffer,=,_undo_buffer
		structput	LongIntSInfo,.,si_Buffer,=,_intbuffer
		structput	LongIntSInfo,.,si_UndoBuffer,=,_intundo_buffer
		strcpy	_intbuffer,_valjue

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

			if	screenl,!=,0,2
			{
				structput	viewport,=&,screenl,->,sc_ViewPort
				LoadRGB4	viewport,colors,8
				structput	mywindow,.,nw_Screen,=,screenl
				func	windowl,=,openwindow,mywindow
				if	windowl,!=,0,3
				{
				
					structput	rp,=,windowl,->,wd_RPort
					structput	userport,=,windowl,->,wd_UserPort
						calc	flag,=,0
						while		flag,==,0,4
						{
						WaitIntuiMsg	userport
						func	message,=,GetMsg,userport	
							if	message,!=,0,5
							{
							structput	mClass,=,message,->,im_Class
							structput	mCode,=,message,->,im_Code
							structput	mIAddress,=,message,->,im_IAddress
							ReplyMsg	message	
						
							}	
							ifend	5
							if	mClass,==,CLOSEWINDOW,6
								{
								calc	flag,=,1
								}	
								ifend	6
							if	mClass,==,GADGETUP,7
								{
								structput	Address,=,mIAddress,->,gg_UserData
								ROUTINE	Address
								}
								ifend	7					

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


		VOID	StrRtn
		{
			SetWindowTitles	windowl,_buffer,MIINUS		;only windowtitle	
		}

		VOID	BoolRtn
		{
			strcpy	_buffer,_Clear_buffer		;clear buffer
			RefreshGList	StringGadget,windowl,NULL,1
		}		

		VOID	CloseRtn
		{
			calc	flag,=,1
		}	

		VOID	PropRtn

		int	size
		short	VertPot
		{
			structput	VertPot,=,PropPInfo,.,pi_VertPot
			
			func	size,=,ltoa,_valjuebuffer,VertPot	;valjue to an asciistring
			movepen	rp,100,50
			text		rp,blank,8
			movepen	rp,100,50
			text		rp,_valjuebuffer,size
		}	
;draw graphic into a window
		

		VOID	draw

		int	xa,ya
		int	xb,yb
		int	count
		{
		
			calc	xa,=,380
			calc	ya,=,180
			calc	xb,=,40
			structput	yb,=,LongIntSInfo,.,si_LongInt
			calc	count,=,0
				while	count,«,80,1
				{
					calc	count,++
					setapen		rp,count
					drawellipse	rp,xa,ya,xb,yb
					calc	xa,--
					calc	ya,--
					calc	xb,=,xb,+,2
					calc	yb,=,yb,-,2
				}	1	
			
			}
	

		
	end