	; Dies ist das File für die externen Routinen der Demo
	; "ScrollMe.m"
	
	; Wichtig : Die zu exportierenden Namen müssen groß 
	; geschrieben werden !

	Xdef	SCROLL
	Xdef	SETFONT
	Xdef	SETMODE
	Xdef	SETCOLOR
	Xdef	OPENWINDOW
	Xdef	CLOSEWINDOW

	Xref	Intbase		; IntuitionBase aus der Startup-Sequence

OPENWINDOW	Move.l	Intbase,a6	; Intuitionbase
		Move.l	#NewWindow,a0
		jsr	-204(a6)	; Fenster öffnen
		Move.l	d0,4(a7)	; Funktionsergebnis
		Move.l	d0,a0
		Move.l	$32(a0),Fenster	; RastPort sichern

	; Diskfont & GFX Library laden

		Move.l	4,a6
		Move.l	#GFXName,a1
		moveq	#0,d0
		jsr	-552(a6)
		Move.l	d0,GFXBase
		Move.l	#Diskname,a1
		moveq	#0,d0
		jsr	-552(a6)
		Move.l	d0,Diskbase





	; Font Courier laden
		
		Move.l 	d0,a6
		Move.l	#Font,a0
		jsr	-30(a6)
		Move.l	d0,Fadr
		Move.l	#Font1,a0
		jsr	-30(a6)
		Move.l	d0,Fadr1
		Rts


CLOSEWINDOW	Move.l	Intbase,a6	; Fenster schließen
		Move.l	4(a7),a0
		jsr	-72(a6)
		Move.l	GFXBase,a6
		Move.l	Fadr,a1		; Font schließen
		jsr	-78(a6)
		Move.l	4,a6		
		Move.l	GFXBase,a1
		jsr	-414(a6)
		Move.l	Diskbase,a1
		jsr	-414(a6)
		RTS

	; Hinweis zu der Varberechnung
	; Auf dem Stack (a7) liegt die RTS-Adresse
	; Es folgt 4(a7) die Adresse (!!) der  Boolean-Var
	; die in ScrollMe.m als VAR-Parameter bestimmt wurde
	; die wird negiert indem die Adresse geladen wird (1)
	; und der Wortinhalt (Boolean=2 Bytes lang) dieser 
	; Adresse mit NOT.W invertiert wird.


SETFONT:	Move.l	GFXBase,a6
		Move.l	Fadr,a0
		Move.l	Fenster,a1	; RastPort
		Move.l	4(a7),a2
		Not.w	(a2)
		Move.w	(a2),d0		; Bool'scher Wert (BIG)
		Beq.s	Ok1
		Move.l	Fadr1,a0
Ok1		Jsr	-66(a6)		; SetFont
		Rts
		


SETMODE:	Move.l	GFXBase,a6
		Moveq	#5,d0		; Invers+Jam2
		Move.l	Fenster,a1	; RastPort
		Move.l	4(a7),a2	
		Not.w	(a2)
		Move.w	(a2),d1		; Bool'scher Wert (BIG)
		Beq.s	Ok2
		Moveq	#1,d0
Ok2		Jsr	-354(a6)	; SetDrMd
		Rts

SETCOLOR:	Move.l	GFXBase,a6
		Moveq	#2,d0		; Invers+Jam2
		Move.l	Fenster,a1	; RastPort
		Move.l	4(a7),a2
		Not.w	(a2)
		Move.w	(a2),d1		; Bool'scher Wert (COLOR)
		Beq.s	Ok3
		Moveq	#1,d0
Ok3		Jsr	-342(a6)	; SetDrMd
		Rts

	; Eine einfache Scrollroutine, dient nur zur Demo
	; keine Feinabstimmung !!
	; Stack:	
	;	RTS.l Len.b 255 Zeichen


SCROLL:		Move.l	GFXBase,a6

		Lea	4(a7),a4	; Adresse Länge String
		Moveq	#9,d7		; Breitenzähler
		Moveq	#0,d6		; Zeichenzähler
		Move.b	(a4)+,d6
		beq.s	Ende

SLoop		Tst.l	d7		; Zeichen komplett ?
		Bne.s	Nein		;
		moveq	#28,d1		; y pos
		move.l	#384,d0		; x
		move.l	Fenster,a1
		jsr	-240(a6)	

		Move.l	a4,a0		; Adresse String
		Moveq	#1,d0		; 1 Zeichen
		Move.l	Fenster,a1	; Rport
		jsr	-54(a6)
		Move.l	d0,d7		; Breite Zeichen setzen

		Move.l	a4,a0		; Adresse String
		addq.l	#1,a4		; Ptr auf nächstes Zeichen
		Moveq	#1,d0		; 1 Zeichen
		Move.l	Fenster,a1	; Rport
		jsr	-60(a6)
		Subq.l	#1,d6		; 1 Zeichen weniger
		beq.s	Ende
		Bra.s	SLoop
Nein		Subq.l	#1,d7		; Ein Weiteres Bit
		Move.l	Fenster,a1	; Rport
		Moveq	#1,d0		; 1 Pixel Links
		Moveq	#0,d1		; Kein Pixel hoch
		Moveq	#3,d2		; X1
		Moveq	#12,d3		; Y1
		Move.l	#396,d4		; X2
		Moveq	#30,d5		; y2
		jsr	-396(a6)
		bra.s	SLoop
Ende		Rts

	; Hier nun fix die NewWindow-Struktur

NewWindow	dc.w	120
		dc.w	43
		dc.w	400
		dc.w	40
		dc.b	0,1
		dc.l	0,6,0,0
		dc.l	Titel
		dc.l	0		; Screen
		dc.l	0
		dc.w	120
		dc.w	43
		dc.w	400
		dc.w	40
		dc.w	1

Font	dc.l	FName
	dc.w	11
	dc.w	0,2	; Normal Style,Diskfont

Font1	dc.l	FRName
	dc.w	12
	dc.w	0,2	; Normal Style,Diskfont


FName	dc.b	"courier.font",0
FRName	dc.b	"ruby.font",0
Titel	dc.b	"Scroll-Fenster",0
	ds.l	0	
Diskname	dc.b	"diskfont.library",0
GFXName		dc.b	"graphics.library",0
	ds.l	0


GFXBase		dc.l	0
Diskbase	dc.l	0
Fadr		dc.l	0
Fadr1		dc.l	0
Fenster		dc.l	0
