**********************************************************************
*
*	WindowTest.ASM	Demoprogramm
*	22.10.91 by BRAINDEATH
*
* Dieses Programm öffnet ein Fenster auf der Workbench, gibt einen Text
* aus und wartet auf das Anklicken des Close-Gadgets.
*
* Tabulator-Größe : 08
*
;	Datenbereich des Programmes

	RSRESET
IntBase		RS.L	1	;Basisadresse intuition.library
GfxBase		RS.L	1	;Basisadresse graphics.library
WindowPtr	RS.L	1	;Zeiger auf Window-Struktur
RS_SIZE	EQU	__RS		;Größe des Datenbereichs

**********************************************************************

	; Macro zur Vereinfachung des Aufrufs von Betriebssystem-
	; funktionen

CALL	MACRO
	IFEQ	NARG,2
	 IFND	\2Base
	  move.l Exec.w,a6
	 ELSE
	  move.l \2Base(a5),a6
	 ENDIF
	ENDIF
	jsr	\1(a6)
	ENDM

**********************************************************************

_LVOALLOCMEM	=	-198
_LVOFREEMEM	=	-210
_LVOOPENLIBRARY	=	-552
_LVOCLOSELIBRARY =	-414
_LVOOPENWINDOW	=	-204
_LVOCLOSEWINDOW	=	-72
_LVOSETAPEN	=	-342
_LVOSETBPEN	=	-348
_LVOMOVE	=	-240
_LVOTEXT	=	-60
_LVOWAITPORT	=	-384
_LVOGETMSG	=	-372
_LVOREPLYMSG	=	-378

MEMF_CLEAR	=	$010000
MEMF_PUBLIC	=	$000001

ACTIVATE	=	$1000
WINDOWCLOSE	=	$0008
WINDOWDEPTH	=	$0004
WINDOWDRAG	=	$0002
WINDOWSIZING	=	$0001

CLOSEWINDOW	=	$0200

WBENCHSCREEN	=	$0001

wd_RPort	=	50
wd_UserPort	=	86
im_IDCMP	=	20

**************************************************************************
*
*	WB/CLI Startup Includen !

	Include	"MAXON ASM 1.1:Demos/Startup.ASM" ;WB/CLI-Startup
Start
	movem.l	d0-d1/a0,-(sp)		;Startinformationen retten !
	move.l	#RS_SIZE,d0		;Speicher
	move.l	#MEMF_CLEAR|MEMF_PUBLIC,d1
	CALL	_LVOALLOCMEM,EXEC	;holen
	move.l	d0,a5			;und nach a5 (BASEREG)
	tst.l	d0			;Fehler ?
	beq  	.Err1			;jawoll !

	lea	IntName,a1		;Lib-Name
	moveq	#33,d0			;Min. Version
	CALL	_LVOOPENLIBRARY		;öffnen
	move.l	d0,IntBase(a5)		;Basis merken
	beq  	.Err2			;Fehler !

	lea	GfxName,a1		;Lib-Name
	moveq	#33,d0			;Min. Version
	CALL	_LVOOPENLIBRARY		;öffnen
	move.l	d0,GfxBase(a5)		;Basis merken
	beq  	.Err3			;Fehler !

	lea	NewWindow,a0		;Strukt. nach a0
	CALL	_LVOOPENWINDOW,INT	;öffnen
	move.l	d0,WindowPtr(a5)	;Pointer merken
	beq  	.Err3			;Fehler !

	move.l	d0,a2			;nach a2
	move.l	wd_RPort(a2),a2		;RastPort des Fensters
	move.l	a2,a1			;RP nach a1
	moveq	#1,d0			;Farbe #1
	CALL	_LVOSETAPEN,GFX		;als Textfarbe setzen

	move.l	a2,a1			;RP nach a1
	moveq	#0,d0			;Farbe #0
	CALL	_LVOSETBPEN		;als Hintergrundfarbe setzen

	move.l	a2,a1			;RP nach a1
	moveq	#30,d0			;X-Koord. = 30
	moveq	#40,d1			;Y-Koord. = 40
	CALL	_LVOMOVE		;Gfx-Cursor setzen

	move.l	a2,a1			;RP nach a1
	lea	Beispiel_Txt,a0		;den String nach a0
	move.l	a0,a2			;nach a2
	moveq	#-1,d0			;Zähler
.Loop2
	tst.b	(a2)+			;Anzahl Zeichen zählen
	dbeq	d0,.Loop2
	not.l	d0			;Länge in d0
	CALL	_LVOTEXT		;im Fenster ausgeben

	move.l	WindowPtr(a5),a2	;Window nach a2
	move.l	wd_UserPort(a2),a2	;Userport nach a2
.Loop1
	move.l	a2,a0			;nach a0
	CALL	_LVOWAITPORT,EXEC	;aus Message warten
	move.l	a2,a0			;Port nach a0
	CALL	_LVOGETMSG		;Message holen

	move.l	d0,a1			;Zeiger auf MSG nach a1
	move.l	im_IDCMP(a1),-(sp)	;IDCMP-Flags retten
	CALL	_LVOREPLYMSG		;Message beantworten
	move.l	(sp)+,d0		;IDCMP nach d0

	cmp.l	#CLOSEWINDOW,d0		;Close-Gadget ???
	bne.s	.Loop1			;nein,dann weiter warten !

.Err5
	move.l	WindowPtr(a5),a0	;Window nach a0
	CALL	_LVOCLOSEWINDOW,INT	;schließen
.Err4
	move.l	GfxBase(a5),a1		;Basis nach a1
	CALL	_LVOCLOSELIBRARY,EXEC	;schließen
.Err3
	move.l	IntBase(a5),a1		;Basis nach a1
	CALL	_LVOCLOSELIBRARY,EXEC	;schließen
.Err2
	move.l	a5,a1			;Mem nach a1
	move.l	#RS_SIZE,d0		;Größe
	CALL	_LVOFREEMEM,EXEC	;wieder freigeben
.Err1
	add.w	#12,sp			;SP korrigieren
	rts	

IntName		CString 'intuition.library'
GfxName		CString 'graphics.library'
WindowTitle	CString 'Fenster unter Intuition'
Beispiel_Txt	CString 'sind leicht zu programmieren !'
		even

NewWindow
	dw	0,0,320,80		;x,y,Width,Heigth
	db	0,1			;Detail-,Blockpen
	dl	CLOSEWINDOW		;IDCMP
 * Flags,die das Aussehen des Windows bestimmen
 dl	ACTIVATE|WINDOWCLOSE|WINDOWDEPTH|WINDOWDRAG|WINDOWCLOSE|WINDOWSIZING
	dl	0,0			;Gadgets,Checkmark
	dl	WindowTitle
	dl	0,0			;Screen,Bitmap
	dw	160,40			;Min. Width,Heigth
	dw	480,120			;Max. Width,Heigth
	dw	WBENCHSCREEN		;Window auf WB-Screen !




