************************************
*** Window-Mauszeiger-Demo V1.00 ***
************************************
** Datum: 21.03.94 ******
*************************
* ----------------------------------------------------------------------- *
* - Dieses Demo-Programm zeigt Ihnen, wie Sie OPAA-Sprites, die im
* - ASS-Format gesichert wurden, einem Fenster als Mauszeiger zuordnen.
* -
* - Hierzu werden zwei Fenster auf dem Workbench-Screen geöffnet. Diesen
* - beiden Fenstern werden jeweils unterschiedliche Mauszeiger zugeordnet.
* -
* - Die Mauszeiger wurden mit OPAA entworfen und wurden in der Datei
* - OPAA:Objects/MousePtr.ass
* - im ASS-Format gesichert.
* -
* - Sie können das Aussehen der hier zugrundeliegenden Sprites mit OPAA
* - nach belieben ändern. Beachten Sie jedoch stets folgendes:
* - -> max. 4 Farben verwenden
* - -> Sprites dürfen hier nicht breiter als 16 Bildpunkte sein
* - -> es müssen genau zwei Objekte in der Datei gesichert sein
* - -> Sprites im ASS-Format sichern
* - 
* - Diese Einschränkungen werden uns durch das System auferlegt.
* ----------------------------------------------------------------------- *

			include	"OPAA:Assembler/Includes/OPAA-Files.i"

* - Libraries - *
*--  exec  --*
_LVOAllocMem		EQU	-198 
_LVOFreeMem		EQU	-210 
_LVOOpenLibrary		EQU	-552 
_LVOCloseLibrary	EQU	-414
_LVOWaitPort		EQU	-384 


* --- dos --- *
_LVOOpen		EQU	-30 
_LVOClose		EQU	-36 
_LVORead		EQU	-42 

* --- intuition --- *
_LVOOpenWindow		EQU	-204 
_LVOCloseWindow		EQU	-72 
_LVOSetPointer		EQU	-270


* ---------- *
* - Makros - *
* ---------- *
callsys		macro
		move.l	4.w,a6
		jsr	_LVO\1(a6)
		endm
callint		macro
		move.l	_IntBase,a6
		jsr	_LVO\1(a6)
		endm
calldos		macro
		move.l	_DosBase,a6
		jsr	_LVO\1(a6)
		endm
	


* ------------------ *
* - Programmbeginn - *
* ------------------ *
_main		lea.l	_DosName,a1
		moveq	#0,d0
		callsys	OpenLibrary
		move.l	d0,_DosBase
		beq	.LibErr0
	
		lea.l	_IntName,a1
		moveq	#0,d0
		callsys	OpenLibrary
		move.l	d0,_IntBase
		beq	.LibErr1
		

		  bsr.s	sub	* Spring ins Hauptprogramm


		move.l	_IntBase,a1
		callsys	CloseLibrary

.LibErr1	move.l	_DosBase,a1
		callsys	CloseLibrary

.LibErr0	moveq	#0,d0
		rts

* ----------------------- *
* - Versionsbezeichnung - *
* ----------------------- *
		dc.b	"$VER Mauszeiger-Demo V1.00 (21.03.94)"
		even 


* ----------------- *
* - Hauptprogramm - *
* ----------------- *
sub		

* - Windows öffnen - *
		lea.l	_NewWndw1,a0
		callint	OpenWindow
		move.l	d0,_Wndw1Ptr
		beq	.Error1
		
		lea.l	_NewWndw2,a0
		callint	OpenWindow
		move.l	d0,_Wndw2Ptr
		beq	.Error2
		
* - OPAA-ASS-Sprites einlesen - *
		move.l	#1000,d0	* Größe des zu reservierenden Speichers
		move.l	#2!$10000,d1	* Chip, clear
		callsys	AllocMem
		move.l	d0,_SprtStore
		beq	.Error3

		move.l	#_FileName,d1
		move.l	#1005,d2
		calldos	Open
		move.l	d0,_FileHandle
		beq	.Error4

		move.l	d0,d1
		move.l	_SprtStore,d2
		move.l	#1000,d3
		calldos	Read
		
		move.l	_FileHandle,d1
		calldos	Close

* - Sprites den Fenstern als Mauszeiger zuordnen - *
		move.l	_SprtStore,a0
		add.l	#ass_IDLen,a0
		move.w	ass_OffsList(a0),d0	* Zeiger auf Objektdaten von Obj. #1
		lea.l	ass_GfxData(a0,d0.w),a1	* Zeiger auf Grafikdaten
		move.w	ass_Height(a0,d0.w),d0	* Sprite-Höhe

		move.l	_Wndw1Ptr,a0
		moveq	#16,d1
		moveq	#0,d2
		moveq	#0,d3
		callint	SetPointer

		move.l	_SprtStore,a0
		add.l	#ass_IDLen,a0
		move.w	ass_OffsList+2(a0),d0	* Zeiger auf Objektdaten von Obj. #2
		lea.l	ass_GfxData(a0,d0.w),a1	* Zeiger auf Grafikdaten
		move.w	ass_Height(a0,d0.w),d0	* Sprite-Höhe

		move.l	_Wndw2Ptr,a0
		moveq	#16,d1
		moveq	#0,d2
		moveq	#0,d3
		callint	SetPointer

* - Warte, bis Schließen-Gadget aktiviert - *
		move.l	_Wndw1Ptr,a0
		move.l	$56(a0),a0	* User-Port
		callsys	WaitPort


* - Alle Daten wieder freigeben - *
.Error4		move.l	_SprtStore,a1
		move.l	#1000,d0
		callsys	FreeMem

.Error3		move.l	_Wndw2Ptr,a0
		callint	CloseWindow

.Error2		move.l	_Wndw1Ptr,a0
		callint	CloseWindow

.Error1		rts	


**************
* Strukturen *
**************
_NewWndw1	dc.w	0,12,250,150
		dc.b	3,1
		dc.l	$200		* Message, wenn Close Window
		dc.l	1!2!4!8!$1000
		dc.l	0,0,_Wndw1Name
		dc.l	0
		dc.l	0
		dc.w	100,50,640,256
		dc.w	1		* Workbench-Screen
_Wndw1Name	dc.b	"Mauszeiger 1:",0
		even

_NewWndw2	dc.w	260,12,250,150
		dc.b	3,1
		dc.l	0
		dc.l	1!2!4
		dc.l	0,0,_Wndw2Name
		dc.l	0
		dc.l	0
		dc.w	100,50,640,256
		dc.w	1		* Workbench-Screen
_Wndw2Name	dc.b	"Mauszeiger 2:",0
		even


**********
* Labels *
**********

* - Libraries - *

_IntName	dc.b	"intuition.library",0
_DosName	dc.b	"dos.library",0
_FileName	dc.b	"OPAA:Objects/MousePtr.ass",0
		even
_IntBase	ds.l	1
_DosBase	ds.l	1

_Wndw1Ptr	ds.l	1	* Zeiger auf vollständige Wndw-Struktur
_Wndw2Ptr	ds.l	1

_SprtStore	ds.l	1	* Adresse, in die die Datei geladen wird.

_FileHandle	ds.l	1	

		End
