Version		equ	1
Revision	equ	1

		include ":include/graphics_lib.i"
		include ":include/exec_lib.i"

INITBYTE	macro
		dc.b	$e0
		dc.b	0
		dc.w	\1
		dc.b	\2
		dc.b	0
		endm
INITWORD	macro
		dc.b	$d0
		dc.b	0
		dc.w	\1
		dc.w	\2
		endm
INITLONG	macro
		dc.b	$c0
		dc.b	0
		dc.w	\1
		dc.l	\2
		endm

		move.l	#20,d0
		rts

ResidentStruct	dc.w	19196		; o. 'illegal' o. 'dc.w	$4AFC'
		dc.l	ResidentStruct
		dc.l	End
		dc.b	128
		dc.b	1
		dc.b	9
		dc.b	0
		dc.l	xxxName
		dc.l	xxxLibID
		dc.l	Start

Start		dc.l	42		; Größe der Basis = 34+Länge der Daten
		dc.l	FunctionTable
		dc.l	DataTable
		dc.l	InitLib

FunctionTable	dc.l	Open
		dc.l	Close
		dc.l	ExpugneLib
		dc.l	ExtFuncLib
		dc.l	DrawTriangle
		dc.l	GetAPen
		dc.l	GetBPen
		dc.l	-1

DataTable	INITBYTE 8,9		; Type:Library
		INITLONG 10,xxxName	; LibName
		INITBYTE 14,6		; Libraryflags
		INITWORD 20,Version	
		INITWORD 22,Revision
		INITLONG 24,xxxLibID	; LibIDString
		dc.l	0		; End

InitLib		movem.l	a1/a5,-(sp)
		move.l	d0,a5
		lea.l	_xxxBase(pc),a1
		move.l	d0,(a1)
		move.l	a0,34(a5)
		lea.l	gfxname(pc),a1
		clr.l	d0
		jsr	_LVOOpenLibrary(a6)
		tst.l	d0
		beq.s	InitFailed
		move.l	d0,38(a5)
		move.l	a5,d0
EndInit		movem.l	(sp)+,a1/a5
		rts
InitFailed	clr.l	d0
		bra.s	EndInit

Open		addq.w	#1,32(a6)
		bclr.b	#3,14(a6)
		move.l	a6,d0
		rts

Close		subq.w	#1,32(a6)
		btst.b	#3,14(a6)
		beq.s	EndClose
		bsr.s	ExpugneLib
EndClose	rts

ExpugneLib	movem.l	d7/a1/a5/a6,-(sp)
		move.l	a6,a5
		tst.w	32(a5)
		beq.s	DiscardLib
		bset	#3,14(a5)
		clr.l	d0
ExpEnd		movem.l	(sp)+,d7/a1/a5/a6
		rts
DiscardLib	move.l	_SysBase,a6
		move.l	38(a5),a1
		jsr	_LVOCloseLibrary(a6)
		move.l	a5,a1
		jsr	_LVORemove(a6)
		move.l	34(a5),d7
		clr.l	d0
		move.l	a5,a1
		move.w	16(a5),d0
		sub.l	d0,a1
		add.w	18(a5),d0
		jsr	_LVOFreeMem(a6)
		move.l	d7,d0
		bra.s	ExpEnd

ExtFuncLib	clr.l	d0
		rts

DrawTriangle	movem.l	a5/a6,-(sp)	; gebraute Register retten
		movem.l	d0/d1,-(sp)	; d0 und d1 werden noch gebraucht
		move.l	a1,a5		; RastPort aufheben
		move.l	_xxxBase(pc),a6	; Basis der graphics.library
		move.l	38(a6),a6	; holen
		jsr	_LVOMove(a6)
		move.l	d2,d0
		move.l	d3,d1
		move.l	a5,a1		; RastPort zurück
		jsr	_LVODraw(a6)
		move.l	d4,d0
		move.l	d5,d1
		move.l	a5,a1		; und noch einmal
		jsr	_LVODraw(a6)
		movem.l	(sp)+,d0/d1	; d0 und d1 zurück
		move.l	a5,a1		; und wieder RastPort zurück
		jsr	_LVODraw(a6)
		clr.l	d0		; kein Returncode
		movem.l	(sp)+,a5/a6	; Register zurück
		rts

GetAPen		clr.l	d0
		move.b	25(a1),d0
		rts

GetBPen		clr.l	d0
		move.b	26(a1),d0
		rts

xxxName		dc.b	'xxx.library',0
		even
xxxLibID	dc.b	'Frei wählbarer Identifikationsstring',13,10,0
		even
gfxname		dc.b	'graphics.library',0
		even
_xxxBase	ds.l	1

End
		END
