*
*   FENSTER V1.0    / 24.July.1989   2 o'clock in the morning
*
*   by Roger Fischlin, Steigerwaldweg 6, D-6450 Hanau 7, West Germany
*      Phone. (06181) 650266
*
*
*   FENSTER v1.0 is public domain software - So you are only allowed
*   to use this code for non-commercial purposes.
*
*   
*









	incdir   "vd0:include/"

	include	intuition/intuition.i
	include	intuition/intuition_lib.i
        	include 	exec/memory.i
	include	exec/exec_lib.i
	include	graphics/graphics_lib.i
	include	graphics/text.i
	include	libraries/dos_lib.i
	include	libraries/dos.i



FontFlag	set	0

SETAPEN	macro
	move.l	WindowPointer,a1
	move.l	wd_RPort(a1),a1	
	move.l	\1,d0
	CALLGRAF	SetAPen
	endm

SETBPEN	macro
	move.l	WindowPointer,a1
	move.l	wd_RPort(a1),a1	
	move.l	\1,d0
	CALLGRAF	SetBPen
	endm
SETDRMD	macro
 	move.l	WindowPointer,a1
	move.l	wd_RPort(a1),a1	
	move.l	\1,d0
	CALLGRAF	SetDrMd
	endm

RECTFILL	macro
	move.l	WindowPointer,a1
	move.l	wd_RPort(a1),a1	
	move.l	\1,d0
	move.l	\2,d1
	move.l	\3,d2
	move.l	\4,d3
	CALLGRAF	RectFill
	endm

BORDER	macro
	bra.s	MakeBox_\@
MakeBox2_\@	BOX	\1,\2,\3,\4,\5,0
MakeBox_\@	move.l	WindowPointer,a0
	move.l	wd_RPort(a0),a0
	lea.l	MakeBox2_\@(pc),a1
	moveq.l	#0,d0
	moveq.l	#0,d1
	CALLINT	DrawBorder
	endm

WRITE	macro
	move.l	WindowPointer,a1
	move.l	wd_RPort(a1),a1
	move.l	a1,a3	
	move.l	\1,d0
	move.l	\2,d1
	CALLGRAF	Move
	move.l	a3,a1	
	move.l	\3,d0
	CALLGRAF	SetAPen
	lea.l	Write_Text\@(pc),a0
	move.l	a3,a1
	move.l	#Write_Ende\@-Write_Text\@,d0
	CALLGRAF	Text
	bra	Write_Label\@
Write_Text\@	dc.b	\4
Write_Ende\@	dc.b	0
	even
Write_Label\@	nop
	endm



BOX	macro			; macro to create a border structure
	dc.w	0,0
	dc.b	\5,0,RP_JAM1,5
	dc.l	box_\@,\6
box_\@	dc.w	\1,\2,\3,\2,\3,\4,\1,\4,\1,\2
	endm

TEXT	macro			; macro to create a text structure	
	dc.b	2,0,RP_JAM1,0
	dc.w	\1+1,\2+1
	dc.l	TOPAZ_80,T_String\@,Text2_\@
Text2_\@	dc.b	\3,0,RP_JAM1,0
	dc.w	\1,\2
	dc.l	TOPAZ_80,T_String\@,0
T_String\@	dc.b	\4,0
	even


	IFEQ	FontFlag

TOPAZ_80	dc.l	T_80name
	dc.w	TOPAZ_EIGHTY
	dc.b	FS_NORMAL,FPF_ROMFONT
	even
T_80name	dc.b	"topaz.font",0

FontFlag	set	1
	endc
	endm


AUTOGADGET	macro
* \1,\2    x,y
* \3,\4    size
* \5,\6    colors (text & Box)
* \7       Text
* \8       ID
* \9       NextGadget

	dc.l	\9
	dc.w	\1,\2,\3,\4
	dc.w	GADGHCOMP,RELVERIFY,BOOLGADGET
	dc.l	AGadget\@_Box
	dc.l	0,AGadget\@_Text,0,0
	dc.w	\8,0,0
AGadget\@_Box	BOX	-1,-1,\3,\4,\5,0
	even

AG_T_String\@	dc.b	\7,0
AG_T_String\@_End	
	even
AGadget\@_Text	dc.b	2,0,RP_JAM1,0
	dc.w	(\3-(AG_T_String\@_End-AG_T_String\@-1)*8)/2+1,((\4-8)/2)+1
	dc.l	TOPAZ_80,AG_T_String\@,AG_Text2_\@

AG_Text2_\@	dc.b	\6,0,RP_JAM1,0
	dc.w	(\3-(AG_T_String\@_End-AG_T_String\@-1)*8)/2),(\4-8)/2
	dc.l	TOPAZ_80,AG_T_String\@,0

	
	IFEQ	FontFlag

TOPAZ_80	dc.l	T_80name
	dc.w	TOPAZ_EIGHTY
	dc.b	FS_NORMAL,FPF_ROMFONT
	even
T_80name	dc.b	"topaz.font",0

FontFlag	set	1
	endc
	endm






	include	"misc/easystart.i"


OpenThem	lea	dosname(pc),a1		; open libs
	moveq.l	#0,d0
	CALLEXEC 	OpenLibrary
	move.l	d0,_DOSBase	
	lea	intname(pc),a1                 
	moveq.l	#0,d0		
	CALLEXEC 	OpenLibrary
	move.l	d0,_IntuitionBase  
	lea	grafname(pc),a1
	moveq.l	#0,d0
	CALLEXEC 	OpenLibrary
	move.l	d0,_GfxBase
	jmp	Init		; jump to end of file
_DOSBase	dc.l	0
dosname	DOSNAME
_GfxBase	dc.l	0
grafname	GRAFNAME
_IntuitionBase	dc.l	0
intname	INTNAME
 
Window1	dc.l	0
Palette	dc.w	$443,$eee,$002,$f80

Start	lea.l	Screendef,a0		; open Screen
	CALLINT	OpenScreen
	tst.l	d0
	beq	ende
	move.l	d0,ScreenPtr1


	lea.l	Windowdef1,a0		; open window	
	CALLINT	OpenWindow
	tst.l	d0
	beq	QUIT2
	move.l	d0,Window1

	move.l	d0,a0		; set colours
	CALLINT	ViewPortAddress
	move.l	d0,a0
	moveq.l	#4,d0
	lea.l	Palette,a1
	CALLGRAF	LoadRGB4
	CALLINT	RemakeDisplay

WindowPointer set Window1		;define Window1 as WindowPointer (for macros )


	SETDRMD	#RP_JAM1
	

ChangeScreen	SETAPEN	#0
	RECTFILL	#10,#10,#270,#165

	clr.l	Mode		; mode = select Screen
	jsr	ShowScreen		; Select Screen

	lea.l	Gadget1,a0		
	move.l	Window1,a1
	sub.l	a2,a2
	CALLINT	RefreshGadgets



wait	move.l	Window1,a0		; wait .....
	move.l	wd_UserPort(a0),a0
	move.l	a0,a5
	CALLEXEC	WaitPort		
	move.l	a5,a0
	CALLEXEC	GetMsg		; get message
	move.l	d0,a1	
	move.l	im_Class(a1),d4	; get data
	move.w	im_Code(a1),d5
	move.l	im_IAddress(a1),a4
	moveq.l	#0,d6
	move.w	im_MouseY(a1),d6
	CALLEXEC 	ReplyMsg		; reply message		
	cmp.l	#MENUPICK,d4
	beq	QUIT
	cmp.l	#VANILLAKEY,d4
	beq	KEY

	moveq.l	#0,d0		; use table to get subroutine		
	move.w	gg_GadgetID(a4),d0
	subq	#1,d0
	lsl.l	#2,d0
	lea.l	Vektoren,a0
	tst.l	Mode
	bne	modus2	
	lea.l	VektorenScreen,a0
modus2	move.l	(a0,d0),a0
	jmp	(a0)
Vektoren	dc.l	ChangeScreen,GetWindows,KillWindow,FRONT,BACK
	dc.l	CLEAR,FRAME,ALL,REFRESH,IDCMP
	dc.l	ABOUT,NewLimits,NewLimits,NewLimits,NewLimits
	dc.l	NewPen,MoveWindow,MoveWindow,SizeWindow,SizeWindow
	dc.l	NewPen,WindowSelect,wait,wait,wait

VektorenScreen	dc.l	ChangeScreen,ChangeScreen,Error,Error,Error
	dc.l	Error,Error,Error,Error,Error
	dc.l	ABOUT,Error,Error,Error,Error
	dc.l	Error,Error,Error,Error,Error
	dc.l	Error,ScreenSelect,wait,wait
	
Error	move.l	ScreenPtr1,a0
	CALLINT	DisplayBeep
	bra	wait


	
QUIT	move.l	Window1,a0		; bye, bye !
	CALLINT	CloseWindow

	move.l	ScreenPtr1,a0
	CALLINT	CloseScreen

	moveq.l	#0,d0
	rts

KEY	cmp.b	#"f",d5		; useful key pressed ?
	beq	KEY2
	cmp.b	#"s",d5
	bne	KEY3
	tst.l	Mode
	beq	wait

	move.l	BILDSCHIRM,a0
	CALLINT	ScreenToFront
	bra	wait

KEY2	move.l	ScreenPtr1,a0
	CALLINT	ScreenToFront
	bra	wait

KEY3	cmp.b	#"u",d5
	beq	UP
	cmp.b	#"d",d5
	bne	wait
	move.l	Top,d0	; move down
	add.l	#17,d0
	cmp.l	Anzahl,d0
	bge	wait
	add.l	#1,Top
	bra	ShowWindow


UP	tst.l	Top	; move up
	beq	wait
	sub.l	#1,Top
	bra	ShowWindow
	
	


Mode	dc.l	0


Screendef	dc.w	0,0,460-4,199,2
	dc.b	0,1
	dc.w	V_HIRES
	dc.w	CUSTOMSCREEN
	dc.l	TOPAZ_80
	dc.l	S_Title,0,0
	

Windowdef1	dc.w	0,0,460-4,199
	dc.b	-1,-1
	dc.l	GADGETUP!MENUPICK!VANILLAKEY
	dc.l	WINDOWDRAG!WINDOWCLOSE!ACTIVATE!SMART_REFRESH!BACKDROP
	dc.l	Gadget1
	dc.l	0
	dc.l	0
ScreenPtr1	dc.l	0,0
	dc.w	0,0,0,0,CUSTOMSCREEN
S_Title	dc.b	"RF-Tools : FENSTER V1.0 by Roger Fischlin 7/1989            ",0
	even

Gadget1	AUTOGADGET 	280,13+0*14,165,10,3,1,<"Change Screen">,1,Gadget2
	even
Gadget2	AUTOGADGET 	280,13+1*14,165,10,3,1,<"Update List">,2,Gadget3
	even
Gadget3	AUTOGADGET 	280,13+2*14,165,10,3,1,<"Kill Window">,3,Gadget4
	even
Gadget4	AUTOGADGET 	280,13+3*14,165,10,3,1,<"Window To Front">,4,Gadget5
	even
Gadget5	AUTOGADGET 	280,13+4*14,165,10,3,1,<"Window To Back">,5,Gadget6
	even
Gadget6	AUTOGADGET 	280,13+5*14,165,10,3,1,<"Clear Pointer">,6,Gadget7
	even
Gadget7	AUTOGADGET 	280,13+6*14,165,10,3,1,<"Redraw Frame">,7,Gadget8
	even
Gadget8	AUTOGADGET 	280,13+7*14,165,10,3,1,<"Kill Screen&Windows">,8,Gadget9
	even
Gadget9	AUTOGADGET 	280,13+8*14,165,10,3,1,<"Refresh Gadgets">,9,Gadget10
	even
Gadget10	AUTOGADGET 	280,13+9*14,165,10,3,1,<"Modify IDCMP">,10,Gadget11
	even
Gadget11	AUTOGADGET 	280,13+10*14,165,10,1,3,<"About Fenster">,11,Gadget12
	even



Gadget12	dc.l	Gadget13
	dc.w	55,185+3,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G12_box
	dc.l	0,G12_Text,0,G12_Info
	dc.w	12,0,0
G12_box	BOX	-5,-4,36,12,1,G12_Box2
	even
G12_Box2	BOX	-5,-4,-55,12,1,0
	even
G12_Text	TEXT	-50,0,3,<"min.X">
	even
G12_Info	dc.l	G12_Puffer,G12_Undo
	dc.w	0,4
	ds.b	si_SIZEOF
G12_Puffer	ds.b	6
G12_Undo	ds.b	6

Gadget13	dc.l	Gadget14
	dc.w	5*8+150-45+1,185+3,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G12_box
	dc.l	0,G13_Text,0,G13_Info
	dc.w	13,0,0
	even
G13_Text	TEXT	-50,0,3,<"min.Y">
	even
G13_Info	dc.l	G13_Puffer,G13_Undo
	dc.w	0,4
	ds.b	si_SIZEOF
G13_Puffer	ds.b	6
G13_Undo	ds.b	6

Gadget14	dc.l	Gadget15
	dc.w	5*8+250-10-45+2,185+3,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G12_box
	dc.l	0,G14_Text,0,G14_Info
	dc.w	14,0,0
	even
G14_Text	TEXT	-50,0,3,<"max.X">
	even
G14_Info	dc.l	G14_Puffer,G14_Undo
	dc.w	0,4
	ds.b	si_SIZEOF
G14_Puffer	ds.b	6
G14_Undo	ds.b	6

Gadget15	dc.l	Gadget16
	dc.w	5*8+350-20-45+3,185+3,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G12_box
	dc.l	0,G15_Text,0,G15_Info
	dc.w	15,0,0
	even
G15_Text	TEXT	-53,0,3,<"max.Y">
	even
G15_Info	dc.l	G15_Puffer,G15_Undo
	dc.w	0,4
	ds.b	si_SIZEOF
G15_Puffer	ds.b	6
G15_Undo	ds.b	6
Gadget16	dc.l	Gadget17
	dc.w	5*8+450-30-45+4,185+3,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G16_box
	dc.l	0,G16_Text,0,G16_Info
	dc.w	16,0,0
	even
G16_box	BOX	-5,-4,35,12,1,G16_Box2
	even
G16_Box2	BOX	-5,-4,-55,12,1,0
	even
G16_Text	TEXT	-50,0,3,<"BPen">
	even
G16_Info	dc.l	G16_Puffer,G16_Undo
	dc.w	0,3
	ds.b	si_SIZEOF
G16_Puffer	ds.b	6
G16_Undo	ds.b	6

Gadget17	dc.l	Gadget18
	dc.w	55,185+3-16,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G12_box
	dc.l	0,G17_Text,0,G17_Info
	dc.w	17,0,0
G17_Text	TEXT	-50,0,3,<"X">
	even
G17_Info	dc.l	G17_Puffer,G17_Undo
	dc.w	0,4
	ds.b	si_SIZEOF
G17_Puffer	ds.b	6
G17_Undo	ds.b	6

Gadget18	dc.l	Gadget19
	dc.w	5*8+150-45+1,185+3-16,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G12_box
	dc.l	0,G18_Text,0,G18_Info
	dc.w	18,0,0
	even
G18_Text	TEXT	-50,0,3,<"Y">
	even
G18_Info	dc.l	G18_Puffer,G18_Undo
	dc.w	0,4
	ds.b	si_SIZEOF
G18_Puffer	ds.b	6
G18_Undo	ds.b	6

Gadget19	dc.l	Gadget20
	dc.w	5*8+250-10-45+2,185+3-16,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G12_box
	dc.l	0,G19_Text,0,G19_Info
	dc.w	19,0,0
	even
G19_Text	TEXT	-50,0,3,<"Width">
	even
G19_Info	dc.l	G19_Puffer,G19_Undo
	dc.w	0,4
	ds.b	si_SIZEOF
G19_Puffer	ds.b	6
G19_Undo	ds.b	6

Gadget20	dc.l	Gadget21
	dc.w	5*8+350-20-45+3,185+3-16,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G12_box
	dc.l	0,G20_Text,0,G20_Info
	dc.w	20,0,0
	even
G20_Text	TEXT	-53,0,3,<"Height">
	even
G20_Info	dc.l	G20_Puffer,G20_Undo
	dc.w	0,4
	ds.b	si_SIZEOF
G20_Puffer	ds.b	6
G20_Undo	ds.b	6
Gadget21	dc.l	Gadget22	
	dc.w	5*8+450-30-45+4,185+3-16,41,12
	dc.w	GADGHCOMP,RELVERIFY!LONGINT,STRGADGET
	dc.l	G16_box
	dc.l	0,G21_Text,0,G21_Info
	dc.w	21,0,0
	even
G21_Text	TEXT	-50,0,3,<"DPen">
	even
G21_Info	dc.l	G21_Puffer,G21_Undo
	dc.w	0,3
	ds.b	si_SIZEOF
G21_Puffer	ds.b	6
G21_Undo	ds.b	6
	even
Gadget22	dc.l	0
	dc.w	10,32-6,240+16,128+8
	dc.w	GADGHNONE,RELVERIFY!LONGINT,BOOLGADGET
	dc.l	0
	dc.l	0,0,0,0
	dc.w	22,0,0
	even




Windowdef3	dc.w	(454-300)/2,25,300,120
	dc.b	-1,-1
	dc.l	GADGETUP
	dc.l	WINDOWDRAG!ACTIVATE!SMART_REFRESH
	dc.l	GadgetAbout
	dc.l	0
	dc.l	W3_Title
	dc.l	0,0
	dc.w	0,0,0,0,CUSTOMSCREEN
W3_Title	dc.b	"        » ABOUT  FENSTER «           ",0
	even
GadgetAbout	AUTOGADGET 	20,100,260,12,3,1,<"Exit">,0,0
	even



Window2	dc.l	0


ABOUT	lea.l	Windowdef3,a0		; about FENSTER
	move.l	ScreenPtr1,nw_Screen(a0)	
	CALLINT	OpenWindow
	tst.l	d0
	beq	wait
	move.l	d0,Window2

WindowPointer set Window2

	SETAPEN	#2
	RECTFILL	#2,#10,#297,#118

	SETDRMD	#RP_JAM1
	WRITE	#6+((290-23*8)/2),#20+1,#0,<"RF-Tools : FENSTER V1.0">
	WRITE	#6+((290-31*8)/2),#29+1,#0,<"This utility is public domain !">
	WRITE	#6+((290-24*8)/2),#40+1,#0,<"by: Roger Fischlin  ">
	WRITE	#6+((290-24*8)/2),#49+1,#0,<"    Steigerwaldweg 6">
	WRITE	#6+((290-24*8)/2),#58+1,#0,<"    D-6450 Hanau 7">
	WRITE	#6+((290-24*8)/2),#67+1,#0,<"    West Germany">
	WRITE	#6+((290-24*8)/2),#76+1,#0,<"    Phone:(06181) 650266">
	WRITE	#6+((290-33*8)/2),#86+1,#0,<"What about reading the doc file ?">


	WRITE	#5+((290-23*8)/2),#20,#1,<"RF-Tools : FENSTER V1.0">
	WRITE	#5+((290-31*8)/2),#29,#1,<"This utility is public domain !">
	WRITE	#5+((290-24*8)/2),#40,#3,<"by: Roger Fischlin  ">
	WRITE	#5+((290-24*8)/2),#49,#3,<"    Steigerwaldweg 6">
	WRITE	#5+((290-24*8)/2),#58,#3,<"    D-6450 Hanau 7">
	WRITE	#5+((290-24*8)/2),#67,#3,<"    West Germany">
	WRITE	#5+((290-24*8)/2),#76,#3,<"    Phone:(06181) 650266">
	WRITE	#5+((290-33*8)/2),#86,#1,<"What about reading the doc file ?">
	
	lea.l	GadgetAbout,a0
	move.l	Window2,a1
	sub.l	a2,a2
	CALLINT	RefreshGadgets


	move.l	Window2,a0		
	move.l	wd_UserPort(a0),a0
	CALLEXEC	WaitPort

	move.l	Window2,a0
	CALLINT	CloseWindow
	bra	wait


Zeile	dc.b	"                      ... x ..     ",0

	even


* Ask User to select screen .... 
	
WindowPointer set Window1


ShowScreen	WRITE	#10,#20,#2,<"        Select Screen">
	WRITE	#11,#19,#1,<"        Select Screen">
	WRITE	#10,#26,#2,<"--------------------------------">
	WRITE	#11,#25,#1,<"--------------------------------">
	
	SETAPEN	#3
	moveq.l	#0,d5		; get pointer to first screen
	move.l	_IntuitionBase,a6
	move.l	ib_FirstScreen(a6),a5
	lea.l	Pointer,a3
	clr.l	Anzahl
	clr.l	Top

.SS1	move.l	sc_DefaultTitle(a5),a4	; get screen title
	lea.l	Zeile,a0		; up to 32 characters
	move.l	#31,d0
.SS5	move.b	#" ",(a0)+
	dbra	d0,.SS5
	move.b	#"x",Zeile+59-32
	lea.l	Zeile,a0

.SS2	tst.b	(a4)		; leave out spaces
	beq	.SS3
	cmp.b	#" ",(a4)+
	beq	.SS2
	tst.b	-(a4)
	beq	.SS3
	move.l	#21,d0
.SS4	move.b	(a4)+,d1
	beq	.SS3
	move.b	d1,(a0)+
	dbra	d0,.SS4

.SS3	moveq.l	#0,d0		; write screen width & height
	move.w	sc_Width(a5),d0
	lea.l	Zeile+54-32,a0
	bsr	MakeZahl	
	moveq.l	#0,d0
	move.w	sc_Height(a5),d0
	lea.l	Zeile+60-32,a0
	bsr	MakeZahl	
		


	move.l	Window1,a1		
	move.l	wd_RPort(a1),a1
	move.l	#10,d0
	move.l	d5,d1
	lsl.l	#3,d1
	add.l	#32,d1
	CALLGRAF	Move
	lea.l	Zeile,a0
	move.l	Window1,a1
	move.l	wd_RPort(a1),a1
	move.l	#33,d0
	CALLGRAF	Text
	add.l	#1,Anzahl
	
	move.l	a5,(a3)+		; any more screens ?
	move.l	(a5),a5
	cmp.l	#0,a5
	beq	.SS6
	
	addq	#1,d5
	cmp.w	#14,d5		; up to 14 screens (DID YOU HAVE HAD MORE THAN 14 SCREENS ?!?)
	bne	.SS1
.SS6	rts

Top	dc.l	0		; nummer of first pointer on display
Anzahl	dc.l	0		; number of pointers displayed
FENSTER	dc.l	0		; pointer to current window
BILDSCHIRM	dc.l	0		; pointer to current screen
Pointer	ds.l	20*5		; array containing the window pointers 


MakeZahl	moveq.l	#3,d2		; convert number (<1024)  into ASCII text 
	moveq.l	#0,d3
	lea.l	.Potenzen,a1
.MZ1	move.b	#"0"-1,d1
.MZ2	addq	#1,d1
	sub.l	(a1),d0
	bcc	.MZ2
	add.l	(a1)+,d0
	tst.b	d2
	beq	.MZ3
	cmp.b	#"0",d1
	beq	.MZ4
	moveq.l	#1,d3
	bra	.MZ3
.MZ4	tst.b	d3
	bne	.MZ3
	move.b	#" ",d1
.MZ3	move.b	d1,(a0)+
	dbra	d2,.MZ1
	rts
.Potenzen	dc.l	1000
	dc.l	100
	dc.l	10
	dc.l	1

MakeZahl3	moveq.l	#2,d2	; convert number (<1000)  into ASCII text
	moveq.l	#0,d3
	lea.l	.Potenzen,a1
.MZ1	move.b	#"0"-1,d1
.MZ2	addq	#1,d1
	sub.l	(a1),d0
	bcc	.MZ2
	add.l	(a1)+,d0
	tst.b	d2
	beq	.MZ3
	cmp.b	#"0",d1
	beq	.MZ4
	moveq.l	#1,d3
	bra	.MZ3
.MZ4	tst.b	d3
	beq	.MZ5
.MZ3	move.b	d1,(a0)+
.MZ5	dbra	d2,.MZ1
	clr.b	(a0)
	rts
.Potenzen	dc.l	100
	dc.l	10
	dc.l	1

MakeZahl2	moveq.l	#1,d2	; convert number (<99)  into ASCII text
	moveq.l	#0,d3
	lea.l	.Potenzen,a1
.MZ1	move.b	#"0"-1,d1
.MZ2	addq	#1,d1
	sub.l	(a1),d0
	bcc	.MZ2
	add.l	(a1)+,d0
	tst.b	d2
	beq	.MZ3
	cmp.b	#"0",d1
	beq	.MZ4
	moveq.l	#1,d3
	bra	.MZ3
.MZ4	tst.b	d3
	beq	.MZ5
.MZ3	move.b	d1,(a0)+
.MZ5	dbra	d2,.MZ1
	clr.b	(a0)
	rts
.Potenzen	dc.l	10
	dc.l	1

GetLine	sub.w	gg_TopEdge(a4),d6	; calculate which screen / window was selected  
	lsr.w	#3,d6
	and.l	#$ffff,d6
	move.l	Anzahl,d0
	add.l	Top,d6
	cmp.l	d0,d6
	bge	.GetLine1
	lea.l	Pointer,a0
	lsl.l	#2,d6
	move.l	(a0,d6),a0		; a0 contains pointer
	moveq.l	#0,d0
	rts
.GetLine1	moveq.l	#-1,d0		; error - user selected space
	rts

ScreenSelect	jsr	GetLine		; list windows of selected screen	
	tst.l	d0
	bne	wait
	move.l	a0,a5
	move.l	a5,BILDSCHIRM
	
	SETAPEN	#0
	RECTFILL	#10,#10,#270,#165
	WRITE	#10,#26,#2,<"--------------------------------">
	WRITE	#11,#25,#1,<"--------------------------------">
	
.SS1	move.l	sc_DefaultTitle(a5),a4	; write screen title
	lea.l	Zeile,a0
	move.l	#31,d0
.SS5	move.b	#" ",(a0)+
	dbra	d0,.SS5
	move.b	#"x",Zeile+59-32
	lea.l	Zeile,a0

.SS2	tst.b	(a4)
	beq	.SS3
	cmp.b	#" ",(a4)+
	beq	.SS2
	tst.b	-(a4)
	beq	.SS3
	move.l	#21,d0
.SS4	move.b	(a4)+,d1
	beq	.SS3
	move.b	d1,(a0)+
	dbra	d0,.SS4

.SS3	moveq.l	#0,d0
	move.w	sc_Width(a5),d0
	lea.l	Zeile+54-32,a0
	bsr	MakeZahl	
	moveq.l	#0,d0
	move.w	sc_Height(a5),d0
	lea.l	Zeile+60-32,a0
	bsr	MakeZahl	
		

	SETAPEN	#2
	move.l	Window1,a1
	move.l	wd_RPort(a1),a1
	move.l	#10+1,d0
	move.l	#19+1,d1
	CALLGRAF	Move
	lea.l	Zeile,a0
	move.l	Window1,a1
	move.l	wd_RPort(a1),a1
	move.l	#33,d0
	CALLGRAF	Text
	
	SETAPEN	#1
	move.l	Window1,a1
	move.l	wd_RPort(a1),a1
	move.l	#10,d0
	move.l	#19,d1
	CALLGRAF	Move
	lea.l	Zeile,a0
	move.l	Window1,a1
	move.l	wd_RPort(a1),a1
	move.l	#33,d0
	CALLGRAF	Text

	move.l	#1,Mode


GetWindows	SETAPEN	#0		; storew all windows on the screen in array and print their names 
	RECTFILL	#10,#28,#270,#165
	move.l	BILDSCHIRM,a5
	clr.l	FENSTER		
	lea.l	Pointer,a1
	move.l	#20*5,d0
	clr.l	Top
	clr.l	Anzahl
	clr.l	Pointer
	move.l	sc_FirstWindow(a5),a5
.Loop	cmp.l	#0,a5
	beq	.Loop2
.Loop3	move.l	a5,(a1)+
	add.l	#1,Anzahl
	move.l	(a5),a5
	dbra	d0,.Loop
.Loop2	move.l	Pointer,FENSTER	; define first window as already selected

	jsr	FillIn		; Fill in the gadgets on the bottom

ShowWindow	SETAPEN	#3
	SETBPEN	#0
	SETDRMD	#RP_JAM2

	move.l	Window1,a1
	move.l	wd_RPort(a1),a1
	move.l	#10,d0
	move.l	#32,d1
	CALLGRAF	Move
	lea.l	ClearZeile,a0
	move.l	Window1,a1
	move.l	wd_RPort(a1),a1
	move.l	#32,d0
	CALLGRAF	Text


	moveq.l	#0,d5
	lea.l	Pointer,a3
	move.l	Top,d4
	lsl.l	#2,d4
	add.l	d4,a3

.SS1	move.l	d5,d0
	add.l	Top,d0
	cmp.l	Anzahl,d0
	bge	.SS6
	
	SETBPEN	#0
	move.l	(a3)+,a5
	cmp.l	FENSTER,a5
	bne	.SS0
	SETBPEN	#2

.SS0	move.l	wd_Title(a5),a4	; title up to 31 characters
	lea.l	Zeile,a0
	move.l	#31,d0
.SS5	move.b	#" ",(a0)+
	dbra	d0,.SS5
	lea.l	Zeile,a0

.SS2	tst.b	(a4)
	beq	.SS3
	cmp.b	#" ",(a4)+
	beq	.SS2
	tst.b	-(a4)
	beq	.SS3
	move.l	#31,d0
.SS4	move.b	(a4)+,d1
	beq	.SS3
	move.b	d1,(a0)+
	dbra	d0,.SS4

.SS3	
	move.l	Window1,a1
	move.l	wd_RPort(a1),a1
	move.l	#10,d0
	move.l	d5,d1
	lsl.l	#3,d1
	add.l	#32,d1
	CALLGRAF	Move
	lea.l	Zeile,a0
	move.l	Window1,a1
	move.l	wd_RPort(a1),a1
	move.l	#32,d0
	CALLGRAF	Text

	addq	#1,d5
	cmp.w	#17,d5
	bne	.SS1
.SS6	SETDRMD	#RP_JAM1
	bra	wait


ClearZeile	dc.b	"                                     "
	even

WindowSelect	jsr	GetLine	; which window was selected ?	
	tst.l	d0
	bne	wait
	move.l	a0,FENSTER
	jsr	FillIn

	bra	ShowWindow


FRONT	move.l	FENSTER,a0	; move window to front
	cmp.l	#0,a0
	beq	Error
	CALLINT	WindowToFront
	bra	wait
BACK	move.l	FENSTER,a0	;  "    "     " back
	cmp.l	#0,a0
	beq	Error
	CALLINT	WindowToBack
	bra	wait
CLEAR	move.l	FENSTER,a0	; clear pointer
	cmp.l	#0,a0
	beq	Error
	CALLINT	ClearPointer
	bra	wait

NewLimits	move.l	FENSTER,a0	; define new limits
	cmp.l	#0,a0
	beq	Error
	moveq.l	#0,d0
	moveq.l	#0,d1
	moveq.l	#0,d2
	moveq.l	#0,d3

	move.w	G12_Info+si_LongInt+2,d0	
	move.w	G13_Info+si_LongInt+2,d1	
	move.w	G14_Info+si_LongInt+2,d2	
	move.w	G15_Info+si_LongInt+2,d3
	
	CALLINT	WindowLimits
	bra	wait	

NewPen	move.l	FENSTER,a0 	; define new pens
	cmp.l	#0,a0
	beq	Error
	move.b	G16_Info+si_LongInt+3,wd_BlockPen(a0)
	move.b	G21_Info+si_LongInt+3,wd_DetailPen(a0)


FRAME	move.l	FENSTER,a0
	cmp.l	#0,a0
	beq	Error
	CALLINT	RefreshWindowFrame	; use them !
	bra	wait
REFRESH	move.l	FENSTER,a1		; refresh gadgets (if there are any to be refreshed !)
	cmp.l	#0,a1
	beq	Error
	move.l	wd_FirstGadget(a1),a0
	sub.l	a2,a2
	cmp.l	#0,a0
	beq	Error
	CALLINT	RefreshGadgets
	bra	wait

FillIn	move.l	FENSTER,a6		; put data from window into longint gadgets
	cmp.l	#0,a6
	beq	.Label1
	
	lea.l	G12_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_MinWidth(a6),d0

	move.l	d0,G12_Info+si_LongInt

	bsr	MakeZahl3
	
	lea.l	G13_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_MinHeight(a6),d0
	move.l	d0,G13_Info+si_LongInt

	bsr	MakeZahl3

	lea.l	G14_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_MaxWidth(a6),d0
	cmp.w	#999,d0
	bls	.Label3
	moveq.l	#0,d0
.Label3	move.l	d0,G14_Info+si_LongInt

	bsr	MakeZahl3

	lea.l	G15_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_MaxHeight(a6),d0
	cmp.w	#999,d0
	bls	.Label4
	moveq.l	#0,d0
.Label4	move.l	d0,G15_Info+si_LongInt

	bsr	MakeZahl3

	lea.l	G17_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_LeftEdge(a6),d0
	move.l	d0,G17_Info+si_LongInt

	bsr	MakeZahl3

	lea.l	G18_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_TopEdge(a6),d0
	move.l	d0,G18_Info+si_LongInt

	bsr	MakeZahl3


	lea.l	G19_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_Width(a6),d0
	move.l	d0,G19_Info+si_LongInt

	bsr	MakeZahl3

	lea.l	G20_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_Height(a6),d0
	move.l	d0,G20_Info+si_LongInt

	bsr	MakeZahl3

	
	lea.l	G16_Puffer,a0
	moveq.l	#0,d0
	move.b	wd_BlockPen(a6),d0
	move.l	d0,G16_Info+si_LongInt

	bsr	MakeZahl2

	lea.l	G21_Puffer,a0
	moveq.l	#0,d0
	move.b	wd_DetailPen(a6),d0
	move.l	d0,G21_Info+si_LongInt

	bsr	MakeZahl2

	lea.l	Gadget12,a0
	move.l	Window1,a1
	sub.l	a2,a2
	CALLINT	RefreshGadgets
	rts

.Label1	clr.b	G12_Puffer
	clr.b	G13_Puffer
	clr.b	G14_Puffer
	clr.b	G15_Puffer
	clr.b	G16_Puffer
	clr.b	G17_Puffer
	clr.b	G18_Puffer
	clr.b	G19_Puffer
	clr.b	G20_Puffer
	clr.b	G21_Puffer
	
	lea.l	Gadget12,a0
	move.l	Window1,a1
	sub.l	a2,a2
	CALLINT	RefreshGadgets
	rts



Windowdef4	dc.w	(454-300)/2,45,300,80
	dc.b	-1,-1
	dc.l	GADGETUP
	dc.l	WINDOWDRAG!ACTIVATE!SMART_REFRESH
	dc.l	GadgetGURU
	dc.l	0
	dc.l	W4_Title
	dc.l	0,0
	dc.w	0,0,0,0,CUSTOMSCREEN
W4_Title	dc.b	"          » ERROR MESSAGE «           ",0
	even
GadgetGURU	AUTOGADGET 	20,60,260,12,3,1,<"Exit">,0,0
	even

GURU	lea.l	Windowdef4,a0
	move.l	ScreenPtr1,nw_Screen(a0)	
	CALLINT	OpenWindow
	tst.l	d0
	beq	Undo
	move.l	d0,Window2

WindowPointer set Window2

	SETAPEN	#2
	RECTFILL	#2,#10,#297,#78

	SETDRMD	#RP_JAM1
	WRITE	#6+((290-32*8)/2),#20+1,#0,<"Sorry - But if I moved / resized">
	WRITE	#6+((290-29*8)/2),#30+1,#0,<"the window , the system would">
	WRITE	#6+((290-30*8)/2),#40+1,#0,<"crash !!!  Check screen size !">

	WRITE	#5+((290-32*8)/2),#20,#1,<"Sorry - But if I moved / resized">
	WRITE	#5+((290-29*8)/2),#30,#1,<"the window , the system would">
	WRITE	#5+((290-30*8)/2),#40,#1,<"crash !!!  Check screen size !">


	
	lea.l	GadgetGURU,a0
	move.l	Window2,a1
	sub.l	a2,a2
	CALLINT	RefreshGadgets

	move.l	Window2,a0		
	move.l	wd_UserPort(a0),a0
	CALLEXEC	WaitPort

	move.l	Window2,a0
	CALLINT	CloseWindow

Undo	move.l	FENSTER,a6		; get current data (to undo illegal data) 
	lea.l	G17_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_LeftEdge(a6),d0
	move.l	d0,G17_Info+si_LongInt

	bsr	MakeZahl3

	lea.l	G18_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_TopEdge(a6),d0
	move.l	d0,G18_Info+si_LongInt

	bsr	MakeZahl3


	lea.l	G19_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_Width(a6),d0
	move.l	d0,G19_Info+si_LongInt

	bsr	MakeZahl3

	lea.l	G20_Puffer,a0
	moveq.l	#0,d0
	move.w	wd_Height(a6),d0
	move.l	d0,G20_Info+si_LongInt

	bsr	MakeZahl3

	lea.l	Gadget17,a0
	move.l	Window1,a1
	sub.l	a2,a2
	CALLINT	RefreshGadgets

	bra	wait

	
WindowPointer set Window1


A
MoveWindow	move.l	FENSTER,a0		; move window
	move.l	G17_Info+si_LongInt,d0
	move.l	G18_Info+si_LongInt,d1

	move.l	d0,d2
	move.l	d1,d3

	add.w	wd_Width(a0),d2
	add.w	wd_Height(a0),d3

	move.l	wd_WScreen(a0),a1

	cmp.w	sc_Width(a1),d2	; check if they are possible !!!!
	bhi	GURU
	cmp.w	sc_Height(a1),d3
	bhi	GURU
	
	sub.w	wd_LeftEdge(a0),d0
	sub.w	wd_TopEdge(a0),d1

	CALLINT	MoveWindow
	bra	wait

SizeWindow	move.l	FENSTER,a0		; re-size window
	move.l	G19_Info+si_LongInt,d0
	move.l	G20_Info+si_LongInt,d1

	move.l	d0,d2
	move.l	d1,d3

	add.w	wd_LeftEdge(a0),d2
	add.w	wd_TopEdge(a0),d3

	move.l	wd_WScreen(a0),a1

	cmp.w	sc_Width(a1),d2	; check if they are possible !!!!
	bhi	GURU
	cmp.w	sc_Height(a1),d3
	bhi	GURU
	
	sub.w	wd_Width(a0),d0
	sub.w	wd_Height(a0),d1

	CALLINT	SizeWindow
	bra	wait	
	


Windowdef5	dc.w	275,30,174,100
	dc.b	-1,-1
	dc.l	GADGETUP
	dc.l	WINDOWDRAG!ACTIVATE!SMART_REFRESH
	dc.l	GadgetKILL1
	dc.l	0
	dc.l	W5_Title
	dc.l	0,0
	dc.w	0,0,0,0,CUSTOMSCREEN
W5_Title	dc.b	" » KILL WINDOW «     ",0
	even
GadgetKILL1	AUTOGADGET 	10,60,154,12,3,1,<"YES !">,0,GadgetKILL2
	even
GadgetKILL2	AUTOGADGET 	10,80,154,12,3,1,<"No - forget it !">,1,0
	even

KillWindow	tst.l	FENSTER
	beq	Error

	lea.l	Windowdef5,a0
	move.l	ScreenPtr1,nw_Screen(a0)	
	CALLINT	OpenWindow
	tst.l	d0
	beq	KILL_IT
	move.l	d0,Window2

WindowPointer set Window2

	SETAPEN	#2
	RECTFILL	#2,#10,#171,#98

	SETDRMD	#RP_JAM1
	WRITE	#1+((174-18*8)/2),#20+1,#0,<"Do you really want">
	WRITE	#1+((174-18*8)/2),#30+1,#0,<"to    close    the">
	WRITE	#1+((174-18*8)/2),#40+1,#0,<"     window ?     ">

	WRITE	#0+((174-18*8)/2),#20,#1,<"Do you really want">
	WRITE	#0+((174-18*8)/2),#30,#1,<"to    close    the">
	WRITE	#0+((174-18*8)/2),#40,#1,<"     window ?     ">
	

	lea.l	GadgetKILL1,a0
	move.l	Window2,a1
	sub.l	a2,a2
	CALLINT	RefreshGadgets

	move.l	Window2,a0		
	move.l	wd_UserPort(a0),a0
	move.l	a0,a5
	CALLEXEC	WaitPort		
	move.l	a5,a0
	CALLEXEC	GetMsg		; get message
	move.l	d0,a1	
	move.l	im_IAddress(a1),a4
	CALLEXEC 	ReplyMsg		; reply message		

	tst.w	gg_GadgetID(a4)
	beq	KILL_IT

	move.l	Window2,a0
	CALLINT	CloseWindow
	bra	wait

KILL_IT	move.l	Window2,a0
	CALLINT	CloseWindow
	move.l	FENSTER,a0
	CALLINT	CloseWindow
	bra	GetWindows

Windowpointer	set Window1


	

AUTOGADGET2	macro
* \1,\2    x,y
* \3,\4    size
* \5,\6    colors (text & Box)
* \7       Text
* \8       ID
* \9       NextGadget

	dc.l	\9
	dc.w	\1,\2,\3,\4
	dc.w	GADGHCOMP!SELECTED,RELVERIFY!TOGGLESELECT,BOOLGADGET
	dc.l	AG2adget\@_Box
	dc.l	0,AG2adget\@_Text,0,0
	dc.w	\8,0,0
AG2adget\@_Box	BOX	-1,-1,\3,\4,\5,0
	even

AG2_T_String\@	dc.b	\7,0
AG2_T_String\@_End	
	even
AG2adget\@_Text	dc.b	2,0,RP_JAM1,0
	dc.w	(\3-(AG2_T_String\@_End-AG2_T_String\@-1)*8)/2+1,((\4-8)/2)+1
	dc.l	TOPAZ_80,AG2_T_String\@,AG2_Text2_\@

AG2_Text2_\@	dc.b	\6,0,RP_JAM1,0
	dc.w	(\3-(AG2_T_String\@_End-AG2_T_String\@-1)*8)/2),(\4-8)/2
	dc.l	TOPAZ_80,AG2_T_String\@,0

	
	IFEQ	FontFlag

TOPAZ_80	dc.l	T_80name
	dc.w	TOPAZ_EIGHTY
	dc.b	FS_NORMAL,FPF_ROMFONT
	even
T_80name	dc.b	"topaz.font",0

FontFlag	set	1
	endc
	endm




Windowdef6	dc.w	460-300-10,0,300,199
	dc.b	-1,-1
	dc.l	GADGETUP
	dc.l	WINDOWDRAG!ACTIVATE!SMART_REFRESH
	dc.l	GadgetIDCMP
	dc.l	0
	dc.l	W6_Title
	dc.l	0,0
	dc.w	0,0,0,0,CUSTOMSCREEN
W6_Title	dc.b	"          » IDCMP FLAGS «                  ",0
	even
GadgetIDCMP	AUTOGADGET2 	20,20,120,10,3,1,<"SIZEVERIFY">,0,GadgetIDCMP2
	even
GadgetIDCMP2	AUTOGADGET2 	20,35,120,10,3,1,<"NEWSIZE">,1,GadgetIDCMP3
	even
GadgetIDCMP3	AUTOGADGET2 	20,50,120,10,3,1,<"REFRESHWINDOW">,2,GadgetIDCMP4
	even
GadgetIDCMP4	AUTOGADGET2 	20,65,120,10,3,1,<"MOUSEBUTTONS">,3,GadgetIDCMP5
	even
GadgetIDCMP5	AUTOGADGET2 	20,80,120,10,3,1,<"MOUSEMOVE">,4,GadgetIDCMP6
	even
GadgetIDCMP6	AUTOGADGET2 	20,95,120,10,3,1,<"GADGETDOWN">,5,GadgetIDCMP7
	even
GadgetIDCMP7	AUTOGADGET2 	20,110,120,10,3,1,<"GADGETUP">,6,GadgetIDCMP8
	even
GadgetIDCMP8	AUTOGADGET2 	20,125,120,10,3,1,<"REQSET">,7,GadgetIDCMP9
	even
GadgetIDCMP9	AUTOGADGET2 	20,140,120,10,3,1,<"MENUPICK">,8,GadgetIDCMP10
	even
GadgetIDCMP10	AUTOGADGET2 	20,155,120,10,3,1,<"CLOSEWINDOW">,9,GadgetIDCMP11
	even
GadgetIDCMP11	AUTOGADGET2 	20,170,120,10,3,1,<"RAWKEY">,10,GadgetIDCMP12
	even
GadgetIDCMP12	AUTOGADGET2 	20,185,120,10,3,1,<"REQVERIFY">,11,GadgetIDCMP13
	even

GadgetIDCMP13	AUTOGADGET2 	160,20,120,10,3,1,<"REQCLEAR">,12,GadgetIDCMP14
	even
GadgetIDCMP14	AUTOGADGET2 	160,35,120,10,3,1,<"MENUVERIFY">,13,GadgetIDCMP15
	even
GadgetIDCMP15	AUTOGADGET2 	160,50,120,10,3,1,<"NEWPREFS">,14,GadgetIDCMP16
	even
GadgetIDCMP16	AUTOGADGET2 	160,65,120,10,3,1,<"DISKINSERTED">,15,GadgetIDCMP17
	even
GadgetIDCMP17	AUTOGADGET2 	160,80,120,10,3,1,<"DISKREMOVED">,16,GadgetIDCMP18
	even
GadgetIDCMP18	AUTOGADGET2 	160,95,120,10,3,1,<"WBENCHMESSAGE">,17,GadgetIDCMP19
	even
GadgetIDCMP19	AUTOGADGET2 	160,110,120,10,3,1,<"ACTIVEWINDOW">,18,GadgetIDCMP20
	even
GadgetIDCMP20	AUTOGADGET2 	160,125,120,10,3,1,<"INACTIVEWINDOW">,19,GadgetIDCMP21
	even
GadgetIDCMP21	AUTOGADGET2 	160,140,120,10,3,1,<"DELTAMOVE">,20,GadgetIDCMP22
	even
GadgetIDCMP22	AUTOGADGET2 	160,155,120,10,3,1,<"VANILLAKEY">,21,GadgetIDCMP23
	even
GadgetIDCMP23	AUTOGADGET2 	160,170,120,10,3,1,<"INTUITICKS">,22,GadgetIDCMP_CA
	even

GadgetIDCMP_CA	AUTOGADGET 	160,185,60,10,1,3,<"Cancel">,100,GadgetIDCMP_OK
	even

GadgetIDCMP_OK	AUTOGADGET 	240,185,40,10,1,3,<"OK">,101,0
	even






IDCMP	tst.l	FENSTER
	beq	Error

	move.l	FENSTER,a0
	move.l	wd_IDCMPFlags(a0),.IDCMPFlags
	move.l	wd_IDCMPFlags(a0),d1
	

	moveq.l	#0,d0		; if bit is 1, set gadget selected
	lea.l	.GadgetList,a0
.Label1	move.l	(a0)+,a1
	btst	d0,d1
	bne	.Label2
	and.w	#$ffff-SELECTED,gg_Flags(a1)
	bra	.Label3
.Label2	or.w	#SELECTED,gg_Flags(a1)
.Label3	addq	#1,d0
	cmp.b	#23,d0
	bne	.Label1


	
	lea.l	Windowdef6,a0
	move.l	ScreenPtr1,nw_Screen(a0)	
	CALLINT	OpenWindow
	tst.l	d0
	beq	wait
	move.l	d0,Window2

WindowPointer set Window2

	SETAPEN	#2
	RECTFILL	#2,#10,#297,#197

	
	lea.l	GadgetIDCMP,a0
	move.l	Window2,a1
	sub.l	a2,a2
	CALLINT	RefreshGadgets


	


.wait	move.l	Window2,a0		
	move.l	wd_UserPort(a0),a0
	move.l	a0,a5
	CALLEXEC	WaitPort		
	move.l	a5,a0
	CALLEXEC	GetMsg		; get message
	move.l	d0,a1	
	move.l	im_IAddress(a1),a4
	CALLEXEC 	ReplyMsg		; reply message		

	moveq.l	#0,d0		
	move.w	gg_GadgetID(a4),d0

	cmp.w	#100,d0
	beq	.Quit
	cmp.w	#101,d0
	beq	.Change
	
	move.l	.IDCMPFlags,d1
	bchg	d0,d1
	move.l	d1,.IDCMPFlags
	bra	.wait
.Change	move.l	FENSTER,a0
	move.l	.IDCMPFlags,d0
	CALLINT	ModifyIDCMP
	
.Quit	move.l	Window2,a0
	CALLINT	CloseWindow
	
	bra	wait

.GadgetList	dc.l	GadgetIDCMP
	dc.l	GadgetIDCMP2
	dc.l	GadgetIDCMP3
	dc.l	GadgetIDCMP4
	dc.l	GadgetIDCMP5
	dc.l	GadgetIDCMP6
	dc.l	GadgetIDCMP7
	dc.l	GadgetIDCMP8
	dc.l	GadgetIDCMP9
	dc.l	GadgetIDCMP10
	dc.l	GadgetIDCMP11
	dc.l	GadgetIDCMP12
	dc.l	GadgetIDCMP13
	dc.l	GadgetIDCMP14
	dc.l	GadgetIDCMP15
	dc.l	GadgetIDCMP16
	dc.l	GadgetIDCMP17
	dc.l	GadgetIDCMP18
	dc.l	GadgetIDCMP19
	dc.l	GadgetIDCMP20
	dc.l	GadgetIDCMP21
	dc.l	GadgetIDCMP22
	dc.l	GadgetIDCMP23
	
.IDCMPFlags	dc.l	0

Windowdef9	dc.w	275,30,174,100
	dc.b	-1,-1
	dc.l	GADGETUP
	dc.l	WINDOWDRAG!ACTIVATE!SMART_REFRESH
	dc.l	GadgetKILL1
	dc.l	0
	dc.l	W9_Title
	dc.l	0,0
	dc.w	0,0,0,0,CUSTOMSCREEN
W9_Title	dc.b	" » KILL SCREEN «     ",0	



ALL	lea.l	Windowdef9,a0
	move.l	ScreenPtr1,nw_Screen(a0)	
	CALLINT	OpenWindow
	tst.l	d0
	beq	KILL_ALL
	move.l	d0,Window2

WindowPointer set Window2

	SETAPEN	#2
	RECTFILL	#2,#10,#171,#98

	SETDRMD	#RP_JAM1
	WRITE	#1+((174-18*8)/2),#20+1,#0,<"Do you really want">
	WRITE	#1+((174-18*8)/2),#30+1,#0,<"to    close    the">
	WRITE	#1+((174-18*8)/2),#40+1,#0,<"     screen ?     ">

	WRITE	#0+((174-18*8)/2),#20,#1,<"Do you really want">
	WRITE	#0+((174-18*8)/2),#30,#1,<"to    close    the">
	WRITE	#0+((174-18*8)/2),#40,#1,<"     screen ?     ">
	

	lea.l	GadgetKILL1,a0
	move.l	Window2,a1
	sub.l	a2,a2
	CALLINT	RefreshGadgets

	move.l	Window2,a0		
	move.l	wd_UserPort(a0),a0
	move.l	a0,a5
	CALLEXEC	WaitPort		
	move.l	a5,a0
	CALLEXEC	GetMsg		; get message
	move.l	d0,a1	
	move.l	im_IAddress(a1),a4
	CALLEXEC 	ReplyMsg		; reply message		

	tst.w	gg_GadgetID(a4)
	beq	KILL_ALL

	move.l	Window2,a0
	CALLINT	CloseWindow
	bra	wait

KILL_ALL	
	move.l	BILDSCHIRM,a5

.Label1	move.l	sc_FirstWindow(a5),a0	; close window (if there are any windows left )
	cmp.l	#0,a0
	beq	.Label2
	CALLINT	CloseWindow
	bra	.Label1
.Label2	move.l	BILDSCHIRM,a0
	CALLINT	CloseScreen
	move.l	Window2,a0
	CALLINT	CloseWindow
	jmp	ChangeScreen



QUIT2	move.l	ScreenPtr1,a0
	CALLINT	CloseScreen

ende	move.l	#RECOVERY_ALERT,d0	; error message
	move.l	#30,d1
	lea.l	ErrorText,a0
	CALLINT	DisplayAlert
	moveq.l	#0,d0
	rts


ErrorText	dc.w	60
	dc.b	17
	dc.b	"FENSTER  :   ERROR !?!    I cannot open the screen / window !"
	dc.b 	0,0





Windowdef	dc.w	20,20,160,10
	dc.b	-1,-1
	dc.l	MENUPICK!CLOSEWINDOW
	dc.l	WINDOWDRAG!WINDOWCLOSE!ACTIVATE!SMART_REFRESH!WINDOWDEPTH
	dc.l	0
	dc.l	0
	dc.l	W_Title
	dc.l	0,0
	dc.w	0,0,0,0,WBENCHSCREEN
W_Title	dc.b	"Fenster      ",0
	even 
WindowPtr	dc.l	0

Init	lea.l	Windowdef,a0		; create window on WB	
	CALLINT	OpenWindow
	tst.l	d0
	beq	ende
	move.l	d0,WindowPtr


.wait	move.l	WindowPtr,a0		; wait .....
	move.l	wd_UserPort(a0),a0
	move.l	a0,a5
	CALLEXEC	WaitPort		
	move.l	a5,a0
	CALLEXEC	GetMsg		; get message
	move.l	d0,a1	
	move.l	im_Class(a1),d4	; get data
	CALLEXEC 	ReplyMsg		; reply message		
	cmp.l	#MENUPICK,d4		; right mouse button pressed ?
	beq	.FENSTER
	move.l	WindowPtr,a0
	CALLINT	CloseWindow
	rts
.FENSTER	jsr	Start		; open FENSTER
	bra	.wait

	
	




		

	

	

	
	





